web-dev-qa-db-ja.com

「chmod u + x」と「chmod + x」

chmod u+xchmod +xの違いは何ですか?スクリプトを実行可能にするためにu+xを使用するという多くのチュートリアルを見てきました。ただし、uを省略しても効果はないようです。

106
schwiz

chmodのマニュアルページで説明しています。

  • uはユーザーを表します。
  • gはグループを表します。
  • oは他の略です。
  • aはすべてを表します。

つまり、chmod u+x somefileはそのファイルの実行権限の所有者のみに付与されますが、chmod +x somefilechmod a+x somefileと同じです。

chmodのmanページには:

シンボリックモードの形式は[ugoa...][[+-=][rwxXstugo...]...][,...]です。複数のシンボリック操作をコンマで区切って指定できます。

「ugoa」という文字の組み合わせは、ファイルへのユーザーのアクセスを変更します:ファイルを所有するユーザー(u)、ファイルのグループ内の他のユーザー(g)、ファイルのグループ内にない他のユーザー(o)、またはすべてのユーザー(a)。これらのいずれも指定されていない場合、効果は「a」が指定されたようになりますが、umaskに設定されているビットは影響を受けません。

144

+xを実行するだけで、すべてのフラグに適用されます:[u] ser、[g] roup、[o] thers。

詳細については、「 man chmod 」と入力してください。

19
matpie

必要条件

まず、これらの質問と以下のリンクから回答を読むことをお勧めします。

知る必要があるすべての必要な部分を理解するのに役立ちます。


短縮版

  • chmod +xchmod ugo+xと等しい(umask値に基づく)
  • chmod a+xchmod ugo+xと等しい(umask値を考慮せずに)

説明

chmod a+xの結果は、すべての人(所有者、グループ、その他)に実行可能ビットを設定することです。

ただし、chmod +xでは少し注意が必要です。umaskの値を使用し、その値に基づいて、許可されているすべてのユーザーにxを追加します。

したがって、私の環境のumask0002の場合:

$ umask
0002
$ umask -S
u=rwx,g=rwx,o=rx

xをユーザー(所有者)、グループ、その他に追加します。この状況(ほとんどのシステムのデフォルトの状況)では、chmod ugo+xとまったく同じか、chmod a+xと同じです。またはより詳細な形式で:

chmod u+x,g+x,o+x

chmod u+x,g+x,o+xumask -Sの出力との接続を見つけることができますか?

次に、現在のシェルのumask0003に変更します。

$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r

ご覧のとおり、所有者とグループのみが実行可能ビットを取得し、その他は取得しません。 chmod +xchmod u+x,g+xまたはchmod ug+xと等しくなったことを意味します。


質問時間!

umaskchmod +wに設定した後、ファイルで0003を実行するとどうなりますか?

前と同じように、ファイルのusergroupのみに影響します。3も書き込み許可を削除するためです(2)。


ボーナス

chmod -wのようなビットを削除する場合も同じ効果があります。

$ mkdir test
$ stat -c %A test
drwxrwxr-x
$ umask
0002
$ chmod +w test
$ stat -c %A test
drwxrwxr-x
$ chmod a+w test
$ stat -c %A test
drwxrwxrwx
$ chmod -w test
chmod: test/: new permissions are r-xr-xrwx, not r-xr-xr-x
$ stat -c %A test
dr-xr-xrwx
14
Ravexina

chmod u+xは、ユーザーに対してファイルを実行可能にします(グループ所有者または「その他」によって既に実行可能であっても、ユーザーに対してのみ追加します)。

chmod +xまたはchmod a+x(「すべてプラス実行可能ビット」)は、誰でもファイルを実行可能にします。

ディレクトリに対してこれを行うと、代わりにディレクトリが検索可能になります。つまり、+ xパーミッションを持っているディレクトリの内容をリストできます。

7
belacqua
  • chmod u+x fileは、umaskを無視して実行可能ビットをファイルの所有者に追加することを意味します(modは設定されますが、質問はありません)。

  • chmod +x fileは、umask(最初にumaskでチェックしてからmodを適用し、umaskの値に基づいて異なる効果がある可能性がある)を考慮しながら、所有者、グループなどに実行可能ビットを追加することを意味します。


2つのファイルを作成しましょう。

$ touch file1 file2
$ ls -l file1 file2
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:45 file2

umaskを「111」に設定して、実行可能ビットを削除します:umask 111

$ chmod u+x file1
$ chmod  +x file2
$ ls -l file1 file2
-rwxrw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file1
-rw-rw-rw- 1 ravexina ravexina 0 Aug  5 01:47 file2

ご覧のとおり、chmodumaskを無視し、file1は所有者の実行可能ビットを取得しましたが、2番目はumaskの値を考慮しているため何もしませんでした。

1
Ravexina