Linux 运维常用命令手册

11 阅读4分钟

Linux 运维常用命令手册

目录

  1. 文件与目录操作
  2. 文件内容查看与编辑
  3. 用户与权限管理
  4. 进程管理
  5. 网络管理
  6. 磁盘与存储管理
  7. 系统监控与性能分析
  8. 软件包管理
  9. 日志管理
  10. 定时任务 Crontab
  11. 压缩与归档
  12. Shell 脚本基础
  13. 运维常用技巧

一、文件与目录操作

基础导航

pwd                  # 显示当前所在路径
ls                   # 列出当前目录文件
ls -la               # 显示详细信息(包括隐藏文件)
ls -lh               # 以人性化方式显示文件大小(KB/MB)
cd /path/to/dir      # 进入指定目录
cd ~                 # 回到家目录
cd -                 # 回到上一次所在目录
cd ..                # 返回上一级目录

文件与目录的增删改

# 创建
mkdir mydir              # 创建目录
mkdir -p a/b/c           # 递归创建多级目录
touch file.txt           # 创建空文件

# 复制
cp file.txt /tmp/        # 复制文件到 /tmp
cp -r dir/ /tmp/         # 递归复制目录

# 移动 / 重命名
mv file.txt newname.txt  # 重命名
mv file.txt /tmp/        # 移动文件

# 删除
rm file.txt              # 删除文件
rm -rf dir/              # 强制递归删除目录(⚠️ 危险,谨慎使用)

文件搜索

find / -name "*.log"              # 全局搜索 .log 文件
find /var -name "*.log" -mtime -7 # 查找7天内修改的日志
find . -size +100M                # 查找大于100M的文件
find . -type f -name "nginx*"     # 查找文件名含 nginx 的普通文件

which nginx              # 查找命令所在路径
whereis nginx            # 查找命令及其文档路径
locate filename          # 快速查找(需先 updatedb)

二、文件内容查看与编辑

查看文件内容

cat file.txt             # 显示全部内容
cat -n file.txt          # 显示内容并带行号
more file.txt            # 分页查看(空格翻页)
less file.txt            # 分页查看(支持上下翻页,q退出)
head -n 20 file.txt      # 查看前20行
tail -n 50 file.txt      # 查看最后50行
tail -f /var/log/nginx/access.log  # 实时追踪日志(运维最常用!)

文本搜索 grep

grep "error" file.log            # 搜索含 error 的行
grep -i "error" file.log         # 忽略大小写搜索
grep -n "error" file.log         # 显示行号
grep -r "error" /var/log/        # 递归搜索目录
grep -v "DEBUG" file.log         # 排除含 DEBUG 的行
grep -E "error|warning" file.log # 正则匹配多个关键词

文本处理

# awk:按列处理文本
awk '{print $1, $3}' file.txt           # 打印第1和第3列
awk -F: '{print $1}' /etc/passwd        # 以:分隔,打印第1列(用户名)
awk '$3 > 1000 {print $1}' /etc/passwd  # 条件筛选

# sed:流式编辑器
sed 's/old/new/g' file.txt              # 替换文本(不改文件)
sed -i 's/old/new/g' file.txt           # 直接修改文件
sed -n '5,10p' file.txt                 # 打印第5到10行
sed '/^#/d' nginx.conf                  # 删除以#开头的行(注释行)

# 其他常用文本处理
wc -l file.txt           # 统计行数
sort file.txt            # 排序
sort -rn file.txt        # 倒序数字排序
uniq -c file.txt         # 统计重复行次数
cut -d: -f1 /etc/passwd  # 切割字段

Vim 编辑器

vim file.txt     # 打开文件
模式操作说明
普通模式i进入插入模式
普通模式gg跳到文件开头
普通模式G跳到文件末尾
普通模式/关键词搜索
普通模式dd删除当前行
普通模式yy复制当前行
普通模式p粘贴
普通模式u撤销
命令模式:wq保存并退出
命令模式:q!强制退出不保存
命令模式:%s/old/new/g全文替换

三、用户与权限管理

用户管理

# 用户操作
useradd username             # 创建用户
useradd -m -s /bin/bash tom  # 创建用户并指定家目录和Shell
passwd username              # 设置/修改密码
usermod -aG sudo username    # 将用户加入sudo组
userdel -r username          # 删除用户及其家目录

