HOW TO HACK/Basics

해커라면 알아야 할 리눅스 기초-4 : 파일 찾기, 파일 검색

Mr. Rootable 2016. 4. 14. 14:20

# 본 게시글은 작성자 본인이 스터디한 내용을 바탕으로 작성된 글입니다.


# 이에, 이 글에는 일부 잘못된 정보가 포함되어 있을 수 있습니다.


이 글을 열람하는 것은 위 사항에 동의한 것으로 간주합니다.  


# 잘못된 정보를 발견하면 댓글로 알려주시면 감사하겠습니다.



리눅스를 처음 접해보는 사람에게 시스템상에서 원하는 파일 또는 프로그램을 찾기란 여간 어렵지 않을 수 없다.

나 또한 졸라 헤맸다. 이번 포스팅에서는 리눅스에서 파일 찾는 법에 대해 알려주려 한다.



Step 1 : find 명령어로 디렉토리안에서 파일 찾기


find 명령어는 당신이 원하는 파일을 디렉토리 안에서 찾아주는 명령어이다. 


문법은 아래와 같다.


사용법) find [대상경로] [옵션1, 옵션2....] [찾을 파일명]


대상경로를 지정하지 않으면 디폴트로 현재 작업디렉토리를 포함한 하위디렉토리까지 모두 뒤져서 

파일을 찾아주는 성실한 놈이다. 

옵션은 명령어 매뉴얼(man)이나 도움말, 그 밖의 다른 훌륭한 웹문서들을 뒤져서 스스로 공부해보길 바란다.

현재 루트(/)디렉토리에 있다고 가정하고, 아래 명령어를 실행하면 루트(/)디렉토리 및 그 하위디렉토리에서

파일이름이 nmap-protocols인 파일을 찾아준다.


# find -name nmap-protocols


버추얼박스 환경에서 작업중인데 호스트PC 사양이 표준사양(RAM 4G)이고, 

여기에 칼리리눅스를 1G만 할당해서 그런지 속도가 다리기부스한 거북이보다 느리다... 젠장

중간에 명령어 실행을 중단해야겠다.



어쨋든 위와같이 원하는 파일을 찾아서 어느 디렉토리 경로에 있는지도 잘 나왔다.


대상경로를 지정하면 좀더 빨리 파일을 찾을 수 있다.


# find /usr/share/namp -name nmap-protocols



또한, 파일명 앞,뒤 혹은 앞뒤에 *를 사용시 파일명으로 지정한 단어가 포함된 모든 파일 찾기가 가능하다.

아래 3가지 유형의 명령어의 실행 결과를 보고 확인해보길 바란다.


# find /usr/share/nmap -name nmap*



nmap으로 시작하는 모든 파일을 찾아서 출력했다.


# find /usr/share/namp -name *nmap



nmap으로 끝나는 모든 파일을 찾아서 출력했다. 하나밖에 없네..


# find /usr/share/namp -name *nmap*



nmap을 포함한 모든 파일을 찾아서 출력했다.


-name 옵션 외에도 유용한 옵션이 아주 많다.

침해사고 분석 실무에서도 실제 -ctime, -mtime, -perm 등의 옵션을 사용하여 현재 시스템일자로부터 몇일내에 

파일내용, 파일이름 등이 변경된 파일, 특정 권한을 갖는 파일들을 찾기도 한다.

물론 이 옵션들은 복합적으로 사용이 가능하다. 


몇가지만 간략히 소개하고 넘어가겠다. 


-atime

파일을 읽기 또는 액세스한 시간으로 검색

-ctime

파일 상태(권한 등)가 변경된 시간으로 검색

-mtime

파일내용이 마지막으로 수정된 시간으로 검색

-perm

설정된 권한으로 검색

-size

파일크기(byte단위) 기준으로 검색

-user

파일 소유자로 검색


자세한 사용법과 사용예는 직접 찾아보고 공부를 해보면 더 오래 기억에 남을 것이다.

더 친절하지 못해 미안하다.



Step 2 : Which 명령어로 환경변수에서 바이너리 찾기


또 다른 검색 명령어로는 which 명령어가 있다. 이 명령어를 사용하면 환경변수상에서 바이너리를 찾을 수 있다. 

바이너리가 무엇이냐? 쉽게 얘기해서 윈도우상에서 실행파일을 생각하면 된다.

지금까지 배운 ls, cd, cp, mv 등과 같이 무언가를 수행하는 파일이라고 보면 된다.

그 밖에 기타 응용프로그램의 실행명령어도 바로 바이너리이다.

환경변수 디렉토리에는 이 바이너리를 보관하고 있고, 바이너리는 /bin 디렉토리(bin은 binary의 줄임말)나 /sbin 디렉토리에 있다. 환경변수가 보관되는 디렉토리는 echo 명령어로 확인할 수 있다.


# echo $PATH



환경변수가 저장된 위치가 위의 그림과 같이 나온다.

여기서 소문자로 $path라고 하면 안된다. 리눅스는 대소문자를 구분한다.


그럼 이제 which 명령어를 사용해서 파일복사(cp)명령어의 바이너리 위치를 알아내보자.


# which cp



그렇다면 시스템 명령어가 아닌 다른 응용프로그램들의 바이너리는 어디에 있을까?

지금까지 실습의 대상이 된 nmap 명령어의 바이너리의 위치를 찾아보자.


# which nmap



/usr/bin 디렉토리에 있다고 나온다.



Step 3 : Whereis 명령어로 모든 디렉토리에서 파일 찾기


whereis 명령어로는 찾을 파일을 대상경로를 지정하지 않아도 모든 디렉토리에서 검색할 수 있다.


# whereis nmap


 


nmap 이라는 단어를 찾아 해당 경로나 파일명을 찾아 보여줬다.



Step 4 : locate 명령어로 데이터베이스를 사용하는 파일 찾기


locate 명령어는 파일의 위치를 찾는 명령어이다.

모든 파일목록 데이터베이스를 참조해서 검색을 하므로, 

which나 whereis 명령어보다 훨씬 빠른 속도를 자랑한다.

단, updatedb 명령어를 사용하여 최신 파일목록 DB로 만들어 최신 DB를 유지하는 것이 중요하다.

updatedb를 하지 않고 locate 명령어를 사용하면 원하는 결과를 얻지 못할 수 있음을 명심해라.


사용법) locate [옵션] [찾을 파일명]


옵션으로는 -e와 -S, -n이 있고, 

-e는 검색했을 때 존재하는 파일만 출력하고, -S는 DB의 통계를 출력한다.

-n은 결과의 갯수를 설정한 갯수로 제한하는 옵션이다.



<끝>