chmod u+x
とchmod +x
の違いは何ですか?スクリプトを実行可能にするためにu+x
を使用するという多くのチュートリアルを見てきました。ただし、u
を省略しても効果はないようです。
chmod
のマニュアルページで説明しています。
つまり、chmod u+x somefile
はそのファイルの実行権限の所有者のみに付与されますが、chmod +x somefile
はchmod a+x somefile
と同じです。
シンボリックモードの形式は
[ugoa...][[+-=][rwxXstugo...]...][,...]
です。複数のシンボリック操作をコンマで区切って指定できます。「ugoa」という文字の組み合わせは、ファイルへのユーザーのアクセスを変更します:ファイルを所有するユーザー(u)、ファイルのグループ内の他のユーザー(g)、ファイルのグループ内にない他のユーザー(o)、またはすべてのユーザー(a)。これらのいずれも指定されていない場合、効果は「a」が指定されたようになりますが、umaskに設定されているビットは影響を受けません。
+x
を実行するだけで、すべてのフラグに適用されます:[u] ser、[g] roup、[o] thers。
詳細については、「 man chmod
」と入力してください。
まず、これらの質問と以下のリンクから回答を読むことをお勧めします。
知る必要があるすべての必要な部分を理解するのに役立ちます。
chmod +x
はchmod ugo+x
と等しい(umask
値に基づく)chmod a+x
はchmod ugo+x
と等しい(umask
値を考慮せずに)chmod a+x
の結果は、すべての人(所有者、グループ、その他)に実行可能ビットを設定することです。
ただし、chmod +x
では少し注意が必要です。umask
の値を使用し、その値に基づいて、許可されているすべてのユーザーにx
を追加します。
したがって、私の環境のumask
が0002
の場合:
$ 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+x
とumask -S
の出力との接続を見つけることができますか?
次に、現在のシェルのumask
を0003
に変更します。
$ umask 0003
$ umask
0003
$ umask -S
u=rwx,g=rwx,o=r
ご覧のとおり、所有者とグループのみが実行可能ビットを取得し、その他は取得しません。 chmod +x
がchmod u+x,g+x
またはchmod ug+x
と等しくなったことを意味します。
umask
をchmod +w
に設定した後、ファイルで0003
を実行するとどうなりますか?
前と同じように、ファイルのuser
とgroup
のみに影響します。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
chmod u+x
は、ユーザーに対してファイルを実行可能にします(グループ所有者または「その他」によって既に実行可能であっても、ユーザーに対してのみ追加します)。
chmod +x
またはchmod a+x
(「すべてプラス実行可能ビット」)は、誰でもファイルを実行可能にします。
ディレクトリに対してこれを行うと、代わりにディレクトリが検索可能になります。つまり、+ xパーミッションを持っているディレクトリの内容をリストできます。
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
ご覧のとおり、chmod
はumask
を無視し、file1は所有者の実行可能ビットを取得しましたが、2番目はumaskの値を考慮しているため何もしませんでした。