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


11

私は何を知っているugoa(所有者、グループ、他の人、すべての)またはrwxの(右/読み取り/実行)、または4,2,1もしくは-fdl私はに読み込もうとしましたが、man chmod首都のかを理解することXchmodはなくありませんでしたそれのエントリー。次に、この記事をposix / chmodで読みましたが、次の箇所で行き詰まっていました。

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

このコード例を示すこの記事も読んでいます。

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

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

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

更新

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

回答:


20

manページは言います:

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

POSIXさんのコメント

パーマ記号Xは、表現しなければならないファイルがディレクトリであるか、または現在の(未修飾の)ファイル・モード・ビットが実行ビットの少なくとも一つを有する場合(S_IXUSR、S_IXGRP、又はS_IXOTH)設定されている場合、ファイルモードビットの部分を検索する/実行します。ファイルがディレクトリではなく、実行ビットが現在のファイルモードビットに設定されていない場合は無視されます。

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

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

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

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

macOSはchmod明らかX+操作のみをサポートしていることに注意してください。)


だから私はそれを見て、「ビットセット」という用語を間違って理解しました。所有者:rootとグループ:rootと権限を持つiノードは、---, ---, ---「ビットセット」のないindoeですか?
Arcticooling

はい、---------ビットが設定されていないことを意味します。あなたは見つけるかもしれない、この質問は便利。
Stephen Kitt

スティーブン、私は「実行ビットセット」(私はと説明します...,...,...)と「無効な実行ビットセット」(私はと説明します---,---,---)の用語の定義を回答の最初に追加すると、それをさらに教訓的にするのに役立つと思いますそして、誰もがそれを逃した可能性を減らします。これは私がもともとこれで落ちたのです。
Arcticooling

@Arcticooling、まあ、許可はビット単位でコード化されています。たとえば、GNUのマニュアルページでchmodは、「指定された各ファイルのファイルモードビットを変更する」などと記載されています。したがって、コンテキストでは、「ビットを実行する」は、 3つの可能な(ugo)+xアクセス許可。私の目には、「ビットが設定されていません」というのは、コンテキストに言及していないため、奇妙に聞こえます。
ilkkachu 2018年

@Arcticooling理解を明確にするためだけに段落を追加しました。「実行ビットセット」...,...,...は実際には何も意味せず、「無効な実行ビットセット」でもありません(何が無効か)。
Stephen Kitt 2018年

5

からman chmod

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

(私の強調)。

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


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

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

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

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

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

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


明確にすることを希望使用Xを


1

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


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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.