歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix命令

對話 UNIX: 學習更多的命令行技巧和操作符

unix命令

    更好地理解 UNIX? 用戶輸入的這些 “奇怪的” 字符。學習如何在 UNIX 中使用管道、重定向、操作符等特性。
    現在,您已經在 IBM? AIX? 上工作了一段時間了。您已經學習了幾個基本命令,能夠在目錄結構中移動、創建和修改文件、查看正在運行的進程以及管理用戶和系統。這很不錯,但是您希望了解 UNIX? 管理員輸入的命令是什麼意思。這些命令中包含許多奇怪的符號。在本文中,了解 |、>、>>、<、<<、[[ 和 ]] 等符號在 UNIX 和 Linux? 中的意思,以及如何使用 &&、||、<、<= 和 != 操作符。

    管道

    如果您熟悉 UNIX,那麼管道(或 pipe)會是每天都要接觸到的東西。管道最初是由 Malcolm McIlroy 開發的,可以使用管道把一個命令的標准輸出(stdout)定向到下一個命令的標准輸入(stdin),這樣就形成了連續執行的命令鏈。可以在一個命令行上使用多個管道。在許多時候,一個命令的 stdout 用作下一個命令的 stdin,第二個命令的 stdout 又被重定向到另一個命令的 stdin,依此類推。

    例如,在排除故障或執行日常檢查時,大多數 UNIX 管理員首先做的事情之一是查看系統上當前正在運行的進程。清單 1 演示這樣的檢查。


    清單 1. 日常進程檢查示例

     # ps –ef

     UID     PID    PPID   C    STIME    TTY  TIME CMD
    root       1       0   0   Jul 27      -  0:05 /etc/init
    root   53442  151674   0   Jul 27      -  0:00 /usr/sbin/syslogd
    root   57426       1   0   Jul 27      -  0:00 /usr/lib/errdemon
    root   61510       1   0   Jul 27      - 23:55 /usr/sbin/syncd 60
    root   65634       1   0   Jul 27      -  0:00 /usr/ccs/bin/shlap64
    root   82002  110652   0   Jul 27      -  0:24 /usr/lpp/X11/bin/X -x abx
       -x dbe -x GLX -D /usr/lib/X11//rgb -T -force :0 -auth /var/dt/A:0-SfIdMa
    root   86102       1   0   Jul 27      -  0:00 /usr/lib/methods/ssa_daemon -l ssa0
    root  106538  151674   0   Jul 27      -  0:01 sendmail: accepting connections
    root  110652       1   0   Jul 27      -  0:00 /usr/dt/bin/dtlogin -daemon
    root  114754  118854   0   Jul 27      - 20:22 dtgreet
    root  118854  110652   0   Jul 27      -  0:00 dtlogin <:0>        -daemon
    root  131088       1   0   Jul 27      -  0:07 /usr/atria/etc/lockmgr
       -a /var/adm/atria/almd -q 1024 -u 256 -f 256
    root  147584       1   0   Jul 27      -  0:01 /usr/sbin/cron
    root  155816  151674   0   Jul 27      -  0:04 /usr/sbin/portmap
    root  163968  151674   0   Jul 27      -  0:00 /usr/sbin/qdaemon
    root  168018  151674   0   Jul 27      -  0:00 /usr/sbin/inetd
    root  172116  151674   0   Jul 27      -  0:03 /usr/sbin/xntpd
    root  180314  151674   0   Jul 27      -  0:19 /usr/sbin/snmpmibd
    root  184414  151674   0   Jul 27      -  0:21 /usr/sbin/aixmibd
    root  188512  151674   0   Jul 27      -  0:20 /usr/sbin/hostmibd
    root  192608  151674   0   Jul 27      -  7:46 /usr/sbin/muxatmd
    root  196718  151674   0 11:00:27      -  0:00 /usr/sbin/rpc.mountd
    root  200818  151674   0   Jul 27      -  0:00 /usr/sbin/biod 6
    root  213108  151674   0   Jul 27      -  0:00 /usr/sbin/nfsd 3891
    root  221304  245894   0   Jul 27      -  0:05 /bin/nsrexecd
  daemon  225402  151674   0 11:00:27      -  0:00 /usr/sbin/rpc.statd
    root  229498  151674   0 11:00:27      -  0:00 /usr/sbin/rpc.lockd
    root  241794  151674   0   Jul 27      -  0:51 /usr/lib/netsvc/yp/ypbind
    root  245894       1   0   Jul 27      -  0:00 /bin/nsrexecd
    root  253960       1   0   Jul 27      -  0:00 ./mflm_manager
    root  274568  151674   0   Jul 27      -  0:00 /usr/sbin/sshd -D
    root  282766       1   0   Jul 27   lft0  0:00 /usr/sbin/getty /dev/console
    root  290958       1   0   Jul 27      -  0:00 /usr/lpp/diagnostics/bin/diagd
    root  315646  151674   0   Jul 27      -  0:00 /usr/sbin/lpd
    root  319664       1   0   Jul 27      -  0:00 /usr/atria/etc/albd_server
    root  340144  168018   0 12:34:56      -  0:00 rpc.ttdbserver 100083 1
    root  376846  168018   0   Jul 30      -  0:00 rlogind
