在大多數的Linux和Unix系統、及其他類Unix系統中,Shell是使用者與作業系統內核互動的主要方式。作為一種強大的命令列直譯器,它也支持編程功能,使用者可以寫指令碼來處理各種任務。
無論你是新手還是專業人士,掌握Shell命令都是必不可少的技能。在這篇文章中,我將逐個解讀和展示Shell指令碼中最常用的100個命令,並為每個命令提供實際的例子。
目錄
檔操作命令
搜尋命令
目錄操作命令
許可權操作命令
網路操作命令
行程和系統控制命令
文本操作命令
壓縮與解壓命令
磁盤使用管理命令
包管理命令
行程管理命令
環境變量命令
系統資訊釋出命令
系統控制命令
文本編輯命令
其他有用命令
檔操作命令
以下是在Linux系統中操作檔的一些常用命令:
ls:列出目錄的內容
ls /home
cd:改變目錄
cd /home/user/Documents
pwd:打印當前工作目錄
pwd
cat:檢視檔內容
cat /etc/passwd
more:分頁檢視檔內容
more /var/log/syslog
less:反向分頁檢視檔內容
less /var/log/syslog
touch:建立一個空檔或更改檔的存取和修改時間
touch /home/user/newfile.txt
cp:復制檔或目錄
cp /home/user/file.txt /home/user/Documents
mv:移動或重新命名檔或目錄
mv /home/user/file.txt /home/user/Documents/newfile.txt
rm:刪除檔或目錄
rm /home/user/unwantedfile.txt
find:在檔案系統中搜尋檔或目錄
find / -name "*.log"
grep:在檔中搜尋具有特定模式的行
grep"error" /var/log/syslog
head:輸出檔的開始部份
head -n 10 /var/log/syslog
tail:輸出檔的尾部
tail -n 20 /var/log/syslog
sort:對文字檔案的行進行排序
sort /etc/passwd
wc:計算字數、行數和字節數
wc /var/log/syslog
cut:從檔的每一行中剪下字節、字元和欄位
cut -d: -f1 /etc/passwd
nano,vi,emacs:常用的文字編輯器
nano/home/user/file.txt
vi/home/user/file.txt
emacs/home/user/file.txt
paste:合並檔的行。
pastefile1.txtfile2.txt
搜尋命令
以下命令可以幫助你搜尋檔或文本:
find:在檔案系統中搜尋檔或目錄。
find / -name "*.log"
grep:在文字檔案中搜尋決定的文本模式。
grep"error" /var/log/syslog
locate:基於檔名在資料庫中快速找到檔。
locatemyFile.txt
which:返回可執行檔的路徑。
which java
ack:特別為程式設計師設計的一款檔搜尋工具。預設會忽略多數版本控制資料夾(如.git, .svn等)的內容。
ack"your_search_term"
ag(The Silver Searcher):比ack更快的程式碼搜尋工具,同樣預設忽略 .git 等版本控制資料夾中的內容。
ag"your_search_term"
whereis:此命令可用於尋找二進制程式、原始檔、手冊頁以及其他檔的位置。
whereis ls
type:此命令用於確定某個命令是內部 shell 命令、可執行檔還是別名。
typepwd
apropos:如果你只記得關於某個命令的部份資訊,你可以使用 apropos 命令來搜尋幫助手冊中的命令描述。
apropos partition
alias:如果你經常使用某些 Linux 命令,你可以使用 alias 命令為這些常用命令建立一個短名,以提升你的工作效率。
alias l='ls -al'
目錄操作命令
以下是在Linux系統中操作目錄的一些常用命令:
mkdir:建立一個新的目錄
mkdir /home/user/new_directory
rmdir:刪除一個空目錄
rmdir /home/user/empty_directory
tree:以樹形結構列出目錄的內容
tree /home/user/
du:估計檔和目錄的磁盤使用空間
du -sh /home/user/Documents
df:顯示磁盤使用空間
df -h
許可權操作命令
在Linux系統中,檔和目錄的存取可以透過許可權操作命令進行控制:
chmod:更改檔或目錄的許可權
chmod755/home/user/file.txt
表示設定檔的主使用者有讀,寫和執行許可權(rwx=7),同組的使用者和其他使用者有讀和執行許可權(rx=5)。
chown:更改檔或目錄的所有者和所屬的組
chownnewuser:newgroup /home/user/file.txt
表示將/home/user/file.txt的所有者更改為newuser,所屬的組更改為newgroup。
chgrp:更改檔或目錄的所屬組
chgrp newgroup /home/user/file.txt
表示將/home/user/file.txt的所屬的組更改為newgroup。
網路操作命令
以下是在Linux系統中與網路相關的一些常用命令:
ping:發送網路請求以測試網路連線
pingwww.google.com
ifconfig:顯示或配置網路介面
ifconfig eth0
netstat:顯示網路連線、路由表等網路狀態資訊
netstat -ntlp
ssh:遠端登入或執行遠端命令
ssh user@remote_host
scp:在本地和遠端系統之間安全地復制檔
scp /path/to/file user@remote_host:/remote/path/
curl:獲取網路資源
curlwww.google.com
telnet:遠端登入工具
telnet remote_host 23
nslookup:查詢 DNS 名稱伺服器的記錄
nslookupwww.google.com
ftp:在本地主機和FTP伺服器之間建立FTP連線。
ftp ftp_server
wget:獲取網路資源
wgetwww.google.com-ogoogle.html
行程和系統控制命令
以下是在Linux系統中管理行程和控制系統的一些常用命令:
ps:顯示當前行程的狀態
ps aux
top:動態顯示執行中的行程
kill:發送訊號以終止行程
kill 1234
shutdown:關閉機器
shutdown -h now
reboot:重新開機機器
logout:結束登入會話
文本操作命令
在編寫或處理文字檔案時,下列命令可以幫助你完成各種復雜任務:
echo:打印資訊到終端。
echo"Hello, World!"
printf:格式化並打印資訊。
printf"Name: %s\nAge: %d\n""Alice"20
sed:流編輯器,用於對文字檔案進行特定的行處理和替換。
echo"Hello, World!" | sed 's/World/Shell/g'
awk:在文字檔案中進行模式掃描和處理語言。
echo -e "name\tage\nAlice\t20\nBob\t22" | awk '{if ($2 >= 21) print $1}'
壓縮與解壓命令
以下命令主要用於管理和操作檔壓縮及解壓:
tar:建立、展開及管理tar包。
tar-cvfarchive.tarfolder
gzip:用於檔壓縮或解壓。
gzip file
gunzip:用於解壓gzip壓縮的檔。
gunzipfile.gz
zip/unzip:建立和解壓zip格式的壓縮包。
zip -r archive.zip folder
unzip archive.zip
磁盤使用管理命令
管理和檢視磁盤使用情況:
df:報告檔案系統磁盤空間使用情況。
df -h
du:估計並報告檔及資料夾的磁盤使用情況。
du -sh folder
fdisk:對磁盤進行分區管理。
sudo fdisk -l
hdparm:檢視或修改SATA/ATA磁盤參數。
sudo hdparm -i /dev/sda
包管理命令
在Debian,Ubuntu及其他基於Debian的系統中,可以使用以下命令進行軟體包管理:
apt-get:APT包處理工具,用於處理包。
sudo apt-get install package
dpkg:Debian包管理器。
sudodpkg-ipackage.deb
在RedHat, CentOS及其他基於RPM的系統中,可以使用以下命令進行軟體包管理:
yum:高級軟體包管理器,用於處理rpm包。
sudo yum installpackage
rpm:RPM包管理器。
sudorpm-ipackage.rpm
行程管理命令
檢視和管理正在執行的行程:
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]
top:動態顯示當前耗費系統資源最多的行程。
htop:比top更友好的動態行程檢視工具。
htop
kill:終止或者發送一個訊號到指定行程。
pkill:條件地終止或者發送一個訊號到指定行程。
pkill process_name
環境變量命令
檢視或設定環境變量:
env:顯示當前所有的環境變量。
輸入:env
輸出:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
PWD=/home/user
set:顯示當前shell所有的環境變量及函式。
輸入:set
輸出:展示所環境變量以及函式
export:設定或顯示環境變量。
輸入:
export VARName="Value"
echo$VARName
輸出結果:
Value
系統資訊釋出相關命令
有時,你可能想要檢視有關你的系統或硬體的資訊。以下命令可以幫助你做到這一點:
uname:會打印作業系統的名稱。
輸入:
uname
輸出:
Linux
hostname:打印系統的主機名。
輸入:
hostname
輸出:
myhostname
dmesg:打印或控制內核環形緩沖區。
輸入:
dmesg| less
df:展示檔案系統的磁盤空間使用情況。
輸入:df-h
輸出:
FilesystemSizeUsedAvailUse%Mountedon
udev962M0962M0%/dev
tmpfs200M4.3M196M3%/run
/dev/sda130G4.7G24G17%/
free:展示系統中未使用和已經使用的物理和swap記憶體。
輸入:free-h
輸出:
totalusedfreesharedbuff/cacheavailable
Mem:3.8G487M1.9G122M1.4G3.0G
Swap:0B0B0B
uptime:展示系統已經執行了多久,有多少使用者正在登入,以及系統負載。
輸入:uptime
輸出:16:14:30up43min,1user,load average:0.34,0.36,0.40
last:檢視系統的重新開機和關機記錄。
輸入:last reboot
w:展示哪些使用者正在登入。
輸入:w
輸出:16:17:51up1:42,1user,load average:0.45,0.47,0.38
USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT
usertty114:361:42m1.55s0.06sw
who:展示哪些使用者正在登入,和w命令相似但資訊更少。
輸入:who
輸出:usertty12022-01-2814:36
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)
系統控制命令
在一些特殊情況下,你可能需要進行一些系統控制操作。以下命令可以幫助你做到這一點:
halt:關機。
輸入:sudo halt
reboot:重新開機系統。
輸入:sudo reboot
shutdown:關機或者重新開機,和上述兩個命令一樣,但是提供更多的選項。
關閉系統:sudo shutdown -h now
重新開機系統:sudo shutdown -r now
passwd:更改使用者密碼。
更改密碼:passwd
文字編輯器命令
Linux提供了多種命令列文字編輯器。以下這些可能是你需要知道的:
vi/vim:vi是一個文字編輯器,而vim是vi的改進版,提供了更多的功能。
nano:一個簡單易用的命令列文字編輯器。
emac:一個強大的文字編輯器,也是一個客製化的計算環境。
其他常用命令
man:檢視命令的幫助文件。
whatis:顯示一個命令的簡單描述。
輸入:whatis ls
輸出:ls (1) - list directory contents
whereis:尋找命令的二進制檔、原始檔及幫助文件位置。
輸入:whereis ls
輸出:ls: /bin/ls /usr/share/man/man1/ls.1.gz
which:尋找並顯示給定命令的完整路徑。
輸入:which ls
輸出:/bin/ls
whoami:打印當前有效的使用者名稱。
輸入:whoami
輸出:user
date:顯示或設定系統日期和時間
輸入:date
輸出:TueDec2102:16:12UTC2021
cal:顯示行事曆
輸入:cal
輸出:
January2022
SuMoTuWeThFrSa
1
2345678
9101112131415
16171819202122
23242526272829
3031
alias:建立命令別名
unalias:刪除別名
history:顯示命令歷史
clear:清除螢幕或視窗內容
watch:用於即時檢視當前命令打印資訊
輸入:watch -n 2date
解釋:watch`命令會每2秒執行一次`date`命令,並即時顯示輸出
大多數人學習Shell指令碼的最大動力是提高效率。使用Shell指令碼,你可以編寫一個任務,然後讓電腦去做,而你可以去忙其他的事情;你可以編寫一個任務,讓電腦重復執行,而不需要你每次在命令列手動輸入;你可以更靈活地處理任務,比如管理使用者,管理程式等。就這樣,Shell指令碼賦予你控制電腦的能力,在你的指尖下,一切盡在掌握。
在未來,實踐未知,探索無限,最好的方式是動手試試看,願這完整的100個命令清單能夠成為你在Linux世界裏的指南針!掌握Shell命令並利用它們來編寫指令碼能夠極大地提升你的工作效率,無論是進行系統管理還是進行程式設計,這都是一種強大的工具。善用它,享受編程帶給你的樂趣吧!