# 查看用户信息
id username                  # 查看用户ID和组信息
whoami                       # 查看当前用户
w                            # 查看当前登录用户
last                         # 查看登录历史
cat /etc/passwd              # 查看所有用户

权限管理

# 权限说明:rwxrwxrwx = 所有者|所属组|其他人
# r=4(读) w=2(写) x=1(执行)

chmod 755 file.sh            # 所有者rwx,组和其他rx
chmod +x file.sh             # 给所有人添加执行权限
chmod -R 755 /var/www/html   # 递归设置权限
chown user:group file.txt    # 修改所有者和组
chown -R nginx:nginx /data/  # 递归修改所有者

# 查看权限
ls -la                       # 查看权限详情
stat file.txt                # 查看文件详细信息

sudo 权限

sudo command                 # 以root权限执行命令
sudo -i                      # 切换到root(登录式)
sudo -s                      # 切换到root(非登录式)
su - username                # 切换用户
visudo                       # 安全编辑 /etc/sudoers

四、进程管理

查看进程

ps aux                       # 查看所有进程
ps aux | grep nginx          # 查找 nginx 进程
top                          # 动态查看进程(实时刷新)
htop                         # 更友好的 top(需安装)
pstree                       # 以树状显示进程
pidof nginx                  # 查找进程的 PID
pgrep nginx                  # 通过名字查找 PID

进程控制

kill PID                     # 发送默认信号(SIGTERM)终止进程
kill -9 PID                  # 强制杀死进程(SIGKILL)
killall nginx                # 杀死所有名为nginx的进程
pkill -f "python script.py"  # 按名称模糊匹配杀进程

# 后台运行
command &                    # 后台运行
nohup command &              # 退出终端后继续运行
jobs                         # 查看后台任务
fg %1                        # 将后台任务调回前台
bg %1                        # 让暂停的任务在后台继续

systemd 服务管理(现代Linux必备)

systemctl start nginx        # 启动服务
systemctl stop nginx         # 停止服务
systemctl restart nginx      # 重启服务
systemctl reload nginx       # 重载配置(不中断服务)
systemctl status nginx       # 查看服务状态
systemctl enable nginx       # 开机自启
systemctl disable nginx      # 取消开机自启
systemctl list-units --type=service  # 列出所有服务

五、网络管理

网络状态查看

ip addr                      # 查看IP地址(推荐)
ifconfig                     # 查看网络接口(旧命令)
ip route                     # 查看路由表
route -n                     # 查看路由(旧命令)

# 连接状态
ss -tuln                     # 查看监听端口(推荐)
netstat -tuln                # 查看监听端口(旧命令)
ss -tunp                     # 查看连接及对应进程
netstat -an | grep ESTABLISHED  # 查看已建立的连接

# 网络测试
ping -c 4 google.com         # ping 测试(发4个包)
ping -c 4 -i 0.2 host        # 快速ping
traceroute google.com        # 追踪路由路径
mtr google.com               # 持续追踪(推荐)
curl -I https://example.com  # 查看HTTP响应头
wget https://example.com/file.tar.gz  # 下载文件

防火墙管理

# firewalld(CentOS/RHEL)
firewall-cmd --state                          # 查看防火墙状态
firewall-cmd --list-all                       # 查看所有规则
firewall-cmd --add-port=80/tcp --permanent    # 永久开放80端口
firewall-cmd --remove-port=80/tcp --permanent # 永久关闭80端口
firewall-cmd --reload                         # 重载配置

# ufw(Ubuntu)
ufw status                   # 查看状态
ufw allow 80/tcp             # 开放80端口
ufw deny 23                  # 拒绝23端口
ufw enable                   # 启用防火墙

# iptables(通用)
iptables -L -n               # 查看所有规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT  # 允许80端口

SSH 远程连接

ssh user@192.168.1.100           # 远程连接
ssh -p 2222 user@192.168.1.100   # 指定端口连接
ssh -i ~/.ssh/id_rsa user@host   # 使用密钥登录
scp file.txt user@host:/path/    # 远程复制文件
scp -r dir/ user@host:/path/     # 远程复制目录
rsync -avz /src/ user@host:/dst/ # 同步文件(增量,推荐)