cormany  409708  569522   0 19:29:27  pts/1  0:00 -ksh
    root  569522  168018   0 19:29:26      -  0:00 rlogind
cormany  733188  409708   3 19:30:34  pts/1  0:00 ps -ef
    root  749668  168018   0   Jul 30      -  0:00 rlogind

    系統上當前正在運行的進程的列表可能像 清單 1 這麼簡單;但是,大多數生產系統運行的進程更多,這會使 ps 的輸出更長。為了把這個列表縮短到自己需要的范圍,可以使用管道把 ps –ef 的標准輸出重定向到 grep,從而搜索自己真正希望看到的結果。清單 2 把 清單 1 產生的進程列表重定向到 grep,搜索字符串 “rpc” 和 “ksh”。

    清單 2. 把進程列表重定向到 grep

 # ps –ef | grep –E "rpc|ksh"

    root  196718  151674   0 11:00:27      -  0:00 /usr/sbin/rpc.mountd
  daemon  225402  151674   0 11:00:27      -  0:00 /usr/sbin/rpc.statd
    root  229498  151674   0 11:00:27      -  0:00 /usr/sbin/rpc.lockd
    root  340144  168018   0 12:34:56      -  0:00 rpc.ttdbserver 100083 1
cormany  409708  569522   0 19:29:27  pts/1  0:00 -ksh
cormany  733202  409708   0 19:52:20  pts/1  0:00 grep -E rpc|ksh

    當多次把 stdout 重定向到 stdin 時,管道的使用方法可以很復雜。在下面的示例中,擴展了前面的 ps 和 grep 示例,把它的 stdout 重定向到另一個 grep,其作用是排除包含 “grep” 或 “ttdbserver” 的字符串。當最後的 grep 操作完成時,再次使用管道把 stdout 重定向到一個 awk 語句,其作用是輸出進程標識符(PID)大於 200,000 的所有進程:

 

# ps –ef | grep –E "rpc|ksh" | grep -vE "grep|rpc.ttdbserver" | 
   awk -v _MAX_PID=200000 '{if ($2 > _MAX_PID) {print "PID for 
   process",$8,"is greater than", _MAX_PID}}'

PID for process /usr/sbin/rpc.statd is greater than 200000
PID for process /usr/sbin/rpc.lockd is greater than 200000
PID for process -ksh is greater than 200000

    圖 1 通過圖形說明命令的 stdout 重定向到後續命令的 stdin 的次序。

   圖 1. 管道示例

管道示例

Copyright © Linux教程網 All Rights Reserved