命令与脚本:文件、目录与磁盘 · 检查容量、配额与存储池至复制到远端、同步与分享
检查容量、配额与存储池
文件系统可用空间看 df/duf,目录占用看 du,用户限额看 quota;ZFS 的文件系统和存储池分别由 zfs、zpool 管理。
df · 显示文件系统磁盘空间使用情况的概览
- 显示文件系统及其磁盘使用量;默认块单位依实现和环境而异,需固定为 KiB 时用 -k:
bash
df- 显示包含指定文件或目录的文件系统及其磁盘使用情况:
bash
df {{路径/到/文件或目录}}- 写出空间数据时使用 1024 字节为单位:
bash
df -k- 以可移植的方式显示信息:
bash
df -Pduf · 磁盘占用/空闲实用工具
另请参阅:
ncdu,df。 更多信息:https://github.com/muesli/duf#usage。
- 列出可访问设备:
bash
duf- 列出所有(如伪文件系统,重复文件系统或不可访问的文件系统):
bash
duf --all- 只显示指定的设备或挂载点:
bash
duf {{路径/到/文件夹1 路径/到/文件夹2 ...}}- 根据指定条件排序输出:
bash
duf --sort {{size|used|avail|usage}}- 显示或隐藏指定文件系统:
bash
duf --{{only-fs|hide-fs}} {{tmpfs|vfat|ext4|xfs}}- 根据键排序输出:
bash
duf --sort {{mountpoint|size|used|avail|usage|inodes|inodes_used|inodes_avail|inodes_usage|type|filesystem}}- 更改主题(如果
duf未能使用正确的主题):
bash
duf --theme {{dark|light}}du · 磁盘使用率:估计和汇总文件和目录空间使用率
更多信息:https://www.gnu.org/software/coreutils/manual/html_node/du-invocation.html。
- 以给定单位(B/KiB/MiB)列出目录和所有子目录的大小:
bash
du -{{b|k|m}} {{路径/到/目录}}- 以可读形式列出目录和任何子目录的大小(即自动转换为的合适的单位):
bash
du {{[-h|--human-readable]}} {{路径/到/目录}}- 以可读单位显示目录大小:
bash
du {{[-sh|--summarize --human-readable]}} {{路径/到/目录}}- 列出目录以及其中所有文件和目录的可读大小:
bash
du {{[-ah|--all --human-readable]}} {{路径/到/目录}}- 列出目录和任何子目录的可读大小,最多可达 N 级:
bash
du {{[-h|--human-readable]}} {{[-d|--max-depth]}} N {{路径/到/目录}}- 列出当前目录中所有
.jpg文件的可读大小,并在最后显示累计总数:
bash
du {{[-ch|--total --human-readable]}} {{./*.jpg}}- 列出超过特定大小的所有文件和目录(包括隐藏的文件和目录)(对于查询实际占用空间很有用):
bash
du {{[-ah|--all --human-readable]}} {{[-t|--threshold]}} {{1G|1024M|1048576K}} .[^.]* *quota · 显示用户的磁盘空间使用情况和分配限制
更多信息:https://manned.org/quota。
- 以人类可读的单位显示当前用户的磁盘配额:
bash
quota {{[-s|--human-readable]}}- 详细输出(同时显示未分配存储的文件系统上的配额):
bash
quota {{[-v|--verbose]}}- 安静输出(仅显示使用超过配额的文件系统上的配额):
bash
quota {{[-q|--quiet]}}- 打印当前用户所属组的配额:
bash
quota {{[-g|--group]}}- 显示其他用户的磁盘配额:
bash
sudo quota {{[-u|--user]}} {{用户名}}zpool · 管理 ZFS 池
更多信息:https://manned.org/zpool。
- 显示所有 ZFS 池的配置和状态:
bash
zpool status- 检查 ZFS 池是否有错误(验证每个块的校验和)。非常消耗 CPU 和磁盘资源:
bash
zpool scrub {{池名称}}- 列出可导入的 ZFS 池:
bash
zpool import- 导入一个 ZFS 池:
bash
zpool import {{池名称}}- 导出一个 ZFS 池(卸载所有文件系统):
bash
zpool export {{池名称}}- 显示所有池操作的历史记录:
bash
zpool history {{池名称}}- 创建一个镜像池:
bash
zpool create {{池名称}} mirror {{磁盘1}} {{磁盘2}} mirror {{磁盘3}} {{磁盘4}}- 向 ZFS 池添加一个缓存(L2ARC)设备:
bash
zpool add {{池名称}} cache {{缓存磁盘}}zfs · 管理 ZFS 文件系统
更多信息:https://manned.org/zfs。
- 列出所有可用的 ZFS 文件系统:
bash
zfs list- 创建一个新的 ZFS 文件系统:
bash
zfs create {{存储池名称/文件系统名称}}- 删除一个 ZFS 文件系统:
bash
zfs destroy {{存储池名称/文件系统名称}}- 创建一个 ZFS 文件系统的快照:
bash
zfs snapshot {{存储池名称/文件系统名称}}@{{快照名称}}- 在文件系统上启用压缩:
bash
zfs set compression=on {{存储池名称/文件系统名称}}- 更改文件系统的挂载点:
bash
zfs set mountpoint=/{{我的/挂载/路径}} {{存储池名称/文件系统名称}}修改权限与默认权限掩码
已有文件的访问权限由 chmod 管理,所有者由 chown 管理;新文件的默认权限掩码见 umask。
chmod · 修改文件或目录的访问权限
更多信息:https://www.gnu.org/software/coreutils/manual/html_node/chmod-invocation.html。
- 授予所有者[u]执行[x]文件的权限:
bash
chmod u+x {{文件}}- 授予所有者[u]读[r]和写[w]文件或目录的权限:
bash
chmod u+rw {{文件或目录}}- 移除用户组[g]的文件执行[x]权限:
bash
chmod g-x {{文件}}- 授予所有用户[a]读[r]以及执行[x]文件的权限:
bash
chmod a+rx {{文件}}- 授予其他用户[o](不在所有者用户组)和用户组[g]同样的权限:
bash
chmod o=g {{文件}}- 移除其他用户[o]的所有权限:
bash
chmod o= {{文件}}- 递归授予用户组[g]和其他用户[o]目录下所有文件和子目录的写[w]权限:
bash
chmod {{[-R|--recursive]}} g+w,o+w {{目录}}- 递归授予所有用户读权限;X 为目录及已有任一执行位的文件增加执行权限:
bash
chmod {{[-R|--recursive]}} a+rX {{目录}}chown · 修改用户和用户组对文件或目录的所有权
另请参阅:
chgrp。 更多信息:https://www.gnu.org/software/coreutils/manual/html_node/chown-invocation.html。
- 修改文件或目录的所有者:
bash
chown {{用户}} {{路径/到/文件或目录}}- 修改文件或目录的所有者及所属组:
bash
chown {{用户}}:{{用户组}} {{路径/到/文件或目录}}- 将所有者更改为 user,组更改为该用户的登录组(不一定同名):
bash
chown {{user}}: {{路径/到/文件_或_目录}}- 递归修改目录及其子目录和文件的所有者:
bash
chown {{[-R|--recursive]}} {{用户}} {{路径/到/目录}}- 修改符号链接的所有者:
bash
chown {{[-h|--no-dereference]}} {{用户}} {{路径/到/符号链接}}- 修改文件或目录的所有者与参考文件相同:
bash
chown --reference {{路径/到/参考文件}} {{路径/到/文件或目录}}umask · 管理用户为新创建文件设置的读/写/执行权限掩码(即被限制的权限)
更多信息:https://www.gnu.org/software/bash/manual/bash.html#index-umask。
- 显示当前掩码(八进制表示):
bash
umask- 以符号方式(人类可读格式)显示当前掩码:
bash
umask -S- 符号化更改掩码以允许所有用户的读取权限(掩码的其他部分保持不变):
bash
umask {{a+r}}- 设置掩码(使用八进制)以对文件的所有者不限制任何权限,对其他所有人限制所有权限:
bash
umask {{077}}复制到远端、同步与分享
单次远端复制见 scp,多存储后端见 rclone,双向同步见 unison;临时分享见 ffsend。
scp · 安全的复制文件
通过 SSH 连接传输文件;当前 OpenSSH scp 默认使用 SFTP,旧 SCP 协议模式须单独选择。 更多信息:https://man.openbsd.org/scp。
- 将本地文件复制到远程主机:
bash
scp {{路径/到/本地文件}} {{远程主机地址}}:{{路径/到/远程文件}}- 连接到远程主机时使用特定端口:
bash
scp -P {{端口}} {{路径/到/本地文件}} {{远程主机地址}}:{{路径/到/远程文件}}- 将文件从远程主机复制到本地目录:
bash
scp {{远程主机地址}}:{{路径/到/远程文件}} {{路径/到/本地目录}}- 递归地将目录内容从远程主机复制到本地目录:
bash
scp -r {{远程主机地址}}:{{路径/到/远程目录}} {{路径/到/本地目录}}- 通过本地主机在两个远程主机之间复制文件:
bash
scp -3 {{主机地址1}}:{{路径/到/远程文件}} {{主机地址2}}:{{路径/到/远程目录}}- 连接到远程主机时使用特定用户名:
bash
scp {{路径/到/本地文件}} {{远程主机用户名}}@{{远程主机地址}}:{{路径/到/远程目录}}- 使用特定 SSH 私钥与远程主机进行身份验证:
bash
scp -i {{~/.ssh/私钥文件}} {{路径/到/本地文件}} {{远程主机地址}}:{{路径/到/远程文件}}- 连接到远程主机时使用特定代理:
bash
scp -J {{代理用户名}}@{{代理主机地址}} {{路径/到/本地文件}} {{远程主机地址}}:{{路径/到/远程文件}}rclone · 在本地与多种云服务之间复制、同步或移动文件和目录
- 启动交互式菜单来配置 rclone:
bash
rclone config- 列出 rclone 远程目录的内容:
bash
rclone lsf {{远程名}}:{{路径/到/目录}}- 将文件或目录从本地计算机复制到远程目标:
bash
rclone copy {{路径/到/本地文件或目录}} {{远程名}}:{{路径/到/目录}}- 将过去 24 小时内修改过的文件从远程复制到本地,并向用户逐个文件确认:
bash
rclone copy {{[-i|--interactive]}} --max-age 24h {{远程名}}:{{路径/到/目录}} {{路径/到/本地目录}}- 镜像特定的文件或目录(注意:与 copy 不同,sync 会将远程中本地不存在的文件删除):
bash
rclone sync {{路径/到/文件或目录}} {{远程名}}:{{路径/到/目录}}- 删除远程文件或目录(注意:
--dry-run表示测试,从命令中移除它才会实际删除):
bash
rclone {{[-n|--dry-run]}} delete {{远程名}}:{{路径/到/文件或目录}}- 挂载 rclone 远程目录(实验性功能):
bash
rclone mount {{远程名}}:{{路径/到/目录}} {{路径/到/挂载点}}- 如果
<Ctrl c>失败,卸载 rclone 远程目录(实验性功能):
bash
fusermount -u {{路径/到/挂载点}}unison · 双向文件同步工具
- 同步两个目录(第一次同步这两个目录时会创建日志):
bash
unison {{路径/到/目录1}} {{路径/到/目录2}}- 自动接受(无冲突的)默认值:
bash
unison {{路径/到/目录1}} {{路径/到/目录2}} -auto- 使用模式忽略某些文件:
bash
unison {{路径/到/目录1}} {{路径/到/目录2}} -ignore {{模式}}- 查看文档:
bash
unison -doc {{主题}}ffsend · 轻松和安全地分享文件
- 上传文件:
bash
ffsend upload {{路径/到/文件}}- 下载文件:
bash
ffsend download {{url}}- 上传带有密码的文件:
bash
ffsend upload {{路径/到/文件}} {{[-p|--password]}} {{密码}}- 下载带有密码保护的文件:
bash
ffsend download {{url}} {{[-p|--password]}} {{密码}}- 上传文件并允许下载 4 次:
bash
ffsend upload {{路径/到/文件}} {{[-d|--downloads]}} {{4}}继续阅读
- 文件与文本处理完整实践与解答
- 文件与文本处理上手与对象
- 文件与文本处理任务与配置