Linuxでフォルダーとそのすべてのサブフォルダーおよびファイルのアクセス許可を1ステップで変更するにはどうすればよいですか?[閉まっている]


1806

Linuxの1つの手順(コマンド)で、フォルダーとそのすべてのサブフォルダーおよびファイルのアクセス許可を変更したいと思います。

私はすでに以下のコマンドを試しましたが、言及されたフォルダに対してのみ機能します:

chmod 775 /opt/lampp/htdocs

設定する方法があるchmod 755ため/opt/lampp/htdocsとサブフォルダとファイルを含めてその内容のすべては?

また、将来、内に新しいフォルダまたはファイルを作成した場合htdocs、そのアクセス許可を自動的にどのように設定でき755ますか?

私もこのリンクを見ました:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal


4
あなたは書くつもりchmod 75 /opt/lampp/htdocsでしたchmod 755 /opt/lampp/htdocsか、それとも本当にそうでしたか?
HelloGoodbye 2016年

233
Linuxについて4番目に投票された質問が「トピック外としてクローズ」であるという事実は陽気です。プログラマ以外の誰がchmodを気にしますか?これはトピック外ですか?「許可」、「フォルダ」、および「cmod」がトピックから外れているのにタグでさえあるのはなぜですか?
アーサーデント

8
@ArthurDent。なぜなら、この質問は(完全に有効で役立つものの)、SuperUserやServerFaultなどのシステムに焦点を当てたSEサイトにより適しているからです。プログラミングとは明確に関係ありません。
タイムマー2018年

26
@timelmer確かに、もう一度質問しますが、「permissions」、「folder」、および「cmod」タグはなぜですか。cmodがプログラミングに「明示的に」使用されるのはいつですか?
Arthur Dent

9
本当にうるさくしたい場合、Bashは実際にはスクリプト言語ですが、PHPもそうです。
タイムマー

回答:


2957

他の答えは正解chmod -R 755です。つまり、ツリー内のすべてのファイルとサブフォルダーにこれらの権限が設定されます。しかし、なぜあなたはそうしたいのですか?ディレクトリには意味があるかもしれませんが、なぜすべてのファイルに実行ビットを設定するのですか?

私が本当にやりたいことは、ディレクトリを755に設定し、ファイルをそのままにするか、それらを644に設定することだと思います。これには、findコマンドを使用できます。例えば:

すべてのディレクトリを755(drwxr-xr-x)に変更するには:

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

すべてのファイルを644(-rw-r--r--)に変更するには:

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;

231
誰か{} \;が最後に行が何を意味するかを説明したいですか?
Nilzor 2013年

307
@Nilzor chmod 644 {} \;は、find各ファイルに対して実行されるコマンドを指定します。{}はファイルパスに置き換えられ、セミコロンはコマンドの終わりを示します(エスケープされている場合、それ以外の場合はの代わりにシェルによって解釈されますfind)。
tobbez 2013年

25
「しかし、なぜすべてのファイルに実行ビットを設定するのですか?」Ubuntu / Linuxは
初めて

12
@FlavorScape Wombleは、findによって返されたディレクトリにのみ実行ビットを設定しています。ディレクトリの実行権限により、ユーザークラスはそのディレクトリの内容を一覧表示し、そこにcdすることができます。一般的に言えば、どちらか一方のみを設定するという奇妙なエッジのケースがあるかもしれませんが、アクセスできるようにするために、ディレクトリ上のrとxの両方が必要です。詳細については、このガイドを参照してください:nixsrv.com/llthw/ex23
Alexandr

25
sleepynateを除いて、すべての応答は、将来作成されるファイル/フォルダーへのアクセス許可の設定に関する彼の質問の側面に対処するために無視されました。
JGarrido、2014年

781

-Rオプションをチェックします

chmod -R <permissionsettings> <dirname>

将来的には、最初にmanページを確認することで、多くの時間を節約できます。

man <command name>

したがって、この場合:

man chmod

