在 Linux(目前使用 ext4 文件系统)中,如何在不读取任何内容的情况下快速检查文件的内容是否已被修改?
该stat命令是推荐的方法吗?我目前做
$ stat --format "%Y" hello.txt
Run Code Online (Sandbox Code Playgroud)
稍后我可以检查相同的命令是否产生相同的输出。如果是这样,我的结论是 hello.txt 没有改变。
我的感觉是,人们想要投入更多参数以更加确定。例如,添加文件大小、文件名等是否会提供更好的文件“指纹”?
在这个话题上,我记得我曾经拥有的一个 TrueCrypt 卷总是被我的增量备份程序忽略,可能是因为 TrueCrypt 确保不会留下任何元数据更改。我想确实可以更改由 返回的所有数据stat,因此不能保证对文件的所有可能修改都进行修改?
设备文件本身不是文件。它们是在类 Unix 操作系统中使用设备的 I/O 接口。它们不使用磁盘空间,但是,它们仍然使用stat命令报告的 inode :
$ stat /dev/sda
File: /dev/sda
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 6h/6d Inode: 14628 Links: 1 Device type: 8,0
Run Code Online (Sandbox Code Playgroud)
设备文件是否使用文件系统中的物理inode 以及它们为什么需要它们?
我正在尝试对一些文档进行 OCR 原位(从 Windows 共享上的 linux 命令行)。OCRing 的过程是 find ,我已经使用 find 命令正确地通过循环管道传输文件。
但是我需要保留原始时间戳以进行修改。我目前正在尝试使用 stat 和 touch 如下:
#!/bin/bash
OLDIFS=$IFS
IFS=$(echo -en "\n\b")
for f in `find /mnt/library/Libra/Libra/Ashfords -name "*.pdf"`
do
ORIGTS=`stat -c "%Y" $f`
sudo /opt/ABBYYOCR9/abbyyocr9 -rl English -pi -if $f -f PDFA -paemImageOnText -pafpr original -of $f
touch -t $ORIGTS $f
done
IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)
当然 touch 命令失败了。单独运行命令我注意到“stat -c”是这样的:
1334758696
这就像我不知道的日期。我觉得我很接近,但无法弄清楚如何将我拥有的日期转换为触摸友好版本。它是某种形式的秒数吗?
我注意到当我做一个:
ls -ls file
Run Code Online (Sandbox Code Playgroud)
它提供块数,比如 8 个块。
当我做:
stat file
Run Code Online (Sandbox Code Playgroud)
我注意到块数是 16,是 ls 给出的数字的两倍。
我的文件系统上的块大小是 4096。我了解到 ls 使用的块的任意单位是 1024。说 stat 在报告块时使用 512 字节的任意单位是否正确?
如果是这样,是否有不一致的原因?
我在 ext4 文件系统上运行 Ubuntu 11.10。
我需要一种方法来更改已挂载的 FAT32 卷上文件的创建时间。我必须这样做,因为我的 MP3 播放器只会读取按此创建时间排序的文件。
如果我能找到一种方法来设置文件的文件创建时间(就像touch修改/访问时间一样),一个简单的脚本将允许以正确的顺序(如预期的,按字母顺序)读取 MP3 文件。
但是我还没有找到解决方案,我的搜索也没有白费。我希望你们能帮助我!
我总是假设/ ... 系统调用st_blocks返回的字段用于获取文件的磁盘使用情况以 512 字节为单位表示。stat()lstat()du
检查POSIX 规范,我现在看到 POSIX 对此没有做出保证。其自身功能的文档perlstat()也警告不要做出这种假设。
无论如何,正如 POSIX 所指示的,该块大小与st_blksize返回的字段无关stat(),因此必须在其他地方找到。
检查 GNUdu或 GNUfind源代码,我看到 HP/UX 使用 1024 字节单位的证据。GNUfind调整其-printf %b输出以始终提供多个 512 字节单位,这可能是我困惑的根源。
目前是否还有其他仍在使用的类 Unix 系统st_blocks不是以 512 字节为单位表示的?这可以依赖于文件系统吗(正如 POSIX 所建议的那样)?我想安装 HP/UX NFS 共享可以做到这一点。
stat输出文件的最后修改时间。
如何查看文件被修改的所有时间的列表?
例如,我想编辑一个文件 5 次,并查看 5 次修改次数。
在stat 8.13基于 Debian 的 Linux 上——除其他外——提供了以下 FORMAT 指令 ( --format=):
与--file-system( -f)组合:
%s 块大小(用于更快的传输) %S 基本块大小(用于块计数) 问题:究竟是什么意思?
我最好的猜测是%s,%S等于%b(以块为单位显示)和%B(显示块的大小),其中后者用于文件,前两个用于文件系统。那是对的吗?
注意:问题虽然说反之亦然,但它实际上没有任何意义,因为它们都指向同一个 inode,并且不可能说出哪个是头,哪个是尾。
假设我有一个文件 hlh.txt
[root@FREL ~]# fallocate -l 100 hlh.txt
Run Code Online (Sandbox Code Playgroud)
现在如果我看到 hlh.txt 的更改时间
[root@FREL ~]# stat hlh.txt
File: hlh.txt
Size: 100 Blocks: 8 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 994 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-01-11 01:43:05.469703330 -0500
Modify: 2023-01-11 01:43:05.469703330 -0500
Change: 2023-01-11 01:43:05.469703330 -0500
Birth: 2023-01-11 01:43:05.469703330 -0500
Run Code Online (Sandbox Code Playgroud)
创建硬链接
[root@FREL ~]# ln hlh.txt hlt.txt
Run Code Online (Sandbox Code Playgroud)
由于hlh.txt和hlt.txt都指向相同的inode,因此更改时间将是可以理解的硬链接尾文件的ctime。
[root@FREL ~]# stat hlt.txt
File: hlt.txt
Size: 100 Blocks: 8 IO …Run Code Online (Sandbox Code Playgroud)