系统管理员命令可帮助你以其他用户身份运行程序、关闭或重启系统,以及管理 init 系统和服务。
sudo 命令允许你以另一个用户(通常是超级用户)的身份运行命令。输入 sudo 命令后,系统会提示您输入密码进行身份验证。
这为安装软件包、编辑系统文件、管理服务等任务提供了高级访问权限。
此命令代表“超级用户do”,它允许您在运行特定命令时充当超级用户或根用户。这就是Linux如何保护自己,防止用户意外修改机器的文件系统或安装不合适的软件包。
Sudo通常用于安装软件或编辑用户主目录以外的文件:
sudo apt install gimp
sudo cd /root/
在运行您键入的命令之前,它会要求您输入管理员密码。
又如:
sudo adduser bob
[sudo] password for john:
系统已添加用户 “bob”。
这将使用 sudo 创建新用户 “bob”。如果没有 sudo,普通用户通常无法添加用户。
su 命令可以切换到另一个用户账户,包括超级用户。必须提供目标用户的密码才能进行身份验证。这样就可以直接在另一个用户的环境中运行命令。
例子:
su bob
Password:
bob@linux:~$
输入 bob 的密码后,该命令会将当前用户切换为用户 “bob”。shell 提示符将反映新用户。
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!
这会立即重启系统,并向用户发出警告。
reboot 命令可重启 Linux 操作系统,注销所有用户并安全地重启系统。它会同步磁盘,并在重启前干净利落地关闭系统。
常见的 reboot
选项:
-n
: 在重开机前不做将记忆体资料写回硬盘的动作-w
: 并不会真的重开机,只是把记录写到 /var/log/wtmp 档案里-d
: 不把记录写到 /var/log/wtmp 档案里(-n 这个参数包含了 -d)-f
: 强迫重开机,不呼叫 shutdown 这个指令,即不经过正常的系统关闭流程,这可能导致尚未保存的数据丢失。-i
: 在重开机之前先把所有网络相关的装置先停止例子:
reboot
Restarting system.
reboot 是 shutdown -r 的简单替代方案。
执行关闭重启操作前请确保所有重要的工作已保存,并让系统处于安全状态。
systemctl 命令允许你管理 systemd 服务,如启动、停止、重启或重新加载它们。 systemd 是大多数现代 Linux 发行版使用的新启动系统,取代了 SysV init。
systemctl
有用的选项:
查看服务状态:使用 systemctl status [服务名]
命令可以查看特定服务的状态,包括是否正在运行、最后一次的活动日志等信息。如果不指定服务名,则会列出所有正在运行的服务的状态。
启动服务:使用 systemctl start [服务名]
命令可以启动特定的服务。如果服务已经在运行中,该命令不会产生任何影响。
停止服务:使用 systemctl stop [服务名]
命令可以停止特定的服务。如果服务已经停止,该命令不会产生任何影响。
重启服务:使用 systemctl restart [服务名]
命令可以重启特定的服务。如果服务未在运行,则此命令将启动该服务。
关闭服务:使用 systemctl disable [服务名]
命令可以禁用特定的服务,使其在系统启动时不会自动启动。
启用服务:使用 systemctl enable [服务名]
命令可以启用特定的服务,使其在系统启动时自动启动。
查看服务列表:使用 systemctl list-units
命令可以列出所有已经加载的服务和其状态信息。
查看详细信息:使用 systemctl show [服务名]
命令可以查看特定服务的详细信息,包括服务的参数、依赖关系等。
过滤服务列表:可以使用 systemctl list-units --type=[类型]
命令来过滤服务列表。例如,--type=service
将只显示服务类型的单元。
查看服务日志:使用 journalctl -u [服务名]
命令可以查看特定服务的日志信息。可以使用不同的选项来过滤和格式化日志输出。
查看启动日志:使用 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
:对单元的描述信息。它通常提供了关于该单元功能和用途的简要说明。
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 脚本涉及的参数如下:
[Unit]
部分:
Description=
:描述服务的文本信息。例如:Description=My Custom Service
。
Requires=
:指定服务所依赖的其他服务。格式为 Requires=
。如果被依赖的服务没有运行,那么当前服务将无法启动。
After=
:指定服务应在其他指定服务之后启动。格式为 After=
。
Wants=
:指定服务想要依赖的其他服务,但不会影响当前服务的启动。格式为 Wants=
。
Before=
:指定服务应在其他指定服务之前启动。格式为 Before=
。
[Service]
部分:
ExecStart=
:指定服务运行的主要命令或程序。例如:ExecStart=/usr/bin/my_service
。
Type=
:定义服务的类型。常见的类型包括 simple
(默认值,用于基本命令)、forking
(用于创建子进程的服务)和 oneshot
(仅执行一次命令或脚本)。
User=
和 Group=
:指定服务运行的用户和用户组。
WorkingDirectory=
:指定服务的工作目录。
Restart=
:指定当服务退出时的重启行为。常见选项包括 always
(总是重启)、on-failure
(仅在非零退出码时重启)和 no
(禁用重启)。
RestartSec=
:指定在重启服务之前等待的时间,单位为秒。
StandardOutput=
和 StandardError=
:指定服务的标准输出和错误输出的目标。可以将其设置为 inherit
、null
或其他文件。
[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 脚本可能需要根据您的特定需求进行自定义。了解每个选项的功能和限制非常重要,以确保正确设置和配置服务。