안녕하세요.
오늘의 포스팅은 파일 및 디렉토리를 검색하는 방법에 대한 것입니다.
찾는 파일 및 디렉토리가 어디에 있든 명령어만 확실히 알고 있다면 찾을 수 있답니다.
그럼 포스팅을 시작하도록 할게요!
첫번째 명령어는 grep 입니다.
어원은 유닉스 ed의 비슷한 기능을 수행하는 g/re/p에서 유래되었다고 합니다.
global / regular expression / print 에서 각각의 머릿글자를 따 온 것이며 이것은 ed 텍스트 편집기에서 쓰이는 연속적인 지시어라고 하네요.
사용법은 grep (옵션) (패턴) (파일명 및 디렉토리명) 입니다.
위 실습을 보면 /etc/passwd 안에서 root라는 패턴을 찾는 경우입니다.
이 grep 명령어는 다양한 옵션이 있는데 지금부터 알아보도록 하겠습니다.
첫번째는 -n입니다.
이 명령어는 찾은 패턴이 몇번째 줄에 있나 그 라인도 출력해주는 명령어입니다.
나중에 직접가서 찾기 편하겠죠?
다음은 -v입니다.
이것은 검색 패턴을 제외하고 검색하는 명령어에요.
쓸일이 딱히 없어 보이지만 처음에 검색한 상황에서 무언가를 제외하고 싶을 때 사용하면 상당히 유용하답니다.
다음은 -l입니다.
이것은 해당 패턴 라인을 출력해주는 것이 아닌 매칭되는 패턴이 있는 파일 이름을 출력해주는 명령어입니다.
어디에 내가 원하는 것이 있는 지 찾아보기 편리한 명령어입니다.
다음은 -c입니다.
검색 패턴과 매칭된 라인 개수를 출력해주는 명령어입니다.
너무 많은 검색 결과가 나왔을 때 그 라인 수를 세기에 적합하군요.
다음은 -w입니다.
-w를 사용하게 되면 순수 그 단어만 찾게 됩니다.
예를 들어 위의 실습에서 sh에 관한 패턴을 찾았는데요.
보시면 bash, shutdown, sshd가 검색되었는데, -w 명령어를 사용하게 되면 이들은 검색되지 않습니다.
왜냐하면 순전히 sh로만 되어있는 문자열을 검색하기 때문이죠!
꽤 많은 명령어를 봤기 때문에 표로 한번 정리하고 넘어가볼까요?
옵션 |
설명 |
-i |
검색 패턴 대소문자 무시 |
-l |
매칭되는 패턴이 잇는 파일 이름 출력 |
-n |
매칭되는 줄 번호 표시 |
-v |
검색 패턴을 제외하고 검색 |
-c |
검색 패턴과 매칭되는 줄 개수 출력 |
-w |
해당 패턴만 검색 |
그리고 정규표현식을 이용해 패턴을 검색할 수도 있습니다.
익숙해지기만 하면 굉장히 편리한 표현입니다.
사실 이 표현을 모른다면 검색 명령어를 쓰기 어렵습니다.
표로 함께 이해해보겠습니다.
메타 문자 |
용도 |
예제 |
결과 |
^ |
줄의 시작 지정 |
^solaris |
solaris로 시작하는 줄 |
$ |
줄의 마지막 지정 |
solaris$ |
solaris로 끝나는 줄 |
. |
한 문자 대치 |
s...s |
s로 시작하고, 5개의 아무문자 후, s로 끝남 |
* |
아무것도 없거나 여러 문자 대치 |
[a-z]* |
소문자로 시작하는 모든 문자 도는 아무것도 없음 |
[] |
패턴 중 한 문자 대치 |
[Ss}olaris |
Solaris 또는 solaris |
[^] |
패턴 중 제외할 한 문자 |
[^a-r]olaris |
첫 문자가 a에서 r까지 제외하고 s에서 z까지 오는 문자 |
헷갈리신다면 더 자주보고 계속 사용해 익숙해지는 방법밖에 없습니다.
다음은 egrep입니다.
기본적으로 grep 명령어와 사용법이 같구요.
다른 점은 grep 명령어의 기능에 추가로 확장 정규 표현식을 지원한다는 것입니다.
메타 문자 |
용도 |
예제 |
결과 |
+ |
특정 문자 앞에 하나 이상의 문자 있음 |
[a-z]+tion |
tion 문자 앞에 소문자의 문자 있음 |
x|y |
x 또는 y |
root|admin |
root 또는 admin |
(abc|def) |
abc 또는 def (문자열) |
Ha(ve|ing) |
Have 또는 Having |
위의 표 메타 문자 정도가 더 추가되었습니다.
위의 실습에서는 b(a|o)를 사용했기 때문에 ba가 포함되는 혹은 bo가 포함되는 단어가 검색되신 것을 볼 수 있습니다.
다음은 fgrep입니다.
이 명령어는 위의 정규표현식 문자를 정규표현식이 아닌 문자 그대로 인식하는 명령어입니다.
파일 및 디렉토리의 내용에 정규표현식의 문자 패턴을 검색할 때 사용합니다.
다른 특이점은 없습니다.
마지막으로 find 명령어입니다.
단어 그대로 무언가를 찾을 때 쓰는 find입니다.
사용법은 find (경로) (조건) (동작) 입니다.
경로는 검색을 시작할 경로를 지정해줍니다.
조건은 검색 조건을 지정해주고, 동작은 파일 검색 후 동작을 지정하는 역할을 합니다.
위의 실습은 root 디렉토리에서 파일이름이 hosts인 파일을 찾는 예시입니다.
find 명령어의 조건을 표로 정리해보았습니다.
조건 |
설명 |
-name |
특정 파일 이름 지정 |
-type |
검색할 파일 종류 지정 |
-perm |
특정 권한을 가진 파일 검색 |
-user |
특정 사용자가 소유한 파일 검색 |
-size [+|-]n |
파일의 특정 크기 검색 |
-atime [+|-]n |
파일에 접근한 시간 검색 |
-mtime [+|-]n |
파일을 수정한 시간 검색 |
몇가지 참고하실 점을 말씀드리면 특정 파일 이름을 지정시에 당연히 메타문자는 사용 가능합니다.
그리고 검색할 파일 종류는 d의 경우 directory, f의 경우 file입니다.
여러 형식을 사용할 수 잇습니다.
다음은 동작입니다.
동작 |
설명 |
터미널에 검색한 파일의 경로와 이름을 표시 |
|
-ls |
터미널에 검색한 파일의 경로와 이름뿐만 아니라 자세한 정보 표시 |
-exec command {} \; |
검색한 파일에 특정 명령 수행 |
-ok command {} \; |
-exec 결과와 비슷하나, 특정 명령을 대화형으로 진행 |
여기까지 파일 및 디렉토리 검색 방법에 대한 포스팅이었습니다.
간단한듯 암기해야할 부분이 상당히 많은 부분입니다.
특히 정규표현식 메타문자는 쉽게 익숙해지지 않는 부분입니다.
하지만 몇 번 사용해보고 반복적으로 학습하신다면 금새 익숙해진 자신을 볼 수 있을거에요.
다음 포스팅에서 또 만나도록 해요.
'보안 지식 창고 > [리눅스]' 카테고리의 다른 글
[리눅스] 퍼미션 이해 (0) | 2017.07.28 |
---|---|
[리눅스] vi 편집기 (0) | 2017.07.26 |
[리눅스] 하드링크 및 심볼릭링크 (0) | 2017.07.24 |
[리눅스] 디렉토리 및 파일 내용 변경 (0) | 2017.07.23 |
[리눅스] 디렉토리 및 파일 보기 (0) | 2017.07.21 |