कैसे एक निर्देशिका बनाने के लिए और एकल आदेश में अनुमति देने के लिए


108

कैसे एक निर्देशिका बनाने और लिनक्स में एकल आदेश में अनुमति देने के लिए?

मुझे पूरी अनुमति के साथ बहुत सारे फ़ोल्डर बनाने हैं 777

आदेश

mkdir path/foldername
chmod 777 path/foldername 

मुझे दो कमांड बनाने और अनुमति देना पसंद नहीं है। क्या मैं इसे सिंगल कमांड में कर सकता हूं?


1
mkdir temp; chmod 777 tempएक लाइन है। आप 'अस्थायी' को एक परिवर्तनशील बना सकते हैं और इसे बैश कमांड के रूप में सहेज सकते हैं। क्या यह आप करना चाहते हैं?
स्टाइलफेल

1
hi @ सफेद-गुलाब, कृपया नवीनतम उत्तर देखें, यह स्वीकृत उत्तर होना चाहिए। बोनस, यह एक ही बुलेट में mkdir, chmod और chown को जोड़ती है!
कॉस्टिन गुआ

जवाबों:


205

Mkdir के मैन पेज के अनुसार ...

mkdir -m 777 dirname

1
क्या मैं pls मुझे -m विकल्प के बारे में बता सकता हूँ?
बेचारी

@Whiterose -m विकल्प मोड के लिए है। मोड चर द्वारा निर्दिष्ट मान के लिए नव-निर्मित निर्देशिकाओं के लिए अनुमति बिट्स सेट करता है। मोड वैरिएबल चामोड कमांड के लिए मोड पैरामीटर के समान मान लेता है, या तो प्रतीकात्मक या संख्यात्मक रूप में।
TMKasun

14
mkdir -p -m टूट गया है, क्योंकि मोड केवल आपके द्वारा टाइप किए गए पथ में अंतिम निर्देशिका पर लागू होता है। उदाहरण के लिए, mkdir -p -m 707 एक / दो / तीन। यहां तक ​​कि अगर सभी तीन निर्देशिकाओं को नया बनाया जाता है, तो केवल अंतिम एक के पास अनुरोधित अनुमतियाँ होंगी, और अन्य, डिफ़ॉल्ट। स्थापित -d -m उसी तरह टूट गया है।
प्रदर्शित नाम

-pउस @DisplayName के आसपास के मुद्दे के अलावा पहले से ही ऊपर उल्लेखित एक और एक भी है। -mकेवल लागू होंगे यदि निर्देशिका वास्तव में बनाया जाता है। यदि यह पहले से मौजूद है तो इसका मोड नहीं बदला जाएगा। आपके संदर्भ के आधार पर यह अच्छा या बुरा हो सकता है।
एडम बदुरा

1
mkdir -m777 निर्देशिका
ह्यूगो डिरो

19
install -d -m 0777 /your/dir

आपको जो चाहिए वो आपको देना चाहिए। ध्यान रखें कि प्रत्येक उपयोगकर्ता को उस निर्देशिका में फ़ाइलों को जोड़ने और हटाने का अधिकार है।


1
बोनस, आप -g और / या -o भी जोड़ सकते हैं और आप एक ही शॉट में mkdir, chmod और chown कर सकते हैं!
कॉस्टिन गुआ

4
यह टूटा हुआ है। स्थापित -d -m 070 एक / दो / तीन। यहां तक ​​कि अगर मार्ग में सभी तीन निर्देशिकाओं को नया बनाया गया है, केवल अंतिम एक के पास अनुरोधित अनुमतियाँ होंगी। mkdir -p -m उसी तरीके से टूट गया है।
प्रदर्शित नाम

@DisplayName: जो कि इसके लिए सही अनुमतियाँ सेट करता है three, इसके लिए डिफ़ॉल्ट अनुमतियाँ पथ के लिए पर्याप्त हैं।
मार्कस डब्ल्यू महलबर्ग

17

जब निर्देशिका पहले से मौजूद है:

mkdir -m 777 /path/to/your/dir

जब निर्देशिका मौजूद नहीं है और आप मूल निर्देशिका बनाना चाहते हैं:

mkdir -m 777 -p /parent/dirs/to/create/your/dir

