반응형

예전에 포스팅 했던 [리눅스] 파일 개수 구하기(find, wc 이용) 글에서, find 명령어를 이용해 이름 기준으로 파일을 검색하는 방법을 알아보았다. 이번에는 파일 크기를 기준으로 검색하고, 그리고 검색된 결과를 바로 삭제하는 방법을 알아본다.


리눅스 콘솔에서 find --help 명령어를 쳐보면 아래와 같이 find에 대한 설명이 나온다. 아래 설명에서 굵게 처리한 부분을 보면, 힌트를 얻을 수 있다.


# find -- help


사용법 : find [경로...] [수식]


default path is the current directory; default expression is -print

expression may consist of: operators, options, tests, and actions:


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


positional options (always true): -daystart -follow -regextype


normal options (always true, specified before other expressions):

-depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf

--version -xdev -ignore_readdir_race -noignore_readdir_race


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 -iwholename PATTERN -iregex PATTERN

-links N -lname PATTERN -mmin N -mtime N -name PATTERN -newer FILE

-nouser -nogroup -path PATTERN -perm [+-]MODE -regex PATTERN

-wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N

-used N -user NAME -xtype [bcdpfls]

-context CONTEXT



actions: -delete -print0 -printf FORMAT -fprintf FILE FORMAT -print

-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit

-exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;

-execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;


find에서 -size 옵션을 주면 파일 크기를 기준으로 검색을 할 수 있고, -exec 옵션을 주면 검색 결과에 특정 액션을 할 수 있다. 그럼 케이스 별로 나누어 실제 사용 예시를 알아본다.



1. 파일 크기 기준으로 검색

# find ./* -size +N => N 이상 크기의 파일을 검색한다.

# find ./* -size -N => N 이하 크기의 파일을 검색한다.

# find ./* -size N => N 크기의 파일을 검색한다.


** 사이즈 단위

b : 블록단위

c : byte

k : kbyte

w : 2byte 워드


예를 들어 콘솔 현재 경로에서 512byte 이상, 1024byte 이내의 파일을 찾고자 한다면 아래와 같이 입력하면 된다.

# find ./* -size +512c -size 1024c



2. 파일 검색 후 삭제

# find ./* [옵션] -exec rm -rf {} \; => find 검색 결과를 모두 삭제한다.


예를 들어 콘솔 현재 경로 아래의 파일을 모두 삭제하고자 한다면 아래와 같이 입력하면 된다.

# find ./* -type -f -exec rm -rf {} \;



3. 복합

그럼 지난 포스팅의 내용과, 이번 포스팅의 내용을 복합하여 정리해보면 아래와 같은 명령어도 실행할 수 있다.

# find ./* -type -f -name '*.jpg' -size +512k -size -1024k -exec rm -rf {} \;

=> 현재 경로의 파일 중에 파일 확장자가 jpg이면서, 사이즈가 512kbyte 이상, 1024kbyte 이하인 것들을 모두 삭제한다.



 

반응형



Posted by 궁극의 java개발자
,





반응형

리눅스 OS를 서버로 사용할 경우, 특정 종류 혹은 모든 파일의 개수를 구해야 할 경우가 있다.


이때 사용되는 명령어를 간단히 정리해본다. 결론적으로 find와 wc 명령어를 사용하게 되는데, 우선 이 두 명령어가 어떤 명령어인지 간단하게 짚고 넘어가본다.



1. find 명령어


콘솔에서 find --help 라고 쳐보면 아래와 같은 내용이 출력된다.


 

사용법: find [경로...] [수식]

기본 경로는 현재 디렉토리입니다; 기본 수식은 -print입니다

수식은 다음과 같이 이루어질 수 있습니다:

연산자(감소하는 우선순위; 다른 것이 주어지지 않으면 -and가 묵시적으로 사용됨)

( EXPR ) | EXPR -not EXPR EXPR1 -a EXPR2 EXPR1 -and EXPR2


EXPR1 -o EXPR2 EXPR1 -or EXPR2 EXPR1 , EXPR2

옵션 (항상 참): -daystart -depth -follow --help

-maxdepth LEVELS -mindepth LEVELS -mount -noleaf --version -xdev

시험 (N은 +N, -N, N이 될 수 있음): -amin N -answer 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]


-context CONTEXT


행동: -exec COMMAND ; -fprint FILE -fprint0 FILE -fprintf FILE FORMAT

-ok COMMAND ; -print -print0 -printf FORMAT -prune -ls


=> 즉 find는 여러가지 조건을 가진 파일 혹은 폴더들의 목록을 검색하는 명령어이다.

 



2. wc 명령어


콘솔에서 wc --help 라고 쳐보면 아래와 같은 내용이 출력된다.


사용법: wc [<옵션>]... [<파일>]...

Print newline, word, and byte counts for each FILE, and a total line if

more than one FILE is specified. With no FILE, or when FILE is -,

read standard input.

-c, --bytes print the byte counts

-m, --chars print the character counts

-l, --lines print the newline counts

-L, --max-line-length 가장 긴 줄의 길이를 표시합니다

-w, --words 단어의 개수를 인쇄합니다

--help 이 도움말을 표시하고 끝냅니다

--version 버전 정보를 출력하고 끝냅니다


=> 즉 wc는 파일의 줄이나 단어 수 등을 한번에 계산하여 확인할 수 있는 명령어이다.

 



 

3. 파일 개수 구하기


위 두 내용을 살펴보았을 때 파일 개수는 아래와 같이 구해야 한다는 것을 알 수 있다.


> find [디렉토리경로] -type f -name "[파일명규칙]" | wc -l


find의 결과로 출력되는 라인수 = 검색된 파일 개수이기 때문에 find로 특정 이름을 가진 파일을 검색하고, 이 결과의 줄 수를 출력하는 것이다.



예를 들어 /home 경로 안에서 확장자가 .log인 파일의 개수를 구하고자 할 때는 아래와 같이 입력하면 된다.


> find /home -type f -name "*.log" | wc -l


 

반응형

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

리눅스 tar, gz 압축 및 해제  (0) 2015.12.17
크론탭(crontab) 설정 방법  (0) 2015.12.17
find 명령 사용법  (0) 2015.12.17
iptables를 이용한 포트포워딩  (0) 2015.12.17
리눅스 고급명령어  (0) 2015.12.15



Posted by 궁극의 java개발자
,

find 명령 사용법

Server/Linux 2015. 12. 17. 13:15





반응형

find 명령어는 파일 시스템에서 주어진 조건으로 파일을 찾는다.

사용법을 살펴보자.


find 대상디렉토리 검색 조건 처리 방법

대상 디렉토리 : 찾기를 시작할 디렉토리를 지정한다.
검색 조건 : 찾을 조건을 지정한다.
-name filename
파일 이름으로 찾는다.
-atime +n
access time 이 n일 이전인 파일을 찾는다.
-atime -n
access time이 n일 이내인 파일을 찾는다.
-mtime +n
n일 이전에 변경된 파일을 찾는다.
-mtime -n
n일 이내에 변경된 파일을 찾는다.
-perm nnn
파일 권한이 nnn인 파일을 찾는다.
-type x
파일 타입이 x인 파일들을 찾는다.
-size n
사이즈가 n이상인 파일들을 찾는다.
-links n
링크된 개수가 n인 파일들을 찾는다.
-user username
user이름으로 찾는다.
-group groupname
group 이름으로 찾는다.

처리방법 : 찾은 파일을 어떻게 할 것인지를 지정한다.
-print
찾은 파일의 절대 경로명을 화면에 출력한다.
-exec cmd {}; 
찾은 파일들에 대해 cmd 명령어를 실행한다.


find [찾을 디렉토리경로] [찾기옵션] [찾은후행할 작업]

[찾을 디렉토리경로]에는 다음과 같은 것들이 있다.

· : 현재 디렉토리이하

/ : 루트디렉토리이하(파일시스템전체)

~ID : 특정ID의 홈디렉토리이하

[찾기옵션]에는 다음과 같은 것들이 있다.

  • empty : 비어있는 파일
  • gid n : 특정 gid를 갖는 파일(n : 특정 gid)
  • group gname : 특정 group에 속한 파일(gname : group명)
  • name : 지정한 형식을 갖는 파일이름
  • newer : 특정 파일 이후에 생성된 파일
  • perm : 특정 허가모드를 가지고 있는 파일
  • uid n : 특정 uid를 갖는 파일(n : 특정 uid)
  • used n : 최근에 n일 이후에 변경된 파일(n : 일수)
  • user : 특정파일을 소유하고 있는 소유자의 파일

[찾은후 행할 작업]에는 다음과 같은 것들이 있다.

  • print : 가장많이 쓰는 옵션으로 찾은 파일을 보여준다.
  • exec : 찾은 파일들에 대해 특정명령을 수행한다.


 

그럼, 사용예를 들어 보겠습니다.

[root@ciss9 /]# find . -uid 504 -print

./home/sspark

./home/sspark/.Xdefaults

./home/sspark/.bash_logout

./home/sspark/.bash_profile

./home/sspark/.bashrc

위의 예는 현재디렉토리(.)에서부터 uid가 504인 사용자의 파일을 찾아서 보여달라는 것입니다.(-print)

[root@ciss9 /]# find ~sspark -name *.shtml -print

./home/sspark/public_html/sample.shtml

./home/sspark/public_html/testpass/sample.shtml

./home/sspark/public_html/testdir/sample.shtml

위의 예는 sspark이라는 사용자의 소유로된 파일중 shtml로 끝나는 파일을 찾아서 보여달라는 것입니다.

[root@ciss9 /root]# find ~sspark -name *.doc -exec rm -f {} \;

위의 예는 sspark이라는 사용자의 홈디렉토리(~sspark)이하에 존재하는 doc로 끝나는(*.doc) 파일을 찾아서 묻지말고(-f) 지워(rm)버리라는 명령어입니다.

이 명령어는 웹호스팅사용자에게 보다도 서버관리자에게 더욱 유용한 명령어로서 서버관리를 하다보면 어떤 파일이 어디에 위치하고 있는지 찾아야 할 때가 많습니다. 이런 경우에 매우 유용하게 사용됩니다.




예를 들어보자.
$ find /user4 -name test* -print

/user4 아래에서 파일이름이 test로 시작하는 모든 파일을 찾아서 화면에
보여준다.

$ cd /
$ find . -name ping -print

root 디렉토리 밑에서 파일이름이 ping인 파일을 찾아 절대 경로명을 화면에
출력한다.

$ cd /
$ find /usr -name *.c -print

/usr 밑에 이름이 .c로 끝나는 모든 파일들을 찾아 경로명을 보여준다.

$ cd /
$ find $home -name who.txt -print

home 디렉토리 아래에 who.txt라는 파일을 찾아 경로명을 보여준다.

$ cd /
$ find . -type d -print

파일 타입이 d인 파일을 찾아 경로명을 화면에 출력한다.

$ cd /
$ find /dev -type c -print

/dev디렉토리 아래에서 파일 타입이 c인 파일을 찾아 경로명을 보여 준다.

$ cd /
$ find . -perm 700 -print

파일 권한이 700인 파일을 찾아준다.

$ cd /
$ find . \ ( -perm 400 -o -perm 200 ) -print

파일 권한이 400인 파일과 200인 파일을 찾아준다.
(주의 : "\"의 앞뒤에 space 가 반드시 있어야 한다.)

$ cd /
$ find . -size +1024 -print

파일의 블럭 크기가 1024 이상인 파일을 찾아준다.

$ cd /
$ find . -name core -size +2048 -print

파일 이름이 core이고 크기가 2048블럭 이상인 파일을 찾아준다.

$ cd /
$ find . -user unix01 -print

파일 소유자가 unix01인 파일을 찾아준다.

$ cd /
$ find . -group unix -print

사용자그룹이 unix인 파일을 찾아준다.

$ cd /
$ find . -atime +30 -print

30일 이전에 억세스되었던 파일을 찾는다.

$ cd /
$ find . -mtime -7 -print

7일 이내에 수정된 적이 있는 파일을 찾는다.

$ cd /
$ find . -name core -exec ls -l {} \;

이름이 core인 파일을 찾아서 ls -l 한다.

$ cd /
$ find . -name \*.c -atime +30 -exec ls -l {} \;

30일 이전에 억세스된 파일 중 *.c를 찾아 ls -l 한다.

$ cd /
$ find . -name core -exec rm -i {} \;

현재 디렉토리 밑에서 이름이 core인 파일을 찾아 지운다(지우기 전에 정말
지울 지를 물어본다.)

grep와 함께 사용한 find명령어 strcpy 문자열을 포함한 현재디렉토리 아래의 *c파일
grep strcpy `find ./ -name *c`

8. 최상위 root에서 파일 찾기
find /
home directory 밑에서 찾기
find ~ -name sample
find ~ -name 'file*'
home directory에서 파일명에 file이 들어가면서 타입이 f(일반파일인)경우
find ~ -name 'file*' -a -type f
특정 디렉토리에서 사용자 unix05가 만든 파일 찾기
find /data2/unix -user unix05

9. core
실행하다가 오류가 있는 파일 core
(ex. sleep 20) ctrl+\ 강제종료하면 core 파일이 생성됨
실행하다가 종료되어도 생김 (cat으로 열수 없음(개발자가 debugger로만 확인할 수 있음, 파일 크기가 굉장히 큼)

core파일 찾기
find ~ -name core
core파일 삭제
find ~ -name core -exec rm {} \;
HDD 용량 줄이기
find / -name core -exec rm {} \;

10. passwd 파일을 찾을 때 뜨는 2>(오류메시지)를 /dev/null로 보냄 -오류메시지 안 보임
find / -name passwd 2> /dev/null
ls -i passwd (passwd 파일의 inode찾기)
find / -inum 108235 2> /dev/null (inode가 같은 것을 찾음)

11. 최근 3일 사이에 마지막 수정되고 파일타입은 일반타입인 로그파일(/var/adm에 있음) 찾기
find /var/adm -mtime -3 -a -type f

12. /etc 디렉토리에서 일반파일 중 파일의 크기가 4096 byte 이하인 파일 찾기 (1block = 512byte)
find /etc -size -8 -a -type f
find /etc -size -1 -a -type f 2> /dev/null 512바이트 이하 파일 찾기 (오류메시지는 /dev/null로 보내기)

13. etc + k 이전에 입력했던 내용
| more 내용을 페이지별로 보여주기 (많은 내용일 경우)


find ~ -name '*.sql' -exec grep -il 'linkcomp' {} \;

반응형

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

크론탭(crontab) 설정 방법  (0) 2015.12.17
파일 개수 구하기(find, wc 이용)  (0) 2015.12.17
iptables를 이용한 포트포워딩  (0) 2015.12.17
리눅스 고급명령어  (0) 2015.12.15
리눅스 필수명령어  (0) 2015.12.15



Posted by 궁극의 java개발자
,