每天十个shell中常用命令(二)
rename
功能:重命名文件。支持通配符
常用选项:
实例:批量命名文件
用法:rename 原文件要修改的地方 修改成什么样 修改的文件
将foo1-foo9替换为foo01-foo09:
[root@Zabbixserver test]# for i in `seq 9`; do touch foo$i;done [root@Zabbixserver test]# ls foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 [root@Zabbixserver test]# rename foo foo0 foo? [root@Zabbixserver test]# ls foo01 foo02 foo03 foo04 foo05 foo06 foo07 foo08 foo09
将.htm后缀的文件替换为.html
[root@Zabbixserver test]# touch {1,2,3}.htm [root@Zabbixserver test]# ls 1.htm 2.htm 3.htm [root@Zabbixserver test]# rename .htm .html .htm rename: renaming .htm to .html failed: No such file or directory [root@Zabbixserver test]# rename .htm .html *.htm [root@Zabbixserver test]# ls 1.html 2.html 3.html
dirname
功能:去除路径的最后一个名字
常用选项:
示例:
[root@Zabbixserver test]# dirname /home/rzrk/ /home
basename
功能:打印路径的最后一个名字
常用选项:
[root@Zabbixserver test]# basename /usr/sbin/sosreport sosreport [root@Zabbixserver test]# basename /tmp/test/1.html .html 1
du
功能:估算文件磁盘空间使用
常用选项:
-h 易读格式显示 (K,M,G)
-b 单位bytes显示
-k 单位KB显示
-m 单位MB显示
-S 只显示总大小
--max-depth=<目录层数>,超过层数的目录忽略
--exclude=file 排除文件或目录
--time 显示大小和创建时间
示例:
查看目录大小:
[root@Zabbixserver ~]# du -sh /shenjianyu/
664M /shenjianyu/
排除目录某个文件:
[root@Zabbixserver shenjianyu]# du -sh --exclude=mysql-5.5.49.tar.gz /shenjianyu/ 643M /shenjianyu/
输出当前目录下各个子目录所使用的空间:
[root@Zabbixserver shenjianyu]# du -h --max-depth=1 106M ./zabbix-3.0.4 4.0K ./b 113M ./data 366M ./php-5.5.35 4.0K ./test5 4.0K ./test6 26M ./nginx-1.9.15 4.0K ./a 4.0K ./c 664M .
输出当前目录下占用空间最大的十个文件
[root@Zabbixserver shenjianyu]# du -h --max-depth=2 /shenjianyu/| sort -h | tail 32M /shenjianyu/php-5.5.35/Zend 33M /shenjianyu/zabbix-3.0.4/src 55M /shenjianyu/zabbix-3.0.4/frontends 103M /shenjianyu/php-5.5.35/sapi 106M /shenjianyu/zabbix-3.0.4 113M /shenjianyu/data 113M /shenjianyu/data/zabbix 208M /shenjianyu/php-5.5.35/ext 366M /shenjianyu/php-5.5.35 664M /shenjianyu/
cut
功能:选取文件的每一行数据
常用选项:
-b 选中第几个字符
-c 选中多少个字符
-d 指定分隔符分字段
-f 显示选中字段
示例:
打印b字符:
[root@Zabbixserver shenjianyu]# echo "abc" | cut -b "2" b
截取abc字符:
[root@Zabbixserver shenjianyu]# echo "abcdef" | cut -c "1-3" abc
以冒号分隔,显示第二个字符:
[root@Zabbixserver shenjianyu]# echo "a:b:c" | cut -d : -f2 b
tr
功能:替换或删除字符
格式 Usage: tr [OPTION]... SET1 [SET2]
常用选项:
-c 替换SET1没有SET2的字符
-d 删除SET1中字符
-s 压缩SET1中重复的字符
-t 将SET1用SET2转换,默认
示例:
替换SET1没有SET2的字符:
echo -n "aaabbbccc" | tr -c c 1 (echo "aaabbbccc" 时,后面会有一个\n换行符,也会被替换,所以-使用n) 111111ccc
去重字符:
[root@Zabbixserver shenjianyu]# echo "aaabbbccc" | tr -s '[a-z]' abc
删除字符:
[root@Zabbixserver shenjianyu]# echo -e "aa\nbb\ncc\n" | tr -d '\n' aabbcc
转换字符:
[root@Zabbixserver shenjianyu]# echo "aaabbbccc" | tr -t a 1 111bbbccc
替换字符:
[root@Zabbixserver shenjianyu]# echo "aaabbbccc" | tr '[a-z]' '[A-Z]' AAABBBCCC
stat
功能:显示文件或文件系统状态
常用选项:
-Z 显示selinux安全上下文
-f 显示文件系统状态
-c 指定格式输出内容
-t 以简洁的形式打印
示例:
显示文件信息:
[root@Zabbixserver shenjianyu]# stat devo.txt File: `devo.txt' Size: 5 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 2645180 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2017-03-22 10:15:11.021972345 +0800 Modify: 2017-03-22 10:15:11.021972345 +0800 Change: 2017-03-22 10:15:11.021972345 +0800
只显示文件修改时间:
[root@Zabbixserver shenjianyu]# stat -c %y devo.txt (查看下修改日期) 2017-03-22 10:15:11.021972345 +0800 [root@Zabbixserver shenjianyu]# echo 1 >> devo.txt (修改下这个文件) [root@Zabbixserver shenjianyu]# stat -c %y devo.txt 2017-03-22 10:20:08.022902676 +0800
seq
功能:打印序列化数字
常用选项:
-f 使用printf样式格式
-s 指定换行符,默认是\n
-w 等宽,用0填充
示例:
数字序列:
[root@Zabbixserver shenjianyu]# seq 3 1 2 3
带0的数字序列:
[root@Zabbixserver shenjianyu]# seq -w 03 01 02 03
范围数字序列:
[root@Zabbixserver shenjianyu]# seq 2 5 2 3 4 5
步长序列:
[root@Zabbixserver shenjianyu]# seq 1 2 5 (2是步长) 1 3 5
以加号分隔序列:
[root@Zabbixserver shenjianyu]# seq -s "+" 5 1+2+3+4+5
等宽并在数字前面加字符串:
[root@Zabbixserver shenjianyu]# seq -f "str%02g" 3 str01 str02 str03 %g是默认数字位数,02是数字不足两位时使用0填充
shuf
功能:生成随机序列
常用选项:
-i 输入数字范围
-o 结果写入文件
示例:
输出范围随机数:
[root@Zabbixserver shenjianyu]# seq 5 | shuf 1 3 4 2 5
[root@Zabbixserver shenjianyu]# shuf -i 5-10 5 6 9 10 8 7
sort
功能:排序文件
常用选项:
-f 忽略大小写
-M 根据月份比较排序,比如JAN、DEC
-h 易读的大小单位排序,比如2K,1G
-n 数字排序
-r 倒序排序
-k n,m根据关键字排序,从第n字段开始,m字段结束
-o 将结果写入文件
-t 指定分隔符
-u 去重重复行
默认是对整列排序。
示例:
随机数字排序:
[root@Zabbixserver shenjianyu]# seq 5 | shuf | sort 1 2 3 4 5
随机字母排序:
[root@Zabbixserver shenjianyu]# printf "%c\n" {a..f} | shuf | sort a b c d e f
倒序排序:
[root@Zabbixserver shenjianyu]# seq 5 | shuf | sort -r 5 4 3 2 1
分隔后字段排序:
[root@Zabbixserver shenjianyu]# cat /etc/passwd | sort -t : -k 3 -n (以冒号分隔,根据第三段数字排序) 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 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin gopher:x:13:30:gopher:/var/gopher:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash ntp:x:38:38::/etc/ntp:/sbin/nologin gdm:x:42:42::/var/lib/gdm:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin telegraf:x:490:486::/etc/telegraf:/bin/false influxdb:x:491:487::/var/lib/influxdb:/bin/false grafana:x:492:488:grafana user:/usr/share/grafana:/sbin/nologin redis:x:493:489:Redis Server:/var/lib/redis:/sbin/nologin dspam:x:494:490:User to own dspam directories and default processes:/var/lib/dspam:/sbin/nologin ntop:x:495:492:ntop:/var/lib/ntop:/sbin/nologin mysql-proxy:x:496:493:MySQL-Proxy user:/:/sbin/nologin pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin sjy:x:500:500:sjy:/home/sjy:/bin/bash admin:x:501:501::/home/admin:/bin/bash nginx:x:502:502::/home/nginx:/sbin/nologin zabbix:x:503:503::/home/zabbix:/sbin/nologin
去重重复行:
[root@Zabbixserver shenjianyu]# echo -e "1\n1\n2\n2\n3\n3" 1 1 2 2 3 3 [root@Zabbixserver shenjianyu]# echo -e "1\n1\n2\n2\n3\n3" | sort -u 1 2 3
大小单位排序:
[root@Zabbixserver ~]# du -h | sort -k 1 -h -r 412M . 271M ./ntopng 99M ./ntopng/.git/objects/pack 99M ./ntopng/.git/objects 99M ./ntopng/.git 86M ./ntopng/third-party 60M ./nDPI 55M ./ntopng/third-party/zeromq-4.1.3 37M ./ntopng/httpdocs 29M ./ntopng/third-party/zeromq-4.1.3/src 28M ./ntopng/httpdocs/geoip 27M ./redis 26M ./redis/bin 23M ./nDPI/src/lib 23M ./nDPI/src 20M ./ntopng/doc 18M ./ntopng/third-party/zeromq-4.1.3/.libs 17M ./ntopng/third-party/LuaJIT-2.0.3/src 17M ./ntopng/third-party/LuaJIT-2.0.3 16M ./nDPI/tests/pcap 16M ./nDPI/tests 16M ./nDPI/.git 15M ./nDPI/.git/objects/pack 15M ./nDPI/.git/objects 14M ./ntopng/src 14M ./nDPI/src/lib/protocols 13M ./ntopng/third-party/zeromq-4.1.3/src/.libs
分隔后第一个字段的第二个字符排序
[root@Zabbixserver ~]# echo -e "ag:3\ncd:2\nef:4" | sort -t : -k 1.2 cd:2 ef:4 ag:3
tab作为分隔符
[root@Zabbixserver ~]# sort -t $"\t"
多序排列:
file文件内容
[root@Zabbixserver ~]# cat file zhaoliu 6 100 lisi 8 80 wangwu 7 90 zhangsan 6 100
对file文件的第二列正序排列,在此基础上对第三列倒序排列(多序排列)
[root@Zabbixserver ~]# sort -n -k 1 -k3 -nr file zhaoliu 6 100 zhangsan 6 100 wangwu 7 90 lisi 8 80
对两个文件同时排序:
sort file1 file2