Linux中符号命令详解
Linux中的符号是系统操作和命令行交互的核心语言,不同符号在文件系统、命令行、正则表达式、权限管理、环境变量等场景中具有不同含义
一、文件系统路径符号
用于表示文件或目录的位置,是Linux中最基础的符号集。
| 符号 | 含义 | 示例 |
|---|---|---|
/ |
根目录(文件系统的顶级目录) | cd / → 进入根目录;/etc/passwd → 根目录下的etc目录中的passwd文件 |
~ |
当前用户的家目录 | cd ~ → 回到家目录(如/home/user);~/.bashrc → 家目录下的.bashrc文件 |
. |
当前目录 | ./script.sh → 运行当前目录下的script.sh脚本;ls . → 列出当前目录内容 |
.. |
父目录(当前目录的上一级目录) | cd .. → 进入父目录;ls ../docs → 列出父目录下的docs目录内容 |
- |
前一个工作目录 | cd - → 切换到前一个工作目录(如从/home/user到/etc,再cd -回到/home/user) |
二、命令行操作符号
用于控制命令的输入、输出、流程和后台执行,是命令行高效操作的关键。
1. 管道与重定向
| 符号 | 含义 | 示例 |
|---|---|---|
| ` | ` | 管道:将前一个命令的输出 作为后一个命令的输入 |
> |
覆盖重定向:将命令输出覆盖写入文件(文件不存在则创建) | echo "Hello Linux" > test.txt → 将"Hello Linux"写入test.txt(覆盖原有内容) |
>> |
追加重定向:将命令输出追加写入文件(文件不存在则创建) | echo "More content" >> test.txt → 向test.txt追加一行内容 |
< |
输入重定向:将文件内容作为命令的输入 | sort < numbers.txt → 对numbers.txt中的内容排序(等价于sort numbers.txt);mysql -u root -p < db.sql → 执行db.sql中的SQL命令 |
2. 后台执行与流程控制
| 符号 | 含义 | 示例 |
|---|---|---|
& |
后台运行:命令在后台执行,不阻塞终端 | nohup ./server.sh & → 后台运行server.sh(nohup防止终端关闭后进程终止);sleep 10 & → 后台睡眠10秒 |
&& |
逻辑与:前一个命令成功(退出状态0)才执行后一个命令 | make && make install → 编译成功后才执行安装;ping -c 1 127.0.0.1 && echo "OK" → ping通本地后输出OK |
| ` | ` |
三、正则表达式与通配符
1. 通配符(Shell层面,用于匹配文件/目录名)
| 符号 | 含义 | 示例 |
|---|---|---|
* |
匹配任意数量的字符(包括0个) | ls *.txt → 列出所有.txt结尾的文件;rm log* → 删除所有以log开头的文件 |
? |
匹配单个字符 | ls ?.txt → 列出所有文件名长度为1且以.txt结尾的文件(如a.txt、1.txt);ls file?.log → 匹配file1.log、fileA.log等 |
[] |
匹配字符集中的任意一个字符 | ls [0-9].txt → 列出以数字开头的.txt文件(如1.txt、2.txt);ls [a-zA-Z].log → 匹配以字母开头的.log文件 |
[^] |
匹配不在字符集中的任意一个字符 | ls [^0-9].txt → 列出不以数字开头的.txt文件;ls [^a-zA-Z].log → 匹配不以字母开头的.log文件 |
2. 正则表达式(命令层面,如grep、sed、awk)
| 符号 | 含义 | 示例 |
|---|---|---|
* |
匹配前一个字符0次或多次 | grep "a*" file.txt → 匹配包含0个或多个a的行(如空行、a、aa、aaa等);sed 's/ab*//' file.txt → 删除ab、abb、abbb等 |
? |
匹配前一个字符0次或1次(需开启扩展正则,如grep -E) | grep -E "a?" file.txt → 匹配包含0个或1个a的行;sed -E 's/ab?//' file.txt → 删除a或ab |
+ |
匹配前一个字符1次或多次(需扩展正则) | grep -E "a+" file.txt → 匹配包含至少1个a的行;sed -E 's/ab+//' file.txt → 删除ab、abb、abbb等 |
[] |
匹配字符集中的任意一个字符 | grep "[0-9]" file.txt → 匹配包含数字的行;sed 's/[a-z]//g' file.txt → 删除所有小写字母 |
[^] |
匹配不在字符集中的任意一个字符 | grep "[^0-9]" file.txt → 匹配包含非数字的行;sed 's/[^a-zA-Z]//g' file.txt → 删除所有非字母字符 |
^ |
匹配行首 | grep "^#" file.txt → 匹配以#开头的行(注释行);sed 's/^/-- /' file.txt → 每行开头添加-- |
$ |
匹配行尾 | grep "$" file.txt → 匹配空行;sed 's/$/--/' file.txt → 每行结尾添加-- |
\ |
转义字符:将特殊字符视为普通字符 | grep "\." file.txt → 匹配包含.的行(.在正则中是匹配任意字符,需转义);echo "\*" → 输出* |
四、权限与文件属性符号
Linux文件/目录的权限通过ls -l查看,如-rw-r--r--,其中符号含义如下:
| 符号 | 含义 | 示例 |
|---|---|---|
- |
普通文件 | -rw-r--r-- → 普通文件 |
d |
目录 | drwxr-xr-x → 目录 |
l |
符号链接(软链接) | lrwxrwxrwx → 符号链接 |
b |
块设备文件(如硬盘) | brw-rw---- → 块设备 |
c |
字符设备文件(如键盘、终端) | crw-rw-r-- → 字符设备 |
r |
读权限 | -r--r--r-- → 所有用户都有读权限 |
w |
写权限 | -rw-rw-rw- → 所有用户都有写权限 |
x |
执行权限(文件)/进入权限(目录) | -rwxr-xr-x → 所有者有读写执行权限,组和其他用户有读执行权限 |
s |
SetUID/SetGID权限(文件执行时继承所有者/组的权限) | -rwsr-xr-x → SetUID权限(如passwd命令);drwxr-sr-x → SetGID权限(目录) |
t |
粘滞位(目录中只有所有者能删除自己的文件) | drwxrwxrwt → /tmp目录(粘滞位,防止其他用户删除文件) |
五、环境变量与特殊变量符号
| 符号 | 含义 | 示例 |
|---|---|---|
$ |
取环境变量的值 | echo $HOME → 输出当前用户的家目录(如/home/user);echo $PATH → 输出环境变量PATH(命令搜索路径) |
${} |
明确变量边界(避免歧义) | echo ${HOME}_dir → 输出/home/user_dir(若不用,则'echo,则'echo HOME_dir会寻找HOME_dir变量,可能为空);echo ${PATH##*/}` → 取PATH中最后一个目录(参数扩展) |
$? |
上一个命令的退出状态(0=成功,非0=失败) | ls non_existent_file; echo $? → 输出2(ls失败);echo "test"; echo $? → 输出0(成功) |
$$ |
当前进程的进程ID(PID) | echo $$ → 输出当前shell的PID(如1234);kill $$ → 终止当前shell |
$! |
最后一个后台进程的PID | sleep 10 &; echo $! → 输出sleep进程的PID(如5678);kill $! → 终止最后一个后台进程 |
$0 |
当前脚本的文件名 | echo $0 → 若在script.sh中执行,输出script.sh |
$1-$9 |
脚本或函数的位置参数 | ./script.sh arg1 arg2; echo $1 → 输出arg1;echo $2 → 输出arg2 |
六、其他常用符号
| 符号 | 含义 | 示例 |
|---|---|---|
# |
注释(Shell脚本中);root用户提示符 | # 这是一个注释 → 脚本中的注释;root@localhost ~# → root用户的命令提示符 |
! |
历史命令扩展 | !ls → 执行最后一次ls命令;!100 → 执行历史中第100条命令;!mkdir → 执行最后一次mkdir命令 |
@ |
远程用户/主机分隔符 | scp user@192.168.1.100:file.txt ./ → 从远程主机192.168.1.100的user用户家目录复制file.txt到本地 |
% |
作业控制(后台进程) | jobs → 列出后台作业(如+ Running sleep 10 &);fg %1 → 将作业1切换到前台 |