## 簡述
每個程序員基本都應該用過Linux操作系統,有的用來搭建服務器,有的用來安裝前端擴展插件工具等等,但是無一例外都是需要操作Linux,所以我這次分享一些常見的實用的命令。
本文將持續更新...
## chkconfig
chkconfig命令用于檢查,設置系統的各種服務。
chkconfig 可查詢操作系統在每一個執行等級中會執行哪些系統服務,其中包括各類常駐服務。
語法
~~~
chkconfig [--add][--del][--list][系統服務]
或
chkconfig [--level <等級代號>][系統服務][on/off/reset]
~~~
參數:
* --add 增加所指定的系統服務,讓chkconfig指令得以管理它,并同時在系統啟動的敘述文件內增加相關數據。
* --del 刪除所指定的系統服務,不再由chkconfig指令管理,并同時在系統啟動的敘述文件內刪除相關數據。
* --level 指定讀系統服務要在哪一個執行等級中開啟或關畢。
實例列出chkconfig所知道的所有命令。
~~~
# chkconfig -list
~~~
開啟服務。
~~~
//列出chkconfig所知道的所有的服務的情況
# chkconfig -list
//開啟Telnet服務
# chkconfig telnet on
~~~
關閉服務
~~~
//列出chkconfig所知道的所有的服務的情況
# chkconfig -list
//關閉Telnet服務
# chkconfig telnet off
~~~
## hostname
這個命令主要是用來查看機器的域名活IP地址的。
* hostname 沒有選項,顯示主機名字
* hostname –d 顯示機器所屬域名
* hostname –f 顯示完整的主機名和域名
* hostname –i 顯示當前機器的ip地址
## ping
ping 命令將數據包發向用戶指定地址。當包被接收。目標機器發送返回數據包。
ping 主要有兩個作用
1. 用來確認網絡連接是暢通的。
2. 用來查看連接的速度信息。
如果你 ping www.yahoo.com 它將返回它的ip地址 。你可以通過 ctrl+C 來停止命令。
## ifconfig
Linux中 ifconfig 命令用于顯示或設置網絡設備。
ifconfig 可設置網絡設備的狀態,或是顯示目前的設置。
案例:
1、顯示網絡設備信息:ifconfig
~~~
eth0 Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C
inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
Interrupt:185 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
~~~
2、啟動關閉指定網卡:
~~~
ifconfig eth0 down(關)
ifconfig eth0 up(開)
~~~
3、為網卡配置和刪除IPv6地址:
~~~
ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //為網卡誒之IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //為網卡刪除IPv6地址
~~~
4、用ifconfig修改MAC地址
~~~
ifconfig eth0 down //關閉網卡
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
ifconfig eth0 up //啟動網卡
ifconfig eth1 hw ether 00:1D:1C:1D:1E //關閉網卡并修改MAC地址
ifconfig eth1 up //啟動網卡
~~~
5、配置IP地址
~~~
//給eth0網卡配置IP地址
ifconfig eth0 192.168.1.56
// 給eth0網卡配置IP地址,并加上子掩碼
ifconfig eth0 192.168.1.56 netmask 255.255.255.0
// 給eth0網卡配置IP地址,加上子掩碼,加上個廣播地址
ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
~~~
6、啟用和關閉ARP協議
~~~
ifconfig eth0 arp //開啟
ifconfig eth0 -arp //關閉
~~~
7、設置最大傳輸單元
~~~
//設置能通過的最大數據包大小為 1500 bytes
ifconfig eth0 mtu 1500
~~~
## nslookup
nslookup命令是常用域名查詢工具,就是查DNS信息用的命令。
nslookup 這個命令在 有ip地址時,可以用這個命令來顯示主機名,可以找到給定域名的所有ip地址。(必須連接到互聯網才能使用這個命令)
例子:nslookup www.baidu.com
你也可以使用 nslookup 從ip獲得主機名或從主機名獲得ip。
【系統沒有nslookup命令?】
如果你的Linux系統沒有nslookup命令,那么八成是你沒有安裝bind-utils包。
直接yum install bind-utils就可以解決問題了。
## netstat
Netstat 命令用于顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Memberships) 等等。
netstat是發現主機連接最有用最通用的Linux命令。
你可以使用"netstat -g"查詢該主機訂閱的所有多播組(網絡)。
~~~
netstat -nap | grep port //將會顯示使用該端口的應用程序的進程id
netstat -a or netstat –all //將會顯示包括TCP和UDP的所有連接
netstat --tcp or netstat –t //將會顯示TCP連接
netstat --udp or netstat –u //將會顯示UDP連接
netstat -g //將會顯示該主機訂閱的所有多播網絡。
~~~
## chmod
Linux/Unix 的文件調用權限分為三級 : 文件擁有者、群組、其他。
利用 chmod 可以藉以控制文件如何被他人所調用。
使用權限 : 所有使用者
語法:
~~~
chmod?[-cfvR]?[--help]?[--version]?mode?file...
~~~
參數說明:
~~~
mode : 權限設定字串,格式如下 :
[ugoa...][[+-=][rwxX]...][,...]
其中:
u 表示該文件的擁有者,g 表示與該文件的擁有者屬于同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該文件是個子目錄或者該文件已經被設定過為可執行。
-c : 若該文件權限確實已經更改,才顯示其更改動作
-f : 若該文件權限無法被更改也不要顯示錯誤訊息
-v : 顯示權限變更的詳細資料
-R : 對目前目錄下的所有文件與子目錄進行相同的權限變更(即以遞回的方式逐個變更)
--help : 顯示輔助說明
--version : 顯示版本
~~~
實例:
將文件 file1.txt 設為所有人皆可讀取 :
~~~
chmod?ugo+r file1.txt
~~~
將文件 file1.txt 設為所有人皆可讀取 :
~~~
chmod?a+r file1.txt
~~~
將文件 file1.txt 與 file2.txt 設為該文件擁有者,與其所屬同一個群體者可寫入,但其他以外的人則不可寫入 :
~~~
chmod?ug+w,o-w file1.txt file2.txt
~~~
將 ex1.py 設定為只有該文件擁有者可以執行 :
~~~
chmod?u+x ex1.py
~~~
將目前目錄下的所有文件與子目錄皆設為任何人可讀取 :
~~~
chmod?-R a+r *
~~~
此外chmod也可以用數字來表示權限如 :
~~~
chmod?777?file
~~~
語法為:
~~~
chmod?abc file
~~~
~~~
其中a,b,c各為一個數字,分別表示User、Group、及Other的權限。
r=4,w=2,x=1
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r-x屬性則4+1=5。
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
效果相同
~~~
若用chmod 4755 filename可使此程序具有root的權限。
## find
find 命令用來在指定目錄下查找文件。
任何位于參數之前的字符串都將被視為欲查找的目錄名。
如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進行顯示。
語法
~~~
find?path?-option?[ -print ]?[ -exec -ok command ]?{}?;
~~~
參數說明 :
~~~
find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份為 path,之后的是 expression。
如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 為預設 expression。
expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。
-mount, -xdev : 只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
-amin n : 在過去 n 分鐘內被讀取過
-anewer file : 比文件 file 更晚被讀取過的文件
-atime n : 在過去 n 天過讀取過的文件
-cmin n : 在過去 n 分鐘內被修改過
-cnewer file :比文件 file 更新的文件
-ctime n : 在過去 n 天過修改過的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名稱是 name
-ipath p, -path p : 路徑名稱符合 p 的文件,ipath 會忽略大小寫
-name name, -iname name : 文件名稱符合 name 的文件。iname 會忽略大小寫
-size n : 文件大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。-type c : 文件類型是 c 的文件。
d: 目錄
c: 字型裝置文件
b: 區塊裝置文件
p: 具名貯列
f: 一般文件
l: 符號連結
s: socket
-pid n : process id 是 n 的文件
你可以使用 ( ) 將運算式分隔,并使用下列運算。
exp1 -and exp2
! expr
-not expr
exp1 -or exp2
exp1, exp2
~~~
實例:
將目前目錄及其子目錄下所有延伸檔名是 c 的文件列出來。
~~~
find?. -name?"*.c"
~~~
將目前目錄其其下子目錄中所有一般文件列出
~~~
find?. -ftype f
~~~
將目前目錄及其子目錄下所有最近 20 分鐘內更新過的文件列出
~~~
find?. -ctime -20
~~~
查找/var/logs目錄中更改時間在7日以前的普通文件,并在刪除之前詢問它們:
~~~
find /var/logs -type f -mtime +7?-ok rm { } ;
~~~
查找前目錄中文件屬主具有讀、寫權限,并且文件所屬組的用戶和其他用戶具有讀權限的文件:
~~~
find . -type f -perm?644?-exec ls?-l?{ } ;
~~~
為了查找系統中所有文件長度為0的普通文件,并列出它們的完整路徑:
~~~
find / -type f -size?0?-exec ls?-l?{ } ;
~~~
查找/var/logs目錄中更改時間在7日以前的普通文件,并在刪除之前詢問它們:
~~~
find /var/logs -type f -mtime +7?-ok rm { } ;
~~~
## mv
mv 命令用來為文件或目錄改名、或將文件或目錄移入其它位置。
語法:
~~~
mv [options] source dest
mv [options] source... directory
~~~
參數說明:
~~~
-i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件;
-f: 在mv操作要覆蓋某已有的目標文件時不給任何指示;
~~~
mv參數設置與運行結果
命令格式 運行結果
mv 文件名 文件名 將源文件名改為目標文件名
mv 文件名 目錄名 將文件移動到目標目錄
mv 目錄名 目錄名 目標目錄已存在,將源目錄
移動到目標目錄;目標
目錄不存在則改名
mv 目錄名 文件名 出錯
實例:
將文件 aaa 更名為 bbb :
~~~
mv?aaa bbb
~~~
將info目錄放入logs目錄中。注意,如果logs目錄不存在,則該命令將info改名為logs。
~~~
mv?info/ logs
~~~
再如將/usr/student下的所有文件和目錄移到當前目錄下,命令行為:
~~~
mv?/usr/student/*
~~~
## cp
cp命令主要用于復制文件或目錄。
語法
~~~
cp?[options] source dest
~~~
或
~~~
cp?[options] source... directory
~~~
參數說明:
~~~
-a:此選項通常在復制目錄時使用,它保留鏈接、文件屬性,并復制目錄下的所有內容。其作用等于dpR參數組合。
-d:復制時保留鏈接。這里所說的鏈接相當于Windows系統中的快捷方式。
-f:覆蓋已經存在的目標文件而不給出提示。
-i:與-f選項相反,在覆蓋目標文件之前給出提示,要求用戶確認是否覆蓋,回答"y"時目標文件將被覆蓋。
-p:除復制文件的內容外,還把修改時間和訪問權限也復制到新文件中。
-r:若給出的源文件是一個目錄文件,此時將復制該目錄下所有的子目錄和文件。
-l:不復制文件,只是生成鏈接文件。
~~~
實例:
~~~
// 使用指令"cp"將當前目錄"test/"下的所有文件復制到新目錄"newtest"下,輸入如下命令:
cp –r test/ newtest
~~~
注意:用戶使用該指令復制目錄時,必須使用參數"-r"或者"-R"。
## awk
AWK是一種處理文本文件的語言,是一個強大的文本分析工具。
之所以叫AWK是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。
語法
~~~
awk [選項參數]?'script'?var=value?file(s)
~~~
或
~~~
awk [選項參數] -f scriptfile?var=value?file(s)
~~~
選項參數說明:
~~~
// 指定輸入文件折分隔符,fs是一個字符串或者是一個正則表達式,如-F:。
-F fs or --field-separator fs
// 賦值一個用戶定義變量。
-v var=value or --asign var=value
// 從腳本文件中讀取awk命令。
-f scripfile or --file scriptfile
// 對nnn值設置內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。
// 這兩個功能是Bell實驗室版awk的擴展功能,在標準awk中不適用。
-mf nnn and -mr nnn
// 在兼容模式下運行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴展都被忽略。
-W compact or --compat, -W traditional or --traditional
// 打印簡短的版權信息。
-W copyleft or --copyleft, -W copyright or --copyright
// 打印全部awk選項和每個選項的簡短說明。
-W help or --help, -W usage or --usage
// 打印不能向傳統unix平臺移植的結構的警告。
-W lint or --lint
// 打印關于不能向傳統unix平臺移植的結構的警告。
-W lint-old or --lint-old
// 打開兼容模式。但有以下限制,不識別:/x、函數關鍵字、func、換碼序列以及當fs是一個空格時,將新行作為一個域分隔符;操作符**和**=不能代替^和^=;fflush無效。
-W posix
// 允許間隔正則表達式的使用,參考(grep中的Posix字符類),如括號表達式[[:alpha:]]。
-W re-interval or --re-inerval
// 使用program-text作為源代碼,可與-f命令混用。
-W source program-text or --source program-text
// 打印bug報告信息的版本。
-W version or --version
~~~
基本用法:
log.txt文本內容如下:
~~~
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo
~~~
用法一:
~~~
awk?'{[pattern] action}'?{filenames}?//?行匹配語句 awk?''?只能用單引號
~~~
實例:
// 每行按空格或TAB分割,輸出文本中的1、4項
~~~
awk?'{print?$1,$4}'?log.txt
~~~
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
~~~
// 格式化輸出
awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
~~~
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
用法二:
~~~
awk -F?// -F相當于內置變量FS, 指定分割字符
~~~
實例:
// 使用","分割
~~~
awk?-F,?'{print?$1,$2}'?log.txt
~~~
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
~~~
// 或者使用內建變量
awk 'BEGIN{FS=","} {print $1,$2}' log.txt
~~~
---------------------------------------------
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple
~~~
// 使用多個分隔符.先使用空格分割,然后對分割結果再使用","分割
awk -F '[ ,]' '{print $1,$2,$5}' log.txt
~~~
---------------------------------------------
2 this test
3 Are awk
This's a
10 There apple
用法三:
~~~
awk -v?// 設置變量
~~~
實例:
~~~
awk?-va=1?'{print?$1,$1+a}'?log.txt
~~~
---------------------------------------------
2 3
3 4
This's 1
10 11
~~~
awk?-va=1?-vb=s?'{print?$1,$1+a,$1b}'?log.txt
~~~
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s
用法四:
~~~
awk?-f?{awk腳本} {文件名}
~~~
實例:
~~~
awk?-f cal.awk log.txt
~~~
* 關于awk命令的詳情:[http://www.runoob.com/linux/linux-comm-awk.html](http://www.runoob.com/linux/linux-comm-awk.html)