終端與Shell入門:從命令操作到腳本實戰(zhàn))
在國產(chǎn)操作系統(tǒng)逐步走進企業(yè)辦公、政務(wù)生產(chǎn)和個人開發(fā)環(huán)境的過程中銀河麒麟Kylin系統(tǒng)是出鏡率非常高的一款。很多人第一次接觸 Linux 就是從麒麟開始的但剛上手時最不習(xí)慣的就是終端和 shell。圖形界面下裝軟件、改配置還能點一點一旦遇到軟件商店報錯、想批量處理文件、寫自動化腳本就繞不開終端和 shell。這篇文章就以麒麟系統(tǒng)為背景系統(tǒng)梳理終端和 shell 的核心概念、常用操作、軟件安裝方法、shell 腳本入門和常見故障排查盡量讓剛接觸國產(chǎn)系統(tǒng)的讀者能照著操作也讓有 Linux 基礎(chǔ)的開發(fā)者能快速對齊麒麟環(huán)境下的差異點。1. 終端和 shell 到底是什么1.1 終端不是黑框框而是操作系統(tǒng)的入口很多讀者剛打開麒麟系統(tǒng)里的“終端”應(yīng)用時看到的是一個類似黑色窗口的界面里面只有一個提示符比如kylinkylin:~$這個窗口其實就是終端模擬器。它本身并不執(zhí)行命令而是提供一個交互界面把用戶在鍵盤上輸入的內(nèi)容發(fā)送給 shell 程序再把 shell 返回的結(jié)果顯示出來。你可以把它理解成“操作系統(tǒng)的文字入口”。在 Linux 系統(tǒng)中終端是運維、開發(fā)、問題排查繞不開的工具。圖形界面能完成大部分日常操作但遇到下面這些場景時終端反而更高效批量重命名文件。查看系統(tǒng)運行狀態(tài)。安裝和卸載軟件包。定位軟件商店報錯的原因。編寫 shell 腳本實現(xiàn)自動化。在麒麟系統(tǒng)上終端的重要性并不比其他 Linux 發(fā)行版低。很多和系統(tǒng)底層、軟件源、服務(wù)狀態(tài)相關(guān)的操作通過終端能獲得更直接的反饋。1.2 shell 是解釋命令的程序shell 是一個命令行解釋器。用戶輸入的命令最終由 shell 解釋并轉(zhuǎn)發(fā)給操作系統(tǒng)內(nèi)核執(zhí)行。bashBourne Again Shell是 Linux 系統(tǒng)中最常見的 shell麒麟系統(tǒng)默認使用的也是 bash。從用戶視角來看shell 提供了幾類核心能力執(zhí)行普通命令比如ls、cd、cp。支持通配符比如*.txt表示匹配所有 txt 文件。支持重定向和管道比如cat a.txt | grep error。支持變量、條件判斷、循環(huán)等編程語法把多條命令組織成腳本。對普通用戶而言shell 是命令的翻譯官對開發(fā)者和運維工程師而言shell 還是一種輕量級編程語言適合編寫自動化運維腳本、數(shù)據(jù)處理腳本和系統(tǒng)管理工具。1.3 麒麟系統(tǒng)終端和 shell 的使用場景銀河麒麟 V10 常見的使用場景有幾類桌面辦公安裝辦公軟件、配置打印機、管理系統(tǒng)更新。開發(fā)測試部署中間件、運行 Python 或 Java 程序、操作數(shù)據(jù)庫。運維管理查看服務(wù)狀態(tài)、清理磁盤空間、管理用戶和權(quán)限。信創(chuàng)適配將原本運行在 CentOS 或 Ubuntu 上的腳本遷移到麒麟系統(tǒng)。在這些場景里終端和 shell 幾乎是繞不開的基礎(chǔ)能力。2. 環(huán)境準備與版本說明2.1 銀河麒麟常見版本銀河麒麟系統(tǒng)目前最常見的是 V10 系列分為桌面版和服務(wù)器版。不同 CPU 架構(gòu)還有不同版本例如x86_64Intel、AMD 平臺。ARM64飛騰、鯤鵬平臺。MIPS64龍芯平臺。SW64申威平臺。同一套命令在不同架構(gòu)上基本一致差異主要集中在軟件包來源和部分底層庫。本文示例以銀河麒麟桌面版 V10 為主多數(shù)命令和腳本在服務(wù)器版同樣適用。如果系統(tǒng)版本不同個別軟件源的地址或包管理器行為可能有差異。遇到問題時建議先確認系統(tǒng)版本cat /etc/os-release2.2 終端模擬器和 shell 環(huán)境麒麟桌面版自帶終端模擬器一般可以在“開始菜單 - 系統(tǒng)工具 - 終端”中找到也可以在桌面空白處右鍵選擇“打開終端”。默認 shell 是 bash可以執(zhí)行下面命令確認echo $SHELL正常情況下會輸出/bin/bash。如果需要在腳本中指定解釋器在腳本第一行加上#!/bin/bash2.3 用戶權(quán)限說明在使用終端時普通用戶提示符通常是$root 用戶提示符是#。很多管理類命令需要管理員權(quán)限有兩種方式第一種是臨時切換用戶su - root第二種是使用sudo臨時提權(quán)sudo 命令需要提醒的是日常操作盡量使用普通用戶不要長期使用 root。涉及系統(tǒng)關(guān)鍵配置的修改先確認操作目的再執(zhí)行命令避免誤操作影響系統(tǒng)穩(wěn)定性。3. 麒麟終端高頻操作與核心命令3.1 打開終端和切換目錄打開終端后通常停留在當(dāng)前用戶的家目錄。查看當(dāng)前目錄pwd切換目錄是終端里最高頻的操作之一使用cd命令cd /etc # 進入 /etc 目錄 cd ~ # 進入當(dāng)前用戶家目錄 cd .. # 返回上一級目錄 cd - # 返回上一次所在目錄在命令行里~代表當(dāng)前用戶家目錄.代表當(dāng)前目錄..代表上一級目錄。這個約定在 Linux 中通用。3.2 終端換行和多行輸入很多人在終端里遇到一個疑問命令行太長怎么換到下一行繼續(xù)輸入在 bash 中如果一行命令還沒寫完可以按反斜杠\再按回車shell 會在下一行繼續(xù)等待輸入echo hello \ world如果是想在已執(zhí)行的命令中重新編輯可以使用方向鍵上下翻看歷史命令也可以按Ctrl A跳到行首、Ctrl E跳到行尾。還有一種情況是腳本或命令中間不小心按了回車終端進入續(xù)行狀態(tài)提示符變成。此時可以按Ctrl C取消當(dāng)前輸入重新開始。3.3 文件與目錄管理日常操作中最常用的一組命令ls # 查看當(dāng)前目錄文件 ls -l # 查看詳細信息 ls -a # 查看隱藏文件 cp file1 file2 # 復(fù)制文件 mv file1 dir/ # 移動文件 rm file1 # 刪除文件 mkdir newdir # 創(chuàng)建目錄需要注意的是rm刪除的文件不會進入回收站直接刪除。生產(chǎn)環(huán)境中尤其是 root 用戶下執(zhí)行rm之前要仔細檢查路徑。3.4 管理員權(quán)限和軟件包管理麒麟系統(tǒng)安裝軟件常見有兩種方式一種是在軟件商店中搜索安裝適合普通用戶。但有時會遇到軟件商店打不開、安裝報錯等問題。另一種是使用命令行工具安裝更適合排查問題和批量部署。銀河麒麟 V10 基于 Debian 體系底層包管理器是dpkg依賴管理使用apt。常用命令如下。更新軟件源緩存sudo apt update升級已安裝軟件包sudo apt upgrade安裝軟件包sudo apt install 軟件包名卸載軟件包sudo apt remove 軟件包名徹底卸載并清理配置sudo apt purge 軟件包名安裝本地 deb 安裝包sudo dpkg -i 軟件包名.deb如果 dpkg 安裝時提示依賴缺失可以執(zhí)行sudo apt -f install自動修復(fù)依賴關(guān)系后再安裝。需要注意的是麒麟系統(tǒng)的軟件源可能與企業(yè)內(nèi)網(wǎng)、離線環(huán)境綁定。如果apt update報錯優(yōu)先檢查網(wǎng)絡(luò)、軟件源配置和 DNS。3.5 查找命令和查看幫助記不住命令參數(shù)時可以查看幫助man ls也可以用命令自帶的幫助參數(shù)ls --help想查找某個命令的位置which python3想查找系統(tǒng)里某個文件的位置find /etc -name *.conf4. 麒麟系統(tǒng)軟件安裝的完整示例4.1 通過軟件商店安裝銀河麒麟桌面版自帶軟件商店相當(dāng)于圖形化的軟件管理工具。適合安裝常用辦公軟件、開發(fā)工具和日常應(yīng)用。步驟很簡單打開軟件商店。在搜索框輸入軟件名稱。點擊安裝按鈕。輸入管理員密碼。這種方式適合新手但安裝失敗時不方便看到底層錯誤日志排查問題有一定局限。4.2 通過 apt 命令行安裝軟件以安裝vim文本編輯器為例sudo apt update sudo apt install vim -y參數(shù)-y表示自動確認安裝腳本中使用時比較方便。安裝完成后執(zhí)行vim --version可以確認安裝是否成功。4.3 安裝本地 deb 包如果你手里已經(jīng)有一個.deb安裝包比如某個適配麒麟系統(tǒng)的辦公軟件安裝包安裝方式如下sudo dpkg -i your-software.deb如果提示依賴缺失sudo apt -f install然后重新安裝。這個過程建議在測試環(huán)境中先驗證一次確認軟件與原系統(tǒng)兼容后再批量部署。4.4 卸載和清理卸載軟件時普通卸載sudo apt remove your-software如果希望連配置文件一起清理sudo apt purge your-software清理無用的依賴包sudo apt autoremove清理包管理器緩存sudo apt clean在生產(chǎn)環(huán)境或重要機器上執(zhí)行卸載命令前建議先確認軟件包名避免誤刪依賴組件。5. shell 腳本入門與實戰(zhàn)5.1 第一個 shell 腳本shell 腳本本質(zhì)上是把多條命令寫入一個文件并賦予執(zhí)行權(quán)限后運行。新建一個腳本文件vim hello.sh輸入以下內(nèi)容#!/bin/bash # 這是一個簡單的 shell 腳本示例 echo Hello, Kylin Shell保存退出后賦予執(zhí)行權(quán)限chmod x hello.sh執(zhí)行腳本./hello.sh輸出Hello, Kylin Shell這里需要解釋一下腳本第一行的#!/bin/bash是 shebang告訴系統(tǒng)用哪個解釋器來執(zhí)行腳本。chmod x是添加可執(zhí)行權(quán)限如果不加權(quán)限執(zhí)行時會出現(xiàn)Permission denied錯誤。5.2 變量和用戶輸入shell 腳本中定義變量很簡單#!/bin/bash namekylin echo 當(dāng)前系統(tǒng)用戶是 $name從用戶輸入讀取內(nèi)容可以使用read#!/bin/bash echo 請輸入文件名 read filename echo 你輸入的文件名是 $filename變量名不能包含空格賦值時等號兩邊不能有空格。這是新手比較容易踩的坑。5.3 for 循環(huán)批量處理文件shell 腳本中for循環(huán)非常實用。比如批量重命名當(dāng)前目錄下的.txt文件在前面加上日期前綴#!/bin/bash for file in *.txt do mv $file $(date %Y%m%d)_$file done這段腳本會遍歷當(dāng)前目錄下所有以.txt結(jié)尾的文件并把文件重命名為類似20250101_oldname.txt的格式。使用變量時加上雙引號可以避免文件名包含空格時出錯。這是腳本健壯性的關(guān)鍵點。再來看一個批量創(chuàng)建目錄的例子#!/bin/bash for i in {1..5} do mkdir folder_$i done循環(huán)執(zhí)行完后當(dāng)前目錄下會生成folder_1到folder_5五個目錄。5.4 條件判斷條件判斷用來控制腳本的分支邏輯。例如判斷文件是否存在#!/bin/bash if [ -f /etc/hosts ] then echo 文件存在 else echo 文件不存在 fi[ -f 文件路徑 ]是判斷是否為普通文件。類似的判斷還有[ -d 路徑 ]判斷是否為目錄。[ -e 路徑 ]判斷是否存在。[ -z 字符串 ]判斷字符串是否為空。在使用[ ]判斷時注意方括號內(nèi)側(cè)必須有空格否則會報語法錯誤。5.5 忽略命令執(zhí)行錯誤在腳本中如果某一條命令執(zhí)行失敗默認情況下腳本不會停止而是繼續(xù)執(zhí)行下一條。如果你希望在腳本中忽略某些步驟的錯誤繼續(xù)執(zhí)行可以在命令末尾追加|| true#!/bin/bash echo 開始執(zhí)行 some_maybe_fail_command || true echo 忽略錯誤繼續(xù)執(zhí)行如果希望腳本只要遇到任何錯誤就立即退出可以在腳本開頭加上set -e實際項目中可以根據(jù)需求選擇不同的錯誤處理策略。對于自動部署腳本通常會先用set -e做嚴格檢查再單獨對允許失敗的步驟做例外處理。6. 常見問題與排查思路6.1 麒麟軟件商店錯誤代碼 0006不少用戶在使用麒麟系統(tǒng)時軟件商店安裝軟件會提示錯誤代碼 0006。這個錯誤通常和軟件源、網(wǎng)絡(luò)連接或軟件倉庫緩存有關(guān)。排查思路如下。第一步檢查網(wǎng)絡(luò)是否正常ping -c 4 mirrors.kylinos.cn第二步更新軟件源緩存sudo apt update第三步清理緩存后重試sudo apt clean如果是在內(nèi)網(wǎng)環(huán)境需要確認/etc/apt/sources.list中配置的軟件源地址是否可訪問。6.2 軟件安裝提示依賴缺失使用dpkg -i安裝本地包時經(jīng)常出現(xiàn)依賴缺失的提示。解決方法是先執(zhí)行sudo apt -f install自動修復(fù)依賴然后重新安裝軟件包。也可以使用apt install ./軟件包名.deb的方式直接安裝本地包apt 會嘗試處理依賴。6.3 終端提示權(quán)限不足執(zhí)行命令時提示Permission denied或Operation not permitted通常有兩種情況。第一命令需要管理員權(quán)限。檢查當(dāng)前用戶身份非 root 用戶需要加sudo。第二文件沒有執(zhí)行權(quán)限。如果是要執(zhí)行腳本先加權(quán)限chmod x script.sh6.4 終端打不開或異常退出如果終端模擬器打不開可以先嘗試從另一個終端執(zhí)行kylin-terminal查看終端進程的報錯信息。常見原因包括顯卡驅(qū)動問題、中文輸入法沖突、桌面環(huán)境組件異常。也可以嘗試刪除終端應(yīng)用的殘留配置后重啟rm -rf ~/.config/kylin-terminal這個操作會重置終端配置適合配置損壞的場景但最好先備份原配置目錄。6.5 常見問題一覽問題現(xiàn)象常見原因解決思路軟件商店提示錯誤代碼 0006軟件源不可達、緩存損壞檢查網(wǎng)絡(luò)、更新軟件源、清理緩存apt update 報錯軟件源地址錯誤檢查 /etc/apt/sources.list安裝 deb 包提示依賴缺失依賴包未安裝apt -f install 修復(fù)依賴執(zhí)行腳本提示 Permission denied腳本沒有可執(zhí)行權(quán)限chmod x 腳本名終端字體或界面錯亂終端配置損壞備份并重置終端配置命令找不到軟件未安裝或 PATH 缺失which 檢查路徑安裝相應(yīng)軟件包7. 最佳實踐與工程建議7.1 命令操作規(guī)范在終端執(zhí)行命令時盡量養(yǎng)成幾個好習(xí)慣。命令執(zhí)行前先確認路徑pwd刪除操作前先查看ls -l 路徑使用rm -rf時要格外謹慎最好先列目錄確認內(nèi)容再執(zhí)行刪除避免誤刪系統(tǒng)文件或用戶數(shù)據(jù)。7.2 shell 腳本編寫規(guī)范編寫 shell 腳本時建議注意以下幾點。腳本開頭聲明解釋器#!/bin/bash變量命名使用小寫字母和下劃線避免與系統(tǒng)環(huán)境變量沖突file_path/home/kylin/data給關(guān)鍵步驟添加注釋方便后期維護# 備份配置文件 cp /etc/app.conf /etc/app.conf.bak對路徑加雙引號防止空格導(dǎo)致錯誤cp $source_file $target_dir在生產(chǎn)環(huán)境中腳本里涉及遠程服務(wù)器操作或數(shù)據(jù)庫變更時先在小范圍測試確認邏輯正確后再全量執(zhí)行。7.3 日志記錄與錯誤處理腳本運行出現(xiàn)問題后日志是排查的第一手資料。建議在腳本中增加輸出重定向bash deploy.sh deploy.log 21這樣標(biāo)準輸出和錯誤輸出都會寫入deploy.log文件。在腳本內(nèi)部也可以對關(guān)鍵步驟做簡單的日志追加echo $(date) 開始備份 deploy.log7.4 權(quán)限最小化在服務(wù)器或生產(chǎn)環(huán)境中不建議直接用 root 執(zhí)行日常命令也不要給腳本授予過高的 sudo 權(quán)限。普通用戶能完成的任務(wù)就用普通用戶執(zhí)行只有安裝軟件、修改系統(tǒng)配置時才臨時提權(quán)。對于可能影響系統(tǒng)穩(wěn)定性的操作比如替換軟件源、修改內(nèi)核參數(shù)、調(diào)整服務(wù)狀態(tài)建議先備份原文件再執(zhí)行修改。修改完成后確認系統(tǒng)功能正常再清理備份或保留在固定目錄中。7.5 軟件源與網(wǎng)絡(luò)安全配置軟件源時優(yōu)先使用官方源或企業(yè)內(nèi)部可信源。不要隨意添加來源不明的軟件源避免安裝到被篡改的軟件包。安裝第三方軟件時確認軟件包來源可靠在測試環(huán)境驗證后再部署到正式環(huán)境。8. 下一步學(xué)習(xí)建議終端和 shell 是 Linux 操作系統(tǒng)中適用范圍很廣的基礎(chǔ)能力。讀完這篇文章你應(yīng)該已經(jīng)可以完成幾件事在麒麟系統(tǒng)中打開終端并執(zhí)行基礎(chǔ)命令、通過命令行安裝和卸載軟件、編寫簡單的 shell 腳本處理文件、面對軟件商店報錯時找到排查入口。如果還想繼續(xù)深入建議從以下幾個方向切入。掌握文本處理三劍客grep、sed、awk。這三個工具能幫你快速處理日志、提取數(shù)據(jù)、批量修改文件內(nèi)容。理解用戶和權(quán)限管理。useradd、usermod、chmod、chown是系統(tǒng)管理的基礎(chǔ)。學(xué)會 systemd 服務(wù)管理。用systemctl管理服務(wù)狀態(tài)、設(shè)置開機自啟是服務(wù)器運維的常用技能。嘗試編寫一個完整的小型自動化腳本。比如每天定期備份指定目錄保留最近 7 天的備份文件并把日志寫入文件。這樣一個腳本雖然不大但能把變量、循環(huán)、條件判斷、時間處理、文件操作全部串起來對理解 shell 編程很有幫助。在動手過程中遇到報錯不要急著搜索“復(fù)制粘貼”先看報錯信息本身。終端給出的錯誤信息一般是直接原因比如文件不存在、權(quán)限不足、依賴缺失。如果信息不夠完整可以用-v或--debug參數(shù)重試獲取更詳細的輸出。國產(chǎn)操作系統(tǒng)處于快速迭代階段不同小版本的軟件源地址、軟件包名稱可能有細微差別。遇到問題時先確認版本再對照官方資料排查能少走很多彎路。希望這篇文章能幫你跨過終端和 shell 的第一道門檻在麒麟系統(tǒng)上更順暢地工作。