6个Linux系统管理命令

dafenqi
2024-01-15 / 0 评论 / 17 阅读 / 正在检测是否收录...

系统管理员命令可帮助你以其他用户身份运行程序、关闭或重启系统,以及管理 init 系统和服务。

1. sudo – 以其他用户身份执行命令

sudo 命令允许你以另一个用户(通常是超级用户)的身份运行命令。输入 sudo 命令后,系统会提示您输入密码进行身份验证。

这为安装软件包、编辑系统文件、管理服务等任务提供了高级访问权限。

此命令代表“超级用户do”,它允许您在运行特定命令时充当超级用户或根用户。这就是Linux如何保护自己,防止用户意外修改机器的文件系统或安装不合适的软件包。

Sudo通常用于安装软件或编辑用户主目录以外的文件:

sudo apt install gimp
sudo cd /root/

在运行您键入的命令之前,它会要求您输入管理员密码。

又如:

sudo adduser bob
[sudo] password for john:

系统已添加用户 “bob”。

这将使用 sudo 创建新用户 “bob”。如果没有 sudo,普通用户通常无法添加用户。

2. su– 更改用户 ID 或成为超级用户使用

su 命令可以切换到另一个用户账户,包括超级用户。必须提供目标用户的密码才能进行身份验证。这样就可以直接在另一个用户的环境中运行命令。

例子:

su bob
Password:
bob@linux:~$

输入 bob 的密码后,该命令会将当前用户切换为用户 “bob”。shell 提示符将反映新用户。

3. shutdown – 关闭或重启 Linux

shutdown 命令用于在指定计时器后或立即关闭、停止或重启系统。要安全地重启或关闭多用户 Linux 系统,需要使用该命令。

正如您可能猜到的,shutdown命令允许您关闭机器电源。但是,它也可以用来停止和重新启动它。

常见的 shutdown 选项:

  • -h:关机并停止系统。后面无参数默认一分钟后操作。
  • -r:重新启动系统。
  • -k:发送关机通知给登录用户,但并不执行关机或重新启动操作。
  • -c:取消尚未执行的关机或重新启动操作。
  • -t [时间]:指定关机或重新启动前的延迟时间,单位为分钟。
  • -f:强制关机,不经过正常的系统关闭流程。
  • now:立即执行关机或重新启动操作。
  • +n:在 n 分钟后执行关机或重新启动操作。
  • -h now|24小时格式时间-P now:立即关机。例子,shutdown -h 20:40。
  • -r now|24小时格式时间:立即重新启动系统。例子,shutdown -r 20:40。

要立即关闭计算机电源(默认为一分钟),请键入:

shutdown now

您还可以计划以24小时格式关闭系统:

shutdown 20:40

要取消以前的shutdown调用,可以使用-c标志:

shutdown -c

又如:

shutdown -r now
Broadcast message from root@linux Fri 2023-01-20 18:12:37 CST:
The system is going down for reboot NOW!

这会立即重启系统,并向用户发出警告。

4. reboot – 重启或重新启动系统

reboot 命令可重启 Linux 操作系统,注销所有用户并安全地重启系统。它会同步磁盘,并在重启前干净利落地关闭系统。

常见的 reboot 选项:

  • -n : 在重开机前不做将记忆体资料写回硬盘的动作
  • -w : 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里
  • -d : 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)
  • -f : 强迫重开机,不呼叫 shutdown 这个指令,即不经过正常的系统关闭流程,这可能导致尚未保存的数据丢失。
  • -i : 在重开机之前先把所有网络相关的装置先停止

例子:

reboot
Restarting system.

reboot 是 shutdown -r 的简单替代方案。

执行关闭重启操作前请确保所有重要的工作已保存,并让系统处于安全状态。

5. systemctl – 控制 systemd 系统和服务管理器

systemctl 命令允许你管理 systemd 服务,如启动、停止、重启或重新加载它们。 systemd 是大多数现代 Linux 发行版使用的新启动系统,取代了 SysV init。

