Loading... 系统管理员命令可帮助你以其他用户身份运行程序、关闭或重启系统,以及管理 init 系统和服务。 ## 1. sudo – 以其他用户身份执行命令 sudo 命令允许你以另一个用户(通常是超级用户)的身份运行命令。输入 sudo 命令后,系统会提示您输入密码进行身份验证。 这为安装软件包、编辑系统文件、管理服务等任务提供了高级访问权限。 此命令代表“超级用户do”,它允许您在运行特定命令时充当超级用户或根用户。这就是Linux如何保护自己,防止用户意外修改机器的文件系统或安装不合适的软件包。 Sudo通常用于安装软件或编辑用户主目录以外的文件: ```bash sudo apt install gimp sudo cd /root/ ``` 在运行您键入的命令之前,它会要求您输入管理员密码。 又如: ```bash sudo adduser bob [sudo] password for john: ``` 系统已添加用户 “bob”。 这将使用 sudo 创建新用户 “bob”。如果没有 sudo,普通用户通常无法添加用户。 ## 2. su– 更改用户 ID 或成为超级用户使用 su 命令可以切换到另一个用户账户,包括超级用户。必须提供目标用户的密码才能进行身份验证。这样就可以直接在另一个用户的环境中运行命令。 例子: ```bash 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。 要立即关闭计算机电源(默认为一分钟),请键入: ```bash shutdown now ``` 您还可以计划以24小时格式关闭系统: ```bash shutdown 20:40 ``` 要取消以前的shutdown调用,可以使用-c标志: ```bash shutdown -c ``` 又如: ```bash 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` : 在重开机之前先把所有网络相关的装置先停止 例子: ```bash 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` 命令可以查看当前启动的系统日志。 例子: ```bash [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](https://blog.csdn.net/heshihu2019/article/details/135840389) ## 6. service – 运行 System V 初始化脚本 service 命令运行用于控制服务的 System V 初始脚本。这允许启动、停止、重启和重新加载在传统 SysV init 下管理的服务。 `service` 命令查看启动关闭等服务跟systemctl类似,把服务名放在修饰词前面,如 service sshd status(systemctl status sshd) 例子: ```bash 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=`:指定服务的标准输出和错误输出的目标。可以将其设置为 `inherit`、`null` 或其他文件。 3. `[Install]` 部分: - `WantedBy=`:指定服务应作为哪个目标(target)的依赖进行安装。通常使用 `multi-user.target`。 - `Alias=`:为服务指定一个或多个别名。 在编写 Service 脚本时,可以使用 `#` 符号添加注释,以提供脚本的说明和文档。 以下是一个示例 Service 脚本,演示如何使用上述参数: ```plaintext [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 脚本可能需要根据您的特定需求进行自定义。了解每个选项的功能和限制非常重要,以确保正确设置和配置服务。 最后修改:2024 年 01 月 25 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