Linux 命令速查手册

写在前面

本文整理了日常开发和运维中最常用的 Linux 命令,涵盖参数说明与实际示例,方便随时查阅。每个命令都力求实用,避免罗列用不到的冷门参数。


一、文件与目录

1.1 ls — 列出目录内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 列出当前目录文件
ls

# 显示详细信息(权限、大小、时间)
ls -l

# 显示隐藏文件(以 . 开头的文件)
ls -a

# 按时间倒序排列(最新的在前)
ls -lt

# 按文件大小倒序排列
ls -lS

# 人类可读的文件大小(KB、MB、GB)
ls -lh

# 只显示目录名,不显示内容
ls -d */

# 递归列出所有子目录
ls -R

1.2 cd — 切换目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 切换到指定目录
cd /home/user/project

# 切换到上一级目录
cd ..

# 切换到用户主目录
cd ~
cd

# 切换到上一次所在的目录
cd -

1.3 pwd — 显示当前目录

1
2
# 显示当前所在目录的完整路径
pwd

1.4 mkdir — 创建目录

1
2
3
4
5
6
7
8
# 创建目录
mkdir my-folder

# 递归创建多级目录
mkdir -p project/src/main/java

# 创建时指定权限
mkdir -m 755 my-folder

1.5 cp — 复制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 复制文件
cp file.txt backup.txt

# 复制目录(递归)
cp -r my-folder my-folder-backup

# 复制前确认是否覆盖
cp -i file.txt /target/

# 保持文件属性(权限、时间戳等)
cp -p file.txt /target/

# 显示复制过程
cp -rv my-folder /target/

1.6 mv — 移动/重命名

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 重命名文件
mv old-name.txt new-name.txt

# 移动文件到目录
mv file.txt /home/user/

# 移动目录
mv my-folder /home/user/

# 移动前确认是否覆盖
mv -i file.txt /target/

1.7 rm — 删除

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 删除文件
rm file.txt

# 删除前确认
rm -i file.txt

# 强制删除(不提示确认)
rm -f file.txt

# 递归删除目录及其内容
rm -r my-folder

# 强制递归删除目录(谨慎使用)
rm -rf my-folder

注意rm -rf 不可恢复,使用前确认路径正确。千万不要执行 rm -rf /

1.8 touch — 创建空文件/更新时间戳

1
2
3
4
5
6
7
8
# 创建空文件
touch newfile.txt

# 同时创建多个文件
touch file1.txt file2.txt file3.txt

# 更新文件的修改时间(文件已存在时不改变内容)
touch existing-file.txt

1.9 ln — 创建链接

1
2
3
4
5
6
7
8
# 创建软链接(类似快捷方式)
ln -s /usr/local/java/jdk-17 java17

# 创建硬链接(共享同一个 inode)
ln original.txt hardlink.txt

# 查看链接指向
ls -l java17

软链接可以跨文件系统,删源文件后链接失效;硬链接不能跨文件系统,删源文件后仍可访问。

1.10 find — 查找文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 按文件名查找
find /home -name "*.log"

# 按文件名查找(不区分大小写)
find /home -iname "*.JPG"

# 按类型查找(f=文件,d=目录,l=链接)
find /var -type f -name "*.conf"
find /home -type d -name "project"

# 按大小查找(大于100MB的文件)
find / -type f -size +100M

# 按修改时间查找(7天内修改过的文件)
find /home -type f -mtime -7

# 按权限查找
find /home -type f -perm 755

# 查找并执行操作(删除7天前的日志)
find /var/log -name "*.log" -mtime +7 -delete

# 查找并执行命令(对结果执行 ls -l)
find /home -name "*.txt" -exec ls -l {} \;

1.11 tree — 树形显示目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 显示目录树
tree

# 只显示目录,不显示文件
tree -d

# 指定显示深度
tree -L 2

# 显示文件大小
tree -h

二、文件查看与编辑

2.1 cat — 查看文件内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看文件全部内容
cat file.txt

# 显示行号
cat -n file.txt

# 合并多个文件
cat file1.txt file2.txt > merged.txt

# 追加内容到文件
cat file1.txt >> file2.txt

2.2 head — 查看文件开头

1
2
3
4
5
6
7
8
# 查看前10行(默认)
head file.txt

# 查看前20行
head -n 20 file.txt

# 查看前1KB内容
head -c 1024 file.txt

2.3 tail — 查看文件末尾

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 查看最后10行(默认)
tail file.txt

# 查看最后50行
tail -n 50 file.txt

# 实时查看日志(最常用)
tail -f app.log

# 实时查看并显示行号
tail -fn 100 app.log

