web-dev-qa-db-ja.com

「chmod + x」と「chmod 755」の違いは何ですか?

ファイルを実行可能にするということになると、chmod 755chmod +xの違いは何ですか。また、いつ使用しますか?私はこれまでchmod +xのみを使用し、何かを読んだだけでchmod 755を使用しましたが、chmod 755またはchmod +xを使用する方が良いかどうかわかりませんでした。

58
Darth4212

短縮版:

それらを比較できるようにするには、同じ視点からそれらを見る必要があります。

  • chmod +xchmod ugo+xと等しい(umask値に基づく)
  • chmod 755chmod u=rwx,go=rxと等しい

説明:

まず、次のことを知っておく必要があります。

  1. +は、この許可をファイルが既に持っている他の許可に追加することを意味します。
  2. =は、すべての権限を無視し、提供されたとおりに正確に設定することを意味します。

    • したがって、「読み取り、書き込み、実行、スティッキービット、suid、およびguid」はすべて無視され、指定されたもののみが設定されます。
  3. 読み取り= 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は効果がなくなります。
  • 他のMOD(権限)には影響しません。
  • u+xを使用して、実行可能ビットのみを所有者に追加することもできます。

755を使用して、以下を指定しています:

  • 7-> u=rwx(所有者は4 + 2 + 1)
  • 5-> g=rx(グループの場合は4 + 1)
  • 5-> o=rx(その他の場合は4 + 1)

したがって、chmod 755chmod u=rwx,g=rx,o=rxまたはchmod u=rwx,go=rxのようなものです。

enter image description here

140
Ravexina

chmod +xは、すべてのユーザーの実行許可を既存の許可に追加します。

chmod 755は、ファイルの755パーミッションを設定します。

755は、所有者には完全な許可、他のユーザーには読み取りおよび実行の許可を意味します。

37
Pilot6

それを見る別の方法(私が理解しやすいと思う)は、chmod +xが許可を相対的に設定している一方で、chmod 755はそれらを設定していますabsolutely

chmod 755がファイルに対して実行された後、そのパーミッションwillは755、またはrwxr-xr-xになります。

chmod +xは、既存のアクセス権を取得し、addファイルへの実行アクセス権を取得します。

7

詳細については、 chmod manページを確認することをお勧めします。権限を変更するという同じタスクを実行するために、chmodコマンドで使用可能な2つの異なる操作モードが表示されています。

オクタルモードは数字を使用しており、ファイルのアクセス権全体を設定します。文字モードは文字を使用しており、通常は既存の権限を変更するためにのみ使用されます。

chmod 755rwxr-xr-xを設定し、chmod +xはパーミッションを調整して、所有者、グループ、およびワールドのすべてに実行可能なパーミッションを追加します。 rwxr--r--のデフォルトのファイル許可を想定すると、rwxr-xr-xの755と同じ許可に調整されます。

6
TopHat

違いは、設定される権限と、設定に使用するモードです。

chmod +xを使用して、所有者、所有者グループ、および他のユーザーのすべてに実行可能ビットを設定します。これは、シンボリックモードと呼ばれます。 man chmodを引用するには:

演算子+は、選択したファイルモードビットを各ファイルの既存のファイルモードビットに追加します。 -それらを削除します。および=を指定すると、それらが追加され、言及されていないビットが削除されますが、ディレクトリの言及されていないユーザーおよびグループIDビットは影響を受けません。

chmod 755を使用する場合、8進数を使用します。8進数のバイナリ表現は、特定の許可ビットを設定するために使用されます。最初(左)の3ビットは所有者のアクセス許可に対応し、中間の3ビットはグループのアクセス許可に対応し、最後(右端)のビットは他のすべてのユーザーのアクセス許可に対応します。ビットの順序は常に同じですread,write,executeまたはrwxしたがって、順序がまったく同じであるため、バイナリ表現に変換されると個々の番号は、対応する位置ビットに対応する許可ビットを設定しますnumberは1で、0の設定を解除します。具体的には:

  • 8進数7は2進数で111であるため、所有者の読み取り、書き込み、実行のすべてのビットを設定しています。 rwxが設定されています。
  • 8進数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
5

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>形式を使用し、デルタだけでなくすべてのビットを指定する必要があることを理解してください。

3
gowenfawr

これらの美しい答えに加えて、小さいながらもおそらく重要な違いに言及したいと思います。コマンドchmod 755 filechmod 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
1
mook765