指南:從入門到系統(tǒng)救急)
上次幫同事救一臺連桌面都進不去的Ubuntu服務(wù)器遠程敲了半小時命令就把系統(tǒng)盤數(shù)據(jù)撈了回來。對方在電話里感嘆了一句“原來命令行才是這系統(tǒng)的靈魂啊。”這話我特別認同。很多人裝完Ubuntu就一直在圖形界面里點來點去遇到鼠標失效、輸入法罷工、源報404這種破事就徹底抓瞎。其實Ubuntu的很多日常操作用命令處理反而更快、更穩(wěn)、更可控。這篇指南就是照著“從入門到精通”的路線寫的意義很簡單把命令當(dāng)成你操控Ubuntu的手不是背字典。內(nèi)容覆蓋裝機、用戶管理、文件操作、網(wǎng)絡(luò)配置、環(huán)境變量、GPU驅(qū)動、Docker乃至系統(tǒng)救急全部以命令為主線串起來每一條都附上我實測過的使用場景和翻車教訓(xùn)。適合剛接觸Ubuntu的新手也適合裝完雙系統(tǒng)或虛擬機后想老老實實把命令補起來的玩家。1. 為什么要系統(tǒng)學(xué)Ubuntu命令從一次差點“刪庫”的教訓(xùn)說起1.1 命令行的核心優(yōu)勢不是“炫”而是可控可復(fù)用先講個我自己的翻車經(jīng)歷。早年間剛用Ubuntu的時候圖形界面里刪軟件右鍵刪除完以為就干凈了后來發(fā)現(xiàn)磁盤越用越滿連系統(tǒng)更新都失敗。查了一圈才知道圖形卸載并不會清理遺留的配置文件、緩存和依賴。人肉刪文件更是災(zāi)難有一次在home目錄里隨手rm -rf一個文件夾把整個用戶的配置目錄連窩端了桌面直接白屏折騰了一整天才恢復(fù)。命令行之所以值得系統(tǒng)學(xué)不是因為它看起來像黑客電影而是它給了你兩樣圖形界面給不了的東西可控性每條命令做了什么、輸出什么一目了然出錯也知道錯在哪一步??芍貜?fù)性同樣一串命令這次能跑通下次、換臺機器、過半年再跑結(jié)果一樣。圖形界面點出來的操作復(fù)現(xiàn)路徑跟運氣有關(guān)。我后來養(yǎng)成的習(xí)慣是凡是需要做兩次以上的操作全部寫成命令甚至Shell腳本。比如重裝系統(tǒng)后要裝的那批軟件一條apt install命令帶一長串包名搞定比逐個軟件商店點安裝省下大量時間。1.2 命令結(jié)構(gòu)沒你想的那么難拆開就三部分很多人一看到一大串命令就頭大其實所有命令的骨架都一樣命令名 選項 參數(shù)。以最常用的為例ls -la /home/userls是命令名表示列出目錄內(nèi)容-la是選項-l表示長格式輸出-a表示顯示隱藏文件/home/user是參數(shù)告訴命令操作哪個對象。學(xué)習(xí)時不需要背幾百個命令抓住高頻核心的那二三十個配合兩個自學(xué)命令就足夠撐起日常man ls # 查看ls的完整手冊 ls --help # 快速查看用法摘要實操建議遇到不懂的命令不要慌先跑--help它是命令作者寫給使用者的速查卡比在網(wǎng)上翻教程快得多。需要深入理解某個命令的全部細節(jié)再翻man手冊。這是命令行世界的基本生存技能。1.3 入門第一課裝完系統(tǒng)后先跑這幾條命令如果你剛裝好Ubuntu不管是在真機、虛擬機還是WSL里我建議先敲一遍下面這組命令它們會告訴你這臺機器的基本家底whoami # 當(dāng)前登錄用戶 pwd # 當(dāng)前所在目錄 uname -a # 內(nèi)核版本和系統(tǒng)架構(gòu) lsb_release -a # Ubuntu發(fā)行版版本號 free -h # 內(nèi)存使用情況 df -h # 磁盤分區(qū)及剩余空間我剛開始用的時候覺得這些命令“沒什么用”后來才發(fā)現(xiàn)它們是排查問題的起點。比如lsb_release -a能立刻確認你裝的是24.04 LTS還是22.04很多軟件源、教程都區(qū)分版本先用它自報家門可以避開一堆版本不匹配的坑。free -h和df -h則能快速判斷系統(tǒng)卡頓到底是內(nèi)存爆了還是磁盤滿了省下在圖形界面里翻半天的工夫。2. 裝機與源配置從ISO到軟件源不報404的核心命令2.1 制作啟動盤和校驗鏡像的實操命令安裝Ubuntu本身不難但很多人倒在了第一步——制作啟動盤時圖省事直接拷貝ISO文件到U盤結(jié)果引導(dǎo)不了。正確姿勢是用工具寫入比如Linux下直接用dd命令sudo dd ifubuntu-24.04-desktop-amd64.iso of/dev/sdb bs4M statusprogressif指定輸入文件也就是ISO鏡像of指定輸出設(shè)備這里是U盤設(shè)備文件注意是/dev/sdb而不是/dev/sdb1后者是分區(qū)不是整個設(shè)備bs4M表示每次讀寫4MB加快速度statusprogress會顯示寫入進度。這條命令破壞性極強of寫錯設(shè)備會把整塊磁盤干廢。執(zhí)行前務(wù)必用lsblk確認U盤對應(yīng)的設(shè)備名。我每次都會在寫盤前跑一遍lsblk核對容量和掛載點才放心。更穩(wěn)妥的做法是用官方推薦的balenaEtcher之類的寫盤工具圖形界面選鏡像、選U盤、點寫入邏輯和dd一樣但直觀很多。寫完盤后強烈建議校驗一遍鏡像完整性echo SHA256校驗值 ubuntu-24.04-desktop-amd64.iso | sha256sum -c校驗值在Ubuntu官網(wǎng)下載頁面旁邊就能找到鏡像在下載過程中損壞的情況其實比想象中常見不校驗直接安裝翻車概率會高不少。2.2 apt源配置404問題的根源與修復(fù)方式熱搜詞里出現(xiàn)“ubuntu更新源404問題處理”這基本是每個新手都會撞上的墻。這里先講根源Ubuntu的軟件源地址寫死在/etc/apt/sources.list以及/etc/apt/sources.list.d/目錄下的文件里。如果你的源指向的路徑在服務(wù)器上已經(jīng)不存在比如Ubuntu版本升級后舊源被清理或者你用了某個第三方PPA而它停止維護apt update就會給你報一串404。常用的官方源在服務(wù)器上其實是有固定路徑結(jié)構(gòu)的比如http://archive.ubuntu.com/ubuntu/里面的目錄按發(fā)行版代號組織noble對應(yīng)24.04jammy對應(yīng)22.04。如果你系統(tǒng)版本從22.04升級到24.04但源文件里還寫著一堆jammy自然就404。修復(fù)方法很簡單打開源文件看路徑cat /etc/apt/sources.list看到j(luò)ammy但系統(tǒng)其實已經(jīng)升到24.04就需要把代號改掉。更省事的方案是直接用發(fā)行版自帶的“軟件更新器”里的“設(shè)置”界面選鏡像源或者手動把源文件整體替換為當(dāng)前版本的官方路徑。在中國大陸網(wǎng)絡(luò)環(huán)境下我一般建議把源切成清華或阿里云的鏡像速度快且穩(wěn)定。手動替換核心命令是這樣sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list這里用到了sed做批量文本替換把archive.ubuntu.com換成阿里云鏡像域名這就是命令行的魅力——一條正則表達式解決圖形界面里需要手動改幾十行文本的苦差事。改完記得sudo apt update只有apt update不報錯后面裝軟件才能順利。2.3 中文輸入法fcitx5安裝與切換命令中文輸入法也是高頻熱搜詞。我給Ubuntu裝中文輸入法現(xiàn)在一律推薦fcitx5框架它比老舊的ibus在中文場景下順手得多。安裝命令sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-config-qt安裝完成后不急著重啟先設(shè)置環(huán)境變量讓系統(tǒng)默認走fcitx5im-config -n fcitx5然后注銷重新登錄在fcitx5配置界面里添加拼音輸入法。這一步我踩過坑——裝完輸入法如果不執(zhí)行im-config -n fcitx5系統(tǒng)還是走ibus裝了個寂寞。命令行在這里的價值就是明確告訴你“當(dāng)前輸入法框架是哪一套”排查問題時有據(jù)可循。如果偏好搜狗輸入法官方對Ubuntu 24.04的支持目前不算順滑我反而建議用fcitx5配系統(tǒng)自帶的拼音詞庫和流暢度已經(jīng)足夠日常使用。2.4 gnome-software與apt的關(guān)系軟件從哪來熱搜詞里有“ubuntu微信”“ubuntu安裝”等新手最容易犯的錯是在網(wǎng)上隨便下個.deb雙擊安裝然后發(fā)現(xiàn)依賴缺失一堆鐵銹。這里先理清關(guān)系Ubuntu圖形界面的“軟件商店”GNOME Software后端其實也是apt只是幫你在前臺封裝了一層。安裝微信這類國內(nèi)軟件時我建議從官網(wǎng)下載對應(yīng)的.deb包然后用sudo apt install ./wechat.deb注意./前綴它能明確告訴apt“這是本地文件但從依賴倉庫里解析依賴關(guān)系”比雙擊安裝可靠得多。如果提示依賴不滿足先跑sudo apt --fix-broken install修一遍再裝目標包。3. 文件、權(quán)限與進程管理日常高頻命令的組合打法3.1 查找與批量操作find grep xargs的黃金組合文件操作是命令行的基本功。很多人在圖形界面的文件管理器里找一個文件不難但想“在所有文檔里搜索包含某個關(guān)鍵詞的文件”就傻眼了。命令行一行搞定grep -rn 目標關(guān)鍵詞 ~/Documents/-r表示遞歸搜索子目錄-n顯示行號。另一個高頻場景是“我忘了文件放哪了”用findfind ~ -name *.pdf -mtime -7表示在home目錄下找最近7天內(nèi)修改過的PDF文件。這里-name按文件名匹配-mtime -7按修改時間過濾兩個條件配合起來很實用。批量操作場景更顯示命令行的威力。比如要把某個目錄下所有.tmp后綴的臨時文件刪除find /tmp/cleanup -name *.tmp -exec rm -v {} \;-exec后面跟要執(zhí)行的命令和{}占位符\;表示命令結(jié)束。新手容易漏掉最后那個反斜杠分號導(dǎo)致報錯我當(dāng)年栽過一次。如果文件名里帶空格建議換成-delete參數(shù)find /tmp/cleanup -name *.tmp -delete3.2 權(quán)限模型rwx數(shù)字法一眼看懂Ubuntu的權(quán)限模型是“用戶-用戶組-其他”三段式每段用rwx表示讀、寫、執(zhí)行。ls -l輸出的第一列像這樣-rwxr-xr-- 1 user group 1024 Jan 10 10:00 script.sh拆解一下第一個字符-表示普通文件目錄是d然后每三個字符為一組分別是“屬主權(quán)限r(nóng)wx”“屬組權(quán)限r(nóng)-x”“其他人權(quán)限r(nóng)--”。數(shù)字法是對應(yīng)的二進制轉(zhuǎn)換r4、w2、x1三者相加。所以755表示屬主rwx4217屬組r-x4015其他r-x。修改權(quán)限和屬主是兩條高頻命令chmod 755 script.sh # 給腳本添加執(zhí)行權(quán)限 chown user:group file.txt # 修改文件屬主和屬組我經(jīng)常見到有人把腳本權(quán)限設(shè)成777所有人可讀寫執(zhí)行這在單機自用沒問題但在服務(wù)器上就是個風(fēng)險點。理想做法是755需要寫權(quán)限的目錄用775即可。理解這個模型比背幾條命令更有價值很多“明明有權(quán)限卻操作不了”的問題都是組權(quán)限沒給對。3.3 進程管理top、ps、kill與systemctl的分工系統(tǒng)卡了怎么辦第一反應(yīng)不是重啟而是抓出“吃CPU”的元兇。兩個命令配合使用top # 實時查看進程資源占用按q退出 ps aux # 靜態(tài)列出所有進程top界面里按P按CPU排序按M按內(nèi)存排序看到異常進程記下PID進程號然后處理它kill -9 1234 # 強制結(jié)束PID 1234的進程 pkill -f chrome # 按進程名匹配并結(jié)束kill -9是最后手段它不讓進程做任何清理直接干掉可能導(dǎo)致數(shù)據(jù)丟失。日常先用kill 1234發(fā)正常終止信號等幾秒沒反應(yīng)再上-9。這個習(xí)慣幫我避免過不少文件損壞。管理系統(tǒng)服務(wù)則是另一套命令因為Ubuntu采用systemd作為初始化系統(tǒng)systemctl status ssh # 查看SSH服務(wù)狀態(tài) systemctl restart ssh # 重啟SSH服務(wù) systemctl enable ssh # 設(shè)置開機自啟 systemctl disable ssh # 取消開機自啟3.4 網(wǎng)絡(luò)排查五連ip、ss、ping、curl、traceroute網(wǎng)絡(luò)故障排查有一套固定的命令鏈路我每次都是按這個順序來ip addr # 先看網(wǎng)卡有沒有IP地址 ping -c 4 網(wǎng)關(guān)IP # 再測局域網(wǎng)通不通 curl -I https://example.com # 然后測外網(wǎng)可達性IP都沒有問題大概率在DHCP或網(wǎng)卡驅(qū)動IP正常但ping不通網(wǎng)關(guān)可能網(wǎng)線或交換機的問題網(wǎng)關(guān)通了但外網(wǎng)不通再看路由表ip route和DNS配置。ss命令用來查看端口監(jiān)聽狀態(tài)比如檢查某個服務(wù)有沒有起作用ss -tlnp | grep 22這條會顯示當(dāng)前監(jiān)聽22端口的進程SSH連不上排查時先跑它比盲目重啟服務(wù)高效得多。4. 環(huán)境變量與Shell腳本從“敲命令”到“寫命令”4.1 環(huán)境變量配置錯誤的救急方案熱搜詞里有“ubuntu環(huán)境變量配置錯誤”這個坑我深有體會。環(huán)境變量文件分為系統(tǒng)級/etc/environment、/etc/profile和用戶級~/.bashrc、~/.profile。絕大多數(shù)教程建議把export PATH...寫在~/.bashrc里這是對的但一旦寫錯——比如漏了原有的$PATH把PATH覆蓋成了殘缺內(nèi)容——新開的終端會連ls、sudo都提示“command not found”。遇到這種局面我的第一反應(yīng)是“冷靜不要關(guān)當(dāng)前終端”因為當(dāng)前會話的PATH可能還正常。然后立即用絕對路徑調(diào)用命令/usr/bin/export PATH/usr/bin:/bin:/usr/sbin:/sbin先恢復(fù)出能用的PATH再vim ~/.bashrc把寫錯的行刪掉或改對。如果所有終端都被鎖死了也沒關(guān)系重啟機器后系統(tǒng)會重置環(huán)境登錄后立即修改~/.bashrc即可。這里有個關(guān)鍵認知PATH是“可執(zhí)行文件的搜索路徑”多個路徑用冒號分隔新增路徑時要保留原有的比如export PATH$PATH:$HOME/bin4.2 用uname和arch確認系統(tǒng)架構(gòu)避免裝錯軟件包“ubuntu查看系統(tǒng)架構(gòu)”這個熱搜詞提醒我很多人安裝軟件失敗根源就是下載了錯誤架構(gòu)的包。Ubuntu常見架構(gòu)是amd64Intel/AMD 64位、arm64ARM處理器和i386老舊的32位。查看當(dāng)前架構(gòu)用uname -m arch dpkg --print-architectureuname -m輸出x86_64表示amd64架構(gòu)aarch64表示arm64。下載.deb包或配置docker鏡像時一定要先跑這條命令確認架構(gòu)。我遇到過朋友在樹莓派ARM架構(gòu)上裝amd64的軟件包編譯到一半直接報“Illegal instruction”就是架構(gòu)不匹配。4.3 顯卡驅(qū)動查看與安裝從nvidia-smi到卸載不干凈的修復(fù)熱搜詞里“ubuntu查看顯卡驅(qū)動”“ubuntu安裝nvidia顯卡驅(qū)動”“ubuntu顯卡驅(qū)動卸載不掉”出現(xiàn)頻率很高。查看當(dāng)前是否已有NVIDIA驅(qū)動nvidia-smi如果提示找不到命令說明驅(qū)動沒裝或沒進PATH。推薦直接用系統(tǒng)自帶的驅(qū)動管理工具ubuntu-drivers devices它會列出當(dāng)前顯卡可用的驅(qū)動版本然后一鍵安裝推薦版本sudo ubuntu-drivers autoinstall這里我特別強調(diào)一個避坑點NVIDIA驅(qū)動安裝后如果卸載不干凈往往是因為手動安裝了官方.run包又沒加--uninstall參數(shù)。處理思路是進recovery模式先卸載所有NVIDIA相關(guān)包sudo apt purge nvidia-driver-* nvidia-*再清理無用內(nèi)核模塊sudo apt autoremove如果你用的是.run包還要執(zhí)行sudo nvidia-uninstall。文本模式下操作時注意先禁用圖形界面服務(wù)否則會報“X server正在運行”。一般切換到文本終端CtrlAltF3就能繼續(xù)。這些細節(jié)官網(wǎng)文檔不會細講但實際踩坑十次有九次栽在這。4.4 Docker安裝與常用命令docker run只是冰山一角“ubuntu安裝docker”也是不少人搜過的點。官方推薦的安裝方式是用Docker提供的腳本curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh安裝完成后重點處理的是權(quán)限問題默認情況下普通用戶執(zhí)行docker命令會提示權(quán)限不足。把當(dāng)前用戶加入docker組sudo usermod -aG docker $USER然后注銷重新登錄生效之后就能直接docker ps了。注意docker組權(quán)限等價于root只在可信用戶上添加別為圖省事把sudo拿去喂所有命令。日常高頻命令docker ps # 查看運行中的容器 docker ps -a # 查看所有容器含退出狀態(tài) docker images # 查看本地鏡像列表 docker pull ubuntu:24.04 # 拉取官方鏡像 docker run -it ubuntu:24.04 /bin/bash # 交互式運行容器 docker rm 容器ID # 刪除容器 docker rmi 鏡像ID # 刪除鏡像4.5 Shell腳本基礎(chǔ)循環(huán)、管道與定時任務(wù)能從“敲命令”跨到“寫命令”才算真正入門了。Shell腳本不難核心就是把你手工敲的命令按邏輯串起來。我舉一個真實的日常場景需要把~/photos目錄下所有.jpg文件按月份歸檔。先寫一個循環(huán)for photo in ~/photos/*.jpg; do month$(stat -c %y $photo | cut -d- -f1-2) mkdir -p ~/photos/$month mv $photo ~/photos/$month/ donestat -c %y取文件修改時間cut截取月份mkdir -p自動建目錄mv搬家。三行命令解決圖形界面里要手動挑半天的問題。把這些保存為organize.sh加執(zhí)行權(quán)限后就能反復(fù)用了。定時任務(wù)用cron實現(xiàn)。編輯當(dāng)前用戶的定時任務(wù)crontab -e比如每天凌晨2點備份某目錄0 2 * * * tar -czf /backup/home_$(date \%Y\%m\%d).tar.gz /home/user/Documents注意date命令里的%在cron中需要轉(zhuǎn)義寫\%否則cron會報錯。這個細節(jié)是我親眼看著同事在crontab里踩過去的。5. 高頻救急場景照著命令鏈路走別上來就重裝5.1 忘記登錄密碼的恢復(fù)思路“ubuntu忘記登錄密碼”幾乎是每個人都會不小心觸發(fā)一次的場景。方法不復(fù)雜重啟機器開機在GRUB菜單時快速按e進入編輯模式找到以linux開頭的那一行在行尾加上init/bin/bash然后按CtrlX啟動系統(tǒng)會直接進入root shell而不是正常登錄界面。接著重新掛載根分區(qū)為可寫狀態(tài)mount -o remount,rw / passwd 用戶名設(shè)置完新密碼后重啟即可。這里的關(guān)鍵就是init/bin/bash這一招它告訴你“系統(tǒng)可以被命令行完全接管”遇到圖形界面進不去的情況不要重裝先用這個思路救系統(tǒng)。5.2 SSH無法連接先看服務(wù)、端口、防火墻SSH連不上我建議按這個鏈路排查不要盲目重裝openssh-serversystemctl status sshd ip addr ss -tlnp | grep 22 sudo ufw status第一行確認服務(wù)是否在運行第二行看IP是否配好第三行確認22端口有沒有被監(jiān)聽第四行看防火墻有沒有放行。我這幾年幫人排查下來大部分SSH連不上都是防火墻或服務(wù)沒啟極少是配置文件的鍋。如果ss命令看不到22端口先啟動服務(wù)并設(shè)開機自啟sudo systemctl enable --now ssh5.3 apt安裝軟件失敗依賴損壞的統(tǒng)一修復(fù)“ubuntu安裝gcc失敗”這類問題其實絕大多數(shù)不是gcc本身的問題而是apt數(shù)據(jù)庫里積壓了未完成的安裝、卸載或殘缺的依賴。統(tǒng)一的修復(fù)鏈路是sudo apt --fix-broken install sudo dpkg --configure -a sudo apt update sudo apt upgradedpkg --configure -a會把之前中斷的包配置全部完成--fix-broken修正依賴關(guān)系。如果提示“無法獲取鎖”說明后臺還有apt進程在跑用ps aux | grep apt找到PID后kill掉或者直接等它跑完。5.4 日志分析法journalctl是一種心態(tài)最后分享一個我用了多年才養(yǎng)成的習(xí)慣系統(tǒng)出問題第一反應(yīng)不是網(wǎng)上搜“Ubuntu xxx問題”而是先看日志。systemd把所有日志集中管理查所有日志journalctl -xe最后幾百行里往往直接寫著錯誤原因比如“無法解析域名”“磁盤空間不足”“權(quán)限被拒絕”。有日志在手再配合一句搜索引擎關(guān)鍵詞你搜到的答案才精準。很多人問題解決不了是因為連報錯信息都沒看過只憑模糊的記憶在問問題。6. 把命令串成自己的工具箱alias與配置文件推薦6.1 我常用的alias配置命令行用得越久越會嫌棄重復(fù)的輸入。~/.bashrc里加幾個alias能大幅提升效率。我自己的配置里有這幾條貼出來供參考alias updatesudo apt update sudo apt upgrade alias installsudo apt install alias removesudo apt remove alias cleansudo apt autoremove sudo apt autoclean alias myipcurl -s ifconfig.me alias llls -alF alias lals -A alias portsss -tlnp設(shè)置完后執(zhí)行source ~/.bashrc讓配置立即生效。養(yǎng)成“高頻命令縮寫化”的習(xí)慣后日常操作的效率提升是肉眼可見的。需要查看當(dāng)前所有alias就敲alias想臨時繞過某個alias可以在命令前加反斜杠比如\ls會執(zhí)行原始命令。6.2 用history復(fù)盤你的命令行成長history命令會列出當(dāng)前用戶執(zhí)行過的歷史命令配合grep可以快速找回之前用過但忘記的命令history | grep docker想重復(fù)執(zhí)行歷史里的某條命令輸入!n替換成對應(yīng)序號即可。bash默認保存最近1000條歷史歷史文件在~/.bash_history。我偶爾會翻一下自己的history看看哪些命令反復(fù)敲觸發(fā)去寫alias或腳本的念頭——這正是從“入門”往“精通”走的自然路徑。6.3 從命令到工具鏈Ubuntu管理員的一天把上面所有內(nèi)容串起來其實就是管理員日常工作流的縮影。早上到公司先journalctl -xe快速掃一眼夜里有沒有服務(wù)崩過df -h確認磁盤沒滿uptime看看負載用apt update確認軟件源可用。下班前把關(guān)鍵目錄打包備份寫進cron定時任務(wù)。這套流程完全不需要打開圖形界面在服務(wù)器上更是唯一選擇。命令行不是門檻而是從“Ubuntu用戶”走向“Ubuntu管理員”最快的橋梁它讓你真正聽懂系統(tǒng)在說什么也讓所有操作變得可以被記錄、被復(fù)現(xiàn)、被分享。我至今碼農(nóng)生涯里最高興的瞬間之一就是第一次用五條命令遠程幫同事救回一臺系統(tǒng)——那一刻我才意識到前面繞過的每一個坑積累的每一條命令都值得。