IT_Linux_logo

Linux에서 find 명령어 사용하기


NAS의 다운로드 스테이션 임시 디렉토리 @incoming 폴더에 7일이라는 기간을 두고,
파일이 생성된 지 7일 이후 삭제 되는 것을 스케줄링 해놓는게 어떨까 해서 찾아본 명령어 입니다.

사실 제한을 두기 시작한 계기는 지금은 2TB 인 임시 디렉토리였지만 이전에는 기껏해봐야 64GB 였다는 것 입니다.

64GB 로는 요즘 Torrent 에서 4K Blu-ray 하나만 받아도 80GB 가 넘기 때문에 저장소에 많은 파일이 쌓이면 다음 사람을 위해 그 만큼 정리를 해주는 것이 좋지 않을까 라고 생각하여 찾아본 방법입니다.

설명 전에 기본적으로 ‘*’와 ‘.’ 그리고 ‘/’에 대해 설명이 필요하다 생각해서 써봤습니다.
‘*’는 와일드카드로 “모든 것” 이라고 보시면 됩니다.
‘.’는 현재 디렉토리 입니다.
‘/’는 리눅스의 root(루트) 디렉토리입니다.
이해가 잘 안된다면 설명 후 예시가 나오는데 예시를 보면 됩니다.

Windows 를 제외한 대부분의 Server 는 Linux 로 운영 되기 때문에 Linux 명령어 중 find 에 대하여 구체적으로 적어봅니다.

find 명령어는 뜻 그대로 파일 or 디렉토리를 검색하기 위하여 사용됩니다.

보통 파일 검색의 조건은 다음 범위 내라고 생각하면 됩니다.

  • 특정 파일명을 찾고자 하는 경우
  • 특정 디렉토리를 찾고자 하는 경우
  • 특정 권한을 가진 파일을 찾고자 하는 경우
  • 특정 소유자의 파일을 찾고자 하는 경우
  • 특정 그룹의 파일을 찾고자 하는 경우
  • 특정 용량 기준으로 파일을 찾고자 하는 경우
  • 특정 시간 기준으로 파일을 찾고자 하는 경우




find 명령어의 기본은 다음과 같습니다.

find [찾고자 하는 디렉토리의 경로] [옵션]

옵션에 조건을 얼마나 잘 넣는냐에 따라 필요한 결과를 찾아낼 수 있습니다.





1. 특정 파일명을 찾고자 하는 경우


기본 사용법

find [디렉토리] -name '[파일명]'




# 현재 디렉토리에서 txt 파일을 모두 찾으려는 경우

find . -name '*.txt'

# temp 디렉토리 안에서 이름이 “1” 인 모든 확장자를 찾아내려는 경우

find ./temp/ -name '1.*'






2. 특정 디렉토리를 찾고자 하는 경우


기본 사용법

find [디렉토리] -type d -name '[디렉토리명]'




# root 에서 temp 디렉토리를 찾는 경우

find / -type d -name 'temp'

# 현재 디렉토리에서 tar이 포함되는 디렉토리명을 찾는 경우

find . -type d -name '*tar*'






3. 특정 권한을 가진 파일을 찾고자 하는 경우


기본 사용법

find [디렉토리] -perm [권한 숫자] -name '[파일명]'


여기에서 [권한 숫자] 이라는 것이 있는데, Linux 는 기본적으로 디렉토리나 파일에 대하여 10자의 Permission 기호가 있습니다.

예를 들어 ‘-rwx—r-x’ 가 있다고 가정했을때 이것을 네 분류로 나눠서 보면 됩니다.
‘-‘ 처음 – 의 표시는 파일을 의미하며 d 로 표시되면 디렉토리를 의미합니다.
‘rwx’ 두번째 rwx 는 소유자(Owner)를 의미하고요.
‘—‘ 세번째 — 의 표시는 그룹(Group) 사용자를 의미합니다.
‘r-x’ 그리고 마지막의 r-x 의 표시는 기타(Other) 사용자를 의미합니다.

