运维离不开linux,linux离不开命令操作,熟悉一些好用的linux命令会极大的提升你的工作效率,命令之间灵活的搭配更是会爆发无穷的生产力
1·find命令
一般刚刚接触linux的人可能仅仅只是把find命令当成了查找文件的命令,但是它的强大远远不止查找文件,举例如下,批次见可以自由结合使用满足不同使用场景
查找指定名字的文件或目录
find ./ -name xxx.sh
查找指定大小范围的文件或目录
find ./ -size +50k -a -size -2M (-a 是而且,-o是或者,-not 是相反)
查找指定文件类型
find ./ -type f (普通文件f 文件夹文件d 符号文件l 字符设备c 块设备b等)
查找指定修改时间的文件或目录
方式1:
【 -atime 访问时间(天) 】【 -ctime 改变状态的时间(天) 】 【 -mtime 修改的时间(天) 】【 -amin 访问时间(分钟) 】【 -cmin 改变状态的时间(分钟) 】 【 -mmin 修改的时间(分钟) 】
find ./ -mtime +1 -a mtime -3 (修改时大于1天,小于3天)
find ./ -mmin +1 -a mmin -3 (修改时大于1分钟,小于3分钟)
方式2:
-newerXY
,用于所寻找的文件的时间戳 X
比参照文件的时间戳 Y
更新一些的文件,X
和 Y
可选参数:【a
: 参照文件的访问时间 】【B
: 参照文件的创建时间】【c
:参照文件的 inode 状态改变时间【 m
:参照文件的修改时间】【t
:直接指定一个绝对时间】
find ./ -newermt '2020-12-02' (修改时间小于2020-12-02的文件或目录)
查找到文件后做出对应操作
-delete 【删除查找到的文件】
find ./ -name xx.sh -delete
-exec 命令 {} ; 【执行命令(当前目录下执行)】
find ./ -name README.txt -exec ls {} ;
find / -name 10086.txt -exec cat {} ;
-ok 命令 {} ; 【 执行命令,执行前会询问(当前目录下执行)】
find ./ -name README.txt -ok ls {} ;
find / -name 10086.txt -ok cat {} ;
-execdir 命令 {} ; 【执行命令(在查找到的文件或目录所在目录下执行)】
find / -name 10086.txt -execdir pwd ;
-ok 命令 {} ; 【执行命令,执行前会询问(在查找到的文件或目录所在目录下执行)】
find / -name 10086.txt -okdir pwd ;
2·xargs命令
xargs命令是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。一般是和管道一起使用。
这里只讲我认为最强大的 -I 或者是-i 参数的功能(根据自己的linux),别的使用我这里不讲,因为我觉得不是最重要的功能
这里简单举例和find和awk的搭配,能搭配的命令那是千变万化的
命令格式: xargs -I {} 命令{}
-I参数和find搭配
find / -name 10086.txt | xargs -I {} cat {}
-I参数和awk搭配
ll |awk '{print $9}' |xargs -I {} mv {} {}_bak
-d和-n参数
xargs默认的命令就是echo,-d可以指定分割符,-n可以指定一次输出的数量
3·awk和sort命令
awk命令这里就不详细介绍,简单的举几个使用的例子,具体的awk使用介绍可以看我的这篇文章
sort命令都是和别的命令搭配使用的,往往是别的命令完成数据的统计,sort命令则对统计出来的数据信息做一个排序,这里简单举例和awk的搭配,和别的命令搭配也是类似
sort常用参数:【-k 指定用第几列配许】【-n 按照数值大小排序】【-r 以从大到小的顺序排序】【d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。】
举例:a.acc日志格式如下:
100.120.239.186 - - [15/Mar/2020:11:12:40 +0800] "HEAD / HTTP/1.0" 200 273 "-" "-"
统计各个IP的访问量,并排序
awk '{a[$1]++}END{for(i in a) print i,a[i] }' a.acc | sort -n -r -k
统计200状态的各个IP的访问量,并排序
awk '$9==200{a[$1]++}END{for(i in a) print i,a[i] }' a.acc | sort -n -r -k 2
统计5-10行区间内 各个IP的访问量,并排序
awk '{if(NR>=5&&NR<=10)a[$1]++}END{for(i in a)print i,a[i]}' a.acc | sort -n -r -k 2