Sqix

Linux Command - find, Redirection(>) 본문

Linux/Command

Linux Command - find, Redirection(>)

Sqix_ow 2018. 6. 11. 22:17

FTZ를 풀다가 리눅스 명령어에 대해서도 정리를 한 번 해 볼 필요가 있는 것 같아서 해당 카테고리를 만들었습니다.


FTZ 1번을 풀기 위해서는 리눅스 명령어 find에 대한 지식이 필요합니다. 


정확히는 특정 권한을 가진 파일을 찾기 위한 -perm 옵션과 1>, 2>와 같은 STDOUT, STDERR을 이용한 불필요한 스트림을 없애는 것이 핵심입니다.


find 명령어는 rule of precedence(우선순위 규칙)에 따라서 주어진 expressions를 이용해 루트 디렉토리 트리를 검사하여 결과를 알려주는 명령어입니다. 기본적으로 파일, 디렉토리를 검색할 수 있고 find . -name "filename" -exec sh -c "parameter" 와 같은 형식으로 파일을 찾아 바로 실행하는 등의 응용이 가능합니다.


A 디렉토리가 다음과 같이 존재한다고 가정하겠습니다. 


A

|--- B

|--- C

|     |---d.bundle

|--- D


파일 검색 옵션


#find ./ -name d.bundle    (A 디렉토리 내부)


삭제 옵션


#find ./ -name d.bundle --delete


유형 선택


-type {parameter} 를 추가하여 유형을 선택할 수 있다

d : Directory | p : Pipe | l : Symbolic Link | s : Socket | b : Block File | f : File


디렉토리 검색 옵션


#find ./ -type d -name B


시간과 관련된 옵션


#find ./ -mtime +n : n일보다 더 전에 수정된 파일을 검색

#find ./ -mtime -n : n일 이내로 수정된 파일을 검색

#find ./ -mmin +n : n분 이전에 수정된 파일을 검색

#find ./ -mmin -n : n분 이내로 수정된 파일을 검색


파일 크기와 관련된 옵션.



#find ./ -size +1024k : 1024k보다 큰 파일 삭제

#find ./ -size -1024k : 1024k보다 작은 파일 삭제


권한과 관련된 옵션


#find ./ -perm 755 : 755 (rwxr-xr-x) 권한의 파일을 검색

#find / -perm +4000 2> /dev/null  : setuid가 걸린 파일 검색


사용자 관련 옵션


#find ./ -user guest : guest 사용자 권한을 가진 파일 검색


여러 파일 검색


#find ./ -type f -name "*.bundle" | xargs grep b : 현재 디렉토리에서 .bundle 확장자를 단 파일 중 b가 포함된 문자열 출력


2> /dev/null


find와 연계하여 종종 사용하게 되는 2> /dev/null 옵션에 대해서 알아봅시다.


>는 리다이렉션, 즉 전달을 의미하는 명령어입니다. 파라미터로는 {src} > {dst}, 즉, "src를 dst로 리다이렉션하라"는 의미를 갖습니다.


그럼 2는 무엇일까요? 여기서 2는 STDERR, 즉 표준 에러를 의미합니다. 


STDERR 외에도 0인 STDIN, 1인 STDOUT을 인자로 사용할 수 있습니다.


주로 1>, 2>를 이용하는데, 1>은 표준 출력을 dst로 리다이렉션하여 출력하도록 하는 것으로, dst는 log나 txt 등의 파일에 주로 사용됩니다.


2>는 마찬가지로 표준 에러를 dst로 리다이렉션하라는 것입니다. 


/dev/null은 가상 디바이스 중 null 디바이스를 의미합니다. 즉, 존재하지 않는 곳으로 리다이렉션을 시키는 것이니 없애라는 의미입니다.


2> /dev/null은 따라서 "표준 에러를 보지 않겠다" 라는 것을 의미합니다. 해당 문제 외에서는 주로 방대한 로그 파일의 내용을 비워 줄 때 사용합니다.


그러한 경우, cat 명령어를 이용하여 cat /dev/null > a.log 와 같은 방식으로 사용하는 편입니다.


Comments