하우위키

리눅스 find 명령어 사용방법

IT 컴퓨터 | 2025년 12월 01일 09시 31분
리눅스 find 명령어는 필수적으로 사용하는 리눅스 명령어 중에 하나다. find 명령어는 파일 검색, 검색된 파일 변경, 퍼미션 변경 등 여러가지 작업을 수행할 수 있는 명령어다. 리눅스 파일시스템은 윈도우 파일시스템과 다르며 파일 구조도 비슷하면서도 다르다. 이렇게 복잡한 구조 속에서 파일을 조회, 수정 등의 작업을 편리하게 하기 위해서 리눅스 find 명령어 사용방법에 대해서 알아보자. [lwptoc]

일반적인 find 명령어 수식

find /usr/local/ -name php 또는 find /usr/local/ -name "php" 또는 find /usr/local/ -name "php" -print 3가지 명령어 중 어떤 형태로든 결과는 동일하게 출력된다. /usr/local/ 하위디렉토리에서 "php"라는 이름이 들어간 파일을 찾는 것이다. 가장 많이 사용되는것이고 가장 편리하게 사용된다.

find 명령어 사용법

find --help 또는 man find 이 2가지 명령어를 사용하면 find 명령어 사용법에 대해서 자세히 설명되어 있다. 아래는 find 사용법에 대해서 간단히 설명했다. 사용법 : find [path...] [expression] 기본값 : default path는 현재 디렉토리; default expression은 -print 표현식(expression) 구성 : operators (decreasing precedence; -and is implicit where no others are given): ( EXPR ) ! EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2 EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2 options (always true): -daystart -depth -follow --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME -ilname PATTERN -iname PATTERN -inum N -ipath PATTERN -iregex PATTERN -links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE -nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN -size N[bckw] -true -type [bcdpfls] -uid N -used N -user NAME -xtype [bcdpfls] actions: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT -ok COMMAND ; -print -print0 -printf FORMAT -prune -ls

1) 일반적인 옵션

-a'xxxx' 'xxxx'에 대한 Access(접근) -c'xxxx' 'xxxx'에 대한 Changes(변경), 마지막으로 Access한 경우 변경됨 -m'xxxx' 'xxxx'에 대한 Modify(수정), 파일내용 자체 수정한 경우 -i'xxxx' 'xxxx'(inum 제외)에 대한 Insensitive(대소문자 구분없이)

2) 자주 사용되는 옵션

N 정확하게 N과 일치 +N N 보다 큰 경우 -N N 보다 작은 경우 -name PATTERN PATTERN에 일치하는 파일 찾기, 와일드카드 문자 사용가능 -iname PATTERN PATTERN에 일치하는(insensitive) 파일 찾기 -perm [+-]mode PERMission('mode')에 해당되는 파일 찾기, ls와 결합 가능 -type [bcdpfls] b(블럭파일), c(특정 문자), d(디렉토리), p(파이프), f(정규표현 일반파일), l(링크), s(소켓) 유형의 파일 찾기 -size N[bckw] 파일 크기가 N 인 파일 찾기 b(블럭-기본값), c(bytes), k(kbytes), w(2바이트 단어) -user NAME NAME은 유저이름이거나 UID -atime N N*24 시간 동안에 Access 한 파일 -ctime N N*24 시간 동안에 Changes 한 파일(내용수정이 아니고 읽기모드도 Changes됨) -mtime N N*24 시간 동안에 Modify 한 파일 -empty 파일이 비어 있고(0 bytes), 정규식 파일이거나 디렉토리 -newer FILE FILE 보다 최근에 갱신된 파일 -path PATTERN path가 PATTERN과 일치하는 path에 대해서 검색 -regex PATTERN 파일이름이 PATTERN에 일치하는 정규식에 대해서 검색 -inum N inode N을 갖는 파일 -nouser,-nogroup USER나 GROUP에 이름이 없는 파일 검색(UID,GID만 있는 파일) -exec COMMAND 검색된 파일을 찾으면 COMMAND 명령을 실행한다. COMMAND 인자(검색된 파일)는 {}으로 사용하며, 이때 COMMAND 끝은 \;(;이 아님)을 사용해야 한다. 즉 명령구분 문자인 ';'을 탈출(\)시켜줘야 한다. -ok COMMAND -exec COMMAND와 같지만 COMMAND를 실행하기 전에 확인을 요청한다.

3) path 옵션

