के उपयोग मान लिया जाये chmod
से GNU coreutils पैकेज उबंटू 12.10 पर।
chmod 775 . -R
fchmodat
प्रत्येक फ़ाइल के लिए सिस्टम कॉल को निष्पादित करता है जो यह पता लगाता है कि अनुमतियों को बदलने की आवश्यकता है या नहीं। मैंने strace chmod 775 . -R
वास्तविक व्यवहार को सूचीबद्ध करने के लिए कोड का निरीक्षण और नीचे (स्निपेट) का उपयोग करके दोनों की पुष्टि की ।
newfstatat(4, "d", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "d", 0775) = 0
newfstatat(4, "c", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "c", 0775) = 0
newfstatat(4, "a", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "a", 0775) = 0
newfstatat(4, "b", {st_mode=S_IFREG|0666, st_size=0, ...}, AT_SYMLINK_NOFOLLOW) = 0
fchmodat(4, "b", 0775) = 0
fchmodat
प्रत्येक फ़ाइल पर चलने के कुछ नुकसान हैं
- यदि बड़ी संख्या में फ़ाइलें बदली जाती हैं, तो अतिरिक्त सिस्टम कॉल महत्वपूर्ण हो जाएगा।
find
/ xargs
/ chmod
विधि दूसरों के द्वारा उल्लेख होने की संभावना ही नहीं बदल रहा है की जरूरत फ़ाइलों को बदलने के द्वारा तेज हो जाएगा।
fchmodat
प्रत्येक फ़ाइल के फ़ाइल स्थिति संशोधन (CIME) को बदलने के लिए कॉल । यह प्रत्येक फ़ाइल / इनकोड को हर बार बदलने का कारण बनेगा और संभवतः अतिरिक्त डिस्क लिखने का कारण होगा। इन अतिरिक्त लेखन को रोकने के लिए माउंट विकल्पों का उपयोग करना संभव हो सकता है।
एक सरल प्रयोग सीधे समय के लिए हो रहे समय परिवर्तन को दर्शाता है chmod
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:17 d
auser@duncow:/tmp/blah.test$ chmod 775 . -R
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 d
लेकिन यह कुछ मिनटों के लिए find
/ xargs
/ नहीं बदलता हैchmod
auser@duncow:/tmp/blah.test$ date
Tue Jun 18 18:27:27 BST 2013
auser@duncow:/tmp/blah.test$ find . ! -perm 775 -print0 | xargs -0 -I {} chmod 775 {}
auser@duncow:/tmp/blah.test$ ls -lc
total 0
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 a
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 b
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 c
-rwxrwxr-x 1 laptop laptop 0 Jun 18 18:25 d
मैं हमेशा find
/ xargs
/ chmod
संस्करण का उपयोग करना चाहूंगा क्योंकि खोजने से चीजों का चयन करने पर अधिक नियंत्रण मिलता है।