Home linux常用指令
Post
Cancel

linux常用指令

查看日志

1
2
3
4
5
6
7
# tail 从末尾开始计算
# -n 100 设置条数 100
# -f 动态监控
# log.txt 指定日志
# | 管道运算符
# grep 根据条件筛选
tail -n 100 -f log.txt | grep 'error'

挂起服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# nohup ... & disown:让它在后台一直跑,关闭终端也不会结束,直到你手动停止(或系统重启)。
# bash -c ''  执行指令
# > /dev/null丢弃标准输出(stdout); 如果使用 >> 则是追加( > 覆盖); 有需要也可以替换为日志路径
# 2>&1 把标准错误(stderr)也重定向到标准输出 → 最终全部丢弃到 /dev/null
# & 把整个 nohup 命令放到后台运行。
# disown 把这个后台进程从当前 shell 的 job 列表中移除。
nohup bash -c 'cd /home/linuxuser/wkai.de && jekyll s -s ./ -d ./_site --trace'  > /dev/null 2>&1 & disown

# 查看运行指令
ps -ef | grep nohup
ps -p 12345 -o pid,cmd

# 退出
exit
挂起方式 适用场景 优点 缺点 是否适合长期运行 是否自动重启 是否推荐
nohup + & 短期后台任务(下载、执行脚本等) 简单、快速、不需要配置 无自动拉起;session 退出可能仍被 systemd 回收;日志不易管理;OOM 风险 ❌ 不适合 ❌ 否 ❌ 不推荐长期挂服务
tmux / screen 手工运行任务并保持会话 不依赖 ssh;会话可重新连接;稳定 不会自动重启;需要手动管理;不是 daemon ⚠️ 部分适合 ❌ 否 ✔ 适合调试,非长期
systemd service(推荐) 正式服务、长期运行、生产环境 自动拉起、稳定、可限制资源、日志管理完善、开机自启、免 ssh 需要写 unit file(一次配置后最稳) ✔ 非常适合 ✔ 是 强烈推荐
cron 定时任务 定期执行任务(构建 / 检查 / 同步) 简单、轻量,不常驻内存;任务时间可控 不能实时运行,不适合“服务”;不能长期保持前台程序 ❌ 不适合长期驻留 ❌ 否 ✔ 适合周期任务
inotifywait(文件变化触发) 文档变更触发构建(你用 Jekyll 很适合) 实时触发、轻量、低资源占用 需常驻进程,有时会漏事件(NFS 等) ✔ 适合 ❌ 否 ✔ 适合自动构建但需 systemd 管理
supervisord 中小型服务管理(Python/Node 等) 自动拉起、配置简单 不如 systemd 稳定;不推荐新系统使用 ✔ 适合 ✔ 是 ⚠️ systemd 时代不推荐
Docker 容器 + restart=always 容器化服务 隔离、安全、自动重启、跨平台 配置复杂、占用资源、对小内存不友好 ✔ 适合 ✔ 是 视场景而定

定时任务

1
2
3
4
5
6
7
8
9
# crontab -e 编辑当前用户的 crontab 定时任务列表。保存退出后,系统就会按照你写入的内容定时执行任务。
# */1 * * * * 每一分钟执行一次 [分 时 日 月 周]
# git ... pull 自动拉取 git 代码
# > /dev/null 输出重定向 (丢弃), 有需要也可以替换为日志路径。
crontab -e
*/1 * * * * git --git-dir=/home/linuxuser/wkai.de/_posts/.git --work-tree=/home/linuxuser/wkai.de/_posts pull > /dev/null

# 查看执行情况
crontab -l

查看服务器内存情况

在排查 OOM 问题时常用。

1
2
3
4
5
6
7
8
9
10
## 指令
free -h

# 示例结果
# Mem: 物理内存(RAM)
# Swap: 交换分区(虚拟内存)
# 每类下面都有 total / used / free / shared / buff/cache / available
               total        used        free      shared  buff/cache   available
Mem:           759Mi       316Mi       175Mi        17Mi       411Mi       443Mi
Swap:          2.3Gi       208Mi       2.1Gi

查看日志

写入日志

1
2
# 将日志写入目标文件
git pull >> error.log 2>&1

tail指令

1
2
3
# 动态查看尾部日志
# -n 查看行数 | -f 实时日志 | -c 按字节查看 | -q 安静模式(不打印文件名) | -v 强制显示文件名 | --pid=PID -f 跟随到某进程结束 | 
tail -n 50 -f error.log

tail + grep 常用组合(超级实用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 一边输出新日志,一边过滤
tail -f build.log | grep "ERROR" 

# 实时追踪并过滤多个字段
tail -f logfile | grep -E "ERROR|WARN|FATAL"

# 反向过滤,排除某些条件
tail -f logfile | grep -v "DEBUG"

# 关键信息高亮
tail -f logfile | grep --color=always "keyword"

# 忽略大小写
tail -f logfile | grep -i "error"

tail + awk 常用组合(日志分析更强大)

This post is licensed under CC BY 4.0 by the author.