Git是Linux下最常用的版本控制工具,可精准跟踪文件的每一次修改(包括内容变更、重命名等)。
git log --follow -- <filename>。--follow参数用于跟踪文件的重命名历史,<filename>替换为目标文件名,输出结果包含提交哈希、作者、日期及提交信息。git show <commit_hash>:<filename>,其中<commit_hash>是git log输出的提交ID,<filename>为目标文件名。若文件未纳入版本控制,可通过find命令定位文件,并用stat命令查看其修改时间戳。
find /path/to/search -name "<filename>" -exec stat --format="%y %n" {} \; | sort。/path/to/search是文件所在目录(如/home/user),<filename>是目标文件名;stat --format="%y %n"会输出文件的最后修改时间(%y)和文件名(%n),sort用于按时间排序。stat <filename>,输出结果包含访问时间(atime)、修改时间(mtime)、状态变更时间(ctime)等详细信息。ls命令的-l选项可显示文件的最后修改时间(mtime),适合快速查看。
ls -l <filename>,输出结果中第6-9列为修改时间(如Oct 10 14:30)。ls -lt <filename>,-t参数会将文件按修改时间从新到旧排序;若需按访问时间(atime)排序,可添加--time=atime,如ls -lt --time=atime <filename>。若需查看自己在终端中对文件的命令操作历史(如修改、删除、移动等),可使用history命令结合grep过滤。
history | grep <filename>,<filename>为目标文件名,输出结果会显示所有包含该文件名的命令(如vim file.txt、rm file.txt)。inotifywait是inotify-tools包中的工具,可实时监控文件的修改事件(如内容变更、属性修改),适合需要即时跟踪的场景。
sudo apt-get install inotify-tools,CentOS/RHEL系统执行sudo yum install inotify-tools。inotifywait -m /path/to/file -e modify。-m参数表示持续监控,-e modify表示监控“文件内容修改”事件(还可监控attrib(属性修改)、delete(删除)等事件),输出结果会显示文件的修改时间和路径。auditd是Linux系统级的审计工具,可记录文件的访问、修改等系统调用,适合需要详细审计的场景(如安全合规)。
sudo apt-get install auditd audispd-plugins,CentOS/RHEL系统执行sudo yum install auditd。sudo auditctl -w /path/to/file -p wa -k file_changes。-w参数指定要监控的文件路径,-p wa表示监控“写入(write)”和“属性修改(attribute change)”事件,-k file_changes是为该规则自定义的关键字(便于后续查询)。ausearch -k file_changes,输出结果会显示与该文件相关的所有审计事件(包括事件时间、进程ID、操作类型等)。若文件有定期备份(如用rsync创建的快照),可通过rsync和diff命令比较不同备份版本的差异。
rsync -av --delete /path/to/source /path/to/backup/snapshot1(-a表示归档模式,-v表示详细输出,--delete表示删除目标目录中源目录不存在的文件)。diff -r /path/to/backup/snapshot1 /path/to/backup/snapshot2,-r参数表示递归比较目录,输出结果会显示两个备份中文件的差异(如新增、修改、删除的内容)。