Europa Asked: 2024-06-18 15:37:58 +0800 CST2024-06-18 15:37:58 +0800 CST 2024-06-18 15:37:58 +0800 CST 重新启动所有以字母“lc-”开头的 systemctl 服务 772 我想列出所有以字母lc-开头的服务。然后我想重新启动它们。 我该如何附加此内容?我在想类似的事情: systemctl -l | grep ?? | systemctl restart ??? command-line 2 个回答 Voted Best Answer slowcoder 2024-06-18T15:41:57+08:002024-06-18T15:41:57+08:00 您可以使用以下方式列出单元文件。 systemctl list-unit-files | grep -Eo '^lc-.*\.service' -E表示您将使用扩展的正则表达式。 -o意味着您只想要匹配的部分。 '^lc-.*\.service'是仅获取以“lc-”开头的服务的正则表达式。 然后要重新启动所有这些,您可以在命令中使用通配符 systemctl restart 'lc-*' kos 2024-06-18T17:02:57+08:002024-06-18T17:02:57+08:00 systemctl可以自行按单位类型和单位状态进行过滤,更不用说它可以将输出打印为 JSON 文件,这允许极其强大的解析,因此您只能将正在运行的服务打印为 JSON 文件: systemctl --type=service --state=running --output=json 过滤掉unit键值不以 开头的元素lc-,仅打印单位名称: jq -r '.[] | .unit | select(test("^lc-"))' 将输出传递给xargs -r+ sudo systemctl restart(如果未找到符合条件的正在运行的服务,则-r开关将阻止xargs运行;请注意,根据systemd 的规范,sudo systemctl restart有效的单元名称不能包含空格,因此直接将输出传输到是安全的):xargs -r xargs -r sudo systemctl restart 把所有内容放在一起: systemctl --type=service --state=running --output=json | jq -r '.[] | .unit | select(test("^lc-"))' | xargs -r sudo systemctl restart
您可以使用以下方式列出单元文件。
-E
表示您将使用扩展的正则表达式。-o
意味着您只想要匹配的部分。'^lc-.*\.service'
是仅获取以“lc-”开头的服务的正则表达式。然后要重新启动所有这些,您可以在命令中使用通配符
systemctl
可以自行按单位类型和单位状态进行过滤,更不用说它可以将输出打印为 JSON 文件,这允许极其强大的解析,因此您只能将正在运行的服务打印为 JSON 文件:过滤掉
unit
键值不以 开头的元素lc-
,仅打印单位名称:将输出传递给
xargs -r
+sudo systemctl restart
(如果未找到符合条件的正在运行的服务,则-r
开关将阻止xargs
运行;请注意,根据systemd 的规范,sudo systemctl restart
有效的单元名称不能包含空格,因此直接将输出传输到是安全的):xargs -r
把所有内容放在一起: