Linux刪庫跑路
導讀 | 時常在網上看到有一些運維或者程式設計師因不小心敲錯了rm刪除功能,導致系統,資料庫被刪。從而跑路的段子,今天小編就來帶大家一起深入瞭解一下這個刪除跑路。 |
最近在網上看到一張圖(原圖出處不詳,題圖據原圖重製,有修改。)
感覺很有道理啊,你看rm 是刪除,這個單詞簡單好記;連 rf 都給出瞭解釋,“垃圾檔案”;/* 代表目錄下的所有檔案,沒毛病;sudo 也有了,確保許可權沒問題。
會有人執行這樣的 來清理所謂的垃圾檔案麼?你別說,這還真不好說。
我們經常會發一些關於關於 Bash 別名的文章,總有一些同學皮一下“貢獻”一些別緻的別名,比如 alias ls=rm -rf,alias cd=rm -rf 等等。雖然我認為幾乎沒有人會被這些 惡搞,但是大家也屢屢樂此不疲。
我將這張圖發到朋友圈裡,好友“龍十三”表示,這不僅僅清除垃圾檔案,而且清除垃圾系統管理員。
是啊,為什麼會有這樣的段子一再出現呢?就是因為我們有些不求甚解的人,遇到問題了,習慣於從網上隨便找個命令示例瞎試,不去探究其原理,也不去核實可靠性。所以,這樣的段子真是用來清除“系統管理員裡的垃圾”的。
那麼讓我們來探究一下上面這條命令,看看這裡有多少知識點。
首先,這條命令是用來清除 系統的根目錄(/)下所有檔案的。它使用了兩個命令選項:
- -r:遞迴recursive,對目錄及其下的內容進行遞迴操作
- -f:強制force,無需確認操作
這兩個選項可以單獨寫作 -r 和 -f ,也可以按 POSIX 慣例,將兩個選項合併成 -rf 。這裡的 -r 和 -f 選項,絕非上圖中惡搞的 “Rubbish” 和 “Files”。
其後的引數 /* 指的是根目錄 / 下的所有檔案。
-r 選項代表遞迴recurive,其意思是指遞迴地對引數中的目錄及其下的檔案或子目錄進行刪除操作。
這個選項除了短選項風格,還有 GNU 風格的長選項 --recursive ;也出於相容性的原因,支援同義的大寫 -R 引數。
如果沒有該選項,則不會刪除目錄及其下的內容。
在介紹 -f 選項之前,讓我們先看一下這裡沒有出現的 -i 選項。
原生的 rm 命令在刪除檔案或目錄時,遵循 UNIX 慣例,在執行刪除操作前和操作成功後,是靜默的,毫無提示的。除非遇到錯誤(如要刪除的檔案不存在)時,否則絕不抱怨。
後來,可能是鑑於很多人經常會錯誤刪除檔案,在絕大多數的 Linux 發行版上的 rm 命令是一個新增了 -i 選項的別名:
alias rm=rm -i
這裡的 -i 選項用於在每一個刪除動作前做個提示,需要使用者明確給予確認才會刪除。
但是,有時候,這種提示實在是太煩了,所以,很多人在操作時,特意使用 -f 選項覆蓋了 -i 選項的行為,使得這個別名的定義毫無意義。
因此,還有一個 -I 選項,這個選項在要刪除三個及更多的檔案或遞迴刪除時,會做一次確認提示。這樣,既沒有 -i 選項那麼煩人,又能防止大部分錯誤操作。所以,可以將上述別名採用 -I 選項,並避免使用 -f 選項。
我們看到命令中以* 來指代目錄下的所有檔案。但是嚴格來說,* 這個萬用字元代表不以點 “.” 開頭的所有檔案。以 “.” 開頭的檔案預設屬於 Linux 下的隱藏檔案。
因此,這個命令不會刪除 / 目錄下以 . 開頭的隱藏檔案,以及 . 和 .. 兩個目錄。但是在遞迴操作時,會遞迴地刪除子目錄下除了 . 和 .. 目錄之外的所以檔案和子目錄——無論是否以 . 開頭——因為遞迴操作不是由 Bash 等 進行通配展開的。
至於為什麼不在刪除目錄下的內容時也將 . 和 .. 一視同仁?因為自從 1979 年 rm 命令開始有刪除目錄的能力時,就專門避開了這兩個特殊目錄。
有一定經驗的系統管理員可能這個時候會想起來,rm 命令有一對專門針對根目錄的選項 --preserve-root 和 --no-preserve-root 。這對選項的意思是:
- --preserve-root:保護根目錄,這是預設行為。
- --no-preserve-root:不保護根目錄。
這對選項是後來新增到 rm 命令的。可能幾乎每個系統管理員都犯過操作錯誤,而這其中刪除過根目錄的比比皆是(我就是一個)。出現這種情況的原因有幾種:
- 輸入手誤:比如本來想輸入 rm /tmp/test.txt,結果不小心鍵盤打的飛起,多輸入了一個空格變成: rm / tmp/test.txt 。看到根目錄(/)後面的空格了麼?!——這就是我當前自己親手犯過的錯誤,而且是在生產伺服器上。
- 未正確初始化或命名錯誤的 shell
- 變數:比如在
- 中,rm -rf /${tmp_dir},如果無論是 tmp_dir 變數沒有正確賦值還是輸入錯誤(原本或許是 tmpdir ?),那會導致什麼?當然是刪除根目錄咯~
鑑於這種情況層出不窮,在 Linux 圈子幾乎和“初學者如何退出 vi” 一樣成為經典笑話了。所以,在 POSIX 第七版規範中,rm 命令新增了 --preserve-root 選項,並將其作為預設行為,以降低出現這種錯誤的可能。
但是,這個選項不能防範本文中所述的清除根目錄下所有檔案(/*)的操作。
有的同學可能要問,那為什麼還會專門出現 --no-preserve-root 選項呢?這可能主要是出於 UNIX 哲學的考慮,給予你想要的一切權力,犯傻是你的事情,而不是作業系統的事情。萬一,你真的想刪除根目錄下的所有檔案呢?
你還別說,真有這種需求:比如你要清除一個 chroot 環境下的所有檔案。 chroot 我們這裡不多講,它就是以一個目錄作為“監獄”,該目錄在邏輯上形成了新的“根目錄”,在該監獄內的檔案操作不能跨出該目錄範疇。近些年流行的 Docker、LXC/LXD 之類的容器技術,都是一種 chroot 技術。
好吧,你可能更特立獨行一些,就是要清除物理環境中的根目錄下所有檔案!但是在你按下Enter鍵之前,請再考慮一下,你是否在一個 UEFI 系統上?
因為 UEFI 系統會將其韌體、變數和設定對映到根目錄下的 /sys 分割槽裡面,所以,如果在 UEFI 環境中清除根目錄下的所有內容,也會同樣清除 /sys ,這將可能會導致你丟失 UEFI 的估計設定,從而使裝置變磚。
為了可以刪除屬於 root 等系統和其它使用者的檔案,這個命令還需要在前面加上 sudo 來提權。
輸入該命令後,會要求輸入密碼。誰的密碼?不是 root 密碼,而是輸入該命令的當前使用者的密碼。
而對於誰能執行 sudo 命令,以及他可以透過 sudo 命令執行什麼命令等知識點,這裡就不再贅述,請參閱我們的其它文章。順便說一句,要記得區分 sudo 和 su 命令的聯絡與區別。
研究到這裡,我們不能忘記這條命令原本的意圖,刪除“垃圾檔案”。
Linux 下有垃圾檔案麼?有。這些垃圾檔案一般來源於:
- 沒有被包管理器管理的孤兒檔案,在軟體包被刪除後,遺留在系統中
- 無用的依賴包,在需要這些依賴包的軟體被刪除後,沒有相應刪除
- 沒有清理的臨時檔案
- 遺留的診斷檔案
那麼這些垃圾檔案需要清除麼?一般而言,Linux 系統上的這些檔案大多不會對系統的健康執行造成任何影響,除非太多了,佔據了很多儲存空間和 inode。
所以,如果你感覺你的 Linux 系統慢了,那幾乎可以肯定不是由於垃圾檔案導致的,至少在這一點上,來自 Windows 系統的經驗並不值得複製。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2675244/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《MySQL——從刪庫到跑路》阿里架構師分享刪庫跑路救命策略MySql阿里架構
- 我刪庫跑路失敗了
- 如何刪庫以後不跑路
- 程式設計師刪庫跑路了?程式設計師
- 【轉載】Redis最新漏洞,刪庫勒索+跑路!!!Redis
- 看完這篇不在擔心刪庫跑路
- 刪庫跑路?你應該看看雲資料庫資料庫
- 刪庫後,除了跑路還能怎麼辦?
- 從刪庫到跑路,DBA 如何防止被淘汰?
- 寫了Bug,誤執行 rm -fr /*,我刪刪刪刪庫了,要跑路嗎?
- 又一程式設計師刪庫跑路了程式設計師
- 刪庫不跑路-詳解MySQL資料恢復MySql資料恢復
- MySQL DBA如何從刪庫跑路到carry全場MySql
- 坑坑坑,刪庫跑路的多種隱含命令
- Redis勒索事件爆發,如何避免從刪庫到跑路?Redis事件
- Linux Shell 從入門到刪除根目錄跑路指南Linux
- Linux Shell從入門到刪除根目錄跑路指南Linux
- 京東到家程式設計師離職當天刪庫跑路程式設計師
- 無需跑路,GitLab 刪庫事件的借鑑意義Gitlab事件
- 刪庫了不用跑路!binlog恢復資料實操
- 同事刪庫跑路後,我連表名都不能修改了?
- “刪庫跑路”重現江湖,技術和制度如何保障資料安全?
- 刪庫跑路升級版,著名大廠員工離職為報復公司,直接刪虛擬機器!虛擬機
- 刪庫跑路又發生了,企業應該如何杜絕此類事件發生?事件
- 堡壘機和防火牆的區別是什麼?能防刪庫跑路嗎?防火牆
- The Data Way Vol.3|做到最後只能刪庫跑路?DBA 能做的還有很多
- “刪庫跑路”這件事情真的發生了 ,還是技術總監乾的!
- 傳什麼值得買疑似被刪庫跑路,目前 APP 及小程式仍無法開啟APP
- 資料誤操作,刪庫跑路?教你使用ApexSQLLog工具從 SQLServer日誌恢復資料!SQLServer
- 谷歌修復Chrome零日漏洞;微盟員工刪庫跑路;ATM機Win 7系統崩潰谷歌Chrome
- Faker.js 作者“刪庫跑路”引開源圈“震動”:該開源專案現已被社群控制JS
- 推薦一款輕量級堡壘機系統讓你防護“rm -rf 刪庫跑路”
- 刪庫到跑路?還得看這篇Redis資料庫持久化與企業容災備份恢復實戰指南Redis資料庫持久化
- 35歲程式設計師瘋狂學習之後,立馬跑路了。老闆:快看有沒刪庫!程式設計師
- Mysql binlog備份資料及恢復資料,學會這個,我在也不怕刪庫跑路啦~MySql
- 刪除linux下的oracle資料庫LinuxOracle資料庫
- 阿里雲RDS資料庫到期例項被清除,別急著哭(阿里沒有刪庫跑路),或許還有一線生機阿里資料庫
- Oracle 刪庫Oracle