재귀적으로 chown할 수 없습니다.

재귀적으로 chown할 수 없습니다.

나는 다음 명령을 사용하고 있습니다 :

chown root:www-data /var/www/example.com -R 

하지만 디렉토리가 나열되지 않는다는 오류 메시지가 나타납니다.

뭐가 문제 야?

답변1

-R옵션을 먼저 넣어야 합니다 .

chown -R root:www-data /var/www/example.com 

(저는 항상 사용자와 그룹 사이에 콜론 대신 점을 사용하지만 매뉴얼 페이지에는 콜론을 사용해야 한다고 나와 있습니다.)

답변2

GNU coreutils 버전은 chownUbuntu의 표준 버전이며 --사용되지 않는 한 어디에나 배치된 옵션을 허용합니다. 그건:

chown foo:bar some/location -R
chown -R foo:bar some/location

둘 다 유효합니다. 이유는 어떻게getopt_long()일하다. 내 책에서 이것은 버그입니다. 오류를 일으키거나 기록되어야 하지만, 제가 아는 한, 그것은 사실이 아닙니다.

chown foo:bar some/location -- -R

라는 디렉토리를 찾습니다 -R.


그러나 환경 변수를 설정했는데 POSIXLY_CORRECT이름이 지정된 디렉터리가 없으면 첫 번째 예제는 실패 -R하고 다시 발생하지 않습니다.

$ export POSIXLY_CORRECT=
$ chown -v :foo a/ -R
ownership of `a/' retained as foo:foo
chown: cannot access `-R': No such file or directory

IMHO: 항상 POSIX 방식을 따르려고 노력하세요. 어느 날 POSIX를 적용하는 다른 시스템에 해당 명령을 입력하여 POSIX 방식을 깨뜨릴 수 있기 때문입니다.

또한 의 값은 POSIXLY_CORRECT아무런 영향을 미치지 않습니다. 비활성화되지는 않습니다.

export POSIXLY_CORRECT=0
export POSIXLY_CORRECT=no
export POSIXLY_CORRECT=false
export POSIXLY_CORRECT=...

누군가가 필요합니다 unset.


chown시스템이 다른 도구를 사용하여 설정되었거나 POSIXLY_CORRECT이미 설정되었을 수 있습니다.

확인 방법:

export | grep POSIX
chown --version
# etc.

참고로 점, 을 사용하여 .그룹과 사용자를 구분하는 것은 더 이상 사용되지 않습니다.POSIX 2001( info coreutils 'chown invocation'), 이전 버전과의 호환성은 여전히 ​​지원되지만 권장되지 않습니다.

관련 정보