147
なにそれman
アダム

36
マニュアルページを意味し、コマンドのマニュアルページを表示するLinuxコマンドです(ほとんどのLinuxコマンドにはマニュアルページがあります)。man lsまたはman manを試してください。
スティーブロビラード

8
これはMac OS Xのターミナルでは機能しませんでした。そこで「chmod -R <permissionsettings> <dirname> *」を実行すると機能しました。
EinarÓlafsson2012年

127
ここまで投稿したり、Googleを使用したりする方が、実際にはを使用するよりも速いと思いますman。特に、のようなもののためにgrepあなたが新しく追加された場合はどこにmanそれがドキュメントの例、まだGoogleの検索またはSO秒以内に例を提供するために非常に時間がかかることができます。
ely 2013年

17
ちなみに、Linuxになじみのない人は、人になじみがないかもしれません。私はそれが存在することだけを知っていますが、それを使用する方法を理解しようとすると、それ自体でグーグルの冒険が必要になります。おそらく価値のあるベンチャーかもしれませんが、Google経由でこの非常に多くの投稿を見つけ、それが私が求めていた正確な質問に答えたことに気付くはずです。リソース、私の友人。リソースは非常に貴重です。そして、あなたはこれが無意味で彼が男をチェックしただけであるはずだと思うかもしれませんが、これは私と他の何千人もの人々(千人も)を助けました。考えてみてください。
Soundfx4 2016

391

すべてのファイルのアクセス権をa+rに、すべてのディレクトリのアクセス権をに設定し、a+xサブディレクトリツリー全体で再帰的に設定する場合は、次のコマンドを使用します。

chmod -R a+rX *

X(それは首都であるX、ない小さなx!)(彼らはすでに誰かのために実行可能でない限り)ファイルのために無視されますが、ディレクトリのために使用されています。


27
すばらしい答えです。*は隠しファイル(ドットで始まる名前)とは一致しないことに注意してください。したがって、を使用する方が理にかなっています。(現在のディレクトリ)。
アーロンアダムス

21
これが正解です。私の場合、すべてのディレクトリを775に、すべてのファイルを664に設定したいと考えました。@Peteの優れた答えにより、chmodドキュメントにたどり着きましたchmod -R g+wX .。ブラボー!
chadoh 2013

8
x彼らはすでにそれを持っている場合、これはファイルを削除しません。
Benoit Duffez 2014年

5
完全に明確でない場合、大文字のXは「すべてのディレクトリを実行可能にする」ことを意味します(ファイルは不可)。
Matt Browne

4
@BenoitDuffez目標がファイルから実行可能ビットも削除することである場合は、「a-x + rX」などのディレクティブを組み合わせて、すべてから「x」を削除し、「r」をすべてに設定し、「x」をディレクトリのみに設定できます。 。
nunks '19 / 12/16

144

すべてのファイルとサブフォルダを再帰的に走査するために-Rwith chmodを使用できます。

現在のユーザーまたは別のユーザーによってインストールされているLAMPに依存するため、sudoが必要になる場合があります。

sudo chmod -R 755 /opt/lampp/htdocs

17
どういうわけか、機能sudo chmod 755 -R /directoryしませんでしたが、機能sudo chmod -R 755 /directoryしました。変だ。ちなみにMac OS Xを使っています。
lomse

8
これは私の経験では正しいです。フラグは、文字列内ではなく、chmodの直後に指定する必要があります。
オリオンラッシュ2016

1
上記のコマンドは間違っています。正しい再帰コマンドは次のとおりです。sudo chmod -R 755 / opt / lampp / htdocs注:-Rは755より前でなければなりません
Sandip Patel-SM

このソリューションは、Redhatで正常に機能しています。ありがとう!
Lavande 2017

RHELで問題なく動作し、動作しsudo chmod 755 -R
AnBisw

79

正しい再帰コマンドは次のとおりです。

sudo chmod -R 755 /opt/lampp/htdocs

