这篇就是给自己查命令用的。

Linux 命令太多,不可能全背。平时能记住常用的,剩下的需要时能快速翻到就行。

目录

  1. 常用命令简表
  2. 文件和目录
  3. 查看文件
  4. 文本处理
  5. 查找文件
  6. 权限和用户
  7. 进程和服务
  8. 网络相关
  9. 软件包管理
  10. 磁盘和挂载
  11. 压缩和解压
  12. 日志和排错
  13. Shell 小东西
  14. 几个常用一行命令

常用命令简表

要干嘛 常用命令
看目录 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

看目录:

1
2
3
4
ls
ls -l
ls -la
ls -lh

常用参数:

  • -l:详细列表
  • -a:显示隐藏文件
  • -h:文件大小更好看,比如 1.2G

cdpwd

1
2
3
4
pwd
cd /var/www
cd ~
cd -

cd - 可以回到上一个目录,挺常用。

cp

1
2
3
cp a.txt b.txt
cp -r src/ backup/
cp -a src/ backup/

-a 会尽量保留权限、时间等信息,备份目录时比 -r 更稳一点。

mv

1
2
mv old.txt new.txt
mv file.txt /tmp/

既能移动,也能改名。

rm

1
2
3
rm file.txt
rm -r folder/
rm -rf folder/

rm -rf 别手滑。尤其是带变量的时候,先 echo 一下路径,不然删错真没得后悔。

mkdir

1
2
mkdir logs
mkdir -p app/data/cache

-p 会自动创建中间目录。

查看文件

cat

1
cat file.txt

小文件直接看。大文件别用它硬刷屏。

less

1
less app.log

常用操作:

  • /关键词:搜索
  • n:下一个结果
  • q:退出

headtail

1
2
3
head -n 20 app.log
tail -n 50 app.log
tail -f app.log

看日志一般用 tail -f

nl

1
nl file.txt

带行号显示文件。排查配置时有用。

文本处理

grep

1
2
3
4
grep "ERROR" app.log
grep -n "ERROR" app.log
grep -R "listen" /etc/nginx
grep -i "error" app.log

常用参数:

  • -n:显示行号
  • -R:递归搜索目录
  • -i:忽略大小写

如果系统里有 rg,我一般会优先用 rg,快很多:

1
2
rg "ERROR"
rg "listen" /etc/nginx

sed

1
2
sed -n '1,20p' file.txt
sed 's/old/new/g' file.txt

常用来替换文本或者只看某几行。

awk

1
2
awk '{print $1}' access.log
awk '{print $1, $9}' access.log

按列处理文本。日志分析经常用。

cut

1
2
cut -d':' -f1 /etc/passwd
cut -d',' -f1,3 data.csv

简单分列就用它,不用上来就写一堆脚本。

sortuniq

1
2
3
4
sort file.txt
sort -n numbers.txt
sort file.txt | uniq
sort file.txt | uniq -c

统计重复项时很顺手。

wc

1
2
wc -l file.txt
wc -c file.txt

数行数、字节数。

查找文件

find

1
2
3
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

1
2
which nginx
which python

看命令到底从哪来的。

locate

1
locate nginx.conf

快,但是依赖索引。刚创建的文件可能搜不到。

权限和用户

chmod

1
2
3
chmod 644 file.txt
chmod 755 script.sh
chmod +x script.sh

常见权限:

  • 644:普通文件
  • 755:可执行脚本或目录
  • 600:私钥这类敏感文件

chown

1
2
sudo chown user:group file.txt
sudo chown -R www-data:www-data /var/www/app

网站目录权限不对时经常要看这个。

用户相关

1
2
3
4
5
whoami
id
passwd
sudo useradd name
sudo usermod -aG sudo name

进程和服务

看进程

1
2
3
4
ps aux
ps aux | grep nginx
top
htop

htop 就用 htop,看着舒服点。

杀进程

1
2
3
kill 1234
kill -9 1234
pkill -f nginx

kill -9 是强杀,不是万能修复按钮。先正常 kill,不行再用。

systemd 服务

1
2
3
4
sudo systemctl status nginx
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl enable nginx

看服务日志:

1
2
journalctl -u nginx -f
journalctl -u nginx --since "1 hour ago"

网络相关

IP 和端口

1
2
3
4
ip addr
ip route
ss -tuln
ss -tulnp

ss -tulnp 能看哪个进程占了哪个端口。

连通性

1
2
3
ping 1.1.1.1
curl -I https://example.com
curl http://127.0.0.1:3000

测 HTTP 服务别只会 ping。ping 通不代表网站活着。

SSH

1
2
3
ssh root@1.2.3.4
ssh -p 2222 user@1.2.3.4
scp file.txt user@1.2.3.4:/tmp/

rsync

1
2
rsync -avz ./dist/ user@server:/var/www/app/
rsync -avz --delete ./dist/ user@server:/var/www/app/

--delete 会删除目标端多出来的文件,用之前先想清楚。

软件包管理

Debian / Ubuntu:

1
2
3
sudo apt update
sudo apt install nginx
sudo apt upgrade

CentOS / RHEL:

1
2
sudo yum install nginx
sudo dnf install nginx

Arch:

1
sudo pacman -S nginx

openSUSE:

1
sudo zypper install nginx

不同发行版命令不一样。别复制错系统了。

磁盘和挂载

看磁盘

1
2
3
df -h
du -sh *
du -sh /var/log

找大目录:

1
du -h --max-depth=1 / | sort -h

块设备

1
2
3
lsblk
blkid
sudo fdisk -l

挂载

1
2
sudo mount /dev/sdb1 /mnt
sudo umount /mnt

压缩和解压

tar

1
2
3
tar -czvf archive.tar.gz folder/
tar -xzvf archive.tar.gz
tar -tzf archive.tar.gz

zip

1
2
zip -r archive.zip folder/
unzip archive.zip

gzip

1
2
gzip file.txt
gunzip file.txt.gz

日志和排错

1
2
3
4
5
dmesg
journalctl -xe
journalctl -u service-name -f
tail -f /var/log/syslog
tail -f /var/log/nginx/error.log

端口被占用:

1
2
sudo lsof -i :80
sudo ss -tulnp | grep :80

配置改完不生效,先看服务有没有重启,再看日志。很多问题不是配置没写,是服务根本没加载。

Shell 小东西

环境变量

1
2
3
4
env
printenv
export NODE_ENV=production
echo $PATH

alias

1
2
alias ll='ls -lah'
alias gs='git status'

写进 ~/.bashrc~/.zshrc 才会长期生效。

执行脚本

1
2
chmod +x script.sh
./script.sh

定时任务

1
2
crontab -e
crontab -l

几个常用一行命令

找大文件:

1
find / -type f -size +500M 2>/dev/null

查日志里的错误:

1
grep -R --line-number "ERROR" /var/log 2>/dev/null

看当前目录每个文件夹大小:

1
du -h --max-depth=1 . | sort -h

同步网站构建产物:

1
rsync -avz --delete ./dist/ user@server:/var/www/site/

看某个服务最近日志:

1
journalctl -u nginx --since "2 hours ago" -f

找占用端口的进程:

1
sudo ss -tulnp | grep :3000

批量删 .tmp 文件:

1
find . -type f -name "*.tmp" -delete

这个命令执行前最好先把 -delete 去掉看一眼结果:

1
find . -type f -name "*.tmp"

别上来就删,删错挺麻烦。