Skip to content
← 返回文件与文本处理列表
文件与文本处理任务与配置

命令与脚本:文件、目录与磁盘 · 检查容量、配额与存储池至复制到远端、同步与分享 ​

返回分篇目录

检查容量、配额与存储池 ​

文件系统可用空间看 df/duf,目录占用看 du,用户限额看 quota;ZFS 的文件系统和存储池分别由 zfs、zpool 管理。

df · 显示文件系统磁盘空间使用情况的概览 ​

更多信息:https://manned.org/df.1posix。

  • 显示文件系统及其磁盘使用量;默认块单位依实现和环境而异,需固定为 KiB 时用 -k:
bash
df
  • 显示包含指定文件或目录的文件系统及其磁盘使用情况:
bash
df {{路径/到/文件或目录}}
  • 写出空间数据时使用 1024 字节为单位:
bash
df -k
  • 以可移植的方式显示信息:
bash
df -P

duf · 磁盘占用/空闲实用工具 ​

另请参阅: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 · 在本地与多种云服务之间复制、同步或移动文件和目录 ​

更多信息:https://rclone.org/commands/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 · 双向文件同步工具 ​

更多信息:https://github.com/bcpierce00/unison。

  • 同步两个目录(第一次同步这两个目录时会创建日志):
bash
unison {{路径/到/目录1}} {{路径/到/目录2}}
  • 自动接受(无冲突的)默认值:
bash
unison {{路径/到/目录1}} {{路径/到/目录2}} -auto
  • 使用模式忽略某些文件:
bash
unison {{路径/到/目录1}} {{路径/到/目录2}} -ignore {{模式}}
  • 查看文档:
bash
unison -doc {{主题}}

ffsend · 轻松和安全地分享文件 ​

更多信息:https://gitlab.com/timvisee/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}}

继续阅读