# 从第100行开始显示
tail -n +100 file.txt

2.4 less — 分页查看

1
2
3
4
5
# 分页查看大文件
less large-file.log

# 带行号查看
less -N file.txt

less 内操作:空格/b 翻页,/ 搜索,q 退出,G 跳到末尾,gg 跳到开头。

2.5 grep — 文本搜索

 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
# 搜索包含关键词的行
grep "ERROR" app.log

# 不区分大小写搜索
grep -i "error" app.log

# 显示行号
grep -n "ERROR" app.log

# 显示匹配行的前后各3行(上下文)
grep -C 3 "ERROR" app.log

# 只显示匹配的文件名
grep -l "ERROR" *.log

# 递归搜索目录下所有文件
grep -r "ERROR" /var/log/

# 反向搜索(不包含关键词的行)
grep -v "DEBUG" app.log

# 统计匹配行数
grep -c "ERROR" app.log

# 使用正则表达式
grep -E "ERROR|WARN" app.log

# 只匹配完整单词
grep -w "error" app.log

2.6 wc — 统计

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 统计行数
wc -l file.txt

# 统计单词数
wc -w file.txt

# 统计字节数
wc -c file.txt

# 统计文件行数(配合 find 使用)
find . -name "*.java" | xargs wc -l

2.7 sort — 排序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 默认按字母升序
sort file.txt

# 按数字大小排序
sort -n numbers.txt

# 倒序排列
sort -r file.txt

# 按第2列排序
sort -k2 file.txt

# 去重排序
sort -u file.txt

2.8 uniq — 去重

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 去除连续重复行(需先排序)
sort file.txt | uniq

# 统计每行出现的次数
sort file.txt | uniq -c

# 只显示重复的行
sort file.txt | uniq -d

# 只显示不重复的行
sort file.txt | uniq -u

2.9 awk — 文本处理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 打印第1列
awk '{print $1}' file.txt

# 打印第1列和第3列
awk '{print $1, $3}' file.txt

# 指定分隔符
awk -F: '{print $1}' /etc/passwd

# 按条件过滤(第3列大于100)
awk '$3 > 100 {print $0}' file.txt

# 统计文件总行数
awk 'END {print NR}' file.txt

2.10 sed — 流编辑器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 替换每行第一个匹配
sed 's/old/new/' file.txt

# 替换所有匹配
sed 's/old/new/g' file.txt

# 删除匹配行
sed '/^#/d' file.txt

# 显示指定行(第10到20行)
sed -n '10,20p' file.txt

# 直接修改文件(不加 -i 只输出到终端)
sed -i 's/old/new/g' file.txt

三、权限与用户

3.1 chmod — 修改权限

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 给所有者添加执行权限
chmod u+x script.sh

# 设置具体权限(所有者读写执行,组读执行,其他人读执行)
chmod 755 script.sh

# 递归修改目录权限
chmod -R 755 /var/www/

# 常用权限值
# 755 — 所有者全权限,其他读和执行
# 644 — 所有者读写,其他只读
# 600 — 只有所有者能读写
# 777 — 所有人全权限(不推荐在生产环境使用)

3.2 chown — 修改所有者

1
2
3
4
5
6
7
8
# 修改文件所有者
chown user file.txt

# 修改文件所有者和所属组
chown user:group file.txt

# 递归修改目录
chown -R user:group /var/www/

3.3 sudo — 以管理员权限执行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 以 root 权限执行命令
sudo command

# 以指定用户执行
sudo -u username command

# 切换到 root 用户
sudo su -

# 编辑需要 root 权限的文件
sudo vim /etc/nginx/nginx.conf

3.4 用户管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建用户
useradd username

# 创建用户并创建主目录
useradd -m username

# 设置用户密码
passwd username

# 删除用户
userdel username

# 删除用户及其主目录
userdel -r username

# 查看当前用户
whoami

# 查看用户信息
id username

# 切换用户
su - username

3.5 用户组管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建用户组
groupadd devgroup

# 将用户添加到组
usermod -aG devgroup username

# 查看用户所属的组
groups username

# 删除用户组
groupdel devgroup

四、进程管理

4.1 ps — 查看进程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查看当前终端的进程
ps

# 查看所有进程(常用)
ps aux

# 查看所有进程(BSD 格式,更可读)
ps -ef

# 查找指定进程
ps aux | grep nginx

# 按内存使用排序(取前10)
ps aux --sort=-%mem | head -10

# 按CPU使用排序(取前10)
ps aux --sort=-%cpu | head -10

# 查看进程树
ps -ef --forest

4.2 top / htop — 实时监控

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 实时查看进程资源占用
top

# 按内存排序(进入 top 后按 M)
# 按CPU排序(进入 top 后按 P)
# 按进程ID排序(进入 top 后按 N)
# 退出(按 q)

# htop 是增强版(需安装),支持鼠标和快捷键
htop

4.3 kill — 终止进程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 正常终止进程
kill 12345

# 强制终止进程
kill -9 12345

# 按名称终止进程
killall nginx

# 按名称模糊终止
pkill -f "java -jar app"

# 查看所有信号
kill -l

常用信号:15 (SIGTERM) 正常终止,9 (SIGKILL) 强制终止,1 (SIGHUP) 重新加载配置。

4.4 nohup — 后台运行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 后台运行,输出到 nohup.out
nohup java -jar app.jar &

# 指定日志输出文件
nohup java -jar app.jar > app.log 2>&1 &

# 查看后台任务
jobs

# 将后台任务调到前台
fg %1

4.5 systemctl — 服务管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 启动服务
sudo systemctl start nginx

# 停止服务
sudo systemctl stop nginx

# 重启服务
sudo systemctl restart nginx

# 重新加载配置(不中断服务)
sudo systemctl reload nginx

# 查看服务状态
sudo systemctl status nginx

# 设置开机自启
sudo systemctl enable nginx

# 取消开机自启
sudo systemctl disable nginx

# 查看所有已启动的服务
sudo systemctl list-units --type=service --state=running

五、网络

5.1 ip / ifconfig — 查看网络信息

1
2
3
4
5
6
7
8
9
# 查看所有网卡IP地址
ip addr
ip a

# 查看指定网卡
ip addr show eth0

# 老命令(部分系统仍可用)
ifconfig

5.2 ping — 测试网络连通性

1
2
3
4
5
6
7
8
# 测试是否可达
ping 8.8.8.8

# 指定次数(发4个包后停止)
ping -c 4 baidu.com

# 指定间隔(每2秒发一次)
ping -i 2 baidu.com

5.3 curl — HTTP 请求

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# GET 请求
curl https://example.com

# 只显示响应头
curl -I https://example.com

# POST 请求(JSON)
curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "test"}'

# 下载文件
curl -O https://example.com/file.tar.gz

# 指定超时时间(秒)
curl --connect-timeout 5 --max-time 10 https://example.com

# 显示请求耗时
curl -o /dev/null -s -w "time_total: %{time_total}s\n" https://example.com

# 带认证
curl -u username:password https://api.example.com

5.4 wget — 下载文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 下载文件
wget https://example.com/file.tar.gz

# 指定保存文件名
wget -O myfile.tar.gz https://example.com/file.tar.gz

# 后台下载
wget -b https://example.com/large-file.zip

# 断点续传
wget -c https://example.com/large-file.zip

5.5 netstat / ss — 查看端口与连接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 查看所有监听端口
ss -tlnp

# 查看指定端口占用
ss -tlnp | grep 8080

# 查看所有网络连接
ss -an

# 老命令(部分系统仍可用)
netstat -tlnp
netstat -an | grep 8080

5.6 nslookup / dig — DNS 查询

1
2
3
4
5
6
7
8
# 查询域名解析
nslookup baidu.com

# 查询指定DNS服务器
nslookup baidu.com 8.8.8.8

# 详细DNS查询
dig baidu.com

5.7 防火墙(firewalld)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看防火墙状态
sudo firewall-cmd --state

# 开放端口
sudo firewall-cmd --add-port=8080/tcp --permanent

# 开放服务
sudo firewall-cmd --add-service=http --permanent

# 重新加载配置
sudo firewall-cmd --reload

# 查看已开放的端口
sudo firewall-cmd --list-ports

# 查看所有规则
sudo firewall-cmd --list-all

六、磁盘与内存

6.1 df — 查看磁盘空间

1
2
3
4
5
6
7
8
# 查看所有磁盘使用情况
df -h

# 查看指定目录所在磁盘
df -h /home

# 显示文件系统类型
df -T

6.2 du — 查看目录大小

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看当前目录总大小
du -sh

# 查看各子目录大小
du -sh *

# 查看指定目录大小
du -sh /var/log

# 按大小排序(找出最大的目录)
du -sh * | sort -rh | head -10

6.3 free — 查看内存使用

1
2
3
4
5
6
7
8
# 查看内存使用(人类可读)
free -h

# 每隔2秒刷新一次
free -h -s 2

# 以MB为单位显示
free -m

6.4 mount / umount — 挂载磁盘

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查看已挂载的磁盘
mount

# 挂载磁盘到目录
sudo mount /dev/sdb1 /data

# 卸载磁盘
sudo umount /data

