每天十个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
rename

将.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
rename

 

dirname 

功能:去除路径的最后一个名字

常用选项:

示例:

[root@Zabbixserver test]# dirname /home/rzrk/
/home
dirname

 

basename

功能:打印路径的最后一个名字

常用选项:

[root@Zabbixserver test]# basename /usr/sbin/sosreport 
sosreport

[root@Zabbixserver test]# basename /tmp/test/1.html .html 
1
basename

 

du

功能:估算文件磁盘空间使用

常用选项:

-h 易读格式显示 (K,M,G)

-b 单位bytes显示

-k 单位KB显示

-m  单位MB显示

-S 只显示总大小

--max-depth=<目录层数>,超过层数的目录忽略

--exclude=file 排除文件或目录

--time 显示大小和创建时间

示例:

查看目录大小:

[root@Zabbixserver ~]# du -sh /shenjianyu/
664M    /shenjianyu/
du -sh

 

排除目录某个文件:

[root@Zabbixserver shenjianyu]# du -sh --exclude=mysql-5.5.49.tar.gz /shenjianyu/
643M    /shenjianyu/
du -sh --exclude

 

输出当前目录下各个子目录所使用的空间:

[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    .
du -h --max-depth=1

 

输出当前目录下占用空间最大的十个文件

[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/
du -h --max-depth=2

 

cut

功能:选取文件的每一行数据

常用选项:

-b 选中第几个字符

-c 选中多少个字符

-d 指定分隔符分字段

-f 显示选中字段

示例:

打印b字符:

[root@Zabbixserver shenjianyu]# echo "abc" | cut -b "2"
b
cut -b

 

截取abc字符:

[root@Zabbixserver shenjianyu]# echo "abcdef" | cut -c "1-3"
abc
cut -c

 

以冒号分隔,显示第二个字符:

[root@Zabbixserver shenjianyu]# echo "a:b:c" | cut -d : -f2 
b
cut -d

 

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
tr -c

去重字符:

[root@Zabbixserver shenjianyu]# echo "aaabbbccc" | tr -s '[a-z]'
abc
tr -s

删除字符:

[root@Zabbixserver shenjianyu]# echo -e "aa\nbb\ncc\n" | tr -d '\n'
aabbcc
tr -d

转换字符:

[root@Zabbixserver shenjianyu]# echo "aaabbbccc" | tr -t a 1
111bbbccc
tr -t

替换字符:

[root@Zabbixserver shenjianyu]# echo "aaabbbccc" | tr '[a-z]' '[A-Z]'
AAABBBCCC
tr

 

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
stat

只显示文件修改时间:

[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
stat -c

 

seq

功能:打印序列化数字

常用选项:

-f 使用printf样式格式

-s 指定换行符,默认是\n

-w 等宽,用0填充

示例:

数字序列:

[root@Zabbixserver shenjianyu]# seq 3
1
2
3
seq

带0的数字序列:

[root@Zabbixserver shenjianyu]# seq -w 03
01
02
03
seq -w

范围数字序列:

[root@Zabbixserver shenjianyu]# seq 2 5
2
3
4
5
seq

步长序列:

[root@Zabbixserver shenjianyu]# seq 1 2 5  (2是步长)
1
3
5
seq

以加号分隔序列:

[root@Zabbixserver shenjianyu]# seq -s "+" 5
1+2+3+4+5
seq -s

等宽并在数字前面加字符串:

[root@Zabbixserver shenjianyu]# seq -f "str%02g" 3
str01
str02
str03

%g是默认数字位数,02是数字不足两位时使用0填充
seq -f

 

shuf

功能:生成随机序列

常用选项:

-i 输入数字范围

-o 结果写入文件

示例:

输出范围随机数:

[root@Zabbixserver shenjianyu]# seq 5 | shuf
1
3
4
2
5
shuf
[root@Zabbixserver shenjianyu]# shuf -i 5-10
5
6
9
10
8
7
shuf -i

 

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
sort

随机字母排序:

[root@Zabbixserver shenjianyu]# printf "%c\n" {a..f} | shuf | sort
a
b
c
d
e
f
shuf

倒序排序:

[root@Zabbixserver shenjianyu]# seq 5 | shuf | sort -r
5
4
3
2
1
sort -r

分隔后字段排序:

[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
sort -t

去重重复行:

[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
sort -u

大小单位排序:

[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
sort -h

分隔后第一个字段的第二个字符排序

[root@Zabbixserver ~]# echo -e "ag:3\ncd:2\nef:4" | sort -t : -k 1.2
cd:2
ef:4
ag:3
sort -k

tab作为分隔符

[root@Zabbixserver ~]# sort -t $"\t"
tab 分隔

多序排列:

file文件内容

[root@Zabbixserver ~]# cat file 
zhaoliu 6 100
lisi 8    80
wangwu 7 90
zhangsan 6 100
View Code

对file文件的第二列正序排列,在此基础上对第三列倒序排列(多序排列)

[root@Zabbixserver ~]# sort -n -k 1 -k3 -nr file 
zhaoliu 6 100
zhangsan 6 100
wangwu 7 90
lisi 8    80
View Code

对两个文件同时排序:

sort file1 file2
sort

 

posted @ 2017-03-22 11:26  沈剑宇  阅读(369)  评论(0编辑  收藏  举报