यह अंतिम उपनिर्देशिका के लिए केवल 777 अनुमति देगा। मैं यह कैसे कर सकता हूं और सभी माता-पिता निर्देशिकाओं को भी 777 की अनुमति दे सकता हूं?
लेवी जोहानसन

2
मेरे पास इसके लिए कोई उत्तर नहीं है लेकिन मेरा मानना ​​है कि इसके लिए उत्तर यहाँ है: stackoverflow.com/questions/3740152/…
पेड्रो ट्रूजिलो

ध्यान दें कि यह कमांड इस समस्या को हल करने के लिए है "एक निर्देशिका कैसे बनाएं और एकल कमांड में अनुमति दें"। मेरा मानना ​​है कि आपके सवाल का हल कुछ इस तरह होगा:find /your/dirs -type d -exec chmod 755 {} \;
पेड्रो ट्रूजिलो

10

IMO, installऐसी स्थितियों में कमांड का उपयोग करना बेहतर है। मैं systemd-journaldरिबूट भर में लगातार बनाने की कोशिश कर रहा था ।

install -d  -g systemd-journal -m 2755 -v /var/log/journal

7

आप उदाहरण के लिए एक सरल शेल स्क्रिप्ट लिख सकते हैं:

#!/bin/bash
mkdir "$1"
chmod 777 "$1"

एक बार सहेजने के बाद, और निष्पादन योग्य ध्वज सक्षम हो गया, आप इसे mkdir और chmod के बजाय चला सकते हैं:

./scriptname path/foldername

हालांकि, एलेक्स का जवाब बहुत बेहतर है क्योंकि यह तीन के बजाय एक प्रक्रिया को जन्म देती है। मुझे -mविकल्प के बारे में पता नहीं था ।


धन्यवाद डेलन .. मुझे शेल स्क्रिप्ट में वह कमांड भी लिखा गया है .. लेकिन मैं सिंगल कमांड में करना चाहता हूं।
बेचारी

7

ऊपर दिए गए कुछ उत्तरों को सुधारने और सुधारने के लिए:

सबसे पहले, मैं GNU Coreutils 8.26 के लिए mkdir मैन पेज की जाँच करूँगा - यह हमें विकल्प '-m' और '-p' के बारे में जानकारी देता है (क्रमशः - mode = MODE और --parents के रूप में भी दिया जा सकता है) ):

... सेट [फ़ाइल] फ़ाइल मोड (chmod के रूप में), एक = rwx - umask नहीं

... कोई त्रुटि नहीं अगर मौजूदा है, तो माता-पिता निर्देशिका को आवश्यकतानुसार बनाएं

मेरे विचार में कथन अस्पष्ट और अस्पष्ट हैं। लेकिन मूल रूप से, यह कहता है कि आप निर्देशिका को "chmod संख्यात्मक अंकन" (ऑक्टल्स) द्वारा निर्दिष्ट अनुमतियों के साथ बना सकते हैं या आप "दूसरे तरीके" पर जा सकते हैं और / अपने umask का उपयोग कर सकते हैं।

साइड नोट: मैं कहता हूं कि "दूसरा तरीका" चूंकि ऑमस्क वैल्यू वास्तव में ऐसा लगता है - जैसे कि मास्क , छुपाना / हटाना अनुमति देने के बजाय उन्हें "अनुदान" देना, जैसा कि चामोद के संख्यात्मक ऑक्टल नोटेशन के साथ है।

आप शेल-बिल्टिन कमांड umaskको यह देखने के लिए निष्पादित कर सकते हैं कि आपका 3-अंकीय उमास्क क्या है; मेरे लिए, यह है 022। इसका मतलब यह है कि जब मैं mkdir yodirectoryकिसी दिए गए फ़ोल्डर में निष्पादित करता हूं (कहते हैं, महोम) और statइसे, मुझे इसका कुछ आउटपुट मिलेगा:

               755                   richard:richard         /mahome/yodirectory
 #          permissions                 user:group      what I just made (yodirectory),
 # (owner,group,others--in that order)                 where I made it (i.e. in mahome)
 # 