# 生成SSH密钥对
ssh-keygen -t ed25519 -C "your_email"    # 生成密钥
ssh-copy-id user@host                    # 将公钥复制到远程主机

六、磁盘与存储管理

# 磁盘使用情况
df -h                        # 查看磁盘空间(人性化显示)
df -Th                       # 显示文件系统类型
du -sh /var/log/             # 查看目录占用空间
du -sh /*                    # 查看根目录下各目录大小
du -sh * | sort -rh | head   # 找出最大的目录

# 磁盘信息
lsblk                        # 查看块设备
fdisk -l                     # 查看磁盘分区
blkid                        # 查看分区UUID和类型

# 挂载
mount /dev/sdb1 /mnt/data    # 挂载磁盘
umount /mnt/data             # 卸载磁盘
cat /etc/fstab               # 查看开机自动挂载配置

# 磁盘健康检测
smartctl -a /dev/sda         # 查看磁盘健康状态(需安装smartmontools)

七、系统监控与性能分析

系统信息

uname -a                     # 查看系统内核版本
cat /etc/os-release          # 查看发行版信息
hostname                     # 查看主机名
uptime                       # 查看运行时间和负载
date                         # 查看当前时间
timedatectl                  # 查看时区设置

资源监控

# CPU
top                          # 动态资源监控(按 1 查看每个核心)
mpstat -P ALL 1              # 每秒刷新CPU使用率
vmstat 1 5                   # 每秒输出一次,共5次

# 内存
free -h                      # 查看内存使用
cat /proc/meminfo            # 查看详细内存信息

# IO
iostat -x 1                  # 查看磁盘IO(需安装sysstat)
iotop                        # 查看进程IO(需安装)

# 综合监控工具
glances                      # 综合监控(需安装)
dstat                        # 综合统计工具

系统负载说明

load average: 0.5, 1.2, 1.8
             1分钟  5分钟  15分钟

⚠️ 经验法则:负载值 > CPU核心数 × 0.7 就需要关注

八、软件包管理

CentOS / RHEL(yum / dnf)

yum install nginx            # 安装
yum remove nginx             # 卸载
yum update                   # 更新所有包
yum update nginx             # 更新指定包
yum search nginx             # 搜索包
yum info nginx               # 查看包信息
yum list installed           # 查看已安装的包

Ubuntu / Debian(apt)

apt update                   # 更新软件源
apt install nginx            # 安装
apt remove nginx             # 卸载
apt autoremove               # 清理不需要的依赖
apt upgrade                  # 升级所有包
apt search nginx             # 搜索包
apt show nginx               # 查看包信息
dpkg -l | grep nginx         # 查看已安装包

九、日志管理

# 系统日志目录
/var/log/syslog              # 系统日志(Ubuntu)
/var/log/messages            # 系统日志(CentOS)
/var/log/auth.log            # 认证/SSH日志
/var/log/nginx/access.log    # Nginx访问日志
/var/log/nginx/error.log     # Nginx错误日志

# journald(systemd日志)
journalctl -u nginx          # 查看nginx服务日志
journalctl -u nginx -f       # 实时追踪nginx日志
journalctl -n 100            # 查看最近100条日志
journalctl --since "1 hour ago"  # 查看1小时内的日志
journalctl -p err            # 只看错误级别日志

# 常用日志分析
tail -f /var/log/nginx/access.log              # 实时查看访问日志
grep "404" /var/log/nginx/access.log           # 找出404请求
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10  # 统计访问IP前10

十、定时任务 Crontab

crontab -e                   # 编辑当前用户的定时任务
crontab -l                   # 查看当前用户的定时任务
crontab -r                   # 删除当前用户的定时任务
crontab -u username -l       # 查看指定用户的任务

Cron 表达式格式

* * * * * command
│ │ │ │ │
│ │ │ │ └─── 星期几 (0-707都是周日)
│ │ │ └───── 月份 (1-12)
│ │ └─────── 日期 (1-31)
│ └───────── 小时 (0-23)
└─────────── 分钟 (0-59)

常用 Cron 示例

# 每分钟执行
* * * * * /scripts/check.sh

# 每天凌晨2点执行备份
0 2 * * * /scripts/backup.sh

# 每周一早上8点发报告
0 8 * * 1 /scripts/report.sh

# 每5分钟执行一次
*/5 * * * * /scripts/monitor.sh

