管道技术
例:
# 将/etc/passwd以uid排序并展示前10行
cat /etc/passwd|sort -t ':' -nk3|head
[root@localhost ~]# cat /etc/passwd|sort -t ':' -nk3|head
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
#统计/etc/passwd的所有shell类型
cat /etc/passwd|cut -d ':' -f7|sort|uniq -c
[root@localhost ~]# cat /etc/passwd|cut -d ':' -f7|sort|uniq -c
9 /bin/bash
1 /bin/sync
1 /sbin/halt
15 /sbin/nologin
1 /sbin/shutdown
awk -F: '{print $NF}' /etc/passwd |sort|uniq -c
[root@localhost ~]# awk -F: '{print $NF}' /etc/passwd |sort|uniq -c
9 /bin/bash
1 /bin/sync
1 /sbin/halt
15 /sbin/nologin
1 /sbin/shutdown
tee
# 分流到文件
ip a|grep 'inet '|tee ip.txt|awk -F'/' '{print $1}'|awk '{print $2}'
# 分流到终端
ip addr|grep 'inet '|tee /dev/pts/0|awk -F'/' '{print $1}'|awk '{print $2}'
xargs
将原本没有标准输入的命令,收到xargs的标准输入中,再传递给后面的命令处理
-I 将数据保存在{}之中,后面的命令可以直接调用{}
find /root -name '*.sh'|xargs -I {} cp {} /opt/
find /root -name '*.sh'|xargs -I AAA cp AAA /opt/
-n 将前面的数据以列的形式排,指定数字是几,一行就有几个
ls|xargs -n4
1 15 1.rar 1.txt
1.TXT 2.txt a ab
anaconda-ks.cfg b create_file.sh file200.txt
ip.txt test.txt txt wenben
[root@localhost ~]# ls|xargs -n2
1 15
1.rar 1.txt
1.TXT 2.txt
a ab
anaconda-ks.cfg b
create_file.sh file200.txt
ip.txt test.txt
txt wenben
练习题
1.查找/tmp目录下,属主不是root,且文件名不是以f开
头的文件
find /tmp ! -user root -a ! -name "f*" -a ! -type d
2.查找/var目录下属主为root,切属组为mail的所有文件
find /var -user root -a -group mail
[root@localhost /tmp]# find /var -user root -a -group mail
/var/spool/mail
/var/spool/mail/root
3.查找/var目录下不属于root、oldboy、zls组的所有
文件
find /var ! -group root -a ! -group oldboy -a ! -group zls
[root@localhost /tmp]# find /var ! -group root -a ! -group oldboy -a ! -group zls
/var/lib/polkit-1
/var/lib/postfix/master.lock
/var/log/wtmp
/var/log/btmp
/var/db/sudo/lectured/ljy
/var/db/sudo/lectured/yl
/var/spool/mail
/var/spool/mail/ljy
/var/spool/mail/yl
/var/spool/mail/fff
/var/spool/mail/sjl
/var/spool/mail/xbl
/var/spool/mail/root
/var/spool/mail/oldboy
/var/spool/mail/ljy1
/var/spool/mail/oldboyedu
/var/spool/mail/zls
/var/spool/postfix/maildrop
/var/spool/postfix/private/tlsmgr
/var/spool/postfix/private/rewrite
/var/spool/postfix/private/bounce
/var/spool/postfix/private/defer
/var/spool/postfix/private/trace
/var/spool/postfix/private/verify
/var/spool/postfix/private/proxymap
/var/spool/postfix/private/proxywrite
/var/spool/postfix/private/smtp
/var/spool/postfix/private/relay
/var/spool/postfix/private/error
/var/spool/postfix/private/retry
/var/spool/postfix/private/discard
/var/spool/postfix/private/local
/var/spool/postfix/private/virtual
/var/spool/postfix/private/lmtp
/var/spool/postfix/private/anvil
/var/spool/postfix/private/scache
/var/spool/postfix/public
/var/spool/postfix/public/pickup
/var/spool/postfix/public/cleanup
/var/spool/postfix/public/qmgr
/var/spool/postfix/public/flush
/var/spool/postfix/public/showq
4.查找/var目录下最近一周内其内容修改过,同时属主不
为root,也不是postfix的文件
find /var -user root -a ! -user postfix -mtime -7!
5.查找/etc/下所有大于1M且类型为普通文件的所有文件
find /etc/ -size +1M -a -type f
/etc/udev/hwdb.bin
/etc/selinux/targeted/active/policy.kern
/etc/selinux/targeted/contexts/files/file_contexts.bin
/etc/selinux/targeted/policy/policy.31
6.将/etc中的所有目录(仅目录)复制到/tmp下,目录结
构不变
[root@localhost /tmp]# find /etc/ -type d | xargs -I {} cp -a {} /tmp/
find /etc/ -type d | xargs -I {} mkdir -p /tmp/{}
7.将/etc目录复制到 /var/tmp,/var/tmp/etc的所有
目录权限为777,/var/tmp/etc/目录中所有文件权限为
666
cp -a /etc /var/tmp/
find /var/tmp/etc -type d | xargs -I {} chmod 777 {}
find /var/tmp/etc/ ! -type d | xargs -I {} chmod 666 {}
9.创建touch file{1..10}10个文件,保留file9,其
他一次全部删除
touch file{1..10}
rm -rf file{1..8} && rm -rf file10
find / -type f -name 'file*.sh' -a ! -name 'file9.sh' |xargs -I {} rm -fr {}
10.解释如下每条命令的含义
mkdir /root/dir1
创建目录dir1在/root下
touch /root/dir1/file{1..10}
创建文件file1到10放在/root/dir1下
find /root/dir1 -type f -name 'file5'
查找/root/dir1下,名字为file5的普通文件
find /root/dir1 ! -name 'file5'
查找/root/dir1下,名字不是file5的其他文件
find /root/dir1 -name 'file5' -o -name 'file9'
查找/root/dir1下,名字为file5或file9的文件
find /root/dir1 -name 'file5' -o -name 'file9' -ls
查找/root/dir1下,名字为file9的文件并以长格式显示的方式打印查找到的内容
find /root/dir1 (-name 'file5' -o -name 'file9' ) -ls
查找/root/dir1下,名字为file5或file9的文件并以长格式显示的方式打印查找到的内容
find /root/dir1 (-name 'file5' -o -name 'file9' ) -exec rm -rvf {} ;
查找/root/dir1下,名字为file5或file9的文件并显示删除过程
find /root/dir1 ! (-name 'file5' -o -name 'file9' ) -exec rm -vf {} ;
查找/root/dir1下,名字不为file5或file9的其他文件并显示是否删除