概述
包括一切通过字符终端控制计算机的方式
- Kernel & Shell
- 命令行 vs GUI
命令的要素
-
Executable
=> 可执行程序 -
Parameter
=> 参数 -
Working Directory
=> 工作目录 -
Environment Variable
=> 环境变量
ls -l
// ls -> 可执行程序
// -l 及后面所有的 -> 参数
可执行程序
- UNIX | Linux => 可执行权限 =>
x
权限 - 哪里找命令 =>
PATH
环境变量中查找 =>echo $PATH
- 在脚本的第一行指定解释器 => shebang
#!/usr/bin/env node // node shebang
参数
UNIX 参数约定
- 使用一个
-
后面只能跟一个字符,这代表一个参数 - 使用两个
--
后面可以跟着一个单词
ls -a -l -t -h
// 上面四个参数可以合并,等价于
ls -alth
ls -a // 等价于
ls --all
参数中包含空格或字符串
- 单引号 => 作为一个整体参数传入进去,不要将其中的变量展开 => 命令行不做任何处理
- 双引号 => 作为一个整体参数传入进去,并且将其中的变量展开 => 命令行会对里面的变量进行替换和展开
想传入进去单引号这个符号的话,可以加双引号或者转义
echo "'I am a boy'"
echo \'I am a boy\'
可以通过使用单引号将通配符的通配性取消,让可执行程序去解释,而不是使用命令行的传递给执行权限的值
git add * // 将所有的文件传递给 git
git add '*' // 将 * 传递给 Git,Git 自己去解释 * 的含义
Working Directory
- 启动命令的路径
- 相对路径都是相对于工作目录的路径
- 工作目录决定了程序中相对路径起始的位置
- 绝对路径 => 从根目录开始的路径
- 相对路径 => 相对于当前工作目录的路径
Environment Variable
环境变量是存在于环境中的一组键值对,会影响所有在这个环境中启动的程序的行为
- 进程 => 进程是计算机程序运行的最小单元 => 独占自己的内存空间和文件资源
- 每个进程都和一组变量相绑定 => 传递不同的环境变量可以让程序表现出不同的行为
- 在进程的 fork 过程中,环境变量可以被完全继承
- 所有的操作系统或编程语言都支持环境变量
- 通过
export
设置环境变量,通过echo
读取环境变量export AAAAA=12345 echo $AAAAA
- 容器是有点特殊的进程,它的环境变量不会受到外面环境变量的影响
- 快速传递一个环境变量 =>
AAAAA=12345 source .file
=>file
中可以读取到环境变量AAAAA
,值为 12345,退出后这个环境变量就没有了
权限系统
permission_system三个为一组:
- 第一组 => 当前用户权限
- 第二组 => 本用户组
- 第三组 => 其他用户组
每个组中:
-
r
=> readable => 读 => 二进制100
-
w
=> writable => 写 => 二进制010
-
x
=> executable => 可执行 => 二进制001
更改权限
chmod => change mode => 一条在 Unix 系统中用于控制用户对文件的权限的命令(change mode)和函数。可以使用绝对模式(八进制数字模式),符号模式指定文件的权限
例:chmod 756
:
- 7 => 当前用户权限 => 二进制
111
=> 可读可写可执行 - 5 => 本用户组 => 二进制
101
=> 可读可执行 - 6 => 其他用户组 => 二进制
110
=> 可读可写
输入 & 输出
-
Stdin
=> standard input => 标准输入 -
Stdout
=> standard output => 标准输出 -
Stderr
=> standard error => 标准错误
输出重定向
-
>
=> 将标准输出重定向到后面的文件中 =>echo 'Hello World!' > temp.txt
=> 会覆盖 -
>>
=> 将标准输出追加在后面的文件中
在进程中
-
Stdout
=> 进程描述符为1号输出 =>1>
等价于>
-
Stderr
=> 进程描述符为2号输出 =>2>
将标准错误重定向 -
java Main > output 2>&1
将标准输出和标准错误同时重定向到一个文件中
垃圾桶
- 垃圾桶路径 =>
/dev/null
- 将标准错误丢掉,丢到垃圾桶 =>
java Main 2> /dev/null
Java & 命令行
- 源代码(.java文件) --
编译
--> 字节码(.class文件) --运行
--> JVM 只认识字节码(.class
文件) - jar包 => 一堆字节码的结合
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
编译 => javac HelloWorld.java
// HelloWorld.class
public class HelloWorld {
public HelloWorld() {
}
public static void main(String[] var0) {
System.out.println("Hello World!");
}
}
执行字节码 => java HelloWorld
System Property 系统属性
在 JVM 中有 System Property,System Property 就是 JVM 里面的环境变量
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println("args:" + java.util.Arrays.toString(args));
System.out.println("env:" + System.getenv("AAA")); // Java 获取环境变量
System.out.println("property:" + System.getProperty("AAA")); // Java 获取系统属性,只在 JVM 中有效
System.out.println("java version:" + System.getProperty("java.version"));
System.out.println("user.dir:" + System.getProperty("user.dir"));
}
}
javac & java
java command
-
-D
=> 传递系统属性 =>java -DAAA=456 Main 1 2 3
-
-classpath
(-cp
) => 用于传递 jar 包 =>javac -classpath commons-lang3-3.9.jar XXX.java
-
java -cp commons-lang3-3.9.jar:. XXX
=> 启动 java,java 运行所需要的类在 jar 包中查找同时也在当前目录下查找,并启动 XXX 类
常用命令
cd // change directory
cat // 查看一个文件的内容 concatenate and print files
pwd // print working directory
ps aux // mac 查看进程列表
docker run -it ubuntu // 使用 Linux 命令行,装 docker,之后启动 ubuntu
docker run -it -e AAAAA=12345 ubuntu // 环境变量 AAAAA 值为 12345
source // Shell 内置命令,用以在当前上下文中执行某文件中的一组命令,source 命令可简写为一个点(.)
grep // 最初用于 Unix 操作系统的命令行工具。在给出文件列表活标准输入后,grep 会对匹配一个或多个正则表达式的文本进行搜索,并值输出匹配或者不匹配的行或文本
知识点
- idea 中的 run == 编译 + 运行
网友评论