Linux 常用命令速查表
文件、文本、權限、進程、網絡等十類命令,含進程信號
共 126 條命令
ls -lah文件與目錄列出文件詳情,含隱藏文件與人類可讀大小
ls -lah /var/log
cd /path文件與目錄切換目錄,cd - 回到上一個目錄
cd /etc/nginx && cd -
pwd文件與目錄顯示當前所在目錄的絕對路徑
pwd
cp -r src dst文件與目錄遞歸複製目錄,-a 可保留權限與時間戳
cp -a /etc/nginx /backup/nginx
mv src dst文件與目錄移動或重命名文件與目錄
mv app.log app.log.bak
rm -rf dir文件與目錄遞歸強制刪除(高危,先 ls 確認路徑)
rm -rf /tmp/build
mkdir -p a/b/c文件與目錄遞歸創建目錄,父目錄不存在也不報錯
mkdir -p /data/app/logs
touch file文件與目錄創建空文件或更新文件時間戳
touch /tmp/health.ok
ln -s target link文件與目錄創建軟鏈接,改版本目錄時常用
ln -s /opt/app-1.2.0 /opt/app-current
stat file文件與目錄查看文件的權限、大小與三個時間戳
stat /etc/nginx/nginx.conf
file target文件與目錄根據內容判斷文件真實類型
file /data/export.bin
tree -L 2文件與目錄以樹形展示目錄結構,限定兩層
tree -L 2 -I node_modules
find /path -name "*.log"文件與目錄按名稱查找文件,支持通配符
find /var/log -name "*.log" -size +100M
find /path -mtime +7 -delete文件與目錄刪除 7 天前修改的文件,清理日誌常用
find /tmp -name "*.tmp" -mtime +7 -delete
locate keyword文件與目錄從索引庫快速查路徑,比 find 快得多
sudo updatedb && locate nginx.conf
cat file文本處理輸出文件全部內容,小文件適用
cat /etc/os-release
less file文本處理分頁查看大文件,/ 搜索、q 退出
less /var/log/nginx/access.log
head -n 20 file文本處理查看文件開頭若干行
head -n 20 access.log
tail -n 50 -f file文本處理實時跟蹤文件末尾,看日誌必備
tail -f /var/log/nginx/error.log
grep -rn "keyword" dir文本處理遞歸搜索並顯示行號
grep -rn --include="*.ts" "TODO" src/
grep -v "pattern" file文本處理反選,輸出不匹配的行
grep -v "^#" nginx.conf
sed -i "s/old/new/g" file文本處理就地批量替換,-i 直接改文件
sed -i "s/8080/8081/g" config.yml
sed -n "10,20p" file文本處理只輸出指定行區間
sed -n "10,20p" app.log
awk "{print $1, $3}" file文本處理按列提取字段,$0 是整行
awk "{print $1}" access.log | sort | uniq -ccut -d: -f1 file文本處理按分隔符取列,適合結構固定的文本
cut -d: -f1 /etc/passwd
sort -u file文本處理排序並去重,-n 按數值、-r 倒序
sort -nr access.log | head
uniq -c文本處理統計相鄰重複行出現次數,需先排序
sort access.log | uniq -c | sort -nr
wc -l file文本處理統計行數,-c 統計字節數
wc -l access.log
dos2unix file文本處理把 Windows 換行符 CRLF 轉成 Unix 的 LF
dos2unix win.txt
tr -s " "文本處理壓縮連續重複字符,常用於清理多餘空格
tr -s " " < in.txt > out.txt
xargs -I{} cmd {}文本處理把標準輸入拼成命令參數批量執行
find . -name "*.tmp" | xargs rm -f
tee file文本處理同時輸出到屏幕和文件,配合 sudo 寫文件常用
echo "1.2.3" | sudo tee /etc/app/version
diff -u a b文本處理對比兩個文件的差異,輸出統一格式
diff -u old.conf new.conf
chmod 755 file權限與用戶設置權限:所有者讀寫執行、其他人讀執行
chmod -R 755 /var/www/html
chmod -R 644 dir權限與用戶目錄內文件設為所有人可讀、僅所有者可寫
chmod -R 644 /etc/app/*.conf
chown -R user:group dir權限與用戶同時修改所有者與所屬組
chown -R www-data:www-data /var/www
chgrp group file權限與用戶只修改所屬組
chgrp developers /srv/project
umask 022權限與用戶設置新建文件的默認權限掩碼
umask 022
useradd -m -s /bin/bash ada權限與用戶創建用戶並生成家目錄,指定默認 Shell
useradd -m -s /bin/bash ada
usermod -aG docker ada權限與用戶把用戶追加到附加組,-a 不能省否則會覆蓋原有組
usermod -aG docker ada
passwd user權限與用戶修改指定用戶密碼
sudo passwd ada
su - user權限與用戶切換用戶並加載其環境變量
su - postgres
sudo -i權限與用戶以 root 身份開啓登錄 Shell
sudo -i
id權限與用戶查看當前用戶的 uid、gid 與所屬組
id
groups user權限與用戶查看用戶所屬的全部組
groups www-data
ps aux進程與作業查看全部進程快照,配合 grep 過濾
ps aux | grep -v grep | grep nginx
top進程與作業實時查看 CPU 與內存佔用,按 M 按內存排序
top -b -n 1 | head -20
htop進程與作業更友好的交互式進程查看器,需另行安裝
htop
kill <pid>進程與作業向進程發送 SIGTERM,請求優雅退出
kill 12345
kill -9 <pid>進程與作業強制殺死進程,可能丟數據,僅在前者無效時用
kill -9 12345
pkill -f "java -jar"進程與作業按完整命令行匹配殺進程,比 kill 方便
pkill -f "java -jar app.jar"
killall nginx進程與作業按進程名殺死同名進程
killall -HUP nginx
jobs / bg / fg進程與作業查看後臺作業並在前後臺之間切換
jobs -l
nohup cmd &進程與作業退出終端後進程繼續運行,輸出寫入 nohup.out
nohup ./start.sh > app.log 2>&1 &
nice -n 10 cmd進程與作業以較低優先級啓動,避免搶佔關鍵服務
nice -n 10 tar -czf backup.tgz /data
renice -n -5 -p <pid>進程與作業調整運行中進程的優先級
sudo renice -n -5 -p 12345
watch -n 2 cmd進程與作業每兩秒重複執行並刷新輸出
watch -n 2 "df -h /"
lsof -p <pid>進程與作業查看進程打開的文件與網絡連接
lsof -p 12345 | head
uname -a系統與資源查看內核版本與系統架構
uname -a
uptime系統與資源查看運行時長與平均負載
uptime
free -h系統與資源查看內存與交換分區使用情況
free -h
vmstat 1系統與資源每秒輸出 CPU、內存、IO 與上下文切換
vmstat 1 5
iostat -x 1系統與資源查看磁盤 IO 利用率與等待,定位 IO 瓶頸
iostat -x 1
env系統與資源打印全部環境變量,排查配置來源常用
env | grep PATH
export KEY=value系統與資源設置環境變量,僅對當前會話有效
export NODE_ENV=production
history系統與資源查看歷史命令,!! 重複上一條
history | grep systemctl
alias ll="ls -lah"系統與資源定義命令別名
alias ll="ls -lah"
date -d "@1700000000"系統與資源按時間戳格式化輸出時間
date -d "@1700000000" "+%F %T"
timedatectl系統與資源查看與設置系統時區、時間同步狀態
timedatectl set-timezone Asia/Shanghai
ulimit -n系統與資源查看或設置文件描述符上限,高併發服務要調
ulimit -n 65535
sysctl -w net.core.somaxconn=1024系統與資源臨時修改內核參數,重啓失效
sysctl -w net.ipv4.ip_forward=1
crontab -e系統與資源編輯當前用戶的定時任務
crontab -l
ip addr網絡與傳輸查看網卡與 IP 地址,替代已廢棄的 ifconfig
ip -br addr
ip route網絡與傳輸查看路由表與默認網關
ip route get 8.8.8.8
ss -tulpn網絡與傳輸列出監聽端口與對應進程,排障第一命令
ss -tulpn | grep 8080
netstat -anp網絡與傳輸查看全部連接與狀態,舊系統仍常用
netstat -anp | grep ESTABLISHED
ping -c 4 host網絡與傳輸連通性測試,發四個包後結束
ping -c 4 8.8.8.8
traceroute host網絡與傳輸逐跳查看路由路徑,定位鏈路問題
traceroute example.com
dig +short example.com網絡與傳輸查詢 DNS 解析結果,排查解析異常
dig +short example.com A
nslookup example.com 8.8.8.8網絡與傳輸指定 DNS 服務器查詢,判斷是否本地解析問題
nslookup example.com 8.8.8.8
curl -I https://example.com網絡與傳輸只取響應頭,快速看狀態碼與跳轉
curl -I -L https://example.com
curl -X POST -d "{}" url網絡與傳輸發送 JSON 請求體,接口調試常用
curl -X POST -H "Content-Type: application/json" -d "{}" http://localhost:8080/apiwget -c url網絡與傳輸斷點續傳下載大文件
wget -c https://example.com/big.iso
ssh -i key.pem user@host網絡與傳輸用私鑰登錄遠程主機
ssh -i ~/.ssh/id_ed25519 ada@10.0.0.5
scp -r dir user@host:/path網絡與傳輸在兩臺機器之間遞歸複製目錄
scp -r ./dist root@10.0.0.5:/var/www
rsync -avz --delete src/ dst/網絡與傳輸增量同步,--delete 讓目標端與源端一致
rsync -avz --delete ./dist/ deploy@10.0.0.5:/var/www/
nc -zv host 8080網絡與傳輸測試目標端口是否可達
nc -zv 10.0.0.5 8080
tcpdump -i any port 8080網絡與傳輸抓指定端口的包,排障時配合 -w 存文件
tcpdump -i any -nn port 8080 -w dump.pcap
df -h磁盤與壓縮查看各分區容量與使用率
df -h
du -sh *磁盤與壓縮統計當前目錄下各項佔用,找大文件常用
du -sh /* 2>/dev/null | sort -h
lsblk磁盤與壓縮以樹形查看塊設備與掛載點
lsblk -f
fdisk -l磁盤與壓縮列出磁盤與分區表信息
sudo fdisk -l
mount /dev/sdb1 /data磁盤與壓縮掛載設備到指定目錄
mount -o ro /dev/sdb1 /mnt
umount /data磁盤與壓縮卸載掛載點,提示忙時先用 lsof 查佔用
umount /data
mkfs.ext4 /dev/sdb1磁盤與壓縮格式化分區,會清空數據
mkfs.ext4 -L data /dev/sdb1
fsck /dev/sdb1磁盤與壓縮檢查並修復文件系統,需先卸載
fsck -y /dev/sdb1
tar -czf out.tgz dir磁盤與壓縮打包並 gzip 壓縮目錄
tar -czf backup-$(date +%F).tgz /data/app
tar -xzf in.tgz -C dir磁盤與壓縮解壓到指定目錄
tar -xzf app.tgz -C /opt
zip -r out.zip dir磁盤與壓縮遞歸打包為 zip,跨平臺兼容性好
zip -r site.zip ./dist
xz -9 file磁盤與壓縮高壓縮比壓縮,代價是更慢
xz -9 -T0 big.sql
systemctl start <unit>服務與日誌啓動服務,enable 設置開機自啓
systemctl enable --now nginx
systemctl status <unit>服務與日誌查看服務狀態與最近日誌
systemctl status nginx
systemctl list-units --failed服務與日誌列出啓動失敗的服務
systemctl list-units --failed
journalctl -u <unit>服務與日誌查看指定服務的日誌
journalctl -u nginx --since "1 hour ago"
journalctl -f服務與日誌實時跟蹤系統日誌
journalctl -f -p err
dmesg -T服務與日誌查看內核環形緩衝,排查 OOM 與被殺進程
dmesg -T | tail -50
apt update && apt upgrade服務與日誌Debian 系更新索引並升級已裝包
sudo apt update && sudo apt upgrade -y
apt install <pkg>服務與日誌安裝軟件包
sudo apt install -y curl
dpkg -l | grep <pkg>服務與日誌查詢已安裝包與版本
dpkg -l | grep nginx
dnf install <pkg>服務與日誌RHEL 系安裝包,舊版本用 yum
sudo dnf install -y nginx
strace -p <pid>排錯跟蹤進程的系統調用,定位卡在哪一步
strace -p 12345 -f -e trace=network
lsof -i :8080排錯查看佔用某端口的進程,端口衝突必查
sudo lsof -i :8080
ss -s排錯查看連接數量彙總,判斷是否連接耗盡
ss -s
iptables -L -n --line-numbers排錯查看防火牆規則鏈,排查被攔截
iptables -L INPUT -n --line-numbers
ufw allow 8080/tcp排錯放行端口,Ubuntu 上的簡化防火牆
ufw status verbose
nc -l 9000排錯在本地監聽端口,測試連通性
nc -l 9000
tail -f /var/log/syslog排錯實時看系統日誌,不同發行版路徑可能不同
tail -f /var/log/messages
grep -i "error" /var/log/*.log排錯在日誌裡快速找報錯行
grep -iE "error|fail" /var/log/app/*.log | tail -30
kill -15 <pid>信號SIGTERM,請求優雅退出,默認信號
kill -15 12345
kill -9 <pid>信號SIGKILL,內核強制終止,進程無法清理資源
kill -9 12345
kill -1 <pid>信號SIGHUP,常被服務解釋為重新加載配置
kill -1 $(cat /run/nginx.pid)
kill -2 <pid>信號SIGINT,等價於終端按 Ctrl+C
kill -2 12345
kill -3 <pid>信號SIGQUIT,JVM 收到會打印線程棧並退出
kill -3 12345
kill -18 / -19 <pid>信號SIGCONT / SIGSTOP,繼續與暫停進程(不可阻塞)
kill -19 12345 && kill -18 12345
kill -10 <pid>信號SIGUSR1,自定義用途,如 Nginx 重開日誌
kill -10 <nginx master pid>
kill -l信號列出系統支持的全部信號編號與名稱
kill -l
這個工具不好用,或者遇到 bug?
去回報