文章目錄
- 前言
- 1、Linux文件系統
- 1.1 核心特點
- 1.2 重要目錄結構
- 1.3 文件類型
- 1.4 文件和目錄的命名規則
- 1.5 文件與目錄的定位方式
- 2、查看目錄或文件的詳細信息(ls)
- 2.1 基本語法
- 2.2 常用操作
- 2.3 高級用法
- 3、切換目錄(cd)
- 3.1 常用操作
- 3.2 擴展:顯示當前工作目錄(pwd)
- 4、查看、合并文件(cat)
- 5、復制文件或目錄(cp)
- 6、移動或重命名文件/目錄(mv)
- 7、創建文件或目錄
- 7.1 創建文件(touch)
- 7.2 創建目錄(mkdir)
- 8、刪除文件或目錄
- 8.1 rm 命令的使用
- 8.2 rmdir 命令的使用
- 9、檢測文件類型(file)
前言
本篇文章從底層出發,詳細講解了Linux文件系統的結構及特點,同時介紹了許多管理文件和目錄的命令,包括ls、cd、cat、cp、touch、mkdir、file
等命令,通過學習這些命令,大家可以更好的操作并管理linux文件系統,整篇文章超10000字
,每個知識點都進行了詳細的講解并給出了操作實例,適合零基礎學習者。
環境準備:
在開始學習Linux命令前,我們首先需要準備好運行命令所需的環境,也就是安裝Linux操作系統。這里為了方便學習,我們將通過
VMware Workstation
虛擬化軟件模擬一臺Centos 7操作系統
的虛擬機,后續所有操作都將在該虛擬機上進行
安裝教程推薦:
VMware Workstation
:https://blog.csdn.net/weixin_74195551/article/details/127288338
Centos 7 操作系統
:https://blog.csdn.net/m0_74950751/article/details/128773027
安裝完成后,在桌面鼠標右鍵,打開終端,后續所有命令都是在終端運行的,若安裝的命令行界面,則直接輸入命令即可。
1、Linux文件系統
Linux 文件系統是操作系統中用于管理和組織存儲設備(如硬盤、SSD、U盤等)數據的關鍵組件。它不僅定義了文件和目錄的存儲方式,還提供了一套邏輯規則和數據結構,確保用戶和應用程序能夠高效、安全地訪問數據。
1.1 核心特點
-
單根樹形結構:所有文件和目錄以單一的根目錄(
/
)為起點,形成層次化的樹狀結構,所有文件和目錄都在根目錄(/
)下 -
統一命名空間:無論物理存儲設備如何分布,所有文件和目錄都在同一邏輯路徑下訪問,也就是通過路徑符
/
來進行訪問,如:訪問 /data/int/log ,路徑通過/
字符進行分隔 -
區分大小寫:文件名和路徑對大小寫敏感(例如 File.txt 和 file.txt 是兩個不同的文件)。
-
一切皆文件:Linux 將硬件設備、進程信息、網絡接口等抽象為文件(如 /dev/sda、/proc/cpuinfo)。
-
所有目錄均可以是掛載點 :掛載點本質就是一個目錄,只要目錄存在,未被其它文件占用,就可以作為掛載點,包括根目錄(
/
)都可以成為掛載點
Tips:
- 在Windows中所有文件和目錄都是以
盤符
為起點,如:C:\data,D:\image ;而在Linux中則是以根目錄(/
)為起點,如:/data - Linux中的
目錄
相當于Windows中的文件夾
文件
是操作系統中數據存放的最小單位
1.2 重要目錄結構
- /(根目錄):所有目錄和文件的起點。
- /root:超級用戶(
root
)的家目錄。 - /bin:存放系統基本命令(如
ls、cp
)。 - /etc:系統全局配置文件(如網絡配置、用戶賬戶)。
- /home:存放普通用戶的家目錄(每個用戶獨立子目錄)。
- /var:存放動態數據(系統服務數據、日志文件、數據庫文件、郵件等)。
- /tmp:系統臨時文件,重啟后可能被清除。
- /dev:設備文件(如硬盤
/dev/sda1
、終端/dev/tty
)。 - /proc和/sys:虛擬文件系統,提供內核和進程的實時信息,反映當前系統運行狀態。
- /usr:用戶程序和數據(如應用程序、庫文件)。
- /boot:系統啟動所需文件(內核、引導加載程序)。
- /mnt 和 /media:臨時掛載外部設備的目錄(如U盤、光盤)。
- /opt:第三方軟件的可選安裝位置。
1.3 文件類型
Linux 文件系統支持多種文件類型:
-
普通文件(Regular File):文本、二進制、圖像等數據。
-
目錄(Directory):包含其他文件或子目錄的容器。
-
符號鏈接(Symbolic Link):指向另一個文件或目錄的快捷方式。
-
設備文件(Device File):
- 塊設備(Block Device):按塊訪問的設備(如硬盤)。
- 字符設備(Character Device):按字符流訪問的設備(如鍵盤)。
-
管道(Pipe)和套接字(Socket):用于進程間通信。
-
命名管道(FIFO):類似管道,但有文件名。
1.4 文件和目錄的命名規則
1、基本規則
-
區分大小寫
- 文件名和目錄名對大小寫敏感,例如
file.txt、File.txt 和 FILE.TXT
是三個不同的文件。
- 文件名和目錄名對大小寫敏感,例如
-
允許的字符
- 可以使用字母(
A-Z、a-z
)、數字(0-9
)、下劃線(_
)、點(.
)、連字符(-
)等。 - 避免特殊字符:如
!@#$%^&*(){}[]|\;:'"<>?
等,因為它們可能在 Shell 中有特殊含義(需用引號或轉義符
)。
- 可以使用字母(
-
長度限制
- 通常最大長度為
255
字節(UTF-8 編碼下可能少于 255 個字符)。 - 完整路徑(含 /)的最大長度為
4096
字節(PATH_MAX 限制)。
- 通常最大長度為
-
不能以
/
命名/
是路徑分隔符,不能作為文件名的一部分。
2、特殊名稱
-
.
和..
.
表示當前目錄,..
表示父目錄(是每個目錄默認存在的硬鏈接)。
-
隱藏文件或目錄
- 以
.
開頭的文件或目錄(如 .bashrc)默認隱藏,需用ls -a
查看。
- 以
-
避免使用空格
- 雖然允許(如
my file.txt
),但空格在 Shell 中會被解析為參數分隔符,需用引號或轉義符(\
)處理,如下:touch "my file.txt" # 正確(使用引號包裹) touch my\ file.txt # 正確(使用反斜杠轉義)
- 雖然允許(如
3、推薦寫法
-
使用小寫字母和下劃線
例如
project_notes.txt
,避免大小寫混用導致的混淆。 -
避免特殊字符和空格
優先用
-
或_
代替空格(如 backup-2023.tar.gz)。 -
擴展名非強制要求但有用
Linux 不依賴擴展名識別文件類型(如
.txt、.sh
僅為約定),但推薦保留以便管理。
4、 禁止使用的名稱
-
系統保留名稱:如
/dev/null、/proc
等路徑下的特殊文件。 -
設備文件:避免直接命名文件為
sda、tty
等,可能與系統設備沖突。
1.5 文件與目錄的定位方式
在 Linux 中,絕對路徑和相對路徑是兩種不同的文件或目錄定位方式,它們的核心區別在于參照點不同。以下是詳細解釋和對比:
1、絕對路徑(Absolute Path)
-
定義:從文件系統的
根目錄(/)
開始的完整路徑,唯一指向目標文件或目錄。 -
特點:
- 以
/
開頭(例如/home/user/file.txt
)。 - 無論當前工作目錄在哪里,絕對路徑始終指向同一目標。
- 以
-
用途:
- 腳本或配置文件中需要明確指定文件位置時(如服務配置文件路徑)
- 跨目錄操作時避免歧義。
-
示例:
cat /etc/passwd # 直接訪問根目錄下的文件 ls /usr/local/bin # 列出絕對路徑指向的目錄內容
2、相對路徑(Relative Path)
-
定義:以
當前工作目錄(pwd)
為參照點的路徑,無需從根目錄開始。 -
特點:
- 不以
/
開頭(例如docs/report.txt
)。 - 路徑的實際含義依賴當前所在目錄。
- 不以
-
特殊符號:
.
表示當前目錄(例如./script.sh
)。
..
表示父目錄(例如../project/file.c
)。 -
用途:
- 快速訪問當前目錄附近的文件。
- 簡化命令行操作(減少長路徑輸入)。
2、查看目錄或文件的詳細信息(ls)
2.1 基本語法
語法:
ls [選項] [文件/目錄]
ls
是 Linux 中最常用的命令之一,用于列出目錄中的文件和子目錄
注意:
-
如果不指定目錄,默認列出當前目錄的內容。
-
可以指定文件或目錄名,查看特定路徑下的內容。
常用選項
選項 | 說明 |
---|---|
-a | 顯示所有文件(包括隱藏文件,以 . 開頭的文件) |
-l | 以長格式顯示詳細信息(權限、所有者、大小、修改時間等) |
-h | 與 -l 一起使用,以人類可讀的格式顯示文件大小(如 KB、MB) |
-t | 按修改時間排序(最新修改的在前) |
-r | 反向排序 |
-S | 按文件大小排序(大的在前) |
-R | 遞歸列出子目錄內容 |
-i | 顯示文件的 inode 編號 |
--color | 彩色輸出(默認啟用,目錄、文件等類型顯示不同顏色) |
2.2 常用操作
1、列出當前目錄內容
ls
2、顯示所有文件(包括隱藏文件)
ls -a
3、以長格式顯示詳細信息
ls -l
輸出示例:
-rw-r--r-- 1 user group 1024 Jan 10 10:00 file.txt # 文件
drwxr-xr-x 2 user group 4096 Jan 11 11:00 dir # 目錄
信息說明:
-
第一列:文件類型和權限(
-
表示文件,d
表示目錄)。 -
第二列:硬鏈接數。
-
第三列:所有者。
-
第四列:所屬組。
-
第五列:文件大小(默認字節)。
-
第六列:最后修改時間。
-
第七列:文件名。
4、組合選項(如 -lh 顯示易讀的文件大小)
ls -lh
輸出大小會顯示為 1.0K、2.5M 等格式。
5、按時間排序(最新修改的在前)
ls -lt
6、遞歸列出子目錄內容
ls -R
7、顯示文件的 inode 編號
ls -i
8、列出指定目錄的內容
ls /path/to/directory
9、反向排序
ls -lr
10、按文件大小排序(大的在前)
ls -lS
2.3 高級用法
1、過濾顯示特定文件(結合通配符)
ls *.txt # 列出所有 .txt 文件
ls file[1-3].* # 列出 file1.txt, file2.log 等
2、忽略某些文件(需搭配 --ignore)
ls --ignore='*.log' # 不顯示 .log 文件
3、自定義時間顯示格式(需搭配 --time-style)
ls -l --time-style="+%Y-%m-%d %H:%M:%S"
注意事項:
-
如果文件名包含空格或特殊字符,需要用引號包裹:
ls "my file.txt"
-
默認情況下,ls 輸出的顏色可能因系統配置而異。如果顏色不顯示,可以強制啟用:
ls --color=auto
通過靈活組合選項,ls
可以滿足大部分文件列表需求。如需更多幫助,可以通過 man ls
查看完整手冊。
3、切換目錄(cd)
語法:
cd [選項] [目錄路徑]
在Linux中,cd
(Change Directory)命令用于切換當前工作目錄。它是日常操作中最基礎且頻繁使用的命令之一。
3.1 常用操作
1、切換到指定目錄
-
使用絕對路徑進行切換:
cd /usr/local # 進入/usr/local目錄
-
使用相對路徑進行切換,假設當前目錄是/home/user:
cd Downloads # 進入/home/user/Downloads cd ./Documents # ./表示當前目錄(可省略)
2、返回家目錄
cd # 直接輸入cd,不加參數,默認切換為家目錄
cd ~ # ~代表用戶的家目錄
cd $HOME # 使用環境變量$HOME
3、返回上一級目錄
cd .. # 兩個點表示上一級目錄
4、返回上兩級目錄
cd ../.. # 每多一個..就再往上一級
5、切換到上一個工作目錄
cd - # 在最近使用的兩個目錄之間快速切換
6、切換到帶有空格或特殊字符的目錄
-
用引號包裹路徑或使用轉義符:
cd "My Documents" # 路徑包含空格 cd My\ Documents # 使用反斜杠轉義空格
7、常見問題解決
-
目錄不存在時
如果路徑錯誤或目錄不存在,會提示:bash: cd: no such file or directory # 檢查路徑拼寫或先用ls確認目錄是否存在。
-
權限不足
若目錄無執行權限(x
),會提示:bash: cd: permission denied # 用ls -l查看權限,并通過chmod或sudo解決。
3.2 擴展:顯示當前工作目錄(pwd)
假如當前工作目錄為: /path/data
pwd # 輸入命令后顯示: /path/data
4、查看、合并文件(cat)
cat
是 Linux 中一個常用的命令,用于查看、合并或創建文件。它的名稱來源于 concatenate(連接),但它的功能不僅限于文件連接。
1、常用方法使用示例:
-
查看文件內容
cat filename
- 這會顯示
filename
文件 的全部內容到終端。 - 示例:
cat /etc/os-release # 查看系統信息文件
- 這會顯示
-
查看多個文件
cat file1 file2
- 依次顯示
file1
和file2
的內容。 - 示例:
cat notes.txt backup.txt
- 依次顯示
-
合并文件內容并輸出到新文件
cat file1 file2 > merged_file
- 將
file1
和file2
的內容合并后寫入merged_file
(會覆蓋目標文件)。 - 示例:
cat part1.txt part2.txt > complete.txt
- 將
-
追加內容到文件
cat file1 >> file2
- 將
file1
的內容追加到file2
的末尾(不會覆蓋file2
)。 - 示例:
cat log.txt >> archive.log
- 將
-
創建新文件(或編輯小文件)
cat > newfile.txt
-
從鍵盤輸入內容,按
Ctrl+d
保存到newfile.txt
(會覆蓋已有文件)。 -
示例:
cat > greeting.txt Hello World! # 輸入內容 Ctrl+d # 保存并退出
-
-
顯示行號
cat -n filename
- 顯示文件內容并加上行號(包括空行)。
- 示例:
cat -n /etc/hosts
-
顯示非空行的行號
cat -b filename
- 只對非空行編號(類似
-n
,但忽略空行)。 - 示例:
cat -b script.sh
- 只對非空行編號(類似
-
顯示特殊字符(如制表符、換行符等)
cat -A filename
- 用
^I
表示制表符(Tab
),$
表示行尾。 - 示例:
cat -A /etc/profile
- 用
-
避免輸出中的多行空行
cat -s filename
- 將連續的空行壓縮為一行。
- 示例:
cat -s logfile.txt
-
與其他命令結合使用
- 通過管道
(|)
將cat
輸出傳遞給其他命令:cat file.txt | grep "keyword" # 搜索文件中的關鍵詞 cat file.txt | less # 分頁查看內容
- 通過管道
2、注意事項
-
大文件警告:
cat
會一次性輸出整個文件,如果文件很大(如日志文件),建議用less
或more
分頁查看:less hugefile.log
-
文件覆蓋風險:
>
會覆蓋目標文件,使用前請確認。
總結:
cat
的核心功能是快速查看、合并或創建小文件。對于復雜操作(如編輯、分頁),建議結合其他工具(如 less、vim 或 grep
)。
5、復制文件或目錄(cp)
1、基礎語法
cp
是 Linux 中用于復制文件或目錄的基本命令,語法如下:
cp [選項] 源文件 目標文件
cp [選項] 源文件... 目標目錄
2、基本用法
-
復制文件到目標文件(重命名):
cp file1.txt file2.txt # 將 file1.txt 復制為 file2.txt
-
復制文件到目錄:
cp file1.txt /path/to/directory/ # 將 file1.txt 復制到指定目錄
-
復制多個文件到目錄:
cp file1.txt file2.txt /path/to/directory/ # 復制多個文件到目錄
2、常用選項
選項 | 說明 |
---|---|
-r 或 -R | 遞歸復制目錄(用于復制文件夾) |
-i | 覆蓋前提示確認(交互模式) |
-f | 強制覆蓋,不提示(慎用) |
-v | 顯示復制過程的詳細信息 |
-u | 僅當源文件比目標文件新時復制(更新) |
-p | 保留原文件的屬性(權限、時間戳等) |
-a | 歸檔模式(相當于 -rp ,保留所有屬性) |
3、常用方法使用示例
-
遞歸復制目錄:
cp -r dir1/ dir2/ # 將 dir1 目錄及其內容復制到 dir2
-
交互式復制(覆蓋前詢問):
cp -i file1.txt /path/to/directory/
-
保留文件屬性:
cp -p file1.txt /backup/ # 保留權限、時間戳等
-
僅更新新文件:
cp -u *.txt /backup/ # 僅將目標目錄中沒有的文件復制進去
4、注意事項
-
如果目標文件已存在,
cp
會默認覆蓋(除非使用-i
選項)。 -
復制目錄時必須加
-r
或-a
。 -
使用
-a
可以完整保留文件屬性(適合備份)。
5、高級用法
-
通配符復制:
cp *.jpg /path/to/images/ # 復制所有 .jpg 文件
-
復制到當前目錄:
cp /path/to/file1.txt . # 目標 `.` 表示當前目錄
示例完整命令:
cp -av source_dir/ backup_dir/ # 遞歸復制并保留所有屬性,顯示詳細信息
通過靈活組合選項,可以滿足不同場景的復制需求。
6、移動或重命名文件/目錄(mv)
1、基本語法
mv
命令是 Linux 中用于移動或重命名文件/目錄的基本命令,其名稱來源于 “move”。語法如下:
mv [選項] 源文件或目錄 目標文件或目錄
常用選項:
選項 | 作用 |
---|---|
-i | 覆蓋前提示確認 |
-n | 禁止覆蓋已存在文件 |
-f | 強制覆蓋,不提示 |
-v | 顯示操作詳情 |
-u | 僅在源文件比目標新時移動 |
2、常用方法使用實例
-
移動文件/目錄
mv file.txt /path/to/destination/ # 將文件移動到目標目錄 mv dir1 /path/to/destination/ # 將目錄移動到目標目錄
-
重命名文件/目錄
mv oldname.txt newname.txt # 重命名文件 mv olddir newdir # 重命名目錄
-
移動多個文件到目錄
mv file1.txt file2.txt /target/dir/ # 移動多個文件到目標目錄
-
覆蓋文件時的提示
-
默認情況下,
mv
會直接覆蓋已存在的目標文件。 -
使用
-i
(交互模式)會在覆蓋前提示確認:mv -i file.txt existing_file.txt
-
-
禁止覆蓋(安全模式)
mv -n file.txt existing_file.txt # 如果目標存在,則不移動
-
強制覆蓋(忽略提示)
mv -f file.txt /target/ # 強制覆蓋,不詢問
-
顯示詳細操作(調試)
mv -v file.txt /target/ # 顯示移動的詳細信息
3、注意事項
-
權限問題:需要有對源文件的讀取權限和目標目錄的寫入權限。
-
跨設備移動:如果目標在另一設備(如U盤),
mv
實際是復制+刪除,速度較慢。 -
符號鏈接:移動符號鏈接時,默認移動鏈接本身(而非指向的文件)。
通過靈活組合選項和參數,mv
可以高效管理文件位置和名稱。使用前建議用 ls
確認路徑,避免誤操作。
7、創建文件或目錄
7.1 創建文件(touch)
1、基本語法
在 Linux 中,
touch
命令主要用于創建空文件或更新文件的時間戳(訪問時間和修改時間)。語法格式如下:
touch [選項] 文件名...
常用選項:
選項 | 說明 |
---|---|
-a | 僅更新訪問時間(atime) |
-m | 僅更新修改時間(mtime) |
-c | 不創建新文件(若文件不存在) |
-t | 指定時間戳(格式:[[CC]YY]MMDDhhmm[.ss]) |
-r | 使用參考文件的時間戳 |
-d | 使用字符串描述時間(如 touch -d “2024-01-01” file.txt) |
2、常用方法使用示例
-
創建一個空文件
touch file.txt
如果
file.txt
不存在,則會創建一個空文件;如果已存在,則會更新其時間戳(默認為當前時間)。 -
同時創建多個文件
touch file1.txt file2.txt file3.txt
-
強制不創建新文件(僅更新時間戳)
touch -c non_existent_file.txt
如果文件不存在,
-c
(或--no-create
)選項會避免創建新文件。 -
指定時間戳(而非當前時間)
touch -t 202401011200 file.txt
-t
后接時間格式:[[CC]YY]MMDDhhmm[.ss]
(例如:202401011200
表示2024 年 1 月 1 日 12:00:00
)。 -
使用參考文件的時間戳
touch -r reference_file.txt target_file.txt
-r
(或--reference
)將target_file.txt
的時間戳設置為與reference_file.txt
相同。 -
僅更新訪問時間(atime)或修改時間(mtime)
touch -a file.txt # 只更新訪問時間 touch -m file.txt # 只更新修改時間
3、注意事項
-
如果文件名包含空格或特殊字符,需用引號包裹:
touch "my file.txt"
-
需要權限:對目標目錄有寫入權限才能創建文件。
通過靈活組合選項,touch
可以高效管理文件的時間戳或快速創建空文件。
7.2 創建目錄(mkdir)
1、基本語法
mkdir
是 Linux 中用于創建目錄(文件夾)的命令,語法格式如下:
mkdir [選項] 目錄名
常用選項:
選項 | 作用 |
---|---|
-p | 遞歸創建多級目錄 |
-m | 設置權限(如 755、644) |
-v | 顯示操作詳情 |
2、常用方法使用示例
-
創建單個目錄
mkdir dir1
會在當前目錄下創建名為
dir1
的文件夾。 -
同時創建多個目錄
mkdir dir1 dir2 dir3
一次性創建多個同級目錄。
-
創建嵌套目錄(遞歸創建)
mkdir -p parent/child/grandchild
-p
選項會自動創建路徑中所有不存在的父目錄。 -
設置目錄權限(創建時指定權限)
mkdir -m 755 mydir
-m
選項直接設置目錄權限(此處 755 表示所有者可讀/寫/執行,其他用戶可讀/執行)。 -
顯示創建過程(verbose 模式)
mkdir -v dir1 dir2
-v
選項會輸出每個目錄的創建信息。
3、常見問題解決
-
目錄已存在時報錯:
使用-p
選項可忽略此錯誤(不會覆蓋原有目錄)。 -
權限不足:
確保對目標路徑有寫入權限,或用sudo
提權:sudo mkdir /protected_path/newdir
8、刪除文件或目錄
8.1 rm 命令的使用
rm
是 Linux 中用于刪除文件或目錄的命令,使用時需謹慎,因為刪除后通常無法恢復。
1、基本語法
rm [選項] 文件或目錄名
常用選項:
選項 | 作用 |
---|---|
-f | 強制刪除(忽略不存在的文件,不提示確認) |
-i | 刪除前逐一詢問確認(交互式) |
-r 或 -R | 遞歸刪除目錄及其內容(用于刪除目錄) |
-v | 顯示刪除的詳細過程 |
--help | 查看幫助信息 |
--version | 顯示版本信息 |
2、常用方法使用示例
-
刪除單個文件
rm file.txt
-
強制刪除文件(無警告)
rm -f file.txt
-
交互式刪除(逐個確認)
rm -i file1.txt file2.txt
-
刪除目錄(遞歸刪除)
rm -r mydir/
-
強制遞歸刪除目錄(慎用!)
rm -rf mydir/
-
*刪除多個文件(通配符 )
rm *.log # 刪除所有 .log 文件
-
顯示刪除過程(verbose)
rm -v old_*
3、危險操作警告
-
rm -rf /
或rm -rf /*
這會強制刪除根目錄下的所有文件(系統毀滅性操作!),現代系統通常會有保護機制,但仍需絕對避免。 -
無備份刪除重要數據
建議先使用mv
命令將文件移到臨時目錄,確認無影響后再徹底刪除。
4、注意事項
-
權限問題: 刪除文件需對所在目錄有寫權限。
-
隱藏文件: 通配符
*
不匹配以.
開頭的隱藏文件,需顯式指定(如rm -r .*
需謹慎)。
建議在使用 rm -r
前先用 ls
確認目標文件/目錄,避免誤刪。
8.2 rmdir 命令的使用
rmdir
是 Linux 中用于刪除空目錄的命令
1、基本語法
rmdir [選項] 目錄名
常用選項:
選項 | 描述 |
---|---|
-p | 遞歸刪除父目錄(如果它們為空)。 |
--ignore-fail-on-non-empty | 忽略因目錄非空導致的錯誤(不報錯,但仍不會刪除)。 |
-v | 顯示操作詳情(verbose 模式)。 |
2、常用方法使用示例:
-
刪除單個空目錄
rmdir mydir
僅當
mydir
為空時才會刪除。 -
遞歸刪除空目錄
若目錄結構為parent/child
,且兩者均為空:rmdir -p parent/child
會先刪除
child
,再刪除parent
(如果父目錄也變為空)。 -
忽略非空目錄的錯誤
rmdir --ignore-fail-on-non-empty mydir
如果
mydir
非空,命令會靜默退出,不會報錯。 -
顯示操作詳情
rmdir -v mydir
輸出:
rmdir: removing directory 'mydir'
3、注意事項
-
僅能刪除空目錄
如果目錄中有文件或其他子目錄,rmdir
會報錯:rmdir: failed to remove 'mydir': Directory not empty
此時需用
rm -r 目錄名
強制遞歸刪除(謹慎使用!)。 -
路徑中的父目錄必須存在
例如rmdir a/b/c
要求a/b
存在,否則會報錯。 -
與
rm -r
的區別-
rmdir
:安全,只刪空目錄。 -
rm -r
:危險,遞歸刪除目錄及所有內容(無確認提示!)。
-
4、適用場景
-
在腳本中安全刪除空目錄(避免誤刪數據)。
-
清理空的日志或臨時目錄結構。
如果需要刪除非空目錄,請改用:
rm -r 目錄名 # 謹慎操作!數據不可恢復!
9、檢測文件類型(file)
file
命令是 Linux 中用于檢測文件類型的實用工具,它會根據文件內容(而非文件擴展名)判斷文件類型。
1、基本語法
file [選項] 文件名
常用選項:
選項 | 作用 |
---|---|
-b | 簡潔輸出(不顯示文件名) |
-i | 輸出 MIME 類型 |
-L | 跟隨軟鏈接 |
-f <文件> | 從文件中讀取待檢測的文件名列表 |
-k | 不停止在第一個匹配結果(繼續檢測更多可能類型) |
-z | 嘗試檢測壓縮文件內部內容 |
2、常用方法使用示例
-
檢測單個文件類型
file /bin/ls
輸出示例:
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, stripped
-
檢測多個文件類型
file file1.txt file2.jpg
-
檢測目錄下所有文件類型
file *
-
顯示更詳細的輸出(-i 選項)
輸出文件的
MIME
類型:file -i filename
示例輸出:
filename: text/plain; charset=utf-8
-
不壓縮軟鏈接(-L 選項)
直接檢測鏈接指向的文件類型:file -L /path/to/symlink
-
從標準輸入讀取文件(-f 選項)
通過列表文件批量檢測:file -f file_list.txt # file_list.txt文件中存放著要檢測的文件名,一行一個文件名
3、高級用法
-
檢測壓縮文件內容:
file -z backup.tar.gz
-
僅輸出匹配的文本描述(結合 grep):
file * | grep "text"
4、原理說明
file
命令通過以下步驟判斷文件類型:
-
檢查文件的
magic number
(如ELF 頭
、PNG 頭
等)。 -
若無特殊標識,則分析文件內容(如文本編碼、可讀字符比例等)。
-
結合
/usr/share/misc/magic
或/etc/magic
中的規則庫進行匹配。
通過靈活使用 file
命令,你可以快速識別未知文件的類型,尤其在處理無擴展名文件時非常有用。