. 현재 디렉토리(기본값이므로 생략해도 됨) `pwd` 현재 디렉토리와 결합(?) `은 ~문자가 있는 자판 $(pwd) 위의 `pwd`와 같거나 비슷함 / 최상위 루트 디렉토리에서 하위 모든 디렉토리 /home 특정 /home 디렉토리에서 하위 모든 디렉토리 /{usr,home/{aaa,san2},var} /usr, /usr/home/aaa /usr/home/san2 /var

4) 표현식과 연산자

\( 표현식 \) '표현식'을 우선적으로 먼저 수행 (와 )앞에 \를 넣어야 하며, '표현식'과 공백을 각각 둔다. \( A + B \) * \( C + D \) 와 같이 \(, \)안을 우선적으로 수행 ! 표현식 , -not 표현식 '표현식'을 부정 표현식1 -a 표현식2, 표현식1 -and 표현식2 표현식1과 표현식2의 AND 연산 표현식1 -o 표현식2, 표현식1 -or 표현식2 표현식1과 표현식2의 OR 연산

find 명령어 예제

1) ls,xargs와 같은 다른 명령어와 결합사용

-exec 이용시 # find ..... -exec COMMAND {} \; -exec를 사용하여 그 인자를 {}로 사용 xargs 명령어로 표준 입력받아 COMMAND 수행 # find ..... | xargs COMMAND xargs 명령어로 find에서 넘어온 결과(표준출력)에 대해서 COMMAND를 실행 ls 명령어로 최종 결과 출력 # ls -l `find .....[COMMAND]` 또는 # find .... ls (ls는 ls -dils와 같음) find 결과물에 대해서 ls 명령어를 실행 xargs xargs rpm 정보보기 # rpm -qi `rpm -qf $(which xargs)` 또는 # rpm -qf `which xargs` | xargs rpm -qi

2) 퍼미션 관련 예제

find `pwd` -perm -2 -print | xargs ls -l 여기에서 2는 퍼미션이 -------w- 와 일치하는 파일이며 -의 의미는 rwx-중 하나이다. 2인 이유는 아래와 같다. 만약 퍼미션이 755 이라면, 700 : rwx------ : user 50 : ---r-x--- : group 5 : ------r-x : others ------------------------ 755 : rwxr-xr-x : others는 읽기와 실행 권한 따라서 others의 권한은 8진수로 5(r+x)이다. 그렇다면, others가 쓰기(w:2) 권한은 당연히 -------w- 그룹이나 others에게 쓰기 권한이 있는 파일일 경우 -perm -20 -o -perm -2 그룹과 others에게 모두 쓰기 권한이 있는 파일일 경우 -perm -22 □others에게 w 권한이 있는 파일에 w 권한 없애기 find `pwd` -perm -2 -print | xargs chmod o-w 또는 find `pwd` -perm -2 -exec chmod o-w {} \; -print | xargs ls -l 위와 같이 하게 되면 파일 퍼미션이 변경된 결과를 출력하게 된다.

3) UID GID 변경하기

UID와 GID에 대한 유저가 없는 파일을 root.root로 바꾸어 보겠다. 파일 리스트 출력 확인 find . \( -nouser -o -nogroup \) -print | xargs ls -l | more 결과가 출력되었다면 아래 명령어로 변경하기 find . \( -nouser -o -nogroup \) -print | xargs chown root.root | more 또는 find . \( -nouser -o -nogroup \) -exec chown root.root {} \; -print | xargs ls -l

find 명령어 실무에 사용되는 팁

아래 명령어는 실무에서 자주 사용되는 명령어이며 활용도가 매우 높은 명령어 중 하나다. 최근 하루(1) 동안(-)에 변경(change)된 파일을 찾기(-ctime) find / -ctime -1 -a -type f | xargs ls -l | more 오래된 파일을 찾기(30일 이상 수정(modify))되지 않은) find / -mtime +30 -print | more 최근 30일(30) 안에(-) 접근(access)하지 않은 파일과 디렉토리를 리스트로 만들려면(-atime) find / ! \( -atime -30 -a \( -type d -o -type f \) \) | xargs ls -l > not_access.list 현재 자신의 홈디렉토리에서 만 검색하기 find $HOM ... 또는 find ~root .. 서브 디렉토리로 내려가지 않고 현재 디렉토리에서만 검색하기 find . -prune ... 특정 유저(foobar) 소유의 파일을 찾기 find / -user foobar -print | more 퍼미션이 777인 파일을 찾기 find / -perm 777 -print | xargs ls -l | more others에게 쓰기 권한이 있는 파일을 찾기 find / -perm -2 -print | xargs ls -l | more others에게 쓰기 권한이 있는 파일을 찾아 쓰기 권한을 없애기 find / -perm -2 -print | xargs chmod o-w 또는 find / -perm -2 -exec chmod o-w {} \; -print | xargs ls -l | more 유저이름과 그룹이름이 없는 파일을 찾기 find / \( -nouser -o -nogroup \) -print | more 빈 파일을 찾기 find / -empty -print | more 또는 find / -size 0 -print | more 파일크기가 100M 이상된 파일을 찾기 find / -size +102400k -print | xargs ls -hl *.bak 파일을 찾아 삭제 find / -name "*.bak" -exec rm -rf {} \; *.bak 파일을 찾아 특정 디렉토리로 이동 특정 디렉토리만 찾기 find . -type d ... root권한으로 실행되는 파일을 찾기 find / \( -user root -a -perm +4000 \) -print | xargs ls -l | more 다른 파일시스템을 검색하지 않게 하기 find / -xdev ... 파일이름에 공백이 들어간 파일을 찾기 find / -name "* *" -print 숨겨진(hidden) 파일을 찾기 find / -name ".*" -print | more 같은 이름을 가진 디렉토리를 찾기 find / -type d -print | awk -F/ '{printf("%s\t%s\n",$NF,$0);}' | sort| more 잘못된 링크를 찾기 find . -type l -print | perl -nle '-e || print' | xargs ls -l

© Copyright 2021 - 2025 하우위키. All rights reserved.