-R:現在のフォルダーを含むすべてのサブフォルダーを変更する


1
こんにちは、パスに関係なく、現在のフォルダーは1つですか?
シャリーフ

OSXの使用:sudo chmod 777 logs / -R GETTING:chmod:-R:No
such

76

すべてのサブフォルダーに(再帰的に)設定するには、-Rを使用します。

chmod 755 /folder -R

そして、umaskを使用してデフォルトを新しいフォルダー/ファイルに設定しますcd / folder umask 755


24
umaskを755に設定しないでください。作成したファイルやディレクトリを一覧表示、読み取り、使用することはできません。
sleepynate

14
umask 022ですか?
Xkeeper

4
これにより、ファイルを含むすべてが755に設定されます。
Patrick Mutwiri、2015年

@sleepynate一体何を話しているの?755は、所有者は読み取り、書き込み、実行が可能で、他のすべてのユーザーは読み取りと実行はできるが、オブジェクトへの書き込みはできないことを
意味

2
@NicHartley @ svin83 umaskは、アクセス許可からマスクされるビットなので、事実上chmodの逆です。 λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w
sleepynate

51

chmod 755 -R /opt/lampp/htdocs権限を再帰的に設定します。権限を設定した後に作成されたこのディレクトリのみでファイルの権限を自動的に設定する方法はありませんが、を設定することで、システム全体のデフォルトのファイル権限を変更できますumask 022


9
sleepynateの答えは唯一正しいものです。ポスターは2つの質問をしました:1)ファイルとフォルダーのアクセス許可を修正する方法、および2)デフォルトを変更する方法(「将来の」ファイルを意味します)。ネイトが言ったように、最初のものは「chmod」で、2番目は「umask」でです。また、1つのディレクトリでumaskを変更する方法がないことも追加します... umaskは、ユーザーごとに「オールオアナッシング」です。しかし、何もあなたと一緒に新しいユーザー、共有グループの作成からあなたを停止していないので、あなただけの「sudoを-u someuserができることを「[ファイルを作成]ボックスの外側を少し考えだということ、それは罰金の回避策です。。
スコット・プリヴェ

私はあなたが正しいと思いますが、inherit多くの場合の解決策になることはできませんか、それともNTFS-3Gでのみ機能しますか?
Sebastian Schlicht、2015

フォルダへのアクセス権を付与しないと、将来的に作成される可能性があります。たとえばmyforlder、他の場所(PCなど)からこのターゲットディレクトリ(サーバー上)にフォルダをコピーできなくなる可能性があります。これにより、新しいフォルダが作成されますmyfolder あなたがそうする権限を持っていない名前のターゲットディレクトリ。私が持っているようにroot、私はただ使用しますchown -R username:usergroup /directory
ジェイソンゴール

27

スーパーユーザーのnikによって与えられたこの回答を検討し、次のようなすべてのファイル/フォルダーに「1つのchmod」を使用することができます。

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)

9
警告、コマンドラインの制限に達するのは簡単です。
Lothar 2015

1
私はこのエラーを抱えています:-bash:/ bin / chmod:引数リストが長すぎます
Oleg Abrazhaev

エラーを克服するためにの-execオプションを使用findすることをお勧めしArgument list too longます。
miravalls 2018


20

使用する:

sudo chmod 755 -R /whatever/your/directory/is

ただし、注意してください。間違ったファイル/フォルダーのアクセス許可を変更すると、本当に害を及ぼす可能性があります。


20

次に、ディレクトリを775に、ファイルを664に設定する別の方法を示します。

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

長いように見えるかもしれませんが、次の3つの理由からかなりクールです。

  1. ファイルシステムを2回ではなく1回だけスキャンします。
  2. ファイルの処理方法とディレクトリの処理方法をより適切に制御できます。これは、おそらくファイルではなくディレクトリに適用したいsticky bitなどの特殊モードで作業する場合に便利です。
  3. manページから直接テクニックを使用します(以下を参照)。

