Linux常用指令
[toc]
查找 find
查找文件或目录路径
用于在硬盘中查找文件或目录的路径(速度较慢)
find path [-option] [查找条件]
-name
根据文件名进行精确查找
example:
1 | find / -name test.txt # 从根目录下开始查找精确匹配名字的文件路径 |
查看文件内容
- 常用的查看文件内容命令:
- cat: 直接查阅文件内容,不能翻页
- more: 翻页查看文件内容
- less: 翻页阅读,和 more 类似,但操作按键比 more 更弹性
- head: 查看文档的前面几行内容,默认 10 行
- tail: 查看文档的最后几行内容,默认 10 行
查找文件内容
grep 命令,在文本中或 stdin 中查找匹配字符串
grep [-cin] '目标字符串' filename
grep(global search regular expression(RE) and print out the line, 全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文件,并把匹配的行打印出来。
常用选项:
-c
: 计算找到’搜索字符串’的行数-i
: 忽略大小写的不同,所以大小写视为相同-n
: 顺便输出行号-l
: 根据文件内容查找文件,只显示包含该内容的文件名-r
: 根据文件内容递归查找文件,并打印对应内容-I
: 表示忽略二进制文件
1 | grep 'hello' * # 在当前目录搜索带有'hello'的文件 |
管道命令
管道是一种通信机制,通常用于进程间的通信(也可通过 socket 进行网络通信),它表现出来的形式就是将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
管道又分为匿名管道
和具名管道
(这里将不会讨论在源程序中使用系统调用创建并使用管道的情况,它与命令行的管道在内核中实际都是采用相同的机制)。我们在使用一些过滤程序时经常会用到的就是匿名管道,在命令行中由 | 分隔符表示,| 在前面的内容中我们已经多次使用到了。具名管道简单的说就是有名字的管道,通常只会在源程序中用到具名管道。
- 管道:将一个命令的输出连接到另一个命令的输入。
- 符号:
|
- 例如:
cat /etc/passwd | grep oracle
(通常与 grep 配合用于过滤查找)
输出重定向
在更多了解 Linux 的重定向之前,我们需要先知道一些基本的东西,前面我们已经提到过 Linux 默认提供了三个特殊设备,用于终端的显示和输出,分别为 stdin
(标准输入,对应于你在终端的输入,文本描述符 0),stdout
(标准输出,对应于终端的输出,文本描述符 1),stderr
(标准错误输出,对应于终端的输出,文本描述符 2)。
- 标准文件:
stdin
,stdout
,stderr
- 对应的文件描述符为 0, 1, 2
- 输出重定向:
>
(覆盖导入),>>
(从文件末尾导入) - 输入重定向:
<
- 例如:
1 | ls -l > ls.out # 将ls -l命令重定向到文件ls.out中 |
管道默认是连接前一个命令的输出到下一个命令的输入,而重定向通常是需要一个文件来建立两个命令的连接。
cut 命令
cut 命令,打印每一行的某一字段。
打印 /etc/passwd 文件中以 : 为分隔符的第 1 个字段和第 6 个字段分别表示用户名和其家目录:
1 | cut /etc/passwd -d ':' -f 1,6 |
打印 /etc/passwd 文件中每一行的前 N 个字符:
1 | # 前五个(包含第五个) |
wc 命令
wc 命令,简单小巧的计数工具
wc 命令用于统计并输出一个文件中行、单词和字节的数目,比如输出 /etc/passwd 文件的统计信息
1 | wc /etc/passwd |
分别只输出行数、单词数、字节数、字符数和输入文本中最长一行的字节数:
1 | # 行数 |
sort 命令
将输入按照一定方式排序,然后再输出,它支持的排序有按字典排序,数字排序,按月份排序,随机排序,反转排序,指定特定字段进行排序等等。
默认为字典排序:
1 | cat /etc/passwd | sort |
反转排序:
1 | cat /etc/passwd | sort -r |
按特定字段排序:
1 | at /etc/passwd | sort -t':' -k 3 |
上面的-t
参数用于指定字段的分隔符,这里是以":"作为分隔符;-k
字段号用于指定对哪一个字段进行排序。这里/etc/passwd 文件的第三个字段为数字,默认情况下是以字典序排序的,如果要按照数字排序就要加上-n
参数。
uniq 去重命令
uniq 命令可以用于过滤或者输出重复行。
- 过滤重复行
我们可以使用 history 命令查看最近执行过的命令(实际为读取 ${SHELL}_history 文件,如我们环境中的 .zsh_history 文件),不过你可能只想查看使用了哪个命令而不需要知道具体干了什么,那么你可能就会要想去掉命令后面的参数然后去掉重复的命令:
1 | history | cut -c 8- | cut -d ' ' -f 1 | uniq |
然后经过层层过滤,你会发现确是只输出了执行的命令那一列,不过去重效果好像不明显,仔细看你会发现它确实去重了,只是不那么明显,之所以不明显是因为 uniq 命令只能去连续重复的行,不是全文去重,所以要达到预期效果,我们先排序:
1 | history | cut -c 8- | cut -d ' ' -f 1 | sort | uniq |
这就是 Linux/UNIX 哲学吸引人的地方,大繁至简,一个命令只干一件事却能干到最好。
- 输出重复行
1 | # 输出重复过的行(重复的只输出一个)及重复次数 |
文本处理命令还有很多,下一节将继续介绍一些常用的文本处理的命令。
xargs 命令
xargs
是一条 UNIX 和类 UNIX 操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
这个命令在有些时候十分有用,特别是当用来处理产生大量输出结果的命令如 find,locate 和 grep 的结果,详细用法请参看 man 文档。
1 | cut -d: -f1 < /etc/passwd | sort | xargs echo |
上面这个命令用于将 /etc/passwd
文件按 :
分割取第一个字段排序后,使用 echo
命令生成一个列表。
Tests
- data1 文件里记录是一些命令的操作记录,现在需要你从里面找出出现频率次数前 3 的命令并保存在 /home/shiyanlou/result。
1 | cat data1 |cut -c 8-|sort|uniq -dc|sort -rn -k1 |head -3 > /home/shiyanlou/result |