find 명령은 리눅스 시스템 관리자에서 가장 강력한 도구 중 하나입니다. 지정된 표현식에 따라 디렉토리 계층의 파일 및 디렉토리를 검색하며 일치하는 각 파일에 대해 사용자 지정 작업을 수행할 수 있습니다.
find 명령을 사용하여 권한, 유형, 날짜, 소유권, 크기 등을 기준으로 파일과 디렉터리를 검색할 수 있습니다. 그것은 또한 grep이나 sed와 같은 다른 도구들과 함께 사용될 수 있습니다.
Linux에서 명령 구문 찾기
find 명령어의 일반 구문은 다음과 같습니다.
find [options] [path...] [expression]
• 옵션 속성은 심볼 링크, 디버깅 옵션 및 최적화 방법의 처리를 제어합니다.
• 경로 속성은 find가 파일을 검색할 시작 디렉토리를 정의합니다.
• 표현식 속성은 연산자에 의해 분리된 옵션, 검색 패턴 및 작업으로 구성됩니다.
디렉토리에서 파일을 검색하려면 찾기 명령을 호출하는 사용자에게 해당 디렉토리에 대한 읽기 권한이 있어야 합니다.
다음 예를 살펴보겠습니다.
find -L /var/www -name "*.js"
• 옵션 -L(옵션)은 심볼 링크를 따르도록 find 명령을 알려줍니다.
• /var/www(경로…)는 검색할 디렉토리를 지정합니다.
• (표현) -name "*.js는 .js(JavaScript 파일)로 끝나는 파일을 검색하도록 합니다.
이름으로 파일을 찾기
이름으로 파일을 찾는 것이 find 명령어의 가장 일반적인 사용일 수 있습니다. 이름으로 파일을 찾으려면 검색 중인 파일 이름 옆에 있는 -name 옵션을 사용합니다.
예를 들어 /home/linuxize 디렉토리에서 document.pdf라는 파일을 검색하려면 다음 명령을 사용합니다.
find /home/linuxize -type f -name document.pdf
대/소문자를 구분하지 않는 검색을 실행하려면 -iname을 사용하여 -name 옵션을 변경합니다.
find /home/linuxize -type f -iname document.pdf
위의 명령은 "Document.pdf", "Document.pdf" 등과 일치합니다.
확장명으로 파일 찾기
확장명으로 파일을 검색하는 것은 이름으로 파일을 검색하는 것과 같습니다. 예를 들어 /var/log/nginx 디렉터리 내에서 .log.gz로 끝나는 모든 파일을 찾으려면 다음을 사용할 수 있습니다.
find /var/log/nginx -type f -name '*.log.gz'
와일드카드 문자를 사용할 때는 패턴을 인용하거나 셸에서 해석되지 않도록 * 기호를 백슬래시로 이스케이프해야 합니다.
regex *.log.gz와 일치하지 않는 모든 파일을 찾으려면 -not 옵션을 사용할 수 있습니다. 예를 들어 *.log.gz로 끝나지 않는 모든 파일을 찾으려면 다음을 사용합니다.
find /var/log/nginx -type f -not -name '*.log.gz'
유형별로 파일 찾기
경우에 따라 일반 파일, 디렉터리 또는 심볼 링크와 같은 특정 파일 형식을 검색해야 할 수도 있습니다. Linux에서는 모든 것이 파일입니다.
파일 유형을 기준으로 파일을 검색하려면 -type 옵션과 다음 설명자 중 하나를 사용하여 파일 형식을 지정합니다.
• f: 일반 파일입니다.
• d: 디렉토리입니다.
• l: 심볼 링크입니다.
• c: 문자 장치입니다.
• b: 장치를 차단합니다.
• p: 명명된 파이프(FIFO)입니다.
• s: 소켓입니다.
예를 들어, 현재 작업 디렉토리에서 모든 디렉토리를 찾으려면 다음을 사용합니다.
find . -type d
일반적인 예제는 chmod 명령을 사용하여 웹 사이트 파일 권한을 644로, 디렉터리 권한을 755로 재귀적으로 변경하는 것입니다.
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
크기별로 파일 찾기
파일 크기를 기준으로 파일을 찾으려면 크기 기준과 함께 -size 매개 변수를 전달합니다. 다음 접미사를 사용하여 파일 크기를 지정할 수 있습니다.
• b: 512바이트 블록(기본값)입니다.
• c:바이트입니다.
• w: 2바이트 단어입니다.
• k: 킬로바이트입니다.
• M: 메가바이트입니다.
• G: 기가바이트입니다.
다음 명령은 /tmp 디렉토리 내에서 정확히 1024바이트의 모든 파일을 찾습니다.
find /tmp -type f -size 1024c
find 명령을 사용하면 지정된 크기보다 크거나 작은 파일을 검색할 수도 있습니다.
다음 예에서는 현재 작업 디렉터리 내에서 1MB 미만의 모든 파일을 검색합니다. 크기 값 앞에 빼기 기호가 있습니다.
find . -type f -size -1M
크기가 1MB보다 큰 파일을 검색하려면 + 기호를 사용해야 합니다.
find . -type f -size +1M
크기 범위 내에서 파일을 검색할 수도 있습니다. 다음 명령은 1MB에서 2MB 사이의 모든 파일을 찾습니다.
find . -type f -size +1M -size 21M
수정 날짜별로 파일 찾기
find 명령은 마지막 수정, 액세스 또는 변경 시간을 기준으로 파일을 검색할 수도 있습니다.
크기별로 검색할 때와 마찬가지로 "보다 크거나 작음"에 더하기 및 빼기 기호를 사용합니다.
며칠 전에 비둘기 구성 파일 중 하나를 수정했는데 어느 파일을 잊어버렸다고 가정해 보겠습니다. .conf로 끝나고 최근 5일 동안 다음과 같이 수정된 /etc/dobecot/conf.d 디렉터리 아래의 모든 파일을 쉽게 필터링할 수 있습니다.
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
다음은 -daystart 옵션을 사용하여 수정 날짜를 기준으로 파일을 필터링하는 또 다른 예입니다. 아래 명령은 30일 이상 전에 수정된 /home 디렉토리의 모든 파일을 나열합니다.
find /home -mtime +30 -daystart
권한으로 파일 찾기
-perm 옵션을 사용하면 파일 사용 권한에 따라 파일을 검색할 수 있습니다.
예를 들어 /var/www/html 디렉터리 내에서 사용 권한이 정확히 775인 모든 파일을 찾으려면 다음을 사용합니다.
find /var/www/html -perm 644
숫자 모드 앞에 빼기 - 또는 슬래시 /를 붙일 수 있습니다.
슬래시 /를 접두사로 사용하는 경우 하나 이상의 범주(사용자, 그룹 또는 기타)가 일치하도록 각 비트를 설정해야 합니다.
다음 예제 명령을 고려합니다.
find . -perm /444
위의 명령은 사용자, 그룹 또는 다른 사용자에 대해 읽기 권한이 설정된 모든 파일과 일치합니다.
- 접두사로 사용되는 경우, 파일이 적어도 지정된 비트와 일치하도록 설정해야 합니다. 다음 명령은 소유자 및 그룹에 대한 읽기 및 쓰기 권한이 있고 다른 사용자가 읽을 수 있는 파일을 검색합니다.
find . -perm -664
소유자별로 파일 찾기
특정 사용자 또는 그룹이 소유한 파일을 찾으려면 -user 및 -group 옵션을 사용합니다.
예를 들어 Linuxize 사용자가 소유한 모든 파일 및 디렉터리를 검색하려면 다음을 실행합니다.
find / -user linuxize
여기 실제 예가 있습니다. 사용자 www-data가 소유한 모든 파일을 찾고 일치하는 파일의 소유권을 www-data에서 nginx로 변경하려고 합니다.
find / -user www-data -type f -exec chown nginx {} \;
파일을 찾아서 삭제
일치하는 모든 파일을 삭제하려면 일치 식 끝에 -delete 옵션을 추가합니다.
결과가 삭제할 파일과 일치한다고 확신하는 경우에만 이 옵션을 사용해야 합니다. -delete 옵션을 사용하기 전에 일치된 파일을 인쇄하는 것이 좋습니다.
예를 들어 .temp로 끝나는 모든 파일을 /var/log/에서 삭제하려면 다음을 사용합니다.
find /var/log/ -name `*.temp` -delete
-delete 옵션을 매우 주의하여 사용합니다. 찾기 명령줄은 식으로 평가되며 -delete 옵션을 먼저 추가하면 지정한 시작 지점 아래의 모든 항목이 삭제됩니다.
디렉토리의 경우 find는 rmdir와 동일한 빈 디렉토리만 삭제할 수 있습니다.
결론
다양한 옵션과 기준을 사용하여 find 명령을 사용하는 방법을 알아보았습니다.
이 자료에서는 Linux 시스템에서 파일을 찾는 방법에 대해 기본적으로 설명합니다. 또한 find man 페이지를 방문하여 find 명령어의 다른 모든 강력한 옵션에 대해 읽을 수도 있습니다.
'SW > 리눅스' 카테고리의 다른 글
Ubuntu 18.04 : 도커를 설치, 사용 방법, 예제, 명령어 (0) | 2020.11.01 |
---|---|
Linux : 암호 없이 SSH Login : 설정하는 방법, 예제, 명령어 (0) | 2020.10.30 |
Linux : Screen 사용하는 방법, 예제, 명령어 (0) | 2020.10.28 |
Ubuntu 18.04 : GO 설치하는 방법, 예제, 구현 (0) | 2020.10.27 |
Ubuntu 18.04 : GitLab 설치, 구성하는 방법, 예제, 명령어 (0) | 2020.10.26 |