這 10 種 Linux 命令線上操作,運(yùn)維一定要謹(jǐn)記
每一年,都會(huì)有刪庫(kù)跑路的新聞。現(xiàn)實(shí)中,刪庫(kù)容易,跑路難,從業(yè)者充滿了淚水。
這些動(dòng)作里面,并不總是存在主觀的惡意,而是這些命令太危險(xiǎn)了。線上操作時(shí),一定要保持清醒的頭腦,切記馬虎大意。
你說(shuō)你誤操作的,誰(shuí)信呢?
切記:
- 嚴(yán)禁酒后登錄線上服務(wù)器操作
- 嚴(yán)禁吵架后情緒激動(dòng)登錄線上服務(wù)器操作
- 嚴(yán)禁長(zhǎng)時(shí)間加班后操作線上環(huán)境
- 禁止在線上試驗(yàn)不熟悉的命令
- 重要系統(tǒng)先做備份
1. 準(zhǔn)備工作
在執(zhí)行危險(xiǎn)命令時(shí),請(qǐng)深呼吸。首先執(zhí)行ifconfig,或者ip addr命令,確認(rèn)是在正確的服務(wù)器上。
- $ ip addr
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
- link/ether 00:16:3e:34:e9:a9 brd ff:ff:ff:ff:ff:ff
- inet 172.19.26.39/20 brd 172.19.31.255 scope global dynamic noprefixroute eth0
- valid_lft 313267185sec preferred_lft 313267185sec
- inet6 fe80::216:3eff:fe34:e9a9/64 scope link
- valid_lft forever preferred_lft forever
這時(shí)候,再次深呼吸,然后執(zhí)行pwd命令,確保自己是在正確的目錄下面。
- $ pwd
- /etc/nginx
接下來(lái),就可以看一下執(zhí)行的命令,是不是危險(xiǎn)指令。
2. rm -rf命令
-rf參數(shù)將遞歸刪除文件,誤刪文件導(dǎo)致數(shù)據(jù)丟失,產(chǎn)生嚴(yán)重后果。如果多一個(gè)空格,或者 /沒(méi)有補(bǔ)齊,或者文件有特殊符號(hào),導(dǎo)致誤刪文件的誤操作居多。
- rm -rf ./* => rm -rf /
- rm -rf abc/ => rm -rf abc /
執(zhí)行 rm 命令,手速一定要慢。按補(bǔ)全,一定要等屏幕回顯后操作。
另外,在腳本中,rm的坑也不小,比如:
- rm -rf ${p}/*
如果p變量沒(méi)有設(shè)置,就會(huì)是災(zāi)難性的后果,命令等同于rm -rf /。所以rm還有另外一條謹(jǐn)言:在腳本中執(zhí)行rm的時(shí)候,請(qǐng)先判斷相關(guān)的變量是否為空。
3. chmod命令
chmod是更改目錄和文件權(quán)限用的,如果處理不當(dāng),會(huì)產(chǎn)生和rm一樣的后果。
這里介紹一種非常霸道的恢復(fù)方法。在執(zhí)行這個(gè)命令之前,先把所有文件的權(quán)限備份一下。這里用到getfacl這個(gè)命令。
- getfacl -R / > chmod.txt
恢復(fù)的時(shí)候,執(zhí)行
- setfacl --restore=chmod.txt
它將回放這個(gè)文件的權(quán)限,有時(shí)候是救命的。
4. cat命令
cat命令也能出錯(cuò)?是的,而且還很?chē)?yán)重,因?yàn)槟阏莆樟烁呒?jí)技能:重定向符。
如果你想要向文件中追加 內(nèi)容,會(huì)使用 cat >> file的方式,如果你不小心少輸入了一個(gè)>,那么不好意思,你的文件內(nèi)容就丟失了。
類(lèi)似的命令還有echo等,可以看到,問(wèn)題不在cat,在重定向符,太容易寫(xiě)錯(cuò)。
在此,請(qǐng)你操作之前,確保每次深呼吸,數(shù)好箭頭的個(gè)數(shù)再操作。
5. dd命令
dd命令很酷,和xjjdog的jj遙相呼應(yīng)。命令如下:
- dd if=/dev/zero of=/dev/sda bs=512 count=1
以上命令,用于格式化硬盤(pán),如果你的剪貼板里面有這樣的命令,而且不小心粘到了命令行里,你的數(shù)據(jù)將會(huì)蒸發(fā)。
6. cp命令
cp命令會(huì)產(chǎn)生覆蓋,如果你后悔了,想找到原文件,將非常困難。
建議增加alias cp ='cp -i',i參數(shù)表示會(huì)在拷貝時(shí)生成一個(gè)備份。大多數(shù)時(shí)候沒(méi)用,有時(shí)候很有用。
和我們買(mǎi)保險(xiǎn)一個(gè)道理。
mv命令類(lèi)似,也可以加上-i。
7. tar命令
不要覺(jué)得tar很安全,我就曾經(jīng)因?yàn)閠ar命令丟失過(guò)數(shù)據(jù)。
第一,tar -xf 解壓的時(shí)候, 如果解壓的文件已經(jīng)在當(dāng)前目錄,覆蓋原有的文件夾及文件。覆蓋這兩個(gè)字,很多時(shí)候意味著不安全。
8. vim命令
vim容易在打開(kāi)大文件的時(shí)候,造成系統(tǒng)內(nèi)存占用過(guò)高。如果觸發(fā)了操作系統(tǒng)的oom-killer,將會(huì)造成其他正常進(jìn)程的死亡。
如果你手速過(guò)快,執(zhí)行了:wq,將會(huì)造成文件的不一致甚至損壞。
可是使用less或者more這樣的命令,來(lái)查看信息。更高效,也更安全。
如果你實(shí)在不得不用vim,請(qǐng)保持使用view命令,它是vim的只讀模式。
9. mkfs.*
類(lèi)似于mkfs.ext4這種指令,將會(huì)格式化硬盤(pán),一般用于線上環(huán)境初始化,否則不要執(zhí)行。
10. MySQL
(1)使用mysql -U
- --safe-updates, --i-am-a-dummy, -U
使用mysql -U 防止delete、update執(zhí)行沒(méi)帶where條件的操作。當(dāng)發(fā)出沒(méi)有WHERE或LIMIT關(guān)鍵字的UPDATE或DELETE時(shí),mysql程序拒絕執(zhí)行。
alias同樣是我們的好幫手,可以這么設(shè)置:
- alias mysql='mysql -U'
(2)重要操作時(shí),使用事務(wù)
- start transaction
- 執(zhí)行
- 確認(rèn)
- commit
(3)DML 誤操作回滾,可以使用binlog2sql
(4)小心 DDL 操作
DDL往往意味著巨大的坑,鎖表、誤刪、數(shù)據(jù)轉(zhuǎn)變,往往是災(zāi)難性的。DDL 對(duì)整個(gè)表進(jìn)行操作,或者是整個(gè)表所有的行、列,產(chǎn)生exclusive鎖,產(chǎn)生瘋狂io、嚴(yán)重影響生產(chǎn)。
這里面的任何一條,都是要命的。
仔細(xì)檢查DDL,盡量在業(yè)務(wù)低峰執(zhí)行,而且盡量采用inplace方式操作。
End
線上值萬(wàn)金,執(zhí)行需謹(jǐn)慎。小心駛得萬(wàn)年船,在危險(xiǎn)的線上環(huán)境,做事追求的不是快,而是穩(wěn)。
畢竟,成熟的公司,光審批階段就耗了好幾天,你又為啥這么在乎這幾秒鐘呢?