フォルダーとそのすべての親ディレクトリに読み取りおよび書き込み権限を設定します


17

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疲れます。1つのコマンドで自動的に行う方法


あなたは本当に世界が読めるようにするべきではありません/root
ステファンシャゼラス

回答:


22

これは、シェルで簡単に実行でき、サブディレクトリから開始して上に移動します。

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

これは、fを設定したファイル/ディレクトリから始まり、「/」(またはループの条件で文字列を設定したもの)が見つかるまで、すべての親ディレクトリで機能します。「/」をchmodしません。


ニース、Perlで不必要に物事を複雑にしていることは知っていました。
テルドン

しかし、もしf相対パスであり、私はそれが代わりにそれが相対するもので停止したい場合はどうなり/ますか?
ティム

@StéphaneChazelasありがとう。場合$ffoo/bar、う$f、これまでに変更.?はい、そうdirnameです。ありがとう
ティム

1
@Timは、コマンド「f = `readlink -f <relative_path>`」を使用してfに保存する前に相対パスを絶対パスに変換します
Talespin_Kit

6

または:cshtcshkshzshbashfishyash -o braceexpand

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

zsh

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

または、次のようなglob修飾子関数を定義できます。

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の影響を受けることに注意してください。umaskが含まれていない場合007/rootディレクトリは誰でも読み取り可能になり、アクセス可能になりますが、これは悪い考えです。/root通常、スーパーユーザーのプライベートなもののために、それを公開することは悪い考えです。


リーダー,が何をするのか説明してもらえます{,/subfolder}か?
テルドン

最初の文字列が空で、2番目が空である代替を作成し/subfolderます。そう/root{,/subfolder}プロデュース/rootします/root/subfolder
トリプリー

特に、これはPOSIXに移植できませんsh
-tripleee

2

まあ、あなたは次のような少し複雑なことをすることができます:

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

これが何をするかを見るために、chmod呼び出しをprintに置き換えてください:

$ 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

3
ただし、これはほとんど同じ操作ではありません。 通常のファイルとすべてのディレクトリを含むすべてchmod -R /root変更します/root。問題は、ディレクトリの1つのチェーンのみを変更することです。
200_success

@ 200_successが、それだけが答えではありません;)
Braiam

問題は再帰に関するものではなく、親フォルダーのチェーンにアクセス許可を設定してサブフォルダーへの選択的なアクセスを許可する方法です。それが唯一の答えではないと言うことは、ドアを開けるもう1つの方法として、バスを壁に通すということです。
jmc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.