अब, उन अष्टाधारी अनुमतियों के बारे में थोड़ा और जोड़ने के लिए। जब आप एक निर्देशिका बनाते हैं, तो "आपका सिस्टम" आपकी डिफ़ॉल्ट निर्देशिका परमिट ले जाता है '[जो नई निर्देशिकाओं के लिए लागू होता है (इसका मूल्य 777 होना चाहिए]] और यो (यू) मुखौटा पर थप्पड़ मारता है, प्रभावी रूप से उन परमिटों में से कुछ को छिपाता है।' मेरा ओमस्क 022 है - अब अगर हम 777 में से "022" घटाते हैं (तकनीकी रूप से घटाना एक निरीक्षण है और हमेशा सही नहीं होता है - हम वास्तव में परमिट या मुखौटा आईएनजी को बंद कर रहे हैं) ... हमें 755 मिलता है जैसा कि कहा गया है (या "स्टैटेड") ) पहले।

हम 3 अंकों के अष्टक के सामने '0' को छोड़ सकते हैं (इसलिए उन्हें 4 अंकों का नहीं होना चाहिए) क्योंकि हमारे मामले में हम नहीं चाहते थे (या उल्लेख नहीं किया गया था) किसी भी स्टिकबेट, सैट्यूड्स या सेटगिड्स (आप उन पर गौर करना चाहते हैं, Btw, वे उपयोगी हो सकते हैं क्योंकि आप 777 जा रहे हैं)। तो दूसरे शब्दों में, 0777 का तात्पर्य 777 (या 777 के बराबर) है (लेकिन 777 आवश्यक रूप से 0777 के बराबर नहीं है - क्योंकि 777 केवल अनुमतियों को निर्दिष्ट करता है, न कि सेट्यूड्स, सेटगिड्स आदि)

अब, अपने प्रश्न को व्यापक अर्थों में लागू करने के लिए - आपके पास (पहले से ही) कुछ विकल्प हैं। काम के ऊपर सभी उत्तर (कम से कम मेरे कोर्यूटिल्स के अनुसार)। जब आप उप- निर्देशिकाओं (नेस्टेड डायरेक्ट्रीज़) को एक बार में 777 अनुमतियों के साथ बनाना चाहते हैं, तो आप उपरोक्त समाधानों के साथ समस्याओं में भाग सकते हैं (या बहुत संभव है) । विशेष रूप से, यदि मैं 022 की उमंग के साथ माहोम में निम्नलिखित करता हूं:

mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff

मुझे 755दोनों के लिए परमिट मिलेंगे yodirectoryऔर yostuff, केवल 777परमिट के लिए mastuffinyostuff। तो ऐसा प्रतीत होता है कि umaskवह सब है जिस पर थप्पड़ मारा गया है yodirectoryऔर yostuff... इसके चारों ओर पाने के लिए हम एक उपखंड का उपयोग कर सकते हैं:

( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )

और बस। यॉस्टफ, मास्टफिनोस्टफ, और योडायरेक्टरी के लिए 777 परमिट।


7

आप एक ही समय में निर्देशिका बनाने और अनुमति देने के लिए निम्न आदेश का उपयोग कर सकते हैं

mkdir -m777 path/foldername 

1
-m और 777 के बीच कोई स्थान नहीं है
ओमेर गफ़र

1

ऐसा न करें: mkdir -m 777 -p a/b/c क्योंकि यह केवल 777अंतिम निर्देशिका, सी पर अनुमति निर्धारित करेगा ; a और b आपके umask से डिफ़ॉल्ट अनुमति के साथ बनाया जाएगा।

अनुमति के साथ कोई भी नई निर्देशिका बनाने के बजाय 777, mkdir -pएक सबमिशन में चलाएं जहां आप umask को ओवरराइड करते हैं:

(umask u=rwx,g=rwx,o=rwx && mkdir -p a/b/c)

ध्यान दें कि यह अनुमतियाँ नहीं बदलेगा यदि कोई, b और c पहले से मौजूद है।


हाँ, यदि आप एक 4-अंकीय umask पास करते हैं तो अग्रणी अंक हमेशा शून्य होना चाहिए (हालाँकि आप इसे छोड़ सकते हैं)। यह chmod के साथ समरूपता के लिए हो सकता है, जहां पहला ऑक्टल अंक सेटिड, सेटगिड और चिपचिपा बिट्स सेट करता है, लेकिन यदि ऐसा है तो यह बहुत ही बेकार है क्योंकि उमस्क आपको उन लोगों को प्रतिबंधित करने की अनुमति नहीं देता है।
जॉन मेलोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.