systemctl VS sysctl VS service

平时用的高频的几个命令,具体区别不清楚,这次了解记录一下。

我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
LangChain编程从入门到实践

systemctl

systemd 是 Linux 系统工具,取代了 initd,成为系统的第一个进程(PID=1),其他进程都是它的子进程,用来启动守护进程。systemd 包含一组命令,涉及到系统管理的方方面面,而 systemctl 是 systemd 的主命令,用于管理系统。

1
2
3
4
5
6
7
8
9
10
11
$ systemctl [command] [unit]
command 主要有:
start :立刻启动后面接的 unit
stop :立刻关闭后面接的 unit
restart :立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思
reload :不关闭后面接的 unit 的情况下,重新载入配置文件,让设置生效
enable :设置下次开机时,后面接的 unit 会被启动
disable :设置下次开机时,后面接的 unit 不会被启动
status :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机默认执行否、登录等信息等!
is-active :目前有没有正在运行中
is-enable :开机时有没有默认要启用这个 unit

service

1
2
$ whereis service
service: /usr/sbin/service

service 是一个用来start/stop/reload各种服务的工具,不同 Linux 发行版可能使用不同的 init 系统管理工具,service 可以统一起来。打开这个文件,会发现其实它就是一个很普通的 shell 脚本,作用就是 A convenient wrapper for the /etc/init.d init scripts.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
44 VERSION="`basename $0` ver. 1.51"
45 USAGE="Usage: `basename $0` < option > | --status-all | \
46 [ service_name [ command | --full-restart ] ]"
47 SERVICE=
48 ACTION=
49 SERVICEDIR="/etc/init.d"
50 OPTIONS=
51 is_systemd=
52
53
54 if [ $# -eq 0 ]; then
55 echo "${USAGE}" >&2
56 exit 1
57 fi
......
132 run_via_sysvinit() {
133 # Otherwise, use the traditional sysvinit
134 if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
135 exec env -i LANG="$LANG" LANGUAGE="$LANGUAGE" LC_CTYPE="$LC_CTYPE" \
LC_NUMERIC="$LC_NUMERIC" LC_TIME="$LC_TIME" LC_COLLATE="$LC_COLLATE"
......
136 else
137 echo "${SERVICE}: unrecognized service" >&2
138 exit 1
139 fi
140 }

初始化执行环境变量,调用/etc/init.d/文件夹下的相应脚本(有些脚本需要我们自己编写),以service nginx start为例,将传参数 start 递给 nginx 脚本,实际上执行的就是 /etc/init.d/nginx start

sysctl

用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中,它包含一些 TCP/IP 网络栈和虚拟内存系统的高级选项,用 sysctl 可以读取设置500多个系统变量,注意对/proc/sys/net的任何修改在系统重启后都会丢失。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NAME
sysctl - configure kernel parameters at runtime

SYNOPSIS
sysctl [options] [variable[=value]] [...]
sysctl -p [file or regexp] [...]

DESCRIPTION
sysctl is used to modify kernel parameters at runtime. The parameters available
are those listed under /proc/sys/. Procfs is required for sysctl support in
Linux. You can use sysctl to both read and write sysctl data.
...
FILES
/proc/sys
/etc/sysctl.conf
...

比如开启网络转发功能:

1
2
$ sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
作者

莫尔索

发布于

2020-11-02

更新于

2024-05-19

许可协议

评论