Linux命令
整理 Linux 命令格式、通配符、grep、wc、管道、tee、常见命令和文件类型判断等命令行基础
命令格式
Unix/Linux 命令的基本格式为 command [options] [arguments]
- 命令名称
command:这是执行的指令,例如ls、cp、mv等 - 选项或参数
[options]:这些是用来修改命令行为的标志,通常以短选项(单个破折号和一个字母,例如l)或长选项(两个破折号和一个单词,例如-all)的形式出现;短选项一般可以组合使用 - 操作对象
[arguments]:这是命令要操作的文件、目录或其他对象
这个格式其实是文档编写和命令行工具帮助文档中的一种常见约定:
- command:表示命令名称,必选项,执行的命令。
- [options]:可选项,表示命令的选项参数。
-
:必选项,表示命令的操作对象或参数。 - [argument]:可选项,表示可选的操作对象或参数。
{choice1 choice2 choice3}:必选项,表示在给定选项中选择一个。 - -long-option:表示长选项,通常用于详细说明命令的功能。
- option: 表示短选项,通常是长选项的首字母或缩写。
- …:表示可以重复的参数或选项,表示多个相同类型的参数。
通配符
Linux 命令行支持一系列的通配符,常见的通配符如下
星号(*):匹配零个或多个字符。例如
*.txt会匹配所有以.txt结尾的文件。问号(?):匹配任意单个字符。例如
?.txt会匹配所有单个字符后跟.txt的文件,如a.txt,但不会匹配ab.txt。- 方括号([ ]):
- 匹配方括号中的任意单个字符。例如,
file[1-3].txt会匹配file1.txt、file2.txt和file3.txt。 - 可以包含字符范围,如
[a-z]匹配任意小写字母,[0-9]匹配任意数字。 - 通过使用
!或^在方括号内部的第一个位置,可以表示不匹配这个集合中的字符。例如,file[!0-9].txt匹配不含数字开头的文件名后跟.txt。
- 匹配方括号中的任意单个字符。例如,
- 花括号({ }):
- 匹配花括号内的字符串中的任意一项。例如,
file{1,2,3}.txt会匹配file1.txt、file2.txt和file3.txt。 - 也可以用来创建序列,如
{a..z}或{1..10}。
- 匹配花括号内的字符串中的任意一项。例如,
- 反斜线(\\):用于转义特殊字符,使之成为字面量。例如,
\\?[]需要在命令行中用\\来转义,如\\*表示字面量星号而不是通配符。
复杂命令
grep:grep(Global Regular Expression Print)是用于搜索文件中匹配给定模式的行的工具,支持正则表达式,允许复杂的搜索模式,功能强大。基本用法是grep 'pattern' filename在文件中搜索匹配pattern的行,并将其打印出来。例如,grep -i 'error' logfile.txt会搜索logfile.txt中所有包含“error”(不区分大小写)的行。- 常用选项:
i:忽略大小写。v:反向匹配,即显示不匹配的行。c:统计匹配行的数量。n:显示匹配行的行号。r:递归地搜索目录中的所有文件。
- 常用选项:
wc:(Word Count)用于计算文本的行数、词数或字节数。基本用法是wc [options] [file]。例如,wc -l filename.txt将输出filename.txt中的行数。- 常用选项:
l:仅计算行数。w:仅计算词数。m:仅计算字数。c:仅计算字节数。
- 常用选项:
管道符
|:用于将一个命令的输出作为另一个命令的输入,这使得用户可以将多个简单的命令链接起来,执行复杂的任务。管道符的基本语法为:command1 | command2,command1的输出会直接传递给command2作为输入。使用技巧
组合多个命令:可以使用管道符将多个命令串联起来,比如你可以使用
grep来过滤ls的输出,然后用sort来排序结果。ls -l | grep ".txt" | sort高级过滤:利用
grep命令进行正则表达式匹配,筛选出符合特定模式的行。dmesg | grep -i error文本处理:利用
awk和sed这样的文本处理工具,可以对数据进行更复杂的处理。例如,提取文本中的特定列并排序。cat data.txt | awk '{print $2}' | sort | uniq使用
tee命令同时输出到文件和屏幕:tee是三通管道,tee命令读取标准输入,将内容写入文件,并同时输出到标准输出。ls -l | tee output.txt | grep "config"
常见 Linux / Unix 命令
常见命令包括 cd、ls、mkdir、touch、rm、cp、mv、echo、cat、grep、chmod、sudo、df 和 ps。其中 cat 用来连接并打印文件内容,grep 用来在文件中搜索指定模式,df 用来显示可用磁盘空间,ps 用来显示正在运行的进程信息。
grep 的基本用法是从文件或输入中查找匹配内容。例如 grep "error" log.txt 表示在 log.txt 中查找包含 error 的行,grep -r "main" ./src 表示在 src 目录及其子目录中递归搜索 main。grep 常见选项中,-n 显示行号,-i 忽略大小写,-v 反向匹配,-r 递归搜索目录,-l 只显示文件名不显示具体匹配内容,-c 统计匹配行数,-E 使用扩展正则表达式,-w 匹配完整单词,-o 只输出匹配到的部分而不是整行。
df -h 可以用人类可读的格式显示磁盘使用情况,也可以在后面接路径,用来查看指定目录所在分区的磁盘空间。ps aux 可以查看所有进程的详细信息,其中 aux 是 BSD 风格参数,可以理解为 a、u、x 三个参数合在一起。ps -e 也可以显示所有进程,ps -f 显示完整格式,ps -u 可以查看某个用户的进程,ps -p 可以查看指定 PID 的进程。实际使用中,ps aux 经常配合 grep 查找进程,例如 ps aux | grep nginx,意思是先列出所有进程,然后从中搜索 nginx,可以用来查看某个程序是否正在运行。
在 Linux / Unix 命令里,参数风格大致可以分为 System V / POSIX 风格和 BSD 风格。System V / POSIX 风格通常带短横线,例如 -e、-f;BSD 风格通常不带短横线,例如 aux。
文件判断时经常会遇到“普通文件”这个概念。普通文件就是我们平时说的正常文件,里面存数据内容,可以读写,比如脚本、文本、图片、二进制程序等。set_sdk.sh、main.cpp、README.md、image.png、a.out 通常都属于普通文件。与普通文件相对的还有目录,例如 /home/user/project;符号链接,例如 link_to_file;设备文件,例如 /dev/null;管道文件 FIFO;以及用于进程间通信的 socket。


