訪問博客查看 本文 排版更美觀ヾ(?ω?`)o
Linux 系列學(xué)習(xí)筆記:
繼 Git 后貴系的另一個暑培項目,講授 Linux 的基本用法,恰好這學(xué)期「操作系統(tǒng)」課程實驗需要用到 Linux,而且實驗室的服務(wù)器也需要學(xué)習(xí)相關(guān)用法,故學(xué)之。
本文部分內(nèi)容參考了清華 ZAH 同學(xué)的教程,部分參考了 劉遄 老師的《Linux 就該這么學(xué)》,菜鳥教程-Linux。
Linux 簡介
Linux,全稱 GNU/Linux,是一套免費使用和自由傳播的類 Unix 操作系統(tǒng)。相比于其他系統(tǒng),Linux 更加穩(wěn)定且有效率、更加安全、相對不耗資源……以至于幾乎所有長期穩(wěn)定運行的網(wǎng)站服務(wù)器上、在處理大數(shù)據(jù)的集群系統(tǒng)中,以及需要協(xié)同工作的服務(wù)器環(huán)境都采用 Linux 系統(tǒng)。
Linux 發(fā)行版
Linux 嚴格來說是單指操作系統(tǒng)的內(nèi)核,因操作系統(tǒng)中包含了許多用戶圖形接口和其他實用工具。如今 Linux 常用來指「基于 Linux 的完整操作系統(tǒng)」,內(nèi)核則改以「Linux 內(nèi)核」稱之。
一些組織或廠商將 Linux 內(nèi)核與各種軟件和文檔包裝起來,并提供系統(tǒng)安裝界面和系統(tǒng)配置、設(shè)定與管理工具,就構(gòu)成了 Linux 的發(fā)行版本。

命令行與終端
在學(xué)習(xí) Linux 的過程中,有幾個易混淆的概念:
- 圖形用戶界面(GUI)= 使用圖形方式進行交互的用戶界面
- 命令行界面(CLI)= 使用文本命令進行交互的用戶界面
- 控制臺(Console)= 物理意義的終端,電腦主機的一部分
- 終端(Terminal)= TTY (Teletypewriter,打字機) = 文本輸入輸出環(huán)境
- 終端模擬器(Terminal Emulator)= 套殼程序,用來模擬傳統(tǒng)終端
- Shell = 一個程序,命令行解釋器,執(zhí)行用戶輸入的命令并返回結(jié)果
CLI
命令行界面(Command-Line Interface,CLI)是在圖形用戶界面得到普及之前使用最為廣泛的用戶界面,它通常不支持鼠標,用戶通過鍵盤輸入指令,計算機接收到指令后,予以執(zhí)行。也有人稱之為字符用戶界面(Character User Interface,CUI)。
一般來說,在服務(wù)器中較多采用的是 CLI 界面,或許有以下幾點原因:
- 服務(wù)器的功能是對外提供服務(wù),并不需要直觀的 GUI 界面來讓用戶日常使用,使用 GUI 界面反而浪費資源。
- 使用 CLI 界面管理服務(wù)器,本質(zhì)上是直接用命令控制服務(wù)器,這允許一系列的自動化腳本(Shell 腳本)出現(xiàn)來節(jié)省時間。
- 方便自動化、規(guī)?;渴鸱?wù)器。
Shell
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 等系統(tǒng)的橋梁,如同「殼」一般。它的本質(zhì)是一個命令解釋器,將用戶輸入的命令(符合 Shell 語法)處理成對應(yīng)操作系統(tǒng)的控制命令,處理完畢后再將結(jié)果反饋給用戶。
不同操作系統(tǒng)下面的 Shell 種類眾多,常見的有:
- Windows:cmd (Command Shell)、PowerShell;
- Linux/macOS:sh、bash、zsh 等。
Ken Thompson 的 sh 是第一種 Unix Shell,本教程關(guān)注的是 Bash,也就是 Bourne Again Shell,Bash 也是大多數(shù) Linux 系統(tǒng)默認的 Shell。
Terminal
終端 (Terminal),是一種用來讓用戶輸入數(shù)據(jù)至計算機,以及顯示其計算結(jié)果的機器。早期的終端通常就是一臺電子打字機(Teletypewriter, TTY),后來隨著計算機的發(fā)展,打字機被鍵盤和顯示器取代,而 GUI 界面也成了主流。
于是,這時候我們就需要一個程序來模擬傳統(tǒng)終端的行為,即終端模擬器(Terminal Emulator),當(dāng)用戶打開終端模擬器時,實際上是進入一個會話進程(Session)。終端模擬器有很多,這里舉幾個經(jīng)典的例子:
- GNU/Linux:gnome-terminal、Konsole;
- macOS:Terminal.app、iTerm2;
- Windows:Windows Terminal、Cmder 等。
Shell 使用
在 Linux 系統(tǒng)中打開終端時,會看到一個提示符,通常類似 hewei@hewei-VirtualBox ~$。在提示符下,命令會被 Shell 環(huán)境解析并反饋到終端中。
提示符是 Shell 最主要的文本接口。它告訴你,你的主機名是 hewei-VirtualBox,你現(xiàn)在的身份是 hewei 并且你當(dāng)前的工作目錄(Current working directory)是 ~ (默認在 /home/hewei/ 用戶目錄)。
$ 符號表示您現(xiàn)在的身份不是 root,輸入如下命令可以暫時切換到 root 權(quán)限:
hewei@hewei-VirtualBox ~$ sudo su # 獲取 root 權(quán)限
[sudo] hewei 的密碼: # 在此輸入密碼,Terminal 下密碼都是不可見的
輸入密碼后,可以看到提示符變成了 root@hewei-VirtualBox:/home/hewei#,其中 # 符號就是超級用戶權(quán)限的標志。再輸入 exit 即可退回普通用戶身份。
終端快捷鍵
在 Git學(xué)習(xí)筆記 #1 基礎(chǔ)知識介紹 中,已經(jīng)簡單介紹了命令行界面的一些使用技巧,這些命令在 Linux 系統(tǒng)的 Bash 中同樣使用。這里羅列出 Linux 常用快捷鍵:
-
Ctrl+Shift+T:喚出一個終端窗口。 -
Tab:實現(xiàn)對命令、參數(shù)或文件的內(nèi)容補全。 -
Ctrl+C:終止當(dāng)前進程的運行,重獲終端的控制權(quán)。 -
Ctrl+Z:掛起當(dāng)前進程。 -
Ctrl+D:結(jié)束鍵盤輸入,若正在使用 Shell 則退出,相當(dāng)于輸入exit()。 -
Ctrl+L:清空當(dāng)前終端中已有的內(nèi)容,相當(dāng)于輸入clear。 -
<上下鍵>:翻看使用過的命令記錄。 -
Shift+PgUp/PgDn:翻頁終端。 -
home/end:光標快速移動到當(dāng)前行首或行尾。 -
Ctrl/Shift+Ins:復(fù)制粘貼文本。 -
‘’和“”:命令參數(shù)中若存在空格,需要用引號括起來。
命令格式
常見的執(zhí)行 Linux 命令的格式是這樣的:命令名稱 [命令參數(shù)] [命令對象]。其中,命令參數(shù)用于對命令進行調(diào)整,使之更好地貼近需求,參數(shù)分為長格式和短格式,如:man --help,man -h。短格式之間可以合并,合并后僅保留一個減號即可。
在 Linux 相關(guān)的手冊中,我們會約定俗成地將可選擇的、非必需的參數(shù)使用中括號引起來,而命令所要求的、必須有的參數(shù)或?qū)ο笾?,則不帶中括號。
此外,要注意 Linux 系統(tǒng)中的命令、參數(shù)、對象都是嚴格區(qū)分大小寫的。
Shell 腳本
Shell 除了是一個交互式(Interactive)的命令解釋器,它還是一種程序設(shè)計語言(Shell Script)。它定義了各種變量和參數(shù),并提供了許多在高級語言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。
用 Shell 編寫的腳本文件即 .sh 文件,它能在 Shell 環(huán)境下運行,fork 出一個子進程,調(diào)用系統(tǒng)內(nèi)核來執(zhí)行批處理(Batch)的系統(tǒng)控制。在文件的第一行,通常是 #!/bin/bash,這句話約定了這個腳本需要哪種 Shell 環(huán)境來執(zhí)行。
通過如下命令就可以執(zhí)行一個 Shell 腳本:
$ bash example.sh
常用命令摘要
下面羅列了部分常用指令與參數(shù)的介紹,更多功能請在幫助手冊中檢索。
喚出幫助界面命令
-
man:代表 Manuel,查看幫助手冊,格式為man 命令名稱。會進入「導(dǎo)航」模式,使用如下快捷鍵進行查閱:
按鍵 作用 <空格鍵>向下翻一頁 PaDn/PgUp向下/上翻一頁 home/end直接前往首頁/尾頁 /從上至下搜索某個關(guān)鍵詞,如 /linux?從下至上搜索某個關(guān)鍵詞,如 ?linuxq退出幫助文檔
常用系統(tǒng)工作命令
-
echo:輸出字符串或變量提取后的值,格式為echo [字符串] [$變量]。
樣例 功能 echo 'hello world'輸出一個字符串參數(shù), hello worldecho hello world輸出兩個空格隔開的字符串參數(shù), hello和worldecho hello\ world輸出一個字符串參數(shù), \轉(zhuǎn)義空格echo $PATH輸出環(huán)境變量 PATH的提取值
-
date:顯示或設(shè)置系統(tǒng)的時間與日期,格式為:date [+指定的格式]。
樣例 功能 date顯示 Sat Sep 5 09:13:45 CST 2020date "+%Y-%m-%d %H:%M:%S"按格式顯示 2020-09-05 09:14:35date -s "20201101 8:30:00"設(shè)置系統(tǒng)時間
-
reboot:重啟系統(tǒng),無格式,需要root權(quán)限。 -
poweroff:關(guān)閉系統(tǒng),無格式,需要root權(quán)限。 -
ps:代表 Processes,查看系統(tǒng)中的進程狀態(tài),格式為ps [參數(shù)]。
參數(shù) 功能 -a顯示所有進程(包括其他用戶的進程) -u顯示用戶以及其他詳細信息 -x顯示沒有控制終端的進程 aux合并三個參數(shù), ps命令可省略-
pstree:以樹狀圖形式展示進程之間關(guān)系,無格式。top:動態(tài)地監(jiān)視進程活動及系統(tǒng)負載等信息,無格式。nice:調(diào)整進程的優(yōu)先級,格式為nice -n 優(yōu)先級數(shù)字 服務(wù)名稱。取值為 -20 到 19,數(shù)字越小,優(yōu)先級越高。pidof:查詢指定進程的 PID,格式為pidof [參數(shù)] 服務(wù)名稱。kill:終止指定 PID 值的進程,格式為kill [參數(shù)] PID。
系統(tǒng)狀態(tài)檢測命令
-
ifconfig:代表 Interface config,獲取網(wǎng)卡配置與網(wǎng)絡(luò)狀態(tài)等信息。 -
ipaddr:代表 IP address,獲取 IP 地址等信息。 -
uname:代表 Unix name,查看系統(tǒng)內(nèi)核版本與系統(tǒng)架構(gòu)等信息。 -
uptime:查看系統(tǒng)的負載信息(當(dāng)前系統(tǒng)時間、已運行時間、啟用終端數(shù)、平均負載值),無格式。 -
free:顯示當(dāng)前系統(tǒng)中內(nèi)存的使用量,格式為free [-h],-h為易讀模式(human readable)。 -
who:查看當(dāng)前登入主機的用戶終端信息,無格式。 -
ping:測試主機之間的網(wǎng)絡(luò)連通性,格式為ping [參數(shù)] 主機地址。 -
history:顯示執(zhí)行過的命令歷史,格式為history [-c],-c為清空(clear)。
查找定位文件命令
-
pwd:代表 Print working directory,顯示用戶當(dāng)前所處的工作目錄,無格式。 -
cd:代表 Change directory,切換當(dāng)前的工作路徑,格式為cd [參數(shù)] [目錄]。
樣例 功能 cd -返回到上一次所處的目錄 cd .進入目錄(無變化) cd ..進入上級目錄 cd /切換到根目錄 cd ~切換到當(dāng)前用戶的 /home/目錄cd ~ <username>切換到其他用戶的 /home/目錄cd /bin切換到絕對路徑 /bin下
-
ls:代表 List,顯示目錄中的文件信息,格式為ls [參數(shù)] [文件名稱]。
樣例 功能 ls -a查看全部文件(包括隱藏文件) ls -l列表形式,查看文件的屬性、大小等詳細信息 ls -al合并以上兩個參數(shù) ls -alh易讀顯示(human readable) ls -ld查看當(dāng)前路徑文件夾的屬性、大小等詳細信息
-
tree:以樹狀圖的形式列出目錄內(nèi)容及結(jié)構(gòu),無格式。 -
find:指定條件查找文件所對應(yīng)的位置,格式為find [查找范圍] 尋找條件。
樣例 功能 find /etc -name "host*"查找 /etc路徑下host開頭的文件find / -perm -4000整個系統(tǒng)中搜索權(quán)限包括 SUID 的文件
updatedb:生成文件索引庫,無格式。和以下命令配合使用,快于find。locate:按照名稱快速搜索文件所對應(yīng)的位置,格式為locate 文件名稱。whereis:按照名稱快速搜索命令、源代碼及幫助文件的位置,格式為whereis 命令名稱。which:按照名稱檢索命令的位置,格式為which 命令名稱,默認在 PATH 變量所指定的路徑中檢索。
文本統(tǒng)計編輯命令
-
cat:代表 Concatenate,查看內(nèi)容較少的純文本文件,格式為cat [參數(shù)] 文件名稱。
樣例 功能 cat a.txt查看當(dāng)前目錄下文件內(nèi)容 cat -n a.txt查看時顯示行號 cat /etc/os-release查看操作系統(tǒng)信息
-
more:查看內(nèi)容較多的純文本文件,格式為more [參數(shù)] 文件名稱。用空格鍵或回車鍵向下滾動查看。 -
head:查看純文本文件的前 N 行,格式為head -n [行數(shù)] 文件名稱。 -
tail:查看純文本文件的后 N 行,格式為tail [參數(shù)] 文件名稱。
樣例 功能 tail -n 10 a.txt顯示文件的后 10 行 tail -f /var/log/messages查看并實時刷新,常用于日志文件
-
tr:代表 Translate,替換文本內(nèi)容中的字符,格式為tr [原始字符] [目標字符]。
樣例 功能 cat a.txt丨tr [a-z] [A-Z]把文本中的英文以全大寫輸出(經(jīng)過管道運算符)
-
wc:統(tǒng)計指定文本文件的行數(shù)-l、字數(shù)-w或字節(jié)數(shù)-c,格式為wc [參數(shù)] 文件名稱。
樣例 功能 wc -l /etc/passwd統(tǒng)計 passwd行數(shù),等價于求用戶數(shù)wc 1.txt不加參數(shù),默認三個值都返回
-
stat:查看文件的具體存儲細節(jié)和時間等信息,格式為stat 文件名稱。 -
grep:代表 Global Regular Expression Print,按行提取文本內(nèi)容,格式為grep [參數(shù)] 查詢內(nèi)容 文件名稱。
參數(shù) 功能 -b將可執(zhí)行文件 (bin) 當(dāng)作文本文件 (txt) 來搜索 -c僅顯示找到的行數(shù) -i忽略查詢內(nèi)容的大小寫 -n同時顯示行號 -v反向選擇,列出不包含查詢內(nèi)容的行
-
diff:比較多個文件之間內(nèi)容的差異,格式為diff [參數(shù)] 文件名稱A 文件名稱B。
樣例 功能 diff --brief diff_A.txt diff_B.txt僅顯示判斷結(jié)果 diff -c diff_A.txt diff_B.txt描述不同的行
-
uniq:代表 Unique,去除文本中連續(xù)的重復(fù)行,格式為uniq [參數(shù)] 文件名稱。 -
sort:對文本內(nèi)容進行再排序,格式為sort [參數(shù)] 文件名稱。
參數(shù) 功能 -f忽略大小寫 -b忽略縮進與空格 -n以數(shù)值型排序 -r反向排序 -u去除重復(fù)行 -t指定間隔符 -k按照間隔符,指定第幾列值
文件目錄管理命令
-
touch:創(chuàng)建空白文件或設(shè)置文件的時間,格式為touch [參數(shù)] 文件名稱。
樣例 功能 touch 1.txt創(chuàng)建一個空白文件 touch -d "2020-05-04 15:44" 1.txt設(shè)置文件上次修改時間
-
mkdir:代表 Make directory,創(chuàng)建空白的目錄,格式為mkdir [參數(shù)] 目錄名稱。
樣例 功能 mkdir mydir在當(dāng)前路徑下新建文件夾 mkdir -p a/b/c/d/e創(chuàng)建層疊目錄
-
cp:代表 Copy,復(fù)制文件或目錄,格式為cp [參數(shù)] 源文件名稱 目標文件名稱。
源文件 目標文件 功能 文件 目錄 把源文件復(fù)制到該目錄中 文件 文件 詢問是否要覆蓋它(需要 -i)文件 不存在 執(zhí)行正常的復(fù)制操作(如備份) 目錄 目錄 遞歸持續(xù)復(fù)制(需要 -r或-a)
-
mv:移動文件,格式為mv [參數(shù)] 源文件名稱 目標文件名稱。不同于復(fù)制操作,默認會把源文件刪除,只保留剪切后的文件。
樣例 功能 mv 1.txt 2.txt相當(dāng)于重命名文件 mv 1.txt mydir剪切到新目錄下
-
rm:刪除文件或目錄,格式為rm [參數(shù)] 文件名稱。
參數(shù) 功能 -f強制執(zhí)行,不詢問 -i刪除前詢問(默認) -r遞歸刪除目錄 -v顯示正在刪除過程
-
rmdir:刪除空目錄,格式為rmdir [參數(shù)] 目錄名稱。
樣例 功能 rmdir mydir刪除當(dāng)前路徑的空目錄 rmdir -p a/b/c刪除層疊空目錄
-
file:查看文件的類型,常用于無后綴文件,格式為file 文件名稱。
Linux 中一切皆文件,而許多文件都是沒有后綴的。
不像 Windows,用戶雙擊鼠標打開文件,此時系統(tǒng)會自行判斷用戶雙擊的文件是什么類型,因此需要有后綴進行區(qū)別。
而 Linux 系統(tǒng)則是根據(jù)用戶執(zhí)行的命令來調(diào)用文件,例如執(zhí)行 cat 命令查看文本等,所以也就不需要強制讓用戶給文件設(shè)置后綴了。
-
tar:文件進行打包壓縮或解壓,格式為tar 參數(shù) 文件名稱。
參數(shù) 功能 -c創(chuàng)建壓縮文件 -x解開壓縮文件 -t查看壓縮包內(nèi)有哪些文件 -v顯示真正壓縮或解壓的過程 -C指定解壓到的目錄