디렉토리 권한이 정확하지만 mv를 사용할 때 권한이 거부되는 이유는 무엇입니까?


14

디렉토리 소유자가 내 사용자로 설정되어 있고 사용자 권한이 7로 설정되어 있지만 폴더 Music를 통해 폴더 를 이동하려고 할 때 권한이 거부 mv되었습니다.

(나는 sudo를 사용할 수 있다는 것을 알고 있지만 무엇이 잘못되었는지 알고 싶다. 여기서는 비린내가 나는 냄새가 난다). 추신 : 저는 Mac OS X El Capitan을 사용하고 있습니다.

터미널 스크린 샷


1
같은 오류가 발생하면 열려있는 파일을 mv로 만들려고하기 때문일 수 있습니다. OP 사례가 아니라 도움이 될 수 있습니다.
aderchox 2014

답변:


21

때 폴더에있는 것을 참고 수행 a이동 b하는 c의 폴더 권한이 a결정 당신이 할 수있는 일을.

이 경우 사용 권한 .이 가장 중요합니다.

권한이 단순히보다 복잡하다는 것을 관찰하십시오 rwx. 귀하의 music폴더는이가 @마지막에 .폴더가있다 +끝.

  • xattr -h@ 기호에 대한 복잡한 권한을 결정하는 데 사용 합니다.
  • getfacl+ 기호의 ACL을 결정하는 데 사용 합니다.

전화 할 때 "복잡한 권한"을 다루는 리소스가 있습니까?
user1717828

man xattr좋은 출발점이 될 수 있습니다.
Konerak

1
아니, 수동 입력이 없습니다. 다른 사람이 더 배우고 싶다면 확장 속성 이라는 다른 이름을 찾기 위해 Google을 둘러 볼 수있었습니다 .
user1717828

4
또는을 사용하십시오 ls -la@e. 대부분의 경우 deny delete이름 바꾸기를 막는 ACL 이있었습니다 .
Stéphane Chazelas

1
@Timo, 해당 ACL은 해당 디렉토리를 삭제하거나 이름을 바꾸지 못합니다. 아마도 일부 응용 프로그램은 응용 프로그램이 거기에 의존하고 다른 방법으로는 실패하는 것처럼 이유가 있기 때문일 것입니다.
Stéphane Chazelas

19

Linux 용 Windows 하위 시스템을 사용하고있었습니다. 다른 bash 인스턴스에서 디렉토리를 열었습니다. 닫으면 디렉토리를 이동할 수 있습니다.


4
VS 코드에서 WSL에 원격이있는 VS 코드에서 편집기를 닫고 해당 VS 코드 프로젝트 외부의 WSL에 터미널을 열어야했습니다.
Bjorn

9

해당 디렉토리의 어딘가에 올바른 권한이없는 파일이 하나 이상있는 것처럼 보입니다.

그래서 내가 한 일은 :

sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music

이제 작동합니다.


17
문제가 무엇이든간에 음악 파일에 실행 권한을 부여하는 것이 해결책이되어서는 안됩니다.
Stéphane Chazelas

3
디렉토리 의 객체 해당 디렉토리의 이름을 바꾸는 기능을 방해 할 가능성은 거의 없습니다 .
Scott

나는 그것이 이상하다는 것을 알고 있지만 그 트릭을했다. 디렉토리 자체에서 chmod 및 chown을 사용하는 것은 효과가 없었습니다.
Timo

chmod 755음악 폴더에서 특별한 '@'권한 을 제거 했을 수 있습니까?
HorusKol

@HorusKol 또는 chown. OP의 증상은 ACL 삭제 거부 가있는 디렉토리와 일치 하지만 적어도 요세미티에서는 chown 또는 chmod 755를 수행해도 해당 ACL이 삭제되지 않습니다. 당신은 그것을 필요 chmod -a 'everyone deny delete' Music로 할 것 입니다. 엘 캐피 탄에서는 다를 수 있습니다.
Stéphane Chazelas

4

여기서 문제는 음악 폴더의 ACL (액세스 제어 목록)과 관련이있을 수 있습니다. ACL은 일반적으로로 나열되는 일반 POSIX에 대한 별도의 권한 시스템 ls -l입니다. 홈 폴더 및 다른 곳의 일부 다른 디렉토리에도 ACL이 있습니다.

홈 디렉토리 내에서 ACL을 보려면 다음을 사용하십시오.

/bin/ls -le ~

0: group:everyone deny delete음악 디렉토리 와 같은 규칙이 표시 될 수 있습니다. 언급했듯이로 문제를 무시할 수 있습니다 sudo. 그렇게하지 않으려면 (또는 할 수없는 경우) 파일의 소유자라는 다른 옵션이 있습니다. 색인 (위의 예에서 0)에 따라 Music 디렉토리의 ACL에서 문제가되는 항목을 제거 할 수 있습니다.

/bin/chmod -a# 0 Music

또는 ACL의 모든 항목을 제거 할 수 있습니다.

