Linux에서 strings 명령을 사용하는 방법

0
1396
랩톱의 Linux 터미널
Fatmawati Achmad Zaenuri / Shutterstock.com

이진 또는 데이터 파일 내부의 텍스트를보고 싶습니까? 리눅스 strings 명령은“문자열”이라고하는 텍스트 비트를 가져옵니다.

Linux는 문제를 찾는 솔루션처럼 보일 수있는 명령으로 가득합니다. 그만큼 strings 명령은 분명히 그 수용소에 빠진다. 그 목적은 무엇입니까? 이진 파일 내에서 인쇄 가능한 문자열을 나열하는 명령이 있습니까?

한 발 뒤로 물러 갑시다. 프로그램 파일과 같은 이진 파일에는 사람이 읽을 수있는 텍스트 문자열이 포함될 수 있습니다. 그러나 당신은 그들을 어떻게 볼 수 있습니까? 당신이 사용하는 경우 cat 또는 less 중단 된 터미널 창으로 끝날 수 있습니다. 인쇄 할 수없는 문자를 통해 텍스트 파일을 사용할 수 있도록 설계된 프로그램은 제대로 작동하지 않습니다.

이진 파일 내의 대부분의 바이트는 사람이 읽을 수 없으며 의미가있는 방식으로 터미널 창에 인쇄 할 수 없습니다. 영숫자, 문장 부호 또는 공백과 일치하지 않는 이진 값을 나타내는 문자 나 표준 기호는 없습니다. 통칭하여 “인쇄 가능”문자라고합니다. 나머지는 “인쇄 할 수없는”문자입니다.

따라서 바이너리 또는 데이터 파일을 통해 텍스트 문자열을 보거나 검색하는 것은 문제가됩니다. 그리고 그 곳 strings 파일에서 인쇄 가능한 문자의 문자열을 추출하여 다른 명령이 인쇄 할 수없는 문자와 다룰 필요없이 문자열을 사용할 수 있습니다.

문자열 명령 사용

복잡한 것은 없습니다 strings 명령과 기본 사용법은 매우 간단합니다. 원하는 파일 이름을 제공합니다 strings 명령 행에서 검색합니다.

여기서는 “jibber”라는 이진 파일 (실행 파일)에 문자열을 사용합니다. 우리는 입력 strings, 공백 인 “jibber”를 입력 한 다음 Enter 키를 누릅니다.

strings jibber

터미널 창에서 문자열 흔들림

문자열은 파일에서 추출되어 터미널 창에 나열됩니다.

터미널 창에서 문자열 출력

최소 문자열 길이 설정

기본적으로 문자열은 4 자 이상의 문자열을 검색합니다. 최소 또는 최소 길이를 설정하려면 -n (최소 길이) 옵션.

최소 길이가 짧을수록 더 많은 정크를 볼 가능성이 높아집니다.

일부 이진 값은 인쇄 가능한 문자를 나타내는 값과 동일한 숫자 값을 갖습니다. 해당 숫자 값 중 두 개가 파일에서 나란히 있고 최소 길이를 2로 지정하면 해당 바이트는 문자열 인 것처럼보고됩니다.

묻다 strings 최소 길이로 2를 사용하려면 다음 명령을 사용하십시오.

strings -n 2 jibber

터미널 창에서 문자열 -n 2 jibber

이제 결과에 2 글자 문자열이 포함되었습니다. 공백은 인쇄 가능한 문자로 계산됩니다.

터미널 창에 두 개의 문자 문자열이있는 문자열 출력

파이핑 스트링

의 출력 길이 때문에 strings우리는 그것을 통해 파이프거야 less. 그런 다음 파일을 스크롤하여 관심있는 텍스트를 찾을 수 있습니다.

strings jibber | less

현악기 | 터미널 창에서 덜

목록은 이제 우리를 위해 제시됩니다 less목록의 상단이 먼저 표시됩니다.

터미널 창에서 적은 문자열 출력

객체 파일과 함께 문자열 사용

일반적으로 프로그램 소스 코드 파일은 오브젝트 파일로 컴파일됩니다. 이 파일은 라이브러리 파일과 연결되어 바이너리 실행 파일을 만듭니다. 지버 오브젝트 파일을 가지고 있으므로 해당 파일을 살펴 보겠습니다. “.o”파일 확장자를 유의하십시오.

jibber.o | less

jibber.o | 터미널 창에서 덜

첫 번째 문자열 세트는 8 자보다 길면 모두 열 8에서 줄 바꿈됩니다. 랩핑 된 경우 “H”문자는 9 열에 있습니다. 이 문자열을 SQL 문으로 인식 할 수 있습니다.

터미널 창에서 적은 문자열 출력

출력을 스크롤하면이 형식이 파일 전체에서 사용되지 않습니다.

터미널 창에서 적은 문자열 출력

객체 파일과 완성 된 실행 파일 사이의 텍스트 문자열 차이를 보는 것이 흥미 롭습니다.

