Ubuntu - 常用命令
Liunx
Ubuntu - 常用命令
下面是一个Ubuntu 上常用命令的实用教程,适合系统运维人员、开发者、或想要更好地控制服务的用户。
🔧 什么是 systemctl
?
systemctl
是 Systemd 的管理工具,用于启动、停止、重启服务、查看服务状态等操作。Ubuntu 16.04 以后默认使用 Systemd。
🧰 常用 systemctl
命令
🔍 查看服务状态
bashsystemctl status nginx
- 查看 nginx 服务是否正在运行,是否开机启动,以及最近的日志。
▶️ 启动服务
bashsudo systemctl start nginx
- 临时启动服务,重启系统后不会自动启动(除非启用了 enable)。
⏹ 停止服务
bashsudo systemctl stop nginx
🔄 重启服务
bashsudo systemctl restart nginx
🔁 重新加载配置(不重启服务)
bashsudo systemctl reload nginx
- 当配置文件修改后,可以使用此命令生效,而不中断现有连接(前提是服务支持 reload)。
🚀 设置开机启动
bashsudo systemctl enable nginx
📴 取消开机启动
bashsudo systemctl disable nginx
🧹 立即启用并启动
bashsudo systemctl enable --now nginx
❌ 立即禁用并停止
bashsudo systemctl disable --now nginx
⏱ 查看所有服务状态(按启动顺序)
bashsystemctl list-units --type=service
🔎 查看某服务是否已启用(开机启动)
bashsystemctl is-enabled nginx
📋 显示所有已启用服务
bashsystemctl list-unit-files --type=service | grep enabled
🧯 检查服务失败原因
bashjournalctl -xe
或
bashjournalctl -u nginx
- 查看服务失败日志,常用于排查服务启动失败的原因。
🔧 编辑服务配置
bashsudo systemctl edit nginx
- 这会创建一个 drop-in 文件来覆写原有的 systemd 配置项。
🧱 强制重载 Systemd 配置
bashsudo systemctl daemon-reexec # 重启 systemd 自身 sudo systemctl daemon-reload # 重载所有 unit 文件
注意:修改了
/etc/systemd/system/*.service
文件后必须执行daemon-reload
才会生效。
🏗 自定义 Systemd 服务文件示例
ini# /etc/systemd/system/myapp.service [Unit] Description=My Python App After=network.target [Service] ExecStart=/usr/bin/python3 /opt/myapp/app.py Restart=always User=ubuntu Environment=ENV=prod [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl enable --now myapp
🧠 小技巧
目的 | 命令 |
---|---|
立即关闭系统 | systemctl poweroff |
重启系统 | systemctl reboot |
挂起系统 | systemctl suspend |
列出启动失败的服务 | systemctl --failed |
当然可以!以下是一个系统管理员级别的 journalctl
命令实用教程,帮助你高效查看 Ubuntu 系统日志,特别是在使用 systemd
的系统(如 Ubuntu 16.04+)中排查问题。
📘 journalctl
journalctl
是 Systemd 的日志查看工具。它用于查看系统启动日志、服务输出、内核消息等,是 syslog
的现代替代品。
🧰 常用命令速查表
操作 | 命令 |
---|---|
查看全部日志 | journalctl |
查看最新日志 | journalctl -xe |
查看某服务日志 | journalctl -u nginx |
查看某时间段日志 | journalctl --since "2025-07-01" --until "2025-07-09" |
实时滚动日志(tail) | journalctl -f |
查看当前 boot 的日志 | journalctl -b |
查看上一次启动的日志 | journalctl -b -1 |
按用户查看日志 | journalctl _UID=1000 |
按进程ID查日志 | journalctl _PID=1234 |
清理旧日志 | sudo journalctl --vacuum-time=7d |
🔎 详细使用示例
1️⃣ 查看某个服务日志
bashjournalctl -u nginx
- 查看 nginx 服务的完整日志输出。
可加时间过滤:
bashjournalctl -u nginx --since "1 hour ago" journalctl -u nginx --since "2025-07-01" --until "2025-07-09"
2️⃣ 实时查看日志(tail 模式)
bashjournalctl -f
- 类似
tail -f /var/log/syslog
,会持续输出新增日志。
可跟服务:
bashjournalctl -u docker -f
3️⃣ 查看系统最近的紧急或错误信息
bashjournalctl -p err -b
- 只显示错误级别日志。其他级别:
emerg
(0) – 严重崩溃alert
(1)crit
(2)err
(3)warning
(4)notice
(5)info
(6)debug
(7)
4️⃣ 过滤时间段
bashjournalctl --since "2025-07-09 10:00" --until "2025-07-09 12:00"
5️⃣ 查看某次启动的日志
bashjournalctl -b # 当前这次开机 journalctl -b -1 # 上一次开机 journalctl -b -2 # 倒数第二次
6️⃣ 查看内核日志(如 dmesg)
bashjournalctl -k
🧹 清理日志
Systemd 日志默认会占用 /var/log/journal
,可以按时间或大小清理:
按时间清理
bashsudo journalctl --vacuum-time=7d
按空间清理(例如保留最多 500M)
bashsudo journalctl --vacuum-size=500M
🛠 配置持久日志(默认可能不保存重启前日志)
如果重启后日志消失,你需要开启 persistent 模式:
bashsudo mkdir -p /var/log/journal sudo systemd-tmpfiles --create --prefix /var/log/journal sudo systemctl restart systemd-journald
⏱ 快速定位日志命令组合
bashjournalctl -u nginx -p err --since "10 minutes ago"
- 查询过去 10 分钟 nginx 服务的错误日志。
bashjournalctl -b -u docker -f
- 实时查看当前启动周期 docker 的日志。