फ़ोल्डरों को छूने के बिना फ़ाइलों से निष्पादित अनुमतियों को पुन: कैसे हटाएं?


40

मैंने NTFS ड्राइव के लिए एक बैकअप बनाया, और ठीक है, यह बैकअप वास्तव में आवश्यक साबित हुआ। हालाँकि, NTFS ड्राइव ने अनुमतियाँ गड़बड़ कर दी हैं। मैं उन्हें सामान्य रूप से w / o को पुनर्स्थापित करना चाहता हूं, प्रत्येक फ़ाइल को मैन्युअल रूप से ठीक करना।

एक समस्या यह है कि अचानक मेरी सभी पाठ फ़ाइलों को निष्पादित अनुमतियाँ प्राप्त हुईं, जो गलत है। इसलिए मैंने कोशिश की:

sudo chmod -R a-x folder\ with\ restored\ backup/

लेकिन यह गलत है क्योंकि यह xनिर्देशिकाओं से अनुमति को हटा देता है जो उन्हें अपठनीय बनाता है।

इस मामले में सही आदेश क्या है?


1
मेटा: मैंने कभी नहीं समझा कि यूनिक्स सिस्टम DOS या विंडोज फाइल सिस्टम से माउंट की गई फाइलों में एग्जिक्यूट बिट को क्यों जोड़ता है। यह उन फ़ाइलों को निष्पादित करने के लिए किसी के पास जाने जैसा नहीं है। मैं आम तौर पर जहां भी व्यावहारिक होता है वहां अपने माउंट विकल्पों में "नोएसेक" जोड़ता हूं।
एडवर्ड फॉक

जवाबों:


68
chmod -R -x+X *

-xनिकाल दी के लिए अनुमतियों को निष्पादित सभी के लिए अनुमतियों को निष्पादित जोड़ना होगा, लेकिन केवल निर्देशिकाओं के लिए।
+X


2
कमांड मैं अंततः सामान्य रूप से अनुमतियों को पुनर्स्थापित करने के लिए उपयोग करता था: `chmod -R-a-x + X, u-x + rwX, go-wx + rX निर्देशिका / नाम`
Gaazkam

3
बीएसडी के अपवाद के बारे में एडवर्ड का जवाब भी देखें
fikr4n

4
यह "फ़ोल्डर्स को छुए बिना" आवश्यकता को विफल करता है। क्या होगा अगर निष्पादन (शायद दुनिया के लिए) जानबूझकर कुछ निर्देशिकाओं पर हटा दिया गया है? आपको इसे जोड़ना नहीं चाहिए।
बेन वोइगट

4
यह मैक पर काम नहीं किया। शुरुआत में -R फ्लैग को आगे ले जाने से यह कार्य linux और Mac टर्मिनलों दोनों में हो जाएगा। chmod -R -x+x *
जोमो

2
वास्तव में यह सही क्रम के साथ OSX पर चलता है, लेकिन इसका वास्तव में वांछित प्रभाव नहीं है। आपको इसे दो अलग-अलग चरणों के रूप में करना होगा:chmod -R -x * && chmod -R +X *
टिम्मम

14

ठीक है, मैंने मैक ओएस एक्स, बीएसडी और लिनक्स के लिए "चामोद" मैन पेजों को फिर से पढ़ा, और कुछ प्रयोग किए। यहाँ मैंने प्रतीकात्मक तरीकों के बारे में सीखा है। यह जटिल हो सकता है, लेकिन यह समझने लायक है:

  • सामान्य रूप है क्लॉज [, क्लॉज …] जहां:
  • खंड : = [बदसूरत] [+ - =] [rwxXstugo]
  • [ugoa] ( जो ) (एकाधिक निर्दिष्ट करें) का अर्थ है उपयोगकर्ता, समूह, अन्य या सभी के लिए अनुमति सेट करें। यदि निर्दिष्ट नहीं है, तो डिफ़ॉल्ट 'a' है, लेकिन umask प्रभाव में है।
  • [+ - =] ( क्रिया ) (एक निर्दिष्ट करें) का अर्थ है:
    • + का मतलब है कि पहले से लागू अनुमतियों में निर्दिष्ट अनुमतियाँ जोड़ें
    • - का अर्थ है पहले से लागू अनुमतियों से निर्दिष्ट अनुमतियाँ हटा दें
    • = का अर्थ है अन्य सभी को साफ़ करते हुए अनुमतियों को निर्दिष्ट अनुमतियों पर सेट करना
  • [rwxXstugo] ( अनुमति ) (rwxXst के कई निर्दिष्ट या युगो से एक) सेट निर्दिष्ट उपयोगकर्ता (ओं) के रूप में इस के लिए अनुमतियाँ:
    • r - पढ़ा
    • डब्ल्यू - लिखें
    • x - निष्पादित / खोज
    • एक्स - निष्पादित / खोज iff निर्देशिका या किसी भी निष्पादित बिट पहले से ही सेट किया गया था।
    • s - suid या sgid
    • टी - चिपचिपा
    • यू - उपयोगकर्ता की अनुमति की प्रतिलिपि बनाएँ
    • जी - कॉपी ग्रुप अनुमति
    • o - अन्य अनुमति की प्रतिलिपि बनाएँ

