linux命令s---systemd

查看启动耗时

systemd-analyze用于查看启动耗时

# 查看启动耗时
$ systemd-analyze                                                                                       

# 查看每个服务的启动耗时
$ systemd-analyze blame

# 显示瀑布状的启动过程流
$ systemd-analyze critical-chain

# 显示指定服务的启动流
$ systemd-analyze critical-chain atd.service

查看进程状态

# 显示系统状态
$ systemctl status

# 显示单个 Unit 的状态
$ sysystemctl status bluetooth.service

# 显示远程主机的某个 Unit 的状态
$ systemctl -H root@rhel7.example.com status httpd.service

# 显示某个 Unit 是否正在运行
$ systemctl is-active application.service

# 显示某个 Unit 是否处于启动失败状态
$ systemctl is-failed application.service

# 显示某个 Unit 服务是否建立了启动链接
$ systemctl is-enabled application.service

管理一个进程

# 立即启动一个服务
$ sudo systemctl start apache.service

# 立即停止一个服务
$ sudo systemctl stop apache.service

# 重启一个服务
$ sudo systemctl restart apache.service

# 杀死一个服务的所有子进程
$ sudo systemctl kill apache.service

# 重新加载一个服务的配置文件
$ sudo systemctl reload apache.service

# 重载所有修改过的配置文件
$ sudo systemctl daemon-reload

# 显示某个 Unit 的所有底层参数
$ systemctl show httpd.service

# 显示某个 Unit 的指定属性的值
$ systemctl show -p CPUShares httpd.service

# 设置某个 Unit 的指定属性
$ sudo systemctl set-property httpd.service CPUShares=500

Unit的配置文件

1、概述

每一个 Unit 都有一个配置文件,告诉 Systemd 怎么启动这个 Unit 。
Systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/,真正的配置文件存放在那个目录。
systemctl enable命令用于在上面两个目录之间,建立符号链接关系。

$ sudo systemctl enable clamd@scan.service
# 等同于
$ sudo ln -s '/usr/lib/systemd/system/clamd@scan.service' '/etc/systemd/system/multi-user.target.wants/clamd@scan.service'

如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。
与之对应的,systemctl disable命令用于在两个目录之间,撤销符号链接关系,相当于撤销开机启动

$ sudo systemctl disable clamd@scan.service

配置文件的后缀名,就是该 Unit 的种类,比如sshd.socket。如果省略,Systemd 默认后缀名为.service,所以sshd会被理解成sshd.service。

2、配置文件的状态

systemctl list-unit-files命令用于列出所有配置文件

# 列出所有配置文件
$ systemctl list-unit-files

# 列出指定类型的配置文件
$ systemctl list-unit-files --type=service

这个命令会输出一个列表。

$ systemctl list-unit-files

UNIT FILE              STATE
chronyd.service        enabled
clamd@.service         static
clamd@scan.service     disabled

这个列表显示每个配置文件的状态,一共有四种。

enabled:已建立启动链接
disabled:没建立启动链接
static:该配置文件没有[Install]部分(无法执行),只能作为其他配置文件的依赖
masked:该配置文件被禁止建立启动链接

注意,从配置文件的状态无法看出,该 Unit 是否正在运行。这必须执行前面提到的systemctl status命令

$ systemctl status bluetooth.service

一旦修改配置文件,就要让 SystemD 重新加载配置文件,然后重新启动,否则修改不会生效

$ sudo systemctl daemon-reload
$ sudo systemctl restart httpd.service
3、配置文件的格式

配置文件就是普通的文本文件,可以用文本编辑器打开
systemctl cat命令可以查看配置文件的内容

$ systemctl cat atd.service

[Unit]
Description=ATD daemon

[Service]
Type=forking
ExecStart=/usr/bin/atd

[Install]
WantedBy=multi-user.target

从上面的输出可以看到,配置文件分成几个区块。每个区块的第一行,是用方括号表示的区别名,比如[Unit]。注意,配置文件的区块名和字段名,都是大小写敏感的。
每个区块内部是一些等号连接的键值对

[Section]
Directive1=value
Directive2=value

注意,键值对的等号两侧不能有空格

4、配置文件的区块

[Unit]区块通常是配置文件的第一个区块,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系。它的主要字段如下

