在Ubuntu中,inotify
是一个Linux内核子系统,它可以实时监控文件系统事件,如文件创建、修改和删除等。要使用inotify
检测文件删除,你可以使用inotifywait
命令或者编写一个使用inotify
API的程序。
方法1:使用inotifywait
命令
inotify-tools
包。如果没有,请运行以下命令安装:sudo apt-get update
sudo apt-get install inotify-tools
inotifywait
命令监控文件删除事件。以下是一个示例命令,它将监控当前目录下的文件删除事件:inotifywait -m -e delete --format '%w%f' .
参数说明:
-m
:监控模式,持续监控而不是等待退出。-e delete
:指定要监控的事件类型,这里是文件删除。--format '%w%f'
:自定义输出格式,这里输出被删除文件的路径。.
:指定要监控的目录,这里是当前目录。方法2:使用inotify
API编写程序
你可以使用C语言或其他支持inotify
API的编程语言编写一个程序来检测文件删除事件。以下是一个简单的C语言示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/inotify.h>
#include <unistd.h>
#define EVENT_SIZE ( sizeof (struct inotify_event) )
#define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) )
int main(int argc, char **argv)
{
int length, i = 0;
int fd;
int wd;
char buffer[BUF_LEN];
fd = inotify_init();
if (fd < 0) {
perror("inotify_init");
}
wd = inotify_add_watch(fd, ".", IN_DELETE);
length = read(fd, buffer, BUF_LEN);
if (length < 0) {
perror("read");
}
while (i < length) {
struct inotify_event *event = (struct inotify_event *) &buffer[i];
if (event->len) {
if (event->mask & IN_DELETE) {
printf("File deleted: %s\n", event->name);
}
}
i += EVENT_SIZE + event->len;
}
(void) inotify_rm_watch(fd, wd);
(void) close(fd);
return 0;
}
编译并运行这个程序,它将监控当前目录下的文件删除事件,并在检测到文件删除时输出文件路径。