# 每月1号凌晨3点清理日志
0 3 1 * * /scripts/clean_logs.sh

十一、压缩与归档

# tar(最常用)
tar -czvf backup.tar.gz /data/     # 压缩目录(.tar.gz格式)
tar -xzvf backup.tar.gz            # 解压
tar -xzvf backup.tar.gz -C /tmp/  # 解压到指定目录
tar -tzvf backup.tar.gz            # 查看压缩包内容(不解压)

# zip / unzip
zip -r backup.zip /data/           # 压缩
unzip backup.zip                   # 解压
unzip -l backup.zip                # 查看内容

# 其他格式
gzip file.txt                      # 压缩为 .gz
gunzip file.txt.gz                 # 解压 .gz
bzip2 file.txt                     # 压缩为 .bz2
bunzip2 file.txt.bz2               # 解压 .bz2

十二、Shell 脚本基础

脚本模板

#!/bin/bash

# 变量
NAME="World"
DATE=$(date +%Y-%m-%d)

echo "Hello, $NAME! Today is $DATE"

条件判断

# if 语句
if [ -f "/etc/nginx/nginx.conf" ]; then
    echo "Nginx配置文件存在"
elif [ -d "/etc/nginx" ]; then
    echo "Nginx目录存在但配置文件不在"
else
    echo "Nginx未安装"
fi

# 常用判断条件
[ -f file ]    # 文件存在且是普通文件
[ -d dir ]     # 目录存在
[ -z "$var" ]  # 字符串为空
[ -n "$var" ]  # 字符串不为空
[ $a -eq $b ]  # 数字相等
[ $a -gt $b ]  # 大于

循环

# for 循环
for i in 1 2 3 4 5; do
    echo "第 $i 次"
done

# while 循环
count=0
while [ $count -lt 5 ]; do
    echo "count=$count"
    ((count++))
done

# 遍历文件
for file in /var/log/*.log; do
    echo "处理文件: $file"
done

实用脚本示例

#!/bin/bash
# 检查服务是否运行,不运行则重启

SERVICE="nginx"

if ! systemctl is-active --quiet $SERVICE; then
    echo "$(date): $SERVICE 已停止,正在重启..." >> /var/log/service_check.log
    systemctl restart $SERVICE
    echo "$(date): $SERVICE 重启完成" >> /var/log/service_check.log
else
    echo "$(date): $SERVICE 运行正常" >> /var/log/service_check.log
fi

十三、运维常用技巧

历史命令

history                      # 查看命令历史
history | grep nginx         # 搜索历史命令
!!                           # 执行上一条命令
!100                         # 执行第100条历史命令
Ctrl + R                     # 反向搜索历史命令(最常用)

快捷键

快捷键作用
Ctrl + C中断当前命令
Ctrl + Z暂停当前命令
Ctrl + D退出终端/EOF
Ctrl + L清屏(等同 clear)
Ctrl + A光标移到行首
Ctrl + E光标移到行尾
Ctrl + U删除光标前的内容
Tab自动补全
↑ ↓切换历史命令

管道与重定向

# 管道:把前一个命令的输出传给下一个
ps aux | grep nginx | grep -v grep
cat /etc/passwd | awk -F: '{print $1}' | sort

# 重定向
command > file.txt           # 输出到文件(覆盖)
command >> file.txt          # 输出到文件(追加)
command 2> error.txt         # 错误输出到文件
command &> all.txt           # 标准输出和错误都写入文件
command < input.txt          # 从文件读取输入

实用组合命令

# 查找并删除30天前的日志
find /var/log -name "*.log" -mtime +30 -exec rm {} \;

# 统计Nginx访问量最多的IP(前10)
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# 查看端口占用情况
ss -tunlp | grep :80

# 实时查看系统资源
watch -n 1 'free -h && echo "---" && df -h'

# 批量修改文件权限
find /var/www -type f -exec chmod 644 {} \;
find /var/www -type d -exec chmod 755 {} \;

# 查看谁在登录服务器
who
w
last | head -20