例如,在 FreeBSD 和 ZoL 下的 ZFS 中.zfs
,每个 zpool 挂载点内部都有一个魔法目录,您可以使用zfs set snapdir=visible
该.zfs
目录使该目录可见。
让我好奇的是:如果该设置设置为“隐藏”,那么.zfs
目录实际上如何从ls -a
或 shell 路径自动完成的输出中隐藏,同时仍然可以访问(您仍然可以访问cd
它或调用stat
它)?
我无法真正理解这个事实,因为我不知何故认为如果某些东西存在并且可以访问它应该被列出ls -a
- 即使它本质上只是魔法/虚拟。
任何人都可以解释这是如何工作的吗?是否有符合 POSIX 标准的方式来拥有一个隐藏ls -a
但仍可访问的目录?你怎么做呢?
我经常发现自己需要检查文件的编码和换行符类型。
该file
实用程序似乎非常合适。不幸的是,它不会为所有文件类型输出所需的信息。例如,它不会对.php
文件这样做。
例如:
file extra.module.php
Run Code Online (Sandbox Code Playgroud)
extra.module.php:PHP 脚本文本
但是,如果我将文件重命名为.txt
并删除 PHP 起始标记,它会同时输出两者。
file extra.module.txt
Run Code Online (Sandbox Code Playgroud)
extra.module.txt:UTF-8 Unicode C++ 程序文本,带有 CRLF 行终止符
我已经看过手册页,我可以使用-i
开关强制输出字符编码,但似乎没有换行符类型的开关。
是否有一个简单的解决方案,而无需先重命名/更改文件?
因此,我在基于 zfs 的备份服务器上空间不足,并删除了一些旧备份,但文件系统上的空间随后并未释放。
第一个猜测?周围一定还残留着一些旧的快照。所以我跑了:
zfs list -t snapshot | grep "pool/backups@"
Run Code Online (Sandbox Code Playgroud)
确实有一些:
NAME USED AVAIL MOUNTPOINT
pool/backups@auto-20140118.1656-5y 4.81M 0 0
pool/backups@auto-20140120.0900-5y 270K 0 0
pool/backups@auto-20140121.0901-5y 270K 0 0
pool/backups@auto-20140122.0902-5y 270K 0 0
pool/backups@auto-20140123.0903-5y 270K 0 0
pool/backups@auto-20140124.0904-5y 270K 0 0
pool/backups@auto-20140125.0905-5y 270K 0 0
pool/backups@auto-20140126.0906-5y 270K 0 0
Run Code Online (Sandbox Code Playgroud)
但是,虽然我本希望看到USED
我刚刚删除的大小约为 400G 的快照,但根本没有任何大小值得注意的快照。
我确实花了几个小时试图在其他地方找到问题,当我最终运行时:
zfs destroy -nv pool/backups@
Run Code Online (Sandbox Code Playgroud)
令人惊讶的输出是:
will destroy pool/backups@auto-20140118.1656-5y
will destroy pool/backups@auto-20140120.0900-5y
will destroy pool/backups@auto-20140121.0901-5y
will destroy pool/backups@auto-20140122.0902-5y
will destroy pool/backups@auto-20140123.0903-5y
will destroy pool/backups@auto-20140124.0904-5y
will destroy pool/backups@auto-20140125.0905-5y …
Run Code Online (Sandbox Code Playgroud)