心智圖資源庫 Linux維
這是一個關於跟老男孩學Linux運維的思維導圖,包含Linux命令列簡介、文件和目錄操作命令、文件過濾及內容編輯處理命令等。
編輯於2024-01-16 11:24:10Microbiologia medica, Infezioni batteriche e immunità riassume e organizza i punti di conoscenza per aiutare gli studenti a comprendere e ricordare. Studia in modo più efficiente!
La teoria cinetica dei gas rivela la natura microscopica dei fenomeni termici macroscopici e le leggi dei gas trovando la relazione tra quantità macroscopiche e quantità microscopiche. Dal punto di vista del movimento molecolare, vengono utilizzati metodi statistici per studiare le proprietà macroscopiche e modificare i modelli di movimento termico delle molecole di gas.
Este é um mapa mental sobre uma breve história do tempo. "Uma Breve História do Tempo" é um trabalho científico popular com influência de longo alcance. Ele não apenas introduz os conceitos básicos da cosmologia e da relatividade, mas também discute os buracos negros e a expansão. Do universo. questões científicas de ponta, como inflação e teoria das cordas.
Microbiologia medica, Infezioni batteriche e immunità riassume e organizza i punti di conoscenza per aiutare gli studenti a comprendere e ricordare. Studia in modo più efficiente!
La teoria cinetica dei gas rivela la natura microscopica dei fenomeni termici macroscopici e le leggi dei gas trovando la relazione tra quantità macroscopiche e quantità microscopiche. Dal punto di vista del movimento molecolare, vengono utilizzati metodi statistici per studiare le proprietà macroscopiche e modificare i modelli di movimento termico delle molecole di gas.
Este é um mapa mental sobre uma breve história do tempo. "Uma Breve História do Tempo" é um trabalho científico popular com influência de longo alcance. Ele não apenas introduz os conceitos básicos da cosmologia e da relatividade, mas também discute os buracos negros e a expansão. Do universo. questões científicas de ponta, como inflação e teoria das cordas.
跟老男孩學Linux運維
第1章 Linux命令列簡介
Linux命令列概述
Linux命令列提示符介紹
#號,是使用超級使用者root登入後的命令列結尾提示符,而$號是使用普通使用者登入後的命令列結尾提示符。
超級使用者有管理系統的所有權限,一般使用者的權限較小,只能進行基本的系統資訊檢視等操作,無法變更系統配置和管理服務。
命令列提示符號@前面的字元代表目前登入的使用者(可用whoami查詢),@後面的為主機名稱(可用hostname查詢),~所在的位置是視窗目前使用者所在的路徑。
Linux命令提示字元由PS1環境變數控制。 set | grep PS1 PS1='[\u@\h\W]\$'
Linux關機、重開機、登出指令
重新啟動或關機命令:shutdown
shutdown [OPTION]... TIME [MESSAGE]
注意shutdown指令和後面的選項之間至少要有一個空格。
通常情況下,我們執行的shutdown指令為shutdown-h now或shutdown-r now。
關機與重開機指令:halt/poweroff/reboot
reboot [OPTION]... halt [OPTION]... poweroff [OPTION]...
第2章 文件和目錄操作命令
pwd:顯示目前所在的位置
pwd [選項]
cd:切換目錄
cd [選項] [目錄]
使用cd指令時,如果使用鍵盤上「Tab」鍵的自動補齊功能,可以提高輸入速度和準確度。這個「Tab」鍵的自動補齊功能同樣也適用於其他指令。
要了解路徑的概念,例如,相對路徑是不從「/」(斜線)開始的路徑,而是從目前目錄或指定的目錄開始,如:data/、mnt/oldboy;絕對路徑是從「/ 」(斜線)根開始的路徑,如:/data/、/mnt/oldboy。
當需要切換到目前使用者上一次所在的目錄時,請使用「cd-」(注意空格);當需要切換到目前使用者的家目錄時,請使用「cd~」(注意空格);當需要切換到當目前目錄的上一層目錄所在的路徑時,請使用「cd..」(注意空格)。
tree:以樹狀結構顯示目錄下的內容
tree [選項] [目錄]
mkdir:建立目錄
mkdir [選項] [目錄 ]
mkdir指令可以同時建立多個目錄,格式為mkdir dir1 dir2…
用-p參數遞歸建立目錄( mkdir -p oldboy/test)
加-v參數顯示建立目錄的過程。 (mkdir -pv oldboy2/test)
建立目錄時可使用-m參數設定目錄的預設權限。 ( mkdir -m 333 dir2)
同時建立多個目錄及多層子目錄。 (mkdir -pv oldboy/{dir1_1,dir1_2}/{dir2_1,dir2_2} )
touch:建立空文件或改變文件的時間戳屬性
touch指令有兩個功能:一是建立新的空檔;二是改變已有檔案的時間戳屬性。
touch [選項] [文件]
建立檔案(touch a.txt b.txt )
更改文件的時間戳屬性
touch -a oldboy.txt #<==-a參數改變最後造訪的時間。
touch -m oldboy.txt #<==-m參數改變最後修改的時間。
指定時間屬性建立/修改文件
touch -d 20201001 oldboy.txt #<==指定在建立檔案後的檔案修改
touch -r a.txt oldboy.txt #<==使用-r參數讓oldboy.txt的時間屬性和a.txt一致。
touch -t 201512312234.50 oldboy.txt #<==利用選項-t,將檔案設定為201512312234.50時間格式
ls:顯示目錄下的內容及相關屬性訊息
ls [選項] [<檔案或目錄>]
使用-a參數顯示所有文件,特別是隱藏文件
ls -a#<==說明:加了-a參數,就會把以「.」(點號)開頭的內容顯示出來了。這裡顯示的第一個點號,表示目前目錄,即test目錄本身,而兩個點號則表示目前目錄的上級目錄,此處就代表根目錄了。有關一個點、兩個點的知識,在後面的ln指令會有詳細講解。
ls -A #<==列出所有文件,包括隱藏文件,但不包括“.”與“..”這兩個 目錄。
使用-l參數顯示詳細資訊。
ls -l #<==此處的時間屬性列預設顯示的是檔案的最後一次修改時間。 #<==說明:這個-l參數是最常用的參數了,意思是用長格式列出目錄下的檔案類型、權限、連線數、屬主(群組)及建立修改時間的資訊。這裡每列的屬性意義都需要熟練,後文會詳細討論這些屬性資訊。
顯示完整時間屬性的參數--time-style=long-iso。
ls -l --time-style=long-iso #<==以long-iso方式顯示時間,這個指令的結果是非常棒的。
--time-style可選的參數值有以下幾個,如full-iso、long-iso、iso、locale。預設值是locale。
在生產場景中常會遇到同一目錄下的檔案及目錄時間的顯示不一致的問題,所以需要用ls-l--time-style=long-iso來調整,如果覺得參數太多不好記,則可以設定一個別名管理。
值得一提的是,執行ls-l等指令時,預設顯示的是檔案最後一次的修改時間(如果是新檔案那麼就是建立時間了)。
ls--full-time用來顯示完整的時間,等同於ls-l--time-style=full-iso。
執行ls指令,帶有顯示內容的存取時間屬性的參數。
ls -l --time-style=long-iso --time=atime #<==增加--time= atime參數,顯示訪問時間。
與之相關指令還有ls-l--time-style=long-iso--time=ctime,用來顯示檔案改變的時間。
有關文件時間列及mtime、atime、ctime的知識,前文在介紹touch指令時已經講解過了。
執行ls指令,帶-F參數(這點與tree指令的-F很類似)。
ls -F#<==說明:加了-F,我們可以清楚地看到所有目錄的結尾都被加上了斜線/。這樣的功能對於工作有什麼用呢?當然有用了,例如:我們要過濾出所有的目錄來,那麼只需要把有斜線的過濾出來就OK了。
使用-d參數只顯示目錄本身的資訊。
ls -ld dir1 #<==加-d參數就可以如願以償了。
使用-R參數遞歸查看目錄。
ls -R dir1 #<==類似但沒有tree好用的方法。
ls指令別名的相關知識及設定ls別名。
alias lst='ls -l --time-style=long-iso' #<==設定指令別名。
尋找最近更新過的文件。
ls -lrt /etc/ #<==-t是按時間排序,-r是倒序,即按時間倒序排序。
生產場景資料庫備份,取得資料庫名稱清單。
ls -F /usr/local/mysql/data|egrep "/"|awk -F "/" '{print $1}' >/root/dbfilename.list#<==提示:在此資料庫分錶備份腳本中,用到了ls -F加egrep的組合指令來把資料庫目錄名過濾出來。
在生產場景下刪除佔用inode節點的垃圾。
ls|xargs rm -f #<==如果檔案特別多,那麼直接rm -fr * 是無法刪除的。
ls-F指令的擴充知識
加上“*”代表可執行的普通文件
加上“/”表示目錄
加上“=”表示套接字(sockets)
加上“|”表示FIFOs
加上“@”表示符號鏈接
ls指令輸出內容的屬性解讀
ls -lhi #<==-l參數前面已經詳細講解了,-h參數的作用是將文件的大小以人類可讀的方式進行顯示,像下面的“4.0K”你很容易就知道文件的大小,-i參數的作用是顯示檔案的inode值。
cp:複製檔案或目錄
cp [選項] [原始檔] [目標檔]
cp -a file1.txt file5.txt #<==使用-a參數複製file1.txt為file5. txt。使用-a參數複製的屬性不變。
使用-a參數複製時,檔案的時間屬性沒有改變,-a參數的功能包含-p參數保持檔案的屬性功能。
cp -i file1.txt file5.txt #<==使用-i參數複製文件,會提示是否覆
CentOS系統預設為cp指令設定了別名,即增加了-i的參數。但是在Shell腳本中執行cp時,若沒有-i參數,並不會詢問是否覆蓋。這是因為命令列和Shell腳本執行時的環境變數不同
cp -r dir1 dir2/ #<==若使用-r參數,遞歸複製目錄,複製目錄下面所有的子目錄和資料夾
cp /etc/ssh/sshd_config{,.ori}#<==這種方法的原理是bash對大括號的展開操作,/etc/ssh/sshd_config{,.ori}展開成/etc/ssh/sshd_config / etc/ssh/sshd_config.ori再傳給cp指令。
mv:移動或重新命名文件
mv [選項] [原始檔] [目標檔]
mv file6.txt file7.txt #<==若file7.txt不存在,則將file6.txt重新命名為file7.txt。
mv file5.txt file7.txt #<==若file7.txt存在,則將file5.txt覆寫為file7.txt。
\mv file4.txt file7.txt #<==使用\屏蔽系統別名就不會詢問是否覆 蓋了。
mv file7.txt dir1/ #<==dir1為目錄且存在,則移動file7.txt到 dir1下,若dir1不存在,則重新命名為dir1的普通檔案。
mv -t dir1/ file1.txt file2.txt file3.txt file7.txt #<==使用-t參數將來源和目標調換,-t後接目錄,最後是要移動的檔案。
rm:刪除檔案或目錄
rm [選項] [<檔案或目錄>]
rm -f file3.txt #<==-f參數強制刪除,不提示。
rm -r dir1 #<==使用-r可以遞歸刪除,但會有確認提示,可以使用-f強
關於刪除的實務經驗
用mv取代rm,不要急著刪除,而是先移動到回收站/tmp。
刪除前務必備份,最好是異機備份,若有問題隨時可以還原。
如果要刪除,那麼請用find取代rm,包括透過系統定時任務等清理檔案方法。
如果非要透過rm指令刪除,那麼請先切換目錄再刪除,能不用通配符的就不用通配符。對檔案的刪除禁止使用“rm-rf檔案名稱”,因為“rm-rf”誤刪目錄時並不會有提示,而且非常危險。最多使用“rm-f檔名”,建議用“rm檔名”。
rmdir:刪除空白目錄
rmdir [選項] [目錄]
rmdir指令用於刪除空目錄,當目錄不為空時,指令不起作用。
rmdir -p -v dir1/a/b/ #<==遞歸刪除還是需要列出所有目錄結構。
ln:硬鏈接與軟鏈接
ln [選項] [來源檔案或目錄] [目標檔案或目錄]
硬連結
在Linux檔案系統中,多個檔案名稱指向同一個索引節點(inode)是正常且允許的。這種情況下的檔案就稱為硬連結。
具有相同inode節點號的多個檔案互為硬連結檔案。
刪除硬連結檔案或刪除來源檔案任意之一,檔案實體並未被刪除。
只有刪除了來源檔案以及來源檔案所有對應的硬連結文件,檔案實體才會被刪除。
當所有的硬連結檔案及來源檔案被刪除之後,再存放新的資料時會佔用這個檔案的空間,或是磁碟fsck檢查的時候,刪除的資料也會被系統回收。
硬連結文件就是文件的另一個入口(相當於超市的前門後門)。
可以透過給文件設定硬連結文件,來防止重要文件被誤刪。
執行指令“ln來源檔案硬連結檔”,即可完成硬連結的建立。
硬連結檔案可以用rm指令刪除。
對於靜態檔案(沒有進程正在呼叫的檔案)來講,當對應硬連結數為0(i_link)時,檔案就會被刪除。 i_link的檢視方法是ls-lih,查看結果的第三列,即硬連結數。
目錄,不可以建立硬鏈接
每個目錄下面都有一個硬連結「.」號,和對應上級目錄的硬連結「..」。
在父目錄中建立一個子目錄,父目錄的連結數增加1(子目錄都有「..」來指向父目錄)。但在父目錄建立檔案時,父目錄的連結數不會增加。
軟連結
軟連結類似於Windows的捷徑(可以透過後面的readlink指令查看其指向)。
軟連結類似於一個文字文件,裡面存放的是原始文件的路徑,指向原始文件實體。
即使刪除了來源文件,軟連結文件還是依然存在,但是無法存取指向的來源文件路徑內容了。
失效的時候一般是白字紅底閃爍提示。
執行指令“ln-s來源檔案軟連結檔案”,即可完成建立軟連結(軟連結檔案名稱事先不能存在)。
軟連結和原始檔是不同類型的文件,也是不同的文件,inode號也不相同。
刪除軟連結檔案可以使用rm指令。
readlink:查看符號連結檔案的內容
readlink [選項] [檔案]
readlink /usr/bin/awk #<==可以查看到這個軟連結檔案的真實內容。
readlink -f /usr/bin/awk #<==使用-f參數會將最後一個非符號鏈 接檔案顯示出來。
find:尋找目錄下的文件
find [選項] [路徑] [操作語句]
find . -atime -2 #<==“.”代表目前目錄,找出兩天內受到存取的檔案使用選項atime,-2代表兩天內。
find查找時間說明
-4表示文件更改時間距離現在4天以內。
4表示文件更改時間距離現在4天以前。
4表示距現在第4天。
find /var/log/ -mtime 5 -name '*.log' #<==在/var/log/目錄下尋找5天前以「.log」結尾的檔案。
find . ! -type d #<==“!”表示取反,查找不是目錄的文件,注意感嘆號的位置。
find /data/ -perm 755 #<==依照文件權限來尋找文件,755是權限的
find . -size 1000c #<==尋找目前目錄下檔案大小大於1000位元組的檔案。
find /data -path "/data/dir3" -prune -o -print #<==參數-path指定路徑樣式,配合-prune參數用來排除指定目錄。
find /data \( -path /data/dir2 -o -path /data/dir3 \) -prune -o -print 使用圓括號可以將多個表達式結合在一起,但是圓括號在命令列中有特殊的意義,所以此處使用「\」進行轉義,即告訴bash不對後面的字元「()」作解析,而是留給find指令來處理。而且「\(-path」中左括號和path之間有空格,「dir3\)」中dir3和右括號之間也有空格,這是語法要求。
find . -user nobody #<==找出使用者為nobody的檔案。
find . -nouser#<==尋找沒有對應任何使用者的檔案。
find . -group nobody #<==這個功能和上一個範例類似,這裡是指查找使用者群組為nobody的檔案。
find . -nogroup#<==尋找沒有對應任何使用者群組的檔案。
find . -newer file1.txt ! -newer file2.txt#<==尋找更改時間比檔案file1.txt新但比file2.txt舊的檔案。
find . -maxdepth 1 -type d #<==-maxdepth 1找出一級目錄,類似tree -L 1。
find . -maxdepth 1 -type d ! -name "." #<==使用驚嘆號(!)取反,不輸出名字為點的行。
find . -maxdepth 1 -type d ! -name "." -o -name "oldboy"#<==-o的作用是或的意思,顯示除"."以外的所有目錄或文件名為oldboy的文件。
find . -maxdepth 1 -type d ! -name "." -a -name "ext"#<==-a作用是且的意思,找出不為點號的且名字為ext的目錄,最後結果只顯示名為ext的目錄。
find . -type f -exec ls -l {} \;#<==find命令匹配到了當前目錄下的所有普通文件,並在-exec選項中使用ls -l命令將它們列出。
find . -type f -mtime 14 -exec rm {} \; #<==find命令在目錄中查找更改時間在14天以前的文件,並在-exec選項中使用rm命令將它們刪除。
find /var/log/ -name "*.log" -mtime 5 -ok rm {} \;#<==find指令在/var/log/目錄中尋找所有檔案名稱以「.log」結尾、變更時間在5天以前的文件,並刪除它們,到此為止,-ok的功能和-exec一樣,但是-ok還有一個功能,在刪除之前先給出提示。按y鍵刪除文件,按n鍵不刪除文件,這樣會比較安全。
find . -type f|xargs ls -l #<==將find指令查找到的普通檔案透過管道符號和xargs指令傳給ls指令執行。注意命令格式,這裡使用了管道符號“|”,xargs是一個命令,是向其他命令傳遞參數的一個過濾器,大家可以先閱讀完xargs命令的章節再來閱讀此部分內容。
find . -name "*.txt"|xargs -i mv {} dir2/ #<==使用xargs的-i參數,使得{}代表find查找到的文件,將這些文件作為參數放在mv命令後面作為要移動的來源文件,移動到dir2目錄下,還有更多方法請參見2.13.3節「拓展知識:將找到的文件移動到指定位置的幾種方法」。
find dir2 -name "file*"|xargs -p rm -f#<==說明:使用xargs指令的-p選項會提示讓你確認是否執行後面的指令,y執行,n不執行。
xargs:將標準輸入轉換成命令列參數
xargs [選項]xargs命令是向其他命令傳遞命令列參數的一個過濾器,能夠將管道或標準輸入傳遞的資料轉換成xargs命令後跟隨的命令的命令列參數。
xargs < test.txt#<==將所有數字變成一行,注意xargs不能直接接 文件,需要結合輸入重定向符「<」。
xargs -n 3 < test.txt#<==每行最多輸出3個。
echo splitXsplitXsplitXsplitX|xargs -d X -n 2 #<==以X為分隔符號且每行最多輸出2個。
find . -name "*.log"|xargs -i mv {} dir1/ #<==使用xargs的-i選項可以讓{}取代前面find指令找到的檔案或目錄。
find . -name "file*"|xargs -I [] cp [] dir2-I選項可以指定其他字元來代替{},例如[]。
find . -type f -name "*.txt" -print0|xargs -0 rm -f #<==xargs誤認為它們的分隔符號是空格,解決方法是以字元null分隔輸出,使用-0選項。
rename:重新命名文件
rename from to file
rename "_finished" "" * #<==將所有檔案的_finished替換為空。
rename .jpg .oldboy *.jpg #<==將所有檔案的.jpg替換為.oldboy。
basename:顯示檔案名稱或目錄名
basename [<檔案或目錄>] [後綴]
basename /data/dir1/file1.txt #<==移除路徑部分,即只顯示檔案名稱。
dirname:顯示檔案或目錄路徑
dirname [<檔案或目錄>
dirname /data/dir1/file1.txt #<==只顯示檔案所在的路徑。 /data/dir1
chattr:改變檔案的擴充屬性
chattr [選項] [模式] [<檔案或目錄>]
chattr a test #<== a新增追加屬性。
chattr i file1.txt #<==使用 i參數為檔案加鎖。
lsattr:查看檔案擴充屬性
lsattr [選項] [<檔案或目錄>]
lsattr file1.txt #<==檢視檔案預設的擴充屬性。
lsattr -d dir2 #<==使用-d選項查看目錄的擴充屬性。
file:顯示檔案的類型
file [選項] [<檔案或目錄>]
file oldboy oldboy: directory #<==oldboy是個目錄。
md5sum:計算和校驗檔案的MD5值
md5sum [選項] [檔案]
md5sum oldboy.txt #<==md5sum指令直接接檔案就可以得到檔案的MD5值。
chown:改變檔案或目錄的使用者和使用者群組
chown [選項] [使用者: 使用者群組] [<檔案或目錄>]
其中的「:」可以用「.」來代替。
要授權的使用者和群組名,必須是Linux系統實際存在的。
chown oldboy file1.txt #<==授權oldboy用戶,oldboy用戶要 提前建立。
chown .oldboy file1.txt #<==授權oldboy使用者群組,注意不要少點號,此處的點號也可以用冒號來代替。
chown root:root file1.txt #<==可以使用「:」或「.」。
chown -R oldboy.oldboy dir2/ #<==使用-R參數遞歸授權。
chmod:改變檔案或目錄權限
chmod指令是用來改變檔案或目錄權限的指令,但是只有檔案的屬主和超級使用者root才能夠執行這個指令。
chmod [選項] [模式] [<檔案或目錄>]
chmod a= file1.txt #<==設定所有(a)權限為空(等號後面不接任何字元)。
chmod u x file1.txt #<==設定user檔案屬主執行權限。
chmod g w file1.txt #<==設定group檔案使用者群組可寫入權限。
chmod o r file1.txt #<==設定other其他使用者可讀權限。
chmod ug r,o-r file1.txt #<==多個權限操作可以一起使用,以逗號分隔,ug r是u r、g r的縮寫。
chmod u=rwx,g=rx,o=x file1.txt #<==“=”撤銷原來所有的權限,然後賦予給予的權限。
chmod 000 file1.txt #<==這個和上一個範例chmod a= file1.txt的效果一樣。
chmod 753 file1.txt #<==大家一定要熟練數字權限和字母權限的換算。
chmod -R 777 dir2/ #<==遞迴授予檔案目錄777的權限。
chgrp:更改檔案使用者群組
chgrp [選項] [使用者群組] [<檔案或目錄>]
chgrp oldboy install.log #<==修改install.log檔案的使用者群組為 oldboy。
chgrp -R root dir1/ #<==參數-R遞歸授權。
umask:顯示或設定權限掩碼
umask [選項] [模式]
第3章 文件過濾及內容編輯處理命令
cat:合併文件或查看文件內容
cat [選項] [檔案]
cat >test.txt<<EOF EOF #<==這裡要按回車才能結束,另外,EOF必須成對出現,但也可以用別的成對標籤來替換。例如:oldboy字元標籤,預設情況下,結尾的EOF必須要頂格寫。
cat -n test.txt#<==說明:從上面的例子可以看出,-n選項就是按行為文件內容編號並列印輸出,包括空白行。
cat -b test.txt#<==說明:從上面的範例可以看出,-b選項和-n選項類似,但是,-b選項並不對空白行編號。
cat -E test.txt#<==說明:從上面的例子可以看出,-E選項就是把檔案結尾的隱藏結束識別碼$符號顯示出來。即使是空行,結尾也是有結束識別符的,這大家要注意。
cat -s test.txt#<==這裡原來是3個空白行,現在,由於-s選項的原因,變成一個空白行了。
cat >test3.txt
cat和“>”重定向將標準輸出定向到文件的,這是一個特殊的編輯文件的方法。
結束編輯可以用快速鍵Ctrl d或Ctrl c退出,但必須先執行回車,將遊標定位到新的未輸入的行才行。
使用此種方式輸入時,會發現如果輸入錯了,只按退格鍵(Backspace)將會無法刪除,需要按住「Ctrl 退格鍵」才能刪除。
此操作為特殊編輯方法,作為擴展知識點提及,實際生產環境中使用得很少。
cat web01_access_20130522.log web02_access_20130522.log > web_access_20130522.log利用cat連線多重檔案合併Web叢集日誌。
tac:反向顯示文件內容
tac [選項] [檔案]
more:分頁顯示文件內容
more [選項] [檔案]
more /etc/services #<==不接任何參數,滿螢幕顯示檔案內容。
more -5 /etc/services #<==此時並不是滿螢幕顯示檔案內容,只會顯示5行內容。
more 888 /etc/services #<==此時直接從第888行顯示文件內容。
ls /etc/|more -10 #<==大家應該知道/etc下方有很多檔案目錄,直接ls檢視則會顯示太多內容,所以可以藉助more指令分頁顯示。
less:分頁顯示文件內容
less [選項] [檔案]
less /etc/services #<==不接任何參數,滿螢幕顯示檔案內容。
less -N /etc/services #<==每一行前面都有行號了。
ls /etc/|less #<==分頁查看etc目錄檔的內容。
head:顯示檔案內容頭部
head [選項] [檔案]
head /etc/passwd #<==head指令不接任何參數時,預設顯示檔案的前10行。
head -n 5 /etc/passwd #<==第一種格式指定顯示前5行。
head -5 /etc/passwd #<==第二種格式也是指定顯示前5行,但這種寫法比較精簡。
head -c 10 /etc/passwd #<==讀取檔案的前10個位元組。前面的寫法是以行為單位的,而-c則以位元組為單位。這個功能不常用。
head -n -21 /etc/passwd #<==這裡的數字為負值,這種寫法也不常用。
tail:顯示文件內容尾部
tail [選項] [文件]
tail /etc/passwd #<==tail指令不接參數,預設顯示最後10行。
tail -n 5 /etc/passwd #<==顯示文字結尾5行
tail -5 /etc/passwd #<==顯示文字末端5行的第二種寫法,這種寫法比較簡單。
tail -n 15 /etc/passwd #<==從第15行開始顯示檔案。拓展的用法,但不常用。
tail -f /application/nginx/logs/access.log #<==tail -f即時監控檔案的變化,在生產中常用的場景是監控日誌檔案。
tail -f oldboy #<==使用-f參數,當檔案不存在時就會報錯並退出指令。
tail -F oldboy #<==使用-F參數,當檔案不存在時會回傳報錯,但是還會一直等待檔案生成,不會退出指令。
tailf:追蹤日誌文件
tailf [選項] [文件]
tailf指令幾乎等同於tail-f,與tail-f不同的是,如果文件不成長,那麼它就不會去存取磁碟文件,也不會改變文件的存取時間。
tailf /application/nginx/logs/access.log #<==可以方便查閱正在改變的日誌檔案。
cut:從文字中提取一段文字並輸出
cut [選項] [檔案]
cut -b 3 oldboy.txt #<==只輸出第3個位元組。
cut -b 3-5,10 oldboy.txt #<==-b支持形如3-5的寫法,而且多個定位之間用逗號隔開。
cut -b -3 oldboy.txt #<==-3表示從第一個位元組到第三個位元組。
cut -b 3- oldboy.txt #<==3-表示從第三個位元組到行尾。
cut -b -3,3- oldboy.txt #<==這種寫法會輸出整行,並且不會出現連續兩個重疊的字母a。
cut -b 2-10 oldboy.txt#<==說明:用選項-c則會以字元為單位,輸出正常。而選項-b只會傻傻的以位元組(8位元二進位)來計算,輸出就是亂碼。當遇到多位元組字元時,可以使用-n選項,-n用於告訴cut不要將多位元組字元拆開。
cut -d : -f 1 /etc/passwd #<==選項-d指定以「:」作為分隔符,選項-f指定顯示第一個區域。
split:分割文件
split [選項] [輸入檔] [輸出檔名前綴]
split -l 10 inittab new_#<==每10行分割一次,分割的檔案名稱以new_開頭。
split -l 10 -a 3 inittab new2_#<==參數-a指定後綴長度。
split -l 10 -d inittab num_#<==參數-d使用數字字尾。
split -b 500K -d lvm lvm_#<==每500KB分割一次檔案。
paste:合併文件
paste [選項] [文件]
paste test1 test2 #<==2個檔案會依行合併。
paste -d: test1 test2 #<==以“:”作為分隔符號。
paste -s test1 #<==使用-s選項,將1列內容轉換成1行。
paste -s test1 test2 #<==每個檔案佔用一行。
sort:文字排序
sort [選項] [檔案]
sort oldboy.txt #<==不接收任何參數,會將檔案內容轉換成ASCII碼,然後進行比較。因為在ASCII碼中,數字的排序和我們的認知是一樣的,因此結果如下所示。
sort -n oldboy.txt #<==使用-n選項直接按照數字從小到大的順序來排序。
sort -nr oldboy.txt #<==類似這種功能,我們已在ls命令中學過。 -r選項表示反轉的意思,sort指令預設依照升序(從小到大)排序,使用-r選項就變成降序了(從大到小)。
sort -u oldboy.txt #<==使用-u選項能夠移除檔案的重複行,後面會學習一個uniq指令,也可以移除重複行。
sort -t " " -k2 oldboy1.txt #<==-t選項指定以空格為分隔符,-k選項後接2即表示依照第2列進行排序。
join:按兩個檔案的相同欄位合併
join [選項] [文件1] [文件2]
join a.txt b.txt#<==說明:使用join合併檔案的要求是2個檔案必須是用sort排序後的。
uniq:去除重複行
uniq [選項] [文件或標準輸入]
uniq oldboy.txt #<==不接任何參數即移除重複行。
uniq -c oldboy.txt #<==參數-c顯示對應行出現的次數。
sort -n oldboy.txt|uniq -c#<==uniq只能對相鄰的重複行進行去重操作,因此應先用sort處理檔案再去重。
wc:統計檔案的行數、單字數或位元組數
wc [選項] [檔案]
wc /etc/inittab 26 149 884 /etc/inittab #<==不接任何參數,顯示的數字是什麼意思?
wc -l /etc/inittab #<==行數。
wc -m /etc/inittab #<==字元數。
wc -w /etc/inittab #<==單字數。
wc -L /etc/inittab #<==最長行的長度。
iconv:轉換檔的編碼格式
iconv [選項] [原編碼] [新編碼] [輸入檔]
iconv -f gb2312 -t utf-8 GB2312.txt #<==使用-f參數指定檔案原來的編碼為gb2312,使用-t參數指定將要轉換的編碼為utf-8。
dos2unix:將DOS格式檔案轉換成UNIX格式
dos2unix [文件]
diff:比較兩個檔案的不同
diff [選項] [文件1] [文件2]
diff test1 test2 1,3d0 #<==刪除檔案1的第1行到第3行,刪除檔案2的第0行,即不刪除。
6a4,5 #<==文件1的第6行增加下面2行文本,即文本2的第4行和第5行。
diff預設的顯示格式有以下三種提示。 ·a-add ·c-change ·d-delete
diff -y test1 test2 #<==使用-y參數就可以並排輸出。
diff -y -W 30 test1 test2 #<==如果覺得上面太寬,則可以用-W參數指定寬度。
diff /etc/rc3.d/ /etc/rc6.d/ #<==diff不僅可以比較檔案內容的差別, 還能比較目錄下檔案的差異。
vimdiff:可視化比較工具
vimdiff [選項] [檔案1] [檔案2]
vimdiff呼叫vim開啟文件,可以同時開啟2個、3個或4個文件,最多4個文件,並且會以不同的顏色來區分文件的差異。
vimdiff test1 test2 #<==退出vimdiff介面需要連續執行2次退出vim的操作(:q),vim指令在後面將會有詳細的講解。因為vimdiff指令呼叫的是vim功能,所以退出操作和vim一致。
rev:反向輸出檔案內容
rev [檔案]
echo {1..10}|rev #<==上面的字元反著寫了。
rev oldboy.txt #<==大家可以跟前面學過的tac指令比較一下。
tr:替換或刪除字符
tr [選項] [字元1] [字元2]
tr命令從標準輸入中替換、縮減或刪除字符,並將結果寫入標準輸出。
tr 'abc' 'xyz' < oldboy.txt #<==tr指令接檔案較特殊,需要輸入重 定向符號「<」。
tr '[a-z]' '[A-Z]' <oldboy.txt #<==小寫轉大寫。
tr '[0-9]' '[a-j]' < oldboy.txt #<==數字0替換為a,1替換為b …一一對應。
tr -d 'oldboy'<oldboy.txt #<==使用參數-d刪除字元。
tr -d ' \t' < oldboy.txt #<==使用-d參數刪除所有換行符和製表符,所有行都變成一行了,字母都連接在一起。
echo 'oooolllddbbboyyyyy' |tr -s oldboy #<==使用-s參數將連續的字元壓縮成一個。
tr '0-9' '*' < oldboy.txt #<==將所有數字都替換為*。
tr -c '0-9' '*' < oldboy.txt #<==使用參數-c,除了數字,其他的字元包括換行符都會替換為*。
od:按不同進位顯示文件
od [選項] [檔]
tee:多重重定向
tee [選項] [檔]
ls|tee ls.txt #<==ls指令接管道和tee指令,在螢幕上輸出ls的結果, 同時將結果寫入到ls.txt。
ls|tee -a ls.txt #<==使用參數-a可以追加內容到檔案中,不會清空檔案中已有的內容。
vi/vim:純文字編輯器
vim [選項] [檔案]
vim的三種模式
普通模式
編輯模式
在普通模式下不能進行編輯輸入操作,只有按下“i,I,o,O,a,A,r,R,s,S”(其中“I”最常用)等字母進入編輯模式之後才可以執行錄入文字等編輯操作。看文件是否處於編輯模式狀態有一個重要的特徵,那就是在視窗的左下角要有插入的標記“--INSERT--”或“--插入--”
命令模式
在普通模式下,輸入「:」或「/」或「?」時,遊標會自動定位在那一行,在這個模式中,可以執行儲存、退出、搜尋、取代、顯示行號等相關操作。
vim開啟檔案的方法小結
vim file:開啟/新建文件,遊標置於第1行行首,file為任意檔名。
vim file n:開啟文件,遊標置於第n行行首,n為自然數。
vim file :開啟文件,遊標置於最後1行行首。
vim file /pattern:將遊標置於第一個與pattern相符的字串處,pattern為任意字串。
第12章 Linux系統常用內建指令
Linux常用內建指令實例
help查看內建指令幫助
help [選項] [內建指令]
help #<==使用help指令查看Linux的所有內建指令。
help help #<==「help 內建指令」這種格式能夠查看內建指令的幫助,同時help本身也是內建指令。
help cd #<==查看cd指令的說明文件。
help -d cd #<==輸出內建指令的簡單描述。
help -m cd #<==以man幫助的格式顯示。
help -s cd #<==只輸出指令的使用語法。
佔位符“:”
if [ $i -eq 1 ] #<==條件式。 then : #<==在Shell腳本裡若用到了if判斷語句,那麼判斷成功後通常會執行某些操作,但有時會不知道執行什麼操作或不需要執行某些操作。但是又礙於if語句的固定語法格式,不得不寫一個命令佔位置,因為這一行如果沒有內容就會語法報錯,此時就會用到“:”這個佔位符,不過請放心,這個命令不會對你的Shell腳本造成任何影響,其有點像其他程式語言的pass字段一樣。 else echo "Hello World" fi
“.”和source
「.」和source常用於載入或執行Shell腳本,但是其與常規的執行Shell腳本的方法又不太一樣。下面分別對比來看一下。
·第一種,bash script-name或sh script-name,是當腳本檔案本身沒有可執行權限(即檔案權限屬性x位元為-號)時經常使用的方法,此外,腳本檔案開頭沒有指定解釋器時也需要用到。
·第二種,source script-name或.script-name,這種方法通常是先使用source或「.」(點號)讀入或載入指定的Shell腳本檔案(如san.sh),然後,依次執行指定的Shell腳本檔案san.sh中的所有語句。這些語句將在目前父Shell腳本father.sh進程中執行(其他幾種模式都會啟動新的進程執行子腳本)。因此,使用source或「.」可以將san.sh自身腳本中的變數值或函數等的回傳值傳遞到目前的父Shell腳本father.sh中使用。
條件測試“[”和test
·test條件測試的語法格式為:test<測試表達式> ·[]條件測試的語法格式為:[<測試表達式>]
中括號內部的兩端要有空格,[]和test等價,即test的所有判斷選項都可以直接在[]裡使用,但建議使用[]。
test -f file && echo true || echo false #<==如果file檔案存在且是普通檔案就為真,因為file檔案不存在,所以輸出了false。
[ -f /tmp/oldboy.txt ] && echo 1 || echo 0 #<==如果/tmp/oldboy.txt檔案存在且是普通檔案則為真,因為該檔案不存在,所以輸出了0。
命令別名alias和unalias
alias [指令別名]=[指令語句] unalias [命令別名]
alias #<==不接任何參數表示顯示所有的指令別名。
alias rm='echo "Do not use rm."' #<==為echo "Do not use rm."指令語句定義一個別名稱為rm,後面單引號裡的指令語句必須是可以執行的。
alias rm #<==查詢rm指涉的指令語句。
alias eth0='cat /etc/sysconfig/network-scripts/ifcfg-eth0' #<==定義eth0別名。
·為危險指令加一些保護參數,防止人為誤操作,如rm的別名。 ·把很多複雜的字串或指令變成一個簡單的字串或指令,如eth0的別名。
unalias eth0 #<==刪除別名使用unalias
後台任務相關指令bg/fg/jobs
bg命令用於將前台執行任務轉入後台,或將後台暫停的任務運行起來;fg命令和bg命令相反,它是將後台任務調到前台來執行;jobs命令可以用於查看後台任務列表。
bg [任務序號] fg [任務序號] jobs
break跳出循環
#!/bin/bash for((i=0; i<=5; i )) do if [ $i -eq 3 ] ;then break; #<==跳出整個循環,繼續執行循環外後面的程式。 fi echo $i done echo "ok"
continue進入下一個循環
#!/bin/bash for((i=0; i<=5; i )) do if [ $i -eq 3 ] ;then continue; #<==結束本次循環,繼續下一次循環。 fi echo $i done echo "ok"
eval將參數當作指令執行
echo `hostname -I` #<==想要在引號裡面執行指令,需要用到反引號,也稱為倒引號。
echo '`hostname -I`' #<==倒引號外層套單引號,單引號的作用是所見即所得,所以結果是`hostname -I`。 `hostname -I`
eval echo '`hostname -I`' #<==指令開頭加上eval指令,單引號失效了!因為eval指令可以優先解析或執行單引號內的變數或指令。
exit退出Shell命令列
exit #<==退出Shell命令列可以使用exit命令,也可以使用Ctrl D快捷鍵或logout命令。
#!/bin/bash for((i=0; i<=5; i )) do if [ $i -eq 3 ] ;then exit #<==一旦執行exit指令就會退出整個腳本,剩餘的腳本內容就不會再執行。 fi echo $i done echo "ok"
export查看或設定全域變數
export [選項]
export -p #<==使用p選項列印所有環境變數。
export MYENV=7 #<==只有使用export指令設定的變數才是全域變數。
history查看指令歷史記錄
history [選項]
history #<==顯示所有指令的歷史記錄。
history 10 #<== history指令接上數字n表示顯示最近n條指令記錄。
history -d 991 #<==「history -d 歷史指令序號」可以清除指定序號的歷史記錄指令。
history -c #<==使用-c選項清除所有指令的歷史記錄。
read互動式賦值變數
read指令會從標準輸入讀取一行,並將輸入行的每個欄位的值指定給Shell變數。
read [選項] [變數名]
read #<==執行命令read,此時命令列等待輸入。 oldboy #<==輸入字串oldboy。
echo $REPLY #<==read得到的輸入預設儲存在變數REPLY中。
read one #<==read後面接著一個變數名,則輸入的資料就會賦值給這個變數。
read one two #<==read後面可以接上多個變數名。 n1 n2 #<==預設以空格作為分隔符,第一段n1賦值給第一個變數one,第二段n2賦值給第二個變數two。
read one two m1 m2 m3 #<==如果輸入的資料超過了變數的個數,那麼最後所有的值都賦值給最後一個變量,m1賦值給變數one,「m2 m3」一起賦值給變數two。
read -p "請輸入你的年齡:" age #<==age變數前面至少要有一個空格!使用-p參數可以定義顯示在命令列中的提示語句,這樣對使用者比較友善。
read -t 3 -p "請輸入你的年齡:" age #<==使用-t參數指定等待的秒數,超過這個時間,指令自動終止。
選項-s能夠使read指令中輸入的資料不顯示在螢幕上,例如密碼
read -n 3 -p "只能輸入3個字元,不信你試試:" num
type判斷指令類型
type [選項] [指令]
type ls #<==未加任何參數,顯示ls的最主要資訊。
type -a ls #<==顯示所有相關資訊。
ulimit修改系統資源使用限制
ulimit指令用來檢視系統資源的使用情況,同時也可以修改行程或使用者等對系統資源分配的額度。
ulimit [選項]
ulimit -a 顯示目前所有系統資源使用限制。
ulimit -n 1024 #<==預設新系統的最大檔案開啟數(也叫檔案描述子)為1024,這個值對於生產環境的伺服器來說太小了,因此通常會在最佳化伺服器環節把這個值調大。
ulimit -n 65535 #<==調整數量為65535,但透過指令調整的只對目前視窗生效,因此需要修改設定檔。
echo '* - nofile 65535' >> /etc/security/limits.conf #<==修改設定文件,永久生效。
unset清空變數
unset OLDBOY oldgirl #<==unset指令可以清空變數的值。
第11章 Linux系統管理命令
lsof:查看進程開啟的文件
lsof [選項]
lsof /var/log/messages 顯示使用檔案的進程。
lsof -c rsyslog #<==使用-c選項顯示指定程序所開啟的檔案。
lsof -p 1277 #<==使用-p選項顯示指定進程號所開啟的檔案。
lsof -i #<==查看所有進程。
lsof -i tcp #<==顯示所有tcp網路連線的進程資訊。
lsof -i :22 #<==顯示連接埠為22的進程,這條指令很常用。
lsof -i tcp:22 #<==顯示同時滿足TCP和連接埠為22的進程。
lsof -u oldboy #<==使用-u選項顯示oldboy使用者所使用的檔案。
lsof -U #<==使用-U選項顯示所有socket檔案。
uptime:顯示系統的運作時間及負載
uptime
free:查看系統記憶體資訊
free [選項]
free #<==不加參數預設顯示的是位元組數,很難讀。
free -m #<==使用-m選項,以MB為單位顯示記憶體的使用量。
free -h #<==使用-h選項,依實際大小自動轉換成KB、MB、GB單位,顯示記憶體的使用量。
free -h -s 10 #<==使用-s選項定時刷新記憶體的使用情況,單位為秒。
iftop:動態顯示網路介面流量訊息
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum -y install iftop
iftop [選項]
iftop interface: eth0 #<==預設監聽系統的第一塊網卡,可以使用-i選項指定監聽網卡。
iftop -nNBP ·-n:不進行DNS解析,顯示IP數位位址。 ·-N:顯示數字形式的連接埠號碼。 ·-P:顯示連接埠號碼。 ·-B:預設是以bit為單位顯示流量,需要經過計算才能符合我們的認知,但是使用-B選項就會直接顯示以位元組為單位的流量。
vmstat:虛擬記憶體統計
vmstat [選項] [時間間隔[次數]]
1)在vmstat指令及後面的選項裡,每個元素之間都至少要有一個空格。 2)delay表示兩次輸出之間的間隔時間。 3)count表示依照delay指定的時間間隔統計的次數。
vmstat #<==如果省略「間隔時間」和「次數」的參數,則僅顯示一次報告後就退出
vmstat 5 #<==表示每5秒鐘更新一次輸出訊息,循環輸出,按Ctrl C組合鍵停止輸出。
vmstat 5 6 #<==表示每5秒鐘更新一次輸出訊息,統計6次後停止輸出。
vmstat -a 2 5 顯示活躍和非活躍記憶體。
vmstat -s 查看記憶體使用的詳細資訊。
vmstat -d 查看磁碟的讀取/寫入。
vmstat -p /dev/sda1 查看/dev/sda1磁碟的讀寫統計資料。
mpstat:CPU資訊統計
mpstat [選項] [時間間隔[次數]]
1)在mpstat指令及後面的選項裡,每個元素之間都至少要有一個空格。 2)delay表示兩次輸出之間的時間間隔。 3)count表示依照delay指定的時間間隔統計的次數。
mpstat #<==如果省略「時間間隔」和「次數」參數,則僅顯示一次報告後就退出。
mpstat 5 6 #<==表示每5秒更新一次輸出訊息,統計6次後停止輸出。
mpstat -P 0 #<==顯示第一個CPU的資訊。
iostat:I/O資訊統計
iostat [選項] [時間間隔 [次數]]
1)在iostat指令及後面的選項裡,每個元素之間都至少要有一個空格。 2)interval表示兩次輸出之間的間隔時間。 3)count表示依照delay指定的時間間隔統計的次數。
iostat #<==如果省略「時間間隔」和「次數」參數,則僅顯示一次報告後就退出。
iostat 2 3 #<==每隔2秒刷新顯示一次,共顯示3次。
iostat -d #<==選項-d只顯示磁碟的統計資料。
iostat -d -k #<==選項-k以kB為單位顯示資料。
iostat -d -m #<==選項-m以MB為單位顯示資料。
iostat -d -x -k #<==選項-x顯示擴充資訊。
iostat -c #<==使用了-c選項只顯示系統CPU的統計資料。
iotop:動態顯示磁碟I/O統計信息
iotop [選項]
iotop
sar:收集系統資訊
sar [選項] [時間間隔 [次數]]
1)在sar指令及後面的選項裡,每個元素之間至少要有一個空格。 2)interval表示兩次輸出之間的間隔時間。 3)count表示依照interval指定的時間間隔統計的次數。
sar -u 2 3 #<==使用-u選項顯示系統所有CPU在採樣時間內的負載狀態,後面接的2 3表示每2秒統計一次,統計3次。
sar -q 2 3 #<==使用-q選項顯示運行佇列的大小。
sar -r 2 3 #<==使用-r選項顯示系統內有採樣時間內的使用狀況。
sar -b 2 3 #<==使用-b選項顯示緩衝區在取樣時間內的使用情況。
sar -n DEV 2 3 #<==使用-n DEV顯示網路介面的資訊。
sar -n EDEV 2 3 #<==使用-n EDEV顯示網路錯誤的統計資料。
sar -n SOCK 2 3 #<==使用-n SOCK顯示套接字資訊。
sar -d 2 3 #<==使用-d選項顯示系統所有硬碟設備在採樣時間內的使用狀況。
chkconfig:管理開機服務
chkconfig [選項]
chkconfig --list #<==直接使用--list選項查看所有服務的狀態。
chkconfig --list sshd #<==指定係統服務名稱則顯示這個服務的啟動狀態。
chkconfig sshd off #<==使用off關閉sshd服務在2、3、4、5層級開啟自啟動。
chkconfig sshd on #<==使用on開啟sshd服務在2、3、4、5層級開啟自啟動。
chkconfig --level 3 sshd off #<==使用--level指定關閉sshd服務在3層級開啟自啟動。
chkconfig --level 3 sshd on #<==使用--level指定開啟sshd服務在3層級開啟自啟動。
ntsysv:管理開機服務
ntsysv [選項]
ntsysv
setup:系統管理工具
setup指令是一個基於文字介面的系統管理工具,整合了使用者認證管理、防火牆管理、網路管理和系統服務管理。
setup
ethtool:查詢網卡參數
ethtool [網卡設備]
ethtool eth0 #<==接合上指定的網路卡即可顯示網路卡的參數。
mii-tool:管理網路介面的狀態
mii-tool [選項] [網路介面]
mii-tool eth0 #<==不接任何選項,顯示精簡訊息。
mii-tool -v eth0 #<==使用-v選項顯示詳細資訊。
dmidecode:查詢系統硬體資訊
dmidecode [選項]
dmidecode -s system-product-name #<==筆者的伺服器型號為Dell 2950。 PowerEdge 2950
dmidecode -s system-serial-number #<==查看序號關鍵字system-serial-number。
dmidecode -t memory #<==-使用-t選項接上關鍵字memory只查看記憶體的信息,更多關鍵字可透過dmidecode -t指令查看。
lspci:顯示所有PCI設備
lspci [選項]
lspci -s 02:04.0 #<==02:04.0從範例1可知網卡設備的編號。
lspci -s 02:04.0 -v #<==查看詳細資料。
ipcs:顯示進程間通訊設施的狀態
ipcs [選項]
ipcrm:清除ipc相關訊息
ipcrm [選項]
ipcrm -s 0 #<==移除指定semid為0的訊號集。
rpm:RPM套件管理器
rpm [選項]
rpm -qpi lrzsz-0.12.20-27.1.el6.x86_64.rpm #<==顯示rpm包的版本,建立日期等資訊。
rpm -qpl lrzsz-0.12.20-27.1.el6.x86_64.rpm #<==查看rpm包內的檔案。
rpm -qpR lrzsz-0.12.20-27.1.el6.x86_64.rpm #<==查看安裝此rpm包需要依賴的檔案。
rpm -ivh lrzsz-0.12.20-27.1.el6.x86_64.rpm #<==安裝rpm包,使用-h參數顯示進度條。 #<==rpm也支援線上安裝,直接接一個URL位址
rpm -qa lrzsz #<==這裡沒有使用-p參數,因為lrzsz是軟體名,沒有以“.rpm”結尾。
rpm -e lrzsz #<==卸載軟體包使用-e參數,這個參數比較危險,一般情況下若沒有必要則盡量不要去卸載軟體包,因為很有可能會誤刪除一些系統必備的文件,最後導致系統損壞。
rpm -qf $(which ifconfig) #<==有時候會發現系統沒有某些檔案或指令,但又不知道這個檔案或指令是屬於哪個軟體包,這時就可以使用-f參數來查詢(在有這個文件的系統上查詢)。例如本例查詢ifconfig指令屬於net-tools軟體包。
yum:自動化RPM套件管理工具
yum [選項] [指令] [軟體包]
yum install httpd
yum list httpd #<==檢查httpd安裝清單。
yum search httpd #<==搜尋包含httpd字串的軟體包。
yum grouplist #<==查看已安裝和未安裝的套件組。
yum groupinstall "SNMP Support" -y #<==安裝套件群組,從yum grouplist中尋找。
第10章 Linux網路管理命令
ifconfig:設定或顯示網路介面訊息
ifconfig [網路介面] [選項]
interface為網路介面名,Linux下的網路介面名類似eth0、eth1和lo等,分別表示第1塊網路卡、第2塊網路卡和回環介面。這是一個可選項,若未新增此選項,則顯示系統中所有的網路卡資訊;如果新增此選項,則顯示指定的網路卡資訊。
使用ifconfig指令設定網路卡資訊只會暫時生效,重新啟動網路或伺服器設定就會失效。
ifconfig指令在設定網路卡資訊時必須以root使用者的身分執行。
ifconfig #<==顯示系統中所有的網路卡資訊。
ifconfig eth0 #<==指令接上網卡名可以指定顯示該網路卡的資訊。
ifconfig -a #<==使用-a選項查看所有的網路卡資訊。
ifconfig eth1 up #<==在網路卡名稱後面接上up表示啟動網路卡。
ifconfig eth1 down #<==在網路卡名稱後面接上down表示關閉網路卡。
ifconfig eth0 192.168.120.56 #<==直接在需要設定的網路卡後面接上 IP位址。
ifconfig eth0:0 10.0.0.8 netmask 255.255.255.0 up#<==語法格式: 別名 IP位址 子網路遮罩 啟動網路卡
ifconfig eth0:1 10.0.0.9/24 up #<==新增第二個IP別名,10.0.0.9/24這種寫法和10.0.0.9 netmask 255.255.255.0的效果一樣,24是子網路遮罩255.55.的另一種表現。
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE#<==修改MAC位址的關鍵字hw(設定MAC位址) ether(網路設備類型)。
ifup:啟動網路接口
ifup [網路介面]
ifup eth0 #<==啟動網路介面eth0,因為eth0已經開始運行,所以提示如下。 RTNETLINK answers: File exists
ifup eth1 #<==啟動網路介面eth1,正常情況下是沒有輸出的。
fup eth2 #<==啟動網路介面eth2,報錯,找不到eth2的設定檔。
ifdown:停用網路介面
ifdown [網路介面]
ifdown eth1 #<==關閉eth1網路卡。
route:顯示或管理路由表
route [選項]
route #<==預設情況下,route指令會將IP位址進行DNS解析產生主機名稱。
route -n #<==使用-n選項不進行DNS解析,這樣會加快顯示速度。
route del default #<==刪除網關方法1。
route add default gw 10.0.0.2 #<==新增網關方法1,需指明網關位址10.0.0.2或其他正確的位址。
route del default gw 10.0.0.2 #<==刪除網關方法2。
route add default gw 10.0.0.2 dev eth0#<==新增網關方法2,使用dev指明網路設備,適用於有多塊網路設備的主機。
arp:管理系統的arp快取
arp [選項]
arp #<==顯示arp快取區的所有項目。
arp -n #<==使用-n選項以數字的形式顯示arp快取區的所有條目。
arp -n 10.0.0.1 #<==指定查詢10.0.0.1的arp資訊。
arp -s 10.0.0.100 00:0c:29:c0:5a:ef #<==綁定IP位址和MAC位址。
arp -d 10.0.0.100 #<==刪除靜態ARP綁定。
ip:網路設定工具
ip [選項] [網路物件] [操作指令]
ip link show dev eth1 #<==顯示eth1網路卡屬性。
ip -s link show dev eth1 #<==顯示詳細屬性。
ip -s -s link show dev eth1 #<==使用兩個-s顯示更詳細的屬性。
ip link set eth1 up #<==啟動eth1網路卡。
ip link set eth1 down #<==關閉eth1網路卡。
ip link set eth1 address 0:0c:29:13:10:11 #<==修改MAC位址。
ip a #<==效果與ip address一樣,顯示的結果包括啟動和未啟動的網卡。
ip a add 172.16.1.12/24 dev eth1 #<==使用add選項新增一個IP位址172.16.1.12,子網路遮罩255.255.255.0,簡寫為172.16.1.12/24,使用dev選項指定網路裝置為eth1。
ip a add 172.16.1.13/24 dev eth1 #<==可以新增多個IP位址,這種稱為輔助IP,前面ifconfig指令所建立的別名名為IP。現在常用的高可用軟體如heartbeat、keepalive都採用了輔助IP。
ip a del 172.16.1.12/24 dev eth1 #<==刪除主IP,刪除ip指令設定的IP位址,直接將前面的新增指令中的add選項改為del即可。
·刪除網路卡的主IP位址,同時會刪除該網路卡的所有IP位址。 ·刪除網路卡的輔助IP位址,不會影響該網路卡的其他IP位址。
ip a add 10.0.0.20/32 dev eth1 label eth1:1 #<==使用label選項建立別名IP。
ip route|column -t #<==使用column指令格式化,選項-t,預設根據空格分隔判斷輸入行的列數來建立一個表。
ip route add 10.1.0.0/24 via 10.0.0.253 dev eth0 #<==新增靜態路由。
ip route del 10.1.0.0/24 #<==刪除靜態路由。
ip neighbour #<==使用neighbour指令查看arp快取。
ip neighbour add 192.168.1.100 lladdr 00:0c:29:c0:5a:ef dev eth0 #<==新增靜態ARP。
ip neighbour del 192.168.1.100 dev eth0 #<==刪除靜態ARP。
netstat:查看網路狀態
netstat [選項]
netstat -an #<==常用組合-a和-n,顯示所有的連接資訊。
netstat -lntup 以上指令語句的作用為顯示所有TCP和UDP正在監聽的連線資訊。 ·-l:顯示所有LISTEN狀態的網路連線。 ·-n:顯示IP位址,不進行DNS解析成主機名稱、網域名稱。 ·-t:顯示所有TCP連線。 ·-u:顯示所有UDP連接。 ·-p:顯示進程號和進程名。
netstat -rn #<==使用-r選項顯示路由表訊息,-n選項不進行DNS解析,加快指令執行速度。
ss:查看網路狀態
ss指令是類似並將取代netstat的工具,它能用來查看網路狀態訊息,包括TCP、UDP連線、連接埠等。它的優點是能夠顯示更多更詳細的有關網路連接狀態的信息,而且比netstat更快速更有效率。
如果系統沒有ss指令,那就需要安裝一下,ss指令屬於iproute包,因此安裝指令是yum-y install iproute。
ss [選項] [過濾器 ]
ss -an #<==顯示所有的socket連線。
ss -an|column -t #<==上面的輸出寫在文件中會有點亂,下面用column格式化一下。
ss -lntup|column -t #<==顯示所有正在監聽的TCP和UDP連線。
ss -s #<==統計目前的established、closed、orphaned 和waiting的TCP socket數量。
ping:測試主機之間網路的連通性
ping [選項] [目標主機]
ping www.oldboyedu.com #<==ping指令直接接網域名稱或IP,會一直顯示ping的結果。
ping -c 3 -i 3 -s 1024 -t 255 www.oldboyedu.com ·-c 3:發送3次ICMP包。 ·-i 3:每次發包時間間隔為3s。 ·-s 1024:設定發送的資料包大小為1024位元組。 ·-t 255:設定發送資料包的ttl值為255。
traceroute:追蹤資料傳輸路由狀況
traceroute [選項] [主機名稱或IP] [封包大小]
arping:發送arp請求
arping [選項]
arping -f 10.0.0.1 #<==使用-f選項收到第一個回應時就退出,用於偵測目的主機是否存活。
arping -f 10.0.0.3 #<==沒有執行的主機不會回應,指令一直等待,直到Ctrl C終止。
telnet:遠端登入主機
telnet [選項] [主機名稱或IP] [連接埠]
telnet 10.0.0.12 22 #<==這裡的10.0.0.12換成讀者自己的IP,22是SSH服務的預設連接埠號碼。
nc:多功能網路工具
nc是一個簡單、可靠、強大的網路工具,它可以建立TCP連接,發送UDP資料包,監聽任意的TCP和UDP端口,進行端口掃描,處理IPv4和IPv6資料包。 如果系統沒有nc指令,那麼可以手動安裝,安裝指令為yum-y install nc。
nc [選項]
nc -l 12345 >oldboy.nc #<==監聽12345端口,將資料寫入oldboy.nc。 #<==執行完上面的指令後,目前視窗掛起。 #<==新開一個視窗執行指令。
nc 10.0.0.12 12345 <oldboy.log #<==使用nc指令向10.0.0.12主機的12345埠傳輸oldboy.log檔。
nc -z 10.0.0.12 20-30 #<==掃描10.0.0.12主機的20到30埠。
nc -z 10.0.0.12 22 #<==主機後面可以接單一位址或位址範圍。
nc -z -v 10.0.0.12 20-30 #<==使用-v選項詳細顯示掃描過程。
ssh:安全地遠端登入主機
ssh [選項] [用戶@][主機名稱或IP位址] [遠端執行的命令]
ssh 10.0.0.29 #<==這是遠端登入伺服器的簡寫指令,等同於ssh -p 22 root@10.0.0.29 #<==下面四行內容只有在第一次連接遠端伺服器時會提示,再次連線就不會提示了。
ssh -p 22 oldboy@10.0.0.29 #<==使用oldboy用戶登入遠端伺服器,這個用戶必須是遠端伺服器已有的用戶,-p指定22埠。
ssh 10.0.0.29 "free -m" #<==直接將要遠端執行的命令放置到最後即可,用引號更規範,這裡是查看所在伺服器的記憶體資訊。
ssh -v root@10.0.0.19 #<==使用-v選項進入偵錯模式。
wget:命令列下載工具
·支援斷點下載功能。 ·支援FTP和HTTP下載方式。 ·支援代理伺服器。 ·非常穩定,它在頻寬很窄的情況下或不穩定的網路中具有很強的適應性。如果是因為網路的原因下載失敗,wget會不斷嘗試,直到整個檔案下載完畢。如果是伺服器打斷了下載過程,它會再次連接到伺服器從停止的地方繼續下載。這對那些從限定了連線時間的伺服器上下載大檔案非常有用。
wget [選項] [下載位址]
wget http://www.oldboyedu.com/favicon.ico #<==wget接上下載地址即可。
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo #<==這是更新epel來源的命令,將epel-6. repo下載並放入/etc/yum.repos.d/目錄,改名為epel.repo。
wget --limit-rate=3k http://www.oldboyedu.com/favicon.ico #<==使用--limit-rate參數設定最高下載速度為3K/s。
wget -c 使用-c參數斷點續傳。
wget -b http://www.oldboyedu.com/favicon.ico 使用wget-b後台下載檔案。
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.oldboyedu. com/favicon.ico #<==使用--user-agent參數指定客戶端類型。
wget -q -T 3 --tries=1 --spider www.baidu.com #<==採用靜默訪問的方式,3秒超時,重試1次,模擬爬蟲的方式進行訪問。
mailq:顯示郵件傳輸佇列
mailq [選項]
mailq #<==查看郵件佇列。
mail:發送和接收郵件
mail [選項]
mail -s "Hello from oldboyedu" zhangyao@oldboyedu.com #<==收件者請讀者自行改成自己的信箱。 hello,this is the content of mail. #<==手動輸入兩行郵件內容。 welcome to www.oldboyedu.com. EOT #<==在新的空白行輸入Ctrl D表示結束輸入,發送郵件。
echo -e "hello,this is the content of mail. welcome to www.oldboyedu.com."|mail -s "Hello from oldboyedu" zhangyao@oldboyedu.com 指令說明:echo的後面是郵件正文。
#<==發送單一附件。 [root@oldboy ~]# echo "test"|mail -s "test" -a favicon.jpg zhangyao@oldboyedu.com
#<==發送多個附件。 [root@oldboy ~]# echo "test"|mail -s "test" -a favicon.jpg -a web.sh zhangyao@oldboyedu.com
nslookup:網域查詢工具
nslookup [選項] [網域/IP] [DNS伺服器]
·互動模式:使用者可以向網域名稱伺服器查詢各類主機、網域的信息,或是輸出網域名稱中的主機列表。 ·非互動模式:針對一個主機或網域僅取得特定的名稱或所需的資訊。
nslookup - 223.5.5.5 #<==可以直接在命令列中指定解析網域名稱的伺服器位址,但要注意寫法,不要少了「-」。
nslookup www.oldboyedu.com 223.5.5.5 #<==非互動查詢www.oldboyedu.com網域。
dig:網域查詢工具
dig [選項]
dig www.oldboyedu.com
dig @223.5.5.5 www.oldboyedu.com #<==使用@指定查詢的DNS伺服器。
dig -x 101.200.195.98 #<==使用-x選項進行網域名稱反向解析。
dig -t MX oldboyedu.com #<==使用-t選項選擇查詢的類型。
dig @223.5.5.5 www.oldboyedu.com trace #<==顯示網域名稱解析成IP的完整流程。
dig nocmd nocomment nostat www.oldboyedu.com #<==精簡一些說明資訊。
dig short www.oldboyedu.com
host:網域查詢工具
host [選項]
host www.oldboyedu.com #<==host指令直接接網域就可以了。
host -a www.oldboyedu.com #<==使用-a選項查詢詳細資訊。
host -a www.oldboyedu.com 223.5.5.5 #<==直接接指定的DNS伺服器IP。
host -t MX oldboyedu.com #<==使用-t選項選擇查詢類型。
nmap:網路探測工具和安全/連接埠掃描器
nmap [掃描類型] [一般選項] {掃描目標}
nmap 10.0.0.12 #<==nmap直接接目標主機,預設會掃描前1~1000的連接埠。
nmap -p 1024-65535 10.0.0.12 #<==-p選項指定掃描範圍。
nmap 10.0.0.0/24 #<==使用網段的格式掃描區域網路。
nmap -sn 10.0.0.0/24 #<==使用-sn選項不掃描連接埠。
nmap -sn 10.0.0.1-10 #<==可以使用這種位址範圍來掃描。
nmap -O -sV 10.0.0.12 #<==-sV顯示服務版本號。 #<==-O顯示系統版本,但是nmap指令是根據探測的TCP/IP指紋與自己的指紋庫進行比較的。如果不在指紋庫之內的系統就會無法辨識。
tcpdump:監聽網路流量
tcpdump [選項] [表達式]
tcpdump #<==預設情況下,直接啟動tcpdump將監視第一個網路介面上所有流過的封包。
tcpdump -q #<==預設情況下,tcpdump指令的輸出訊息較多,為了顯示精簡的訊息,可以使用-q選項。
tcpdump -c 5 #<==使用-c選項指定監聽的封包數量,這樣就不需要使用Ctrl C了。
tcpdump -i eth0 #<==使用-i選項可以指定要監聽的網路卡
tcpdump -n host 10.0.0.1 #<==使用-n選項不進行DNS解析,加快顯示速度。監聽指定主機的關鍵字為host,後面直接接主機名稱或IP位址即可。本行命令的功能是監聽所有10.0.0.1的主機收到的和發出的資料包。
tcpdump -n src host 10.0.0.1 #<==只監聽從10.0.0.1發出的封包,即來源位址為10.0.0.1,關鍵字為src(source,來源位址)。
tcpdump -n dst host 10.0.0.1 #<==只監聽10.0.0.1收到的封包,即目標位址為10.0.0.1,關鍵字為dst(destination,目的地)。
tcpdump -nn port 22 #<==使用-n選項不進行DNS解析,但是其會將一些協定、連接埠轉換,例如22埠轉為ssh,讀者可以比較查看範例10-4的輸出結果。因此本例使用-nn選項。監聽指定連接埠的關鍵字是port,後面接上連接埠號碼即可。
tcpdump -n arp #<==監聽ARP封包,因此表達式直接寫arp即可。
tcpdump -n icmp #<==監聽icmp數據包(想要查看下面的監控數據,可以使用其他機器ping本機即可)
tcpdump -n ip host 10.0.0.12 and ! 10.0.0.1 #<==取得主機10.0.0.12與所有主機(除了主機10.0.0.1之外)通訊的ip封包。
第9章 Linux進程管理命令
ps:查看進程
ps [選項]
ps -ef #<== UNIX格式參數,使用-e參數顯示所有進程,使用-f參數額外顯示UID、PPID、C與STIME欄位。
ps -ef|grep ssh #<==使用grep尋找關鍵字ssh。
ps aux #<== BSD格式參數,使用a選項和x選項顯示所有進程,使用u選項顯示進程的使用者資訊。
ps -u root #<==UNIX格式參數,使用參數-u顯示指定使用者相關的進程資訊。
ps -l #<== UNIX格式參數,使用參數-l以詳細的格式顯示進程的狀況。
ps -eH #<==UNIX格式參數,使用-e參數顯示所有進程,使用-H參數顯示進程樹。
ps axf #<==BSD格式參數,使用a和x參數顯示所有進程,使用f參數顯示進程樹。
ps -o pid,ppid,pgrp,session,tpgid,comm #<==-o後面接上要顯示的字段,可以和命令結果的第一行進行比較。
pstree:顯示進程狀態樹
pstree [選項] [進程編號/使用者]
pstree #<==若不指定進程的PID號,或不指定使用者名稱,則會以init進程為根進程,顯示系統的所有進程資訊。
pstree mysql #<==mysql是系統的使用者名稱。
pstree -c -p mysql #<==使用-c選項顯示所有進程,包含子進程和父進程,使用-p選項顯示進程的進程號。
pstree -u #<==使用-u選項顯示進程對應的使用者名稱。
pgrep:尋找匹配條件的進程
pgrep [選項] [符合條件]
pgrep crond #<==pgrep指令可以看作ps指令和grep指令的結合,pgrep指令指定過濾crond字段,取得到crond行程的行程編號。
pgrep -u root #<==使用-u選項顯示指定root使用者的所有進程號。
kill:終止進程
kill [選項] [進程號]
kill -l #<==參數-l顯示系統的所有訊號。
kill -l SIGKILL #<==可以使用-l參數對訊號名稱和數位訊號互換。
kill -s 15 2203 #<==這種格式使用-s參數明確指定發送值為15的訊號,效果和kill 2203一樣。
kill -9 2203 #<==訊號9會強行終止進程,這會帶來一些副作用,如資料遺失,或終端無法恢復到正常狀態等,因此應盡量避免使用,除非進程使用其他訊號無法終止。
killall:透過進程名稱終止進程
killall [選項] [進程名]
killall crond #<==用killall終止程序可多執行幾次。 crond: no process killed #<==等到看到這種結果就證明進程已經死掉了,前提是名稱要正確。
killall -w crond #<==使用-w參數,會看到等待幾秒鐘後結束指令操作。
killall -u oldboy nginx #<==這種方式可以終止所有歸屬於oldboy用戶的nginx進程
pkill:透過進程名稱終止進程
pkill [選項] [進程名]
pkill crond #<==終止定時任務程序。
pkill -t tty1 #<==使用-t選項殺死指定終端的程序。
pkill -u oldboy #<==使用-u選項殺死指定用戶的所有進程,最好還是同時再指定進程名去殺,以免誤殺服務。
top:即時顯示系統中各個行程的資源佔用狀況
top [選項]
top #<==使用top指令通常不接任何參數,若需要其他更強大的功能則需要配合互動指令。
top -a #<==使用參數-a將進程依照使用記憶體排序。
top -b #<==使用參數-b可以看到指令執行結果不停地向下刷新。
top -c #<==使用參數-c顯示進程的整個指令路徑,而不是只顯示指令名稱。
top-d 3#<==使用參數-d指定更新週期為3秒,也就是說指令結果每隔3s刷新一次。
top -n 2 #<==使用參數-n指定更新次數為2次,也就是說指令結果刷新兩次後終止退出,-n參數可以和-d參數配合使用。
top -p 15456 #<==使用-p選項接上指定的進程號,就可以只顯示這個進程的資訊了。
nice:調整程式運行時的優先權
nice [選項] [指令語句]
nice #<==指令不接任何內容時,顯示出目前系統預設的程式運作優先權為0。
nice nice #<==其中,第1個nice指令以預設值10來調整第2個nice指令運行的優先權,即在系統預設的程式運行優先權0的基礎之上增加10,得到新的程式執行優先權10,然後以優先權10來執行第2個nice指令,最後第2個nice指令顯示目前程式運行的優先權為10。
nice -n -10 vim test2 & #<==使用nice調整為-10。
renice:調整運行中的進程的優先權
renice [選項]
renice -n 5 -p 2711 #<==使用renice的-p參數指定值為2711的進程,將其NI值調整為5。
nohup:使用者退出系統程序繼續工作
nohup [選項]
nohup ping www.oldboyedu.com nohup: ignoring input and appending output to `nohup.out'#<==目前終端機已經hang住,此時強制關閉目前終端(例如關閉該標籤或SSH客戶端工具),這個ping指令依然會在背景執行。
nohup ping www.oldboyedu.com & #<==在工作中我們一般會配合&符運行nohup指令,讓程式直接在背景執行
strace:追蹤進程的系統調用
strace [選項]
strace -tt -f /application/nginx/sbin/nginx #<==-f參數追蹤目標進程,以及目標進程創建的所有子進程,-tt參數在輸出中的每一行前加上時間信息,精確到微秒,最後接上要偵測的指令語句,/application/nginx/sbin/nginx是啟動Nginx服務的指令。
strace -tt -f -e trace=file /application/nginx/sbin/nginx #<==-e trace=file的作用為只追蹤與檔案操作相關的系統呼叫。
strace -tt -f -e trace=file -p 1909 #<==使用-p參數只追蹤worker進程,結果更精簡。
strace -c /application/nginx/sbin/nginx #<==使用-c參數為進程所有的系統呼叫做一個統計分析。
strace -c -o tongji.log /application/nginx/sbin/nginx #<==使用-o選項將strace的結果輸出到檔案中。
strace -T /application/nginx/sbin/nginx #<==使用選項-T將每個系統呼叫所花費的時間列印出來,每個呼叫的時間花銷在呼叫行最右邊的尖括號裡面。
ltrace:追蹤進程呼叫庫函數
ltrace [選項]
ltrace /application/nginx/sbin/nginx #<==ltrace後面直接接上要偵測的指令語句。
ltrace -p 3892 #<==使用-p指定進程號。
runlevel:輸出目前運行級別
runlevel [選項]
runlevel N 3
·0:停機 ·1:單一用戶模式 ·2:無網路的多用戶模式 ·3:多用戶模式 ·4:未使用 ·5:圖形介面多用戶模式 ·6:重啟
init:初始化Linux進程
init [選項]
init 0 #<==關機
init 6 #<==重啟。
service:管理系統服務
service [服務名] [執行指令 ]
command可選值有start、stop、status、restart等。
service --status-all #<==顯示所有服務狀態。
service crond #<==指令語句沒有敲完時會顯示幫助訊息,crond是定時任務服務名稱。
service crond stop #<==停止服務。
service crond start #<==啟動服務。
service crond restart #<==重啟服務。
service crond status #<==查看服務狀態。
該指令在CentOS 7裡被systemctl取代。
第8章 Linux磁碟與檔案系統管理指令
fdisk:磁碟分割工具
fdisk [選項] [設備名稱]
fdisk -l #<==查看目前系統所有磁碟的分割區資訊。
fdisk /dev/sdb #<==不加參數,直接接裝置名稱就可以分割。
partprobe:更新核心的硬碟分割表信息
partprobe [選項]
partprobe /dev/sdb #<==最好加上具體的磁盤,否則可能會報錯,很多人這塊直接執行最後導致報錯,只好重啟系統
tune2fs:調整ext2/ext3/ext4檔案系統參數
tune2fs [選項]
tune2fs -l /dev/sda1|grep -i Mount#<==查看sda1裝置即/boot分割區的掛載次數。
tune2fs -C 30 /dev/sda1 #<==參數-C設定檔案系統已經被掛載的次數。
tune2fs -c 40 /dev/sda1 #<==參數-c設定強制自我檢測的掛載次數。
tune2fs -c -1 /dev/sda1 #<==關閉自動檢查等功能。
tune2fs -l /dev/sda1|grep -i check #<==查看檢查週期。
tune2fs -i 10 /dev/sda1 #<==參數-i設定每10天檢查一次。
tune2fs -i 0 /dev/sda1 #<==還原正常狀態。
parted:磁碟分割工具
parted [選項] [設備名稱]
parted -l #<==顯示所有磁碟分割區的資訊。
mkfs:建立Linux檔案系統
mkfs [選項] [裝置名稱]
mkfs -t ext4 -v /dev/sdb #<==使用-v參數顯示詳細資訊。
mkfs.ext4 /dev/sdb #<==這種寫法比較簡單,效果是一樣的。
dumpe2fs:匯出ext2/ext3/ext4檔案系統訊息
dumpe2fs [選項] [裝置名稱]
resize2fs:調整ext2/ext3/ext4檔案系統大小
resize2fs [選項] [裝置名稱]
fsck:檢查並修復Linux檔案系統
fsck [選項] [檔案系統]
必須卸載檔案系統後才能進行檢查,否則可能會發生錯誤。平時沒有必要使用這個指令檢查磁碟,只有當系統開機顯示磁碟錯誤時,才需要執行。
1)除了按照開機的提示進行修復外,還可以利用系統盤進入救援模式或單一用戶模式對系統故障進行修復。 2)千萬不要在開機正常工作的情況下執行fsck來檢查磁碟,因為這樣有可能會導致正常的磁碟發生故障。 3)/etc/fstab中的最後一列數字為1或2時,當系統開機時就會讀取fsck對這些系統磁碟進行自我檢測。 4)不要在已經掛載的檔案系統上執行fsck等磁碟修復指令,因為這樣可能會導致故障。
dd:轉換或複製文件
dd [選項]
dd if=/dev/sda1 of=dev_sda1.img #<==使用if從/dev/sda1中讀取數據,使用of指定輸出到目前目錄的dev_sda1.img。
dd if=/dev/zero of=test.data bs=1M count=2 #<==從/dev/zero讀取資料寫入到test.data,產生檔案test.data的大小為bs*count=1M *2=2M。
dd if=test.txt conv=ucase of=test.txt_u#<==利用conv參數設定ucase將小寫轉換為大寫。
mount:掛載檔案系統
mount [選項] [設備] [目錄]
掛載的目錄必須事先存在且最好為空,如果目錄不為空,那麼掛載設備後會掩蓋以前的目錄內容,但原目錄下的內容不會受損,所以,如果卸載了相應的設備,那麼此前的目錄內容又可以訪問了。
mount #<==直接輸入mount指令然後回車就可以查看系統的掛載資訊。
mount -l #<==參數-l也能查看掛載資訊。
mount /dev/cdrom /mnt #<==這裡沒有指定-t iso9660,但mount指令會自動辨識。 mount: block device /dev/sr0 is write-protected, mounting read-only#<==提示裝置寫入保護,唯讀掛載。
mount -o remount,rw / #<==remount嘗試重新掛載"/"為rw(可讀可寫入)。
umount:卸載檔案系統
umount [選項] [目錄|設備]
umount卸載可以接掛載點目錄,也可以接裝置檔案。
umount /mnt #<==接掛載點就可以卸載,umount /dev/cdrom這種卸載方式也可以。
umount /mnt/ #<==因為目前在mnt目錄中,所以無法卸載,此處執行方法一,退出目前目錄卸載。
umount -lf /mnt/ #<==方法二:使用-lf參數進行強制卸載。
df:報告檔案系統磁碟空間的使用情況
df [選項] [<檔案或目錄> ]
如果不指定命令後面的文件參數,則會顯示所有磁碟分割區的使用情況,如果給定文件,則顯示此文件所在磁碟分割的使用情況。
df #<==不指定指令後面的檔案參數,就會顯示所有磁碟分割的使用情況。
mkswap:建立交換分割區
mkswap [選項] [裝置檔案]
mkswap /dev/sdb #<==預設是不能用整塊磁碟做交換分割區的。
mkswap -f /dev/sdb #<==使用-f參數強制使用整塊磁碟做交換分割區。
swapon:啟動交換分區
swapon [選項]
swapon /dev/sdb #<==啟動swap分割區。
swapon -s #<==使用-s選項可以看到有兩個交換分區。
swapoff:關閉交換分區
swapoff [選項]
關閉交換分割區時,需要確保交換分割區沒有被使用。否則系統會提示「device is busying」的錯誤訊息。
swapoff /dev/sdb #<==關閉/dev/sdb交換分割區。
swapoff -a #<==關閉所有交換分區。
sync:刷新檔案系統緩衝區
sync [選項]
sync #<==多次執行sync指令,指令沒有任何輸出。
第7章 Linux用戶管理及用戶資訊查詢命令
useradd:建立用戶
useradd [選項] [使用者名稱] useradd -D [options]
useradd ett 建立使用者的同時也會建立一個與使用者名稱相同的使用者群組。 在這個例子中,我們新增了一個名為ett的系統用戶,當查看/home/目錄時,會發現系統自動建立了一個ett的目錄,其就是用戶登錄後的起始目錄,即家目錄。
useradd -g sa -u 901 oldgirl #<==建立使用者oldgirl屬於sa群組,uid為901。
useradd -M -s /sbin/nologin tingting #<==-M不建立家目錄,-s指定使用者登入後的Shell,這裡是/sbin/nologin,表示禁止登入。此例在生產場景中部署Nginx、MySQL等服務時常用到。
useradd -u 806 -s /bin/sh -c SysUser -G root,sa -e "2017/07/12" -f 2 -d /tmp/inca inca #<==新增使用者inca,並設定使用者註解訊息為“SysUser”,UID指定為806, 歸屬為使用者群組root、sa成員,其Shell類型為/bin/sh,設定家目錄為/tmp/inca,使用者過期時間為2017/07/12,過期後兩天停權。
useradd -D -s /bin/sh #<==修改預設登入Shell。
useradd -D -e "2018/07/12" #<==修改使用者預設的有效期限。
useradd-D的功能完全可以使用vim/etc/default/useradd編輯修改後來替代。
usermod:修改使用者資訊
usermod [選項] [使用者名稱]
usermod -u 888 -s /sbin/nologin -c TmpUser -G root,sa,tech -e "2018/07/12" -f 30 -d /home/inca inca #<==inca的使用者註解資訊已修改為“TmpUser”,UID修改為999,歸屬修改為使用者群組root、sa、tech成員,其Shell類型為/sbin/nologin,設定家目錄為/home/inca,使用者過期時間為2018/07/12,過期後30天停權。
userdel:刪除用戶
userdel [選項] [使用者名稱]
userdel zuma #<==刪除zuma使用者。
userdel -r oldgirl #<==帶-r參數刪除oldgirl用戶。
groupadd:建立新的使用者群組
groupadd [選項] [使用者群組]
groupadd -g 123 test1 #<==新增GID為123的test1用戶群組。
groupdel:刪除使用者群組
groupdel [用戶群組]
groupdel root #<==刪除root用戶群組失敗,因為root用戶還存在。
groupdel不能刪除還有用戶歸屬的主用戶群組。
passwd:修改使用者密碼
passwd [選項] [使用者名稱]
·root使用者可以修改任何使用者的密碼,一般使用者只能修改自身的密碼。 ·root使用者修改密碼時,如果不符合系統密碼規則,則給予警告訊息,但密碼設定仍然生效。普通使用者修改密碼時,如果使用弱密碼,則給予警告訊息,且修改無效。
passwd -S oldgirl Only root can do that. #<==提示這個參數只能在root下執行。
echo "123456"|passwd --stdin oldgirl #<==--stdin參數能從標準輸入取得密碼。
passwd -n 7 -x 60 -w 10 -i 30 oldgirl #<==oldgirl用戶7天內不能更改密碼,60天以後必須修改密碼,過期前10天通知用戶,過期後30天後禁止用戶登入。
chage:修改使用者密碼有效期限
chage [選項] [使用者名稱]
chage -m 7 -M 60 -W 10 -I 30 oldboy #<==oldboy用戶7天之內不能更改密碼,60天以後必須修改密碼,過期前10天通知oldboy用戶,過期後30天後禁止用戶登錄。
chage -m7 -M60 -W10 -I30 oldboy #<==第2種寫法。
chpasswd:批次更新使用者密碼
chpasswd [選項]
chpasswd #<==在命令列輸入chpasswd,回車。 root:123456 #<==格式 使用者名稱:密碼,使用者必須存在才行。 oldboy:123456 #<==一行一個 #<==在新的空白行輸入Ctrl D結束輸入。
su:切換用戶
su [選項] [使用者名稱]
1)普通用戶切換到root用戶,可使用su-或su-root,但必須輸入root密碼才能完成切換。 2)root用戶切換到普通用戶,可使用「su-普通用戶名」的寫法。不需要輸入任何密碼就能完成切換。在CentOS 5.X系統中,切換到一般使用者後,再執行一些指令如ifconfig時,可能會遭遇環境變數PATH的路徑問題,也會因此找不到某些系統指令(一般是/sbin,/usr /sbin等下面的指令),這時就需要使用全路徑執行或調整配置一般使用者的PATH變數內容,CentOS 6和CentOS 7不存在這方面的問題。 3)如果只希望在某使用者下執行指令,而不用直接切換到該使用者下來操作,可以使用su-使用者名稱-c"指令"的方式。
visudo:編輯sudoers文件
visudo [選項]
visudo -c #<==使用-c選項進行語法檢查。
sudo:以另一個使用者身分執行指令
sudo [選項]
顯示使用者與使用者群組的信息
id [選項] [使用者名稱]
id #<==不接用戶參數,預設是目前登入用戶。
id oldboy #<==指定oldboy使用者顯示的資訊。
id -g #<==顯示用戶群組GID。
id -u #<==顯示用戶ID。
id -un #<==顯示使用者名稱(-n參數的意思是不顯示數字,顯示名稱)。
w:顯示已登入使用者資訊
w [選項] [使用者]
w #<==一般不接任何參數就可以使用。
w -h #<==使用-h參數,不顯示前兩行標題資訊。
who:顯示已登入使用者訊息
who [選項]
who #<==一般不需要任何參數就可以使用。
who -b #<==顯示啟動時間。
who -d #<==顯示已登出的使用者。
who -l #<==顯示登入的進程。
who -H #<==顯示標題。
ho -H -a #<==使用-H參數顯示標題,使用-a參數顯示所有資訊。
users:顯示已登入用戶
users #<==如果是相同使用者登入多次,登入幾次就會顯示幾次使用者名稱。
whoami:顯示目前登入的使用者名
whoami指令用來顯示目前登入的使用者名,這個指令可以看作英文短句who am i的簡寫。
last:顯示使用者登入列表
last [選項]
last #<==會顯示很多行。
last -10 #<==指定顯示行數,也可以透過管道配合less指令。
last oldboy #<==顯示oldboy使用者的登入情況,但oldboy使用者沒有登入過,因此顯示為空。
lastb:顯示使用者登入失敗的記錄
lastb [選項]
lastb #<==需要多加註意這個指令執行的結果,如果發現未知的登入失敗訊息,那就要考慮系統是否遭到暴力破解登入。
lastlog:顯示所有使用者最近的登入記錄
第6章 檔案備份與壓縮指令
tar:打包備份
tar [選項] [檔案或目錄]
tar zcvf www.tar.gz ./html/ #<==選項v會顯示打包的過程,大家需要記住常用的打包命令組合zcvf,如果不想顯示打包過程,則可以省略v選項,即選項組合為zcf。
tar ztvf www.tar.gz #<==使用選項t不解壓縮就可以查看壓縮包的內容,選項v可以顯示檔案的屬性。
tar tf www.tar.gz #<==如果不指定z選項,那麼tar指令也會自動判斷壓縮包的型別,自動呼叫gzip指令。
tar zxvf www.tar.gz -C /tmp/ #<==選項C指定解壓縮路徑,若不加C則解壓縮到目前目錄。
tar xf www.tar.gz -C /tmp/ #<==如果不想看到太多的輸出,則可以去掉v選項,功能不受影響。同時z選項也可以省略,只要涉及解壓縮的操作,tar指令都能自動辨識壓縮包的壓縮類型,但是壓縮時必須加上z選項。
tar zcvf www.tar.gz ./html/ --exclude=html/oldboy/test #<==test目錄結尾不要加/,否則不會成功。
tar zcvf www.tar.gz ./html/ --exclude=html/oldboy/test --exclude=html/oldboy #<==排除2個以上目錄的方法:並列使用多個--exclude。
tar zcvfX paichu.tar.gz list.txt ./html/ #<==使用參數X接上要排除的檔案清單。
用tar的通用選項zcf打包檔案時,如果這個檔案是連結檔案如/etc/rc.local,那麼tar只會對連結檔案本身打包,而不是對連結檔案所指向的真實檔案打包,因此需要額外使用- h選項將軟連結檔案對應的實體檔案打包
若需要打包的目錄為相對路徑,則--exclude後只能接相對路徑。 ·若需要打包的目錄為絕對路徑,則--exclude後既能接絕對路徑也能接相對路徑。 ·為方便起見,--exclude的後接路徑和打包路徑應保持形式一致,要麼都是相對路徑,要麼都是絕對路徑。
tar zcvf etc.tar.gz 'find etc/ -type f' #<==使用find找到所有的普通文件,在tar命令語句中嵌套一個反引號包含的find命令語句。
gzip:壓縮或解壓縮文件
gzip [選項] [檔案]
gzip *.html #<==使用gzip指令壓縮目前目錄下所有以「.html」結尾的檔案。
gzip -l *.gz #<==使用-l參數不解壓縮顯示文件的壓縮訊息,因為原始檔案都是空文件,所以壓縮率都為0.0%。
gzip -dv *.gz #<==使用-d參數解壓縮文件,使用-v參數顯示解壓縮過程。
gzip -c services >services.gz #<==使用-c選項與輸出重定向符號將輸出定向到services.gz。
zcat services.gz|head #<==zcat指令直接接上壓縮檔案就可以讀壓縮包。
zcat services.gz >services #<==也可以直接解壓縮出來重定向到檔案。
zip:打包和壓縮文件
zip [選項] [檔案或目錄]
zip services.zip ./services #<==格式:zip 壓縮套件名稱 被壓縮的檔案。
zip tmp.zip ./tmp/ #<==這樣只是壓縮目錄這一文件,目錄下的文件沒有壓縮。
zip -r tmp.zip ./tmp/ #<==使用-r選項遞歸壓縮。
zip -r tmp1.zip ./tmp/ -x tmp/services.zip #<==-x選項指定不壓縮的檔案。
unzip:解壓縮zip文件
unzip [選項] [壓縮檔]
unzip -l tmp.zip #<==使用-l選項可以查看壓縮包內的檔案清單。
unzip tmp.zip #<==在根下直接解壓縮文件,因為原始檔案還存在,因此會出現下面的提示。 #<==是否替換文件,y是 n否 A所有文件都替換 N所有文件都不替換 r重命名
unzip -v tmp.zip #<==解壓縮時顯示一些資訊。
unzip -o tmp.zip #<==解壓縮時不提示是否覆蓋。
unzip -d /tmp tmp.zip #<==可以使用-d選項接目錄來指定解壓縮目錄。
scp:遠端檔案複製
scp [選項] [使用者@主機1:檔案1] [使用者@主機2:檔案2]
scp /etc/services 10.0.0.9:/tmp#<==scp 傳送的檔案名稱 目標主機IP位址:想要傳到的目錄。
scp -p /etc/services 10.0.0.9:/tmp #<==使用-p選項保持檔案屬性傳輸。
scp -rp /tmp 10.0.0.9:/tmp #<==需要使用-r選項複製目錄
scp 10.0.0.9:/etc/services . #<==與推送的命令順序對調即可,從10.0.0.9主機上將/etc/services檔案下載到目前目錄。
scp -rp 10.0.0.9:/tmp . #<==拉取10.0.0.9主機的tmp 目錄到目前目錄。
rsync:檔案同步工具
1)本機模式: rsync [選項] [原始檔] [目標檔]
2)透過遠端Shell存取模式: 拉取(Pull): rsync [選項] 使用者@主機:來源檔案 [目標檔案] 推送(Push): rsync [選項] [來源檔案] 使用者@主機:目標文件
3)rsync守護程式模式 拉取(Pull): rsync [選項] 使用者@主機::原始檔 [目標檔] rsync [選項] rsync://使用者@主機:連接埠/來源檔案 [目標檔案] 推送(Push): rsync [選項] [來源檔案] 使用者@主機::目標文件 rsync [選項] [來源檔案] rsync://使用者@主機:連接埠/目標文件
rsync -av /data1/ /data2 #<==如果來源目錄的最後有斜線,就會複製目錄內的內容,而不是複製目錄本身。
rsync -av /data1 /data2 #<==如果來源目錄沒有斜線,則會複製目錄本身及目錄下的內容。
rsync -av /etc/hosts /tmp #<==來源檔案/etc/hosts和目標目錄/tmp都在同一台主機之上。
rsync -av --delete /null/ /tmp/ #<==選項--delete使tmp目錄內容和空目錄保持一致,不同的檔案及目錄將會被刪除,即null裡有什麼內容,tmp裡就有什麼內容,null裡沒有的,而tmp裡有的就必須要刪除,因為null目錄為空,因此此指令會刪除/tmp目錄中的所有內容。
rsync -av 10.0.0.9:/tmp/ /tmp #<==拉取。
rsync -av /tmp/ 10.0.0.9:/tmp/ #<==推送。
rsync -av -e 'ssh -p 22' /tmp 10.0.0.9:/tmp/ #<==前面的案例使用rsync同步資料都是明文傳輸的,在要求保障資料安全的場景下,可以使用-e選項藉由SSH隧道進行加密傳輸數據,-p是SSH指令的選項,指定SSH傳輸的連接埠號碼為22,這條指令的結果是將本地/tmp目錄下的內容透過SSH加密隧道推送資料到10.0.0.9主機的/tmp目錄。同理,執行"rsync -av -e 'ssh -p 22' 10.0.0.9:/tmp/ /tmp"可以從10.0.0.9主機的/tmp目錄透過SSH加密隧道將資料拉取到本地/tmp目錄下。
第5章 Linux資訊顯示與搜尋檔案指令
uname:顯示系統訊息
uname [選項]
uname -a #<==顯示系統所有相關資訊。
uname -m#<==64位元的硬體架構。
uname -n#<==主機名為oldboy。
uname -r#<==內核發行版本號。
uname -s #<==內核名稱。
uname -v#<==內核版本號。
uname -p#<==處理器的類型為64位元的CPU。
uname -o#<==作業系統名稱。
uname -i#<==硬體平台。
hostname:顯示或設定係統的主機名
hostname [選項]
hostname #<==不接任何參數時則顯示主機名稱。
hostname A #<==hostname指令接上一個主機名稱就可以暫時修改主機名稱。
vi /etc/sysconfig/network #<==只有修改設定文件,才能使得系統重新啟動後,修改的主機名稱仍然有效
需要說明的是,在CentOS7系統中,主機名稱的設定檔換成了/etc/hostname,修改/etc/sysconfig/network不會生效,需要修改/etc/hostname。
hostname -s #<==顯示短格式主機名稱。
hostname -a #<==顯示主機的別名。
hostname -i #<==在網路不太好的情況下,得出結果會很慢。
hostname -I #<==建議使用-I取得系統的IP位址,有多少塊網路卡(有IP位址)就顯示多少個IP位址。
dmesg:系統啟動異常診斷
dmesg [選項]
dmesg|less #<==透過less指令分頁查看緩衝區內容,用於查看硬體故障等資訊。
stat:顯示檔案或檔案系統狀態
stat [選項] [檔案或目錄]
du:統計磁碟空間使用情況
du [選項] [檔案或目錄]
du -a #<==顯示目前目錄下所有檔案(包括隱藏檔案及子目錄下的所有檔案)的 大小。
du -s #<==顯示目前目錄的總大小。
du -h #<==-h參數會換算成K、M、G這種易讀易理解的結果。
du -sh #<==-sh是常用的指令組合,也是推薦大家使用的方法。
du -sh /usr/local/ #<==顯示指定目錄的總大小。
du -h --max-depth=1 /usr/local/ #<==只顯示第一層目錄的大小。
du -h --max-depth=2 /usr/local/ #<==只顯示第一、二層目錄的大小。
du -h --max-depth=2 /usr/local/ --exclude=/usr/local/share #<==不顯示/usr/local/share目錄的大小。
date:顯示與設定係統時間
date [選項] [ 日期格式]
date %y #<==顯示年(短格式)。
date %Y #<==顯示年(長格式)。
date %m #<==顯示月。
date %d #<==顯示日。
date %H #<==顯示小時。
date %M #<==顯示分。
date %S #<==顯示秒。
date %F #<==顯示特殊格式日期(年-月-日)。
date %T #<==顯示特殊格式時間(時:分:秒)。
date %F -d "-1day" #<==顯示昨天(簡潔寫法)。
date %F -d "yesterday" #<==顯示昨天(英文寫法)。
date %F -d "-2day" #<==顯示前天。
date %F -d " 1day" #<==顯示明天。
date %F -d "tomorrow" #<==顯示明天(英文寫法)。
date %F -d " 2day" #<==顯示2天後。
date %F -d "1month" #<==顯示1個月後。
date %F -d "1year" #<==顯示1年後。
date -s 20170706 #<==設定成20170706,具體時間為空即 00:00:00。
date -s 00:00:03 #<==設定具體時間,不會對日期做更改。
date -s "00:00:03 20170706" #<==這樣可以設定全部時間。
echo:顯示一行文字
echo [選項] [文本]
echo Hello world! #<==echo直接接想輸出的文字。
echo "hello world" >>hello.txt #<==使用追加重定向符號「>>」將文字寫入檔案。
echo -n "oldboy";echo "oldboy" #<==使用-n選項就可以不換行,輸出成一行。
watch:監視命令執行情況
watch [選項] [指令]
watch -n 1 -d netstat -ant #<==netstat在後面會詳細講解,-n指定每 秒執行指令,-d高亮顯示。
watch cat oldboy.log<#==監控目前目錄中oldboy.log檔案的變化。
watch -t cat oldboy.log -t參數不顯示標題
which:顯示指令的全路徑
which [選項] [指令名]
which date #<==查看date指令的全路徑。
which which #<==如果對指定指令設定了別名,那麼使用which功能也會顯示別名的狀況。
which cd #<== Bash內建指令無法使用which。
which -a mysql #<==所有包含mysql指令的路徑都顯示出來了。
whereis:顯示指令及其相關檔案全路徑
whereis [選項] [檔名]
whereis svn
whereis -b svn #<==只找可執行檔。
whereis -m svn #<==只找man幫助文件。
whereis -s svn #<==只找尋原始碼檔。
locate:快速定位檔案路徑
locate [選項] [檔案名稱]
locate pwd #<==直接跟想要找的檔名,只要包含pwd字串的都能找出來。
locate -c pwd #<==只顯示符合的行數。
locate /etc/sh #<==只要部分符合就輸出。
locate /etc/sh* #<==也可以使用通配符。
locate -c /etc/*sh*
updatedb:更新mlocate資料庫
updatedb [選項]
updatedb -vU /root/ #<==-v顯示更新過程,-U指定更新路徑。
第4章 文本處理三劍客
grep:文字過濾工具
grep指令是Linux系統中最重要的指令之一,其功能是從文字檔案或管線資料流篩選相符的行及數據
grep -v "oldboy" test1.txt #<==過濾不包含oldboy字串的 行,注意被過濾的字串,盡可能使用雙引號。
grep -n "oldboy" test2.txt #<==輸出包含oldboy字串的行,並顯示行號。
grep -n "." test2.txt #<==顯示所有行的行號(類似cat -n test2.txt),這裡的"."代表匹配任意單個字符,即匹配了所有的內容,所以,顯示了所有行的行號。
grep -i "alex" test2.txt #<==使用-i參數不區分大小寫過濾alex。
grep -Ei "oldboy|alex" test2.txt #<==不區分大小寫,同時過濾包含oldboy和alex的字串。
grep -Ei --color=auto "oldboy|alex" test2.txt #<==增加--color參數。 #<==符合的字串會顯示紅色顏色。
grep -c "oldboy" test2.txt計算匹配的字串的數量
sed:字元流編輯器
sed [選項] [sed內建指令字元] [輸入檔]
sed '2a 106,dandan,CSO' persons.txt #<==這裡使用了sed內建指令a追加功能。
sed '2i 106,dandan,CSO' persons.txt #<==這裡使用了sed內建指令i插入功能。
sed '2a 106,dandan,CSO 107,bingbing,CCO' person.txt 在檔案指定行後追加多行文字。
sed '2d' person.txt #<==這裡使用了sed內建指令d實作刪除功能,指定刪除第2行的文本
sed '2,5d' person.txt #<==“2,5”是一個數字地址的組合,用逗號作為分隔,其作用是刪除文件的第二行到第五行(刪除多行)文本,包括第2行和第5行,因此只剩下第1行。
sed 's#zhangyao#dandan#g' person.txt #<==這裡使用了sed內建指令s來實現替換功能,並且使用了全域替換標誌g表示替換檔案中符合zhangyao的所有字串。需要注意一下語法格式,將需要替換的文字「zhangyao」放在第一個和第二個「#」之間,將替換後的文字「dandan」放在第二個和第三個「#」之間。結果為第二行的“zhangyao”替換為“dandan”。
sed '2p' person.txt #<==這裡使用了sed內建指令p來實現查詢功能,並結合數字位址指定查詢第2行的內容,但是我們會發現結果不只是輸出第2行,檔案的其他內容也顯示出來了,這是因為sed指令有一個預設輸出的功能。
sed -n '2p' person.txt #<==為了解決上面命令顯示多餘內容的問題,使用選項-n取消默認輸出,只輸出匹配行的文本,因此大家只需要記住使用命令p必用選項- n。
sed -n '2,3p' person.txt #<==當然使用位址範圍「2,3」能夠查看第2行到第3行的內容。
awk基礎入門
awk [參數] '條件{動作}' 文件 ...
awk 'NR==5' oldboy.txt #<==和上面內容對比確實是第5行。
awk 'NR==2,NR==6' oldboy.txt
awk '{print NR,$0}' oldboy.txt 在文件每行的內容前加上行號。
awk 'NR==2,NR==6 {print NR,$0}' oldboy.txt #<==顯示oldboy.txt檔案的第2行到6行,並列印行號。
awk -F ":" '{print $1,$3,$NF}' oldboy.txt 顯示oldboy.txt檔案的第一列、第三列和最後一列。
awk '{gsub("/sbin/nologin","/bin/bash",$0);print $0}' oldboy.txt 把檔案中的/sbin/nologin替換為/bin/bash(awk函數功能實作)。