디렉터리에 있는 모든 파일의 권한을 변경하는 스크립트를 작성했습니다.
#!/bin/bash
files=`find "$1"`
for f in $files; do
chown "$2" "$f"
chmod 600 "$2"
done
당연히 chmod의 두 번째 인수를 "$f"
대신 사용해야 합니다 "$2"
. 그러나 (작은 디렉터리에서) 스크립트를 실행할 때 두 번째 매개 변수도 포함하는 것을 잊어버렸습니다 "dave:dave"
. 이제 디렉터리의 모든 파일이 완전히 엉망이 되었습니다.
~ $ ll Documents/
ls: cannot access Documents/wiki.txt: Permission denied
ls: cannot access Documents/todo.txt: Permission denied
ls: cannot access Documents/modules.txt: Permission denied
ls: cannot access Documents/packages.txt: Permission denied
total 0
-????????? ? ? ? ? ? modules.txt
-????????? ? ? ? ? ? packages.txt
-????????? ? ? ? ? ? todo.txt
-????????? ? ? ? ? ? wiki.txt
실행하면 오류가 발생 sudo chown dave:dave Documents/*
하지 sudo chmod 600 Documents/*
않지만 파일은 변경되지 않은 상태로 유지됩니다. 각 파일을 새 파일에 넣을 수 있다는 것을 알고 있지만 sudo cat
원본 파일에 대한 권한을 수정하는 방법이 궁금합니다.
답변1
주석에 제공된 답변 외에도 공백이 포함된 파일 이름에서 스크립트가 중단된다는 점에 유의해야 합니다.
find
출력에서 파일 이름 목록을 구문 분석하는 대신 단일 명령으로 이 모든 작업을 수행할 수 있습니다 find
. 특수 문자나 공백에 관계없이 파일 이름을 처리하는 것이 더욱 강력해졌습니다.
find "$1" -type f -exec chown "$2" {} \; -exec chmod 600 {} \;
chown
특정 파일에서 실패 하면 chmod
해당 파일에서는 실행되지 않습니다. 어쨌든 이것은 아마도 당신이 원하는 동작일 것입니다.
Documents 디렉터리에서 실행 권한을 제거하는 잘못된 명령을 실행했으므로 실행 권한을 다시 추가해야 합니다.
chmod u+x Documents
실수로 실행 권한이 제거된 디렉터리가 더 있는 경우 다음을 사용하여 문제를 해결할 수 있습니다.
find Documents -type d -exec chmod u+x {} \;
하지만 이것이 필요하다고 생각하지 않습니다. 일단 문서에서 실행 권한을 제거하면 모든 하위 디렉터리에 액세스할 수 없게 되고 실행 권한이 문서에서 제거되지 않기 때문입니다.
답변2
그런 이상한 권한이 있는 파일을 본 적이 있습니다.진지하게파일 시스템이 엉망입니다. 일련의 자금 지원을 통해 fsck(8)
이들 중 다수가 상대적인 정상 상태로 돌아왔지만, 상당수는 여전히 심각한 부패 상태를 유지하고 있습니다. 나는 이것이 하드웨어 문제(디스크에서 좋은 파일을 꺼내서 버리는 것) 때문이라고 생각합니다.