Linux 命令实战笔记
在 [程序员面试吧] 公众号中找到的 Linux 命令实战笔记
Linux 命令实战笔记
原文: 阿里P7运维工程师私藏的Linux实战笔记(建议收藏)
1. 基础命令
这里只记录我不了解的, 若要看所有的, 请移步到公众号
1.1. 最基础命令 (必须掌握)
1
2
3
4
5
# 文件内容查看
less file.txt # 分页查看 (大文件)
head -n 20 file # 查看前 20 行
tail -f logfile # 实时查看日志
grep "error" file # 搜索关键字
组合使用: 查找最近修改的配置文件
1
find /etc -type f -name "*.conf" -mtime -7 | xargs ls -lt
-mtime -7: 筛选时间, 7 天内被修改过的文件xargs: 转换工具; 将find输出的文件变成ls命令参数-lt:-l- 长格式显示;-t: 按修改时间排序
1.2. 管道重定向
- 管道:
| - 重定向:
>,>>,<
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 统计 nginx 日志中404错误的数量
cat access.log | grep "404" | wc -l
# 查找占用CPU最高的前10个进程
ps aux | sort -k3 -rn | head -10
# 实时监控特定关键字的日志
tail -f /var/log/app.log | grep --line-buffered "ERROR"
# 将错误输出重定向到文件
command 2> error.log
# 同时重定向标准输出和错误输出
command &> all_output.log
1.3. 文本处理
文本处理三剑客: grep, sed, awk;
grep: 文本搜索工具; 在文件或输入流中查找匹配模式的行; 支持基本和扩展正则表达式
用法:
- 参数:
-i(ignore-case)- 功能: 忽略字符大小写。
- 示例: (查找包含 error、Error 或 ERROR 的行).
grep -i "error" /var/log/syslog
- 参数:
-v(反相匹配)- 功能: 反向搜索,只显示不匹配的行。
- 示例: (查看进程时排除 grep 进程本身)。
ps -ef | grep -v "grep"
- 参数:
-r(递归)- 功能: 递归搜索目录下的所有文件。
- 示例: (在 src 目录及其子目录下查找包含 main 的文件)。
grep -r "main" ./src
- 参数:
-n(行号)- 功能: 显示匹配行在文件中的行号。
- 示例: (查找 config 并标注其所在的行号)。
grep -n "config" setup.sh
- 参数:
-E(exted-regexp)- 功能: 使用扩展正则表达式(等同于 egrep)。
- 示例: (查找包含 cat 或 dog 的行)。
grep -E "cat|dog" file.txt
sed: 流编辑器; 对文本进行增删改查;支持正则表达式;非交互式批量处理。
用法:
- 参数:
-i(in-place)- 功能: 直接修改源文件内容。
- 示例:
sed -i 's/abc/xyz/g' test.txt(将 test.txt 中所有 abc 替换为 xyz 并保存)。
- 参数:
-n(quiet)- 功能: 取消默认的全文输出,仅显示处理后的行。
- 示例:
sed -n '5,10p' file.txt(仅打印第 5 到 10 行)。
- 参数:
-e(expression)- 功能: 在一条命令中执行多个编辑操作。
- 示例:
sed -e '1d' -e 's/old/new/' file.txt(删除第一行,并替换余下内容中的 old)。
- 命令动作:
s(substitute)- 功能: 替换文本。
- 示例:
sed 's/^/#/' file.txt(在每行开头加 # 号,常用于批量注释)。
- 命令动作:
d(delete)- 功能: 删除指定行。
- 示例:
sed '/ERROR/d' log.txt(删除所有包含 ERROR 的行)。
awk: 文本处理工具/编程语言; 对文本进行样式扫描与列处理;支持算术运算、逻辑判断及内置函数。
用法:
- 参数:
-F(Field Separator)- 功能: 指定输入行的分隔符(默认为空格/制表符)。
- 示例: (以冒号分割,打印第一列用户名)。
awk -F: '{print $1}' /etc/passwd
- 参数:
-v(Variable)- 功能: 设置用户自定义变量或引入外部变量。
- 示例: (筛选磁盘使用率大于 80 的行)。
awk -v threshold=80 '$5 > threshold' df_out.txt
- 内置变量:
$0,$N,NF,NR- 功能: 指整行, 指第 N 列, 指列数, 指行号。
$0$NNFNR - 示例: (打印行号和最后一列)。
awk '{print NR, $NF}' file.txt
- 功能: 指整行, 指第 N 列, 指列数, 指行号。
- 模式匹配:
/pattern/- 功能: 只处理匹配到正则的行。
- 示例: (查找含 Listen 的行并打印第二列)。
awk '/Listen/ {print $2}' config.txt
- 块作:
BEGIN/结束- 功能: 在处理文本前或结束后执行的作。
- 示例: (对第一列求和并在最后输出)。
awk '{sum+=$1} END {print sum}' data.txt
组合使用: 分析 Web 日志, 查找访问量最大的 10 个 IP:
1
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
2. 进程管理
2.1. 进程管理和监督
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看进程
ps aux # 查看所有进程
ps -ef | grep nginx # 查找特定进程
pstree # 树形显示进程关系
# 实时监控
top # 经典监控工具
htop # 更友好的界面
iotop # IO监控
iftop # 网络流量监控
# 进程控制
kill -9 PID # 强制终止进程
killall process_name # 按名称终止进程
nice -n 10 command # 以低优先级运行
renice -n 5 -p PID # 调整运行中进程优先级
2.2. 后台任务管理
当需要运行长时间任务:
1
2
3
4
5
6
7
8
9
10
11
# 后台运行
command & # 后台运行
nohup command & # 断开终端后继续运行
screen -S session_name # 创建会话(推荐)
tmux new -s myproject # tmux会话(更强大)
# 任务控制
jobs # 查看后台任务
fg %1 # 将任务调到前台
bg %1 # 将任务放到后台
disown %1 # 将任务与终端分离
[!Note]
对于生产环境的长时间任务, 始终使用
screen或tmux, 这样即使网络断开也不会影响任务执行.
3. 系统性能分析
3.1. CPU 性能分析
1
2
3
4
5
6
7
8
# CPU使用率监控
vmstat 1 # 每秒更新一次
mpstat -P ALL 1 # 多核CPU监控
sar -u 1 10 # 收集10秒CPU数据
# 进程CPU分析
pidstat -u 1 -p PID # 特定进程CPU使用
perf top # 实时性能分析
3.2. 内存管理与优化
1
2
3
4
5
6
7
8
9
10
11
# 内存使用情况
free -h # 人类可读格式
cat /proc/meminfo # 详细内存信息
vmstat -s # 内存统计
# 内存问题排查
slabtop # 内核内存使用
ps aux --sort=-%mem | head # 内存使用最多的进程
# 清理缓存(慎用)
sync && echo 3 > /proc/sys/vm/drop_caches
3.3. 磁盘 I/O 优化
1
2
3
4
5
6
7
8
9
10
11
12
# 磁盘使用情况
df -h # 文件系统使用情况
du -sh * # 目录大小
lsblk # 块设备列表
# I/O性能分析
iostat -x 1 # 详细I/O统计
iotop -o # 只显示有I/O的进程
dstat -d # 磁盘统计
# 查找大文件
find / -type f -size +1G 2>/dev/null
[!Note]
系统变慢时, 排查顺序:
top: 查看 CPU, 内存iostat: 检查磁盘 IOnetstatorss: 检查网络连接- 查看系统日志
4. 网络配置, 诊断
4.1. 网络配置 & 诊断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 网络配置
ip addr show # 查看IP地址
ip route show # 查看路由表
nmcli device status # NetworkManager状态
# 网络诊断
ping -c 4 google.com # 测试连通性
traceroute google.com # 路由追踪
mtr google.com # 结合ping和traceroute
dig google.com # DNS查询
nslookup google.com # DNS查询(经典)
# 端口和连接
netstat -tuln # 监听端口
ss -tuln # 更快的netstat替代
lsof -i :80 # 查看使用80端口的进程
telnet host port # 测试端口连通性
nc -zv host port # netcat端口扫描
4.2. 防火墙管理
1
2
3
4
5
6
7
8
9
# iptables(传统)
iptables -L -n -v # 查看规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许80端口
# firewalld(现代)
firewall-cmd --state # 查看状态
firewall-cmd --list-all # 查看所有规则
firewall-cmd --permanent --add-port=80/tcp # 永久开放端口
firewall-cmd --reload # 重载配置
5. 服务管理
5.1. Systemctl 服务管理
现在常用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 服务控制
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
systemctl reload nginx # 重载配置
systemctl status nginx # 查看状态
# 开机自启
systemctl enable nginx # 设置开机自启
systemctl disable nginx # 取消开机自启
systemctl is-enabled nginx # 查看是否自启
# 服务日志
journalctl -u nginx # 查看服务日志
journalctl -f -u nginx # 实时查看日志
journalctl --since "2024-01-01" -u nginx # 时间范围
5.2. 创建自定义服务
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
6. 日志管理
6.1. 日志查看 & 分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 系统日志位置
/var/log/syslog # 系统日志(Debian/Ubuntu)
/var/log/messages # 系统日志(RHEL/CentOS)
/var/log/auth.log # 认证日志
/var/log/kern.log # 内核日志
# 日志分析技巧
# 查找错误
grep -i error /var/log/syslog | tail -20
# 统计日志级别
awk '{print $5}' /var/log/syslog | sort | uniq -c | sort -rn
# 时间范围过滤
sed -n '/2024-01-01 10:00/,/2024-01-01 11:00/p' logfile
6.2. 日志轮转设置
配置 logrotate 管理日志大小:
1
2
3
4
5
6
7
8
9
10
11
12
13
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0644 root root
postrotate
systemctl reload myapp
endscript
}
7. 用户和权限管理
7.1. 用户管理
1
2
3
4
5
6
7
8
9
10
# 用户操作
useradd -m -s /bin/bash username # 创建用户
passwd username # 设置密码
usermod -aG sudo username # 添加到sudo组
userdel -r username # 删除用户及主目录
# 查看用户信息
id username # 用户ID和组
who # 当前登录用户
last # 登录历史
7.3. 权限管理
1
2
3
4
5
6
7
8
9
10
11
12
13
# 文件权限
chmod 755 file # rwxr-xr-x
chmod u+x file # 给用户添加执行权限
chown user:group file # 改变所有者
# 特殊权限
chmod u+s file # SUID
chmod g+s directory # SGID
chmod +t directory # Sticky bit
# ACL(访问控制列表)
setfacl -m u:username:rwx file # 设置ACL
getfacl file # 查看ACL
[!Caution]
不要给文件777权限
本文由作者按照
CC BY 4.0
进行授权