/bin/chmod -N Music

이제 일반 POSIX 권한에 따라 디렉토리를 이동할 수 있습니다. 이동 후 ACL을 다시 넣으려면 다음을 사용할 수 있습니다.

/bin/chmod +a "group:everyone deny delete" Music_tmp

그리고 /bin/ls -le다시 사용 하여 원하는 ACL을 확인하십시오. man chmod자세한 정보 는 ACL 예제를 확인하십시오 . 특히이 소개는 도움이됩니다.

각 파일에는 정렬 된 항목 목록이 포함 된 하나의 ACL이 있습니다. 각 항목은 사용자 또는 그룹을 나타내며 일련의 권한을 부여하거나 거부합니다. 사용자와 그룹이 동일한 이름으로 존재하는 경우 이름 유형을 지정하기 위해 사용자 / 그룹 이름 앞에 "user :"또는 "group :"을 붙일 수 있습니다.

ACL 순서

매뉴얼 페이지 가 주문에 관한 규칙을 설명 하지는 않지만 이 페이지 는 ACL의 주문 규칙을 명확하게 설명합니다. 특히 명시 적 deny규칙이 명시 적 규칙보다 먼저 적용됩니다 allow. 따라서 group:everyone deny delete항목이 제자리에 있으면 allow규칙 으로 삭제할 수있는 권한을 사용자에게 부여 할 수 없습니다 . everyone사용자를 포함 하는 그룹 에 대한 권한이 거부되었으므로 해당 규칙이 먼저 적용됩니다.


2
이것이 왜 다운 보트인지 모르겠습니다. everyone deny deletemacOS의 기본 홈 디렉토리에 있는 ACL 항목 은 디렉토리를 이동하거나 삭제할 수없는 실제 이유입니다. (또한 OS는 언제라도 다시 만들 수 있음에 유의하십시오.)
Diti

1
이 답변은 ROCKED !!! 이런 새로운 ACL은 거대한 피타입니다.
Dean Hiller

3

제거하려는 디렉토리에서 일련의 프로그램이 실행 중일 때이 문제가 발생했습니다. 디렉토리를 이동하려면 먼저 해당 디렉토리에서 실행중인 모든 프로그램을 종료해야했습니다.

다음 명령에서 프로그램 이름을 선택하는 방법에 매우주의 하십시오. 참조를 위해 다음 명령을 사용했습니다.

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep
# make sure that you are only about to kill the programs you want to kill

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep | awk '{print $2}' | sudo xargs kill -9
sudo mv /usr/local/[DIR_FOR_ANNOYING_PROGRAM] /usr/local/[DIR_FOR_ANNOYING_PROGRAM]2

일반적인 절차는 다음과 같습니다.

  1. 문제의 디렉토리에서 실행중인 모든 프로그램을 종료
  2. 디렉토리 이름을 바꾸려고 시도
  3. 즉, (강제 연속 실패하는 경우 kill -9가 많은 주의 ) 디렉토리에서 모든 프로그램을
  4. 디렉토리 이름을 바꾸려고 시도
  5. 실패하면 프로그램이 다시 실행 중인지 확인하십시오. 즉, 다른 디렉토리에서 실행중인 일부 디먼 프로그램에 의해 다시 시작되었는지 확인하십시오.
  6. 성가신 프로그램을 다시 시작하는 데몬 프로그램 강제 종료
  7. 성가신 프로그램을 강제 종료
  8. 디렉토리 이름 바꾸기
  9. 이익

1
OP에 ~ / Music 디렉토리에서 실행중인 프로그램이 있다고 생각하지 않습니다. 어쨌든 그는이 답변이하는 sudo를 사용하고 싶지 않다고 말했습니다.
spinup

내가 말하는 것은 그 상황이 있었다는 것입니다. OP에 도움이되지 않았더라도 누군가에게 도움이 될 수 있습니다.
WattsInABox

확실히 누군가에게 도움이 될 것입니다. 그래서 제가 공감하지 않았습니다. 그러나 StackExchange의 의도는 게시 된 답변이 실제로 묻는 질문에 답변하는 것입니다.
spinup

1
이 답변이 초보자에게 일반적으로 사용되는 또 다른 잠재적 인 문제는 검색어를 매우 신중하게 선택 grep하고 확인하는 것에 대한 경고를 제공하지 않는 것입니다. 당신이 그에게로 옮기고 무엇이든 먼저 grep실행중인 모든 프로그램의 풀에서 선택할 것이다 kill... 루트 권한을
스핀 업

1
@Watts 님, 이것이 크게 개선 된 것 같습니다.
스핀 업

0

내부 파일 중 하나가 쓰기 방지 된 경우에도 발생할 수 있습니다. 필자 access.log는 이미 중단 된 Apache에 대한 쓰기 방지가 적용된 최후의 사례가있었습니다 . 방금이 파일을 제거 했으므로 부모 디렉토리를 더 이동할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.