Linux基础运维指令大全
Linux 基础运维命令详解:从系统信息到进程、网络与日志排查
Linux 是服务器、云计算、容器、嵌入式系统以及开发环境中最常见的操作系统之一。对于运维人员和开发人员来说,掌握一套常用的 Linux 命令,可以帮助我们快速完成文件管理、资源监控、进程排查、网络诊断以及日志分析等工作。
本文整理了一套比较实用的 Linux 基础运维命令,并结合常见场景说明其用途。
1. 系统基本信息查看
在接手一台陌生 Linux 服务器时,通常首先需要确认系统版本、内核、CPU、内存以及运行时间。
1.1 查看系统版本
cat /etc/os-release
典型输出:
NAME="Ubuntu"
VERSION="24.04 LTS"
ID=ubuntu
也可以使用:
lsb_release -a
部分系统默认没有安装 lsb_release。
1.2 查看 Linux 内核版本
uname -r
例如:
6.8.0-40-generic
如果想查看更多系统信息:
uname -a
会同时显示:
- 内核版本
- 主机名
- CPU 架构
- 系统类型
1.3 查看主机名
hostname
查看更详细的信息:
hostnamectl
修改主机名:
sudo hostnamectl set-hostname server01
1.4 查看系统运行时间
uptime
例如:
21:20:13 up 15 days, 3:42, 2 users, load average: 0.12, 0.08, 0.05
其中:
load average: 0.12, 0.08, 0.05
分别表示过去:
- 1 分钟
- 5 分钟
- 15 分钟
的系统平均负载。
2. 文件与目录管理
Linux 运维过程中,大量操作都围绕文件和目录展开。
2.1 查看当前目录
pwd
例如:
/home/user
2.2 查看目录内容
ls
常用组合:
ls -l
显示详细信息。
ls -a
显示隐藏文件。
ls -lh
以更容易阅读的方式显示文件大小:
-rw-r--r-- 1 user user 1.5G Aug 25 20:10 backup.tar
日常最常见的是:
ls -lah
2.3 切换目录
cd /etc
返回上一级:
cd ..
返回当前用户家目录:
cd ~
或者:
cd
返回上一次所在目录:
cd -
2.4 创建目录
mkdir test
一次创建多级目录:
mkdir -p /data/app/log
-p 非常常用,可以自动创建不存在的父目录。
2.5 创建空文件
touch test.txt
如果文件已经存在,touch 默认不会清空文件,而是更新文件时间。
2.6 复制文件
cp source.txt target.txt
复制目录:
cp -r source_dir target_dir
保留文件权限、时间等属性:
cp -a source_dir target_dir
2.7 移动或重命名
移动文件:
mv test.txt /tmp/
重命名:
mv old.txt new.txt
Linux 中移动和重命名实际上都使用 mv。
2.8 删除文件
rm test.txt
删除目录:
rm -r test_dir
强制删除:
rm -rf test_dir
需要特别注意:
rm -rf
不会询问确认,一旦路径写错可能导致严重数据损失。
在生产服务器中使用前,应先通过:
ls /目标路径
确认路径是否正确。
3. 文件内容查看
运维过程中经常需要查看配置文件和日志文件。
3.1 cat:查看整个文件
cat /etc/hosts
适合查看较小文件。
如果文件很大,不建议直接使用 cat。
3.2 less:分页查看文件
less /var/log/syslog
常用快捷键:
↑ ↓ 上下滚动
PageUp 向上翻页
PageDown 向下翻页
/keyword 搜索
n 下一个匹配结果
N 上一个匹配结果
q 退出
对于大型日志,less 通常比 cat 更合适。
3.3 head:查看文件开头
head test.log
默认显示前 10 行。
显示前 50 行:
head -n 50 test.log
3.4 tail:查看文件末尾
tail test.log
显示最后 100 行:
tail -n 100 test.log
实时查看日志:
tail -f app.log
这是服务器排查问题时非常常见的命令。
例如:
tail -f /var/log/nginx/access.log
可以实时查看 Nginx 请求。
4. grep:文本搜索
grep 是 Linux 运维中最重要的工具之一。
基本用法:
grep "error" app.log
忽略大小写:
grep -i "error" app.log
显示行号:
grep -n "error" app.log
递归搜索整个目录:
grep -r "database" /etc/
排除某些结果:
grep -v "DEBUG" app.log
例如只查看错误日志:
grep -i "error" app.log
结合管道:
ps aux | grep nginx
表示从所有进程中筛选包含 nginx 的行。
5. find:查找文件
按照文件名查找:
find / -name "nginx.conf"
忽略大小写:
find / -iname "README.md"
查找 .log 文件:
find /var/log -name "*.log"
查找大于 1 GB 的文件:
find / -type f -size +1G
查找最近 1 天修改过的文件:
find /var/log -type f -mtime -1
查找后执行命令:
find /tmp -name "*.tmp" -delete
生产环境下使用 -delete 前,最好先只执行:
find /tmp -name "*.tmp"
确认匹配结果。
6. 磁盘空间管理
磁盘空间不足是 Linux 服务器非常常见的问题。
6.1 df:查看磁盘空间
df -h
例如:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 100G 72G 28G 73% /
重点关注:
Use%
如果达到 90% 甚至 100%,通常需要尽快清理。
查看文件系统类型:
df -Th
6.2 du:查看目录占用
查看当前目录总大小:
du -sh .
查看当前目录下每个文件夹大小:
du -sh *
例如:
du -sh /var/*
可以快速判断 /var 下面哪个目录占用最大。
进一步排序:
du -sh /var/* | sort -h
6.3 快速寻找大目录
du -xh / | sort -h | tail -n 20
不过根目录很大时执行可能比较慢。
更常见的做法是逐层排查:
du -sh /*
发现 /var 最大后:
du -sh /var/*
继续向下定位。
7. 内存查看
7.1 free
free -h
例如:
total used free shared buff/cache available
Mem: 31Gi 8Gi 3Gi 500Mi 20Gi 22Gi
Swap: 8Gi 0Gi 8Gi
很多 Linux 新手看到 free 很小就认为内存不足,这通常是不准确的。
Linux 会尽量利用空闲内存作为缓存。
因此重点应该关注:
available
而不是单纯看:
free
8. CPU 和系统负载
8.1 top
top
可以实时查看:
- CPU 占用
- 内存占用
- 系统负载
- 进程列表
常见字段:
PID
USER
%CPU
%MEM
TIME+
COMMAND
其中:
%CPU
表示 CPU 使用率,
%MEM
表示内存使用率。
8.2 htop
如果安装了 htop:
htop
相比 top,界面更加直观。
Ubuntu/Debian:
sudo apt install htop
Arch Linux:
sudo pacman -S htop
CentOS/RHEL 系:
sudo dnf install htop
8.3 查看 CPU 信息
lscpu
可以查看:
- CPU 型号
- CPU 核数
- 线程数
- 架构
- NUMA
- 虚拟化支持
例如:
lscpu | grep "Model name"
9. 进程管理
Linux 中每个进程都有对应的 PID。
9.1 ps
查看所有进程:
ps aux
查找某个程序:
ps aux | grep nginx
例如:
root 1024 0.0 0.1 nginx: master process
www-data 1025 0.1 0.2 nginx: worker process
第一列通常是用户,第二列是 PID。
9.2 pgrep
相比:
ps aux | grep nginx
更简洁的方法是:
pgrep nginx
同时显示进程名:
pgrep -a nginx
9.3 kill
终止指定 PID:
kill 1234
默认发送:
SIGTERM
相当于请求进程正常退出。
强制结束:
kill -9 1234
即:
SIGKILL
通常不建议一上来就使用 kill -9。
推荐顺序:
kill PID
如果进程无法退出,再考虑:
kill -9 PID
9.4 pkill
按照进程名结束:
pkill nginx
强制结束:
pkill -9 nginx
执行前应确认不会误杀同名进程。
10. systemd 服务管理
现在大多数 Linux 发行版都使用 systemd 管理服务。
例如查看 SSH 服务:
systemctl status ssh
部分系统服务名可能是:
systemctl status sshd
启动服务:
sudo systemctl start nginx
停止服务:
sudo systemctl stop nginx
重启:
sudo systemctl restart nginx
重新加载配置:
sudo systemctl reload nginx
设置开机启动:
sudo systemctl enable nginx
取消开机启动:
sudo systemctl disable nginx
立即启动并设置开机启动:
sudo systemctl enable --now nginx
11. journalctl:systemd 日志查看
对于使用 systemd 的系统:
journalctl
可以查看系统日志。
查看某个服务:
journalctl -u nginx
查看最近 100 行:
journalctl -u nginx -n 100
实时查看:
journalctl -u nginx -f
查看本次启动日志:
journalctl -b
查看最近错误:
journalctl -p err
排查服务启动失败时,常见组合是:
systemctl status nginx
journalctl -u nginx -n 100
12. 网络接口与 IP 地址
12.1 ip addr
现代 Linux 推荐使用:
ip addr
简写:
ip a
例如:
2: eth0:
inet 192.168.1.100/24
其中:
192.168.1.100
就是网卡的 IPv4 地址。
12.2 查看路由
ip route
简写:
ip r
例如:
default via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0
其中:
default via 192.168.1.1
表示默认网关。
13. ping:网络连通性检查
例如:
ping 8.8.8.8
如果 IP 可以通,但是:
ping google.com
无法正常解析,则问题很可能与 DNS 有关。
因此可以通过:
ping 8.8.8.8
和:
ping google.com
进行简单对比。
限制发送 4 个包:
ping -c 4 8.8.8.8
14. DNS 排查
14.1 查看域名解析
getent hosts example.com
也可以使用:
nslookup example.com
或者:
dig example.com
例如:
dig google.com
指定 DNS:
dig @8.8.8.8 google.com
这在排查本机 DNS 问题时非常有用。
15. ss:查看端口和连接
现代 Linux 一般推荐使用:
ss
代替老旧的:
netstat
查看所有监听端口:
ss -lntup
参数含义:
-l 只显示监听状态
-n 不解析主机名和服务名
-t TCP
-u UDP
-p 显示进程信息
例如查找 8080:
ss -lntp | grep 8080
可能看到:
LISTEN 0 128 0.0.0.0:8080 users:(("java",pid=1234,fd=20))
这说明 PID 1234 的 Java 进程监听了 8080 端口。
16. curl:测试 HTTP 服务
查看网页:
curl https://example.com
只查看 HTTP 响应头:
curl -I https://example.com
显示详细请求过程:
curl -v https://example.com
测试本机服务:
curl http://127.0.0.1:8080
如果服务器本地:
curl http://127.0.0.1:8080
正常,但外部机器访问失败,那么问题很可能位于:
- 防火墙
- 安全组
- NAT
- 路由
- 服务监听地址
而不是应用本身。
17. wget:下载文件
wget https://example.com/file.zip
指定文件名:
wget -O software.zip https://example.com/file.zip
断点续传:
wget -c https://example.com/large-file.iso
18. 文件权限
通过:
ls -l
可以看到类似:
-rwxr-xr-- 1 user user 1234 Aug 25 20:10 test.sh
前面的:
rwxr-xr--
表示权限。
其中:
r = read
w = write
x = execute
权限分别针对:
user
group
other
18.1 chmod
增加执行权限:
chmod +x script.sh
设置:
chmod 755 script.sh
其中:
7 = rwx
5 = r-x
5 = r-x
因此:
755
对应:
rwxr-xr-x
18.2 chown
修改文件所有者:
sudo chown user file.txt
修改用户和用户组:
sudo chown user:group file.txt
递归修改目录:
sudo chown -R user:group /data/app
19. 用户和身份信息
查看当前用户:
whoami
查看 UID 和所属用户组:
id
查看当前登录用户:
who
查看用户登录情况:
w
20. sudo 与 root
普通用户临时以 root 权限执行命令:
sudo command
例如:
sudo systemctl restart nginx
进入 root shell:
sudo -i
生产环境通常不推荐长期直接使用 root 用户操作,而是通过 sudo 控制权限。
21. 压缩与解压
tar
打包目录:
tar -cvf backup.tar /data
打包并使用 gzip 压缩:
tar -czvf backup.tar.gz /data
解压:
tar -xzvf backup.tar.gz
实际运维时可以去掉 v:
tar -czf backup.tar.gz /data
因为 v 会打印所有文件,在文件数量很多时输出会非常多。
zip
压缩:
zip -r backup.zip data/
解压:
unzip backup.zip
22. 重定向
Linux 中:
>
表示覆盖写入。
例如:
echo "hello" > test.txt
如果 test.txt 已存在,原内容会被覆盖。
追加写入:
echo "hello" >> test.txt
标准输出和标准错误
Linux 中常见三个文件描述符:
0 stdin
1 stdout
2 stderr
例如:
command > output.log
相当于:
command 1> output.log
只重定向标准错误:
command 2> error.log
同时记录标准输出和标准错误:
command > output.log 2>&1
也可以在 Bash 中写:
command &> output.log
23. 管道 |
管道的作用是:
将前一个命令的标准输出,作为后一个命令的标准输入。
例如:
ps aux | grep nginx
执行流程可以理解为:
ps aux
|
v
grep nginx
再例如:
du -sh * | sort -h
首先统计文件大小,然后按照容量排序。
24. sort、uniq 和 wc
排序:
sort file.txt
数字排序:
sort -n file.txt
容量排序:
sort -h
去除相邻重复行:
uniq
统计行数:
wc -l file.txt
统计文件:
wc file.txt
例如统计访问日志中出现次数最多的 IP:
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
这也是 Linux 运维中非常典型的命令组合。
25. awk:按列处理文本
假设:
ps aux
输出类似:
USER PID %CPU %MEM COMMAND
root 123 10.2 1.5 python
获取第二列:
ps aux | awk '{print $2}'
同时显示第一列和第二列:
ps aux | awk '{print $1, $2}'
例如查找 CPU 占用较高的进程时,awk 经常和其他命令配合使用。
26. sed:简单文本处理
替换文本:
sed 's/old/new/' file.txt
全部替换:
sed 's/old/new/g' file.txt
直接修改文件:
sed -i 's/old/new/g' file.txt
使用 -i 时需要特别小心,因为它会直接修改原文件。
建议重要配置先备份:
cp nginx.conf nginx.conf.bak
然后再:
sed -i 's/old/new/g' nginx.conf
27. 查看磁盘和块设备
查看块设备:
lsblk
例如:
NAME SIZE TYPE MOUNTPOINT
sda 500G disk
├─sda1 1G part /boot
└─sda2 499G part /
sdb 4T disk /data
查看 UUID 和文件系统:
lsblk -f
或者:
blkid
28. 挂载文件系统
临时挂载:
sudo mount /dev/sdb1 /mnt/data
卸载:
sudo umount /mnt/data
注意是:
umount
而不是:
unmount
永久挂载通常通过:
/etc/fstab
配置。
29. 查看打开的文件
lsof 可以查看进程打开的文件和网络连接。
例如:
lsof /var/log/app.log
查看哪个进程占用 8080:
sudo lsof -i :8080
查看某个 PID:
lsof -p 1234
在排查“文件为什么无法删除”“端口被谁占用”等问题时非常实用。
30. 网络抓包 tcpdump
基础抓包:
sudo tcpdump
指定网卡:
sudo tcpdump -i eth0
抓取 DNS:
sudo tcpdump -i any port 53
抓取目标 IP:
sudo tcpdump -i any host 192.168.1.100
抓取 TCP 443:
sudo tcpdump -i any tcp port 443
保存为文件:
sudo tcpdump -i eth0 -w capture.pcap
之后可以使用 Wireshark 分析。
31. 一套典型服务器故障排查思路
单独记住命令并不够,更重要的是形成排查思路。
假设用户反馈:
服务器上的 Web 服务访问不了。
可以按照下面的顺序处理。
第一步:确认服务器是否正常运行
uptime
free -h
df -h
top
排除:
- CPU 满载
- 内存耗尽
- 磁盘写满
第二步:检查服务
systemctl status nginx
如果异常:
journalctl -u nginx -n 100
第三步:检查端口
ss -lntp
例如:
ss -lntp | grep :80
确认服务有没有监听 80 端口。
第四步:本机访问
curl http://127.0.0.1
如果正常,说明应用本身大概率没有问题。
第五步:检查监听地址
假如发现:
127.0.0.1:8080
那么服务只允许本机访问。
如果需要外部访问,一般应根据实际需求监听:
0.0.0.0:8080
或者指定服务器某个接口地址。
第六步:检查 IP 和路由
ip a
ip r
确认服务器 IP、接口以及默认路由是否正常。
第七步:检查网络
ping 网关IP
ping 8.8.8.8
ping example.com
逐步区分:
接口问题
↓
网关问题
↓
互联网问题
↓
DNS 问题
32. 常见命令速查表
| 目的 | 命令 |
|---|---|
| 查看当前目录 | pwd |
| 查看文件 | ls -lah |
| 切换目录 | cd |
| 创建目录 | mkdir -p |
| 复制文件 | cp |
| 移动文件 | mv |
| 删除文件 | rm |
| 查看文件 | cat |
| 分页查看 | less |
| 查看最后几行 | tail |
| 实时日志 | tail -f |
| 搜索文本 | grep |
| 查找文件 | find |
| 查看磁盘 | df -h |
| 查看目录大小 | du -sh |
| 查看内存 | free -h |
| 查看系统负载 | top |
| 查看进程 | ps aux |
| 查找 PID | pgrep |
| 结束进程 | kill |
| 查看服务 | systemctl status |
| 查看系统日志 | journalctl |
| 查看 IP | ip a |
| 查看路由 | ip r |
| 测试网络 | ping |
| 测试 HTTP | curl |
| 查看端口 | ss -lntup |
| 查看磁盘设备 | lsblk |
| 查看文件占用 | lsof |
| 修改权限 | chmod |
| 修改所有者 | chown |
| 压缩 | tar |
| 网络抓包 | tcpdump |
33. 推荐掌握的几个命令组合
相比死记每一个命令,更推荐掌握一些实际工作中经常使用的组合。
查看进程
ps aux | grep nginx
查看端口
ss -lntp | grep :8080
实时查看日志
tail -f app.log
从日志中寻找错误
grep -i "error" app.log
查看服务日志
journalctl -u nginx -f
查看磁盘使用率
df -h
找出最大的目录
du -sh * | sort -h
找出最大的 20 个文件
find . -type f -printf '%s %p\n' | sort -nr | head -n 20
查看 CPU 和内存占用
top
查看网络监听情况
ss -lntup
这些命令已经能够覆盖很大一部分基础 Linux 运维场景。
34. 总结
Linux 运维并不是简单地背命令,而是需要理解:
系统
├── CPU
├── 内存
├── 磁盘
├── 进程
├── 服务
├── 日志
└── 网络
出现问题时,可以按照:
系统资源
↓
进程状态
↓
服务状态
↓
日志信息
↓
端口监听
↓
网络连接
这样的顺序逐步排查。
对于 Linux 初学者来说,可以优先熟练掌握以下命令:
ls
cd
cp
mv
rm
cat
less
grep
find
df
du
free
top
ps
kill
systemctl
journalctl
ip
ping
ss
curl
当这些命令可以熟练组合使用之后,就已经具备了比较扎实的 Linux 基础运维能力。
后续还可以继续深入学习:
- Shell 脚本
- cron 定时任务
- systemd 服务编写
- SSH 与密钥认证
- Linux 防火墙
- iptables / nftables
- 日志轮转 logrotate
- RAID 与 LVM
- Docker
- Nginx
- MySQL
- 性能监控
- TCP/IP 与网络抓包
Linux 命令真正的价值,不在于记住多少参数,而在于面对故障时能够将这些工具组合起来,逐层缩小问题范围,最终找到真正的故障点。
- 点赞
- 收藏
- 关注作者
评论(0)