????????를 사용하여 파일을 수정하세요. 권한

????????를 사용하여 파일을 수정하세요. 권한

디렉터리의 모든 파일에 대한 권한을 변경하는 스크립트를 작성했습니다.

#!/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)많은 사람들이 상대적인 정상 상태로 돌아왔지만, 많은 사람들은 여전히 ​​심각하게 부패했습니다. 나는 그것이 하드웨어 문제 때문이라고 생각합니다(디스크에서 좋은 파일을 꺼내서 버렸습니다).

관련 정보