標籤:
摘自《碼農增刊Linus與Linux》,章節:你可能不知道的Shell。 最近閱讀完這本書,覺得其中有很多不錯的內容,這是其中的一個Shell小甜點,拿來和大家一起分享一下,增加了一些我自己的測試內容。筆者寫這個隨筆,旨在分享和提高大家對Shell的興趣。 閱讀以下部分前,強烈建議讀者開啟一個shell 實驗,這些都不是shell 教科書裡的大路貨哦:) 1. sudo !! 以root 的身份執行上一條命令。情境舉例:比如Ubuntu 裡用apt- get 安裝軟體包的時候是需要root 身份的,我們經常會忘記在apt- get 前加sudo。每次不得不加上sudo 再重新鍵入這行命令,這時可以很方便的用sudo !!完事。 2. cd – 回到上一次的目錄。情境舉例:目前的目錄為/ home/ a,用cd ../b 切換到/ home/ b。這時可以通過反覆執行cd –命令在/ home/ a 和/ home/ b 之間來回方便的切換。 3. ^ old^ new 替換前一條命令裡的部分字串。情境:echo "wanderful",其實是想輸出echo "wonderful"。只需要^ a^ o 就行了,對很長的命令的錯誤拼字有很大的協助。 4. man ascii 顯示ascii 碼錶。情境:忘記ascii 碼錶的時候還需要google 麼? 尤其在天朝網路如此“ 順暢” 的情況下,就更麻煩在GWF 多應用一次規則了,直接用本地的man ascii 吧。 這個功能很有用,經常會遇到編碼記憶模糊,隨手一查就可以了。 5. ctrl- x e 快速啟動你的預設編輯器(由變數$ EDITOR 設定)。 6. netstat –tlnp 列出本機進程監聽的連接埠號碼。 7. tail -f /path/ to/file. log | sed ‘/^Finished: SUCCESS$/ q‘ 當file. log 裡出現Finished: SUCCESS 時候就退出tail,這個命令用於即時監控並過濾log 是否出現了某條記錄。 8. ssh [email protected] bash < /path/ to/ local/script. sh 在遠程機器上運行一段指令碼。這條命令最大的好處就是不用把指令碼拷到遠程機器上。 9. screen -d -m -S some_ name ping my_ router 後台運行一段不終止的程式,並可以隨時查看它的狀態。- d -m 參數啟動“ 分離” 模式,- S 指定了一個session 的標識。可以通過- R 命令來重新“ 掛載” 一個標識的session。更多細節請參考screen 用法man screen。 10. wget --random- wait -r -p -e robots= off -U mozilla http:// www. example. com 下載整個www. example. com 網站。11. curl ifconfig. me 當你的機器在內網的時候,可以通過這個命令查看外網的IP。 12. lsof –i 即時查看本機網路服務的活動狀態。 13. python -m SimpleHTTPServer 一句話實現一個HTTP server,把目前的目錄設為HTTP 服務類別目錄,可以通過http:// localhost: 8000 訪問這也許是這個星球上最簡單的HTTP 伺服器的實現了。
1 [[email protected] httpTest]$ python -m SimpleHTTPServer 2 Serving HTTP on 0.0.0.0 port 8000 ... 3 192.168.153.128 - - [27/Dec/2014 19:10:46] "GET / HTTP/1.1" 200 - 4 192.168.153.128 - - [27/Dec/2014 19:10:46] code 404, message File not found 5 192.168.153.128 - - [27/Dec/2014 19:10:46] "GET /favicon.ico HTTP/1.1" 404 - 6 192.168.153.128 - - [27/Dec/2014 19:10:46] code 404, message File not found 7 192.168.153.128 - - [27/Dec/2014 19:10:46] "GET /favicon.ico HTTP/1.1" 404 - 8 192.168.153.128 - - [27/Dec/2014 19:12:22] "GET / HTTP/1.1" 200 - 9 192.168.153.128 - - [27/Dec/2014 19:13:03] "GET / HTTP/1.1" 200 -10 [[email protected] httpTest]$ netstat -lnpt11 (Not all processes could be identified, non-owned process info12 will not be shown, you would have to be root to see it all.)13 Active Internet connections (only servers)14 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 15 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - 16 tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN - 17 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - 18 tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 2574/python 19 tcp 0 0 :::22 :::* LISTEN - 20 tcp 0 0 ::1:631 :::* LISTEN - 21 tcp 0 0 ::1:25 :::* LISTEN -
View Code 在目錄下寫了一個index.html顯示的結果如下,it‘s fun.
1 <html>2 <head> 3 <title>test python web server</title>4 </head>5 <body>6 This is a test python web server, <b>hello!</b>7 </body>8 </html>
View Code 14. history | awk ‘{CMD[$ 2]++; count++;} END { for (a in CMD )print CMD[ a] " " CMD[ a]/ count* 100 "% " a }‘ | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10 這行指令碼能輸出你最常用的十條命令,由此甚至可以洞察你是一個什麼類型的程式員。看不懂行代碼?沒關係,系統的學習一下* nix shell 指令碼吧,力薦《Linux 命令列與Shell 指令碼編程大全》。最後還是那句Shell 的至理名言:“Where there is a shell,there is a way!” 這個命令列很有意思,激勵大家去學習一下awk、sed、sort方便快捷的實現日常的工作。
Shell指令碼,簡單& 強大