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 可以在不修改存储的情况下检查存储状态:
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 策略决定。
unshare --user --map-root-user --mount-proc sh
nsenter --target "$pid" --mount --uts --ipc --net --pid
script --log-out session.typescript --log-timing session.timingnsenter 会加入现有进程所使用的指定命名空间,因此需要有权限检查并进入这些命名空间。非特权用户命名空间中 unshare 的可用性由内核和本地安全策略控制。
script、scriptreplay 和 scriptlive 可以捕获终端会话。记录的输入可能包含凭据或其他机密信息,因此文件需要采用与其内容相适应的访问控制。
评论
在 GitHub 上阅读或评论(发表评论需要登录)