指南:從系統(tǒng)認知到高效運維)
1. 從新手到老手為什么你需要一份“活的”Ubuntu命令手冊剛接觸Ubuntu那會兒我總在幾個終端窗口之間手忙腳亂一個開著瀏覽器查命令一個在嘗試執(zhí)行還有一個可能因為輸錯了命令正在報錯。我相信這是很多人的共同經(jīng)歷。網(wǎng)上搜到的“Linux常用命令大全”動輒幾十上百條像一本厚重的字典但真到用時卻常常找不到最順手的那把“螺絲刀”。今天我不想再給你羅列一份冰冷的命令清單而是想和你聊聊在我十多年的運維和開發(fā)經(jīng)歷中哪些命令是真正高頻、實用并且能串聯(lián)起你日常工作的“活”命令。這份經(jīng)驗不是從手冊里抄來的而是從無數(shù)次解決問題、優(yōu)化流程中沉淀下來的。無論你是剛裝好Ubuntu雙系統(tǒng)的新手還是在WSL2下搭建開發(fā)環(huán)境的程序員或是需要管理服務器的運維掌握這些核心命令及其背后的使用邏輯遠比死記硬背一百條命令更有價值。2. 系統(tǒng)認知與狀態(tài)探查首先你得知道“我在哪”和“它怎么樣”在開始任何操作之前了解你的系統(tǒng)環(huán)境和當前狀態(tài)是第一步。這就像開車前要看一眼油表和導航盲目操作很容易“翻車”。2.1 系統(tǒng)信息一覽快速建立整體認知當你接手一臺新服務器或者剛裝好一個Ubuntu系統(tǒng)第一件事就是全面了解它。neofetch是一個兼具實用性與美觀的工具它能以清晰的ASCII藝術(shù)字顯示系統(tǒng)Logo并并列出版本、內(nèi)核、桌面環(huán)境、終端等核心信息讓你一眼就對系統(tǒng)有個整體印象。如果沒安裝用sudo apt install neofetch裝上它。但更多時候我們需要更原始、更底層的信息。這時一系列經(jīng)典的命令就派上用場了uname -a這是查看內(nèi)核信息的“瑞士軍刀”。-a參數(shù)會輸出所有信息包括內(nèi)核名稱Linux、主機名、內(nèi)核發(fā)行版本、內(nèi)核版本、機器硬件架構(gòu)x86_64, aarch64等等。在判斷系統(tǒng)架構(gòu)以安裝對應軟件包比如是選amd64.deb還是arm64.deb時這個命令至關(guān)重要。lsb_release -a專門用于查看Linux標準基礎(chǔ)LSB和發(fā)行版的具體信息。它會清晰地告訴你發(fā)行版描述如“Ubuntu 22.04.3 LTS”、發(fā)行版ID、代號Jammy Jellyfish、描述等。比單純看/etc/issue或/etc/os-release文件更直觀。hostnamectl在使用了systemd的現(xiàn)代Ubuntu系統(tǒng)上這個命令是管理主機名和相關(guān)設置的權(quán)威。執(zhí)行它可以查看靜態(tài)主機名、圖標名稱、機器ID、啟動ID、操作系統(tǒng)、內(nèi)核以及架構(gòu)等信息。修改主機名也可以用它sudo hostnamectl set-hostname new-name。注意在虛擬機或云服務器環(huán)境下hostname命令返回的可能是類似ip-172-31-xx-xx這樣的內(nèi)部主機名這與hostnamectl看到的可能不同了解這一點對網(wǎng)絡排查有幫助。2.2 資源監(jiān)控實時掌握系統(tǒng)“健康度”系統(tǒng)卡頓了程序跑滿了CPU內(nèi)存快用光了你需要動態(tài)監(jiān)控工具。全能監(jiān)控面板htoptop命令家喻戶曉但我強烈推薦它的增強版——htop。它提供了彩色界面、鼠標支持、垂直和水平滾動視圖讓你能直觀地看到CPU每個核心的使用率。內(nèi)存和交換分區(qū)的使用情況。按照CPU、內(nèi)存等資源使用率排序的進程列表。樹狀視圖顯示進程關(guān)系按F5。直接選中進程進行殺進程F9、調(diào)整優(yōu)先級F7/F8等操作。 安裝命令sudo apt install htop。使用htop后你幾乎不會再想用回樸素的top。磁盤空間管家df與dudf -h查看文件系統(tǒng)磁盤空間使用情況。-h參數(shù)代表“人類可讀”用G、M等單位顯示一目了然。經(jīng)常用它檢查根目錄/或/home是否快滿了。du -sh 目錄路徑查看某個特定目錄或文件占用的磁盤空間大小。-s是總結(jié)-h是人類可讀。例如du -sh /var/log可以快速知道日志目錄占了多大空間。想找出當前目錄下哪個子目錄最大可以用du -sh * | sort -rh | head -10這個組合拳非常實用。網(wǎng)絡連接洞察ss與ip老牌的netstat命令正在被功能更強大的sssocket statistics取代。ss速度更快信息顯示更直接。ss -tulnp這個組合是我最常用的。-t查看TCP-u查看UDP-l僅顯示監(jiān)聽中的套接字-n以數(shù)字形式顯示端口和地址不解析域名-p顯示使用該套接字的進程。一眼就能看清系統(tǒng)上哪些端口正在被監(jiān)聽以及是哪個進程占用的排查端口沖突時極其有用。ip addr show或ip a這是取代ifconfig的現(xiàn)代命令。用于查看和配置網(wǎng)絡接口、IP地址、MAC地址等信息。輸出更規(guī)整功能也更強大。3. 文件與目錄操作終端下的“文件管理器”在終端下高效地操作文件是使用Ubuntu的基本功。這些命令的組合使用能讓你擺脫圖形界面的束縛。3.1 導航、查看與創(chuàng)建pwd打印當前工作目錄。別笑在復雜的目錄跳轉(zhuǎn)后你很可能忘記身在何處。ls列出目錄內(nèi)容。光是這個命令就有無數(shù)技巧ls -la我最常用的組合。-l長格式顯示詳細信息權(quán)限、所有者、大小、時間-a顯示所有文件包括以.開頭的隱藏文件。權(quán)限欄的第一個字符是文件類型-普通文件d目錄l鏈接等。ls -lh-h與-l結(jié)合將文件大小以K、M、G顯示。ls -ltr按時間反向排序-t時間排序-r反向最新修改的文件在最后方便查看。cd切換目錄。cd ~回家目錄cd -回到上一個目錄cd ..向上級。mkdir -p dir1/dir2/dir3創(chuàng)建目錄。-p參數(shù)的神奇之處在于可以一次性創(chuàng)建多級嵌套目錄如果中間目錄不存在會自動創(chuàng)建。touch filename創(chuàng)建一個新的空文件或者更新一個已存在文件的時間戳。3.2 復制、移動與刪除謹慎操作的力量這部分命令威力巨大用錯可能導致數(shù)據(jù)丟失務必小心。cp復制。cp source dest基本復制。cp -r source_dir dest_dir遞歸復制整個目錄。cp -i source dest交互模式覆蓋前詢問。強烈建議新手通過alias cpcp -i將cp默認設置為交互模式可以放在~/.bashrc中。mv移動或重命名。mv oldname newname就是重命名。它同樣沒有回收站移動即覆蓋。rm刪除。這是最需要警惕的命令之一。rm file刪除文件。rm -r directory遞歸刪除目錄及其內(nèi)容。rm -rf directory-f強制刪除不提示。這是一個危險命令尤其是rm -rf /或rm -rf *在錯誤路徑下執(zhí)行會釀成災難。對于rm也可以考慮設置別名alias rmrm -i。實操心得在執(zhí)行任何rm -rf操作尤其是通配符*操作前先執(zhí)行一次ls命令確認當前目錄下的文件。比如你想刪除/tmp/下所有以.log結(jié)尾的文件先cd /tmp然后ls *.log看看是不是你要刪的那些確認無誤后再rm *.log。多這一步能避免99%的誤刪悲劇。3.3 查看與編輯文件內(nèi)容cat連接文件并打印到標準輸出。適合查看較小的文件內(nèi)容如cat /etc/hosts。less/more分頁查看大文件。less比more更強大支持前后翻頁、搜索按/然后輸入關(guān)鍵詞、跳轉(zhuǎn)到行首g行尾G。查看日志文件的首選。head/tail查看文件開頭或結(jié)尾部分。tail -f /var/log/syslog“追蹤”模式實時顯示文件新增的內(nèi)容。這是監(jiān)控日志文件動態(tài)的終極利器調(diào)試程序時不可或缺。按CtrlC退出。nano/vim文本編輯器。nano簡單易用適合新手。vim功能強大但學習曲線陡峭。對于快速編輯配置文件掌握vim的基礎(chǔ)操作i插入Esc退出插入模式:wq保存退出:q!不保存強制退出會極大提升效率。4. 權(quán)限、用戶與進程管理系統(tǒng)的“保安”與“調(diào)度員”Linux是一個多用戶系統(tǒng)權(quán)限管理是核心安全機制。進程則是正在運行的程序?qū)嵗?.1 理解并操控文件權(quán)限使用ls -l看到的類似-rwxr-xr--的字符串就是權(quán)限。它分為四段第一個字符文件類型-文件d目錄l鏈接。接下來三組rwx分別代表文件所有者user、所屬組group和其他用戶others的權(quán)限。r讀w寫x執(zhí)行對目錄而言是可進入。chmod修改文件權(quán)限。有兩種方式數(shù)字模式最常用r4,w2,x1。chmod 755 filename表示所有者有rwx4217組用戶有r-x4015其他用戶有r-x4015。755是腳本、可執(zhí)行程序的常見權(quán)限。符號模式chmod ux script.sh給所有者增加執(zhí)行權(quán)限。chmod go-w file移除組和其他用戶的寫權(quán)限。chown改變文件所有者和所屬組。sudo chown user:group filename。在部署Web服務如Nginx、Apache時經(jīng)常需要調(diào)整網(wǎng)站目錄的所有者以確保服務進程有權(quán)限讀寫。4.2 進程的操控查看、終止與后臺運行ps查看進程快照。ps aux是最常用的組合查看系統(tǒng)所有進程的詳細信息。通常我們會搭配grep來過濾ps aux | grep nginx。kill/pkill終止進程。kill PID向指定進程ID發(fā)送默認的TERM終止信號讓進程優(yōu)雅退出。kill -9 PID發(fā)送KILL信號強制立即終止進程。這是最后手段因為進程無法捕獲此信號可能造成數(shù)據(jù)丟失或狀態(tài)不一致。pkill 進程名根據(jù)進程名終止進程如pkill firefox。和nohup讓命令在后臺運行。在命令末尾加上如python3 app.py 命令會在后臺啟動但終端關(guān)閉后它也會終止。nohup python3 app.py nohup使進程忽略掛斷信號配合放到后臺即使退出終端進程也會繼續(xù)運行。輸出默認重定向到當前目錄的nohup.out文件。這是啟動長期運行服務如自己寫的腳本、Jupyter Notebook等的常用方式。jobs,fg,bg管理后臺作業(yè)。用啟動后臺作業(yè)后可以用jobs查看后臺作業(yè)列表。fg %1將1號后臺作業(yè)調(diào)到前臺運行。如果暫停了前臺作業(yè)按CtrlZ可以用bg %1將其放到后臺繼續(xù)運行。5. 軟件包管理系統(tǒng)的“應用商店”Ubuntu基于Debian使用APTAdvanced Package Tool這套強大的包管理系統(tǒng)。理解它你就能輕松安裝、更新、卸載幾乎所有軟件。5.1 APT核心命令流APT的工作流程通常是線性的非常清晰更新軟件源列表sudo apt update。這不是更新軟件本身而是從/etc/apt/sources.list配置的服務器下載最新的軟件包列表信息。在安裝任何新軟件前都應該先執(zhí)行此命令以確保獲取到最新的版本和依賴關(guān)系。升級已安裝的軟件包sudo apt upgrade。這會根據(jù)上一步獲取的列表將所有可升級的軟件包升級到最新版本。如果只想升級某一個特定軟件可以用sudo apt install --only-upgrade package_name。搜索軟件包apt search keyword。例如apt search docker會列出所有名稱或描述中包含docker的包。安裝軟件包sudo apt install package_name。例如安裝Vim編輯器sudo apt install vim。APT會自動處理依賴關(guān)系。卸載軟件包sudo apt remove package_name刪除軟件包但保留配置文件。sudo apt purge package_name徹底刪除軟件包及其配置文件。如果你想干凈地重裝某個軟件應該用purge。清理無用包sudo apt autoremove。自動刪除那些當初作為依賴被安裝但現(xiàn)在已不被任何程序需要的“孤兒”軟件包。定期運行可以釋放磁盤空間。5.2 處理安裝問題與PPA解決依賴問題有時安裝會失敗提示“依賴關(guān)系不滿足”??梢試L試sudo apt --fix-broken install來修復損壞的依賴或者sudo apt install -f。使用PPA個人軟件包存檔Ubuntu官方倉庫的軟件版本可能較舊。PPA允許開發(fā)者為自己或第三方軟件提供更新源。例如以前安裝新版Python或Git常需要添加PPA。添加PPAsudo add-apt-repository ppa:deadsnakes/ppa以Python PPA為例添加后務必執(zhí)行sudo apt update刷新列表然后再sudo apt install python3.11。注意事項PPA來源非官方需謹慎添加僅從可信的開發(fā)者或社區(qū)添加。6. 網(wǎng)絡相關(guān)操作連通內(nèi)外世界無論是配置網(wǎng)絡、下載文件還是調(diào)試服務網(wǎng)絡命令都必不可少。6.1 診斷與下載ping測試網(wǎng)絡連通性。ping -c 4 google.com發(fā)送4個ICMP包后停止。這是檢查能否訪問外網(wǎng)或內(nèi)網(wǎng)主機的最快方法。curl強大的網(wǎng)絡數(shù)據(jù)傳輸工具。用途極廣下載文件curl -O http://example.com/file.zip-O保留遠程文件名。測試APIcurl -X GET https://api.example.com/data。查看HTTP響應頭curl -I http://example.com。提交表單數(shù)據(jù)curl -X POST -d keyvalue http://example.com/form。wget另一個經(jīng)典的網(wǎng)絡下載器支持遞歸下載整個網(wǎng)站謹慎使用且下載中斷后可續(xù)傳-c參數(shù)。wget更專注于下載任務本身。6.2 端口與服務排查netstat/ss如前所述ss -tulnp是查看監(jiān)聽端口的首選。lsof列出打開的文件。在Linux中“一切皆文件”網(wǎng)絡連接也是文件。lsof -i :80可以查看誰正在使用80端口功能非常強大。systemctl管理系統(tǒng)服務守護進程的核心命令。這是systemd時代的標配。sudo systemctl start nginx啟動Nginx服務。sudo systemctl stop nginx停止服務。sudo systemctl restart nginx重啟服務。sudo systemctl enable nginx設置開機自啟。sudo systemctl disable nginx禁用開機自啟。sudo systemctl status nginx查看服務狀態(tài)這是最常用的命令之一它會顯示服務是否活躍、運行時間以及最近的日志片段。7. 文本處理三劍客grep, sed, awk這是Shell編程和日常文本處理的靈魂工具組合使用能解決非常復雜的問題。7.1 grep全局搜索正則表達式用于在文件中搜索匹配模式的文本行。grep error /var/log/syslog在系統(tǒng)日志中查找包含“error”的行。grep -r function_name /path/to/code/-r遞歸搜索目錄下的所有文件。grep -i warning file.log-i忽略大小寫。grep -v INFO file.log-v反向選擇輸出不包含“INFO”的行。grep -E error|warning|critical file.log-E使用擴展正則表達式匹配“error”或“warning”或“critical”。7.2 sed流編輯器用于對文本進行過濾和轉(zhuǎn)換。它按行處理非常適合執(zhí)行替換、刪除、插入等操作。sed s/old/new/g file.txt將文件中所有的“old”替換為“new”。s表示替換g表示全局一行內(nèi)所有匹配。這個命令只輸出到屏幕不修改原文件。sed -i s/old/new/g file.txt-i參數(shù)會直接修改原文件務必先備份或確認無誤。sed -n 10,20p file.txt只打印文件的第10到20行。刪除空行sed /^$/d file.txt。7.3 awk文本分析報告生成器比sed更強大它本身幾乎是一門編程語言擅長處理結(jié)構(gòu)化文本如CSV、日志。awk {print $1} file.txt打印每行的第一個字段默認以空格或制表符分隔。awk -F, {print $2} data.csv-F,指定逗號為字段分隔符打印第二列。awk $3 100 {print $0} data.txt如果第三列的值大于100則打印整行$0。統(tǒng)計日志中每個IP的訪問次數(shù)awk {print $1} access.log | sort | uniq -c | sort -nr。這個管道組合是日志分析的經(jīng)典案例awk提取IP列sort排序uniq -c計數(shù)sort -nr按計數(shù)倒序排列。8. 歸檔與壓縮打包與解包的藝術(shù)在服務器間傳輸文件、備份數(shù)據(jù)時壓縮是基本操作。tar打包命令本身不壓縮只是將多個文件/目錄合并成一個.tar文件。創(chuàng)建歸檔tar -cvf archive.tar /path/to/folderc創(chuàng)建v顯示過程f指定文件名。解壓歸檔tar -xvf archive.tarx解壓。查看內(nèi)容tar -tvf archive.tart列出內(nèi)容。壓縮tar常與壓縮工具結(jié)合使用。.tar.gz(或.tgz)tar -czvf archive.tar.gz /path/to/folderz調(diào)用gzip壓縮。解壓tar -xzvf archive.tar.gz。.tar.bz2tar -cjvf archive.tar.bz2 /path/to/folderj調(diào)用bzip2壓縮壓縮率更高速度稍慢。解壓tar -xjvf archive.tar.bz2。.tar.xztar -cJvf archive.tar.xz /path/to/folderJ調(diào)用xz壓縮壓縮率最高。解壓tar -xJvf archive.tar.xz。zip/unzip處理常見的.zip格式。壓縮zip -r archive.zip folder/-r遞歸處理目錄。解壓unzip archive.zip。9. 環(huán)境變量與Shell定制打造你的個性化工作流環(huán)境變量是系統(tǒng)和程序運行的配置信息而Shell定制能讓你效率倍增。echo $PATH查看最重要的環(huán)境變量PATH它定義了系統(tǒng)查找可執(zhí)行文件的目錄列表。export VARIABLEvalue設置環(huán)境變量僅對當前Shell會話有效。例如export JAVA_HOME/usr/lib/jvm/java-11-openjdk。要永久生效需要將export行添加到Shell的配置文件中對當前用戶~/.bashrc針對bash。對所有用戶/etc/profile或/etc/environment。修改后執(zhí)行source ~/.bashrc使其立即生效。alias命令別名是提升效率的利器??梢詫㈤L命令簡化為短命令。alias llls -la這是我必設的別名。alias updatesudo apt update sudo apt upgrade將更新升級合并為一個命令。同樣將別名定義放入~/.bashrc中即可永久使用。10. 實操場景串聯(lián)從問題到解決的真實命令流理論說了很多我們通過幾個真實場景把這些命令串起來用。場景一服務器磁盤空間告警排查ssh userserver_ip連接到遠程服務器。df -h確認哪個分區(qū)使用率過高比如/或/var使用率 90%。cd /var進入疑似占滿的目錄。du -sh * | sort -rh | head -10找出該目錄下占用空間最大的前10個子目錄。假設發(fā)現(xiàn)是/var/log日志目錄過大進入cd /var/log。ls -lh *.log查看大日志文件或用find . -name *.log -size 100M查找大于100M的日志文件。確認日志可清理后sudo truncate -s 0 large-app.log清空某個大日志文件保留文件屬性或者sudo rm old-app.log刪除舊日志。對于正在寫入的日志清空比重命名或刪除更安全。再次執(zhí)行df -h確認空間已釋放。場景二部署一個Python應用并后臺運行g(shù)it clone https://github.com/example/myapp.git克隆代碼。cd myappsudo apt update sudo apt install python3-pip安裝pip。pip3 install -r requirements.txt安裝Python依賴。nano config.yaml編輯配置文件假設需要。測試運行python3 app.py確保無報錯后按CtrlC停止。使用nohup后臺運行nohup python3 app.py app.log 21 。這個命令的意思是忽略掛斷信號將標準輸出和標準錯誤都重定向到app.log文件并在后臺運行。檢查是否運行ps aux | grep python3應該能看到你的應用進程。查看實時日志tail -f app.log。如果想停止它先用ps aux | grep python3找到進程IDPID然后kill PID。命令的學習不在于背誦而在于理解其設計哲學和組合邏輯。最好的學習方法就是給自己設定一個實際的任務然后嘗試用命令行去完成它。遇到問題就查多用man command如man grep查看官方手冊你會逐漸發(fā)現(xiàn)在黑色終端窗口里你掌控著整個系統(tǒng)的脈搏。