खैर, मेरे पास ttaran7 द्वारा उत्तर पर टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, इसलिए यह एक उत्तर की तरह लगता है कि यह होना ही होगा। कम प्रतिष्ठा के कारण मेरा अप-वोट सार्वजनिक रूप से दिखाई नहीं देता है। मैंने वोट दिया कि वास्तव में एक प्रणाली कॉल ट्रेस सहित जवाब के लिए, केवल अटकलें नहीं।
ओपी के सवाल का जवाब देने के लिए: हां, आपका तर्क सही था: आप निर्देशिका को पढ़ने में असफल होने पर अवरुद्ध हो जाते हैं
मैंने उनके (ttaran7) किए गए समान निशान को दौड़ाया क्योंकि मुझे एक ही तर्क पर संदेह था: rm
कॉल निर्देशिका को पढ़ने में विफल होने पर विफल हो जाएगी और उस का अंत होगा, निर्देशिका खाली होने के बारे में शिकायत करने का कोई मौका नहीं। मेरे द्वारा लिए गए ट्रेस पर दूसरा नज़र डालने पर, मैंने देखा कि प्रदान किए गए फ़ाइलनाम को अनलिंक करने के प्रयास के लिए एक सिस्टम कॉल किया गया था:
newfstatat(AT_FDCWD, "folder1", {st_mode=S_IFDIR|0311, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
openat(AT_FDCWD, "folder1", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW|O_DIRECTORY) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "folder1", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW|O_CLOEXEC|O_DIRECTORY) = -1 EACCES (Permission denied)
unlinkat(AT_FDCWD, "folder1", AT_REMOVEDIR) = -1 ENOTEMPTY (Directory not empty)
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2995, ...}) = 0
read(3, "# Locale name alias data base.\n#"..., 4096) = 2995
read(3, "", 4096) = 0
close(3) = 0
openat(AT_FDCWD, "/usr/share/locale/en_AU/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_AU/LC_MESSAGES/coreutils.mo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=45256, ...}) = 0
mmap(NULL, 45256, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8db25ca000
close(3) = 0
openat(AT_FDCWD, "/usr/share/locale- langpack/en/LC_MESSAGES/coreutils.mo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=578, ...}) = 0
mmap(NULL, 578, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8db25c9000
close(3) = 0
write(2, "rm: ", 4rm: ) = 4
write(2, "cannot remove 'folder1'", 23cannot remove 'folder1') = 23
openat(AT_FDCWD, "/usr/share/locale/en_AU/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/locale-langpack/en_AU/LC_MESSAGES/libc.mo", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2893, ...}) = 0
mmap(NULL, 2893, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f8db25c8000
close(3) = 0
openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, ": Permission denied", 19: Permission denied) = 19
write(2, "\n", 1
lseek(0, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek)
close(0) = 0
close(1) = 0
close(2) = 0
exitgroup(1)
4 वीं पंक्ति को देखें: unlinkat
... जो विफल रहता है क्योंकि निर्देशिका खाली नहीं है। अब वह वही है जो मैं अनपेक्षित व्यवहार पर विचार करूंगा, तथ्य यह है कि निर्देशिका को हटाने की कोशिश करता है, इसके बावजूद कि पढ़ने की अनुमति नहीं है।