어떤 아이템을 만들려면 (제가 이해한 바에 따르면, 제가 틀렸다면 정정해 주십시오. 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--
이름을 나열할 수 있지만 개체에 액세스할 수는 없는 경우, 그렇다면 --x
개체에 액세스할 수 있는 한 오랫동안 권한이 있는 경우) 정확한 이름을 제공할 수는 있지만 나열할 수는 없습니다. 이 w
권한은 디렉터리 수정(예: 참조 개체 이름 바꾸기, 참조 삭제 또는 새 참조 추가)을 의미합니다. 다시 말하지만 이는 다른 권한과 완전히 독립적입니다.
반면에 권한에는 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/three
make /foo/one
및 public을 수행해야 할 뿐만 아니라 sum이 심볼릭 링크인지 확인 /foo/two
하고 그에 따라 반복해야 합니다.one
two