一個 「實用」 的好命令,我不得試試?git
你們好,我是魚皮。github
在編程屆,有一個家喻戶曉的實用 Linux 命令:rm -rf /
。shell
聽說,此命令一旦執行成功,就會給人帶來快樂,是一個善良的好命令,因此我喜歡叫它 快樂命令
。數據庫
好吧,不裝了,其實這個命令的做用是 刪除服務器上全部的文件 !是一個極度危險的命令!編程
以前咱們可能也據說過不少刪數據跑路事件,其中一部分元兇正是這個命令。vim
記得前兩週,我剛買了一臺全新的雲服務器,在給你們演示如何搭建應用開發環境。結果沒想到,一些小夥伴居然慫恿我當場輸入 「快樂命令」,想看看會出現什麼效果。安全
這麼刺激的事情,我不得試試?bash
因而,我打開終端,鏈接服務器,輸入快樂命令。並且,要作就要作得絕一點,我甚至同時開了 三個 客戶端,打算同時輸入命令,三倍快樂!服務器
OK,起飛 🛫!markdown
但結果呢,數據並無被刪除,而是彈出了一個警告,禁止刪除!
對不起,結果讓你們失望了~
其實在敲這行命令以前,我就一點兒也不擔憂,由於我相信騰訊雲服務器不可能連這點安全保障都沒有。
那問題來了,如何防止快樂命令帶來的惡劣影響呢?
下面就簡單分享下我瞭解到的方法吧~
方法仍是挺多的,我簡單整理了一個大綱:
首先,使用服務器最多的人確定是咱們本身,所以咱們要先養成良好的使用習慣,保護服務器,從我作起。
爲了防止服務器上的數據(數據庫、用戶文件、配置文件等)被誤刪除,能夠按期將服務器上重要的文件下載到本地或同步到其餘存儲空間上,通常使用定時腳本(crontab 命令等)或工具自動定時同步。
爲了防止意外 rm
命令帶來的不利影響,咱們能夠儘可能少用該命令,使用一些其餘的命令來替代刪除。
好比 mv
命令,做用是移動文件或更名,能夠本身新建一個相似回收站的目錄,而後把要刪的文件扔進去。
# 新建回收站目錄
mkdir trash
# 移動文件到回收站
mv file.txt trash
複製代碼
針對往後可能還須要的文件,能夠給文件增長 .bak
後綴,表示備份:
mv file.txt file.txt.bak
複製代碼
可是,即便養成了好習慣,有時候可能也會疏忽,不當心打出了 rm
命令,意外刪除了文件。
莫慌,還有其餘更保險的方法。
Linux 中的 alias
命令用於爲指令設置別名,有點相似對象的引用。
舉個例子,原本能夠用 mkdir
命令建立目錄,若是我以爲這個命令背不下來,那能夠給他起個別名:
alias md=mkdir
複製代碼
而後,咱們就可使用 md
命令來建立目錄了。
同理,咱們能夠把 rm
命令設置爲其餘命令的別名,從而阻止本來的刪除功能。
其實不少服務器已經默認爲咱們設置了一些保護系統文件安全的別名,讓咱們打開 .bashrc
文件:
cat /root/.bashrc
複製代碼
能夠看到以下代碼:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
複製代碼
系統已經爲 rm
命令配置了別名,當咱們輸入 rm
時,實際執行的是 rm -i
,經過 -i
參數來詢問咱們是否要刪除,只有輸入 y
確認後,纔會執行刪除操做。
基於 alias
命令,咱們能夠自動將 rm
命令重定向爲將文件放入回收站目錄,操做以下:
首先修改 .bashrc
文件(Linux 下環境配置文件,用於保存一些個性化配置):
vim ~/.bashrc
複製代碼
在文件末尾追加以下代碼:
# 建立一個.trash 隱藏目錄
mkdir ~/.trash
# 使用別名 del 代替 rm
alias rm=del
# 將 rm 命令改成 mv
del()
{
mv $@ ~/.trash/
}
複製代碼
保存退出,而後輸入下列命令使修改生效:
source ~/.bashrc
複製代碼
大功告成,而後再執行 rm
命令,就會自動移動到回收站目錄啦!
除了本身手動編寫回收站腳本外,還可使用現成的開源項目 trash
,Mac 用戶能夠直接用一行命令安裝,就能夠愉快地使用了。
以上的方式對於我的服務器用戶來講,通常就足夠了,但若是是團隊開發,多人同時在一臺服務器上操做,就很難說誰忽然刪文件跑路了對吧。
因此,最好仍是對服務器上的文件進行合理的權限設置,經常使用的幾種方式以下。
最直接的方式,直接用 chmod
命令修改指定文件的讀、寫、執行權限,好比下列命令:
chmod 700 file.txt
複製代碼
做用是設置僅建立該文件的用戶可讀寫,其餘用戶無權訪問。
Linux 系統自帶的 chattr
命令是 Change Attribute 的縮寫,意爲改變文件的屬性,可以用來防止文件和目錄被意外刪除或修改。
好比下列命令:
sudo chattr +i file.txt
複製代碼
經過 +i
參數給文件追加了 「不可修改」 的屬性,該不能被刪除、更名、設定連接關係,同時不能寫入或新增內容。該參數可謂是提升系統安全的神器!
讓咱們試下效果:
果真刪除失敗了,提示操做不被容許。
若是要保護目錄,只須要加個 -R
參數就好了:
sudo chattr -R +i myDir
複製代碼
sudo
是 Linux 的經常使用命令,能夠臨時以 root 用戶(超級管理員)的身份執行命令。
若是給了一個普通用戶超級管理員的身份,他將能作任何事情,這是很是危險的啊!
因此可使用 visudo
命令,修改普通用戶使用 sudo
命令時的權限。
輸入 visudo
,將自動進入 /etc/sudoers
文件的編輯,嘗試追加一行:
dog localhost=/bin/rm /file/*
複製代碼
這就意味着,用戶 dog 只能刪除 /file
目錄下的文件,而不能隨意刪除。
再提一個開源的 Linux 安全神器 Lshell
,能夠用於構建一個受限的 Linux 腳本執行環境。
一行命令安裝後,能夠經過修改它的配置文件 /etc/lshell.conf
,來管理用戶的行爲。
好比下列配置,禁止用戶 yupi 使用 rm
命令,防止這貨刪文件跑路:
[yupi] allowed = 'all' - ['rm']
複製代碼
通常狀況下,以上那麼多種措施就足夠防禦了,也比較簡單。
但最後,仍是要提醒你們,不要輕易嘗試這個命令哈哈。一時好奇一時爽,明天要睡垃圾場!
最後再送你們一些 幫助我拿到大廠 offer 的學習資源,高達 6 T!
我是如何經過自學,拿到騰訊、字節等大廠 offer 的,能夠看這篇文章,再也不迷茫!
我是魚皮,點贊 仍是要求一下的,祝你們都能心想事成、發大財、行大運。