維實(shí)用手冊:從磁盤排查到日志分析的高頻命令實(shí)戰(zhàn))
前兩篇把Linux的基礎(chǔ)命令和文件系統(tǒng)梳理了一遍cd、ls、cp、mv、rm、vi、管道、重定向……這些命令單獨(dú)看都不難但真正到了干活的時候光會這些遠(yuǎn)遠(yuǎn)不夠。這一篇我打算換個角度不再按命令清單往下背而是把日常工作中真正高頻出現(xiàn)的場景拆開聊聊Linux的實(shí)用操作磁盤快滿了怎么定位大文件、幾百萬行日志怎么快速過濾、端口被占用時如何找出元兇、定時任務(wù)為什么手動執(zhí)行正常、cron里卻沒反應(yīng)。這篇筆記適合剛開始熟悉Linux、或者已經(jīng)會用基礎(chǔ)命令但總感覺效率上不去的朋友。我會盡量把“為什么這樣做”也說清楚而不只是丟一串命令。命令本身記不住沒關(guān)系思路在命令隨時可以查真正值錢的是排查問題和處理故障時的判斷方式。文章里所有命令我都實(shí)際跑過涉及踩坑的地方也會特別標(biāo)出來大家照著操作基本能復(fù)現(xiàn)。1. 文件與目錄操作先把高頻命令用明白1.1 天天在用的ls、cp、mv、rm其實(shí)還有不少細(xì)節(jié)前面我們已經(jīng)用過很多最基本的文件命令這里不再重復(fù)ls -l、cp -r這類基礎(chǔ)用法而是說幾個我在實(shí)際操作里發(fā)現(xiàn)特別有用的細(xì)節(jié)。第一個是ls的三個常用參數(shù)組合ls -lh以人類可讀方式顯示文件大小ls -lt按修改時間從新到舊排序ls -lS按文件大小從大到小排序。ls -lt在排查“剛剛改了哪個文件”的時候非常順手比如你懷疑某個配置文件被改過直接ls -lt看目錄最近的修改時間一目了然再配合stat看精確時間點(diǎn)基本就能判斷是不是剛才那次操作動了它。如果你管理著一臺機(jī)器上跑的多個服務(wù)這幾個參數(shù)的組合幾乎每天都會用到。ls -lh # 人類可讀大小4.2K、1.5M ls -lt # 按修改時間排序 ls -lS # 按文件大小排序cp方面我想強(qiáng)調(diào)兩個不那么常用但很關(guān)鍵的參數(shù)cp -a和cp -u。cp -a在復(fù)制時完整保留權(quán)限、屬主、時間戳做配置備份、目錄遷移時非常關(guān)鍵。普通cp會刷新目標(biāo)文件的時間戳、變更屬主等你把環(huán)境從一臺機(jī)器遷到另一臺可能因?yàn)槲募僦鞑粚Ψ?wù)啟動直接報權(quán)限錯誤。所以備份習(xí)慣養(yǎng)成用cp -a能少踩很多坑。cp -u則適合日常增量拷貝比如把本地改過的幾個文件同步到服務(wù)器某個目錄不用糾結(jié)哪些文件動過。cp -a src dest # 完整保留權(quán)限、屬主、時間戳 cp -u src dest # 只有源比目標(biāo)新時才復(fù)制mv有一個容易被忽視的底層差異跨文件系統(tǒng)移動時它并不是單純的“改名”而是先復(fù)制到目標(biāo)分區(qū)再刪除原文件。如果 /home 和 /data 在同一個分區(qū)mv只是修改目錄項速度很快一旦跨分區(qū)你會明顯感覺到卡頓超大文件相當(dāng)于被復(fù)制了一份復(fù)制期間原文件的inode也會變化。所以同步大目錄時我通常直接換rsync比mv跨盤更可控、還能斷點(diǎn)續(xù)傳。至于rmLinux沒有回收站這層兜底rm -rf一旦執(zhí)行就真的沒了。我平時刪除重要目錄前會先用find把匹配到的文件列出來確認(rèn)再刪除這個習(xí)慣幫我避免過至少兩次誤刪。mv /home/user/bigfile /data/bigfile # 跨分區(qū)時實(shí)際是復(fù)制刪除 rm -rf /data/old_dir # 沒有回收站執(zhí)行前必須確認(rèn)1.2 先find定位大文件再du揪出磁盤大戶磁盤寫滿大概是Linux日常運(yùn)維里最經(jīng)典的問題之一。遇到這種場景重點(diǎn)不是只看df -h而是要快速定位哪個目錄占得最多、哪個文件異常變大。先看整體概況df -h看塊使用率df -i看inode使用率。兩者必須結(jié)合看有時候df -h顯示還有50G但服務(wù)卻報“No space left on device”那就是inode滿了小文件太多導(dǎo)致索引被耗盡。只習(xí)慣看df -h的人很容易漏掉這個坑。df -h # 磁盤空間 df -i # inode使用率定位大文件我常用findfind / -xdev -type f -size 100M -exec ls -lh {} \;參數(shù)含義拆開解釋-xdev表示不要跨過掛載點(diǎn)避免把 /proc、/sys 這些虛擬文件系統(tǒng)也翻進(jìn)去-type f限定只找普通文件-size 100M表示大于100M-exec ls -lh {} \;是在每個匹配文件上執(zhí)行l(wèi)s分號要轉(zhuǎn)義。如果想只看最大的幾個文件就改成find /data -xdev -type f -printf %s %p\n | sort -rn | head -20%p是路徑%s是字節(jié)大小排完序一眼能看到大頭。find /data -xdev -type f -printf %s %p\n | sort -rn | head -20如果是目錄級別要看整體占用用du -h --max-depth1 /var | sort -rh | head -20。這里du和find分工不同find針對單個文件du統(tǒng)計目錄累計占用。排查磁盤時我通常先用du從根或者嫌疑目錄逐層往下定位大頭再用find把里面超過某個體積的文件列出來。兩步配合十分鐘內(nèi)基本能鎖定問題。順便補(bǔ)充一個清理日志的場景如果日志目錄里堆積了大量7天沒動過的.log文件先用find /var/log/myapp -name *.log -mtime 7 -exec ls -l {} \;預(yù)覽確認(rèn)無誤后再把exec替換成-delete執(zhí)行。能預(yù)覽能刪除這是最穩(wěn)妥的清理方式。提示find的 -delete 選項會在沒有權(quán)限時靜默跳過部分文件所以刪除完最好再用find復(fù)查一遍。另外永遠(yuǎn)不要在不確定路徑的情況下直接寫find / -delete那等于格式化現(xiàn)場。2. 文本處理三件套grep、sed、awk一次講透2.1 grep的常用參數(shù)以及那個容易坑腳本的退出碼日志排查是Linux使用頻率最高的場景之一而grep就是日志場景里最基礎(chǔ)的工具。我日常用得比較多的有五個組合grep -E ERROR|WARN同時匹配多個關(guān)鍵詞grep -i timeout忽略大小寫grep -C 5 OutOfMemory顯示匹配行前后5行上下文grep -v ^$去掉空行g(shù)rep -rl Timeout /var/log/遞歸查找并只輸出文件名。-E是擴(kuò)展正則|表示或比先grep一次再grep一次舒服得多。-C在排查異常時幾乎是剛需單看一行ERROR往往看不出原因前后幾行上下文才是真正的線索。grep -E ERROR|WARN app.log grep -i timeout app.log grep -C 5 OutOfMemory app.log grep -v ^$ /etc/nginx/nginx.conf grep -rl Timeout /var/log/grep還有一個容易被忽視但很關(guān)鍵的行為退出碼。grep找到匹配時返回0找不到返回1出錯返回2。這個特性在腳本里尤其容易坑人如果腳本開了set -egrep又作為單獨(dú)命令執(zhí)行且沒匹配到內(nèi)容腳本會直接退出后面“備份失敗”的分支根本走不到。我一開始沒注意這個結(jié)果某次備份檢查腳本莫名其妙中斷排查半天發(fā)現(xiàn)就是grep退出碼的問題。要避免這個情況要么把grep放在if/while條件里要么在不需要中斷腳本的地方加上|| true。set -e if grep -q SUCCESS /var/log/backup.log; then echo 備份成功 else echo 備份失敗 fi2.2 sed與awk的組合讓日志開口說話grep負(fù)責(zé)“過濾行”sed負(fù)責(zé)“按行編輯”awk擅長“按列統(tǒng)計”。三者配合起來幾乎能處理所有文本類問題。先說sed。打印指定行范圍和替換文本是最高頻的兩個用法sed -n 20,30p app.log打印第20到30行sed -n s/舊內(nèi)容/新內(nèi)容/p file只打印發(fā)生了替換的行不寫回文件sed -i.bak s/舊內(nèi)容/新內(nèi)容/g file替換并生成.bak備份。做sed -i之前我的習(xí)慣是先不帶-i跑一遍確認(rèn)替換結(jié)果正確再落盤加-i.bak生成備份也是個好習(xí)慣萬一替換錯了還能撤回來。sed -n 20,30p app.log sed -n s/舊內(nèi)容/新內(nèi)容/p file sed -i.bak s/舊內(nèi)容/新內(nèi)容/g fileawk是按列處理的利器。一個很常見的需求從日志里提取某個接口的耗時統(tǒng)計平均值。假設(shè)日志每行是“2025-06-01 10:00:00 INFO request_time123ms url/api/user”默認(rèn)按空格分列我們可以遍歷這一行的字段找到request_time那一段把數(shù)字摳出來累加。gsub(/[^0-9]/, , $i)的意思是把非數(shù)字字符全部替換成空串這樣“request_time123ms”就變成了“123”。這一步在處理帶單位的數(shù)據(jù)時幾乎是標(biāo)配。如果只想看哪個路徑被訪問得最頻繁可以配合管道awk {print $NF} access.log | sort | uniq -c | sort -rn | head$NF是最后一列整條管道負(fù)責(zé)“取末列、排序、統(tǒng)計次數(shù)、倒序排列”。awk /request_time/ { for (i 1; i NF; i) { if ($i ~ /^request_time/) { gsub(/[^0-9]/, , $i) sum $i count } } } END { if (count 0) printf avg request_time %.1fms (count%d)\n, sum/count, count } app.log注意awk腳本里經(jīng)常用到$符號所以整體要放在單引號里不然會被shell先展開。凡是看到awk {...}這種寫法記住單引號就是shell和awk之間的隔離帶。3. 權(quán)限與安全別等出事了才關(guān)心這層細(xì)節(jié)3.1 看懂rwx和umask再決定怎么用chmod和chown權(quán)限問題在入門階段容易被當(dāng)成“背下來就行”的知識但實(shí)際上最常出問題的恰恰是權(quán)限。先把rwx的數(shù)字含義刻在腦子里r4w2x14217就是rwx5是r-x0是---。所以chmod 754表示屬主rwx、屬組r-x、其他人r--。chown -R會把目錄和里面所有文件的屬主屬組都改了這個命令要特別小心范圍太大、路徑寫錯誤傷面會很廣。我的原則是執(zhí)行前先echo一下完整命令確認(rèn)路徑再跑。對目錄來說x權(quán)限代表能否進(jìn)入目錄所以會出現(xiàn)一種情況某個文件權(quán)限是r--理論上有讀權(quán)限但如果你沒有對應(yīng)目錄的x權(quán)限依然沒法訪問。文件權(quán)限和目錄權(quán)限是兩層關(guān)系排查權(quán)限問題時先看目錄鏈。chmod 754 script.sh chown -R appuser:appgroup /data/appumask也值得理解不然你永遠(yuǎn)不知道為什么默認(rèn)新建的文件是644、目錄是755。umask表示“從默認(rèn)權(quán)限里抹掉哪些位”文件默認(rèn)666目錄默認(rèn)777再減去umask值就是實(shí)際權(quán)限。umask 022時666-022644777-022755umask 077時文件變成600目錄變成700適合隱私目錄。網(wǎng)上很多人圖省事直接chmod -R 777這個習(xí)慣非常不好777意味著任何人可讀可寫可執(zhí)行對配置文件和腳本來說等于把大門敞開。尤其是Web上傳目錄如果給了執(zhí)行權(quán)限等于給上傳木馬腳本創(chuàng)造了條件。3.2 特殊權(quán)限位、sticky和sudo最小化普通權(quán)限之外還有三個特殊權(quán)限位setuid4、setgid2、sticky1。它們出現(xiàn)在權(quán)限位最前面比如chmod 1777 /tmp這種寫法第一位就是特殊權(quán)限。/tmp目錄必須是1777如果沒有sticky位任何一個用戶都能刪除別人在/tmp里留下的臨時文件這就會成為安全隱患。passwd命令帶setuid位所以普通用戶才能通過它修改 /etc/shadow 里的密碼。setuid在方便的同時也是風(fēng)險點(diǎn)攻擊者一旦利用某個setuid程序提權(quán)后果很嚴(yán)重所以定期掃描setuid文件是必要的find / -xdev -type f -perm -4000 2/dev/null。正常情況下列出的setuid文件就那么幾個系統(tǒng)程序多了就要警覺。這是排查入侵痕跡時的高頻檢查項。chmod 1777 /tmp # sticky位只有所有者能刪除自己的文件 chmod 4755 /usr/bin/demo # setuid位運(yùn)行時獲得屬主身份 find / -xdev -type f -perm -4000 2/dev/nullsudo配置也要堅持最小化。visudo里會有類似“user ALL(root) /usr/bin/systemctl restart nginx”的配置意思是只允許指定用戶以root身份執(zhí)行systemctl restart nginx而不是所有命令。平時自己用sudo不覺得什么但一旦服務(wù)器上存在多個使用者或服務(wù)賬號無腦ALL(ALL:ALL) ALL等于把root權(quán)限發(fā)給所有人??梢栽谧约旱臋C(jī)器上跑一下sudo -l看看當(dāng)前賬號到底被授權(quán)了哪些命令往往結(jié)果比你想象的多。最小權(quán)限說起來是安全口號落到命令上其實(shí)就一句話能不給就不給能限定就限定。4. 網(wǎng)絡(luò)與進(jìn)程排查一臺服務(wù)器變慢時該看什么4.1 端口被占用時先別急著kill服務(wù)起不來是高頻故障最經(jīng)典的一句話是“address already in use”。遇到這種情況第一反應(yīng)應(yīng)該是找出誰占用了端口而不是盲目重啟或者kill一串進(jìn)程。ss -tlnp | grep 8080這條命令參數(shù)含義-t只看TCP-l只看監(jiān)聽中的端口-n不做名字解析-p顯示進(jìn)程信息。輸出里能看到占用8080的進(jìn)程名和PID。如果系統(tǒng)沒有ss舊一些的機(jī)器用netstat -tlnp效果一樣。lsof -i:8080也可以。找到PID后需要先判斷這個進(jìn)程是否還有用如果是舊版本服務(wù)沒退干凈可以正常kill如果是其他業(yè)務(wù)進(jìn)程貿(mào)然kill就會引發(fā)新故障。我見過有人為了啟動自己的服務(wù)把數(shù)據(jù)庫的連接端口進(jìn)程直接殺掉的事故。所以先看進(jìn)程名再確認(rèn)歸屬最后才動手。ss -tlnp | grep 8080 lsof -i:8080端口連通性測試不要只靠ping。ping測的是ICMP只能說明主機(jī)網(wǎng)絡(luò)通不通不能說明某個端口的服務(wù)是否正常。要測試TCP端口就用nc -zv 127.0.0.1 3306-z表示只掃描不發(fā)送數(shù)據(jù)-v顯示詳細(xì)結(jié)果返回succeeded就說明端口開著。curl可以進(jìn)一步驗(yàn)證HTTP服務(wù)curl -i http://127.0.0.1:8080/health查看響應(yīng)頭curl -o /dev/null -s -w connect%{time_connect}s total%{time_total}s\n http://127.0.0.1:8080/把響應(yīng)體丟棄只輸出連接耗時和總耗時用來快速判斷服務(wù)是不是變慢了。nc -zv 127.0.0.1 3306 curl -i http://127.0.0.1:8080/health curl -o /dev/null -s -w connect%{time_connect}s total%{time_total}s\n http://127.0.0.1:8080/4.2 一鏈命令快速判斷CPU、內(nèi)存、磁盤、IO服務(wù)器變慢很多人第一反應(yīng)是看top但top的信息密度高對新手不友好。我的排查習(xí)慣是先跑一條組合命令拿輪廓uptime free -h df -h。uptime看load average三個數(shù)字分別代表1分鐘、5分鐘、15分鐘的平均負(fù)載。如果1分鐘遠(yuǎn)大于15分鐘說明負(fù)載是近段時間才漲起來的如果三個數(shù)都高說明已經(jīng)持續(xù)一段時間了。free -h重點(diǎn)看available這一列不是看free那一列因?yàn)閎uff/cache在系統(tǒng)內(nèi)存壓力大時是可以釋放的。df -h是磁盤空間再跑df -i檢查inode。拿到輪廓后根據(jù)嫌疑分支細(xì)看CPU用top內(nèi)存用free磁盤用dfIO用iostat -x 1 2重點(diǎn)看util和await。排查目標(biāo)命令重點(diǎn)看什么CPUtop -bn1 | head -20load、us/sy、id內(nèi)存free -havailable、swap使用磁盤df -h / df -i空間、inodeIOiostat -x 1 2util、awaittop里有個容易忽略的細(xì)節(jié)如果load很高但CPU的us/sy都不高id也還有富余那大概率不是CPU運(yùn)算瓶頸而是在等IO。等IO時wa列會明顯偏高這時候要轉(zhuǎn)向iostat -x看磁盤util和await。反過來如果CPU的us接近100%才是真正的CPU密集。配合watch -n 1 free -h; df -h; uptime可以每1秒刷新一次適合在復(fù)現(xiàn)問題時掛一個觀察窗口。排查性能問題最忌諱憑感覺猜先拿數(shù)據(jù)定位再用命令驗(yàn)證順序?qū)α诵首匀痪透吡恕?. 進(jìn)程管理與定時任務(wù)讓事情按計劃運(yùn)行5.1 看進(jìn)程狀態(tài)、安全退出與后臺任務(wù)進(jìn)程管理聽起來簡單但有幾個狀態(tài)和信號的含義不清楚的話容易被表象誤導(dǎo)。ps -ef | grep nginx可以看進(jìn)程是否存在ps aux --sort-%cpu | head -5能按CPU占用排序快速找出誰在消耗資源。STAT列里的狀態(tài)字符要會看R是運(yùn)行中、S是睡眠、D是不可中斷睡眠通常是在等IO、Z是僵尸進(jìn)程。D狀態(tài)進(jìn)程靠kill是殺不掉的因?yàn)樗ㄔ贗O等待里Z狀態(tài)進(jìn)程本身已經(jīng)不消耗資源但需要它的父進(jìn)程去回收先處理父進(jìn)程才能弄干凈。ps -ef | grep nginx ps aux --sort-%cpu | head -5退出進(jìn)程時信號選擇有講究。kill -TERM 1234先請求進(jìn)程正常退出kill -KILL 1234是強(qiáng)制結(jié)束屬于最后手段。kill默認(rèn)發(fā)TERM讓進(jìn)程自己處理收尾工作只有進(jìn)程死活不退時才考慮用KILL因?yàn)镵ILL直接讓內(nèi)核終止它來不及釋放資源。把kill -9當(dāng)作第一選擇是一種很不好的習(xí)慣。后臺運(yùn)行一個長任務(wù)常見寫法是nohup /opt/start.sh run.log 21 。nohup讓進(jìn)程忽略掛斷信號讓它在后臺運(yùn)行21把標(biāo)準(zhǔn)錯誤也定向到同一個日志文件這個位置不能寫反。寫反了日志還是會打到屏幕上而且后臺任務(wù)一旦輸出過多還可能失控。kill -TERM 1234 kill -KILL 1234 nohup /opt/start.sh run.log 21 日常管理服務(wù)優(yōu)先用systemdsystemctl start nginx啟動systemctl enable --now nginx設(shè)置開機(jī)自啟并立即啟動systemctl status nginx查看狀態(tài)journalctl -u nginx -n 50查日志。enable和start是兩個動作想一步到位就用enable --now。凡是能用systemd管理的服務(wù)就不建議自己寫nohup腳本一是自啟難保證二是日志、狀態(tài)管理不如systemd規(guī)范。5.2 crontab定時任務(wù)寫對格式、躲開那些坑定時任務(wù)是Linux用來“自動干活”的主要方式。crontab語法不復(fù)雜一句話五個星號依次是分、時、日、月、周后面跟命令。30 2 * * * /opt/backup.sh /var/log/backup.log 21表示每天凌晨2點(diǎn)30分執(zhí)行備份腳本并把輸出追加到日志文件0 10 * * 1 /opt/clean_tmp.sh表示每周一10點(diǎn)執(zhí)行*/5 * * * * /opt/check.sh每5分鐘執(zhí)行一次。寫定時任務(wù)最怕的是環(huán)境變量問題cron執(zhí)行時的PATH極簡可能連/usr/local/bin都不包含腳本里用到命令就用絕對路徑或者在腳本開頭export PATH。另外百分號%在crontab里有特殊含義用在date命令里要轉(zhuǎn)義或干脆把邏輯寫進(jìn)腳本腳本本身沒有執(zhí)行權(quán)限crontab直接執(zhí)行也會失敗不重定向輸出時錯誤信息容易丟失。所以每一條定時任務(wù)都要寫上重定向到日志文件。30 2 * * * /opt/backup.sh /var/log/backup.log 21 0 10 * * 1 /opt/clean_tmp.sh */5 * * * * /opt/check.sh排錯時先看當(dāng)前用戶的定時任務(wù)crontab -l。服務(wù)日志里經(jīng)常能撈到執(zhí)行記錄journalctl -u crond --since 10 minutes ago。我排查過幾次定時任務(wù)不執(zhí)行最終原因五花八門腳本路徑寫錯、腳本里用了相對路徑、權(quán)限不對、還有時區(qū)問題?;舅悸肪鸵粭l先確認(rèn)任務(wù)有沒有被觸發(fā)再確認(rèn)腳本執(zhí)行報什么錯。不要一上來就懷疑crontab本身。6. 日志查看與日常效率技巧磨刀不誤砍柴工6.1 正確看日志的方式以及l(fā)ogrotate的作用看正在寫的日志新手最容易用tail -f /var/log/app.log。less F /var/log/app.log和tail -f類似但它多了一個優(yōu)勢可以隨時按CtrlC暫停用/搜索關(guān)鍵字看完按q退出。排查問題的時候經(jīng)常需要在跟蹤和搜索之間切換less F比tail靈活不少。看systemd管理的服務(wù)日志用journalctl -u nginx -n 100 --since 1 hour ago查看最近100條、最近1小時的日志journalctl -xe快速查看最近的錯誤上下文。日志輪轉(zhuǎn)logrotate是另一個容易忽略的點(diǎn)日志如果不做輪轉(zhuǎn)幾個月下來就是一個幾十G的文件占用磁盤還很難打開。標(biāo)準(zhǔn)做法是寫一個logrotate配置daily表示每天輪轉(zhuǎn)一次rotate 7保留最近7份compress是壓縮舊日志delaycompress讓壓縮延遲一天再執(zhí)行。寫完用logrotate -d /etc/logrotate.d/myapp做debug驗(yàn)證。tail -f /var/log/app.log less F /var/log/app.log journalctl -u nginx -n 100 --since 1 hour ago journalctl -xe/var/log/myapp/*.log { daily rotate 7 compress delaycompress missingok }這里有個大坑不要手動mv日志文件就完事。進(jìn)程一直持有舊日志文件的文件描述符你mv走了舊文件進(jìn)程依然往舊inode里寫磁盤空間根本不會釋放。正確的做法是讓logrotate管理或者配置里加上copytruncate或者輪轉(zhuǎn)后主動通知進(jìn)程重開日志文件。這個坑我在線上環(huán)境踩過一次當(dāng)時日志文件mv走之后磁盤占用紋絲不動排查了很久才發(fā)現(xiàn)是進(jìn)程還攥著舊文件描述符。6.2 軟鏈接、硬鏈接與幾個提效小習(xí)慣最后說幾個影響日常手感的小操作。軟鏈接和硬鏈接經(jīng)常被混在一起講但實(shí)際區(qū)別要分清ln -s /data/app /opt/app_link創(chuàng)建軟鏈接類似快捷方式可以跨文件系統(tǒng)、可以指向目錄目標(biāo)被刪除后鏈接會變成紅鏈ln /data/file /backup/file_hard創(chuàng)建硬鏈接多個名字指向同一份數(shù)據(jù)只能在同一文件系統(tǒng)內(nèi)建立不能指向目錄刪除任何一個名字都不影響數(shù)據(jù)本身只有所有鏈接都刪掉inode才會釋放。用硬鏈接做快照式備份在特定場景下非常省空間兩個名字共用同一份數(shù)據(jù)不會真的復(fù)制一份。提效方面alias和history值得單獨(dú)花兩分鐘配置。把a(bǔ)lias llls -alF、alias grepgrep --colorauto和export HISTTIMEFORMAT%F %T 寫進(jìn)~/.bashrc再source一下日常操作會順暢很多。history有了時間戳回看歷史命令時就能知道哪條命令是什么時候執(zhí)行的。CtrlR是終端里搜索歷史命令的神器輸入幾個關(guān)鍵字就能把之前敲過的長命令拉回來。我在實(shí)際使用中還有一個習(xí)慣把常用但復(fù)雜的查詢寫成小腳本放在~/bin目錄下然后加入PATH。比如針對本機(jī)自定義的服務(wù)日志過濾命令寫成腳本后一行命令搞定比每次反復(fù)翻h(huán)istory舒服得多。這個習(xí)慣堅持下來效率提升是實(shí)打?qū)嵉?。前面這幾篇學(xué)習(xí)日志下來給我最大的體會不是記住了多少條命令而是遇到問題時能形成一個大概的排查順序先確認(rèn)現(xiàn)象再縮小范圍最后用命令驗(yàn)證。Linux的實(shí)用操作說到底是由大量小技巧拼起來的命令可以隨時查但排查思路和操作習(xí)慣是慢慢攢出來的。就像這次處理磁盤和日志問題用的都是眼前這幾條命令但因?yàn)樾睦镉许樞颥F(xiàn)場不亂問題解決得也快。后面如果還有機(jī)會我會繼續(xù)分享更多實(shí)際場景里的處理案例。