Ubuntu - 常用命令

Liunx

Ubuntu - 常用命令

下面是一个Ubuntu 上常用命令的实用教程,适合系统运维人员、开发者、或想要更好地控制服务的用户。


🔧 什么是 systemctl

systemctl 是 Systemd 的管理工具,用于启动、停止、重启服务、查看服务状态等操作。Ubuntu 16.04 以后默认使用 Systemd。


🧰 常用 systemctl 命令

🔍 查看服务状态

bash
systemctl status nginx
  • 查看 nginx 服务是否正在运行,是否开机启动,以及最近的日志。

▶️ 启动服务

bash
sudo systemctl start nginx
  • 临时启动服务,重启系统后不会自动启动(除非启用了 enable)。

⏹ 停止服务

bash
sudo systemctl stop nginx

🔄 重启服务

bash
sudo systemctl restart nginx

🔁 重新加载配置(不重启服务)

bash
sudo systemctl reload nginx
  • 当配置文件修改后,可以使用此命令生效,而不中断现有连接(前提是服务支持 reload)。

🚀 设置开机启动

bash
sudo systemctl enable nginx

📴 取消开机启动

bash
sudo systemctl disable nginx

🧹 立即启用并启动

bash
sudo systemctl enable --now nginx

❌ 立即禁用并停止

bash
sudo systemctl disable --now nginx

⏱ 查看所有服务状态(按启动顺序)

bash
systemctl list-units --type=service

🔎 查看某服务是否已启用(开机启动)

bash
systemctl is-enabled nginx

📋 显示所有已启用服务

bash
systemctl list-unit-files --type=service | grep enabled

🧯 检查服务失败原因

bash
journalctl -xe

bash
journalctl -u nginx
  • 查看服务失败日志,常用于排查服务启动失败的原因。

🔧 编辑服务配置

bash
sudo systemctl edit nginx
  • 这会创建一个 drop-in 文件来覆写原有的 systemd 配置项。

🧱 强制重载 Systemd 配置

bash
sudo 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️⃣ 查看某个服务日志

bash
journalctl -u nginx
  • 查看 nginx 服务的完整日志输出。

可加时间过滤:

bash
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx --since "2025-07-01" --until "2025-07-09"

2️⃣ 实时查看日志(tail 模式)

bash
journalctl -f
  • 类似 tail -f /var/log/syslog,会持续输出新增日志。

可跟服务:

bash
journalctl -u docker -f

3️⃣ 查看系统最近的紧急或错误信息

bash
journalctl -p err -b
  • 只显示错误级别日志。其他级别:
    • emerg (0) – 严重崩溃
    • alert (1)
    • crit (2)
    • err (3)
    • warning (4)
    • notice (5)
    • info (6)
    • debug (7)

4️⃣ 过滤时间段

bash
journalctl --since "2025-07-09 10:00" --until "2025-07-09 12:00"

5️⃣ 查看某次启动的日志

bash
journalctl -b        # 当前这次开机
journalctl -b -1     # 上一次开机
journalctl -b -2     # 倒数第二次

6️⃣ 查看内核日志(如 dmesg)

bash
journalctl -k

🧹 清理日志

Systemd 日志默认会占用 /var/log/journal,可以按时间或大小清理:

按时间清理

bash
sudo journalctl --vacuum-time=7d

按空间清理(例如保留最多 500M)

bash
sudo journalctl --vacuum-size=500M

🛠 配置持久日志(默认可能不保存重启前日志)

如果重启后日志消失,你需要开启 persistent 模式:

bash
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

⏱ 快速定位日志命令组合

bash
journalctl -u nginx -p err --since "10 minutes ago"
  • 查询过去 10 分钟 nginx 服务的错误日志。
bash
journalctl -b -u docker -f
  • 实时查看当前启动周期 docker 的日志。