티스토리 뷰


[Linux/macOS] 압축파일을 풀었더니 모든 폴더와 파일에 실행권한이 붙어 있을 때

1. 외부에서 다운로드 받은 압축파일을 풀었더니 모조리 실행권한이 붙어 있습니다.

가끔 웹에서 다운로드하거나 USB를 통해 압축파일을 받아 풀었을 때, 폴더의 모든 권한에 실행권한이 붙어 있는 경우가 있습니다.

# 파일의 경우
-rwxrwxrwx   1  norux  norux  22   files

# 디렉토리의 경우
drwxrwxrwx   1  norux  norux  3    directory

위 처럼 777 권한이 모조리 붙어있는 경우가 있습니다. 이 경우, 보안상 취약하기도 하구요. 리눅스의 파일관리 컨셉과도 안맞게 되구요. 또 보통 배시에서 실행권한이 있는 폴더와 파일의 색상을 다르게 보여주다보니, 관리의 어려움과 간혹 짜증이 나기도 합니다.

이렇게 되는 이유는, 보통 .zip 파일이 문제인데요. zip 압축파일의 경우 실행권한을 보존하지 않습니다. 따라서 보통의 경우 zip압축을 많이 하는 윈도우시스템에서 리눅스/맥으로 파일을 옮길때 문제가 발생하게 됩니다. 참고로 tar 아카이브의 경우에는 실행권한과 소유권을 모두 보존합니다. 그래서 유닉스시스템에서는 tar로 아카이브한 이후, bzip2gzip등 편한 압축포맷을 이용해서 압축하는 경우가 많습니다.

2. 해결책

파일과 디렉토리는 각각 다른권한으로 수정해야합니다. 일반적인 파일은 644 권한을 부여해야하구요. 일반적인 디렉토리는 755 권한을 부텨해야 합니다. 즉, chmod -R 755 SOMETHING 같은 명령어로는 부족하다는 이야기지요.

2.1. 파일의 모든 권한 변경하기

$ find SOMETHING -type f -exec chmod 644 {} \;

find 명령으로 특정 디렉토리의 모든 파일을 찾아가며 chmod 명령을 실행하게 하는 코드입니다. SOMETHING은 특정 디렉토리가 됩니다.

2.2. 디렉토리의 모든 권한 변경하기

$ find SOMETHING -type d -exec chmod 755 {} \;

마찬가지로 옵션 typed 로 변경해주면 find 명령어는 디렉토리를 찾습니다. 찾은 모든 디렉토리의 권한을 755 로 변경하게 됩니다.

2.3. 일부 실행권한이 필요한 파일의 실행권한 부여하기

모든 디렉토리와 파일의 권한에서 실행권한을 제거했지만, 일부 실행권한이 필요한 파일이 있을 수 있습니다. 예를들면 .sh 같은 쉘스크립트파일인데요. 이런 경우 find의 이름 검색하는 옵션을 통해 구별할 수 있습니다.

$ find SOMETHING -type f -name "*.sh" -exec chmod 755 {} \;

두 개 이상의 확장자를 검색하여 변경하고 싶다면 -o 옵션을 이용한 아래와 같은 방법이 있습니다.

$ find SOMETHING -type f \( -name "*.sh" -o -name "*.py" \) -exec chmod 755 {} \;

그 외에 find 의 정규식을 사용한 방법도 있습니다. ^^ 단, 아래 예제에서 사용한 regextype 옵션은 GNU find에만 있는 옵션입니다. 참고로 macOS에 디폴트로 설치되어 있는 find는 BSD find 입니다. sed 명령에서 사용할 수 있는 정규식표현을 사용할 수 있습니다.

$ find SOMETHING -type f -regextype sed -regex ".*/[a-zA-Z]\.sh" -exec chmod 755 {} \;

3.결론

배시에서 find 명령어는 가장 자주 쓰는 명령어 중 하나지만, 가장 자주 잊어먹는 명령어 중 한개이기도 합니다. ^_^; 맨날 까먹어서 제 블로그에 정리해 놓고 사용하고자 합니다. 또 혹시 저와 같은 문제를 겪는 분들을 위해서도 글을 남기고자 합니다.

4. 참고


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함