ফোল্ডার এবং এর সমস্ত অভিভাবক ডিরেক্টরিতে পড়ার এবং লেখার অনুমতি সেট করে


18

আমাকে rootব্যবহারকারীর জন্য ডিরেক্টরি subfolderNএবং এর সমস্ত প্যারেন্ট ফোল্ডারগুলিতে পড়ার এবং লেখার অনুমতিগুলি সেট করতে হবে root

আমি এটি হাতে হাতে করতে পারি:

$ sudo chmod +rx /root/subfolder1/subfolder2/subfolderN
$ sudo chmod +rx /root/subfolder1/subfolder2
$ sudo chmod +rx /root/subfolder1
$ sudo chmod +rx /root

তবে Nবড় হলে আমি ক্লান্ত। কিভাবে একটি আদেশ দ্বারা স্বয়ংক্রিয়ভাবে করতে?


আপনি সত্যিই উচিত না করা /rootবিশ্বের পাঠযোগ্য।
স্টাফেন চেজেলাস

উত্তর:


23

এটি শেল মধ্যে সহজেই করা যেতে পারে, সাবডির থেকে শুরু করে এবং উপরের দিকে অগ্রসর হওয়া:

f=/root/subfolder1/subfolder2/subfolderN
while [[ $f != / ]]; do chmod +rx "$f"; f=$(dirname "$f"); done;

এটি আপনি যে ফাইল / ডিরেক্টরিতে সেট করেছেন তা দিয়েই শুরু হয় এবং "/" এর মুখোমুখি না হওয়া অবধি প্রতিটি পিতামাতার ডিরেক্টরিতে কাজ করে (অথবা আপনি যে লুপটির শর্তে স্ট্রিং সেট করেন)। এটি "/" chmod হয় না।


ভাল, আমি জানতাম আমি পার্লের সাথে অযথা জিনিসগুলিকে জটিল করে তুলছি।
টেরডন

তবে কি যদি fকোনও আপেক্ষিক পথ হয় এবং আমি এটির পরিবর্তে যা প্রাসঙ্গিক তা বন্ধ করতে চাই /?
সমস্ত

@ স্টাফেন চ্যাজেলাস ধন্যবাদ যদি $fহয় তবে foo/barকি $fকখনও বদলে যাবে .? হ্যাঁ dirnameকরে। ধন্যবাদ
জন্য স্ট্যাকএক্সচেঞ্জ

1
"টিম" f = `রিডলিঙ্ক -f <রিলেটিভ_পথ> command" কমান্ড ব্যবহার করে স্টোর করার আগে আপেক্ষিক পথটিকে নিখুঁত পথে রূপান্তর করুন
টেলসপিন_কিট

6

সঙ্গে csh, tcsh, ksh, zsh, bash, fishবা yash -o braceexpand:

sudo chmod +rx /root{,/subfolder1{,/subfolder2{,/subfolderN}}}

সাথে zsh:

f=/root/subfolder1/subfolder2/subfolderN
until [[ $f = / ]] {chmod +rx $f; f=$f:h;}

অথবা আপনি যেমন গ্লোব কোয়ালিফায়ার ফাংশনটি সংজ্ঞায়িত করতে পারেন:

explode() {
  reply=()
  until [[ $REPLY = [./] ]] {
    reply+=$REPLY
    REPLY=$REPLY:h
  }
}

উদাহরণস্বরূপ ব্যবহার করা হবে:

$ echo chmod +rx subfolder1/subfolder2/subfolderN(+explode)
chmod +rx subfolder1 subfolder1/subfolder2 subfolder1/subfolder2/subfolderN  

chmod +rxউমাস্ক দ্বারা প্রভাবিত নোট যদি আপনার umaskঅন্তর্ভুক্ত না 007করে তবে এটি /rootডিরেক্টরিটিকে বিশ্ব-পঠনযোগ্য এবং অ্যাক্সেসযোগ্য করে তুলবে যা একটি খারাপ ধারণা। /rootসাধারণত সুপার-ব্যবহারকারীর ব্যক্তিগত জিনিসগুলির জন্য, এটি প্রকাশ করা খারাপ ধারণা।


কি আপনি নেতৃস্থানীয় ব্যাখ্যা গেল ,মধ্যে {,/subfolder}করে?
টেরডন

এটি এমন একটি বিকল্প তৈরি করে যেখানে প্রথম স্ট্রিংটি খালি এবং দ্বিতীয়টি /subfolder; সুতরাং /root{,/subfolder}উত্পাদিত হয় /rootএবং/root/subfolder
ট্রিপলি

উল্লেখযোগ্যভাবে এটি sh
পসিক্সের

2

ঠিক আছে, আপনি কিছু জটিল কিছু যেমন করতে পারেন:

echo "/root/subfolder1/subfolder2/subfolderN" | 
 perl -anF'/' -e 'while($#F>0){@b=join("/",@F);`chmod +rx @b`; pop @F}' 

এটি কী করবে তা দেখতে, chmodমুদ্রণের সাথে কলটি প্রতিস্থাপন করুন :

$ echo "/root/subfolder1/subfolder2/subfolderN" | 
 perl -alnF'/' -e 'while($#F>0){@b=join("/",@F);print "chmod +rx @b"; pop @F}' 
chmod +rx /root/subfolder1/subfolder2/subfolderN
chmod +rx /root/subfolder1/subfolder2
chmod +rx /root/subfolder1
chmod +rx /root

1

আপনি কী করতে চাইছেন তা আমি জানি না তবে আপনি পুনরাবৃত্তিকে হালকাভাবে না নেওয়ার থেকে ভাল । এটি বলেছিল, আসল উত্তরটি পড়ুন:

উম্মে ... কেন কেবল পুনরাবৃত্তি ব্যবহার করবেন না।

sudo chmod -R +rx /root

অথবা যদি আপনি এটি পছন্দ না করেন তবে আপনি chmodকয়েকটি ডিরেক্টরি দিতে পারেন :

sudo chamod +rx /root /root/subfolder1 /root/subfolder1/subfolder2 /root/subfolder1/subfolder2/subfolderN

4
যদিও এটি প্রায় একই অপারেশন নয়। নিয়মিত ফাইল এবং সমস্ত ডিরেক্টরি সহ - এর অধীন সমস্ত কিছুchmod -R /root পরিবর্তন করে/root । প্রশ্নটি কেবল ডিরেক্টরিগুলির একটি চেইন পরিবর্তন করার বিষয়ে about
200_সুকেস

@ 200_সাকসেস তবে এটির একমাত্র উত্তর নয়;)
ব্রায়াম

প্রশ্নটি পুনরাবৃত্তি সম্পর্কিত নয়, তবে কীভাবে সাবফোল্ডারে নির্বাচনী অ্যাক্সেসের অনুমতি দেওয়ার জন্য প্যারেন্ট ফোল্ডারগুলির একটি শৃঙ্খলে অনুমতি নির্ধারণ করবেন। এটির একমাত্র উত্তর নয় তা বলা আপনার প্রাচীরের মধ্য দিয়ে একটি বাস চালানো একটি দরজা তৈরির অন্য উপায় like
জেএমসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.