util-linux

最后更新: 2023-03-12 17:53:21 +0800 +0800
原文以英文撰写。您正在阅读AI翻译版本。

util-linux 是一个系统工具集合,由一个独立的上游项目维护。它为块设备、挂载、终端、会话、命名空间、资源控制和数据格式化提供接口。发行版可以将这些工具拆分到不同的软件包中,因此已安装的命令取决于软件包策略。

操作边界 #

修改分区、挂载、交换空间、设备状态、进程凭据或命名空间的命令需要适当的权限。修改状态前应先检查当前状态,使用 UUID 或 /dev/disk/by-id 等稳定属性识别设备,并确认目标未被挂载且未处于活动使用状态。

该项目涉及多个内核接口:

  • lsblk、blkid、blockdev、fdisk 和 wipefs 检查 sysfs、设备 节点、ioctl 以及磁盘上的签名;
  • mount、umount、findmnt 和 fsfreeze 操作 VFS 挂载 API 以及 /proc/self/mountinfo;
  • unshare、nsenter、setpriv、prlimit、taskset 和 chrt 配置 进程命名空间、凭据、资源限制、CPU 亲和性和调度器;
  • agetty、script、setterm 和 wall 操作终端和登录记录。

确切的命令集合取决于 util-linux 的构建配置和发行版打包方式。在依赖较新的选项之前,请使用 command --help、命令的 man 页面、发行版的软件包元数据,或单个命令的 --version 输出进行确认。

命令参考 #

命令用途
addpart将分区添加到内核可识别的磁盘表
agetty打开终端线路并启动登录
blkdiscard丢弃块设备上的扇区
blkid查找或打印块设备属性
blkpr管理块设备持久预留
blkzone管理分区块设备的区域
blockdev对块设备执行 ioctl 操作
cal显示日历
cfdisk交互式分区表编辑器
chcpu在架构支持时配置 CPU 状态
chfn更改用户的 finger 信息字段
chmem在架构支持时配置内存状态
choom显示或调整内存不足终止器分数
chrt检查或设置调度策略和优先级
chsh更改用户登录 shell
col过滤反向换行
colcrt过滤 nroff 重叠打印
colrm从行中删除选定的列
column将输入格式化为列或表格
ctrlaltdel设置 Ctrl-Alt-Del 的处理方式
delpart从内核中删除分区
dmesg打印或控制内核环形缓冲区
eject弹出或关闭可移动介质设备
enosys返回“系统调用未实现”错误
exch以原子方式交换两个文件
fadvise预先声明文件访问模式
fallocate分配文件空间
fdisk操作分区表
fincore统计文件中的缓存页
findfs按标签或 UUID 查找块设备
findmnt列出已挂载的文件系统
flock获取建议性文件锁
fsck检查并修复文件系统
fsck.cramfs检查 cramfs 文件系统
fsck.minix检查 Minix 文件系统
fsfreeze冻结或解冻文件系统
fstrim丢弃未使用的文件系统块
getopt在 shell 脚本中解析命令行选项
hardlink查找重复文件,或使用硬链接替换它们
hexdump以十六进制显示文件内容
hwclock查询或设置硬件时钟
i386以 i386 personality 运行程序
ionice获取或设置 I/O 调度优先级
ipcmk创建 System V IPC 对象
ipcrm删除 System V IPC 对象
ipcs显示 System V IPC 状态
irqtop显示中断使用情况
isosize报告 ISO-9660 镜像大小
kill向进程发送信号
last从 wtmp 显示登录历史
lastb从 btmp 显示登录失败历史
lastlog2查询或更新 lastlog2 数据库
ldattach将线路规程附加到串行设备
linux32以 32 位 personality 运行程序
linux64以 64 位 personality 运行程序
logger向系统日志写入消息
login开始用户登录会话
look显示以指定字符串开头的行
losetup管理回环设备
lsblk列出块设备
lsclocks列出可用时钟
lscpu显示 CPU 架构信息
lsfd列出打开的文件描述符
lsipc显示 System V IPC 信息
lsirq列出中断信息
lslocks列出本地系统锁
lslogins显示已知用户
lsmem列出内存范围
lsns列出命名空间
mcookie生成 magic cookie
mesg控制终端写入权限
mkfs创建文件系统
mkfs.bfs创建 SCO BFS 文件系统
mkfs.cramfs创建压缩 ROM 文件系统
mkfs.minix创建 Minix 文件系统
mkswap创建交换空间
more分页显示文本
mount挂载文件系统
mountpoint测试路径是否为挂载点
namei解析路径组件
newgrp使用不同的组启动 shell
nologin拒绝交互式登录
nsenter在现有命名空间中运行程序
partx将磁盘分区信息告知内核
pg分页显示文本
pipesz检查或设置管道缓冲区大小
pivot_root更改根文件系统
prlimit获取或设置进程资源限制
readprofile读取内核性能分析信息
rename使用替换规则重命名文件
renice更改进程调度优先级
resizepart调整分区条目大小
rev反转每一行中的字符
rfkill查询或更改无线设备状态
rtcwake使用 RTC 唤醒闹钟进入挂起状态
runuser以其他用户身份运行命令
script记录子 shell 终端会话
scriptlive流式传输已记录的终端会话
scriptreplay重放已记录的终端会话
setarch更改执行 personality
setpgid设置进程组标识符
setpriv使用选定的权限运行程序
setsid在新会话中运行程序
setterm控制终端属性
sfdisk可脚本化的分区表编辑器
su以其他用户身份运行 shell
sulogin单用户模式登录
swaplabel打印或更改交换空间标签
swapoff禁用交换设备或文件
swapon启用交换设备或文件
switch_root切换到新的根文件系统
taskset获取或设置 CPU 亲和性
tunelp设置并行端口打印机参数
uclampset获取或设置利用率钳制
ul使用退格符为文本添加下划线
umount卸载已挂载的文件系统
uname26以 Linux 2.6 personality 运行程序
unshare在新命名空间中运行程序
utmpdump转储 utmp 或 wtmp 记录
uuidd运行 UUID 生成守护进程
uuidgen生成 UUID
uuidparse解析并打印 UUID
vigr安全地编辑 group 或 gshadow
vipw安全地编辑 passwd 或 shadow
waitpid等待子进程
wall向已登录用户写入消息
wdctl显示看门狗设备状态
whereis查找二进制文件、源文件和手册文件
wipefs擦除文件系统或分区签名
write向另一个终端发送消息
x86_64以 x86-64 personality 运行程序
zramctl设置压缩 RAM 块设备

