본문 바로가기
OS/Linux

리눅스 find 명령어 활용하기

by BTC_김회장 2023. 9. 2.

안녕하세요! 베하~!

여러분 리눅스를 사용할때 내가 찾고자 하는 파일을 눈으로 하나하나 찾아가면서 찾아보셨나요?

 

몇개안되는 파일을 찾기란 쉬운일이지만 찾고자 하는 파일이 아주 많다면 내가 원하는 파일을 찾기란 모래속의 진주찾기 처럼 어려울거에요!

이 수많은 모래가운데 내가 찾는것이 있을까?..

이런 어려움을 쉽게 해결해줄수 있는 명령어가 바로 find라는 리눅스 명령어 입니다!

 

find는 리눅스에서 파일 및 디렉토리를 검색할 때 사용하는 명령어에요

$ find [경로] [옵션] [표현식]
$ find [PATH] [OPTION] [EXPRESSION]

위의 내용이 기본적인 find의 사용 방법이에요!

 

find 명령에는 몇 가지 옵션과 많은 수의 표현식(Expression)이 존재하는데, find 명령의 검색 결과가 지정된 표현식의 조합에 따라 결정되기 때문에 표현식은 매우 자주 사용되어 익혀둘 필요성이 있습니다.

 

find 옵션에는 아래와 같은 옵션들이 있습니다.

-H	심볼릭 링크를 따라가지 않고, Command Line Argument를 처리할때 예외.
-L	심볼릭 링크에 연결된 파일정보 사용.
-P	심볼릭 링크를 따라가지 않고, 링크 자체 정보를 사용
-Olevel	쿼리 최적화를 활성화한다. level : 0-3
-D [옵션]	디버깅 기능 사용. 
    help	디버깅 옵션을 설명.
    exec	-exec, -execdir, -ok, -okdir 관련 진단 정보를 표시.
    opt	    최적화와 관련된 진단 정보 표시.
    rates	각 속성의 성공한 빈도를 나타냅니다.
    tree	표현식 트리를 표시.
    search	디렉토리 트리를 자세히 탐색.
    stat	stat(2), lstat(2)에 대한 추적을 호출한다.

 

다음으로 find 표현식(expression)도 알아봐야겠죠?

표현식 의미
-name 주어진 이름의 파일이나 디렉터리를 찾는다 (가장 많이 쓰이는 옵션)

$ find -name '*.txt'
현재 디렉터리 이하의 모든 디렉터리에서 .txt로 끝나는 파일 및 디렉터리를 싹 찾는다.
-user 지정한 사용자의 파일이나 디렉터리를 찾는다 (위에가 이름가지고 찾았다면 이거는 사용자 기준)
-group 지정한 그룹 소유의 파일이나 디렉터리를 찾는다
-uid 지정한 UID소유의 파일이나 디렉터리를 찾는다 (아이디번호로 찾기)
-gid 지정한 UID 소유의 파일이나 디렉터리를 찾는다 (그룹번호로 찾기)
-perm 지정한 허가권 값을 갖는 파일이나 디렉터리를 찾는다 (permission의 약자)

ex) -perm 755 : 퍼미션 값이 755로 설정된 파일이나 디렉터리
-type 지정한 파일 유형을 찾는다.  (파일만 찾고 싶을때 또는 디렉터리만 찾고 싶을 경우가 많다)

d: 디렉터리,
f: 일반 파일,
l: 링크 파일,
b: 블록 디바이스,
c: 캐릭터 디바이스,
p:파이프 디바이스,
s:소켓 파일

(주로 -type f 옵션이나 -type d 옵션을 많이 쓴다)
-atime n access time 접근 시간 기준으로 찾는다.
n
   : n일 이전에 접근한 파일 찾기 (exactly)

+n : n보다 오래된 녀석들 기준 (greater),
-n  : n일부터 지금까지 즉 n일 내에 접근했던 파일들을 불러준다. (less)
-ctime n change time 수정 시간 기준으로 찾는다 
-mtime n modify time 변경 시간 기준으로 찾는다
-mmin n  mmin은 분이 기준 (mtime은 기준이 day)
-empty 빈 파일(파일의 크기가 0일 경우)이나 빈 디렉터리일 경우 출력
-exec find로 파일을 찾고 바로 연계하여 어떠한 명령을 내릴 수 있는 옵션.

결과값은 {} 기호로 표시하고 \;로 끝내야 함.
-ls 'ls -l'과 같은 역할
-size n n블록 길이의 파일을 찾는다.

+n은 n블록보다 큰 파일을 찾으며 (greater)
-n은 n블록보다 작은 파일을 찾는다 (less)

보통 nc라는 형태로 많이 사용되는데
n은 문자 길이의 파일을 의미하고, c는 character를 의미하여 1문자는 1바이트이므로 보통 바이트 단위로 인식해서 사용한다.
-inum n node번호가 n인 파일 찾기
-iname 대소문자 구별 안하고 이름으로만 찾을 때 (insensitive의 약자)
-maxdepth n 검색 시 주어진 정수값 n만큼의 서브 디렉터리만 검색. (현재 내 폴더에서부터 n 깊이까지만)
-mindepth n maxdepth의 반대.
-prune 찾은 결과 중 디렉터리가 해당될 때 그 디렉터리 이름만 출력 (하위 디렉터리에 해당되는게 있어도 들어가서 찾지 않는다)
-newer 옵션 뒤에 적힌 파일보다 최근에 변경된 파일을 찾는다

ex) find -newer 'abc.c'
abc파일보다 최근에 변경된 파일을 찾음
-cnewer 앞의 newer가 내용 변경이라면 cnewer라면 파일 상태
2>/dev/null 맨 뒤에 이 옵션을 붙이면 퍼미션 접근 불가한것은 화면에 출력하지 않는다.
-print 검색결과를 파일의 절대경로로 표시. 디폴트 옵션이다.

 

그럼 지금부터 위의 정리한 명령어 옵션들을 바탕으로 간단한 예제 실전으로 한번 들어가 보겠습니다.

 

예를들어 현재 디렉토리 . 에서 찾고자 하는 파일을 검색해볼게요

$ find . -name "B*"           # B로 시작하는 파일 검색. 결과 : ./Bespinglobal

$ find /user -name '*.txt'    # /user 디렉토리에서 .txt 파일이름으로 끝나는 파일이름 검색

이런식으로 간단하게 활용해 볼수가 있겠죠?

 

또한 타입으로 옵션을 걸어서 파일을 찾을수도 있어요

option type
f regular file
d directory
c character special
b block special
l symbolic link
s socket
p fifo
$ find . -name btc -type f            # btc라는 이름의 일반 파일 검색.

$ find . -name google -type d             # google라는 이름의 디렉토리만 검색

이런식으로 활용이 가능하겠죠?

 

이렇게 간단하게 리눅스의 find 명령어에 대해서 알아봤어요!  

 

사실 이방법말고도 활용하는 방법은 매우 무궁무진 합니다. 

find명령어를 활용해서 시간을 아끼는 일잘러가 될수있도록 해요! 

베빠~

 

'OS > Linux' 카테고리의 다른 글

리눅스 디렉토리  (0) 2023.10.09
리눅스 Log 파일 종류  (0) 2023.09.15
외부 접속을 위한 ssh계정 생성 및 권한(sudo)  (0) 2023.08.18
[Liunx]LVM을 사용해 EBS 볼륨 용량 늘리기  (1) 2023.07.19
[Linux]권한 이해하기  (0) 2023.07.14

댓글