本文整理了Linux系統中最常用的基礎命令,每個命令都配有詳細說明和具體示例,幫助你快速掌握Linux操作技巧。文章中用的終端是XShell,系統是Centos
📁 1. ls - 列出目錄(文件夾)內容
功能:顯示當前目錄下的文件和子目錄信息
常用選項:
-a
:顯示隱藏文件(以.
開頭的文件)-l
:詳細信息格式(權限/所有者/大小等)-F
:用符號標記文件類型(*/@/=
等)
$ ls# 列出當前目錄內容
file.txtdir$ ls -a# 顯示所有文件(含隱藏文件)
....hiddenfile.txt$ ls -lF# 詳細格式并標記類型
-rw-r--r-- 1 user group 0 Jan 12 file.txt*
drwxr-xr-x 2 user group 4096 Jan 12 dir/
圖片中出現ls -l
的輸出:
每個字段的含義:
字段位置 | 含義說明 | 示例解釋 |
---|---|---|
第1位 | 文件類型 | - :普通文件;d :目錄;l :符號鏈接;b :塊設備(如硬盤) |
第2-10位 | 權限位(3組) | 每組3位,對應所有者(u)、組(g)、**其他用戶(o)**的權限:r (讀,4)、w (寫,2)、x (執行,1)示例 rw-r--r-- :- 所有者:讀+寫(rw-) - 組用戶:讀(r–) - 其他用戶:讀(r–) |
第11位 | 硬鏈接數 | 1 :該文件有1個硬鏈接(可理解為“引用計數”) |
第12位 | 所有者 | user :文件所屬用戶 |
第13位 | 所屬組 | group :文件所屬用戶組 |
第14位 | 文件大小 | 1024 :字節(加-h 選項顯示為1K ,更易讀) |
第15-17位 | 修改時間 | Jan 12 14:30 :文件最后修改時間 |
第18位起 | 文件名/目錄名 | file.txt :文件名;dir/ :目錄(-F 選項標記) |
注意:這些都屬于文件的屬性信息
文件 = 文件的內容 + 文件的屬性
所以就比如在windows上新建一個空文件,并不是真的不占磁盤空間
📍 2. pwd - 顯示當前路徑
功能:打印當前工作目錄的絕對路徑
$ pwd
/home/user/documents
📂 3. cd - 切換目錄
功能:更改當前工作目錄
特殊路徑:
..
:上級目錄~
:用戶家目錄-
:返回上次目錄
語法:cd 目錄名
$ cd /var/log# 切換到絕對路徑
$ cd ..# 返回上級目錄
$ cd ~/downloads # 進入家目錄的downloads
$ cd -# 返回上次所在目錄
cd 可以理解為我們的鼠標的那個箭頭,cd 某個目錄就可以進入到這個目錄里
補充:路徑的認識
Linux系統中,磁盤上的文件和目錄被組成?棵目錄樹,每個節點都是目錄或文件
? 其中普通文件?定是目錄樹的葉子節點
? 目錄可能是葉子(空目錄), 也可能是路上節點
? 理解路徑存在的意義: 樹狀組織方式,都是為了保證快速定位查找到指定的文件,而定位文件就需要具有唯?性的方案來進行定位文件。其中任何?個節點,都只有?個父節點,所以,從根目錄開始,定位指定文件,路徑具有唯?性
? 絕對路徑:?般從/開始,不依賴其他目錄的定位文件的方式
? 相對路徑:相對于當前用戶所處目錄,定位文件的路徑方式
? 絕對路徑?般不會隨著用戶的路徑變化而喪失唯?性,?般在特定服務的配置文件中經常被使用
? 相對路徑因為它的便捷性,?般在命令行中使用較多
如圖,退到根目錄就無法再退了
$ tree //查看當前樹目錄結構
//系統默認是沒有的,需要安裝
centos:yum install -y tree
ubuntu: apt install -y tree
如果遇到文件很多刷屏停不下來就按 ctrl + c,隨便一說 clear 這個指令可以清屏
?? 4. touch - 創建空文件/更新時間戳
功能:
- 創建新文件
- 更新文件訪問/修改時間
語法:touch [選項]… 文件…
$ touch newfile.txt# 創建空文件
$ touch -a file.txt# 只更新訪問時間
$ touch -m file.txt# 只更新修改時間
📂 5. mkdir - 創建目錄
語法:mkdir [選項] dirname…
功能:在當前目錄下創建一個名為 “dirname”的目錄
選項:-p
:遞歸創建多級目錄
$ mkdir new_dir# 創建單級目錄
$ mkdir -p a/b/c/d# 創建多級目錄
目錄結構:
a/
└── b/
└── c/
└── d/
🗑? 6. rmdir & rm - 刪除文件/目錄
rmdir:刪除空目錄
$ rmdir empty_dir# 刪除空目錄
$ rmdir -p a/b/c# 遞歸刪除空目錄
rm:刪除文件/目錄
選項:
-r
:遞歸刪除-f
:強制刪除-i
:交互確認
$ rm file.txt# 刪除文件
$ rm -r mydir# 遞歸刪除目錄
$ rm -ri dir# 交互式遞歸刪除
📚 7. man - 查看幫助手冊
功能:查看命令/系統調用的文檔
章節:
1
:普通命令2
:系統調用3
:庫函數
$ man ls# 查看ls命令幫助
$ man 2 fork# 查看fork系統調用
$ man 3 printf# 查看C庫函數printf
man手冊有九章(不同系統可能會有差別)
📄 8. cp - 復制文件/目錄
語法:cp [選項] 源文件或目錄 目標文件或目錄
選項:
-r
:遞歸復制目錄-i
:覆蓋前確認-f
:強制覆蓋
cp指令用于復制文件或目錄
如同時指定兩個以上的文件或目錄,且最后的目的地是?個已經存在的目錄,則它會把前面指定的所有文件或目錄復制到此目錄中
$ cp file.txt file_backup.txt# 復制文件
$ cp *.txt target_dir/# 復制所有txt文件
$ cp -r dir new_dir# 遞歸復制目錄
理論補充:
Linux"一切皆文件",該理論將系統中的 設備(如鍵盤、顯示器與普通文件統一抽象為文件對象,通過文件操作(讀/寫)實現設備交互。具體來說:
向顯示器打印內容 → 向 顯示器文件(標準輸出,stdout)寫入數據;
從鍵盤讀取輸入 → 從 鍵盤文件(標準輸入,stdin)讀取數據。
圖片通過多個Linux命令示例,展示了"一切皆文件"理論的實際應用,以及輸入/輸出重定向的使用場景:
1. 標準輸出:直接向顯示器文件寫入
- 示例1:
echo "hello world"
作用:將字符串"hello 你好"輸出到顯示器(標準輸出stdout)。
邏輯:對應理論中"向顯示器文件寫入"的操作。- 示例2:
printf "hello world, %d, %f\n" 3 3.14
作用:格式化輸出字符串(%d表示整數,%f表示浮點數),結果為hello world, 3, 3.140000
。
邏輯:與echo類似,均向顯示器文件寫入數據,但printf支持更靈活的格式控制。
2. 輸出重定向:改變寫入目標(從顯示器到文件)
Linux中用**>
(覆蓋寫入)和>>
**(追加寫入)實現輸出重定向,將原本應輸出到顯示器的內容寫入指定文件。- 示例3:覆蓋寫入(>)
命令:echo "hello world" > myfile.txt
作用:將"hello 你好"寫入myfile.txt
文件(而非顯示器)。
關鍵特性:先清空文件再寫入(圖片注釋:“寫入的時候,都是先清空再寫!!”)。
驗證:-ls -l
:查看文件列表,顯示myfile.txt
的大小為12字節(包含字符串和換行符);-cat myfile.txt
:查看文件內容,確認"hello world"已寫入。- 示例4:清空文件(>)
命令:> myfile.txt
作用:直接用>
重定向符清空myfile.txt
(無源內容時,>
會截斷文件)。
驗證:-ls -l
:顯示myfile.txt
大小為0字節;-cat myfile.txt
:無輸出(文件為空)。- 示例5:追加寫入(>>)
命令:echo "aaaaaaaaaaaaaabbbb" >> myfile.txt
作用:將字符串追加到hello.txt
末尾(不清空原有內容)。
驗證:-cat myfile.txt
:顯示兩行相同的字符串(首次追加+再次執行命令的結果),說明 >>保留原有內容(圖片注釋:“追加重定向!!”)。
3. 輸入重定向:改變讀取來源(從鍵盤到文件)
Linux中用<
實現輸入重定向,將命令的輸入源從鍵盤(標準輸入stdin)改為指定文件。- 示例6:
cat < myfile.txt
作用:將hello.txt
作為cat
命令的輸入,顯示文件內容(等同于直接執行cat hello.txt
)。
邏輯:對應理論中"從文件讀取數據"的操作,替代了從鍵盤輸入的默認行為(圖片注釋:“輸入重定向!!”)。
🚚 9. mv - 移動/重命名
語法:mv [選項] 源文件或目錄 目標文件或目錄
功能:
- 移動文件/目錄
- 重命名文件/目錄
$ mv file.txt new_name.txt# 重命名
$ mv file.txt dir/# 移動到目錄
$ mv dir1/ dir2/# 移動目錄
📖 10. cat - 查看文件內容
語法:cat [選項] [文件]
選項:
-n
:顯示行號-b
:非空行編號-s
:壓縮連續空行
$ cat file.txt# 顯示文件內容
$ cat -n file.txt# 顯示行號
$ cat -s file.txt# 壓縮連續空行
🔍 11. more/less - 分頁查看
more:向下分頁查看
語法:more [選項]
選項:
- -n 指定輸出行數
- q 退出more
$ more -10 large_file.log# 每次顯示10行
less:交互式查看(支持上下翻頁)
語法:less [參數] 文件
選項:
- -i 忽略搜索時的大小寫
- -N 顯示每行的行號
- /字符串:向下搜索“字符串”的功能
- ?字符串:向上搜索“字符串”的功能
- n:重復前?個搜索(與 / 或 ? 有關)
- N:反向重復前?個搜索(與 / 或 ? 有關)
- q:quit
$ less large_file.log
# 在less中:
#/keyword → 向下搜索
#?keyword → 向上搜索
#q → 退出
🔝 12. head/tail - 查看文件首尾
head:顯示文件開頭
語法:head [參數]… [文件]…
選項:
- -n<行數> 顯示的行數
$ head -5 file.txt# 顯示前5行
tail:顯示文件結尾
語法:tail 必要參數 [文件]
選項
- -f 循環讀取
- -n<行數> 顯示行數
$ tail -5 file.txt# 顯示最后5行
$ tail -f log.txt# 實時追蹤日志變化
那假設現在我有100行內容,我要求打印第50到60行該怎么辦呢?(沒有直接打印中間行的內容的命令)
補充知識:
管道命令(|): 圖片中常出現命令1 | 命令2
的組合,功能是將前一個命令的輸出作為后一個命令的輸入,實現更復雜的操作。
高頻示例(圖片中的常見場景):
- 過濾文件:列出當前目錄所有
.txt
文件(結合ls
和grep
)
$ ls -l | grep ".txt"# 用grep過濾出包含".txt"的行
-rw-r--r-- 1 user group 1.0K Jan 12 14:30 file.txt
-rw-r--r-- 1 user group 2.0K Jan 12 14:30 data.txt
- 統計日志行數:統計
log.txt
中包含“error”的行數(結合cat
、grep
、wc
)
$ cat log.txt | grep "error" | wc -l# wc -l統計行數
5# 表示有5行包含"error"
- 查找并處理文件:找到所有
.sh
腳本并顯示其內容(結合find
和cat
)
$ find . -name "*.sh" | xargs cat# xargs將find結果作為cat的輸入
通過管道我們就可以實現各種流水線操作了
? 13. date - 顯示/設置時間
格式控制:
%Y
:年(2023)%m
:月(01-12)%d
:日(01-31)%H
:小時(00-23)
$ date# 默認格式
Wed Jan 11 18:22:50 CST 2023$ date +"%Y-%m-%d %H:%M"# 自定義格式
2023-01-11 18:30$ date -d @1673432636# 時間戳轉時間
Wed Jan 11 18:23:56 CST 2023
補充知識:
時間戳
時間戳(Timestamp)是表示時間的數字格式,通常指從某個基準時間點到當前時間的總時長(單位:秒、毫秒、微秒等)。它是計算機系統中處理時間的核心方式,具有跨時區、易計算、格式統一的優勢。
一、核心概念
1. 基準時間點(Epoch Time)
最常用的基準是Unix時間戳的起點:
1970年1月1日00:00:00 UTC(協調世界時,即格林尼治標準時間GMT)。
所有Unix/Linux系統均以該時間點為起點計算時間戳。
2. 時間戳的類型
- 秒級時間戳(最常見):從Epoch到當前的總秒數(如
1721487600
,對應2024-07-20 19:00:00 UTC)。 - 毫秒級時間戳:秒級時間戳+3位毫秒(如
1721487600123
,對應2024-07-20 19:00:00.123 UTC)。 - 微秒級時間戳:秒級時間戳+6位微秒(如
1721487600123456
,對應2024-07-20 19:00:00.123456 UTC)。
二、Linux中生成與轉換時間戳
Linux中最常用的工具是date
命令(GNU版本,支持豐富的時間格式),以下是關鍵操作:
1. 生成當前時間戳
- 秒級時間戳(
%s
):
date +%s
# 輸出示例:1721487600
- 毫秒級時間戳(
%s%3N
,%3N
表示取3位毫秒):
date +%s%3N
# 輸出示例:1721487600123
- 微秒級時間戳(
%s%6N
,%6N
表示取6位微秒):
date +%s%6N
# 輸出示例:1721487600123456
2. 將時間戳轉換為可讀時間
用date -d @<時間戳>
(@
后跟秒級時間戳),會自動轉換為系統時區的本地時間(如北京時間UTC+8)。
- 示例1:轉換秒級時間戳:
date -d @1721487600
# 輸出示例(北京時間):Sat Jul 20 19:00:00 CST 2024
- 示例2:轉換為指定格式(如
YYYY-MM-DD HH:MM:SS
):
date -d @1721487600 +"%Y-%m-%d %H:%M:%S"
# 輸出示例:2024-07-20 19:00:00
3. 生成指定時間的時間戳
用date -d "<指定時間>" +%s
,將可讀時間轉換為秒級時間戳。
- 示例1:轉換當前日期的指定時間:
date -d "2024-07-20 19:00:00" +%s
# 輸出示例:1721487600
- 示例2:轉換相對時間(如“3天前”):
date -d "3 days ago" +%s
# 輸出3天前的秒級時間戳
📅 14. cal - 顯示日歷
語法:cal 參數 [年份]
選項:
-3
:顯示上月/本月/下月-y
:顯示全年日歷
$ cal# 本月日歷
$ cal -3# 三個月日歷
$ cal 2023# 2023全年日歷
🔎 15. find - 文件搜索
語法:find pathname -options
選項:
- -name 按照文件名查找文件
- …
示例:按名稱/類型搜索
$ find /home -name "*.txt"# 搜索所有txt文件
$ find . -type d -name "dir*"# 搜索目錄
🔍 16. which/whereis - 查找命令路徑
which:查找可執行文件位置
$ which ls
/usr/bin/ls
還記得之前說的Linux下“一切皆文件”嗎?
是的,我們未來學的大部分指令本質都是Linux系統下固定目錄下(/usr/bin/)的可執行文件
值得注意的是:我們自己寫的可執行程序是無法像指令通過名字直接使用的,除非把文件寫道/usr/bin/ 目錄下,但是不建議這么做,會污染系統的命名池
whereis:查找二進制/源碼/手冊
$ whereis python
python: /usr/bin/python /usr/lib/python2.7 /usr/include/python2.7
? 17. alias - 命令別名
功能:創建命令快捷方式
$ alias ll='ls -alF'# 創建別名
$ ll# 使用別名
$ unalias ll# 刪除別名
注意:別名是內存級的,重新登入別名就沒用了
🔍 18. grep - 文本搜索
語法: grep [選項] 搜尋字符串 文件
選項:
-i
:忽略大小寫-n
:顯示行號-v
:反向匹配
$ grep "error" log.txt# 搜索包含error的行
$ grep -i "warning" log.txt# 忽略大小寫
$ grep -n "start" config.conf# 顯示行號
📦 19. tar - 打包壓縮
語法: tar [-cxtzjvf] 文件與目錄 …
參數:
- -c :建立?個壓縮文件的參數指令(create 的意思);
- -x :解開?個壓縮文件的參數指令!
- -t :查看 tarfile 里面的文件!
- -z :是否同時具有 gzip 的屬性?亦即是否需要用 gzip 壓縮?
- -j :是否同時具有 bzip2 的屬性?亦即是否需要用 bzip2 壓縮?
- -v :壓縮的過程中顯示文件!這個常用,但不建議用在背景執行過程!
- -f :使?檔名,請留意,在 f 之后要立即接檔名喔!不要再加參數!
- -C : 解壓到指定目錄
常用組合:
- 打包:
tar -cvf archive.tar dir/
- 解包:
tar -xvf archive.tar
- 壓縮:
tar -zcvf archive.tar.gz dir/
- 解壓:
tar -zxvf archive.tar.gz
$ tar -czvf backup.tar.gz /home# 壓縮目錄
$ tar -tzvf backup.tar.gz# 查看壓縮包內容
$ tar -xzvf backup.tar.gz -C restore/# 解壓到指定目錄
后綴可以簡寫成
.tgz
20.zip/unzip
語法: zip 壓縮?件.zip 目錄或文件
功能:將目錄或文件壓縮成zip格式
選項:
- -r:遞歸處理,將指定目錄下的所有文件和子目錄?并處理
將test2?錄壓縮: zip test2.zip test2/*
解壓到tmp?錄: unzip test2.zip -d /tmp
21. rzsz
rzsz
是Linux/Unix系統中輕量級文件傳輸工具集,基于Zmodem協議(一種可靠的異步文件傳輸協議),用于通過終端會話(如SSH、串口)實現本地與遠程服務器之間的文件上傳(rz
)和下載(sz
)。它無需額外安裝FTP/SCP服務,操作簡單,是系統管理員和開發者常用的小文件傳輸工具。
一、核心概念
- 協議基礎:Zmodem協議,支持斷點續傳、錯誤校驗、高速傳輸(比早期的Xmodem/Ymodem更高效)。
- 核心命令:
rz
(Receive Zmodem):本地→遠程(從本地計算機上傳文件到遠程服務器);sz
(Send Zmodem):遠程→本地(從遠程服務器下載文件到本地計算機)。
二、安裝方法
rzsz
通常需要手動安裝(部分Linux發行版默認不包含),以下是常見發行版的安裝命令:
- Ubuntu/Debian:
sudo apt update && sudo apt install lrzsz
- CentOS/RHEL(7及以下):
sudo yum install lrzsz
- CentOS/RHEL 8+/Fedora:
sudo dnf install lrzsz
三、常用命令及示例
1. 上傳文件(rz
)
作用:從本地計算機選擇文件,上傳到遠程服務器的當前目錄。
基本用法:
rz
運行效果:本地終端會彈出文件選擇窗口(需終端支持,如PuTTY、Xshell、Terminal),選擇要上傳的文件后,自動開始傳輸。
常用參數:
-b
:二進制模式(必選,用于傳輸非文本文件,如圖片、壓縮包、可執行文件,避免文件損壞);-y
:覆蓋模式(若遠程服務器已存在同名文件,直接覆蓋,無需確認);-e
:強制Zmodem協議(用于兼容性問題,如終端未自動識別Zmodem)。
示例(二進制模式上傳,覆蓋現有文件):
rz -b -y
2. 下載文件(sz
)
作用:從遠程服務器選擇文件/目錄,下載到本地計算機的指定路徑。
基本用法(下載單個文件):
sz 文件名
下載目錄(需遞歸):
sz -r 目錄名# -r:遞歸傳輸目錄下的所有文件
運行效果:本地終端會彈出保存路徑窗口,選擇保存位置后,自動開始傳輸。
常用參數:
-b
:二進制模式(同rz
,傳輸非文本文件必選);-y
:覆蓋模式(覆蓋本地已存在的同名文件);-r
:遞歸傳輸目錄(下載目錄時必選)。
示例(二進制模式下載目錄,覆蓋本地文件):
sz -b -y -r /home/user/docs# 下載遠程服務器的docs目錄到本地
四、注意事項
-
終端支持:
rzsz
依賴支持Zmodem協議的終端,常見終端如:
-Windows:PuTTY(需開啟“Connection→SSH→Zmodem”選項)、Xshell、SecureCRT;
-macOS:Terminal(默認支持)、iTerm2;
-Linux:GNOME Terminal(默認支持)、Konsole。
若終端不支持Zmodem,rzsz
無法彈出文件選擇窗口,需用rz -e
或sz -e
強制使用,并通過命令行指定文件(但不推薦)。 -
傳輸模式:
- 文本文件(如
.txt
、.conf
):可使用默認的ASCII模式(無需-b
); - 非文本文件(如
.zip
、.jpg
、.exe
):必須使用二進制模式(-b
參數),否則會導致文件損壞(如圖片無法打開、壓縮包無法解壓)。
- 權限問題:
- 上傳文件時,遠程服務器的當前目錄需有寫入權限(如
chmod 777 /tmp
); - 下載文件時,本地計算機的保存路徑需有寫入權限(如
~/Downloads
目錄通常有寫入權限)。
-
斷點續傳:
Zmodem協議支持斷點續傳,若傳輸中斷(如網絡斷開),重新運行rz
或sz
,會自動續傳未完成的部分(需終端支持)。 -
文件名編碼:
若文件名包含中文或特殊字符,需確保終端的編碼設置正確(如UTF-8),否則可能出現文件名亂碼(如??-?–?.txt
)。解決方法:在終端中設置編碼為UTF-8(如PuTTY的“Window→Translation→Remote character set”選擇“UTF-8”)。
22. bc指令
bc
是Linux系統中用于浮點運算的便捷工具,支持高精度的數學計算(如加減乘除、平方根、指數等),常用于需要精確浮點結果的場景(如腳本中的數值處理)。
23. uname命令
- 語法:
uname [選項]
- 功能:獲取操作系統及硬件的基本信息(如內核版本、主機名、硬件類型等)。
- 補充說明:可顯示Linux主機的操作系統版本、硬件名稱等關鍵信息。
- 常用選項:
-a
/--all
:詳細輸出所有信息,依次為:內核名→主機名→內核版本號→內核版本→硬件名→處理器類型→硬件平臺類型→操作系統名稱(最常用)。
24. 重要熱鍵
- [Tab]:具有命令補全(輸入命令前綴后按Tab,自動補全完整命令)和檔案補齊(輸入文件/目錄前綴后按Tab,自動補全路徑)功能,提升操作效率。
- [Ctrl]-c:強制停止當前運行的程序(如終止陷入死循環的腳本)。
- [Ctrl]-d:表示鍵盤輸入結束(EOF,End Of File),常用于退出交互程序(如代替
exit
命令退出Shell)。
25. 關機命令(shutdown)
- 語法:
shutdown [選項]
- 常見選項:
-h
:停止所有系統服務后,立即關機(等價于halt
)。-r
:停止所有系統服務后,重新啟動(等價于reboot
)。-t sec
:延遲sec
秒后執行關機/重啟操作(如shutdown -t 60 -h
表示60秒后關機)。
掌握這些基礎命令后,你已具備Linux日常操作的必備技能。建議在終端中實際嘗試每個示例,實踐是鞏固知識的最佳方式!