常见工作流 #

lsblk --fs、blkid、findmnt 和 mountpoint 可以在不修改存储的情况下检查存储状态:

sh
lsblk --json --output NAME,PATH,SIZE,FSTYPE,UUID,MOUNTPOINTS
findmnt --json --output SOURCE,TARGET,FSTYPE,OPTIONS
blkid --probe --usages filesystem /dev/disk/by-id/example

由于 util-linux 会不断添加信息,默认输出会发生变化,因此应在脚本中指定列。在支持的情况下,优先使用 --json、--pairs 或 --raw;解析面向人类的诊断信息时,应设置 LC_ALL=C。不要将对齐后的默认表格解析为稳定接口。

fdisk、cfdisk 和 sfdisk 会修改分区表。使用 sfdisk --dump 保存当前布局,并在写入前通过大小、型号、序列号和稳定路径验证设备。预期的分区表发生更改后,partx 会请求内核添加或删除分区映射;它不会编辑磁盘上的分区表。mkswap 准备交换空间,之后由 swapon 启用,由 swapoff 禁用。

unshare、nsenter、setpriv、runuser、setarch 和 taskset 会影响执行上下文。更改命名空间或 CPU 亲和性不会授予权限;进程能够执行的操作仍由 capabilities、用户映射和 cgroup 策略决定。

sh
unshare --user --map-root-user --mount-proc sh
nsenter --target "$pid" --mount --uts --ipc --net --pid
script --log-out session.typescript --log-timing session.timing

nsenter 会加入现有进程所使用的指定命名空间,因此需要有权限检查并进入这些命名空间。非特权用户命名空间中 unshare 的可用性由内核和本地安全策略控制。

script、scriptreplay 和 scriptlive 可以捕获终端会话。记录的输入可能包含凭据或其他机密信息,因此文件需要采用与其内容相适应的访问控制。

评论

在 GitHub 上阅读或评论(发表评论需要登录)