# 查看可用磁盘
lsblk

七、压缩与解压

7.1 tar — 打包与解包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 打包并gzip压缩
tar -czf archive.tar.gz folder/

# 打包并gzip压缩(显示过程)
tar -czvf archive.tar.gz folder/

# 解压 .tar.gz
tar -xzf archive.tar.gz

# 解压到指定目录
tar -xzf archive.tar.gz -C /target/

# 解压 .tar.bz2
tar -xjf archive.tar.bz2

# 只查看压缩包内容(不解压)
tar -tzf archive.tar.gz

# 追加文件到已有包
tar -rf archive.tar newfile.txt

参数记忆:-c 创建,-x 解压,-t 查看,-z gzip,-j bzip2,-v 显示过程,-f 指定文件名。

7.2 zip / unzip

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 压缩文件
zip archive.zip file1.txt file2.txt

# 压缩目录
zip -r archive.zip my-folder/

# 解压
unzip archive.zip

# 解压到指定目录
unzip archive.zip -d /target/

# 查看压缩包内容
unzip -l archive.zip

八、系统信息

8.1 系统基础信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 查看系统版本
cat /etc/os-release

# 查看内核版本
uname -r

# 查看全部系统信息
uname -a

# 查看主机名
hostname

# 查看系统运行时间
uptime

# 查看CPU信息
lscpu
# 或
cat /proc/cpuinfo

# 查看内存信息
cat /proc/meminfo

8.2 环境变量

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 查看所有环境变量
env

# 查看指定环境变量
echo $PATH
echo $JAVA_HOME

# 设置环境变量(当前会话生效)
export MY_VAR="hello"

# 永久生效(写入配置文件)
echo 'export JAVA_HOME=/usr/local/java/jdk-17' >> ~/.bashrc
source ~/.bashrc

九、远程与传输

9.1 ssh — 远程连接

1
2
3
4
5
6
7
8
# 连接远程服务器
ssh user@192.168.1.100

# 指定端口
ssh -p 2222 user@192.168.1.100

# 使用密钥登录
ssh -i ~/.ssh/my-key.pem user@192.168.1.100

9.2 scp — 远程复制

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 上传本地文件到远程
scp file.txt user@192.168.1.100:/home/user/

# 上传目录到远程
scp -r my-folder user@192.168.1.100:/home/user/

# 从远程下载文件
scp user@192.168.1.100:/home/user/file.txt ./

# 从远程下载目录
scp -r user@192.168.1.100:/home/user/my-folder ./

# 指定端口
scp -P 2222 file.txt user@192.168.1.100:/home/user/

9.3 rsync — 高效同步

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 同步本地目录到远程
rsync -avz my-folder/ user@192.168.1.100:/home/user/my-folder/

# 同步远程目录到本地
rsync -avz user@192.168.1.100:/home/user/my-folder/ ./my-folder/

# 显示传输进度
rsync -avz --progress my-folder/ user@192.168.1.100:/home/user/my-folder/

# 删除目标端多余的文件(保持完全一致)
rsync -avz --delete my-folder/ user@192.168.1.100:/home/user/my-folder/

rsync 只传输差异部分,比 scp 快很多,适合大文件和频繁同步。


十、管道与重定向

10.1 管道 |

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 查找进程
ps aux | grep nginx

# 统计日志中ERROR出现次数
grep "ERROR" app.log | wc -l

# 查找并排序
cat file.txt | sort | uniq -c | sort -rn

# 查看占用80端口的进程
ss -tlnp | grep :80

10.2 重定向

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 输出重定向到文件(覆盖)
echo "hello" > file.txt

# 输出追加重定向
echo "hello" >> file.txt

# 错误输出重定向
command 2> error.log

# 标准输出和错误都重定向
command > all.log 2>&1

# 丢弃所有输出
command > /dev/null 2>&1

# 输入重定向
command < input.txt

十一、常用组合命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 查找占用指定端口的进程并终止
ss -tlnp | grep :8080 | awk '{print $7}' | cut -d/ -f1 | xargs kill -9

# 统计代码行数(按文件类型)
find . -name "*.java" | xargs wc -l | tail -1

# 批量杀死匹配名称的进程
ps aux | grep "java -jar" | grep -v grep | awk '{print $2}' | xargs kill -9

# 实时监控日志中的关键词
tail -f app.log | grep --color "ERROR"

# 查找大文件并排序
find / -type f -size +100M -exec ls -lh {} \; | sort -k5 -rh

# 统计 Nginx 访问日志中各 IP 的访问次数(取前10)
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

# 批量替换文件内容
sed -i 's/old-domain.com/new-domain.com/g' *.conf