ルートの世界を読みやすくする方法は?

ルートの世界を読みやすくする方法は?

どのアイテムを作るには(私が理解したところによると、私が間違っている場合は訂正してください。X自体には誰でも読むことができる(4)ビットセットが必要です。目次そのパスのコンポーネントには、グローバルに実行可能な(1)ビットセットが必要です。 )最も簡単な方法は何ですか?

FWIW、私の推測は次のとおりです。

function _mkwr {
    chmod o+x $1 || return 0
    parent=$( dirname $1 )
    if [[ $parent = $1 ]]; then return 0; fi
    _mkwr $parent
}

function mkwr {
    chmod o+Xr $1
    _mkwr $( dirname $1 )
}

答え1

あなたの言葉が部分的に正しいです。ディレクトリ内のx権限は、そのディレクトリを使用してディレクトリが参照するオブジェクトを取得する権限を表します。ディレクトリを読み取る権限、つまりディレクトリが参照するオブジェクトの名前を一覧r表示する権限が必要です。できる限り長く権限がある場合は)正確な名前を指定できますが、リストすることはできません。この権限は、ディレクトリの変更(参照オブジェクトの名前の変更、参照の削除、または新しい参照の追加)を意味します。繰り返しますが、これは他の権限とは完全に独立しています。r----xw

一方、権限には3つのセットがあります。ユーザー、これグループ他の人(時々名前がつくこともあるウゴ)。ユーザービットセットはファイルの所有者に使用され、グループはファイルのグループに属するユーザーに使用されます。権限を確認するときにアクセスしようとしているユーザーがファイルの所有者である場合は、そのユーザー権限が適用されます。ユーザーがファイルの所有者ではなく、ファイルのグループに属している場合は、グループ権限が適用されます。前の条件が適用されない場合にのみ追加の権限が確認されます。

権限ビットは完全に独立しているため、上記は所有者またはグループの両方にアクセスできませんが、他の誰もが完全な権限を持つファイルを持つことができます。少し奇妙ですが、一貫してシンプルです。

答え2

権限については正しいです。すべてのディレクトリコンポーネントは世界中で実行可能でなければならず、アイテム自体は誰でも読むことができなければなりません(ディレクトリの場合はおそらく世界中で実行可能でなければなりません)。

別の問題は、パスにシンボリックリンクが含まれている場合は、シンボリックリンクをグローバル実行可能ファイルとして解決するために必要なすべての中間ディレクトリを作成する必要があることです。

シンボリックリンクのないパスがある場合は、単純なループがそのタスクを実行します。

make_directory_world_accessible () {
  dir=$1
  case $dir in /*) :;; *) dir=$PWD/$dir;; esac
  while [ -n "$dir" ]; do
    chmod a+x "$dir"
    slashes=${dir##*[!/]}; dir=${dir%$slashes}; dir=${dir%/*}
  done
}

シンボリックリンクを使用する場合は、すべてのシンボリックリンクを手動で検索し、各ディレクトリコンポーネントに対して繰り返す必要があります。カーネルはこれを内部的に実行しますが、プロセスを公開しません。たとえば、シンボリックリンクがある場合は、/foo/bar -> one/two/threemake/foo/oneとpublicを実行するだけでなく、sumがシンボリックリンクであることを確認し、/foo/twoそれに応じて繰り返す必要があります。onetwo

関連情報