파일의 특정 영역에서 검색

컴파일 된 프로그램은 텍스트를 저장하는 데 사용되는 영역이 서로 다릅니다. 기본적으로, strings 전체 파일을 검색하여 텍스트를 찾습니다. 이것은 당신이 사용한 것처럼 -a (모두) 옵션. 파일에서 초기화되고로드 된 데이터 섹션에서만 문자열을 검색하도록하려면 -d (데이터) 옵션.

strings -d jibber | less

문자열 -d 지버 | 터미널 창에서 덜

적절한 이유가 없으면 기본 설정을 사용하고 전체 파일을 검색 할 수도 있습니다.

문자열 오프셋 인쇄

우리는 할 수 있습니다 strings 각 문자열이있는 파일의 시작부터 오프셋을 인쇄하십시오. 이렇게하려면 -o (오프셋) 옵션.

strings -o parse_phrases | less

문자열 -o parse_phrases | 적게

오프셋은 8 진수로 표시됩니다.

터미널 윈도우에서 8 진수로 오프셋이있는 문자열

오프셋을 10 진수 또는 16 진수와 같은 다른 숫자로 표시하려면 -t (기수) 옵션. 기수 옵션 뒤에는 d (소수), x (16 진수) 또는 o (옥탈). 사용 -t o 사용하는 것과 같습니다 -o.

strings -t d parse_phrases | less

문자열 -t d parse_phrases | 터미널 창에서 덜

이제 오프셋이 10 진수로 인쇄됩니다.

터미널 윈도우에서 10 진수 오프셋을 가진 문자열 출력

strings -t x parse_phrases | less

문자열 -t x parse_phrases | 터미널 창에서 덜

오프셋은 이제 16 진수로 인쇄됩니다.

터미널 창에서 16 진수로 오프셋이있는 문자열 출력

공백 포함

strings 탭 및 공백 문자를 찾은 문자열의 일부로 간주합니다. 줄 바꾸기 및 캐리지 리턴과 같은 기타 공백 문자는 문자열의 일부인 것처럼 처리되지 않습니다. 그만큼 -w (공백) 옵션을 사용하면 문자열이 모든 공백 문자를 문자열의 일부인 것처럼 처리합니다.

strings -w add_data | less

문자열 -w add_data | 터미널 창에서 덜

출력에서 빈 줄을 볼 수 있습니다. 이는 두 번째 줄 끝에 (보이지 않는) 캐리지 리턴과 줄 바꿈 문자의 결과입니다.

터미널 창에서 문자열 출력

우리는 파일에 국한되지 않습니다

사용할 수있다 strings 바이트 스트림이거나 생성 할 수있는 모든 것

이 명령으로 컴퓨터의 RAM (Random Access Memory)을 살펴볼 수 있습니다.

우리는 사용해야합니다 sudo / dev / mem에 액세스하고 있기 때문에 이것은 컴퓨터의 주 메모리 이미지를 저장하는 문자 장치 파일입니다.

sudo strings /dev/mem | less

sudo 문자열 / dev / mem | 터미널 창에서 덜

이 목록은 RAM의 전체 내용이 아닙니다. 추출 할 수있는 문자열 일뿐입니다.

터미널 창에서 적은 문자열 출력

관련 : Linux에서 “모든 것이 파일”이란 무엇입니까?

한 번에 많은 파일 검색

와일드 카드를 사용하여 검색 할 파일 그룹을 선택할 수 있습니다. 그만큼 * 문자는 여러 문자를 나타내며 ? 문자는 단일 문자를 나타냅니다. 명령 줄에 많은 파일 이름을 제공하도록 선택할 수도 있습니다.

와일드 카드를 사용하고 / bin 디렉토리의 모든 실행 파일을 검색합니다. 목록에는 많은 파일의 결과가 포함되므로 -f (파일 이름) 옵션. 각 줄의 시작 부분에 파일 이름이 인쇄됩니다. 그런 다음 각 문자열이 발견 된 파일을 확인할 수 있습니다.

grep을 통해 결과를 파이핑하고“Copyright”라는 단어가 포함 된 문자열을 찾고 있습니다.

strings -f /bin/* | grep Copyright

문자열 -f / bin / * | 터미널 창에서 grep Copyright

/ bin 디렉토리에있는 각 파일에 대한 저작권 정보가 깔끔하게 정리되어 있으며 각 줄의 시작 부분에 파일 이름이 있습니다.

터미널 창에 저작권 정보를 표시하는 문자열 출력

풀리지 않은 줄

줄에 대한 수수께끼는 없습니다. 일반적인 Linux 명령입니다. 그것은 매우 구체적인 일을하고 잘합니다.

리눅스 톱니의 또 다른 하나이며 다른 명령으로 작업 할 때 실제로 살아납니다. 바이너리 파일과 다른 도구 사이에 어떻게 앉아 있는지 볼 때 grep이 약간 불분명 한 명령의 기능을 이해하기 시작합니다.