반응형

 

주로 쓰는 명령어들 중 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 명령어를 효과적으로 사용하면 좋습니다!

반응형

+ Recent posts