嗨!歡迎回到上班族的命令列生存手冊,江湖傳言有工程師為了關遠端主機下了經典的:
(先不要亂下!!)
$ sudo rm -rf /
就讓公司關機了,rm
就是這麼炫泡的指令,只不過為了搞懂為什麼上面的那一串為何荒謬,需要先了解幾個名子,就是 root。
你可能聽過 root 帳戶,不管在 macOS 或是 Linux,執行有些指令的時候需要用到 sudo,root 帳戶是一個超級使用者 (Super User),有超強大的權限可以執行一般使用者不能執行的行為。
不過這邊談論到的 root,不是 root 帳戶,而是根目錄 (root directory)。
就像華盛頓(Washington)一樣,有人名和地名,先來討論地名。
叫 /
的資料夾,唸作 root,根目錄。
在 macOS 或 Linux 中,跟系統運行有關的資料夾,都是掛在 root 根目錄下面的,通常會寫作:/
。讀者可以 $ ls /
就可以檢視根目錄有什麼東西,這邊會看到不少的資料夾,都是系統運作不可或缺的。
也可以嘗試 $ cd /
切換到這裡,還記得 ..
是回到「上一個目錄嗎?」。讀者在根目錄用 $ cd ..
會發現還是在 /
,沒有更上面的目錄了。
Windows 的使用者可能這樣子更好理解,就像是 C:\Windows
資料夾,重新命名成 /
(唸作 root),並且裡頭包含我的文件、Program Files
…等資料夾,全置放在這裡面,而不是在更上層。
那我們的「家目錄」在哪邊呢?就在 root directory 下的 home 資料夾:/ --> home
aka. /home
,這裡是我們的一片天地。
雖然在系統之中你是 CEO,但還有一層權力比你更大的董事會,root 帳戶就是董事會成員,他能做很多一般帳號碰不到的權限,例如修改系統檔案、刪除系統相關檔案…。用 sudo
執行指令,就會用 root 身份執行命令,挾天子以令諸侯,用我們自己的帳戶也能使用超級使用者的能力,有點類似 Windows 上的使用系統管理員權限。
root 帳戶本質上也是一個使用者帳號所以也會有自己的密碼,自己的家目錄。密碼的部份,各個電腦管理員需要設定另外一組密碼,通常在安裝的時候會詢問。
那 root 帳戶的「家目錄」在哪?在 root directory 下的 root 資料夾:/ --> root
aka. /root
,這裡是老大的基地。
終於要講怎麼刪除檔案了,也就是上面已經提到的:rm
指令(remove),以下是這個指令的基本用法。
$ rm <檔案1> <檔案2> ...
由此可知,rm 後面可以接不只一個檔案。
有時刪除一堆東西,但刪到不存在的東西時,指令會抱怨:根本找不到這個檔案,然後停下來。這時可以用超派鐵拳讓它閉嘴,只要加上 -f
即可(f 就是 Force 的意思,強制)。
$ rm -f <檔案>
我們在複製檔案那一章題到怎麼去複製一整個資料夾,那個時候說要用 -r
(Recursive 遞迴)就可以複製整個資料夾。刪除一個資料夾也是一樣:
$ rm -r <目錄>
在這邊,所有的人證、物證都到期了,再來看看文章一開始的那個神奇狀況:
$ sudo rm -rf /
也就是:用最高權力暴力刪除根目錄,不要問!名符其實的連根拔起。
下了以後可能也可以下班了,千萬不要這麼做!
嗯?上面不是已經有介紹怎麼刪除資料夾了嗎?這裡怎麼又重新題了一次?還記得上一個章節提到的 mkdir
指令嗎?(不記得記得往前看呦。)他有一個相對的指令叫做 rmdir
。
用法跟 rm 很類似,都是:
$ rmdir <資料夾1> <資料夾2> ...
由此可見,rmdir
可以允許多個資料夾刪除。不過要特別注意的是,rmdir
只能刪「空的」資料夾。
假設有三個資料夾:folder001、folder002、folder003,只有 folder002 不是空的。如果用 rmdir
刪除這三個資料夾
$ rmdir folder001 folder002 folder003
雖然會噴錯誤,folder002 不是空的,但是還是能成功刪除 folder001 和 folder003。
這個指令可以帶一個參數:-p
。用範例說明會比較好懂。
例如 folder001 底下還有 hello 資料夾,hello 底下還有 world 資料夾,結構是這樣:folder001/hello/world
,它們都是空的,執行:
$ rmdir folder001/hello/world
則一路上 world、hello、folder001 都會被刪除!
讀完了這一章,告訴我們下任何指令之前,請一定要想清楚才按下 Enter,才不會變成火烤大會喔。
下一章節進入了基礎操作篇的尾聲囉,將會介紹一個稍微有一點進階的觀念,可以把指令串起來,熟悉以後在命令列之中就會變得很方便呢,下次見囉。
請一位非常熟悉 Linux 系統的朋友 Wayne Lai (@abev66) 校稿時,提供的小知識很有意思。雖然一天到晚 sudo
以為是 super user do ,但其實 su 是 switch user 的意思,是切換一個身份執行:switch user do。
sudo 之所以可以用 root 權限來執行,因為 su 不給任何的角色,預設就是會用 root 帳號(他的 uid 是 0)來執行。