Linux rm 命令:你需要知道的一切
已發表: 2023-01-22 Linux rm
命令刪除文件和目錄。 要安全地使用此工具,您需要確定按下“Enter”鍵時會發生什麼。 這是您需要知道的。
Linux 中的 rm 命令是什麼?
如何使用 rm 刪除文件
在 rm 中使用通配符
交互使用 rm
使用 rm 強制選項
使用 rm 刪除目錄
使用 rm 時避免錯誤
什麼個人防護裝備?
Linux 中的 rm 命令是什麼?
Linux rm
命令主要用於刪除文件。 這是大多數人在開始使用 Linux 後不久就會遇到的問題。 由於是 Linux 的新手,您很可能會犯錯誤。 您可能會不小心創建或複製文件,或者使用錯誤的名稱,或者復製到錯誤的位置。 這是命令行學習曲線的一部分。 此類錯誤的清理操作涉及rm
。
rm
命令可以刪除文件、文件組、目錄或完整的目錄樹。 這就是為什麼必須謹慎使用它的原因。 使用rm
並不困難,但失敗的代價很高。
使用rm
刪除文件時,它就消失了。 它不會被移到垃圾箱。 它立即被抹去。 這並不意味著您應該避免使用rm
。 但要安全地使用它,您需要了解它的功能,並確保正確使用它。
有些工具比其他工具更危險,而且對錯誤的容忍度要低得多。 這就是為什麼從來沒有一部叫做德州扳手大屠殺的電影。 rm
不是扳手,絕對是電鋸。
人們每天整天都在使用電鋸,只要他們負責任地、用心地使用電鋸,他們就沒事。 這與rm
的處理相同。 當您從工具包中取出rm
時,您應該放慢速度並檢查,然後再次檢查您的命令行。
rm
命令是一個可執行文件,它不是 shell 的一部分。 因此,儘管我們在這裡使用 Bash,但它是標準的 Linux rm
,而不是特殊的 Bash rm
。
相關:命令行:為什麼人們仍然為之煩惱?
如何使用 rm 刪除文件
使用rm
的最簡單方法是提供要刪除的文件的名稱。
rm 配置.gc
您將靜默返回命令行。 rm
採用了經典的、守口如瓶的 Linux 立場,即如果它不抱怨任何事情,您就可以假設它按照您的要求做了。 提供這樣的文件名會導致rm
在當前工作目錄中查找文件。
您可以在命令行上提供多個文件名。 如果要刪除的文件不在當前目錄中,您還可以提供目錄路徑。
rm memlog.sh /home/dave/dev-archive/config.gc
同樣,如果rm
設法刪除了指定的文件,則不會報告任何內容。
相關:你應該知道的 37 個重要的 Linux 命令
在 rm 中使用通配符
通配符允許您指定文件組或集合,而不必在命令行上列出單個文件。
星號“ *
”代表任何字符序列,包括無字符。 問號“ ?
” 代表任何單個字符。
要檢查您的通配符是否與您期望的匹配,僅此而已,您可以在將它們與 rm 一起使用之前將它們與 ls 一起使用。
要刪除當前目錄中的所有 PNG 文件,請使用“*.png”。 這意味著將匹配後跟“.png”的任何字符序列。 刪除文件後,我們可以使用ls
來驗證它們是否已刪除。
ls *.png
rm *.png
ls *.png
在我們的測試計算機上,當前目錄中有兩個文件,名稱以“config”開頭。
我們可以使用星號通配符來刪除這兩個。 它匹配這兩個文件,因為rm
正在尋找以“config”開頭,後跟任意字符序列的文件名。 在一個文件中,該字符序列是“.sl3”,即文件擴展名。 另一個文件名在“config”之後沒有字符,但是因為星號匹配任何字符或沒有字符,所以它也匹配那個文件名。
ls配置*
房間配置*
ls配置*
您可以成對使用問號。 這將刪除文件擴展名正好是兩個字符的文件。
ls *.??
R M *。??
ls *.??
相關: Bash 需要知道的 15 個特殊字符
交互使用 rm
使用rm
的一種安全方法是強制它在刪除每個文件之前要求確認。 -i
(交互式)選項可讓您執行此操作。 當您將此選項添加到命令行時, rm
將在每次刪除之前提示您,讓您有機會跳過您不希望的操作。
我們將在此命令中使用-i
(交互式)選項。 它會嘗試刪除具有單個字符文件擴展名的所有文件。
rm -i *.?
每個匹配的文件依次呈現。 如果您回答“y”或“Y”,文件將被刪除。 如果您回答“n”,該文件將被保留。 事實上,如果您回答的不是“y”或“y”,該文件將被保留。 您只需點擊“Enter”即可保留文件。
您可以快速瀏覽文件列表,刪除或跳過文件以挑選要刪除的文件。 正如我們將看到的,您可以將i-
(交互式)選項與其他rm
選項一起使用。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
進程 | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
聯網 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
相關:面向開發人員和愛好者的最佳 Linux 筆記本電腦
使用 rm 強制選項
如果您嘗試刪除只讀文件, rm
會在刪除該文件之前提示您進行確認。 這是一個很好的安全網,但如果您有很多文件要刪除,它可能會變得乏味。
rm geonames.sl3
-f
(強制)選項指示rm
從不提示。 你告訴它“是的,刪除你通常會提示我的所有文件。” 它還可以防止rm
抱怨不存在的文件。
rm -f geonames.sl3
當您刪除一組嵌套的文件和目錄時,通常會使用-f
(強制)選項。
使用 rm 刪除目錄
rm
命令也可以選擇性地刪除目錄及其包含的文件。 這類似於rmdir
命令,但是rmdir
不能刪除目錄中有文件的目錄。 它只刪除空目錄。 rm
命令可以輕鬆刪除包含文件和其他目錄的目錄。
刪除目錄類似於刪除文件。 我們在命令行上提供目錄的名稱。 我們需要包括-d
(目錄)選項。 就像我們刪除文件時所做的那樣,我們可以提供幾個目錄的名稱。 我們可以提供不在當前工作目錄中的目錄路徑。
rm -d 舊項目
如果目錄包含文件,這將失敗。
要刪除目錄及其內容,請使用-r
(遞歸)標誌。 這將刪除目錄、它的文件以及它包含的任何嵌套目錄。
rm -d 存檔
rm -r 存檔
第二個命令成功。
要將rm
切換到全電鋸模式,我們可以結合使用-r
(遞歸)和-f
(強制)選項。 這告訴rm
遞歸地刪除目錄樹中的所有文件和目錄,即使它們是只讀的,也不會提示我們。
在我們的測試計算機上,我們有一個名為“遷移代碼”的目錄。 它包含文件和另一個名為“6502”的目錄。 “6502”目錄還包含文件和另一個名為“ASM”的目錄。 該目錄中也有文件。 有些文件是只讀的。
我們還將包含-v
(詳細)命令,以便rm
告訴我們它在做什麼。
rm -rfv 遷移代碼
在輸出中我們可以看到文件已被刪除,當它們為空時,目錄也被刪除。
使用 rm 時避免錯誤
文件名中的空格和其他奇怪的字符可能會出現問題。 例如,以連字符“ -
”開頭的文件名可能會被誤認為是命令行選項。 如果我們有一個名為“-contributors.txt”的文件, rm
將嘗試將該名稱作為一系列命令行選項進行處理。
因為rm
沒有名為“ -c
”的選項,所以命令行解析失敗並且文件沒有被刪除。 要刪除該文件,您需要在它前面加上“./”以提供它的路徑。
rm -貢獻者.txt
rm ./-貢獻者.txt
文件名中的空格也有問題。 要么引用整個文件名,要么使用製表符完成將文件名插入到命令行中,同時轉義空格。 如果您不使用這些選項中的任何一個, rm
會將文件名的每個部分視為一個單獨的文件。
在這裡,我們有兩個文件,一個稱為“備份”,一個稱為“要刪除的備份”。 我們可以使用ls
演示這些文件名的問題。 如果我們嘗試在“要刪除的備份”文件上使用ls
並且我們沒有轉義或引用文件名,則該命令將失敗。
ls -hl 備份刪除
ls
抱怨它找不到名為“to”或“delete”的文件,但它確實找到了一個名為“backup”的文件。 rm
也會這樣做。 它會抱怨兩個丟失的文件,然後它會刪除名為“備份”的文件,這不是我們想要的。
rm 備份刪除
rm
認為它正在處理三個文件,“backup”、“to”和“delete”。 它抱怨找不到“to”和“delete”,但它找到並默默地刪除了“backup”。
引用文件名允許rm
刪除正確的文件。
rm '要刪除的備份'
您也可以使用反斜杠“ \
”來轉義空格,如下所示:
rm 備份\到\刪除
如果您使用製表符完成輸入您的文件名,它們將在需要時自動轉義。
什麼個人防護裝備?
與現實世界中的電鋸不同, rm
沒有可以使用的個人防護設備。
您可以做的是在嘗試使用rm
之前使用ls
檢查您的語法,並使用交互模式,以便您決定刪除哪些內容。
除此之外,它一直在練習,直到您感到舒適和自信為止。 最安全的方法是將一堆犧牲文件複製到一個目錄並在這些文件上進行練習。
相關:在 Linux 上刪除早於 x 天的文件