當前位置: 妍妍網 > 碼農

Shell指令碼:常用100個shell命令使用講解題

2024-07-16碼農

在大多數的Linux和Unix系統、及其他類Unix系統中,Shell是使用者與作業系統內核互動的主要方式。作為一種強大的命令列直譯器,它也支持編程功能,使用者可以寫指令碼來處理各種任務。

無論你是新手還是專業人士,掌握Shell命令都是必不可少的技能。在這篇文章中,我將逐個解讀和展示Shell指令碼中最常用的100個命令,並為每個命令提供實際的例子。

目錄

  • 檔操作命令

  • 搜尋命令

  • 目錄操作命令

  • 許可權操作命令

  • 網路操作命令

  • 行程和系統控制命令

  • 文本操作命令

  • 壓縮與解壓命令

  • 磁盤使用管理命令

  • 包管理命令

  • 行程管理命令

  • 環境變量命令

  • 系統資訊釋出命令

  • 系統控制命令

  • 文本編輯命令

  • 其他有用命令

  • 檔操作命令

    以下是在Linux系統中操作檔的一些常用命令:

    1. ls:列出目錄的內容

    ls /home

    1. cd:改變目錄

    cd /home/user/Documents

    1. pwd:打印當前工作目錄

    pwd

    1. cat:檢視檔內容

    cat /etc/passwd

    1. more:分頁檢視檔內容

    more /var/log/syslog

    1. less:反向分頁檢視檔內容

    less /var/log/syslog

    1. touch:建立一個空檔或更改檔的存取和修改時間

    touch /home/user/newfile.txt

    1. cp:復制檔或目錄

    cp /home/user/file.txt /home/user/Documents

    1. mv:移動或重新命名檔或目錄

    mv /home/user/file.txt /home/user/Documents/newfile.txt

    1. rm:刪除檔或目錄

    rm /home/user/unwantedfile.txt

    1. find:在檔案系統中搜尋檔或目錄

    find / -name "*.log"

    1. grep:在檔中搜尋具有特定模式的行

    grep"error" /var/log/syslog

    1. head:輸出檔的開始部份

    head -n 10 /var/log/syslog

    1. tail:輸出檔的尾部

    tail -n 20 /var/log/syslog

    1. sort:對文字檔案的行進行排序

    sort /etc/passwd

    1. wc:計算字數、行數和字節數

    wc /var/log/syslog

    1. cut:從檔的每一行中剪下字節、字元和欄位

    cut -d: -f1 /etc/passwd

    1. nano,vi,emacs:常用的文字編輯器

    nano/home/user/file.txt
    vi/home/user/file.txt
    emacs/home/user/file.txt

    1. paste:合並檔的行。

    pastefile1.txtfile2.txt

    搜尋命令

    以下命令可以幫助你搜尋檔或文本:

    1. find:在檔案系統中搜尋檔或目錄。

    find / -name "*.log"

    1. grep:在文字檔案中搜尋決定的文本模式。

    grep"error" /var/log/syslog

    1. locate:基於檔名在資料庫中快速找到檔。

    locatemyFile.txt

    1. which:返回可執行檔的路徑。

    which java

    1. ack:特別為程式設計師設計的一款檔搜尋工具。預設會忽略多數版本控制資料夾(如.git, .svn等)的內容。

    ack"your_search_term"

    1. ag(The Silver Searcher):比ack更快的程式碼搜尋工具,同樣預設忽略 .git 等版本控制資料夾中的內容。

    ag"your_search_term"

    1. whereis:此命令可用於尋找二進制程式、原始檔、手冊頁以及其他檔的位置。

    whereis ls

    1. type:此命令用於確定某個命令是內部 shell 命令、可執行檔還是別名。

    typepwd

    1. apropos:如果你只記得關於某個命令的部份資訊,你可以使用 apropos 命令來搜尋幫助手冊中的命令描述。

    apropos partition

    1. alias:如果你經常使用某些 Linux 命令,你可以使用 alias 命令為這些常用命令建立一個短名,以提升你的工作效率。

    alias l='ls -al'

    目錄操作命令

    以下是在Linux系統中操作目錄的一些常用命令:

    1. mkdir:建立一個新的目錄

    mkdir /home/user/new_directory

    1. rmdir:刪除一個空目錄

    rmdir /home/user/empty_directory

    1. tree:以樹形結構列出目錄的內容

    tree /home/user/

    1. du:估計檔和目錄的磁盤使用空間

    du -sh /home/user/Documents

    1. df:顯示磁盤使用空間

    df -h

    許可權操作命令

    在Linux系統中,檔和目錄的存取可以透過許可權操作命令進行控制:

    1. chmod:更改檔或目錄的許可權

    chmod755/home/user/file.txt
    表示設定檔的主使用者有讀,寫和執行許可權(rwx=7),同組的使用者和其他使用者有讀和執行許可權(rx=5)。

    1. chown:更改檔或目錄的所有者和所屬的組

    chownnewuser:newgroup /home/user/file.txt
    表示將/home/user/file.txt的所有者更改為newuser,所屬的組更改為newgroup

    1. chgrp:更改檔或目錄的所屬組

    chgrp newgroup /home/user/file.txt
    表示將/home/user/file.txt的所屬的組更改為newgroup。

    網路操作命令

    以下是在Linux系統中與網路相關的一些常用命令:

    1. ping:發送網路請求以測試網路連線

    pingwww.google.com

    1. ifconfig:顯示或配置網路介面

    ifconfig eth0

    1. netstat:顯示網路連線、路由表等網路狀態資訊

    netstat -ntlp

    1. ssh:遠端登入或執行遠端命令

    ssh user@remote_host

    1. scp:在本地和遠端系統之間安全地復制檔

    scp /path/to/file user@remote_host:/remote/path/

    1. curl:獲取網路資源

    curlwww.google.com

    1. telnet:遠端登入工具

    telnet remote_host 23

    1. nslookup:查詢 DNS 名稱伺服器的記錄

    nslookupwww.google.com

    1. ftp:在本地主機和FTP伺服器之間建立FTP連線。

    ftp ftp_server

    1. wget:獲取網路資源

    wgetwww.google.com-ogoogle.html

    行程和系統控制命令

    以下是在Linux系統中管理行程和控制系統的一些常用命令:

    1. ps:顯示當前行程的狀態

    ps aux

    1. top:動態顯示執行中的行程

    2. kill:發送訊號以終止行程

    kill 1234

    1. shutdown:關閉機器

    shutdown -h now

    1. reboot:重新開機機器

    2. logout:結束登入會話

    文本操作命令

    在編寫或處理文字檔案時,下列命令可以幫助你完成各種復雜任務:

    1. echo:打印資訊到終端。

    echo"Hello, World!"

    1. printf:格式化並打印資訊。

    printf"Name: %s\nAge: %d\n""Alice"20

    1. sed:流編輯器,用於對文字檔案進行特定的行處理和替換。

    echo"Hello, World!" | sed 's/World/Shell/g'

    1. awk:在文字檔案中進行模式掃描和處理語言。

    echo -e "name\tage\nAlice\t20\nBob\t22" | awk '{if ($2 >= 21) print $1}'

    壓縮與解壓命令

    以下命令主要用於管理和操作檔壓縮及解壓:

    1. tar:建立、展開及管理tar包。

    tar-cvfarchive.tarfolder

    1. gzip:用於檔壓縮或解壓。

    gzip file

    1. gunzip:用於解壓gzip壓縮的檔。

    gunzipfile.gz

    1. zip/unzip:建立和解壓zip格式的壓縮包。

    zip -r archive.zip folder
    unzip archive.zip

    磁盤使用管理命令

    管理和檢視磁盤使用情況:

    1. df:報告檔案系統磁盤空間使用情況。

    df -h

    1. du:估計並報告檔及資料夾的磁盤使用情況。

    du -sh folder

    1. fdisk:對磁盤進行分區管理。

    sudo fdisk -l

    1. hdparm:檢視或修改SATA/ATA磁盤參數。

    sudo hdparm -i /dev/sda

    包管理命令

    在Debian,Ubuntu及其他基於Debian的系統中,可以使用以下命令進行軟體包管理:

    1. apt-get:APT包處理工具,用於處理包。

    sudo apt-get install package

    1. dpkg:Debian包管理器。

    sudodpkg-ipackage.deb

    在RedHat, CentOS及其他基於RPM的系統中,可以使用以下命令進行軟體包管理:

    1. yum:高級軟體包管理器,用於處理rpm包。

    sudo yum installpackage

    1. rpm:RPM包管理器。

    sudorpm-ipackage.rpm

    行程管理命令

    檢視和管理正在執行的行程:

    1. ps:報告行程當前狀態。

    psaux
    USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
    root10.00.42258487836?SsNov104:05/lib/systemd/systemd--system--deserialize39
    root20.00.000?SNov100:00[kthreadd]
    root40.00.000?I<Nov100:00[kworker/0:0H]

    1. top:動態顯示當前耗費系統資源最多的行程。

    2. htop:比top更友好的動態行程檢視工具。

    htop

    1. kill:終止或者發送一個訊號到指定行程。

    2. pkill:條件地終止或者發送一個訊號到指定行程。

    pkill process_name

    環境變量命令

    檢視或設定環境變量:

    1. env:顯示當前所有的環境變量。

    輸入:env
    輸出:
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    SHELL=/bin/bash
    PWD=/home/user

    1. set:顯示當前shell所有的環境變量及函式。

    輸入:set
    輸出:展示所環境變量以及函式

    1. export:設定或顯示環境變量。

    輸入:
    export VARName="Value"
    echo$VARName
    輸出結果:
    Value

    系統資訊釋出相關命令

    有時,你可能想要檢視有關你的系統或硬體的資訊。以下命令可以幫助你做到這一點:

    1. uname:會打印作業系統的名稱。

    輸入:
    uname
    輸出:
    Linux

    1. hostname:打印系統的主機名。

    輸入:
    hostname
    輸出:
    myhostname

    1. dmesg:打印或控制內核環形緩沖區。

    輸入:
    dmesg| less

    1. df:展示檔案系統的磁盤空間使用情況。

    輸入:df-h
    輸出:
    FilesystemSizeUsedAvailUse%Mountedon
    udev962M0962M0%/dev
    tmpfs200M4.3M196M3%/run
    /dev/sda130G4.7G24G17%/

    1. free:展示系統中未使用和已經使用的物理和swap記憶體。

    輸入:free-h
    輸出:
    totalusedfreesharedbuff/cacheavailable
    Mem:3.8G487M1.9G122M1.4G3.0G
    Swap:0B0B0B

    1. uptime:展示系統已經執行了多久,有多少使用者正在登入,以及系統負載。

    輸入:uptime
    輸出:16:14:30up43min,1user,load average:0.34,0.36,0.40

    1. last:檢視系統的重新開機和關機記錄。

    輸入:last reboot

    1. w:展示哪些使用者正在登入。

    輸入:w
    輸出:16:17:51up1:42,1user,load average:0.45,0.47,0.38
    USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT
    usertty114:361:42m1.55s0.06sw

    1. who:展示哪些使用者正在登入,和w命令相似但資訊更少。

    輸入:who
    輸出:usertty12022-01-2814:36

    1. id:展示當前使用者的UID、GID以及所在的組。

    輸入:id
    輸出:uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)

    系統控制命令

    在一些特殊情況下,你可能需要進行一些系統控制操作。以下命令可以幫助你做到這一點:

    1. halt:關機。

    輸入:sudo halt

    1. reboot:重新開機系統。

    輸入:sudo reboot

    1. shutdown:關機或者重新開機,和上述兩個命令一樣,但是提供更多的選項。

    關閉系統:sudo shutdown -h now
    重新開機系統:sudo shutdown -r now

    1. passwd:更改使用者密碼。

    更改密碼:passwd

    文字編輯器命令

    Linux提供了多種命令列文字編輯器。以下這些可能是你需要知道的:

    1. vi/vim:vi是一個文字編輯器,而vim是vi的改進版,提供了更多的功能。

    2. nano:一個簡單易用的命令列文字編輯器。

    3. emac:一個強大的文字編輯器,也是一個客製化的計算環境。

    其他常用命令

    1. man:檢視命令的幫助文件。

    2. whatis:顯示一個命令的簡單描述。

    輸入:whatis ls
    輸出:ls (1) - list directory contents

    1. whereis:尋找命令的二進制檔、原始檔及幫助文件位置。

    輸入:whereis ls
    輸出:ls: /bin/ls /usr/share/man/man1/ls.1.gz

    1. which:尋找並顯示給定命令的完整路徑。

    輸入:which ls
    輸出:/bin/ls

    1. whoami:打印當前有效的使用者名稱。

    輸入:whoami
    輸出:user

    1. date:顯示或設定系統日期和時間

    輸入:date
    輸出:TueDec2102:16:12UTC2021

    1. cal:顯示行事曆

    輸入:cal
    輸出:
    January2022
    SuMoTuWeThFrSa
    1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031

    1. alias:建立命令別名

    2. unalias:刪除別名

    3. history:顯示命令歷史

    4. clear:清除螢幕或視窗內容

    5. watch:用於即時檢視當前命令打印資訊

    輸入:watch -n 2date
    解釋:watch`命令會每2秒執行一次`date`命令,並即時顯示輸出

    大多數人學習Shell指令碼的最大動力是提高效率。使用Shell指令碼,你可以編寫一個任務,然後讓電腦去做,而你可以去忙其他的事情;你可以編寫一個任務,讓電腦重復執行,而不需要你每次在命令列手動輸入;你可以更靈活地處理任務,比如管理使用者,管理程式等。就這樣,Shell指令碼賦予你控制電腦的能力,在你的指尖下,一切盡在掌握。

    在未來,實踐未知,探索無限,最好的方式是動手試試看,願這完整的100個命令清單能夠成為你在Linux世界裏的指南針!掌握Shell命令並利用它們來編寫指令碼能夠極大地提升你的工作效率,無論是進行系統管理還是進行程式設計,這都是一種強大的工具。善用它,享受編程帶給你的樂趣吧!