Linux的管道命令是'|',通過它可以對數據進行連續處理,其示意圖如下:
注意:
1)管道命令僅為處理標准輸出(即正確的輸出),對於標准錯誤輸出,將忽略
2)管理命令的後一個命令必須能將前一個命令的標准輸出變為它的標准輸入才可以,如less,more,head,tail就可以,而ls, cp, mv就不行。
下面我們看幾個管道命令。
cut以行為單位,根據分隔符把行分成若干列,這樣我們就可以指定選取哪些列了。
cut -d '分隔字符' -f 選取的列數 echo $PATH|cut -d ':' -f 2 --選取第2列 echo $PATH|cut -d ':' -f 3,5 --選取第3列和第5列 echo $PATH|cut -d ':' -f 3-5 --選取第3列到第5列cut有一個問題,就是在處理多個空格分隔的時候比較吃力。
grep分一行數據,若當中有我們所需要的信息,則顯示該行,否則忽略。
grep [-cinv] '查找的字符串' filename -c:計算找到的次數 -i:忽略大小寫 -v:反向選擇 -n:輸出第幾行
# cat /etc/passwd | sort adm:x:3:4:adm:/var/adm:/sbin/nologin avahi-autoipd:x:100:156:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin avahi:x:70:70:Avahi daemon:/:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ......從上面的結果我們可以知道,sort默認是以第一個字符升序排序,如果我想要以第3列降序數字排序怎麼辦?
# cat /etc/passwd | sort -t ':' -k 3 -rn nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin test:x:504:505::/home/test:/bin/bash sungh:x:503:504::/home/sungh:/bin/bash zhoufei:x:502:503::/home/zhoufei:/bin/bas
1 wtmp [root@lx15 ~ ]# last | cut -d ' ' -f 1 | sort | uniq oracle reboot root test wtmp [root@lx15 ~ ]# last | cut -d ' ' -f 1 | sort | uniq -c 1 22 oracle 9 reboot 521 root 12 test 1 wtmp
wc [-lwm] -l: 統計行數 -w:統計英文單詞 -m:統計字符數 [root@lx15 ~ ]# wc -l /etc/passwd 37 /etc/passwd [root@lx15 ~ ]# wc -w /etc/passwd 62 /etc/passwd [root@lx15 ~ ]# wc -m /etc/passwd 1711 /etc/passwd
split [-bl] file prefix -b: 以大小切割 -l:以行數切割 prefix:切割後文件的前綴 --示例:以大小切割 [root@lx15 ~ ]# ls -l disease.dmp -rwxr-xr-x 1 root root 127485952 Jul 4 2013 disease.dmp [root@lx15 ~ ]# ls -lh disease.dmp -rwxr-xr-x 1 root root 122M Jul 4 2013 disease.dmp [root@lx15 ~ ]# split -b 50m disease.dmp disease.dmp [root@lx15 ~ ]# ls -lh disease.dmp* -rwxr-xr-x 1 root root 122M Jul 4 2013 disease.dmp -rw-r--r-- 1 root root 50M Jan 9 16:10 disease.dmpaa -rw-r--r-- 1 root root 50M Jan 9 16:10 disease.dmpab -rw-r--r-- 1 root root 22M Jan 9 16:10 disease.dmpac
# find /sbin -perm +7000 | xargs ls -l -rwsr-x--- 1 root ecryptfs 19896 Feb 23 2012 /sbin/mount.ecryptfs_private -rwsr-xr-x 1 root root 75496 Jan 9 2013 /sbin/mount.nfs -rwsr-xr-x 1 root root 75504 Jan 9 2013 /sbin/mount.nfs4 -rwxr-sr-x 1 root root 8544 Feb 22 2012 /sbin/netreport -rwsr-xr-x 1 root root 14112 Nov 2 2010 /sbin/pam_timestamp_check -rwsr-xr-x 1 root root 75504 Jan 9 2013 /sbin/umount.nfs -rwsr-xr-x 1 root root 75504 Jan 9 2013 /sbin/umount.nfs4 -rwsr-xr-x 1 root root 19768 Nov 2 2010 /sbin/unix_chkpwd如果沒有xargs,ls -l的結果將不是前面find的標准輸出,因為ls不支持管道命令。