systemctl 有用的选项:

  1. 查看服务状态:使用 systemctl status [服务名] 命令可以查看特定服务的状态,包括是否正在运行、最后一次的活动日志等信息。如果不指定服务名,则会列出所有正在运行的服务的状态。
  2. 启动服务:使用 systemctl start [服务名] 命令可以启动特定的服务。如果服务已经在运行中,该命令不会产生任何影响。
  3. 停止服务:使用 systemctl stop [服务名] 命令可以停止特定的服务。如果服务已经停止,该命令不会产生任何影响。
  4. 重启服务:使用 systemctl restart [服务名] 命令可以重启特定的服务。如果服务未在运行,则此命令将启动该服务。
  5. 关闭服务:使用 systemctl disable [服务名] 命令可以禁用特定的服务,使其在系统启动时不会自动启动。
  6. 启用服务:使用 systemctl enable [服务名] 命令可以启用特定的服务,使其在系统启动时自动启动。
  7. 查看服务列表:使用 systemctl list-units 命令可以列出所有已经加载的服务和其状态信息。
  8. 查看详细信息:使用 systemctl show [服务名] 命令可以查看特定服务的详细信息,包括服务的参数、依赖关系等。
  9. 过滤服务列表:可以使用 systemctl list-units --type=[类型] 命令来过滤服务列表。例如,--type=service 将只显示服务类型的单元。
  10. 查看服务日志:使用 journalctl -u [服务名] 命令可以查看特定服务的日志信息。可以使用不同的选项来过滤和格式化日志输出。
  11. 查看启动日志:使用 systemctl --failed 命令可以查看启动过程中失败的服务。此外,journalctl -b 命令可以查看当前启动的系统日志。

例子:

[root@xx ~]# systemctl list-units|grep rsy
rsyslog.service                                                   loaded active running   System Logging Service

