『Linux 干貨』#1 終端與Shell(簡明)

訪問博客查看 本文 排版更美觀ヾ(?ω?`)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ā)行版本。

常見的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)鍵詞,如 ?linux
q 退出幫助文檔

常用系統(tǒng)工作命令

  • echo:輸出字符串變量提取后的值,格式為 echo [字符串] [$變量]
樣例 功能
echo 'hello world' 輸出一個字符串參數(shù),hello world
echo hello world 輸出兩個空格隔開的字符串參數(shù),helloworld
echo hello\ world 輸出一個字符串參數(shù),\ 轉(zhuǎn)義空格
echo $PATH 輸出環(huán)境變量 PATH 的提取值
  • date:顯示或設(shè)置系統(tǒng)的時間與日期,格式為:date [+指定的格式]。
樣例 功能
date 顯示 Sat Sep 5 09:13:45 CST 2020
date "+%Y-%m-%d %H:%M:%S" 按格式顯示 2020-09-05 09:14:35
date -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 指定解壓到的目錄
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容