Linux服务器运维常用指令速查表
一、文件与目录操作
| 命令 | 说明 | 常用示例 |
|---|---|---|
ls | 列出目录内容 | ls -l (详细列表), ls -a (显示隐藏文件), ls -lh (人性化显示大小) |
cd | 切换目录 | cd ~ (回到家目录), cd .. (返回上级目录), cd - (回到上一次目录) |
pwd | 显示当前工作目录路径 | pwd |
mkdir | 创建目录 | mkdir -p dir1/dir2 (递归创建多级目录), mkdir -m 700 secret (创建带权限目录) |
rmdir | 删除空目录 | rmdir empty_dir |
rm | 删除文件/目录 | rm -rf dir (强制递归删除), rm -f file (强制删除文件) |
cp | 复制文件/目录 | cp -r dir1 dir2 (递归复制目录), cp -i file1 file2 (交互式复制) |
mv | 移动/重命名文件/目录 | mv old.txt new.txt (重命名), mv file /tmp/ (移动文件) |
touch | 创建空文件或更新文件时间戳 | touch newfile.txt |
find | 在目录树中查找文件 | find /home -name "*.log", find . -type f -mtime -7 (查找7天内修改的文件) |
locate | 快速定位文件(需先执行updatedb) | locate passwd |
二、文件内容查看与处理
| 命令 | 说明 | 常用示例 |
|---|---|---|
cat | 显示文件内容 | cat file.txt, cat -n file.txt (显示行号) |
less | 分页查看文件内容(推荐) | less longfile.log (按空格翻页,q退出) |
more | 分页显示文件内容 | more output.txt |
head | 显示文件开头部分 | head -n 20 file.log (显示前20行) |
tail | 显示文件结尾部分 | tail -f logfile.log (实时跟踪日志), tail -n 50 file.log (显示最后50行) |
grep | 文本搜索 | grep "error" logfile.log, grep -r "pattern" /dir (递归搜索) |
wc | 统计文件内容 | wc -l file.txt (统计行数) |
diff | 比较两个文件差异 | diff file1.txt file2.txt |
sort | 对文件行排序 | sort file.txt, sort -u file.txt (去重排序) |
三、系统信息与进程管理
| 命令 | 说明 | 常用示例 |
|---|---|---|
top | 实时显示系统进程和资源使用情况 | top (按q退出) |
ps | 显示当前进程 | ps aux (显示所有进程), ps -ef |
free | 显示内存使用情况 | free -h (人性化显示) |
df | 显示磁盘空间使用情况 | df -h (人性化显示), df -i (显示inode) |
du | 查看文件/目录磁盘使用情况 | du -sh dir (显示目录大小), du -h |
uptime | 显示系统运行时间 | uptime |
uname | 查看系统信息 | uname -a (显示所有系统信息) |
kill | 终止进程 | kill -9 PID (强制终止进程) |
killall | 终止所有同名进程 | killall nginx |
nohup | 在后台运行命令 | nohup ./script.sh & |
四、网络管理
| 命令 | 说明 | 常用示例 |
|---|---|---|
ping | 测试网络连通性 | ping -c 4 www.baidu.com (发送4次) |
ifconfig | 查看/配置网络接口 | ifconfig eth0 |
netstat | 显示网络连接和状态 | netstat -tuln (显示所有监听端口) |
ssh | 远程登录 | ssh user@remote_host |
scp | 安全复制文件 | scp file.txt user@remote:/path/ |
sftp | 通过SSH上传/下载文件 | sftp user@remote_host |
traceroute | 跟踪数据包路径 | traceroute www.baidu.com |
dig | DNS查询 | dig example.com |
五、权限管理
| 命令 | 说明 | 常用示例 |
|---|---|---|
chmod | 修改文件权限 | chmod 755 file.txt, chmod -R 755 dir |
chown | 修改文件所有者 | chown user:group file.txt |
chgrp | 修改文件所属组 | chgrp group file.txt |
su | 切换用户 | su - (切换到root), su - username |
sudo | 以管理员权限执行命令 | sudo apt update |
六、系统服务与包管理
| 命令 | 说明 | 常用示例 |
|---|---|---|
systemctl | 管理系统服务 | systemctl start nginx, systemctl status nginx |
apt | Debian/Ubuntu软件包管理 | apt update, apt install nginx, apt remove nginx |
yum | CentOS/RHEL软件包管理 | yum update, yum install httpd, yum remove httpd |
dnf | 新版RHEL/CentOS软件包管理 | dnf update, dnf install nginx |
reboot | 重启系统 | reboot |
shutdown | 关机系统 | shutdown -h now |
ssh的root登录
- 修改SSH配置文件
打开SSH配置文件,通常位于
/etc/ssh/sshd_config。使用文本编辑器打开文件,如vi或nano。
sudo vim /etc/ssh/sshd_config
- 找到以下行并进行相应的更改:
PermitRootLogin:将其设置为yes以允许root用户远程登录。如果该行被注释掉(以#开头),请取消注释并设置其值为yes。PasswordAuthentication:将其设置为yes以允许使用密码进行身份验证。如果该行被注释掉,请取消注释并设置其值为yes。 示例配置:
PermitRootLogin yes
PasswordAuthentication yes
- 保存并关闭文件。
- 重启SSH服务以使更改生效。
sudo systemctl restart ssh
- 现在,您可以使用root用户和密码从远程计算机登录到Linux服务器。
关键配置文件
| 文件 | 用途 |
|---|---|
/etc/passwd | 用户账户信息(用户名、UID、GID、家目录、shell) |
/etc/shadow | 加密密码和密码策略(仅 root 可读) |
/etc/group | 组信息 |
/etc/gshadow | 组密码(很少使用) |
/etc/sudoers | sudo 权限配置 |
/etc/login.defs | 用户创建的默认配置(UID 范围、密码策略等) |
/etc/default/useradd | useradd 命令默认值 |
/etc/skel/ | 新用户家目录模板文件 |
权限数字表
| 数字 | 权限 | 说明 |
|---|---|---|
| 7 | rwx | 读+写+执行 |
| 6 | rw- | 读+写 |
| 5 | r-x | 读+执行 |
| 4 | r-- | 只读 |
| 0 | --- | 无权限 |
| 常见组合: |
755(rwxr-xr-x) - 目录默认,所有人可进入644(rw-r--r--) - 文件默认,所有者可修改700(rwx------) - 私有,仅自己访问750(rwxr-x---) - 组内共享,外人不可见777(rwxrwxrwx) - 开放(危险!)
用户操作
# 切换用户
su - [用户名]
# 查看当前用户
whoami
# 查看用户的UID、GID、所属组
id [用户名]
# 列出用户名
users
修改用户密码
普通用户时,初次登录root需要修改密码。
sudo passwd [用户名]
文件解压缩
7z文件
# 安装
apt install p7zip-full
# 压缩文件
7z a [压缩后的文件名] [需要压缩的文件1] [需要压缩的文件2] [需要压缩的文件3] ......
# 压缩文件目录
7z a [压缩后的文件名] [压缩后的文件目录名]
# 解压文件 -o后面没有空格
7z x [需要解压文件名] -o[解压到目标的文件夹名]
# 查看压缩文件的内容
7z l [需要解压文件名]
# 添加新文件到旧压缩包
7z u [压缩包的名字] [待添加的文件名]
# 删除压缩包内文件
7z d [压缩包的名字] [待删除的文件名]
zip文件
# 安装
apt install zip unzip
# 压缩多个文件
zip [压缩后的文件名] [需要压缩的文件1] [需要压缩的文件2] [需要压缩的文件3] ......
# 递归压缩目录及所有子内容(最常用),如果不是r,打包的是空目录
zip -r [压缩后的文件名字] [需要压缩的目录名1] [需要压缩的目录名2] [需要压缩的目录名3] ......
# 压缩多个目录,排除临时文件
zip -r [压缩后的文件名字] [需要压缩的目录名1] [需要压缩的目录名2] ...... -x "*.tmp" "*.cache*"
# 添加新文件到现有压缩包
zip -u [压缩包名字] [需要添加的文件名字]
# 删除压缩包内的特定文件
zip -d [压缩包名字] [待删除的文件名字]
# 查看压缩包内容(不解压)
unzip -l [压缩包名字]
tar.gz文件
# 创建压缩包 (gzip压缩)
tar -czvf [压缩包名字] [待压缩目录名字]
# 解压压缩包
tar -xzvf [压缩包名字]
# 压缩文件
gzip [待压缩文件名字]
# 解压缩文件
gzip -d [压缩包名字]
grep
基础字符串搜索
grep <选项> [需要搜索的文本内容] [目标文件名字]
# 搜索文件中包含 "grep" ,忽略大小写,显示行号的行
grep -ni "grep" test.txt
匹配多个关键词
# 匹配包含 "hello" 或 "linux" 的行(用 | 分隔)
grep -E "hello|linux" test.txt
# 等价于 egrep "hello|linux" test.txt(egrep 是 grep -E 的简写)
结合管道(|)搜索
# 搜索进程中包含 "java" 的进程
ps -ef | grep "java"
# 搜索日志文件中包含 "ERROR" 的行(实时日志)
tail -f app.log | grep "ERROR"
# 搜索系统中包含 "root" 的用户
cat /etc/passwd | grep "root"
正则表达式
# 匹配以 "Hello" 开头的行(^ 表示行首)
grep "^Hello" test.txt
# 匹配以 "4" 结尾的行($ 表示行尾)
grep "4$" test.txt
# 匹配包含任意数字的行([0-9] 匹配数字)
grep "[0-9]" test.txt
其他选项
| 选项 | 解释 | 备注 |
|---|---|---|
i | 忽略大小写 | |
n | 显示匹配行的行号 | |
v | 显示不包含指定内容的行 | |
o | 只输出匹配的字符串 | |
B | 显示匹配行的前N行 | before |
A | 显示匹配行的后N行 | after |
C | 显示匹配行的前后N行 | context |
r | 递归搜索目录下的所有文件 | |
c | 统计匹配行数 | c是小写 |
top
top 是实时性能监控工具。它主要用于动态地查看系统中各个进程的资源占用情况(如 CPU、内存等),类似于 Windows 系统中的“任务管理器”。普通用户:只能看到自己拥有的进程。Root 用户:可以看到系统中所有用户的进程。
常用命令行参数
启动时也可以直接指定参数,指定刷新间隔(默认为 3 秒):
top -d 2 # 每 2 秒刷新一次
只显示特定用户的进程:
top -u www-data # 只看 www-data 用户的进程
只显示特定 PID 的进程:
top -p 1234,5678 # 只看 PID 为 1234 和 5678 的进程
批处理模式(输出一次后退出,常用于脚本记录):
top -b -n 1 > cpu_log.txt
top 的输出界面主要分为两部分:上半部分的统计信息区和下半部分的进程列表区。
上半部分:系统整体统计信息
通常显示前 5 行,包含以下关键数据:
- 第一行 (top - ...):
current time: 当前系统时间。up ...: 系统运行时间(uptime)。user: 当前登录的用户数。load average: 系统负载平均值(分别代表过去 1 分钟、5 分钟、15 分钟的平均负载)。
- 第二行 (Tasks):
total: 进程总数。running: 正在运行的进程数。sleeping: 睡眠中的进程数。stopped: 停止的进程数。zombie: 僵尸进程数(如果此数值不为 0 且持续增加,说明有程序异常退出未释放资源)。
- 第三行 (%Cpu(s)):
us(user): 用户空间占用 CPU 百分比。sy(system): 内核空间占用 CPU 百分比。ni(nice): 改变过优先级的进程占用 CPU 百分比。id(idle): 空闲 CPU 百分比。wa(iowait): 等待 I/O 操作完成的 CPU 时间百分比(如果很高,说明磁盘读写可能是瓶颈)。hi/si: 硬件/软件中断占用。st(steal): 虚拟化环境中被其他虚拟机占用的 CPU 时间。
- 第四行 (KiB Mem): 物理内存使用情况。
total: 总内存。free: 空闲内存。used: 已用内存。buff/cache: 用于缓冲和缓存的内存(Linux 会自动利用空闲内存做缓存,这部分在应用需要时通常可释放)。
- 第五行 (KiB Swap): 交换分区(虚拟内存)使用情况。
- 如果
used很高且free很低,说明物理内存不足,系统正在频繁使用磁盘作为内存,会导致性能急剧下降。
- 如果
下半部分:进程列表
默认按 CPU 使用率排序,主要列含义如下:
PID: 进程 ID。USER: 进程所有者。PR / NI: 优先级 (Priority) / Nice 值。VIRT: 虚拟内存使用量(进程申请的总内存,包含未实际使用的)。RES: 常驻内存(实际使用的物理内存,不含 Swap)。这是判断内存占用最关键的指标。单位通常是 KiBSHR: 共享内存大小。S: 进程状态 (R=运行,S=睡眠,D=不可中断睡眠,Z=僵尸)。%CPU: CPU 使用率。%MEM: 内存使用率。TIME+: 进程累计占用的 CPU 时间。COMMAND: 启动进程的命令名称或完整路径。
常用交互快捷键
在 top 运行过程中,可以按下以下按键进行实时操作(无需重启命令):
| 按键 | 功能描述 |
|---|---|
E | 切换上半部分(系统总内存统计)的单位 |
e | 切换下半部分(进程列表 RES 列)的单位 |
P (大写) | 按 CPU 使用率排序(默认)。 |
M (大写) | 按 内存 (Memory) 使用率排序。 |
T (大写) | 按 CPU 时间 (Time+) 排序。 |
N (大写) | 按 PID 排序。 |
k | 杀死指定 PID 的进程(输入 PID 后确认)。 |
r | 调整指定进程的 Nice 值(优先级)。 |
c | 切换显示命令的完整路径还是仅显示命令名。 |
f 或 F | 进入字段管理界面,可以选择显示或隐藏某些列。 |
1 (数字) | 展开显示所有 CPU 核心的详细使用情况(默认是汇总显示)。 |
z | 切换彩色/黑白显示模式。 |
q | 退出 top。 |
h | 显示帮助菜单。 |
总结:当你发现服务器变慢、风扇狂转或程序无响应时,top 是你的第一诊断工具:
- 看 Load Average 判断整体负载。
- 看 %Cpu(s) 中的
wa判断是否是磁盘 I/O 瓶颈。 - 按 M 键查找是否由内存泄漏导致。
- 按 P 键找出是哪个“坏”进程占用了 CPU。
ps
ps 查看当前时刻进程快照的命令。静态快照,适合用于脚本编写、查找特定进程 PID 以便杀死进程,或者在系统负载极高无法运行 top 时使用。
常用的组合
查看所有进程的详细信息 (最常用),快速浏览系统所有进程,查看进程的父子关系(PPID)。
# -e: 显示所有进程 (every process)。
# -f: 全格式输出 (full-format),包含 UID, PID, PPID, 启动时间, 命令等。
ps -ef
查看当前终端下的所有进程 (含其他用户)
# a: 显示所有用户的进程 (all)。
# u: 以用户为主的格式 (user-oriented),显示 CPU/内存占用、启动用户等。
# x: 显示没有控制终端的进程 (通常指后台守护进程)。
ps aux
输出列详解 (以 ps aux 为例)
| 列名 | 含义 | 说明 |
|---|---|---|
USER | 用户 | 进程所有者。 |
PID | 进程 ID | 唯一标识符。 |
%CPU | CPU 占用 | 进程占用的 CPU 百分比。 |
%MEM | 内存占用 | 进程占用的物理内存百分比。 |
VSZ | 虚拟内存 | 虚拟内存大小 (单位 KB)。 |
RSS | 常驻内存 | 实际物理内存大小 (单位 KB),对应 top 中的 RES。 |
TTY | 终端 | 进程关联的终端。? 表示无终端 (通常是后台服务)。 |
STAT | 状态 | 进程状态代码 (见下文)。 |
START | 启动时间 | 进程启动的时间或日期。 |
TIME | CPU 时间 | 进程累计使用的 CPU 时间。 |
COMMAND | 命令 | 启动进程的命令及参数。 |
常见 STAT 状态代码:
R: 运行中 (Running)。S: 睡眠中 (Sleeping),等待事件完成。D: 不可中断睡眠 (通常是在等待 I/O,如磁盘读写)。Z: 僵尸进程 (Zombie),已终止但未被父进程回收。T: 停止/追踪 (Stopped)。<: 高优先级。N: 低优先级。
高级筛选与查找技巧
查找特定进程 (配合 grep),这是运维中最常见的操作,例如查找 nginx 进程:
ps aux | grep nginx
查看特定用户的进程
ps -u www-data
# 或者
ps -U www-data -u www-data
查看特定 PID 的进程
# -o: 自定义输出格式 (output),只显示你关心的列。
ps -p 1234,5678 -o pid,ppid,cmd,%mem,%cpu
查看进程树 (父子关系),如果想清晰看到谁启动了谁:
# --forest 或 j 会以树状结构缩进显示,非常直观地展示进程层级。
ps -ef --forest
# 或者
ps axjf
按内存占用排序的前 10 个进程
# head -n 11 是因为第一行是表头
ps aux --sort=-%mem | head -n 11
5. 实用场景总结
- 我想杀掉一个卡死的程序:
- 先用
ps aux | grep 程序名找到 PID。 - 再用
kill -9 PID杀掉。
- 先用
- 我想看某个用户跑了什么:
ps -u 用户名 -f
- 我想写一个脚本监控进程是否存在:
- 在脚本中使用
ps -p PID或pgrep 进程名(pgrep 是 ps 的衍生工具,专门用于查找 PID)。
- 在脚本中使用
- 系统卡死,top 都打不开:
ps通常比top更轻量,能更快给出一个当前的进程列表 snapshot。
补充:pgrep 和 pkill,现代 Linux 系统中,为了简化 ps | grep 的操作,推荐使用:
pgrep nginx: 直接返回 nginx 进程的 PID 列表。pkill nginx: 直接杀死所有名为 nginx 的进程。
free
free 是用于查看内存使用情况的命令。显示的不仅仅是空闲内存,而是包括总内存、已用内存、共享内存、缓冲/缓存以及可用内存在内的完整概览。对于系统管理员和开发者来说,正确解读 free 的输出(尤其是 available 列)至关重要,因为 Linux 的内存管理机制与 Windows 有所不同。
基本用法
最常用的命令是加上 -h 参数,以人类可读的单位(Human-readable)显示:
free -h
- 不加
-h:默认单位是 KiB ,数字很大,不易读。 -m:以 MB 为单位。-g:以 GB 为单位。-s <秒>:持续监控,每隔指定秒数刷新一次(类似top的内存部分)。例如:free -h -s 2(每 2 秒刷新一次)。-t:在输出底部增加一行 "total",显示物理内存和 Swap 的总和。
输出详解
执行 free -h 后,你会看到类似下面的输出:
total: 物理内存总量。used: 已使用的内存。在旧版 Linux 或某些理解中,used = total - free。但这包含了用于缓存(buff/cache)的内存,所以这个数值通常看起来很大,不代表应用程序实际占用了这么多。free: 完全未被使用的内存。这部分内存是空的,没有任何数据。Linux 倾向于“不浪费内存”,所以这个值通常很小。shared: 多个进程共享的内存总额(主要是 tmpfs/shmem)。buff/cache: 缓冲区 + 缓存。Buffer: 用于块设备(如磁盘)的读写缓冲。Cache: 用于文件系统的页缓存(Page Cache)。available: 应用程序可用内存估算值(最重要的一列!)。- 这是判断内存是否充足的金标准。
- 计算公式大致为:
available ≈ free + (可回收的 buff/cache)。 - 如果这个值很低(例如小于总内存的 10%),才说明系统真的缺内存了,可能需要增加内存或检查内存泄漏。
- 不要只看
free列!如果free很小但available很大,说明系统非常健康,只是利用了内存做缓存。
- Swap 行含义:
total: 交换分区(虚拟内存)总量。used: 已使用的 Swap 大小。如果此值持续很高,说明物理内存不足,系统正在频繁使用磁盘作为内存,会导致性能严重下降(抖动)。free: 剩余的 Swap 空间。 实用场景示例
- 快速检查内存是否充足
# 关注 available 列。如果它是总内存的 20% 以上,通常很安全。
free -h
- 监控内存变化(排查内存泄漏)如果你怀疑某个程序有内存泄漏,可以每秒刷新一次观察
used或available的趋势:
free -h -s 1
- 如果
available持续下降且不回升,而buff/cache没有相应减少,可能存在内存泄漏。 在脚本中获取具体数值
- 如果你需要在脚本中判断内存使用率,可以使用
-b(bytes) 配合awk提取:
# 获取可用内存百分比
free | awk '/Mem:/ {printf("Available: %.2f%%\n", $7/$2 * 100)}'
如何一眼判断内存状态?
| 指标 | 状态判断 | 建议操作 |
|---|---|---|
available | 高(>20% 总内存) | 系统健康,无需担心。 |
available | 低 (<10% 总内存) | 内存紧张,需检查占用高的进程 (top 按 M 排序)。 |
swap used | 持续增长 | 物理内存严重不足,系统性能将大幅下降。需立即干预(加内存或优化应用)。 |
buff/cache | 很大 | 正常现象,说明系统在有效利用内存加速 I/O。 |
记住口诀:不看 free 看 available,swap 用了要警惕,cache 大了是好事。
ip
管理 IP 地址
- 查看所有接口的 IP 信息:
ip addr show
# 或者简写
ip a
输出解读:
inet: IPv4 地址及掩码长度(如/24代表 255.255.255.0)。inet6: IPv6 地址。scope host: 本地回环。scope global: 全局可用 IP。valid_lft: 地址有效寿命(DHCP 获取的地址会有此限制)。
>> 与>
>>:追加>:覆盖写入
explode@explode:~/linux$ touch eorr.txt && echo 'hauhau' > eorr.txt
explode@explode:~/linux$ cat eorr.txt
hauhau
explode@explode:~/linux$ echo 'huahua2' > eorr.txt
explode@explode:~/linux$ cat eorr.txt
huahua2
explode@explode:~/linux$ echo 'huahua3' >> eorr.txt
explode@explode:~/linux$ cat eorr.txt
huahua2
huahua3