एक ही समय में किसी फ़ाइल की अनुमति और समूह-स्वामी को कैसे बदलना है


9

फ़ाइल अनुमति बदलने के लिए, मुझे पता है कि मैं chmod का उपयोग कर सकता हूं। समूह-स्वामी को बदलने के लिए, मैं chgrp का उपयोग कर सकता हूं। हालाँकि, यदि मैं एक ही समय में अनुमति और स्वामी दोनों को बदलना चाहता हूं, तो क्या कोई भी आदेश मैं लिनक्स पर उपयोग कर सकता हूं?

उदाहरण के लिए, इस अनुमति और स्वामी के साथ एक फ़ाइल है:

-rw-r--r--+  1 raymondtau  staff    0 May  8 16:38 WantToChangeThisFile

और अब मैं इसे बदलना चाहता हूं:

---x-w--wx+  1 raymondtau  admin    0 May  8 16:38 WantToChangeThisFile

मुझे पता है कि मैं इस आदेश का उपयोग कर सकता हूं: chmod 123 WantToChangeThisFile && chgrp admin WantToChangeThisFileलेकिन जानना चाहता हूं कि क्या ऐसा करने का कोई साफ तरीका है।

जवाबों:


9

अवधारणा है जिसे "UNIX-way" के रूप में जाना जाता है। प्रत्येक उपकरण को एक सरल कार्य करना चाहिए। यदि किसी को अधिक जटिल फ़ंक्शन की आवश्यकता होती है, तो वह छोटे टूल को जोड़ सकता है।

जब सभी कार्यक्षमता एक विशाल उपकरण के भीतर एकत्रित होती है, तो इसके विपरीत मोनोलिटिक डिज़ाइन होता है।

आप कुछ जटिल करना चाहते हैं तो - बस एक स्क्रिप्ट लिखने, सरल उपकरण लागू।


यहाँ एक स्क्रिप्ट लिखी गई है जो इन उपकरणों को एक शेल फ़ंक्शन में जोड़ती है ch,।
कीथ

2
इसका कोई तरीका नहीं है कि यह एक उत्तर है, जो उसने पूछा है वह पहले से मौजूद कई उपकरणों के साथ प्राप्त किया जा सकता है जैसे कि rsync और हालांकि linux एक उपकरण / एक फ़ंक्शन को पसंद करता है इसका मतलब यह है कि कई सामान करने वाले उपकरण मौजूदा नहीं हैं
किवी

@ कीवी कुछ लिनक्स उपकरण यूनिक्स-तरह के सिद्धांतों के अनुरूप नहीं हैं और विभिन्न प्रकृति के विभिन्न कार्यों को जोड़ते हैं। जैसा उदाहरण के लिए systemd।
कोंडायबस

1
@Kondybas "के लिए करते हैं" वाक्य का महत्वपूर्ण हिस्सा है। नियम का अपवाद मौजूद नहीं है। फिर भी आपका जवाब मेरे लिए बहुत बुरा है।
कीवी

9

यदि आप भी चाहते हैं कि फ़ाइल को कहीं और कॉपी किया जाए (जैसे कि उसका अंतिम गंतव्य), तो आप installकमांड पर एक नज़र डालना चाहते हैं :

install -m 0777 -o root $sourcefile $destinationfile


1

* निक्स में नौकरी के लिए सही टूल का उपयोग करना महत्वपूर्ण है, लेकिन वास्तव में प्रत्येक जंजीर कमांड में एक ही पथ को दोहराने से मूर्खतापूर्ण लगता है। इसके बजाय, आपको वास्तव में बैश चर और छोटी लिपियों में विशेष रूप से उपयोग करना चाहिए $_

आपकी आज्ञा बन जाएगी:

chmod 123 WantToChangeThisFile && chgrp admin $_

ALT +। अपने वर्तमान शेल में अंतिम उपयोग किए गए तर्क को खींचने की समान बात करता है।


0

रुपीस इस मामले में उपयोगी है:

फाइन मैनुअल (टीएम) से

