1.檢視ASCII碼表
man 7 ascii
很多人初學程式設計都會接觸到ascii碼的概念,有時候為了查某個符号的ascii值,可能還得翻箱倒櫃找出當年的課本?Linux Manpage裡面其實包含了很多類似的實用資料,上述指令就能很詳細的方式解釋ascii編碼,當然這裡還有線上版。
man指令的第二個參數是區域碼,用來區分索引詞的範圍,比如printf,在C标準庫裡面的printf跟bash當中的printf是不同的,前者的查詢是man 3 printf,後者是man 1 printf。如果這個區域碼省略,就會從1開始搜尋,直到找到為止。
指令man man可以看到詳細的解釋。
manpages裡面還有一些有趣而且實用的資料,可能鮮為人知:
man 1 intro - 一篇對從未接觸過Linux的使用者的簡明教程。
man 2 syscalls - 核心系統請求的清單,按核心版本注釋分類,系統程式設計必備。
man 2 select_tut - 關于select()系統請求的教程。
man 3 string - 在頭檔案内的所有函數。
man 3 stdio - 關于頭檔案的使用,标準輸入/輸出庫的說明。
man 3 errno - 所有errorno的取值及說明。(C語言内類似其他語言的異常告知機制)
man 4 console_codes - Linux的終端控制碼及其使用解釋。
man 4 full - 介紹/dev/full這個總是處于"滿"狀态的磁盤。(對應/dev/null這個總是空的裝置)
man 5 proc - 介紹/proc下的檔案系統。
man 5 filesystems - 各種Linux檔案系統。
第7區裡面的資料通常最酷:
man 7 bootparam - 詳細解釋核心啟動參數。
man 7 charsets - 解釋各種語言的編碼集。(gbk,gb2312等)
man 7 glob - 解釋glob檔案名管理機制的工作過程。
man 7 hier - 解釋Linux檔案系統結構各個部分的作用。
man 7 operator - C語言的運算符的清單。
man 7 regex - 介紹正規表達式。
man 7 suffixes - 常見檔案字尾名的清單跟解釋。
man 7 time - Linux的時鐘機制解釋。
man 7 units - 數值機關及其數值的解釋。
man 7 utf8 - 描述UTF-8編碼。
man 7 url - 解釋URL、URI、URN等的标準。
2.簡易計時器
time read
運作指令開始算起,到結束時按一下Enter,就顯示出整個過程的時間,精确到ms級别。
time是用來計算一個程序在運作到結束過程耗費多少時間的程式,它的輸出通常有三項:
$ time ls /opt
...
real 0m0.008s
user 0m0.003s
sys 0m0.007s
real指整個程式對真實世界而言運作所需時間,user指程式在使用者空間運作的時間,sys指程式對系統調用鎖占用時間。
read本來是一個讀取使用者輸入的指令,常見用法是read LINE,使用者輸入并回車後,鍵入的内容就被儲存到$LINE變量内,但在鍵入回車前,這個指令是一直阻塞的。
可見time read這指令靈活地利用了作業系統的阻塞。用這個指令來測試一壺水多久煮滾應該是不錯的。
3.遠端關掉一台WINDOWS機器
net rpc shutdown -I IP_ADDRESS -U username%password
Windows平台上的net指令是比較強大的,因為其背景是一個RPC類的系統服務,大家應該看過win下用net use
file:///C|/ip/ipc%24*這樣一個指令建立IPC空連接配接,入侵主機的事情。
Linux下的net指令是samba元件的程式,通常包含在smbclient内,可以跟windows主機的檔案、列印機共享等服務進行通訊,但是也支援rpc指令。
上述指令就是在遠端Windows主機上執行了shutdown指令。當然這不一定成功,關系到win主機上面的安全設定。net指令能夠控制到win主機就是了。
4.在一個子SHELL中運作一個指令
(cd /tmp && ls)
當然這隻是示範,要檢視目錄當然可以ls /tmp。
好處就是不會改變目前shell的目錄,以及如果指令中設計環境變量,也不會對目前shell有任何修改。
在Shell程式設計中還有很多使用上引号來包覆一個指令:`ls /tmp`,這也是子shell過程。可是上引号的方法無法嵌套,而使用小括号的方法可以,一個比較糾結的例子是:
echo $(echo -e
file:///C|/x%24%28printf"%x" 65))
5.利用中間管道嵌套使用SSH
ssh -t host_A ssh host_B
如果目标機器host_B處于比較複雜的網絡環境,本機無法直接通路,但另外一台host_A能夠通路到host_B,而且也能被本機通路到,那上述指令就解決了友善登入host_B的問題。
但理論上這個過程是可以無限嵌套的,比如:
ssh -t host1 ssh -t host2 ssh -t host3 ssh -t host4 ...
嗯那神馬FBI CIA的,有本事來捉我吧~
6.清空螢幕
<CTRL+l>;
這個跟之前介紹的reset指令重置終端的作用有些類似,其實都隻是發送一段控制序列,讓終端的顯示複位。
還可以這樣運作:
tput clear
tput是專門用來控制終端的一個小工具,也挺強大的,詳細資訊運作man tput檢視。
7.我想知道一台伺服器什麼時候重新開機完
ping -a IP
系統管理者最常做的事情是重新開機系統。但是伺服器的重新開機過程往往得花上好幾分鐘,什麼你的伺服器4個scsi卡?16個硬碟?系統是Redhat?還完全安裝所有元件?好吧,它重新開機的時間都夠你吃頓飯了,是以我很想知道它什麼時候回來。
ping指令有個audible ping參數,-a,當它終于ping通你的伺服器時會讓小喇叭叫起來。
8.列出你最常用的10條指令
history | awk '{a[$2]++}END{for(i in a){print a " " i}}' | sort -rn | head
這行指令組合得很妙: history輸出使用者了指令曆史;awk統計并輸出清單;sort排序;head截出前10行。
9.檢查GMAIL新郵件
curl -u [email protected] --silent " https://mail.google.com/mail/feed/atom" |
perl -ne \
'
print "Subject: $1 " if /<title>(.+?)<\/title>/ && $title++;
print "(from $1)\n" if /<email>(.+?)<\/email>/;
'
Gmail的一個特色是支援Atom feed輸出郵件清單,是以總是見到很多Gmail郵件提醒器之類的,因為開發特簡單,atom很友善。
這裡隻是利用了perl的正則來解析atom(sed/awk也能做到)。
10.用TELNET看《星球大戰》
telnet towel.blinkenlights.nl
沒什麼好解釋的,就是ASCII藝術之一。如果你有ipv6連接配接,還能看到彩色版的。牛吧?