답변:
해석 1 : 디렉토리는 파일 시스템의 하위 공간입니다. 하위 디렉토리를 만들어 하위 하위 공간으로 세분화 할 수 있습니다. 디렉토리의 소유자는 foo
서브 스페이스 내부의 모든 것을 제어 할 수 있어야합니다 foo/bar
, foo/bar/qux
등
해석 2 : 디렉토리는 파일 시스템의 서브 스페이스입니다. 모든 디렉토리는 상위 디렉토리라고하는 다른 디렉토리에 연결됩니다. 디렉토리의 소유자 foo
는 서브 스페이스 내부의 모든 것을 제어 할 수 있습니다. 그러나 서브 디렉토리 foo/bar
의 경우 소유자 는 내부에 첨부 할 수는 있지만 첨부 할 수 foo
없는지 여부를 제어 bar
할 수 있습니다 . 소유자 만 제어 할 수 있습니다.foo
bar
bar
해석에 찬성 한 증거 2 : 앞서 언급했듯이 권한이 작동하는 방식. 또한 일부 Unix 파일 시스템에서는 디렉토리를 둘 이상의 부모에 연결할 수 있습니다.이를 다중 하드 링크라고합니다. (일반적인 파일에는 여러 개의 하드 링크가있는 것이 일반적이지만, 디렉토리가 자체 조부모 N 번 제거 된 루프를 만들 위험 때문에 주로 디렉토리에 대해 권장하지 않거나 금지합니다. 따라서 루트에서 접근 할 수 없습니다 디렉토리는 하드 링크가 0이지만 비어 있지 않은 경우 수행 할 작업의 문제점이 있습니다. 디렉토리가 연결되지 않았으므로 삭제하려고하지만 디렉토리를 사용하여 수행하는 작업 내용?)
해석 1에 유리한 증거 1 : 실제로 디렉토리는 단일 부모를 가지므로 트리 구조를 형성합니다. 그리고 당신은에 액세스 할 수 없습니다 foo/bar/qux
당신은 실행 권한을하지 않는 한 foo
잘만큼 bar
(물론, 액세스 권한을 부여 할 다소 모호한 방법이 있다는 것을 제외하고는 bar
액세스 권한을 부여하지 않고이 foo
). 따라서 상위 수준이 중요합니다.
보다 실용적인 메모에서 사용자 A는 할 수 있습니다.
mkdir 쓰레기 mv 푸 / 바 쓰레기 / rmdir foo
mv
문제를 피하기 위해 사용 된 마지막 예제는 Raspbian에서 작동하지 않습니다 (다른 시스템에서는 시도하지 않았습니다). 또한이 문제를 연구 한 결과 mv
다른 곳에서 언급 한 솔루션으로 사용되는 것을 보지 못했습니다 . 실제로 사용 권한이 어떻게 작동하는지에 대한 이해를 바탕으로 mv
내가 시도했을 때 실패 하는 것이 합리적입니다 . 뭔가 빠졌습니까? 아니면이 기능이 변경 되었습니까? @Gilles @PaulHooper
mv
시겠습니까? mv
bar 디렉토리의 이름을 바꾸는 데 사용할 수 있습니다 . mv
현재 디렉토리 외부 또는 다른 디렉토리로 막대를 이동시키지 않는 한 성공을 의미합니다 . 그러나 당신이 준 예제 (디렉토리를 위로 이동)는 나에게 효과적이지 않습니다 (권한이 거부되었습니다). 제시 한 예가 질문에 지정된 것 이외의 특정 조건을 가정합니까?
bar
디렉토리를 위로 이동하지 않고 소유 한 디렉토리로 이동합니다. garbage
같은 파일 시스템의 어느 곳에 나있을 수 있으며 반드시의 형제 일 필요는 없습니다 foo
.
이를 해결하는 유일한 방법은 상위 디렉토리에서 setgid 또는 setuid를 사용하거나 ACL을 사용하는 것입니다.
다음과 같이 setgid 디렉토리를 설정하십시오.
chmod g+s foo
에 기본 ACL을 설정하십시오.
setfacl -d -R -m g:group:rwx foo
이 경로에서 기본 ACL로 설정됩니다. 이 경로가 포함 된 파일 시스템을 acl 옵션과 함께 마운트해야합니다!
왜 당신이 이것을 원한다고 생각하는지 말해주세요.
make install
루트에서 시작하여 무언가를 만들기 시작할 때 그러한 상황을 얻을 수도 있습니다 .
cd ~user && mkdir qqq && touch qqq/qqq
로 사용자로부터 qqq를 제거 할 수 없습니다 . chmod g+s .
rm -Rf qqq