玩過Linux的人都會知道,Linux中的命令的確是非常多,但是玩過Linux的人也從來不會因為Linux的命令如此之多而煩惱,因為我們只需要掌握我們最常用的命令就可以了。當然你也可以在使用時去找一下man,他會幫你解決不少的問題。然而每個人玩Linux的目的都不同,所以他們常用的命令也就差異非常大,而我主要是用Linux進行C/C++和shell程序編寫的,所以常用到的命令可以就會跟一個管理Linux系統(tǒng)的人有所不同。因為不想在使用是總是東查西找,所以在此總結(jié)一下,方便一下以后的查看。不多說,下面就說說我最常用的Linux命令。 1、cd命令 這是一個非常基本,也是大家經(jīng)常需要使用的命令,它用于切換當前目錄,它的參數(shù)是要切換到的目錄的路徑,可以是絕對路徑,也可以是相對路徑。如:
cd?/root/Docements?#?切換到目錄/root/Docements?? cd?./path??????????#?切換到當前目錄下的path目錄中,“.”表示當前目錄???? cd?../path?????????#?切換到上層目錄中的path目錄中,“..”表示上一層目錄
2、ls命令 這是一個非常有用的查看文件與目錄的命令,list之意,它的參數(shù)非常多,下面就列出一些我常用的參數(shù)吧,如下:
-l?:列出長數(shù)據(jù)串,包含文件的屬性與權(quán)限數(shù)據(jù)等?? -a?:列出全部的文件,連同隱藏文件(開頭為.的文件)一起列出來(常用)?? -d?:僅列出目錄本身,而不是列出目錄的文件數(shù)據(jù)?? -h?:將文件容量以較易讀的方式(GB,kB等)列出來?? -R?:連同子目錄的內(nèi)容一起列出(遞歸列出),等于該目錄下的所有文件都會顯示出來
注:這些參數(shù)也可以組合使用,下面舉兩個例子:
ls?-l?#以長數(shù)據(jù)串的形式列出當前目錄下的數(shù)據(jù)文件和目錄?? ls?-lR?#以長數(shù)據(jù)串的形式列出當前目錄下的所有文件
3、grep命令 該命令常用于分析一行的信息,若當中有我們所需要的信息,就將該行顯示出來,該命令通常與管道命令一起使用,用于對一些命令的輸出進行篩選加工等等,它的簡單語法為:
grep?[-acinv]?[--color=auto]?'查找字符串'?filename
它的常用參數(shù)如下:
-a?:將binary文件以text文件的方式查找數(shù)據(jù)?? -c?:計算找到‘查找字符串’的次數(shù)?? -i?:忽略大小寫的區(qū)別,即把大小寫視為相同?? -v?:反向選擇,即顯示出沒有‘查找字符串’內(nèi)容的那一行?? #?例如:?? #?取出文件/etc/man.config中包含MANPATH的行,并把找到的關(guān)鍵字加上顏色?? grep?--color=auto?'MANPATH'?/etc/man.config?? #?把ls?-l的輸出中包含字符串file(不區(qū)分大小寫)的內(nèi)容輸出?? ls?-l?|?grep?-i?file?? #?查找名為kafka的進程,但是不包括grep自身。因為grep也是一個進程,grep?kafka中也包含了kafka。 ps?aux?|?grep?kafka?|?grep?-v?grep
4、find命令 find是一個基于查找的功能非常強大的命令,相對而言,它的使用也相對較為復(fù)雜,參數(shù)也比較多,所以在這里將給把它們分類列出,它的基本語法如下:
find?[PATH]?[option]?[action]?? ?? #?與時間有關(guān)的參數(shù):?? -mtime?n?:?n為數(shù)字,意思為在n天之前的“一天內(nèi)”被更改過的文件;?? -mtime?+n?:?列出在n天之前(不含n天本身)被更改過的文件名;?? -mtime?-n?:?列出在n天之內(nèi)(含n天本身)被更改過的文件名;?? -newer?file?:?列出比file還要新的文件名?? #?例如:?? find?/root?-mtime?0?#?在當前目錄下查找今天之內(nèi)有改動的文件?? ?? #?與用戶或用戶組名有關(guān)的參數(shù):?? -user?name?:?列出文件所有者為name的文件?? -group?name?:?列出文件所屬用戶組為name的文件?? -uid?n?:?列出文件所有者為用戶ID為n的文件?? -gid?n?:?列出文件所屬用戶組為用戶組ID為n的文件?? #?例如:?? find?/home/ljianhui?-user?ljianhui?#?在目錄/home/ljianhui中找出所有者為ljianhui的文件?? ?? #?與文件權(quán)限及名稱有關(guān)的參數(shù):?? -name?filename?:找出文件名為filename的文件?? -size?[+-]SIZE?:找出比SIZE還要大(+)或?。?)的文件?? -tpye?TYPE?:查找文件的類型為TYPE的文件,TYPE的值主要有:一般文件(f)、設(shè)備文件(b、c)、?? ?????????????目錄(d)、連接文件(l)、socket(s)、FIFO管道文件(p);?? -perm?mode?:查找文件權(quán)限剛好等于mode的文件,mode用數(shù)字表示,如0755;?? -perm?-mode?:查找文件權(quán)限必須要全部包括mode權(quán)限的文件,mode用數(shù)字表示?? -perm?+mode?:查找文件權(quán)限包含任一mode的權(quán)限的文件,mode用數(shù)字表示?? #?例如:?? find?/?-name?passwd?#?查找文件名為passwd的文件?? find?.?-perm?0755?#?查找當前目錄中文件權(quán)限的0755的文件?? find?.?-size?+12k?#?查找當前目錄中大于12KB的文件,注意c表示byte
5、cp命令 該命令用于復(fù)制文件,copy之意,它還可以把多個文件一次性地復(fù)制到一個目錄下,它的常用參數(shù)如下:
-a?:將文件的特性一起復(fù)制?? -p?:連同文件的屬性一起復(fù)制,而非使用默認方式,與-a相似,常用于備份?? -i?:若目標文件已經(jīng)存在時,在覆蓋時會先詢問操作的進行?? -r?:遞歸持續(xù)復(fù)制,用于目錄的復(fù)制行為?? -u?:目標文件與源文件有差異時才會復(fù)制
例如:
cp?-a?file1?file2?#連同文件的所有特性把文件file1復(fù)制成文件file2?? cp?file1?file2?file3?dir?#把文件file1、file2、file3復(fù)制到目錄dir中?? cp?-r?dir1?dir2?#文件夾dir1連同里面的內(nèi)容復(fù)制成dir2
6、mv命令 該命令用于移動文件、目錄或更名,move之意,它的常用參數(shù)如下:
-f?:force強制的意思,如果目標文件已經(jīng)存在,不會詢問而直接覆蓋?? -i?:若目標文件已經(jīng)存在,就會詢問是否覆蓋?? -u?:若目標文件已經(jīng)存在,且比目標文件新,才會更新
注:該命令可以把一個文件或多個文件一次移動一個文件夾中,但是最后一個目標文件一定要是“目錄”。 例如:
mv?file1?file2?file3?dir?#?把文件file1、file2、file3移動到目錄dir中?? mv?file1?file2?#?把文件file1重命名為file2
7、rm命令 該命令用于刪除文件或目錄,remove之間,它的常用參數(shù)如下:
-f?:就是force的意思,忽略不存在的文件,不會出現(xiàn)警告消息?? -i?:互動模式,在刪除前會詢問用戶是否操作?? -r?:遞歸刪除,最常用于目錄刪除,它是一個非常危險的參數(shù)
例如:
rm?-i?file?#?刪除文件file,在刪除之前會詢問是否進行該操作?? rm?-fr?dir?#?強制刪除目錄dir中的所有文件
8、ps命令 該命令用于將某個時間點的進程運行情況選取下來并輸出,process之意,它的常用參數(shù)如下:
-A?:所有的進程均顯示出來?? -a?:不與terminal有關(guān)的所有進程?? -u?:有效用戶的相關(guān)進程?? -x?:一般與a參數(shù)一起使用,可列出較完整的信息?? -l?:較長,較詳細地將PID的信息列出
其實我們只要記住ps一般使用的命令參數(shù)搭配即可,它們并不多,如下:
ps?aux?#?查看系統(tǒng)所有的進程數(shù)據(jù)?? ps?ax?#?查看不與terminal有關(guān)的所有進程?? ps?-lA?#?查看系統(tǒng)所有的進程數(shù)據(jù)?? ps?axjf?#?查看連同一部分進程樹狀態(tài)
9、kill命令 該命令用于向某個工作(%jobnumber)或者是某個PID(數(shù)字)傳送一個信號,它通常與ps和jobs命令一起使用,它的基本語法如下:
kill?-signal?PID
signal的常用參數(shù)如下: 注:最前面的數(shù)字為信號的代號,使用時可以用代號代替相應(yīng)的信號。
1:SIGHUP,啟動被終止的進程?? 2:SIGINT,相當于輸入ctrl+c,中斷一個程序的進行?? 9:SIGKILL,強制中斷一個進程的進行?? 15:SIGTERM,以正常的結(jié)束進程方式來終止進程?? 17:SIGSTOP,相當于輸入ctrl+z,暫停一個進程的進行
例如:
#?以正常的結(jié)束進程方式來終于第一個后臺工作,可用jobs命令查看后臺中的第一個工作進程?? kill?-SIGTERM?%1??? #?重新啟動進程ID為PID的進程,PID可用ps命令通過管道命令加上grep命令進行篩選獲得?? kill?-SIGHUP?PID
10、killall命令 Linux系統(tǒng)中的killall命令用于殺死指定名字的進程(kill processes by name)。它的一般語法如下:
killall[參數(shù)][進程名]
它的參數(shù)如下:
-Z?只殺死擁有scontext?的進程 -e?要求匹配進程名稱 -I?忽略小寫 -g?殺死進程組而不是進程 -i?交互模式,殺死進程前先詢問用戶 -l?列出所有的已知信號名稱 -q?不輸出警告信息 -s?發(fā)送指定的信號 -v?報告信號是否成功發(fā)送 -w?等待進程死亡 --help?顯示幫助信息 --version?顯示版本顯示
例如:
#?殺死所有同名進程 killall?vi #?向進程發(fā)送指定信號 killall?-TERM?vi??或者??killall?-KILL?vi
11、file命令 該命令用于判斷接在file命令后的文件的屬性,因為在Linux下文件的類型并不是以后綴為分的,所以這個命令對我們來說就很有用了,它的用法非常簡單,基本語法如下:
file?filename?? #例如:?? file?./test
12、tar命令 該命令用于對文件進行打包,默認情況并不會壓縮,如果指定了相應(yīng)的參數(shù),它才會調(diào)用相應(yīng)的壓縮程序(如gzip和bzip等)進行壓縮和解壓。它的常用參數(shù)如下:
-c?:新建打包文件?? -t?:查看打包文件的內(nèi)容含有哪些文件名?? -x?:解打包或解壓縮的功能,可以搭配-C(大寫)指定解壓的目錄,注意-c,-t,-x不能同時出現(xiàn)在同一條命令中?? -j?:通過bzip2的支持進行壓縮/解壓縮?? -z?:通過gzip的支持進行壓縮/解壓縮?? -v?:在壓縮/解壓縮過程中,將正在處理的文件名顯示出來?? -f?filename?:filename為要處理的文件?? -C?dir?:指定壓縮/解壓縮的目錄dir
上面的解說可以已經(jīng)讓你暈過去了,但是通常我們只需要記住下面三條命令即可:
壓縮:tar?-jcvf?filename.tar.bz2?要被處理的文件或目錄名稱?? 查詢:tar?-jtvf?filename.tar.bz2?? 解壓:tar?-jxvf?filename.tar.bz2?-C?欲解壓縮的目錄
注:文件名并不定要以后綴tar.bz2結(jié)尾,這里主要是為了說明使用的壓縮程序為bzip2 13、cat命令 該命令用于查看文本文件的內(nèi)容,后接要查看的文件名,通常可用管道與more和less一起使用,從而可以一頁頁地查看數(shù)據(jù)。例如:
cat?text?|?less?#?查看text文件中的內(nèi)容?? #?注:這條命令也可以使用less?text來代替
14、chgrp命令 該命令用于改變文件所屬用戶組,它的使用非常簡單,它的基本用法如下:
chgrp?[-R]?dirname/filename?? -R?:進行遞歸的持續(xù)對所有文件和子目錄更改?? #?例如:?? chgrp?users?-R?./dir?#?遞歸地把dir目錄下中的所有文件和子目錄下所有文件的用戶組修改為users
15、chown命令 該命令用于改變文件的所有者,與chgrp命令的使用方法相同,只是修改的文件屬性不同,不再詳述。 16、chmod命令 該命令用于改變文件的權(quán)限,一般的用法如下:
chmod?[-R]?abc?文件或目錄?? -R:進行遞歸的持續(xù)更改,即連同子目錄下的所有文件都會更改? 其中a,b,c各為一個數(shù)字,分別表示User、Group、及Other的權(quán)限。 r=4,w=2,x=1 若要rwx屬性則4+2+1=7; 若要rw-屬性則4+2=6; 若要r-x屬性則4+1=5。
同時,chmod還可以使用u(user)、g(group)、o(other)、a(all)和+(加入)、-(刪除)、=(設(shè)置)跟rwx搭配來對文件的權(quán)限進行更改。 例如:
chmod?755?file?#?把file的文件權(quán)限改變?yōu)?rwxr-xr-x?? chmod?g+w?file?#?向file的文件權(quán)限中加入用戶組可寫權(quán)限
chmod?a=rwx?file和chmod?777?file效果相同 chmod?ug=rwx,o=x?file和chmod?771?file效果相同
17、netstat命令
該命令用于改變文件的權(quán)限,一般的用法如下:
語法:
netstat?[-acCeFghilMnNoprstuvVwx][-A][--ip]
參數(shù)說明:
-a或--all?顯示所有連線中的Socket。 -A或--?列出該網(wǎng)絡(luò)類型連線中的相關(guān)地址。 -c或--continuous?持續(xù)列出網(wǎng)絡(luò)狀態(tài)。 -C或--cache?顯示路由器配置的快取信息。 -e或--extend?顯示網(wǎng)絡(luò)其他相關(guān)信息。 -F或--fib?顯示FIB。 -g或--groups?顯示多重廣播功能群組組員名單。 -h或--help?在線幫助。 -i或--interfaces?顯示網(wǎng)絡(luò)界面信息表單。 -l或--listening?顯示監(jiān)控中的服務(wù)器的Socket。 -M或--masquerade?顯示偽裝的網(wǎng)絡(luò)連線。 -n或--numeric?直接使用IP地址,而不通過域名服務(wù)器。 -N或--netlink或--symbolic?顯示網(wǎng)絡(luò)硬件外圍設(shè)備的符號連接名稱。 -o或--timers?顯示計時器。 -p或--programs?顯示正在使用Socket的程序識別碼和程序名稱。 -r或--route?顯示Routing?Table。 -s或--statistice?顯示網(wǎng)絡(luò)工作信息統(tǒng)計表。 -t或--tcp?顯示TCP傳輸協(xié)議的連線狀況。 -u或--udp?顯示UDP傳輸協(xié)議的連線狀況。 -v或--verbose?顯示指令執(zhí)行過程。 -V或--version?顯示版本信息。 -w或--raw?顯示RAW傳輸協(xié)議的連線狀況。 -x或--unix?此參數(shù)的效果和指定"-A?unix"參數(shù)相同。 --ip或--inet?此參數(shù)的效果和指定"-A?inet"參數(shù)相同。
例如:
顯示詳細的網(wǎng)絡(luò)狀況 #?netstat?-a 顯示當前戶籍UDP連接狀況 #?netstat?-nu 顯示UDP端口號的使用情況 #?netstat?-apu 顯示網(wǎng)卡列表 #?netstat?-i 顯示網(wǎng)絡(luò)統(tǒng)計信息 #?netstat?-s
18、vim命令 該命令主要用于文本編輯,它接一個或多個文件名作為參數(shù),如果文件存在就打開,如果文件不存在就以該文件名創(chuàng)建一個文件。vim是一個非常好用的文本編輯器,它里面有很多非常好用的命令,在這里不再多說。你可以從這里下載vim常用操作的詳細說明。 19、gcc命令 對于一個用Linux開發(fā)C程序的人來說,這個命令就非常重要了,它用于把C語言的源程序文件,編譯成可執(zhí)行程序,由于g++的很多參數(shù)跟它非常相似,所以這里只介紹gcc的參數(shù),它的常用參數(shù)如下:
-o?:output之意,用于指定生成一個可執(zhí)行文件的文件名?? -c?:用于把源文件生成目標文件(.o),并阻止編譯器創(chuàng)建一個完整的程序?? -I?:增加編譯時搜索頭文件的路徑?? -L?:增加編譯時搜索靜態(tài)連接庫的路徑?? -S?:把源文件生成匯編代碼文件?? -lm:表示標準庫的目錄中名為libm.a的函數(shù)庫?? -lpthread?:連接NPTL實現(xiàn)的線程庫?? -std=?:用于指定把使用的C語言的版本?? ?? #?例如:?? #?把源文件test.c按照c99標準編譯成可執(zhí)行程序test?? gcc?-o?test?test.c?-lm?-std=c99?? #把源文件test.c轉(zhuǎn)換為相應(yīng)的匯編程序源文件test.s?? gcc?-S?test.c
20、time命令 該命令用于測算一個命令(即程序)的執(zhí)行時間。它的使用非常簡單,就像平時輸入命令一樣,不過在命令的前面加入一個time即可,例如:
time?./process?? time?ps?aux
在程序或命令運行結(jié)束后,在最后輸出了三個時間,它們分別是:
user:用戶CPU時間,命令執(zhí)行完成花費的用戶CPU時間,即命令在用戶態(tài)中執(zhí)行時間總和;
system:系統(tǒng)CPU時間,命令執(zhí)行完成花費的系統(tǒng)CPU時間,即命令在核心態(tài)中執(zhí)行時間總和;
real:實際時間,從command命令行開始執(zhí)行到運行終止的消逝時間;
注:用戶CPU時間和系統(tǒng)CPU時間之和為CPU時間,即命令占用CPU執(zhí)行的時間總和。實際時間要大于CPU時間,因為Linux是多任務(wù)操作系統(tǒng),往往在執(zhí)行一條命令時,系統(tǒng)還要處理其它任務(wù)。另一個需要注意的問題是即使每次執(zhí)行相同命令,但所花費的時間也是不一樣,其花費時間是與系統(tǒng)運行相關(guān)的。