常用 Linux 命令速查表
这篇就是给自己查命令用的。
Linux 命令太多,不可能全背。平时能记住常用的,剩下的需要时能快速翻到就行。

目录
常用命令简表
| 要干嘛 | 常用命令 |
|---|---|
| 看目录 | ls, tree |
| 切目录 | cd, pwd |
| 复制移动删除 | cp, mv, rm |
| 看文件 | cat, less, head, tail |
| 搜文本 | grep, rg |
| 处理文本 | awk, sed, cut, sort, uniq |
| 找文件 | find, locate, which |
| 改权限 | chmod, chown |
| 看进程 | ps, top, htop, kill |
| 看网络 | ip, ss, curl, ping, ssh |
| 打包压缩 | tar, zip, gzip |
文件和目录
ls
看目录:
ls
ls -l
ls -la
ls -lh常用参数:
-l:详细列表-a:显示隐藏文件-h:文件大小更好看,比如1.2G
cd 和 pwd
pwd
cd /var/www
cd ~
cd -cd - 可以回到上一个目录,挺常用。
cp
cp a.txt b.txt
cp -r src/ backup/
cp -a src/ backup/-a 会尽量保留权限、时间等信息,备份目录时比 -r 更稳一点。
mv
mv old.txt new.txt
mv file.txt /tmp/既能移动,也能改名。
rm
rm file.txt
rm -r folder/
rm -rf folder/rm -rf 别手滑。尤其是带变量的时候,先 echo 一下路径,不然删错真没得后悔。
mkdir
mkdir logs
mkdir -p app/data/cache-p 会自动创建中间目录。
查看文件
cat
cat file.txt小文件直接看。大文件别用它硬刷屏。
less
less app.log常用操作:
/关键词:搜索n:下一个结果q:退出
head 和 tail
head -n 20 app.log
tail -n 50 app.log
tail -f app.log看日志一般用 tail -f。
nl
nl file.txt带行号显示文件。排查配置时有用。
文本处理
grep
grep "ERROR" app.log
grep -n "ERROR" app.log
grep -R "listen" /etc/nginx
grep -i "error" app.log常用参数:
-n:显示行号-R:递归搜索目录-i:忽略大小写
如果系统里有 rg,我一般会优先用 rg,快很多:
rg "ERROR"
rg "listen" /etc/nginxsed
sed -n '1,20p' file.txt
sed 's/old/new/g' file.txt常用来替换文本或者只看某几行。
awk
awk '{print $1}' access.log
awk '{print $1, $9}' access.log按列处理文本。日志分析经常用。
cut
cut -d':' -f1 /etc/passwd
cut -d',' -f1,3 data.csv简单分列就用它,不用上来就写一堆脚本。
sort 和 uniq
sort file.txt
sort -n numbers.txt
sort file.txt | uniq
sort file.txt | uniq -c统计重复项时很顺手。
wc
wc -l file.txt
wc -c file.txt数行数、字节数。
查找文件
find
find . -name "*.log"
find /var/log -type f -mtime -7
find . -type f -size +100M几个常用条件:
-name:按名字-type f:只找文件-type d:只找目录-mtime -7:7 天内改过-size +100M:大于 100M
which
which nginx
which python看命令到底从哪来的。
locate
locate nginx.conf快,但是依赖索引。刚创建的文件可能搜不到。
权限和用户
chmod
chmod 644 file.txt
chmod 755 script.sh
chmod +x script.sh常见权限:
644:普通文件755:可执行脚本或目录600:私钥这类敏感文件
chown
sudo chown user:group file.txt
sudo chown -R www-data:www-data /var/www/app网站目录权限不对时经常要看这个。
用户相关
whoami
id
passwd
sudo useradd name
sudo usermod -aG sudo name进程和服务
看进程
ps aux
ps aux | grep nginx
top
htop有 htop 就用 htop,看着舒服点。
杀进程
kill 1234
kill -9 1234
pkill -f nginxkill -9 是强杀,不是万能修复按钮。先正常 kill,不行再用。
systemd 服务
sudo systemctl status nginx
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl enable nginx看服务日志:
journalctl -u nginx -f
journalctl -u nginx --since "1 hour ago"网络相关
IP 和端口
ip addr
ip route
ss -tuln
ss -tulnpss -tulnp 能看哪个进程占了哪个端口。
连通性
ping 1.1.1.1
curl -I https://example.com
curl http://127.0.0.1:3000测 HTTP 服务别只会 ping。ping 通不代表网站活着。
SSH
ssh root@1.2.3.4
ssh -p 2222 user@1.2.3.4
scp file.txt user@1.2.3.4:/tmp/rsync
rsync -avz ./dist/ user@server:/var/www/app/
rsync -avz --delete ./dist/ user@server:/var/www/app/--delete 会删除目标端多出来的文件,用之前先想清楚。
软件包管理
Debian / Ubuntu:
sudo apt update
sudo apt install nginx
sudo apt upgradeCentOS / RHEL:
sudo yum install nginx
sudo dnf install nginxArch:
sudo pacman -S nginxopenSUSE:
sudo zypper install nginx不同发行版命令不一样。别复制错系统了。
磁盘和挂载
看磁盘
df -h
du -sh *
du -sh /var/log找大目录:
du -h --max-depth=1 / | sort -h块设备
lsblk
blkid
sudo fdisk -l挂载
sudo mount /dev/sdb1 /mnt
sudo umount /mnt压缩和解压
tar
tar -czvf archive.tar.gz folder/
tar -xzvf archive.tar.gz
tar -tzf archive.tar.gzzip
zip -r archive.zip folder/
unzip archive.zipgzip
gzip file.txt
gunzip file.txt.gz日志和排错
dmesg
journalctl -xe
journalctl -u service-name -f
tail -f /var/log/syslog
tail -f /var/log/nginx/error.log端口被占用:
sudo lsof -i :80
sudo ss -tulnp | grep :80配置改完不生效,先看服务有没有重启,再看日志。很多问题不是配置没写,是服务根本没加载。
Shell 小东西
环境变量
env
printenv
export NODE_ENV=production
echo $PATHalias
alias ll='ls -lah'
alias gs='git status'写进 ~/.bashrc 或 ~/.zshrc 才会长期生效。
执行脚本
chmod +x script.sh
./script.sh定时任务
crontab -e
crontab -l几个常用一行命令
找大文件:
find / -type f -size +500M 2>/dev/null查日志里的错误:
grep -R --line-number "ERROR" /var/log 2>/dev/null看当前目录每个文件夹大小:
du -h --max-depth=1 . | sort -h同步网站构建产物:
rsync -avz --delete ./dist/ user@server:/var/www/site/看某个服务最近日志:
journalctl -u nginx --since "2 hours ago" -f找占用端口的进程:
sudo ss -tulnp | grep :3000批量删 .tmp 文件:
find . -type f -name "*.tmp" -delete这个命令执行前最好先把 -delete 去掉看一眼结果:
find . -type f -name "*.tmp"别上来就删,删错挺麻烦。