उदाहरण के लिए, a+xहर किसी के द्वारा एक फ़ाइल को निष्पादन योग्य बनाया जाएगा। a+Xहर किसी के द्वारा एक फ़ाइल को निष्पादन योग्य बनाया जाएगा यदि वह किसी के द्वारा निष्पादित किया गया हो।

a+xहर किसी के द्वारा खोजा जा सकने वाला एक निर्देशिका बनाया जाएगा। a+Xहर किसी के द्वारा खोजा जा सकने वाला एक निर्देशिका भी बनाया जाएगा।

बीएसडी और लिनक्स के बीच महत्वपूर्ण अंतर यह है कि बीएसडी के साथ, निर्धारण फ़ाइल के अनुमतियों के आधार पर किया जाता है, इससे पहले कि चोद को निष्पादित किया गया था। लिनक्स के साथ, निर्धारण + X खंड निष्पादित होने से तुरंत पहले किया जाता है।

तो बीएसडी के साथ, संयोजन a-x,a+Xनिष्पादन / खोज की अनुमति को हटा देगा और फिर हर किसी के द्वारा खोज योग्य निर्देशिका बना देगा, और यदि किसी के द्वारा मूल रूप से निष्पादित किया गया था, तो हर किसी के द्वारा एक फ़ाइल को निष्पादन योग्य बनाया जाएगा।

लिनक्स के साथ, a-x,a+Xनिष्पादित / खोज अनुमति को हटा देगा और फिर किसी के द्वारा निष्पादन योग्य फ़ाइल को छोड़ते हुए, हर किसी के द्वारा खोज करने योग्य निर्देशिका बना देगा।


यहां एक ठोस उदाहरण है: बीएसडी मशीन पर: एक निर्देशिका, एक निष्पादन योग्य फ़ाइल और एक गैर-निष्पादन योग्य फ़ाइल:

drwxr-x---  2 falk  staff  68 Jul 19 18:01 fee/
-rwxr-x---  1 falk  staff   0 Jul 19 18:01 fie*
-rw-r-----  1 falk  staff   0 Jul 19 18:01 foe

निरीक्षण करें कि निर्देशिका और "fie" दोनों उपयोगकर्ता द्वारा निष्पादन योग्य / खोज योग्य हैं, लेकिन दूसरों द्वारा नहीं।

अब हम निष्पादित करते हैं chmod a-x,a+X *। पहला खंड सभी फ़ाइलों के लिए सभी उपयोगकर्ताओं से निष्पादित / खोज बिट को छीन लेगा, लेकिन दूसरा खंड इसे "शुल्क" और "फी" दोनों के लिए वापस जोड़ देगा। "शुल्क" क्योंकि यह एक निर्देशिका है, और "फी" क्योंकि इसके साथ शुरू करने के लिए कम से कम एक निष्पादन योग्य बिट था।

drwxr-x--x  2 falk  staff  68 Jul 19 18:01 fee/
-rwxr-x--x  1 falk  staff   0 Jul 19 18:01 fie*
-rw-r-----  1 falk  staff   0 Jul 19 18:01 foe

मैं एक ही परिणाम निष्पादित था chmod -x+X

