일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Sqix
- #IntelManual #segment Descriptor #세그먼트 디스크립터 #MINT64 #Sqix
- vim
- 오버워치 세이버메트릭스
- FTZ 레벨2
- vi 외부 명령어
- linux
- Overwatch League SaberMetrics
- #Best of the Best #OS #MINT64 #Sqix
- C++11
- libtins
- >
- Network
- #
- command
- #IntelManual
- #MINT64 #Sqix
- vi
- KASAN
- #Qt Creator
- 오버워치
- 인터럽트
- Find
- libpcap
- BEST of the BEST
- ftz
- Today
- Total
Sqix
Linux Command - find, Redirection(>) 본문
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 와 같은 방식으로 사용하는 편입니다.