[root@xx ~]# journalctl -u rsyslog.service  
-- Logs begin at Mon 2024-01-15 08:41:20 GMT, end at Tue 2024-01-16 03:49:08 GMT. --
Jan 15 08:41:30 xx systemd[1]: Starting System Logging Service...
Jan 15 08:41:30 xx rsyslogd[1167]:  [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="1167" x-info="http
Jan 15 08:41:30 xx systemd[1]: Started System Logging Service.
Jan 15 13:05:02 xx rsyslogd[1167]: sd_journal_get_cursor() failed: 'Cannot assign requested address'  [v8.24.0-34.e
Jan 15 13:05:02 xx rsyslogd[1167]: imjournal: journal reloaded... [v8.24.0-34.el7 try http://www.rsyslog.com/e/0" ]


[root@xx ~]# systemctl list-units
UNIT                                          LOAD   ACTIVE SUB       DESCRIPTION
proc-sys-fs-binfmt_misc.automount             loaded active waiting   Arbitrary Executable File Formats File System
sys-devices-pci0000:00-0000:00:04.0-virtio1-net-eth0.device loaded active plugged   Virtio network device
sys-devices-pci0000:00-0000:00:05.0-virtio2-block-vda-vda1.device loaded active plugged   /sys/devices/pci0000:00/0
sys-devices-pci0000:00-0000:00:05.0-virtio2-block-vda.device loaded active plugged   /sys/devices/pci0000:00/0000:0
sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged   /sys/devices/platform/serial8250/tty/ttyS3
sys-devices-pnp0-00:04-tty-ttyS0.device       loaded active plugged   /sys/devices/pnp0/00:04/tty/ttyS0
sys-module-configfs.device                    loaded active plugged   /sys/module/configfs
sys-subsystem-net-devices-eth0.device         loaded active plugged   Virtio network device
-.mount                                       loaded active mounted   /
dev-hugepages.mount                           loaded active mounted   Huge Pages File System
dev-mqueue.mount                              loaded active mounted   POSIX Message Queue File System
run-user-0.mount                              loaded active mounted   /run/user/0

[root@xx ~]# systemctl start php-fpm
[root@xx ~]# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-01-16 04:15:54 GMT; 10s ago
 Main PID: 28290 (php-fpm)
   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 6
   CGroup: /system.slice/php-fpm.service
           ├─28290 php-fpm: master process (/etc/php-fpm.conf)
           ├─28291 php-fpm: pool www
           ├─28292 php-fpm: pool www
           ├─28293 php-fpm: pool www
           ├─28294 php-fpm: pool www
           └─28295 php-fpm: pool www

Jan 16 04:15:54 xx systemd[1]: Starting The PHP FastCGI Process Manager...
Jan 16 04:15:54 xx systemd[1]: Started The PHP FastCGI Process Manager.

systemctl list-units 输出选项详解:

  • UNIT:单元的名称。它标识了系统中的一个单元,可以是服务、设备、挂载点等。
  • LOAD:表示单元是否已加载。如果单元已加载,它将显示为 "loaded";如果尚未加载,可能显示为 "not-found" 或其他状态。
  • ACTIVE:指示单元的活动状态。常见的状态有:

    • active:单元当前处于活动状态。
    • inactive:单元当前处于非活动状态。
    • activating:单元正在启动过程中。
    • deactivating:单元正在停止过程中。
    • failed:单元启动或停止失败。
  • SUB:表示单元的子状态,即更具体的状态信息。它提供了有关单元当前状态的更多细节。

    • listening:单元正在监听某个端口或套接字,等待连接或通信请求。
    • running:单元正在运行,没有出现错误或故障。
    • start-pre:单元正在启动的准备阶段,执行一些预启动操作。
    • start:单元正在启动过程中。
    • start-post:单元已经启动,并执行一些后启动的操作。
    • exited:单元已经完成运行,并正常退出。
    • reload:单元正在重新加载配置或资源。
    • stop:单元正在停止过程中。
    • stop-post:单元已经停止,并在执行一些后停止的操作。
    • waiting:单元正在等待满足某些条件,以便启动或继续运行。
    • failed:单元在启动或运行过程中出现了错误或失败。
    • inactive:单元处于非活动状态,未运行。
    • dead:单元已经停止并进入终止状态。
    • plugged:指示某个设备已经插入或连接。
    • mounted:如果单元表示一个挂载点,而该挂载点上的文件系统已成功挂载,则 SUB 字段中会显示为 mounted。这表示文件系统已经成功地连接到文件系统树中的指定挂载点,并可以被访问和使用。
  • DESCRIPTION:对单元的描述信息。它通常提供了关于该单元功能和用途的简要说明。

systemd进程管理工具详细教程请看这:Linux 命令之systemd

6. service – 运行 System V 初始化脚本

service 命令运行用于控制服务的 System V 初始脚本。这允许启动、停止、重启和重新加载在传统 SysV init 下管理的服务。

service 命令查看启动关闭等服务跟systemctl类似,把服务名放在修饰词前面,如 service sshd status(systemctl status sshd)

例子:

service iptables start
[ ok ] Starting iptables (via systemctl): iptables.service.

上述命令使用 SysV init 脚本启动了 iptables 防火墙服务。

如何编写Service脚本

编写 Service 脚本涉及的参数如下:

  1. [Unit] 部分:

    • Description=:描述服务的文本信息。例如:Description=My Custom Service
    • Requires=:指定服务所依赖的其他服务。格式为 Requires=<dependency.service>。如果被依赖的服务没有运行,那么当前服务将无法启动。
    • After=:指定服务应在其他指定服务之后启动。格式为 After=<service1> <service2>
    • Wants=:指定服务想要依赖的其他服务,但不会影响当前服务的启动。格式为 Wants=<dependency.service>
    • Before=:指定服务应在其他指定服务之前启动。格式为 Before=<service1> <service2>
  2. [Service] 部分:

    • ExecStart=:指定服务运行的主要命令或程序。例如:ExecStart=/usr/bin/my_service
    • Type=:定义服务的类型。常见的类型包括 simple(默认值,用于基本命令)、forking(用于创建子进程的服务)和 oneshot(仅执行一次命令或脚本)。
    • User=Group=:指定服务运行的用户和用户组。
    • WorkingDirectory=:指定服务的工作目录。
    • Restart=:指定当服务退出时的重启行为。常见选项包括 always(总是重启)、on-failure(仅在非零退出码时重启)和 no(禁用重启)。
    • RestartSec=:指定在重启服务之前等待的时间,单位为秒。
    • StandardOutput=StandardError=:指定服务的标准输出和错误输出的目标。可以将其设置为 inheritnull 或其他文件。
  3. [Install] 部分:

    • WantedBy=:指定服务应作为哪个目标(target)的依赖进行安装。通常使用 multi-user.target
    • Alias=:为服务指定一个或多个别名。

在编写 Service 脚本时,可以使用 # 符号添加注释,以提供脚本的说明和文档。

以下是一个示例 Service 脚本,演示如何使用上述参数:

[Unit]
Description=My Custom Service
After=network.target

[Service]
ExecStart=/usr/bin/my_service
Type=simple
User=my_user
Group=my_group
WorkingDirectory=/path/to/working/directory
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
Alias=my_service

在创建或修改 Service 脚本后,将其保存为以 .service 结尾的文件,并将其放置在适当的 Systemd 服务目录中(例如 /etc/systemd/system/)。然后可以使用 systemctl 命令来管理该服务,如启动、停止、重启、查看状态等。

请注意,实际的 Service 脚本可能需要根据您的特定需求进行自定义。了解每个选项的功能和限制非常重要,以确保正确设置和配置服务。

0

评论 (0)

取消