このソリューションと(Peter Mortensenのソリューションのように)2つの検索コマンドを使用するだけのパフォーマンスの違い(ある場合)は確認していません。しかし、マニュアルで同様の例を見ることは励みになります。

man findページの例:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

乾杯


それでは、openmod $ folderを実行できるように、それをシェルスクリプトでどのように変換するのでしょうか。
STR

人々、xargsを使用してください。何千ものプロセス呼び出しを節約します。
seanahern

13

chmod -R 755 directory_name動作しますが、新しいファイルをどのようにして755に保持しますか?ファイルの権限がデフォルトの権限になります。


やりましたが、そこからターミナルを開くことができません。直せない。
Kavindu Gayantha、

9

Mac OS X 10.7(Lion)の場合:

chmod -R 755 /directory

そして、はい、他の人が言うように、これを行うときは注意してください。


9

適切なファイルとディレクトリがchmod-ed / permissions forそれらに適切であることを確認したい。必要なすべてのディレクトリ

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

そして、すべての画像について、JavaScript、CSS、HTML ...まあ、あなたはそれらを実行すべきではありません。だから使う

chmod 644 img/* js/* html/*

ただし、すべてのロジックコード(PHPコードなど)では、ユーザーがそのコードを表示できないように権限を設定する必要があります。

chmod 600 file

6

Adamは、/opt/lampp/htdocsディレクトリを操作するすべてのプロセスのumask値を変更する方法を尋ねていたと思います。

ユーザーファイル作成モードマスク(umask)は、新しく作成されたファイルのファイル権限を決定するために使用されます。新しいファイルのデフォルトのファイル権限を制御するために使用できます。

したがって、ある種のftpプログラムを使用してファイルをアップロードする/opt/lampp/htdocs場合は、必要なumaskを使用するようにftpサーバーを構成する必要があります。

ファイル/ディレクトリが例えばphpによって作成された場合、phpコードを修正する必要があります

<?php
umask(0022);
// other code
?>

bashセッションから新しいファイル/フォルダーを作成する場合は、シェルプロファイル〜/ .bashrcにumask値を設定できます。/etc/bashrcまたは/etc/profile、すべてのユーザーに対してumask またはファイルを設定できます。以下をファイルに追加します。umask022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

すでに作成されているファイルのアクセス許可を変更するには、findを使用できます。お役に立てれば。


4

ファイルを見つけて適用chmodするには、2つの答えがあります。1つ目はfindファイルで、chmod検出されたとおりに適用されます(@WombleGoneBadの提案に従います)。

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

2番目の解決策は、findコマンドを使用してすべてのファイルのリストを生成し、このリストをchmodコマンドに提供することです(@lamgeshによって提案されています)。

chmod 755 $(find /path/to/base/dir -type d)

これらのバージョンはどちらも、findコマンドによって返されるファイルの数が少ない限りうまく機能します。2番目のソリューションは、見た目が良く、最初のソリューションより読みやすくなっています。多数のファイルがある場合、2番目のソリューションはエラーを返します。Argument list too long.

だから私の提案は

  1. chmod -R 755 /opt/lampp/htdocsすべてのファイルとディレクトリの権限を一度に変更したい場合に使用します。
  2. 使用しfind /opt/lampp/htdocs -type d -exec chmod 755 {} \;ているファイルの数が非常に多い場合に使用します。この-type xオプションは、特定のタイプのファイルのみを検索します。dはディレクトリの検索に使用され、fはファイル、lはリンクを検索します。
  3. 使用しchmod 755 $(find /path/to/base/dir -type d)そう
  4. どんな状況でも最初のものを使用する方が良い

2

とても簡単です。

ターミナルでファイルマネージャに移動します。例:sudo nemo。行く/opt/クリックし、プロパティ→許可を。そして、その他。最後に、作成と削除を変更し、ファイルアクセスを読み取りと書き込みに変更し、[適用]ボタンをクリックします...そして作業します。


スードネモとは?
Vikranth Inti
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.