주로 쓰는 명령어들 중 file, grep의 헷갈릴만한 옵션들에 대해 정리해본다.
# file
1. 기본적인 file 명령어 사용
file 명령어를 사용하면 해당 파일이 어떤 형식을 갖고 있는지 확인할 수 있습니다.
예를 들어, 이미지 파일, 스크립트 파일, 텍스트 파일 등을 구분할 수 있습니다.
file seculo.png
seculo.png: PNG image data, 800 x 600, 8-bit/color RGBA, non-interlaced
이처럼 파일 형식뿐만 아니라, 이미지의 크기, 컬러 비트, 투명도 여부 등의 정보도 확인할 수 있습니다.
2. 파일 리스트의 형식 확인 (-f 옵션)
한 번에 여러 파일의 형식을 확인하고 싶을 때, 파일 리스트를 지정한 파일에 담고 -f 옵션을 사용하면 됩니다.
cat file_list.txt
test.png example test.sh
file -f file_list.txt
test.png: PNG image data, 800 x 600, 8-bit/color RGBA, non-interlaced
example: fifo (named pipe)
test.sh: Bourne-Again shell script, Unicode text, UTF-8 text executable
3. 압축된 파일 내의 파일 형식 확인 (-z 옵션)
파일이 압축된 상태에서도 파일 형식을 확인하고 싶을 때는 -z 옵션을 사용합니다. 이 옵션을 사용하면 압축된 파일 안에 있는 데이터의 형식을 식별할 수 있습니다.
file -z test.py.gz
test.py.gz: Python script, ASCII text executable (gzip compressed data, was "test.py")
압축이 되어 있더라도 원본 파일의 형식이 무엇인지 쉽게 확인할 수 있습니다.
4. 특정 파일의 데이터 검사
때때로 파일의 형식을 확인하기 위해 바이너리 데이터를 직접 살펴볼 필요가 있습니다. 이를 위해 리눅스는 다양한 패턴을 포함한 데이터베이스를 사용하여 파일 형식을 검사합니다. 이 데이터베이스 파일은 /usr/share/misc/magic.mgc에 위치해 있습니다.
cd /usr/share/misc/ ls -l
여기서 magic.mgc 파일은 파일 형식을 판별할 때 사용하는 중요한 패턴 파일입니다.
Tip: 보안적인 측면에서 file 명령어 활용
파일 명령어는 보안 측면에서도 매우 중요한 역할을 합니다. 예를 들어, 악의적인 사용자가 파일 확장자를 변경하여 공격을 시도할 때, 확장자와 실제 파일 형식이 다를 수 있습니다. 이때 file 명령어를 사용하여 확장자만으로 판단하지 않고 파일의 실제 형식을 확인함으로써 보안을 강화할 수 있습니다.
또한 시스템 내에 존재하는 의심스러운 파일의 형식을 빠르게 확인하고, 적절한 조치를 취할 수 있는 도구로도 사용됩니다.
# grep
1. grep의 기본 사용법
grep 명령어는 지정한 패턴을 파일 내에서 검색하고, 해당 패턴이 포함된 줄을 출력합니다.
grep <패턴> <파일>
grep "hello" test.sh
위 명령어는 test.sh 파일 내에서 "hello"라는 단어가 포함된 줄을 검색합니다.
2. 주요 옵션들
grep 명령어는 다양한 옵션을 제공하여 검색 기능을 더욱 강력하게 만듭니다. 여기서는 자주 사용되는 주요 옵션들을 살펴보겠습니다.
- -f : 지정된 파일에서 여러 패턴을 읽어들여, 해당 패턴들과 일치하는 항목을 검색합니다. 여러 패턴을 한번에 처리할 때 유용합니다.
grep -f hi.txt hello.txt
package: com.android.essential
hello
package:com.sec.android.service.health
- -c : 파일 내에서 패턴이 일치하는 행의 수만 출력합니다.
grep -c "hi" test.sh
해당 파일에서 "hi"라는 문자열이 포함된 줄의 수를 출력합니다.
- -l : 패턴이 발견된 파일의 경로와 파일 이름을 표시합니다. 파일 이름만 필요한 경우 유용합니다.
grep -l "bash" *.sh
현재 디렉토리 내의 .sh 확장자를 가진 파일 중에서 "bash"라는 패턴이 포함된 파일의 이름만 출력합니다.
- -n : 패턴이 발견된 줄 번호를 함께 출력합니다.
grep -n "bash" buff-cache.sh
이 명령어는 "bash"라는 문자열이 위치한 줄 번호와 함께 그 줄의 내용을 출력합니다.
- -o : 파일에서 일치하는 부분만 출력합니다. 줄 전체가 아니라, 패턴에 해당하는 부분만 보고 싶을 때 유용합니다.
grep -o "echo" buff-cache.sh
buff-cache.sh 파일에서 "echo"라는 단어가 발견된 부분만 출력합니다.
- -a : 이진 파일을 텍스트 파일로 취급하여 검색을 수행합니다.
grep -a "text" binaryfile
- -q : 아무 것도 출력하지 않고, 검색 패턴이 있는지 여부만 확인합니다. exit status로 결과를 확인할 수 있습니다.
grep -q "bash" buff-cache.sh echo $?
만약 패턴이 있으면 0, 없으면 1을 반환합니다.
3. 정규표현식 활용
정규표현식을 사용하면 더욱 강력하게 패턴을 정의할 수 있습니다.
grep 명령어는 기본적으로 정규표현식을 지원하며, -E 옵션을 사용하면 더욱 복잡한 패턴도 사용할 수 있습니다.
- . : 아무 문자 하나와 일치
- * : 0개 이상의 반복과 일치
- ^ : 줄의 시작을 의미
- $ : 줄의 끝을 의미
grep -E "^root.*bash$" /etc/passwd
위 명령어는 /etc/passwd 파일에서 root로 시작하고 bash로 끝나는 모든 줄을 검색합니다.
추가 팁
-A, -B, -C 옵션
이 옵션들은 패턴이 일치하는 줄의 앞뒤로 몇 줄을 더 출력할 때 사용됩니다.
- -A : 패턴이 일치한 뒤쪽의 n줄을 함께 출력합니다.
- -B : 패턴이 일치한 앞쪽의 n줄을 함께 출력합니다.
- -C : 패턴이 일치한 앞뒤 n줄을 함께 출력합니다.
grep -A 2 "bash" buff-cache.sh
이 명령어는 "bash"라는 단어가 포함된 줄과 그 뒤로 2줄을 함께 출력합니다.
결론
리눅스에서 grep 명령어는 텍스트 파일에서 원하는 내용을 빠르게 찾는 데 매우 유용한 도구입니다.
다양한 옵션을 활용하면 파일 전체에서 패턴을 검색하거나, 일치하는 항목을 세밀하게 확인할 수 있습니다.
정규표현식을 활용하면 복잡한 검색 패턴도 쉽게 다룰 수 있으므로, grep 명령어를 효과적으로 사용하면 좋습니다!
'IT 기술 > 리눅스' 카테고리의 다른 글
[리눅스] 명령어 연결 연산자 (;, &&, ||) (0) | 2024.09.12 |
---|---|
[보안] 리눅스 - 부트로더 보안 (0) | 2024.09.10 |
[리눅스] 기본 명령어 (0) | 2024.09.10 |
[리눅스] NFS, FUSE (1) | 2024.09.10 |
[리눅스] 파일시스템 #3 (tmpfs, procfs, sysfs) (0) | 2024.09.10 |