--chown = USER: ग्रुप सिंपल यूजर नेम / ग्रुपनाम मैपिंग

--chmod = CHMOD फ़ाइल और / या निर्देशिका अनुमतियों को प्रभावित करता है

इसलिए, उदाहरण के लिए, आप chmod / mnt / lala / lala4000 / "ugo = rX" और chown "foo.bar" चाहते हैं

rsync --chmod = ugo = rX --chown = foo: bar -rvtpolgh / mnt / lala / lala4000 / / mnt / lala / lala4000 /

यह पुनरावर्ती रूप से चेर को हिलाएगा और चूमेगा।


0

आप लंबी rsyncकमान के साथ एक लक्ष्य हासिल कर सकते हैं

rsync -a --chown=root:root --chmod=F755 filename filename

मुझे यह नहीं मिलता है
पियरे.विरेंस

यह असुरक्षित है: यह निर्दिष्ट निर्देशिका और उपनिर्देशिकाओं में सभी मेल खाने वाली फ़ाइलों को प्रभावित करेगा, न कि केवल एक फ़ाइल जिसे इसे इंगित किया गया है।
टेल्कोएम

-1

आप chown username:groupname file ...दोनों को एक साथ बदलने के लिए कर सकते हैं । यह एक ही (इनोडे) संरचना में दो क्षेत्रों को बदल रहा है, इसलिए इसे संयोजित करने से दो सिस्टम कॉल (वर्तमान मानों को पढ़ने के लिए और संशोधित vaules सेट करने के लिए एक) की बचत होती है।


chownकेवल मालिकों को बदलता है। यह उसी समय अनुमतियों को कैसे बदलता है जब ओपी ने अनुरोध किया था? नोट ओपी के उदाहरण में एक chmodअच्छी तरह से शामिल है ।
'12

आह, मैं आपको 3 चीजों को बदलना चाहता हूं, जैसा कि उन्होंने लिखा है समूह-मालिक को बदलने के लिए मुझे लगा कि उनका मतलब समूह और मालिक है।
दोपहर

-3
#!/bin/bash

# Setting the Variables for execution
LOGDIR=$HOME
CURRENTTIME=$(date +"%Y%m%d%s%H%M%S")
LOGFILE=${LOGDIR}/chgpermission_${CURRENTTIME}.log
MASTERFILE=$1
INDEX=0

# Checking the number of Parameters passed
if [ "$#" -ne 1 ]; then
    echo "Master file name is mandatory parameter" > ${LOGFILE}
    exit 1
fi

# Loading the Master file into an Array 
echo "Loading the Master file ${MASTERFILE} into an array" >> ${LOGFILE}
while read line
do
#echo $line  
MASTERARRAY[$INDEX]=$HOME/$line 
INDEX=$(expr $INDEX + 1) 
done < ${MASTERFILE}

echo "Number of parameters in an master array ${MASTERARRAY[@]}" >> ${LOGFILE}

# Changing the permission of the file 
echo "Changing the permission of the file in master file ${MASTERFILE}" >> ${LOGFILE} 
index=0
for index in "${MASTERARRAY[@]}"
do
    if [ -f "$index" ] 
    then
       echo "$index file exist"
       echo  "$index file exist" >> ${LOGFILE}
       chmod 755 "$index" 
       chown workstation "$index"
       chgrp workstation "$index" 
    else
      echo "$index file does not extst"
      echo "$index file does not exist" >> ${LOGFILE}  
    fi 
done 

2
आप कम से कम एक विवरण प्रदान कर सकते हैं कि यह कैसे काम करता है और इसका उपयोग कैसे किया जाता है (पैरामीटर कितना है ...)
कीवी

2
कृपया उत्तर के रूप में कुछ कोड पेस्ट न करें।
कोनराड गजवेस्की

टिप्पणी करना उत्पादक होने की संभावना नहीं है; यह केवल एक चीज है जिसे इस उपयोगकर्ता ने कभी पोस्ट किया है, और उन्होंने तब से लॉग इन भी नहीं किया है।
जी-मैन का कहना है कि 'मोनिका'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.