개발/Linux

리눅스 6편-파일찾기 find/grep에 대해 알아보자

IT하는 문과생 2019. 10. 8. 08:00

지난 시간까지 디렉터리도 만들어보고 vi 편집기를 통해 새로운 파일도 만들어 보았다. 그러면 이제 다음 과정으로 리눅스 내에서 파일을 찾는 방법에 대해 알아보고자 한다. 기본적으로 파일이 어디에 어떤 것이 위치해 있는지 모두 다 기억하고 있으면 좋겠지만 사람의 기억력이라는 것이 사실 그렇게 좋지 않다. 그리고 리눅스는 이러한 사용자들을 위해 다양한 찾기 기능을 제공해 주고 있는데, 그 가운데 find 및 grep 기능에 대해 살펴보는 시간을 갖도록 하겠다.

관련 글
2019/09/26 - [Linux 이야기] - 리눅스 1편-맥(Mac)에 Linux 설치하기(Ubuntu)
2019/09/27 - [Linux 이야기] - 리눅스 2편-Ubuntu 루트(root) 계정을 활성화해보자
2019/09/28 - [Linux 이야기] - 리눅스 3편-리눅스의 디렉터리 구조를 파악하자
2019/09/30 - [Linux 이야기] - 리눅스 4편-기본 명령어 편
2019/10/07 - [Linux 이야기] - 리눅스 5편-vi 편집기에 대해 알아보자

1. find
자 그럼 find 기능부터 살펴보도록 하자. find와 grep은 무언가를 찾는다는 것의 공통점이 있지만 기본적으로 탐색 범위가 다르다. 지금부터 살펴볼 find의 경우 계층적인 디렉터리 구조에서 특정 파일 및 디렉터리를 검색하기 위한 명령어이며, 다음과 같이 구성된다.

find [경로] [조건] [동작]

경로 -> 조건 -> 동작 순서로 입력을 하는데 경로는 여러분들이 익히 알고 있는 디렉터리 경로를 의미하며 조건과 동작은 아래와 같은 옵션들이 존재한다. 많이 써보면서 손에 익히도록 하자.

조건 설명
-name  이름으로 검색
-type 종류 지정,  f(파일),  d(디렉토리)
-user 특정 사용자가 소유한 파일 검색
-size 파일의 특정 크기 검색 (+이상, -이하, -바이트c, 킬로k, 메가 M, 기가 G)
동작 설명
-print 기본 값, 터미널에 파일의 경로와 이름을 출력
-ls  자세한 정보 표시
-exec [특정 명령어] { }\; 검색한 파일에 특정 명령어 수행
-ok  [특정 명령어] { }\; 검색한 파일에 특정 명령어 수행, 대화식
[예제]
-시스템 전체에서 파일의 이름이 test인 것을 찾아라.
find / -name test -type f

-사용자 홈 디렉터리에 숨겨진 파일을 찾고 해당 파일의 정보를 출력
find / ~-name '.*' -ls

 

2. grep
이어지는 검색 옵션 가운데 하나로 grep이라는 기능이 있다. grep은 파일 내용에서 특정 문자 또는 패턴을 검색하는 명령어로써 파일명으로 검색하던 find와 다르게 파일 내용에서 특정 문자나 패턴을 검색할 수 있는 강력한 명령어라고 할 수 있다. grep 명령의 경우 다음과 같은 형식으로 사용된다.  

grep [옵션] [패턴] [파일 이름]

옵션을 선택하고 패턴을 지정한 다음 어떠한 파일에서 찾아낼 것인지를 지정하여 검색을 시작한다. 이것이 grep의 기본이다. 사실 지금 이렇게 글로만 보면 어렵다고 느낄 수 있지만 실제 리눅스 상에서 직접 조회를 해본다면 그렇게 크게 어렵지 않을 것이다.

옵션 설명
-i 검색 패턴 대소문자 무시
-n 매칭되는 줄 번호 표시
-v 검색 패턴 제외하고 나머지를 출력
-c 검색 패턴과 매칭되는 줄 개수 출력
-w 단어 단위로 검색
-l 매칭되는 패턴이 있는 파일 이름 출력
[예제]
grep -l bash /etc/*

여기까지 find 옵션 및 grep 옵션을 알아보는 시간을 가졌다. 앞선 시간에 공부했던 기본 명령어 / vi 편집기 사용과 더불어 이번 시간의 find/grep 옵션까지 자연스럽게 다룰 줄 안다면 이제 리눅스를 어느 정도 다룰 수 있다고 말할 수 있겠다. 적어도 필자의 포스팅에 기재된 옵션 설명을 보면서 하더라도 쓸 줄만 안다면 어느 정도는 익혔다고 볼 수 있다. 어쨌든 뭔가를 보고 하더라도 기본 바탕이 없으면 그것 조차 할 수 없으니 말이다. 여기까지 왔다면 그래도 처음에 비해 많은 발을 내디뎠다. 조금만 더 힘내자.