티스토리 뷰
[Linux/macOS] 압축파일을 풀었더니 모든 폴더와 파일에 실행권한이 붙어 있을 때
1. 외부에서 다운로드 받은 압축파일을 풀었더니 모조리 실행권한이 붙어 있습니다.
가끔 웹에서 다운로드하거나 USB를 통해 압축파일을 받아 풀었을 때, 폴더의 모든 권한에 실행권한이 붙어 있는 경우가 있습니다.
# 파일의 경우
-rwxrwxrwx 1 norux norux 22 files
# 디렉토리의 경우
drwxrwxrwx 1 norux norux 3 directory
위 처럼 777 권한이 모조리 붙어있는 경우가 있습니다. 이 경우, 보안상 취약하기도 하구요. 리눅스의 파일관리 컨셉과도 안맞게 되구요. 또 보통 배시에서 실행권한이 있는 폴더와 파일의 색상을 다르게 보여주다보니, 관리의 어려움과 간혹 짜증이 나기도 합니다.
이렇게 되는 이유는, 보통 .zip
파일이 문제인데요. zip
압축파일의 경우 실행권한을 보존하지 않습니다. 따라서 보통의 경우 zip
압축을 많이 하는 윈도우시스템에서 리눅스/맥으로 파일을 옮길때 문제가 발생하게 됩니다. 참고로 tar
아카이브의 경우에는 실행권한과 소유권을 모두 보존합니다. 그래서 유닉스시스템에서는 tar
로 아카이브한 이후, bzip2
나 gzip
등 편한 압축포맷을 이용해서 압축하는 경우가 많습니다.
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 {} \;
마찬가지로 옵션 type
만 d
로 변경해주면 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. 참고
'Linux' 카테고리의 다른 글
curl을 이용하여 multipart/form-data 업로드하기 (0) | 2016.05.11 |
---|---|
우분투 16.04 LTS 에서 달라진 것들 (8) | 2016.04.24 |
이클립스 탐색기(eclipse explorer) 폰트 조정 (3) | 2015.09.02 |
[우분투 14.04] git 프록시(proxy) 설정하기! (0) | 2015.07.28 |
터미널에서 출력되는 색 다루는 방법. 부제: 나만의 ls 만들기 (0) | 2015.07.27 |
- Total
- Today
- Yesterday
- vim
- ZONES
- qemu linux arm
- lua table
- observable
- JavaScript
- 폰트 조정
- 안시 색상
- 챗봇
- terminal 색
- Rx.js
- NgZone
- QT
- zone
- typeScript
- git proxy
- Swift
- ECMA2015
- angular2
- git 설정
- 스위프트
- 안시 컬러
- ansi color
- Zone.js
- Angular
- C언어
- itoa
- 타입스크립트
- 우분투 16.04
- 리눅스 터미널 색상
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |