본문 바로가기
서버/Linux

[Linux] find & xargs & du

by 느링 2017. 10. 23.

1. find[경로][옵션][명령]

시스템 내에 있는 파일/디렉터리를 찾아줍니다.

 

<예제 1>    find 사용해보기

찾을 파일을 만들기 위해 find_test 디렉터리 생성 후 이동

# mkdir /FIND
# cd /FIND

 

파일을 만들기 위해 스크립트를 생성
# vi file_maker.sh

다중 반복문을 이용하여(000 ~ 777)파일을 생성하고 파일의 허가권도 설정

#! 셔뱅 (어떠한 프로그램을 이용하여 동작시킬 것인지를 커넬에게 알려주기 위해서 명시하는 설정)

 

생성한 스크립트 실행

 

원활한 예시를 위해 스크립트 파일을 지우기

# rm -r per_file.sh

 

# find [옵션]

-perm

지정한 허가권을 가지고 있는 파일 검색

→ 형식

-perm [허가권] : 정확히 [허가권]과 일치하는 파일

-perm +[허가권] : [허가권]에서 하나의 값(비트)이라도 일치하는 파일

-perm -[허가권] : [허가권]을 포함한 추가적인 허가권(퍼미션)을 갖는 파일

 

-perm [허가권] 사용하기

 

-perm +[허가권] 사용하기

 

●    ●    ●

 

777(rwx rwx rwx) rwx 중 하나라도 포함되면 검색됩니다.

⇒ 허가권이 000(--- --- ---)인 파일만 검색되지 않습니다.

 

<-perm -[허가권] 사용하기>

허가권이 770(rwx rwx ---)을 포함한 파일만 검색됩니다.

 

/bin 경로에 SetUID가 설정된 파일을 검색

SetUID = 4000

 

<파일의 크기로 검색하기>

FIND2 디렉터리 생성 후 이동

# mkdir FIND2

# cd /FIND2

 

size_test.sh 스크립트 파일 생성

# vi size_test.sh

 

size_test.sh 스크립트 파일 내용

반복문과 fallocate를 이용하여 10KB, 20KB, 30KB의 파일을 각 5개를 만들고 $RANDOM으로 파일명을 임의의 값으로 지정해줍니다.


※ fallocate - 지정한 크기를 가진 파일 생성
※ $RANDOM 환경 변수 - 임의의 값을 가지고 있는 변수

 

size_test.sh 스크립트 파일 실행 후 확인

 

원활한 예시를 위해 스크립트 삭제

# rm -r size_test.sh

 

파일 확인하기

임의의 값의 이름으로 설정된 파일들이 10KB, 20KB, 30KB로 각 5개씩 생성되었습니다.

 

① 20KB의 파일을 검색

② 20KB 초과 파일 검색

③ 30KB 미만 파일 검색

 

-exec 사용하기

# find [명령]

-exec [명령어]\; - 검색된 파일을 대상으로 명령어를 실행

-exec [명령어] { } \;

 

/FIND3 디렉터리 생성 후 이동

# mkdir FIND3

# cd /FIND3

 

/FIND3 디렉터리 안에 file1 ~ file3 파일 생성

# touch file{1..3}

-exec [명령어]\; 사용

검색된 결과에 하나씩 ls -l을 실행합니다.

 

-exec [명령어] {} \; 사용

- 검색된 결과가 {}안으로 들어갔다고 생각합니다.

- 검색된 결과가 명령어의 인자로 사용합니다.

 

2. xargs (eXtended ARGumentS)

- 표준 출력 값을 이용하여 명령을 실행합니다.

- 인자를 필터링하여 넘겨주고 명령어에 인자로 전달하는 역할을 합니다.

- find와 사용 시 결과물을 다음 명령어에 인자로 전달합니다.

- 여러 명령어와 함께 조합을 하면 강력한 기능을 갖습니다.

[옵션]

-i 출력 결과를 인자로 사용

-t 상세한 정보 출력 (화면에 실행 결과 출력)

<예제 1>    xargs 사용하기

모든 파일들의 확장자를 txt로 바꾸기

 

●    ●    ●

 

<예제 2>    xargs를 find와 사용하기

XARGS 디렉터리 생성 후 이동

# mkdir /XARGS

# cd /XARGS

 

xargs_test.sh 스크립트 파일 생성

# vi xargs_test.sh

 

xargs_test.sh 파일 내용

이중 반복문과 touch를 이용하여 (00 ~ 55)파일 생성

 

xargs.sh 스크립트 파일 실행 후 확인하기

 

31 파일 안에 Hello world라는 내용 추가

 

일반 파일 중에 Hello world라는 내용을 가진 파일 검색

/XARGS 디렉터리 안에 있는 파일들 중 find로 검색된 (일반 파일) 결과가

