web-dev-qa-db-ja.com

posix / chmodの大文字Xとは何ですか?

ugoa(所有者、グループ、その他、すべて)またはrwx(read/right/execute)または4,2,1または-fdl、そしてman chmodは、Xの大文字のchmodを理解するためのものですが、エントリがありませんでした。次に、posix/chmodで この記事 を読みましたが、次の箇所で行き詰まっていました。

ターゲットa)がディレクトリである場合にのみ実行可能ビットを設定しますb)ユーザー、グループ、その他のいずれかに対して、少なくとも1つの実行可能ビットが既に設定されています。

このコード例を示す この記事 も読みます:

chmod -R u=rwX,g=rX,o=rX testdir/

所有者(u)、グループ(g)、およびその他(o)に関して、testdir/に再帰的な許可があることを理解していますが、私はまだ首都Xの意図を逃していることを認めます。

おそらく、ここでの教訓的な言い回しは、これにいくらかの光を当てるかもしれません(ここで私がこれを公開する主な理由は、これに関するSEセッションが見つからなかったためです)。

更新

申し訳ありませんが、私は男でそれを逃しました。引数のリストの前にXが表示されるとは思っていませんでしたが、検索ではXではなくXが返されると思いました。

10
Arcticooling

manpage は言う:

ファイルがディレクトリであるか、すでに一部のユーザー(X)の実行権限を持っている場合にのみ実行/検索

[〜#〜] posix [〜#〜] と言う:

perm記号[〜#〜] x [〜#〜]ファイルがディレクトリである場合、または現在の(変更されていない)ファイルモードビットに実行ビット(S_IXUSR、S_IXGRP、またはS_IXOTH)の少なくとも1つが設定されている場合、ファイルモードビットの実行/検索部分を表します。ファイルがディレクトリではなく、実行ビットが現在のファイルモードビットに設定されていない場合は、無視されます。

これは条件付き許可フラグです。chmodは現在処理しているものをすべて調べ、それがディレクトリの場合、または現在の許可(所有者、グループなど)に実行ビットが設定されている場合は、次のように機能します。要求された権限がxである場合、それ以外の場合は無視されます。 chmodが特定のX命令を適用するときに条件が検証されるため、a-x,a=rwXを使用して同じ実行で実行ビットをクリアして、ディレクトリに実行可能ビットのみを設定できます。

statの出力の「アクセス」部分、またはls -lの最初の列を確認すると、ファイルに実行ビットが設定されているかどうかを確認できます。実行ビットはxで表されます。 -rwxr-xr-xは実行可能ファイルに共通であり、実行可能ビットが所有者、グループ、およびその他のユーザーに設定されていることを示します。 -rw-r--r--は他のファイルに共通であり、実行可能ビットが設定されていないことを示します(ただし、読み取りビットは全員に設定され、書き込みビットは所有者に設定されます)。詳細については、 NIXの権限とその属性について を参照してください。

したがって、あなたの例では、u=rwXは、所有者権限をすべての場合に読み取りと書き込みに設定し、ディレクトリと実行可能ファイルの場合は実行します。同様に、グループ(g=rX)とその他(o=rX)の場合も、ディレクトリと実行可能ファイルの読み取りと実行を行います。

この演算子の目的は、ユーザーがchmodにさまざまなファイルとディレクトリを与え、正しい実行権限を取得できるようにすることです(無効な実行ビットが設定されているファイルはないと想定)。 (従来のfind . -type f -exec chmod 644 {} +およびfind . -type d -exec chmod 755 {} +コマンドのように)ファイルとディレクトリを区別する必要がなくなり、実行可能ファイルを適切な方法で処理しようとします。

macOS chmod+操作に対してXのみをサポートしているようです。)

19
Stephen Kitt

から man chmod

文字rwxXstは、影響を受けるユーザーのファイルモードビットを選択します:読み取り(r)、書き込み(w)、実行(またはディレクトリを検索)(x)、実行/検索は、ファイルがディレクトリ、または一部のユーザー(X)の実行権限を既に持っている(X)、実行時にユーザーまたはグループIDを設定する、制限付き削除フラグまたはスティッキービット(t)。

(強調鉱山)。

しかし、それはそれをあまり明確にしません。 この記事には2つのルールがあります 内容を明確にします:


たとえば、ディレクトリに対して次のchmodコマンドを発行します。

# chmod -R u=rwX,g=rX,o=rX testdir/`  

上記のコマンドは、大文字のXを使用して、次の2つのルールに従って実行可能属性を設定します。

  1. ファイルがディレクトリの場合、所有者、グループ、およびワールドの実行可能属性が設定されます。つまり、このディレクトリに入ることができます。

  2. ファイルが通常のファイルである場合、ファイルに実行ビットがすでに設定されていれば、実行可能属性が許可に追加されます。ファイルに実行ビットが設定されていない場合、何も追加されません。

小文字のxを使用すると、1つのコマンドだけでこの結果を得るのは不可能です。


use[〜#〜] x [〜#〜]

5
Isaac

この答えを高く評価しないでください。これは、上記のStephen Kittの回答から私が理解したものであり、正しいと認めました。


1)大文字のXのようにa=rwXは言う:見つかったすべてのディレクトリはxを取得し、3つの許可グループの1つに少なくとも1つの実行可能ビットを含むすべての通常のファイルが取得されます。 3つのグループすべてのx。

2)a-xのコンボ(すべてのファイルが実行ビットを失うことを保証します)、and後続のa=rwXは:読み取りを取得し、どこにでもビットを書き込み、ディレクトリでのみ実行ビット。

1
user9303970