● find
Directory tree에서 파일을 검색하는 경우
여러 가지 조건으로 검색 가능(file name, size, owner modification time, file type, permission ...)
검색 결과는 표준 출력(screen)에 표시

find pathname(s) expression(s) action(s)

○ Expressions
 Expression  Definition
 -name filename  파일 이름으로 검색
 -size [+|-] n  [+n, -n, n] 파일의 크기(512byte blocks * n)로 검색
 -atime(mtime, ctime) [+|-] n  [+n days, -n days, n days] 파일의 접근(변경)시간으로 검색
 -newer file  마지막 변경날짜가 file로 명시한 파일보다 최근인 파일 검색.
비교할 파일은 touch로 생성 후 날짜 변경
 -user loginID  loginID name으로 검색(파일 소유주 검색)
 -type  file type으로 검색 [f(file) or d(directory), b(block), c(character device)
 -perm  permission bit로 검색

○ Actions
 Action  Definition
 -exec command {} \;  조건에 맞는 파일을 찾으면 command를 실행함.
command의 argument는 find에 의해 찾은 파일의 경로명으로 {}을 대체하고 \;이 올 때까지 실행함.
 -ok command {} \;  조건에 맞는 파일을 찾으면 command를 실행할 것인지 하나 하나 확인한다. 나머지는 -exec와 동일.
 -print  조건에 맞는 파일의 경로명을 출력함.
 -ls  조건에 맞는 파일을 찾으면 ls -li 리스트처럼 출력함.

$ find / -name core
$ find ~ -name core -exec rm {} \;
$ find /usr -name '*tif' -ls
$ find . -mtime +5
$ find ~ -size +57
$ find / -inum 19894
$ find / -name f*
$ find / -name 'f*'
$ find /etc -type f
첫번째 명령은 core라는 이름의 파일을 /부터 찾는다.
두번째 명령은 core라는 이름의 파일을 /부터 찾되 찾은 파일은 rm으로 삭제한다.
세번째 명령은 끝의 세자리가 tif인 이름의 파일을 /usr부터 찾고 그 결과를 리스트처럼 출력함.
네번째 명령은 현재 디렉토리부터 5일 이후의 변경시간 차이가 나는 파일을 검색함.
다섯번째 명령은 홈디렉토리부터 파일 크기가 512*57bytes 인 파일을 검색.
여섯번째 명령은 inode가 19894인 파일을 /부터 찾는다.
일곱번째 명령은 파일 이름이 f로 시작하는 파일을 /부터 찾는다.
여덟번째 명령도 일곱번째와 동일하다.
아홉번째 명령은 파일타입이 file인 파일을 /etc부터 검색한다.



● grep(Globally Regular Expression Print)
파일의 내용(data)에 포함된 문자 검색
character pattern이나 정규식 사용
검색된 line을 화면에 표시
파일의 내용(data)은 영향을 받지 않는다.
ascii, shell script만 사용 가능.
binary, application data는 검색 불가능.

grep option(s) pattern filename(s)

○ options
 Option  Definition
 -i  대소문자 구분을 하지 않음
 -l  pattern이 있는 파일이름만 출력하고 라인을 출력하지 않음
 -n  출력하는 각 라인 앞에 라인번호를 붙임
 -v  pattern이 없는 라인만 출력(grep명령어의 반대)
 -c  pattern이 있는 라인의 갯수
 -w  pattern과 맞는 단어가 독립적인 경우만 출력

$ grep -n root /etc/group
$ grep -v root /etc/group
$ grep -li the *     // 디렉토리는 현재 /etc밑이라고 가정
$ grep -li root group passwd hosts     // 디렉토리는 현재 /etc밑이라고 가정
$ ls -la | grep '11월 10일'
첫번째 명령은 /etc/group에서 root가 있는 라인 표시
두번째 명령은 /etc/group에서 root가 없는 라인 표시
세번째 명령은 /etc에 있는 파일 중 'the' 문자가 들어있는 파일 출력(대소문자 구분 않고, 검색된 라인 출력 안함)
네번째 명령은 /etc에 있는 파일 중 root, group, passwd, hosts 라는 문자가 들어있는 파일 출력
다섯번째 명령은 리스트들 중 파일수정시간이 11월10일인 것만 출력

watch 명령과 같이 쓰이면 편리함. (리눅스 전용 명령어)
watch -n 5 'ps -ef  | grep testdb'
SID가 testdb인 프로세스들 즉 백그라운드 프로세스들을 보여주는데 5초마다 한번씩 ' ' 안의 명령어가 실행되므로 계속해서 프로세스의 상태를 확인 가능함.



● 정규식
 Meta character  Result  Sample
 ^  Pattern으로 시작하는 라인 출력  '^pattern'
 $  Pattern으로 끝나는 라인 출력  'pattern$'
 .  P로 시작하여 n으로 끝나는 라인
(. 은 1문자)
 'p....n'
 *  zero or more times  '[a-z]*'
 []  Pattern에 해당하는 한 문자  '[Pp]attern'
 [^]  Pattern에 해당하지 않는 한 문자  '[^a-m]attern'
 \<, \>  Pattern 단어로 시작 또는 끝나는 라인 출력  '\<pattern\>'

$ grep '^root' /etc/passwd
$ grep 'A...n' /etc/passwd
$ grep 'adm$' /etc/group
첫번째 명령은 /etc/passwd에서 'root'로 시작하는 모든 라인 출력
두번째 명령은 /etc/passwd에서 'A'로 시작하고 'n'으로 끝나는 5글자로 된 단어가 포함된 모든 라인 출력
세번째 명령은 /etc/group에서 'adm'으로 끝나는 모든 라인 출력



● egrep
grep의 확장 버전(extended grep)
파일의 내용(data)에 포함된 문자 검색
character pattern이나 정규식/확장정규식 사용
검색된 라인을 화면에 표시
파일의 내용(data)은 영향을 받지 않는다.
ascii, shell script만 사용 가능
binary, application data는 검색 할 수 없다.

egrep option(s) pattern filename(s)

○ options
 Option  Definition
 -i  대소문자 구분을 하지 않음
 -l  pattern이 있는 파일이름만 출력하고 라인을 출력하지 않음
 -n  출력하는 각 라인 앞에 라인번호를 붙임
 -v  pattern이 없는 라인만 출력(grep명령어의 반대)
 -c  pattern이 있는 라인의 갯수
 -w  pattern과 맞는 단어가 독립적인 경우만 출력

○ 확장 정규식
 Meta character  Result  Sample
 +  a-z중 한 문자로 시작하고 ark로 끝나는 단어가 있는 라인 출력  '[a-z]+ark'
 x|y  apple이나 orange가 포함된 라인 출력  'apple|orange'
 (|)  searches나 searching이 포함된 라인 출력  'search(es|ing)+'

$ egrep 'N(e|o)+' /etc/passwd
$ egrep '(Network|uucp Admin' /etc/passwd
첫번째 명령은 /etc/passwd에서 'N'으로 시작하고 'e'나 'o'가 포함된 단어가 있는 모든 라인 출력
두번째 명령은 /etc/passwd에서 'Network'이나 'uucp'로 시작하고 ' Admin'으로 끝나는 단어가 포함된 모든 라인 출력
Posted by 겨울섬
,