Description:简短描述
Documentation:文档地址
Requires:当前 Unit 依赖的其他 Unit,如果它们没有运行,当前 Unit 会启动失败
Wants:与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败
BindsTo:与Requires类似,它指定的 Unit 如果退出,会导致当前 Unit 停止运行
Before:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之后启动
After:如果该字段指定的 Unit 也要启动,那么必须在当前 Unit 之前启动
Conflicts:这里指定的 Unit 不能与当前 Unit 同时运行
Condition...&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 系统中,`ls -l` 命令可以列出指定目录下的文件以及文件的详细信息,包括文件权限、文件类型、文件所有者、文件大小、修改时间等。下面我们来仿写一个类似的 Python 脚本,实现在 Linux 系统下使用 Python 命令行执行类似 `python my_ls.py /path/to/dir` 命令,输出指定目录下的文件以及文件的详细信息。 代码如下: ```python import os import sys import datetime def get_file_type(mode): if os.path.isdir(mode): return 'd' elif os.path.islink(mode): return 'l' elif os.path.isfifo(mode): return 'p' elif os.path.ischr(mode): return 'c' elif os.path.isblk(mode): return 'b' elif os.path.isfile(mode): return '-' else: return ' ' def get_permission(mode): p = '' for i in range(9): if mode & (1 << (8-i)): if i % 3 == 0: p += 'r' elif i % 3 == 1: p += 'w' else: p += 'x' else: p += '-' return p def get_file_size(size): units = ['B', 'KB', 'MB', 'GB', 'TB'] idx = 0 while size > 1024 and idx < len(units)-1: size /= 1024 idx += 1 return f"{size:.1f}{units[idx]}" def list_files(path): for root, dirs, files in os.walk(path): for name in files: file_path = os.path.join(root, name) stat = os.stat(file_path) mode = stat.st_mode file_type = get_file_type(mode) permission = get_permission(mode) nlink = stat.st_nlink user = os.getpwuid(stat.st_uid).pw_name group = os.getgrgid(stat.st_gid).gr_name size = get_file_size(stat.st_size) mtime = datetime.datetime.fromtimestamp(stat.st_mtime).strftime('%Y-%m-%d %H:%M:%S') print(f"{file_type}{permission} {nlink:>2} {user:<10} {group:<10} {size:>6} {mtime} {name}") if __name__ == '__main__': if len(sys.argv) != 2: print("Usage: python my_ls.py <path>") sys.exit(1) path = sys.argv[1] if not os.path.exists(path): print(f"{path} does not exist") sys.exit(1) list_files(path) ``` 代码解释: - `get_file_type(mode)`:根据文件的 `mode` 属性获取文件类型,返回类型的简写字符。如果不是已知类型,则返回空格。 - `get_permission(mode)`:根据文件的 `mode` 属性获取文件的权限,返回如 `-rw-r--r--` 的字符串。 - `get_file_size(size)`:将文件大小转换成合适的单位,返回如 `1.2KB` 的字符串。 - `list_files(path)`:遍历指定目录下的所有文件,输出文件信息。其中,使用 `os.stat` 函数获取文件的详细信息,然后根据需求使用上述函数获取需要的信息。 运行示例: ``` $ python my_ls.py /home/ drwxr-xr-x 26 root root 4.0K 2021-06-27 14:25:18 root drwxr-xr-x 3 bin bin 4.0K 2021-06-27 14:24:45 bin drwxr-xr-x 3 daemon daemon 4.0K 2021-06-27 14:24:45 daemon drwxr-xr-x 3 messagebus messagebus 4.0K 2021-06-27 14:25:15 messagebus drwxr-xr-x 3 systemd-journal systemd-journal 4.0K 2021-06-27 14:24:45 systemd-journal drwxr-xr-x 2 nobody nogroup 4.0K 2021-06-27 14:24:43 nobody drwxr-xr-x 3 syslog syslog 4.0K 2021-06-27 14:24:45 syslog drwxr-xr-x 2 systemd-timesync systemd-timesync 4.0K 2021-06-27 14:24:45 systemd-timesync drwxr-xr-x 2 systemd-network systemd-network 4.0K 2021-06-27 14:24:45 systemd-network drwxr-xr-x 2 polkitd polkitd 4.0K 2021-06-27 14:25:15 polkitd drwxr-xr-x 2 sshd sshd 4.0K 2021-06-27 14:25:15 sshd drwxr-xr-x 2 systemd-resolve systemd-resolve 4.0K 2021-06-27 14:24:45 systemd-resolve drwxr-xr-x 2 lp lp 4.0K 2021-06-27 14:25:15 lp drwxr-xr-x 2 avahi avahi 4.0K 2021-06-27 14:24:45 avahi drwxr-xr-x 2 colord colord 4.0K 2021-06-27 14:25:15 colord drwxr-xr-x 2 usbmux usbmux 4.0K 2021-06-27 14:25:15 usbmux drwxr-xr-x 2 lightdm lightdm 4.0K 2021-06-27 14:25:15 lightdm drwxr-xr-x 2 gdm gdm 4.0K 2021-06-27 14:24:45 gdm drwxr-xr-x 2 rtkit rtkit 4.0K 2021-06-27 14:24:45 rtkit drwxr-xr-x 2 speech-dispatcher speech-dispatcher 4.0K 2021-06-27 14:24:45 speech-dispatcher drwxr-xr-x 2 ntp ntp 4.0K 2021-06-27 14:24:45 ntp drwxr-xr-x 2 statd statd 4.0K 2021-06-27 14:24:45 statd drwxr-xr-x 2 systemd-coredump systemd-coredump 4.0K 2021-06-27 14:24:45 systemd-coredump drwxr-xr-x 2 kernoops kernoops 4.0K 2021-06-27 14:24:45 kernoops drwxr-xr-x 2 uuidd uuidd 4.0K 2021-06-27 14:24:45 uuidd drwxr-xr-x 2 tss tss 4.0K 2021-06-27 14:24:45 tss ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值