- ctrl + r: 進入歷史命令搜尋模式
- ctrl + l: 清除螢幕,效果等同於clear
- ctrl +a: 游標移至行首
- ctrl +e: 游標移至行尾
- ctrl +u: 剪下游標之前的內容
- ctrl +k: 剪下游標之後的內容
- ctrl +y: 貼上內容
- ctrl +t: 交換游標前兩個字元的順序
- ctrl +w:刪除游標之前的內容
- ctrl +z: 將目前process suspend。可用jobs看目前有那些process在後台執行,用fg %1將第一個process放至前台。用bg %2將第二個process放在後台執行。
- ctrl +x -> ctrl +e: 執行環境變數EDITOR所指定的文字編輯器。
- !!:重複上次的命令
- !$:重複上次命令的參數。Ex: ls - als在下次使用時可直接用ls !$,也可用來當做上一層目錄。
- alt+.:重複上次命令的參數
2011年8月21日
Bash快速鍵
實用的Linux命令
- pgrep -u root:抓取uid為root process pid,等同於ps -ef|egrep '^root'|awk '{print $2}'
- pstree: 將process依樹狀結構印出
- split: 將大檔案分割成小檔案,split -b 2m largefile LF_,合併時使用cat LF_* > largefile
- nl: 能夠顯示行號的命令, nl log.txt|head
- ldd:印出指定檔案所需要的dynamic library。ldd /usr/java/jre1.5.0_11/bin/java會印出java需要那些dynmaic library。
- lsof: 印出被打開的文件。lsof|grep TCP 可印出正被打開的TCP port。
2011年8月20日
標準輸出入與重新導向
在Unix(Linux)當中,系統將標準輸入輸出分成三個:標準輸入(stdin)、標準輸出(stdout)、以及標準錯誤輸出(stderr),它們的fd (file descriptor, 檔案描述子) 分別是 0,1,2。在標準情形下,這些FD與以下設備關聯:
- stdin(0): keyboard
- stdout(1): monitor
- stderr(2): monitor
而在shell當中「>」的意思其實是,將「>」左邊輸出的東西重新導向到右邊去。當「>」左邊未指定任何東西時,它會讀取左方程式的標準輸出(也就是fd=1)重新導向給右邊的東西,但是也可以指定要重新導向的fd (也就是說「>abc.txt」會等於「1>abc.txt」)。所以可以想見 2>&1 的意思應該是把 fd=2,也就是標準錯誤輸出重新導向給&1。而這邊的 &1 指的其實就是 fd=1。因此以下的結果:
/tmp/test.sh > test.log
如果不使用2>&1的方法,則test.log中只會儲存test.sh的執行結果,而test.sh的錯誤只會顯示在營幕中,反之,若使用了2>&1方法,則執行結果與錯誤訊息都會存在test.log當中。所以由此可知,如果只想儲存錯誤訊息,可用 2> file的方式。
小結一下,2>&1就是將標準錯誤併到標準輸出一起輸出,而1>&2就是將標準輸出併到標準錯誤當中一起輸出。
在crontab中常常見到以下的寫法:
renice -20 cat /home/yoursrcdspath/srcds.pid
>/dev/null 2>&1
/dev/null是 Unix 底下的垃圾筒+黑洞。它不帶任何意義,所有丟進去的東西都會被吃掉然後不見,反正你不想看到的東西丟給 null 就對了。
根據「man bash」裡 REDIRECTION 段落裡的說明,重新導向的順序是由左至右。也就是說「>/dev/null 2>&1」會先處理「>/dev/null」再處理「2>&1」。所以其意思就是將標準輸出和標準錯誤全部都丟到/dev/null中,眼不見為淨。
sed簡易筆記
sed為串流編輯器,可直接編輯檔案的資料流(stream),其工作模式為比對每一資料列,若符合樣式,即執行指定的動作。
要注意sed並不會修改檔案的內容,而是讀取檔案後,修改其內容再送到標準輸出。
#sed 'pattern cmd' files
sed syntax
- #sed '1,4d' thisfile
刪除thisfile的第1~4列,剩下的顯示出來 - #sed '/http/d' thisfile
刪除thilsfile中含有http字串的所有列,剩下的顯示出來 - #sed '/[0-9]\{3\}/d' thisfile
刪除thisfile中含有3個數字的所有列,剩下的顯示出來 - #sed '/^$/' thisfile
刪除thisfile中的所有空白列,剩下的顯示出來 - #sed '/http/!d' thisfile
刪除thilsfile不含有http字串的所有列,剩下的顯示出來 - #sed -n '/http/p' thisfile
印出thisfile中含有http字串的所有列(-n是抑制預設全部印出的選項) - #sed -n 's/http/web/gp' thisfile
將thislfile中所有的http字串改為web, s為取代(substitute)的命令, g表示全域(global),不加g時,只會更換第一個找到的http字串 - #sed -n 's/http//gp' thisfile
將thisfile中所有的http字串刪除 - #sed 's/^...//' thisfile
將thisfile中每一行的前三個字元刪除 - #sed -n 's/\(http\)/\1s/gp' thisfile
使用\1將符合http字串的部份存起來,再抓出來使用,所以上面是將每一列中的http字串換成https字串 - #sed -n '/AAA/ s/123/456/p' thisfile
找到在thisfile中有AAA的資料列後,再將該列的123換成456 - #sed -n '/AAA/,/DDD/ s/123/456/p' thisfile
找到在thsifle中AAA列至DDD列的所有資料列中,將123換成456 - #sed -n '2,4 s/123/456/p' thisfile
將thisfile中第2~4列的123換成456
awk簡易筆記
awk是種可以處理資料,且產生格式化報表的語言,在shell程式當中廣泛的被使用。awk的工作方式是讀取資料檔,將每一列資料視為一筆記錄(record),每筆記錄以欄位分割符號分成若干個欄位(類似csv),然後輸出各個欄位之值。
#ps auxw|awk '{print $2}'
以上指令印出 ps auxw 指令中,每一列資料的第二欄(pid)
awk處理記錄的方法,是將指定的pattern套用到每一筆記錄當中,若記錄符合指定的pattern,則執行指定的action。action與pattern任一個可以省略,如果只有pattern,表示只要對符合pattern的記錄作用。如果只有action,表示要處理所有的記錄。
awk常用的格式
- awk 'pattern' files: 把符合apttern的資料列全部列出
- awk '{action}' files: 對每一列都執行action的動作
- awk 'pattern {action}' files: 對符合pattern的資料列,執行action的動作
#awk '/http/' web.log
顯示web.log中含有http pattern的資料列
#awk '/http/ {print $1, $2}' web.log
顯示web.log中含有http pattern的第一欄及第二欄的資料
#awk -F: '/^admin/ {prnt $3, $4}' /etc/passwd
用-F指定欄分割符號為:,印出admin為開頭的第三欄及第四欄的資料
Example:
#ifconfig|grep 'inet addr:'|grep Bcast|awk '{print $2}'|awk -F: '{print $2}'
取得網路卡的ip address
2011年4月15日
Scipy求eigenvalues
簡單的求eigenvalues範例:
- #-*-coding:utf-8-*-
- '''
- Created on 2011/4/15
- @author: Hung-Hsin Chen
- simple example for solving eigenvalues
- '''
- import numpy as np
- from scipy import linalg
- #A=[[1 2 3] [4 5 6] [7 8 9]]
- A = np.arange(1,10).reshape(3,3)
- eigvals, eigvecs = linalg.eig(A)
- #eigen vector is column vector
- for i in range(0,3):
- print eigvals[i], eigvecs[:,i]
- #A*X = lambda * X
- print np.dot(A, eigvecs[:,0].transpose())
- print eigvals[0]*eigvecs[:, 0]
2011年1月23日
Linux們的對話
有一天,Arch,Ubuntu,Debian,Fedora,Gentoo約好要一起試車。他們約在城外的一間速食店見面。
Ubuntu是一個新秀,他車上永遠有一大多酷炫的裝飾,和最新的技術。
Debian是個老實的守舊派,他兩年前當大家都在用引擎2.6的時候,他還在用引擎2.2。不過聽說這兩年他也換成引擎2.6了。
Fedora繼承爺爺留給他的車子之後,努力的改造一番之後倒也沒有辜負爺爺的給的跑車。他爺爺曾經是跑車界的第一人,也留給Fedora一些別人沒有的技術。
Gentoo是個古怪的實踐家,他車上除了一般配備之外,他還有一套可以輕鬆換掉輪子的工具,他甚至有一套可以修理這套工具的工具(Bootstrap)。
Archlinux是Gentoo的堂弟,他也和他堂哥一樣,只是他很多東西可以買現成的就買現成。必要時候才會拿起工具包敲敲打打。
他 們集合後,從城外出發,一開始領先的Gentoo和Archlinux,因為他們車上沒有太多累贅的配備,跑起來特別快。 Fedora,Debian,Ubuntu稍稍落後一小段。後來快到城內時下起雨來,大家紛紛換成雨胎,Gentoo首先察覺到下雨,他一停下來,大家也 跟著停車換輪胎。
Fedora,Debian,Ubuntu,Archlinux換上預備的輪胎就上路。
Gentoo還在拿起工 具打造他專屬的雨胎。
Fedora,Ubuntu,Archlinux所用的雨刷是兩個月前最新的技術,他會針對雨勢大小調整速度,但是未經完整測試的結 果就是,遇到閃電就會失常而阻擋視線。幸好Debian用的是手動控制的雨刷,沒有問題的繼續前進。
到了城裡,遇到紅燈,大家紛紛停下來。漫長的紅燈大家等得有點不耐煩,這時看到Windows騎著腳踏車橫越馬路。
Windows說:你們還在開過時的跑車嗎?為何不試看看腳踏車?你看我騎得不也很平穩?而且自從我加了輔助輪(WINXP)之後我已經不常跌倒(Crash)了。況且連我這樣的小孩子都會騎得很好,而在IIS牌的紅綠燈下,你們只是眼睜睜的看著我騎過去。
語畢,Windows走了之後,Gentoo問:他剛剛講什麼?
Ubuntu和Fedora預設有裝samba,稍微可以和Windows溝通,但也說不上來。
Ubuntu說:好像是在謝謝我們讓他過去…..吧。
Archlinux,Debian:好有禮貌的小孩!
綠燈亮了,他們紛紛出城。出了城外,他們發現開始下雪。下雪已經超出他們常識之外,因為這個地方很少下雪。
Fedora和ubuntu打電話回原廠尋求解答。
Debian和Archlinux開始詢問google。
Gentoo拿起工具,開始想要把他的雨胎纏上鍊子。
Archlinux看著表哥,也學著要把雨胎纏上鍊子,只是帶很少工具,所以花了比較多時間。
隨至Archlinux和Gentoo再出發之後。
Ubuntu也收到原廠外派更新組件車的服務。
Fedora也從使用者群組得到雪胎套件。
Debian由於現有輪軸不相容雪胎,所以用雨胎硬上。
這是一場試車活動,沒有起點和終點。
大家只是想從別人身上再次確認自己玩車的方式是自己想要的。
當然,這只是一場試車活動,如有雷同…存屬巧合。:p