निष्कर्ष: जेक गिब का समाधान लिनक्स पर काम करेगा, लेकिन बीएसडी के लिए, आपको दो पास बनाने होंगे।

मैंने एसवीआर 4 या अन्य यूनिक्स वेरिएंट पर इसका परीक्षण नहीं किया।


अच्छा पढ़ा। इस में शोध करने के लिए धन्यवाद।
जैक गिब

10

इसे करने का एक तरीका:

find backup -type f -exec chmod 0644 {} +

6
यह उन अनुमतियों को जोड़ने या हटाने को हवा दे सकता है जिन्हें आप बदलना नहीं चाहते थे। उपयोग करने के लिए बेहतर हैchmod a-x {}
एडवर्ड फॉक

1
@EdwardFalk chmod a-x {}उन अनुमतियों को भी समाप्त कर सकता है जिन्हें आप बदलना नहीं चाहते थे, और यह फ़ाइलों को विश्व-लेखन के लिए छोड़ सकती है। बिंदु है, 0644 एक "आम तौर पर उचित" समझौता है। बेशक, ओपी को अपने कंप्यूटर पर इंटरनेट से समाधान लागू करने से पहले मस्तिष्क को भी संलग्न करना चाहिए।
सातु कटुरा

4
"कुल्हाड़ी" उपयोगकर्ता, समूह, अन्य के लिए निष्पादन की अनुमति को हटाता है, और अन्य अनुमतियों को अपरिवर्तित छोड़ देता है, जहां तक ​​मुझे पता है। क्या मेरे पास वह गलत है?
एडवर्ड फाक

1
@EdwardFalk नहीं, तुम सही हो। लेकिन आप यह नहीं जानते कि फाइलों का सेट वास्तव में क्या है, और आप यह भी नहीं जानते हैं कि पहले क्या अनुमतियाँ chmodहैं। यदि बैकअप फ़ाइलों में स्क्रिप्ट और बायनेरिज़ होते हैं, तो xउन्हें निकालना गलत है। यदि पहले की अनुमति chmod0777 है, तो फिर chmod a-xभी उन्हें 0666 छोड़ देंगे, जो कि शायद आप नहीं चाहते हैं। मैं जो कह रहा हूं chmod 0644वह बेहतर उत्तराधिकार है, chmod a-xगलत नहीं है ।
सातु कटसरा

1
@NajibIdrissi को छोड़कर जब आप जानते हैं, तो वे 0777 में बदल गए जब आपने उन्हें एक विदेशी फाइल सिस्टम पर कॉपी किया, जिसमें UNIX अनुमतियां नहीं थीं। जो ओपी ने ठीक किया है।
शनि कत्सुरा

6
 find backup ! -type l ! -type d -exec chmod a-x {} +

उन फ़ाइलों की अनुमति को हटा देगा, जो टाइप डायरेक्टरी की नहीं हैं (जैसा आपने अनुरोध किया है) और न ही प्रतीकात्मक लिंक (सिमिलिंक आमतौर पर हमेशा rwxrwxrwx होते हैं, और chmodउन पर सिम्लिंक के लक्ष्य को प्रभावित करते हैं)।

ध्यान दें कि:

 find backup -type f -exec chmod a-x {} +

केवल नियमित फ़ाइलों की अनुमति को बदल देगा । यह निर्देशिका और सिम्बलिंक को बाहर करेगा , लेकिन सिस्टम के आधार पर डिवाइस , पाइप , सॉकेट और संभवतः अन्य भी (हालांकि, एनटीएफएस फाइल सिस्टम के बैकअप के ओपी के मामले में, वे मौजूद होने की संभावना नहीं होगी)।


2

Zsh में, केवल नियमित फ़ाइलों (प्रतीकात्मक लिंक सहित) से मेल करने के लिए ग्लोब क्वालीफ़ायर . का उपयोग करें , और Dडॉट फ़ाइलों से मिलान करने के लिए:

sudo chmod a-x folder\ with\ restored\ backup/**/*(D.)

यदि कमांड लाइन बहुत लंबी है, तो आप उपयोग कर सकते हैं zargs:

zargs -- folder\ with\ restored\ backup/**/*(D.) -- sudo chmod a-x 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.