xargs 명령어에 의해서 grep 명령어의 인자로 전달합니다.

 

<검색 결과 삭제하기>

find [명령]

-delete 검색 결과를 삭제합니다.

<예제 1>

/FIND 디렉터리에 있는 허가권이 015인 파일을 검색하여 삭제

 

파일이 삭제된 것을 확인할 수 있습니다.

 

/FIND 디렉터리에 있는 일반 파일을 검색하여 삭제

현재 경로에서 일반파일(f)을 찾아 삭제

 

3. du (Disk Usage)

파일이나 디렉터리의 용량 확인

→ [옵션]

-s 요약하여 출력

-h 사람이 읽기 쉽게 단위를 변경

<예제 1>

/etc 디렉터리 안의 파일/디렉터리의 용량 확인

/etc/passwd 파일의 용량 확인

 

 

 

★★★

 

find 옵션

[옵션]

-empty : 비어 있는 파일, 단 일반파일 또는 일반 디렉토리에 한함
-uid n : 지정된 n값의 UID를 갖는 파일
-gid n : 지정된 n값의 GID를 갖는 파일
-group 그룹명 : 지정한 그룹명에 소속된 파일
-name : 지정된 형식의 패턴을 가지는 파일
-newer 파일 : 지정한 파일보다 더 최근에 변경된 적이 있는 파일
-used n : 파일이 변경된 이후 최근 n일 이후에 액세스된 적이 있는 파일
-user uname : 지정한 uname의 소유로 된 모든 파일(UID로 지정가능)
-amin n : 최근 n분 이전에 액세스된 적이 있는 파일
-anewer 파일 : 지정한 파일보다 더 최근에 액세스된 적이 있는 파일
-atime n : 최근 n*24 시간 전에 액세스된 적이 있는 파일
-mmin n : 최근 n분 이전에 변경된 적이 있는 파일
-mtime n : 최근 n*24 시간 이전에 변경된 적이 있는 파일
-executable : 실행 가능한 파일
-readable : 읽기 가능한 파일
-writable : 쓰기 가능한 파일
-fstype type : 지정한 파일시스템타입(type)에 존재하는 파일
-nogroup : 소속그룹이 존재하지 않는 파일
-nouser : 소속 사용자(ID)가 존재하지 않는 파일
-path 패턴 : 파일명이 패턴에 매칭되는 파일
-perm 모드 : 모드에서 지정된 퍼미션과 일치하는 퍼미션을 가진 파일만 해당됨.
-perm -mode : 모드에서 지정된 퍼미션을 가진 모든 파일.
-regex 패턴 : 패턴에서 지정한 정규표현식에 매칭되는 파일
-size n[cwbkMG] : 지정된 n 단위의 디스크공간을 사용하는 파일. 디폴트는 b
-type 타입 : 지정한 파일타입에 해당하는 파일. b,c,d,p,f,l,s 등이 있음


[수행할작업(action)]

-delete : 검색된 파일들을 삭제
-exec command ; : 지정한 command 를 실행
-exec command {} + : 검색된 파일들을 차례대로 매칭하면서 지정된 command 를 수행
-ls : 'ls - dils' 를 수행
-ok command ; : -exec 와 같지만 실행하기 전에 먼저 사용자에게 표준입력으로 수행할 command 를 입력 받는다. 만약 입력이 없다면 지정된 command 를 수행한다.
-print : 검색된 파일들에 대하여 전체파일 경로로 파일리스트를 표준출력으로 출력한다.
-printf format : 검색된 파일들에 대하여 지정된 format 형식으로 표준출력으로 출력


[연산자]

( ) : 괄호( )안의 연산이 먼저 행해짐
! expr : expr 이 거짓일때 참, 참일때 거짓이 됨.
-not expr : 위의 ! expr 과 동일함 (POSIX 호환용)
expr1 expr2 : AND 의 의미. expr1 이 거짓일 때에는 expr2 는 평가되지 않음
expr1 -a expr2 : 'expr1 expr2' 와 같음
expr1 -and expr2 : 'expr1 expr2' 와 같음 (POSIX 호환용)
expr1 -o expr2 : OR 의 의미. expr1 이 참일 경우 expr2 는 평가되지 않음.
expr1 -or expr2 : 'expr1 -o expr2' 와 같은 의미

 

 

 

 

 

'서버 > Linux' 카테고리의 다른 글

[Linux] 네트워크 관련 파일  (0) 2017.10.24
[Linux] 부팅 프로세스  (0) 2017.10.23
[Linux] quota (쿼터) 설정  (0) 2017.10.23
[Linux] RAID (4) 0,1,5의 고장과 원상 복구하기  (0) 2017.10.23
[Linux] 마운트 ( Mount )  (0) 2017.10.23