Linux常用開發命令
一、 將一個命令的結果作為下一個命令的引數
符號:` `
說明:反引號,在鍵盤的左上角,數字1的左邊,不要將其同單引號(’)混淆。
功能:反引號括起來的字串被shell解釋為命令列,在執行時,shell首先執行該命令列,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分。
示例:(tomcat.pid檔案中存放有容器的程序Id)
$()
說明:效果同` `,寫shell腳步時看起來更加清晰。
示例:
xargs
功能:通過緩衝方式(批處理,效率比較高)並以前面命令列的輸出結果作為後面命令的引數。
常用引數:
`-n`:一次傳遞幾個引數
`-L`:一次傳遞幾行引數
`-I`:標示引數使用位置
示例一:
示例二:
-i 引數或者-I(大寫i)引數配合{},在任何位置引用前面命令的結果:
注意,加-i 引數直接用 {}就能代替管道之前的標準輸出的內容;加 -I 引數 需要事先指定替換字元。
若忽略 xargs 的 options 來看的話, cm1 | xargs cm2,可以單純看成: cm2`cm1`,因此, find .... |xargs rm 也可作 rm `find ...` 來處理;xargs由於是併發處理的,可能由於引數數量過多(成千上萬),導致後面的命令執行失敗,若遇此情況,可以用find .... -exec rm {} \; 替換,此命令為逐條處理。
二、 一個命令列上執行多個命令
符號 ;
說明:被分號(;)所分隔的命令會連續的執行下去,即使前面有錯誤的命令也會繼續執行後面的命令。
示例:
符號 &&
說明:被 && 所分隔,那麼命令也會一直執行下去,但是中間有錯誤的命令存在就不會執行後面的命令,沒錯就直行至完為止。
示例:
符號 ||
說明:被雙豎線 || 所分隔,那麼一遇到可以執行成功的命令就會停止執行後面的命令,而不管後面的命令是否正確與否。如果執行到錯誤的命令就是繼續執行後一個命令,一直執行到遇到正確的命令為止。
示例:
三、 壓縮&解壓
tar
壓縮:tar –cvf 檔名.tar *.jpg
-c:建立新壓縮檔案
-v:顯示所有過程
-f:使用檔案名字,切記,這個引數是最後一個引數,後面只能接檔案名。
解壓:tar –xvf 檔名.tar
-x:解壓檔案。
追加:tar –rf檔名.tar *.gif
-r向壓縮歸檔檔案末尾追。將所有.gif的檔案增加到 檔名.tar 的包裡面去。加檔案。
更新:tar -uf all.tar logo.gif
-u更新原壓縮包中的檔案,更新原來tar包all.tar中logo.gif檔案。
檢視:tar –tf all.tar
-t是列出檔案的意思,列出all.tar包中所有檔案。
tar.gz (只需要在tar命令上加-z即可,例如:)
壓縮:tar –zcvf 檔名.tar.gz *.jpg
解壓:tar –zxvf 檔名.tar.gz
-z帶有gzip屬性的。
zip
壓縮:
把/home目錄下面的mydata目錄壓縮為mydata.zip
zip -r mydata.zip mydata #壓縮mydata目錄
把/home目錄下面的abc資料夾和123.txt壓縮成為mydata.zip
zip -r mydata.zip abc 123.txt
解壓:
把/home目錄下面的mydata.zip解壓到mydata目錄裡面
unzip mydata.zip -d mydata
把/home目錄下面的mydata.zip直接解壓到/home目錄裡面
unzip mydata.zip
把/home目錄下面的abc12.zip、abc23.zip、abc34.zip同時解壓到/home目錄裡面
unzip abc\*.zip
檢視:
檢視把/home目錄下面的mydata.zip裡面的內容
unzip -v mydata.zip
驗證:
驗證/home目錄下面的wwwroot.zip是否完整
unzip -t wwwroot.zip
主要引數解析:
-c:將解壓縮的結果
-l:顯示壓縮檔案內所包含的檔案
-p:與-c引數類似,會將解壓縮的結果顯示到螢幕上,但不會執行任何的轉換
-t:檢查壓縮檔案是否正確
-u:與-f引數類似,但是除了更新現有的檔案外,也會將壓縮檔案中的其它檔案解壓縮到目錄中
-v:執行是時顯示詳細的資訊
-z:僅顯示壓縮檔案的備註文字
-a:對文字檔案進行必要的字元轉換
-b:不要對文字檔案進行字元轉換
-C:壓縮檔案中的檔名稱區分大小寫
-j:不處理壓縮檔案中原有的目錄路徑
-L:將壓縮檔案中的全部檔名改為小寫
-M:將輸出結果送到more程式處理
-n:解壓縮時不要覆蓋原有的檔案
-o:不必先詢問使用者,unzip執行後覆蓋原有檔案
-P:使用zip的密碼選項
-q:執行時不顯示任何資訊
-s:將檔名中的空白字元轉換為底線字元
-V:保留VMS的檔案版本資訊
-X:解壓縮時同時回存檔案原來的UID/GID
gz
壓縮:
把test6目錄下的每個檔案壓縮成.gz檔案:
gzip* 不保留原始檔
gzip–c file >fileName.gz 保留原始檔
壓縮一個tar備份檔案,此時壓縮檔案的副檔名為.tar.gz:
gzip-r log.tar
遞迴地壓縮目錄:
gzip-rv test6
這樣,所有test下面的檔案都變成了*.gz,目錄依然存在只是目錄裡面的檔案相應變成了*.gz.這就是壓縮,和打包不同。因為是對目錄操作,所以需要加上-r選項,這樣也可以對子目錄進行遞迴了。
解壓:
把當前目錄每個壓縮的檔案解壓,並列出詳細的資訊
gzip–dv * (或者用gunzip相當於gzip –d ,例如gunzip test.gz)
gzip–c file.gz>newFileName 保留原始檔
遞迴地解壓目錄
gzip–dr test6
檢視:
詳細顯示當前目錄每個壓縮的檔案的資訊,並不解壓
gzip –l *
主要引數解析:
rar
壓縮:
rara file.rar file1 保留原始檔
rarm file.rar file1 不保留原始檔
說明:如果此時abc.rar檔案不存在,會自行建立abc.rar文件案,如果abc.rar檔案已經存在,則將file1檔案壓縮排abc.rar檔案中,若abc.rar檔案中已存在一個file1檔案,則會更新file1檔案。
注意:如果只輸入"rar a file1.rar"命令,而沒有接檔名或目錄名的話,會將當前目錄下所有的檔案和資料夾壓縮排file1.rar文件中。這點要注意一下。
解壓:
rar efile.rar
rarx file.rar
說明:假設file.rar目錄中有一個名為file1的檔案和一個名為test的目錄,test目錄中有一個名為file2的檔案。使用e命令,會將abc.rar中的file1檔案連同test目錄下的file2檔案解壓到當前目錄。如果想保持abc.rar目錄中的目錄結構請使用x命令。
刪除:
rard file.rar file1
刪除abc.rar檔案中的file1檔案。
四、 檢視檔案
檢視全部
cat:可以一次顯示整個檔案,如果檔案比較大,只能看到末尾部分,使用不是很方便;從第一行開始顯示。
nl:同cat,顯示行號。
tac:類似於cat;從最後一行開始顯示。
more:可以讓螢幕在顯示滿一螢幕時暫停,此時可按空格健繼續顯示下一個畫面,或按Q鍵停止顯示。
less:也可以分頁顯示檔案,和more命令的區別就在於它支援上下鍵捲動螢幕,當結束瀏覽時,只要在less命令的提示符“: ”下按Q鍵即可。
od:以二進位制方式顯示文件內容。
示例:
cat install.log | grep “i686”| more
命令實際上是將install.log檔案內的所有內容管道給grep,然後查詢包含i686的文字行,最後將查詢到的內容管道給more分頁輸出。
cat install.log | grep “i686”| less
含義也是一樣只不過最後管道給的不是more而是less。
檢視部分
tail:僅僅顯示後面幾行;tail-500f bus.log,如需逆序顯示加-r
head:僅僅顯示前面幾行
過濾grep
只過濾匹配行,直接grep[關鍵字]即可(反取加-v引數),如想過濾匹配行的上下幾行,規則如下:
$grep -5'parttern' inputfile //列印匹配行的前後5行
$grep -C 5'parttern' inputfile //列印匹配行的前後5行
$grep -A 5'parttern' inputfile //列印匹配行的後5行
$grep -B 5'parttern' inputfile //列印匹配行的前5行
或操作:
grep -E '123|abc' filename // 找出檔案(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同樣可以實現
awk '/123|abc/' filename // awk 的實現方式
與操作:
grep pattern1 files | grep pattern2 //顯示既匹配 pattern1 又匹配 pattern2 的行
cat files|grep pattern1|grep pattern2 //注意利用管道的概念
其它操作:
grep -i pattern files //不區分大小寫地搜尋,預設情況區分大小寫
grep -l pattern files //只列出匹配的檔名
grep -L pattern files //列出不匹配的檔名
grep -w pattern files //只匹配整個單詞,而不是字串的一部分(如匹配‘magic’,而不是‘magical’)
grep -C number pattern files //匹配的上下文分別顯示[number]行
awk
基礎文字:(以下操作都圍繞此檔案進行)
輸出某幾列:(預設的列分隔符為空格)
awk '{print $1,$4}' wzp.log
awk '{printf "%-16s%-10s\n",$1,$4}' wzp.log
指定分隔符:(例如#)
awk -F \# '{print $1,$3}' wzp.log
awk 'BEGIN{FS="\#"} {print$1,$3}' wzp.log
awk -F '[#:]' '{print $1,$3,$4}' wzp.log
自定義變數:(-v)
awk -va=10 -vb=hello '{print $4,$4+a,$4b}'wzp.log
過濾符合條件的記錄行:
根據運算子過濾:
awk '$4=="t2"' wzp.log
awk '$2=="INFO" &&$13>=2' wzp.log
運算子種類:
根據正則過濾:~ 表示模式開始;// 中是模式內容
awk '/t2/' wzp.log
awk 'BEGIN{IGNORECASE=1} /t2/' wzp.log
awk '$3 ~ /3/ {print $1,$2,$3}' wzp.log
根據指令碼檔案過濾:
awk指令碼示例:
注意兩個關鍵詞BEGIN和END:
BEGIN{ 這裡面放的是執行前的語句 }
END {這裡面放的是處理完所有的行後要執行的語句 }
{這裡面放的是處理每一行時要執行的語句}
內建變數:(可以在腳步任意地方引用)
sed
概述:
grep 更適合單純的查詢或匹配文字;awk 更適合格式化文字,對文字進行較複雜格式處理;sed 更適合編輯匹配到的文字。
語法:
sed [-hnV][-e<script>][-f<script檔案>][文字檔案]
舉例:
實戰一:例如取IP地址
實戰二:取檔案中間位置的內容
vi(只簡單介紹常用的,簡單的不說)
查詢
向下查詢:./
向上查詢:?
定位下一個匹配下:n
刪除(在命令列模式即可,不用進入編輯模式)
刪除游標後一字元:x
刪除游標後n字元:nx
刪除游標前一字元:X
刪除游標前一字元:nX
撤銷(在命令列模式即可,不用進入編輯模式)
撤銷上一步操作:u
恢復上一步被撤銷的操作:Ctrl+r
行號
顯示行號:setnumber/ set nu
取消行號:setnonumber/set nonu
游標
跳到下一單詞:w(類似e)
跳到上一個單詞:b
跳到檔案首行:gg(同H)
跳到檔案尾行:G(同L)
跳到檔案第n行:nH(同nG)
跳到行首:^(同0)
跳到行尾:$
下面附上超級牛x的vi鍵點陣圖:
五、 授權
chmod
Linux/Unix的檔案呼叫許可權分為三級 : 檔案擁有者、群組、其他。利用 chmod 可以給這三級人員授權、減權。
語法
chmod [-cfvR] [--help] [--version]mode file...
示例:
此外chmod也可以用數字來表示許可權如 : chmod 777 file 與 chmod a=rwxfile效果相同;chmod ug=rwx,o=xfile 與 chmod 771 file 效果相同。詳情如下:
這裡要說一下chmod4755和chmod 755的區別:(1)755不用多說,即讓檔案所有者可讀可寫可執行;與檔案所有者同屬一個使用者組的其他使用者可讀可執行;其它使用者組可讀可執行。(2)chmod 4755與chmod 755 的區別在於開頭多了一位,這個4表示其他使用者執行檔案時,具有與所有者相當的許可權。就是為了防止其他使用者執行檔案時,該檔案可能需要訪問一些只有root使用者才有權訪問的其它檔案。因此,雖然其它使用者有該檔案的可執行許可權,但是沒有該檔案關聯的一些檔案的可執行許可權,從而不能執行該檔案。這種情況下,就可以用 chmod 4755,從而讓其它使用者擁有了檔案擁有者一般的該檔案執行許可權。
chown
Linux/Unix是多人多工作業系統,所有的檔案皆有擁有者。利用 chown 將指定檔案的擁有者改為指定的使用者或組,使用者可以是使用者名稱或者使用者ID;組可以是組名或者組ID;檔案是以空格分開的要改變許可權的檔案列表,支援萬用字元。
一般來說,這個指令只有是由系統管理者(root)所使用,一般使用者沒有許可權可以改變別人的檔案擁有者,也沒有許可權可以自己的檔案擁有者改設為別人。只有系統管理者(root)才有這樣的許可權。
示例: