관리 메뉴

리눅스 확장 명령어(grep, find) 사용 방법 본문

리눅스/Linux 공부내용

리눅스 확장 명령어(grep, find) 사용 방법

ª_ª 2016. 12. 20. 10:04
728x90
반응형

grep 명령어(파일 내용을 검색)

grep 명령어는 문자열 패턴으로 하나 또는 이상의 파일들에 내용을 검색합니다. grep 명령어는 패턴에 포함된 모든 줄을 화면으로 출력하며, 파일 내용을 바꾸지는 못합니다.

 

grep 명령어의 사용방법

grep option(s) pattern file_name(s)

 

옵션

정의

-i

대소문자 구분 없이 검색

-l

검색패턴과 일치하면 파일명을 출력

-n

검색패턴과 일치하면 출력 값에 줄 번호를 붙여서 출력

-v

패턴과 일치하지 않는 정보 출력

-c

패턴과 일치하는 라인 수 출력

-w

단어단위의 패턴을 사용하여 검색

 

grep -i root /etc/group

# grep -i Root /etc/group

root: x: 0:

#

대소문자 구분 없이 root를 검색합니다.


grep -l root /etc/group

# grep -l root /etc/group

/etc/group

#

* root가 있는지 없는지 표시합니다.

 

grep -l root group passwd hosts 

# cd /etc

# grep -l root group passwd hosts

group

passwd

#

* root가 포함된 파일명을 검색 합니다. hosts에는 없어서 출력이 되지 않습니다.


grep -n root /etc/group

# grep -i root /etc/group

1: root: x: 0:

#

줄번호를 붙여줍니다.


grep -v root /etc/group

# grep -l root /etc/group

bin:x:1:bin,daemon

daemon:x:2:bin,daemon

sys:x:3:bin,adm

adm:x:4:adm,daemon

tty:x:5:

disk:x:6:

lp:x:7:daemon

mem:x:8:

kmem:x:9:

wheel:x:10:

mail:x:12:mail,postfix

uucp:x:14:

man:x:15:

games:x:20:

gopher:x:30:

video:x:39:

dip:x:40:

ftp:x:50:

lock:x:54:

audio:x:63:

nobody:x:99:

users:x:100:

dbus:x:81:

usbmuxd:x:113:

utmp:x:22:

utempter:x:35:

rpc:x:32:

oprofile:x:16:

desktop_admin_r:x:499:

desktop_user_r:x:498:

floppy:x:19:

vcsa:x:69:

rtkit:x:497:

abrt:x:173:

hsqldb:x:96:

avahi-autoipd:x:170:

cdrom:x:11:

tape:x:33:

dialout:x:18:

saslauth:x:76:

rpcuser:x:29:

nfsnobody:x:65534:

postdrop:x:90:

postfix:x:89:

wbpriv:x:88:

haldaemon:x:68:haldaemon

gdm:x:42:

ntp:x:38:

cgred:x:496:

apache:x:48:

radvd:x:75:

pulse:x:495:

pulse-access:x:494:

stapusr:x:156:

stapsys:x:157:

stapdev:x:158:

fuse:x:493:

kvm:x:36:qemu

qemu:x:107:

sshd:x:74:

tcpdump:x:72:

slocate:x:21:

mysql:x:500:

#

* root를 제외한 결과를 출력 합니다.


grep -c root /etc/group

# grep -c root /etc/group

1

#

vi 편집기 연습하기

# vi test.txt

------------------

root

root

root

root

-------------------

esc

:wq

# grep -c root test.txt

4 

라인수를 보여줍니다.


메타문자

grep 명령어는 몇몇의 정규표현 메타문자로 더 나은 검색패턴을 정의하는 것을 지원합니다.


메타문자

목적

예제

결과

^

줄의 시작을 지정

'^pattern'

"pattern"이 포함된 시작 라인과 일치

$

줄의 끝을 지정

'pattern$'

"pattern"이 포함된 끝 라인과 일치

.

문자 하나와 일치

'p.....n'

"p""n"사이에 포함된 5문자와 일치

*

항목에 0번 이상 일치

‘[a-z]*'

소문자들만 일치. 나머진 아무것도 필요 x

[ ]

패턴에 하나 이상의 문자가 일치

‘[Pp]attern'

"Pattern"이나 "pattern"이 포함된 줄과 일치

[^]

패턴에 문자를 제외하고 일치

'[^a-m]attern'

a에서 m사이의 문자를 제외하고 "attern" 과 조합해서 일치

 

grep '^no' /etc/passwd

# grep '^no' /etc/passwd

nobody:x:99:99:Nobody:/:/sbin/nologin

#

* /etc/passwd 파일에 "no"로 시작하는 문자의 줄과 일치하는 줄을 출력합니다.


grep '^r..t' /etc/passwd

# grep '^r..t' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

#

* /etc/passwd 파일에 "r"와 “t"사이에 2개의 문자를 포함하는 줄을 출력 합니다.


grep 'adm$' /etc/group

# grep 'adm$' /etc/group

sys:x:3:bin,adm

#

* /etc/group 파일에 "adm"으로 끝나는 줄을 출력 합니다.


grep -l root group passwd hosts

# grep '^no' /etc/passwd

nobody:x:99:99:Nobody:/:/sbin/nologin

#

* /etc/passwd 파일에 "no"로 시작하는 문자의 줄과 일치하는 줄을 출력합니다.


egrep 명령어 사용

egrep 명령어는 확장된 정규표현 메타문자를 사용하여 파일의 내용을 검색합니다. 확장된 정규표현 메타문자는 grep 명령어에 정규표현 메타문자에 몇 가지 메타문자를 포함합니다.

 

확장 메타문자

메타문자

목적

예제

결과

+

하나이상의 문자와 일치

'[a-z]+ark'

하나 이상의 소문자와 일치

예를들어, ("airpark", "bark", "dark", "landmark")등이 올 수 있습니다.

x | y

x y 둘 중 아무거나 일치

'apple|orange'

"apple""orange" 둘 중 하나와 일치

( | )

문자 하나와 일치

'p.....n'

"p""n"사이에 포함된 5문자와 일치

*

항목에 0번 이상 일치

‘[a-z]*'

소문자들만 일치. 나머진 아무것도 필요 x

[ ]

패턴에 하나 이상의 문자가 일치

‘[Pp]attern'

"Pattern"이나 "pattern"이 포함된 줄과 일치

[^]

패턴에 문자를 제외하고 일치

'[^a-m]attern'

a에서 m사이의 문자를 제외하고 "attern" 과 조합해서 일치

 

egrep 명령어의 사용방법

egrep -option(s) pattern file_name(s)

 

egrep 'N(e|o)+' /etc/passwd

# egrep 'N(e|o)+' /etc/passwd

nobody:x:99:99:Nobody:/:/sbin/nologin

#

# egrep -n 'N(e|o)+' /etc/passwd

15:nobody:x:99:99:Nobody:/:/sbin/nologin

#

* 패턴 N("e" 또는 "o")과 하나 이상의 문자를 포함하는 모든 줄을 검색합니다.

 

fgrep 명령어 사용

fgrep 명령어는 문자 그대로나 문자 그룹으로 검색합니다. fgrep 명령어는 모든 정규표현 메타문자 그대로를 읽습니다. fgrep 명령어에서 정규 표현 메타문자들은 특별한 의미를 가지지 않습니다. 예를 들면 "?" 문자는 정규표현 메타문자에서 한 문자를 의미하지 않고 그냥 "?"문자로만 인식합니다.

 

fgrep 명령어의 사용방법

fgrep option(s) string file_name(s)

 

fgrep 'root' /etc/passwd

# fgrep 'root' /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

#

# fgrep -n 'root' /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

11:operator:x:11:0:operator:/root:/sbin/nologin

#

* /etc/passwd 파일에서 (root) 문자를 포함하는 모든 줄을 검색 합니다.


 

find 명령어(파일과 디렉터리 검색)

find 명령어를 사용하면 계층적 디렉터리의 파일이나 디렉터리 위치를 알 수 있습니다. 이 명령어는 파일이름, 크기,소유자, 수정시간, 파일 유형 등 표준 검색을 사용합니다.

 

find 명령어 사용 방법

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

 

 

정의

pathname

검색을 시작하는 절대경로나 상대경로로 설정

expression

하나 이상의 검색 옵션을 설정 합니다. 옵션을 여러 개 지정 할 때는 "AND" 절을 넣어 줘야 하고, 이때 표현식 전부는 참이어야 합니다.

action

파일을 찾고 난 뒤에 설정

기본은 일치한 파일의 경로를 화면에 보여줍니다.

 

find 명령의 pathname 옵션

옵션

정의

~

home 디렉터리를 뜻 합니다.

관리자라면 /root 와 동일합니다.

사용자가 user라면 /user 와 동일합니다.

/

제일 최상위 경로입니다.

이 외에도 경로는 자기 자신이 정하면 됩니다. /etc, /usr, /bin, /dev 등등 많습니다.

 

find 명령의 expression 옵션

옵션

정의

-name filename

파일명과 일치하는 파일들을 찾습니다.

“ ” 안에 메타문자들을 사용할 수 있습니다.

-size [+|-]n

+n이라고 하면 n블록보다 더 큰 파일, -n은 작은 파일 n이라고 하면 n문자 크기인 파일을 찾을 수 있습니다. 한 블록은 512byte

-atime [+|-]n

n일 전에 접근한 파일을 찾습니다. +nn일 이전에 접근한 파일이며 -nn일 내에 접근한 파일을 찾는 옵션입니다. nn일날 접근한 파일을 찾습니다.

-mtime [+|-]n

파일의 내용이 수정된 시각을 기준으로 합니다. -atime옵션과 유사합니다.

-user loginID

소유주가 loginID와 일치하는 파일들을 모두 찾습니다.

-type

파일이나 디렉터리 형태로 찾습니다.

-perm

Permission 비트와 일치하는 파일들을 찾습니다.

 

find 명령어의 action 옵션

옵션

정의

-exec command {} \;

command로 지정한 명령어를 실행

찾은 파일의 경로명은 {}로 표기

백슬러쉬(\)와 세미콜론(;)은 명령어의 끝을 의미

-ok command {} \;

각 파일을 찾아서 실행하기 전에 확인

-exec 명령어의 대화양식

-print

기본설정으로 찾은 파일을 현재경로로 화면에 표시

-ls

찾은 파일의 innode 번호, Permission, 하드링크 수, 소유자, 그룹, 크기, 수정날짜 등을 표시

 

find ~ -name passwd

find /root -name passwd

# find ~ -name passwd

# find /root -name passwd

* 아무것도 나오지 않습니다. passwdhome디렉터리 밑에 없습니다.

 

find / -name passwd

# find / -name passwd

/usr/bin/passwd

/etc/passwd

/etc/pam.d/passwd

/selinux/class/passwd

/selinux/class/passwd/perms/passwd

#

* 최상위 경로에서 시작했기 때문에 전체가 나온다고 봐도 됩니다.

 

find / -name passwd -ls

# find / -name passwd

1188078 32 -rwsr-xr-x 1 root root 30768 222 2012 /usr/bin/passwd

787385 4 -rw-r--r-- 1 root root 1796 1116 04:50 /etc/passwd

785257 4 -rw-r--r-- 1 root root 146 222 2012 /etc/pam.d/passwd

.....

#

* innode 번호, Permission, 하드링크 수, 소유자, 그룹, 크기, 수정날짜 경로 등을 표시 합니다.

 

find ~ -size +10

# find ~ -size +10

/root/.cache/event-sound-cache.tdb.bdfbd8c7dc133f88d4bdf47b00000022.x86_64-redhat-linux-gnu

/root/.cache/ibus/bus/registry.xml

/root/.gstreamer-0.10/registry.x86_64.bin

/root/.gconfd/saved_state

/root/.pulse/bdfbd8c7dc133f88d4bdf47b00000022-device-volumes.tdb

/root/.pulse/bdfbd8c7dc133f88d4bdf47b00000022-stream-volumes.tdb

/root/install.log.syslog

/root/install.log

/root/.gnupg/gpg.conf

#

* 10 블록(512-byte 블록)보다 큰 파일을 사용자의 홈 디렉터리에서 찾습니다.

 

find /var mtime +2

# find /var mtime +2

.... 엄청많이 나와영~!

#

* 2일전에 수정 되지 않은 파일들을 찾습니다.

 

find /root/다운로드 -type f

find /root/다운로드 -type d

# find ~ -size +10

# find /root/다운로드 -type f

# find /root/다운로드 -type d

/root/다운로드

#

* filedirectory를 찾습니다.


728x90
반응형
Comments