shell-2-三剑客?四剑客了解一下
Posted 广深-小龙 --扬帆起航!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell-2-三剑客?四剑客了解一下相关的知识,希望对你有一定的参考价值。
一、grep、sed、awk称为:三剑客
三剑客听说是入门运维的小伙伴们是必备的技能,但广深小龙不是运维也大致学习了解一下。
但也有人说是四剑客,包括:find 当然我们也会一起了解下,如下图三剑客的价值犹如同sql的语法的重要性。
二、擅长过滤:grep
支持正则表达式,通常作为连接运行下一个命令。
格式:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
参数:
- -a 以文本方式搜索
- -c 找到符合的行数的文件个数
- -i 忽略大小写
- -v 反向选择
- -h 查询多文件时不显示文件名
- -l 只输出包含匹配字符的文件名
- -s 不显示错误信息
- 等等
1、过滤配置文件的注释和空行:
[root@iZbp19lugf22zbsubsf1y6Z ~]# grep -v "#" ~/hrun_django/httprunnermanger_web/HttpRunnerManager/settings.py|grep -v "^$"
2、使用正则匹配:
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# grep "[1-9]" t.txt vm.swappiness = 6661111 [root@iZbp19lugf22zbsubsf1y6Z gsxl]#
我还是常用这种:杀掉进程:①ps -ef | grep mysql ②ps -aux | grep python|xargs kill -9
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# ps -ef | grep mysql root 2580 10112 0 12:53 pts/0 00:00:00 grep --color=auto mysql polkitd 13411 13395 0 Apr04 ? 00:06:01 mysqld root 23790 23603 0 Mar30 ? 00:00:00 /bin/sh /opt/zbox/run/mysql/mysqld_safe --defaults-file=/opt/zbox/etc/mysql/my.cnf 65534 24026 23790 0 Mar30 ? 00:00:01 /opt/zbox/run/mysql/mysqld --defaults-file=/opt/zbox/etc/mysql/my.cnf --basedir=/opt/zbox/run/mysql --datadir=/opt/zbox/data/mysql --plugin-dir=/opt/zbox/run/lib/mysql/plugin --user=nobody --log-error=/opt/zbox/logs/mysql_error.log --pid-file=/opt/zbox/tmp/mysql/mysqld.pid --socket=/opt/zbox/tmp/mysql/mysql.sock --port=3306 [root@iZbp19lugf22zbsubsf1y6Z gsxl]#
三、增删查改:sed
格式:sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数:
- -e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
- -f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
- -h或--help 显示帮助。
- -n或--quiet或--silent 仅显示script处理后的结果。
- -V或--version 显示版本信息。
动作:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
- i :插入, 保存文件,如果不加-i参数,那么只是打印显示,源文件不会改变;
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
1、替换文件内容:sed "s/替换内容/新内容/g" 文件名
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# cat t.txt vm.swappiness = 6661111 asd hello # 加上 -i 参数既不打印显示,且保存文件 [root@iZbp19lugf22zbsubsf1y6Z gsxl]# sed "s/asd/gsxl/g" t.txt vm.swappiness = 6661111 gsxl hello
2、替换指定行内容:sed -i "2c\\gsxl" t.txt
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# cat t.txt vm.swappiness = 6661111 asd hello [root@iZbp19lugf22zbsubsf1y6Z gsxl]# sed -i "2c\\gsxl" t.txt [root@iZbp19lugf22zbsubsf1y6Z gsxl]# cat t.txt vm.swappiness = 6661111 gsxl hello
四、统计计算:awk
格式:akw \'条件{动作}\'
简单打印此文件的全部内容:awk \'{print $0}\' /etc/passwd
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# awk \'{print $0}\' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
常用AWK内置变量,当然还有运算符、函数等更多请自行了解,小龙能力有限只是了解一下。
变量 | 描述 |
---|---|
$n | 当前记录的第n个字段,字段间由FS分隔 |
$0 | 完整的输入记录 |
ARGC | 命令行参数的数目 |
ARGIND | 命令行中当前文件的位置(从0开始算) |
ARGV | 包含命令行参数的数组 |
CONVFMT | 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 |
ERRNO | 最后一个系统错误的描述 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
FILENAME | 当前文件名 |
FNR | 各文件分别计数的行号 |
FS | 字段分隔符(默认是任何空格) |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
NF | 一条记录的字段的数目 |
NR | 已经读出的记录数,就是行号,从1开始 |
OFMT | 数字的输出格式(默认值是%.6g) |
OFS | 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符 |
ORS | 输出记录分隔符(默认值是一个换行符) |
RLENGTH | 由match函数所匹配的字符串的长度 |
RS | 记录分隔符(默认是一个换行符) |
RSTART | 由match函数所匹配的字符串的第一个位置 |
SUBSEP | 数组下标分隔符(默认值是/034) |
五、查找文件:find
格式:find path -option [ -print ] [ -exec -ok command ] {} \\;
成为四剑客的:find 所以我们也应了解一下。查找可以使用通配符。
1、-type参数,文件类型:①文件:f ②目录:d
[root@iZbp19lugf22zbsubsf1y6Z ~]# find ~/gsxl/ -name *.txt -type f /root/gsxl/t.txt
2、-mtime参数,查找匹配文件创建的前或后时间
[root@iZbp19lugf22zbsubsf1y6Z ~]# find ~/gsxl/ -name *.txt -mtime -1 /root/gsxl/t.txt [root@iZbp19lugf22zbsubsf1y6Z ~]# find ~/gsxl/ -name *.txt -mtime +30 [root@iZbp19lugf22zbsubsf1y6Z ~]#
3、-size参数,字母是大写,1M以上的文件: +1M
[root@iZbp19lugf22zbsubsf1y6Z ~]# find / -name *.txt -size +1M /usr/share/perl5/Unicode/Collate/allkeys.txt /usr/share/hwdata/oui.txt /usr/share/hwdata/iab.txt
4、-perm参数,查找文件权限为755
[root@iZbp19lugf22zbsubsf1y6Z ~]# find / -name *.txt -perm 755 /usr/lib/firmware/ivtv-firmware-license-oemihvisv.txt /usr/lib/firmware/ivtv-firmware-license-end-user.txt [root@iZbp19lugf22zbsubsf1y6Z ~]#
如何批量改文件权限,当然目录也可以type参数改为:d,就可以通过用find来批量改:
[root@iZbp19lugf22zbsubsf1y6Z gsxl]# find ~/gsxl/ -type f -exec chmod -R 644 {} \\; [root@iZbp19lugf22zbsubsf1y6Z gsxl]# ll total 8 drwxr-xr-x 2 root root 4096 Apr 11 22:55 test -rw-r--r-- 1 root root 34 Apr 12 10:10 t.txt
当然以上四剑客还有很多用法,这只是其中一小小部分,更多使用请根据实际需求进行度娘一下,哈哈!
欢迎来大家QQ交流群一起学习:482713805 !!!
以上是关于shell-2-三剑客?四剑客了解一下的主要内容,如果未能解决你的问题,请参考以下文章