r 은 Read(읽기)의 약자, w 는 Write(쓰기)의 약자, x는 Execute(실행)의 약자입니다.

그리고 이것들을 숫자로 표현하게 된다면, r = 4 / w = 2 / x = 1 로 표현됩니다.
총합이 7 이며 즉 7 은 모든 권한이죠.




# 현재 디렉토리에서 777(모든권한)을 가지며 txt 파일을 모두 찾는 경우

find . -perm 777 -name '*.txt'






4. 특정 소유자의 파일을 찾고자 하는 경우


기본 사용법

find [디렉토리] -group [그룹명] -name '[파일명]'




# temp 디렉토리에서 root 가 소유자인 txt 파일을 모두 찾는 경우

find ./temp/ -user root -name '*.txt'






5. 특정 그룹의 파일을 찾고자 하는 경우


기본 사용법

find [디렉토리] -group [그룹명] -name '[파일명]'




# root 디렉토리에서 web 그룹 소유권이 있는 파일을 찾는 경우

find / -group web

# 현재 디렉토리에서 web 그룹에게 소유권이 있는 테스트.txt 파일을 찾는 경우

find . -group web -name '테스트.txt'






6. 특정 용량 기준으로 파일을 찾고자 하는 경우


기본 사용법

find [디렉토리] -size [용량] -name '[파일명]'


[용량] 옵션에는 다음과 같은 용량 표기를 사용할 수 있습니다.

  • c : 바이트
  • k : 킬로바이트
  • M : 메가바이트
  • G : 기가바이트




# 현재 디렉토리에서 2M 이상 되는 파일을 찾는 경우

find . -size +2M

# temp 디렉토리에서 용량이 2k 이상 4k 미만이 되는 파일을 찾는 경우

find ./temp/ -size +2k -size 4k






7. 특정 시간 기준으로 파일을 찾고자 하는 경우


기본 사용법

find [디렉토리] -atime [시간 옵션] -name '[파일명]'
find [디렉토리] -mtime [시간 옵션] -name '[파일명]'
find [디렉토리] -ctime [시간 옵션] -name '[파일명]'


[시간 옵션] 앞에 옵션은 Linux 시간 표기법 의해 3가지로 구분이 됩니다.

  • atime (Access Time) : 마지막으로 파일에 접근한 시간, vi 및 cat 등의 명령어로 열람한 시간들이 이에 해당됨
  • mtime (Modification Time) : 마지막으로 파일의 내용을 수정한 시간
  • ctime (Change time) : chmod 나 chown 등 파일의 속성 및 권한을 변경한 시간


* 참고 사항
일반적으로 쓰이는 ls 의 명령어에서 보이는 시간은 mtime 입니다.
ctime 은 ls -lc 의 명령어로 확인이 가능하며,
atime 은 ls -lu 의 명령어로 확인을 할 수 있습니다.




# 사용자 디렉토리에서 마지막으로 수정한지 2달 이상 된 파일을 찾는 경우

find ~/ -mtime +60

# 사용자 디렉토리에서 마지막으로 수정한지 4달 이상 된 txt 파일을 찾는 경우

find ~/ -mtime +120 -name '*.txt'

# etc 디렉토리에서 파일의 속성을 변경한지 1달 이상 된 파일을 찾는 경우

find /etc -ctime +30







이상으로 find 명령어에 대하여 다 써봤는데, 확실히 Linux 는 Windows 와는 차별이 다른 검색을 제공합니다.

find 명령어 뒤에는 exec 라는 옵션을 붙여서 검색된 대상에 명령을 실행 할 수 도있어요.

Linux는 정말 좋은 OS 같습니다.
물론 CLI 환경에서만 말이죠.
GUI 는 아직 많이 부족한 면이 있으나, 지속적으로 개발하고 있으니 점점 좋아지겠죠.
GUI 는 아직 Windows 가 월등히 좋은 것 같습니다.

Add a Comment

Your email address will not be published. Required fields are marked *