ファイルを実行可能にするということになると、chmod 755
とchmod +x
の違いは何ですか。また、いつ使用しますか?私はこれまでchmod +x
のみを使用し、何かを読んだだけでchmod 755
を使用しましたが、chmod 755
またはchmod +x
を使用する方が良いかどうかわかりませんでした。
それらを比較できるようにするには、同じ視点からそれらを見る必要があります。
chmod +x
はchmod ugo+x
と等しい(umask
値に基づく)chmod 755
はchmod u=rwx,go=rx
と等しいまず、次のことを知っておく必要があります。
+
は、この許可をファイルが既に持っている他の許可に追加することを意味します。=
は、すべての権限を無視し、提供されたとおりに正確に設定することを意味します。
読み取り= 4、書き込み= 2、実行= 1
以下に、その背後にあるバイナリロジックを示します(興味がある場合)。
Symbolic: r-- -w- --x | 421
Binary: 100 010 001 | -------
Decimal: 4 2 1 | 000 = 0
| 001 = 1
Symbolic: rwx r-x r-x | 010 = 2
Binary: 111 101 101 | 011 = 3
Decimal: 7 5 5 | 100 = 4
/ / / | 101 = 5
Owner ---/ / / | 110 = 6
Group ------/ / | 111 = 7
Others ---------/ | Binary to Octal chart
+x
を使用すると、実行可能ビット(x
)を所有者、グループなどに追加(+
)するように指示されます。
ugo+x
またはu+x,g+x,o+x
と等しいx
の場合、それらはすべて考慮されます。 @Rinzwindが指摘したように、それはumask
値に基づいており、umask
が許可する値にビットを追加します。 o+r
のようなターゲットを指定した場合、umask
は効果がなくなります。u+x
を使用して、実行可能ビットのみを所有者に追加することもできます。755
を使用して、以下を指定しています:
u=rwx
(所有者は4 + 2 + 1)g=rx
(グループの場合は4 + 1)o=rx
(その他の場合は4 + 1)したがって、chmod 755
はchmod u=rwx,g=rx,o=rx
またはchmod u=rwx,go=rx
のようなものです。
chmod +x
は、すべてのユーザーの実行許可を既存の許可に追加します。
chmod 755
は、ファイルの755
パーミッションを設定します。
755
は、所有者には完全な許可、他のユーザーには読み取りおよび実行の許可を意味します。
それを見る別の方法(私が理解しやすいと思う)は、chmod +x
が許可を相対的に設定している一方で、chmod 755
はそれらを設定していますabsolutely。
chmod 755
がファイルに対して実行された後、そのパーミッションwillは755、またはrwxr-xr-x
になります。
chmod +x
は、既存のアクセス権を取得し、addファイルへの実行アクセス権を取得します。
詳細については、 chmod manページを確認することをお勧めします。権限を変更するという同じタスクを実行するために、chmodコマンドで使用可能な2つの異なる操作モードが表示されています。
オクタルモードは数字を使用しており、ファイルのアクセス権全体を設定します。文字モードは文字を使用しており、通常は既存の権限を変更するためにのみ使用されます。
chmod 755
はrwxr-xr-x
を設定し、chmod +x
はパーミッションを調整して、所有者、グループ、およびワールドのすべてに実行可能なパーミッションを追加します。 rwxr--r--
のデフォルトのファイル許可を想定すると、rwxr-xr-x
の755と同じ許可に調整されます。
違いは、設定される権限と、設定に使用するモードです。
chmod +x
を使用して、所有者、所有者グループ、および他のユーザーのすべてに実行可能ビットを設定します。これは、シンボリックモードと呼ばれます。 man chmod
を引用するには:
演算子+は、選択したファイルモードビットを各ファイルの既存のファイルモードビットに追加します。 -それらを削除します。および=を指定すると、それらが追加され、言及されていないビットが削除されますが、ディレクトリの言及されていないユーザーおよびグループIDビットは影響を受けません。
chmod 755
を使用する場合、8進数を使用します。8進数のバイナリ表現は、特定の許可ビットを設定するために使用されます。最初(左)の3ビットは所有者のアクセス許可に対応し、中間の3ビットはグループのアクセス許可に対応し、最後(右端)のビットは他のすべてのユーザーのアクセス許可に対応します。ビットの順序は常に同じですread,write,execute
またはrwx
したがって、順序がまったく同じであるため、バイナリ表現に変換されると個々の番号は、対応する位置ビットに対応する許可ビットを設定しますnumberは1で、0の設定を解除します。具体的には:
7
は2進数で111であるため、所有者の読み取り、書き込み、実行のすべてのビットを設定しています。 rwx
が設定されています。5
はバイナリで101であるため、読み取りと実行を設定しますが、書き込みビットは無効にします。グループと他のユーザーは5であるため、これら2つのカテゴリには同じ権限があります。したがって、r-x
が設定されます。ここに小さなデモがあります:
bash-4.3$ touch file1 file2
bash-4.3$ chmod +x file1
bash-4.3$ chmod 755 file2
bash-4.3$ ls -l file1 file2
-rwxrwxr-x 1 xieerqi xieerqi 0 7月 6 13:54 file1
-rwxr-xr-x 1 xieerqi xieerqi 0 7月 6 13:54 file2
1つの重要な違いは、chmod +はumask制限の対象となり、chmod <octal>は対象外です
次の例を考えてみましょう。
$ ls -l foo bar
---------- 1 gowenfawr users 0 Jul 7 16:40 bar
---------- 1 gowenfawr users 0 Jul 7 16:39 foo
$ umask
0022
$ chmod +w bar
$ umask 0002
$ chmod +w foo
$ ls -l foo bar
--w------- 1 gowenfawr users 0 Jul 7 16:40 bar
--w--w---- 1 gowenfawr users 0 Jul 7 16:39 foo
$
したがって、umaskの設定に適した方法でアクセス許可をデルタに変更する場合は、「+」構文を使用します。ただし、umaskに関係なく絶対に設定する場合は、<octal>形式を使用し、デルタだけでなくすべてのビットを指定する必要があることを理解してください。
これらの美しい答えに加えて、小さいながらもおそらく重要な違いに言及したいと思います。コマンドchmod 755 file
はchmod 0755 file
と同等です。 SETUIDビットまたはSETGIDビットが設定されているファイルでこのコマンドを実行すると、SETUID/SETGIDビットが削除されます。 chmod +x file
は、SETUID/SETGIDビットをそのままにします。これは次の例で確認できます。
〜$ touch test 〜$ chmod u + s test 〜$ ll test -rwSrw-r-- 1 mook mook 0 Sep 14 00:49 test 〜$ chmod + x test 〜$ ll test -rwsrwxr-x 1 mook mook 0 Sep 14 00:49 test 〜$ chmod 755 test 〜$ ll test -rwxr-xr-x 1 mook mook 0 Sep 14 00:49 test