unix 디렉토리에서 find 또는 ls -al을 사용할 때 해당 파일 또는 디렉토리 오류가 없습니다.

unix 디렉토리에서 find 또는 ls -al을 사용할 때 해당 파일 또는 디렉토리 오류가 없습니다.

왜 이런 일이 일어나고 해결책이 무엇인지 알아내려고 노력하고 있습니다.

Unix 디렉터리에서 다음 명령을 실행하려고 하면 해당 디렉터리에 약 16개의 파일이 포함되어 있고 응용 프로그램 프로세스 중 하나가 동일한 디렉터리에서 파일을 계속 삭제하거나 이름을 바꾸고 있습니다. 이 문제는 명령을 호출하고 동시에 실행 중인 응용 프로그램 프로세스가 해당 위치에서 하나 이상의 파일을 이동할 때 발생합니다.

ls -al |wc -l
ls: 'file_which_has_removed.txt': No such file or directory

find 명령을 실행할 때도 동일한 문제를 발견했습니다.

find . -maxdepth 1 -atime +15
/bin/find: '/u1/bruce/File_removed.txt': No such file or directory

내가 찾으려는 해결책은 이 오류를 피할 수 있는 방법이 있습니까? 이 find 명령을 실행한 다음 -delete를 사용하여 응용 프로그램 프로세스를 중지하지 않고 디렉터리에서 이러한 오래된 파일을 삭제하고 싶습니다.

답변1

두 경우 모두 경쟁 조건이 발생합니다.

strace ls -l tmpdir/
[...]
openat(AT_FDCWD, "tmpdir/", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=34, ...}, AT_EMPTY_PATH) = 0
getdents64(3, 0x562392b64920 /* 8 entries */, 32768) = 200

statx(AT_FDCWD, "tmpdir/1.", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW, STATX_MODE|STATX_NLINK|STATX [...]
lgetxattr("tmpdir/1.", "security.selinux", 0x562392b6c930, 255) = -1 ENODATA (Keine Daten verfügbar)
getxattr("tmpdir/1.", "system.posix_acl_access", NULL, 0) = -1 ENODATA (Keine Daten verfügbar)

먼저 프로그램은 디렉터리 내용의 이름 목록을 읽습니다. 각 이름에 대한 자세한 내용은 추후 요청될 예정입니다. 동시에 개체 이름을 바꾸면 오류가 발생합니다.

관련 정보