Linux 进阶命令
除了前面提到的基本的 linux 命令之外,还有一些功能强大的其它命令,学习这些命令,能够有效提升我们的开发效率。
文件查找命令 find
find 命令用于查找指定的文件,可以按照文件大小、文件名称、文件类型等进行查找,具体用法如下所示:
find path [params]
-name file_name # 精确匹配,文件名可以包含通配符 *
-iname file_name # 不区分大小写精确匹配
-type file_type # 查找指定类型的文件,类型可以是 d 目录、f 文件、s socket 等
-size n # 查找指定大小的文件,+1k 表示超过 1k 的文件,-1k 表示小于 1k 的文件,单位可以是K、M、G
内容查找命令 grep
grep 命令用于查找文件中符合指定条件的内容,默认情况下显示指定内容所在行的数据。
grep [params] patten path
-v # 显示不匹配的内容行
-An # 显示匹配行的后 n 行
-Bn # 显示匹配行的前 n 行
-Cn # 显示匹配行的前后各 n 行
-c # 显示匹配次数
-E # 使用扩展的正则表达式,如 +、?、()、| 等
-i # 忽略大小进行匹配
-n # 显示匹配行的行号
-r # 递归查询目录中的所有文件内容是否包含匹配内容,等同于 -d recurse
-w # 只有全字符匹配才算匹配
内容修改命令 sed
sed 命令主要用于批量修改文件中的内容。
sed [params] path
-e script # 以脚本方式修改文件内容( e 可以省略)
-i # 在原文件中修改内容
-n # 只输出执行的结果
-r # 使用扩展的正则表达式
sed -i '' patten file # 按照指定的 patten 修改 file 文件中的内容
sed 的脚本和 vim 的修改命令类似,接下来我们看看一些常用的脚本动作有哪些:
1、增加 a
sed '3a\xxxx' file # 在文件的第三行之后增加(也就是第四行) xxxx 内容
sed '3a xxxx' file # 空格和\等价
2、删除 d
sed '3d' file # 删除第三行的内容
sed '3,5d' file # 删除第 3 到 5 行(闭区间,即 3,4,5 行均会被删除)的内容
sed '3,$d' file # 删除第 3 行到最后一行的内容
3、插入 i
sed '2i 222' file # 在第二行插如 222 一个新行
4、替换 c
sed '2c 2222' file # 替换第二行内容为 222
5、显示指定内容 p
sed -n '7p' file # 只显示第七行内容,如果没有 n 参数,会在最后显示文件所有内容
6、搜索并(删除、打印、替换)
sed '/a/d' file # 查找包含 a 的行并将其删除
sed -n '/a/p' file # 查找包含字符 a 的内容并显示,等价于 grep 操作
sed 's/old/new/g' file # 查找全部旧字符 old 并将其替换为 new,g 表示替换所有
7、在原文件上修改
上面提到的命令都是将修改后的内容输出到标准输出,而接下里的命令是会将修改后的内容写入到文件中,需要特别注意。
sed -i 's/old/new/g' file # 查找全部旧字符 old 并将其替换为 new,g 表示替换所有
值得注意的一点是,在 macos 系统上,需要多加一个参数''
,否认会报错 sed: 1: "a.txt": command a expects \ followed by text
sed -i '' 's/old/new/g' file
排序命令 sort
sort 将每行作为一个比较的对象,针对每行内容进行排序
sort [params] file
-c # 检查文件是否按照顺序排序
-f # 忽略大小写
-u # 去除重复值排序
-n # 按照数字大小进行排序
-r # 反向排序
-k # 按照指定列的指定字符按照某中格式进行排序
-t # 按照指定字符进行分割列,常与 -k 命令一起使用
-m # 将两个已排好序的文件进行合并(归并排序)
此处重点讲解一下 k
参数
-k field.character type,field.character type
sort -t " " -k 1.2 # 按照第一列第二个字符进行排序
sort -t " " -k 1.2,1.3 -k 2,2 # 只针对第一列的第二个和第三个字符进行排序,如果相同则针对第二列排序
唯一命令 uniq
uniq 用于去除文件中的重复行
uniq [params] file
-c # 在每列旁边显示重复的次数
-d # 只显示重复的行
-u # 只显示出现一次的列 c/d/u 三者只能同时出现一个
-f # 忽略前 n 列
-s # 忽略前 n 个字符
-i # 忽略大小写
参数转换命令 xargs
xargs 可以将命令的结果通过管道或者标准输入作为后续命令的参数,具体用法如下
cat a.txt |xargs # 将文件中的每一行内容通过 xargs 转换为一个参数,默认使用 echo 命令,将内容输出
-nx # 多行输出,每行最多x个参数
-d # 设置分隔符,默认使用空格、换行、tab 作为分隔符
-I {} # 将每一个参数转换为变量{},可以在后续命令中引用,如 cat a.txt|xargs -I {} echo {}+1
内容切割命令 cut
cut命令用来显示行中的指定部分,删除文件中指定字段
cut [params] file
-c # 显示指定第 n 个字符
-d # 指定分割符号,默认 tab
-f # 显示第 n 列字段,或者使用 n,m 表示第 n 列到 m 列
--complement # 显示选中列之外的列
字符替换命令 tr
tr [param] s1 s2
echo "HELLO WORLD" | tr 'A-Z' 'a-z' #字符大写替换为小写
-c # 将不属于第一字符集的字符替换为第二字符
-d # 删除属于字符集的参数
-s # 将连续多个字符看做一个字符
-t # 删除第一字符集比第二字符集多的字符
可以使用的字符类型
[:alnum:]:字母和数字
[:alpha:]:字母
[:cntrl:]:控制(非打印)字符
[:digit:]:数字
[:graph:]:图形字符
[:lower:]:小写字母
[:print:]:可打印字符
[:punct:]:标点符号
[:space:]:空白字符
[:upper:]:大写字母
[:xdigit:]:十六进制字符
资源占用查看命令 top
top 命令能查看当前系统资源占用的情况,包括 CPU、内存等,我们来看下一下具体会统计哪些信息。
前五行是统计信息区:
-
第一行系统信息:显示当前时间,启动时间,当前登录用户数量,cpu 1 分钟、5 分钟、15 分钟的负载情况;
-
第二行任务统计:2 个进程,1 个正在运行,1个正在休眠,0 个停止的 ,0 个僵尸进程;
-
第三行CPU 信息统计:0.7 %的用户空间占用,2.2%的系统占用,0%的改变过优先级的占用,96.5%的空闲 cpu 占比,0.3%的 io 等待占用 cpu,0%的硬中断占比和 0.2 的软中断占比,0%的虚拟 cpu 等待占比
-
第四行内存信息统计:2037620KB的总内存,其中219252KB 空余,904112KB占用,914256KB 的缓存占用
-
第五行swap交换分区信息:1048572KB 的交换区总量,其中1047792KB空闲,780KB 已使用
top - 13:50:53 up 4 days, 2:18, 0 users, load average: 0.05, 0.06, 0.08
Tasks: 2 total, 1 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.7 us, 2.2 sy, 0.0 ni, 96.5 id, 0.3 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 2037620 total, 219252 free, 904112 used, 914256 buff/cache
KiB Swap: 1048572 total, 1047792 free, 780 used. 1000576 avail Mem
后面则是具体的进程相关的信息,主要包含
- PID:进程 ID
- USER:用户名
- PR:进程优先级
- NI:nice值,越小优先级越高,[-20, 19]
- VIRT:进程使用的虚拟内存大小
- RES:进程使用的物理内存大小
- S:进程状态;R 运行,S 休眠,T 追踪,Z 僵尸进程,D 不可中断的睡眠状态
- SHR:共享内存大小
- %CPU:进程 cpu 占比
- %MEM:进程内存占比
- TIME+:进程运行时间
- COMMAND:启动命令
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 11832 2996 2612 S 0.0 0.1 0:00.40 bash
24 root 20 0 56204 3832 3296 R 0.0 0.2 0:00.36 top
相关命令如下:
top [param]
-o # 按照指定列进行排序
-u # 显示指定的用户进程
-n # linux 是刷新的次数,mac 是显示的行数
-i # 设置刷新时间间隔(秒)
-p # 指定进程
进程查看命令 ps
ps [params]
a # 显示所有进程
A # 显示所有进程
-e # 同上
-f # 显示进程之间的关系,PID 进程ID, PPID 父进程ID
u # 显示使用者
-u # 筛选指定用户的进程
aux # 显示所有包含其他使用者的进程
-ef # 显示所有进程