大多數的Linux和Unix系統、及其他類Unix系統中,Shell是用戶與操作系統內核交互的主要方式。作為一種強大的命令行解釋器,它也支持編程功能,用戶可以寫腳本來處理各種任務。無論你是新手還是專業人士,掌握Shell命令都是必不可少的技能。在這篇文章中,我將逐個解讀和展示Shell腳本中最常用的100個命令,并為每個命令提供實際的例子。
以下是在Linux系統中操作文件的一些常用命令:
ls /home
cd /home/user/Documents
pwd
cat /etc/passwd
more /var/log/syslog
less /var/log/syslog
touch /home/user/newfile.txt
cp /home/user/file.txt /home/user/Documents
mv /home/user/file.txt /home/user/Documents/newfile.txt
rm /home/user/unwantedfile.txt
find / -name "*.log"
grep "error" /var/log/syslog
head -n 10 /var/log/syslog
tail -n 20 /var/log/syslog
sort /etc/passwd
wc /var/log/syslog
cut -d: -f1 /etc/passwd
nano /home/user/file.txt
vi /home/user/file.txt
emacs /home/user/file.txt
paste file1.txt file2.txt
以下命令可以幫助你搜索文件或文本:
find / -name "*.log"
grep "error" /var/log/syslog
locate myFile.txt
which java
ack "your_search_term"
ag "your_search_term"
whereis ls
type pwd
apropos partition
alias l='ls -al'
以下是在Linux系統中操作目錄的一些常用命令:
mkdir /home/user/new_directory
rmdir /home/user/empty_directory
tree /home/user/
du -sh /home/user/Documents
df -h
在Linux系統中,文件和目錄的訪問可以通過權限操作命令進行控制:
chmod 755 /home/user/file.txt
表示設置文件的主用戶有讀,寫和執行權限(rwx=7),同組的用戶和其他用戶有讀和執行權限(rx=5)。
chown newuser:newgroup /home/user/file.txt
表示將/home/user/file.txt的所有者更改為newuser,所屬的組更改為newgroup。
chgrp newgroup /home/user/file.txt
表示將/home/user/file.txt的所屬的組更改為newgroup。
以下是在Linux系統中與網絡相關的一些常用命令:
ping www.google.com
ifconfig eth0
netstat -ntlp
ssh user@remote_host
scp /path/to/file user@remote_host:/remote/path/
curl www.google.com
telnet remote_host 23
nslookup www.google.com
ftp ftp_server
wget www.google.com -o google.html
以下是在Linux系統中管理進程和控制系統的一些常用命令:
ps aux
kill 1234
shutdown -h now
在編寫或處理文本文件時,下列命令可以幫助你完成各種復雜任務:
echo "Hello, World!"
printf "Name: %s\nAge: %d\n" "Alice" 20
echo "Hello, World!" | sed 's/World/Shell/g'
echo -e "name\tage\nAlice\t20\nBob\t22" | awk '{if ($2 >=21) print $1}'
以下命令主要用于管理和操作文件壓縮及解壓:
tar -cvf archive.tar folder
gzip file
gunzip file.gz
zip -r archive.zip folder
unzip archive.zip
管理和查看磁盤使用情況:
df -h
du -sh folder
sudo fdisk -l
sudo hdparm -i /dev/sda
在Debian,Ubuntu及其他基于Debian的系統中,可以使用以下命令進行軟件包管理:
sudo apt-get install package
sudo dpkg -i package.deb
在RedHat, CentOS及其他基于RPM的系統中,可以使用以下命令進行軟件包管理:
sudo yum install package
sudo rpm -i package.rpm
查看和管理正在運行的進程:
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.4 225848 7836 ? Ss Nov10 4:05 /lib/systemd/systemd --system --deserialize 39
root 2 0.0 0.0 0 0 ? S Nov10 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? I< Nov10 0:00 [kworker/0:0H]
htop
pkill process_name
查看或設置環境變量:
輸入:env
輸出:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
PWD=/home/user
輸入:set
輸出:展示所環境變量以及函數
輸入:
export VARName="Value"
echo $VARName
輸出結果:
Value
有時,你可能想要查看有關你的系統或硬件的信息。以下命令可以幫助你做到這一點:
輸入:
uname
輸出:
Linux
輸入:
hostname
輸出:
myhostname
輸入:
dmesg | less
輸入:df -h
輸出:
Filesystem Size Used Avail Use% Mounted on
udev 962M 0 962M 0% /dev
tmpfs 200M 4.3M 196M 3% /run
/dev/sda1 30G 4.7G 24G 17% /
輸入:free -h
輸出:
total used free shared buff/cache available
Mem: 3.8G 487M 1.9G 122M 1.4G 3.0G
Swap: 0B 0B 0B
輸入:uptime
輸出: 16:14:30 up 43 min, 1 user, load average: 0.34, 0.36, 0.40
輸入:last reboot
輸入:w
輸出: 16:17:51 up 1:42, 1 user, load average: 0.45, 0.47, 0.38
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user tty1 14:36 1:42m 1.55s 0.06s w
輸入:who
輸出: user tty1 2022-01-28 14:36
輸入:id
輸出:uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare)
在一些特殊情況下,你可能需要進行一些系統控制操作。以下命令可以幫助你做到這一點:
輸入:sudo halt
輸入:sudo reboot
關閉系統:sudo shutdown -h now
重啟系統:sudo shutdown -r now
更改密碼:passwd
Linux提供了多種命令行文本編輯器。以下這些可能是你需要知道的:
輸入:whatis ls
輸出: ls (1) - list directory contents
輸入:whereis ls
輸出: ls: /bin/ls /usr/share/man/man1/ls.1.gz
輸入:which ls
輸出:/bin/ls
輸入:whoami
輸出:user
輸入:date
輸出: Tue Dec 21 02:16:12 UTC 2021
輸入:cal
輸出:
January 2022
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
輸入:watch -n 2 date
解釋:watch`命令會每2秒運行一次`date`命令,并實時顯示輸出
大多數人學習Shell腳本的最大動力是提高效率。使用Shell腳本,你可以編寫一個任務,然后讓計算機去做,而你可以去忙其他的事情;你可以編寫一個任務,讓計算機重復執行,而不需要你每次在命令行手動輸入;你可以更靈活地處理任務,比如管理用戶,管理程序等。就這樣,Shell腳本賦予你控制計算機的能力,在你的指尖下,一切盡在掌握。
在未來,實踐未知,探索無限,最好的方式是動手試試看,愿這完整的100個命令清單能夠成為你在Linux世界里的指南針!掌握Shell命令并利用它們來編寫腳本能夠極大地提升你的工作效率,無論是進行系統管理還是進行程序設計,這都是一種強大的工具。善用它,享受編程帶給你的樂趣吧!
hell腳本是一個命令語言,面向的是操作系統執行。如果寫過shell腳本的話,應該體會過編寫過程的痛苦。因為shell并不是一個編程語言,并不支持常見的數組,JSON等數據結構,也不支持面向對象編程的開發方法,因此對開發人員很不友好。
目前針對這種情況,大家一般會用shell調用node執行JS腳本,真正的處理邏輯放在JS腳本中處理。現在谷歌推出了 ZX NPM包,它能夠用JS編寫shell腳本。
那如何使用呢?
npm install -g zx
安裝完后,在終端中輸入 zx 命令檢查安裝是否成功。
新建zx腳本文件:test.mjs
#!/usr/bin/env zx
const branch=await $`git branch --show-current`
console.log(`Current branch: ${branch}`)
第一行是指定腳本的執行器。
$ 是內置的函數,能夠執行命令并配合 await 返回執行結果。其他的寫法都和JS毫無差別。
zx ./test.mjs
或者:
chmod +x ./test.mjs
./test.mjs
控制臺就會輸出當前的分支。
上面只是小試牛刀,zx 的強大遠不止如此。由于 zx 在內部實現了 Bash 的解釋器,所以可以執行全部的shell命令。另外 zx 還內置很多nodejs模塊,比如 fs, os,fetch等。所以可以直接在腳本中使用這些模塊。
另外作為TS編寫的庫,全部的JS語法都能夠支持。包括但不限于 數組,Promise,class等。
下面再舉一個例子:
let resp=await fetch('http://wttr.in')
if (resp.ok) {
console.log(await resp.text())
}
let hosts=[...]
await Promise.all(hosts.map(host=>
$`rsync -azP ./src ${host}:/var/www`
))
try {
await $`exit 1`
} catch (p) {
console.log(`Exit code: ${p.exitCode}`)
console.log(`Error: ${p.stderr}`)
}
總結一下,zx 的最大優點是結合了Bash和JavaScript,解決了shell腳本復雜邏輯編程的問題。同時也讓對shell不熟悉的開發者也能用JS完成shell腳本的開發,而且更加靈活高效。
如果你還有更多問題,可以參考NPM倉庫 zx 包的介紹,或者訪問其github地址。
歡迎幫忙點贊,評論,轉發~
*請認真填寫需求信息,我們會在24小時內與您取得聯系。