Find

정보보안은 해커와의 끝없는 싸움이다. 그러다 보연 가끔 어둠의 정보보안 전문가가 탄생하기도 한다..

종종 듣는 썰이지만 낮에는 정보보안 전문가, 밤에는 어둠의 보안전문가로 이중 생활을 하는 사람도 있다.

이쯤에서 니체의 명언이 하나 생각난다.

괴물과 싸우는 사람은 그 과정에서 괴물이 되지 않도록 조심해야 한다. 네가 오랫동안 심연을 들여다보고 있으면, 심연 또한 네 속을 들여다볼 것이므로.

  • 프리드리히 니체

아무튼 여러분들은 어둠의 정보보안 전문가가 되지 않기를 바라며..

아무튼 이번 포스팅에서는 find 명령에 대해서 알아볼 것이다. find명령은 unix 시스템에서 제공하는 아주 강력한 명령 중에 하나다.


1. find

find 말 그대로 찾는다는 의미다. 윈도우든 리눅스든 현대 시대의 거의 모든 컴퓨터는, 그리고 우리는 정보를 ‘파일’ 이라는 형태로 관리하고 있다. 특히 리눅스는 파일 개념이 더 중요한데..(이건 따로 공부해보시라)

find가 강력한 명령이라는 것은 여러가지 조건을 걸 수 있다는데 있다.


1-1. find 명령이 사용할 수 있는 필터링 조건

여러 가지가 있으므로 정리를 한번 해 보겠다.

  • 파일 이름 형식 & 파일 이름 패턴
  • 소유자, 소유 그룹
  • 생성, 수정, 시각, 접근 시각등 파일 메타데이터 (범위로 지정 가능, 생성시각도 되는지 확실하게 기억은 안난다)
  • 파일 타입
  • 파일 크기

등.. 빠진게 있을수도 있다. 나중에 생각나면 추가하겠다 :P


2. 강력한 필터링 기능 사용해보기

실습이다. 여러가지 제약 조건을 걸어서 필터링 기능을 한번 실습하고 테스트 해 보자.


2-1. 파일 이름으로 찾기

예를 들면 access.log 라는 파일을 찾고싶으면, 우리는

1
find / -name access.log

라는 명령을 사용할 수 있다.

또는 확장자가 log인 파일을 모두 찾고싶으면 와일드카드를 사용해 다음과 같이 할 수 있다.

1
find / -name *.log

2-2. 탐색 깊이 제한하기

위 명령에서 문제가 좀 있다. 너무 모든 경로를 다 탐색하다보니, 시간이 너무 오래 걸린다는 것이다.

이럴 때 우리는 탐색 깊이를 제한해볼 수 있다. 다음과 같이 말이다.

1
find / -name *.log -maxdepth <level> 

-maxdepth 옵션을 사용했다. 그리고 당연하게도 -mindepth 라는 옵션도 존재한다.


2-3. 파일 소유자, 소유 그룹으로 찾기

여러 가지 파일 시스템은 파일의 관리를 위해 각각의 파일에 대한 메타데이터를 기록하고 관리한다.

우리는 이러한 메타데이터를 이용해서 파일을 찾아볼 수 있는데, 파일 소유자, 소유 그룹도 이러한 정보 중 하나다. 바로 다음과 같다.

1
find / -user <user name>
1
find / -group <group name>

2-4. 파일 시각으로 찾기

파일의 시각 정보 또한 파일시스템이 관리하는 중요한 메타데이터 중 하나다.

파일의 주요 시각에는 생성, 수정, 접근 시각이 있다. 다만 아쉽게도 ext4에 들어서야 보여주기 시작한 birth timestamp에 대한 필터링 기능은 아직 없다.

다음 명령을 보자

1
2
3
find ./ -mtime -<day>
find ./ -mtime <day>
find ./ -mtime +<day>

어떤 차이가 있어보이는가? 다음 실행 결과를 보자

find mtime

어떤가? -mtime +1 에는 너무 많이 잡혀서 잘랐다.

직관적이지 않을 수 있는데 한번 잘 생각해보자. 같은 숫자지만 부호 여부에 따라서 결과 값이 완전히 달라졌다.

  • 부호는 modify time이 현재로부터 이전 시각 사이에 해당하는, 즉 그 기간동안 수정된 파일들을 필터링한다는 의미다.

부호 없이 만 쓴다면 현재를 기준으로 -1 일 사이에 수정된 파일을 찾는다는 의미다.

  • 부호는 -1 보다 과거에 수정된 파일들을 찾는다는 의미가 되겠다.

그림으로 그려본다면 다음과 같다.

                (day-1) * 24            day * 24           현재

|—————————|——————-|—————| +day day -day

잘 이해가 될까 모르겠다.

ctime은 create가 아니라 change로 inode data가 변했다는 것을 의미한다. modify와는 다르다.

그러면 실제 찾아진 파일들의 속성값을 한번 보자.

find mtime2

위 기준에 일치하는것을 확인할 수 있다.


2-5. 파일 타입으로 찾기

파일에는 여러가지 타입이 있다. 가장 대표적으로 일반 파일, 링크 파일, 디렉토리를 생각해볼 수 있다.

다음 명령을 보자

1
find / -type <bcdpflsD>

bcdpflsD 모두 타입을 가리킨다. 각 문자에 매칭되는 타임은 다음 표를 참고해보자

심볼타입
b블록 디바이스
c캐릭터 디바이스
d디렉토리
p네임드 파이프
f일반 파일
l링크 파일
s소켓
D-

2-6. 파일 크기로 찾기