strings 명령은 바이너리가 아닌 파일의 cat과 동일합니까?

strings 명령은 바이너리가 아닌 파일의 cat과 동일합니까?

어리석은 질문일 수도 있고, 답변이 도움이 되지 않을 수도 있지만 궁금합니다. 이 strings명령과 이 cat명령은 바이너리가 아닌 파일에서 동일합니다. 이게 진짜야? 아니면 strings모든 파일 형식에 사용할 때 몇 가지 고려 사항이 있나요?

답변1

기본값은 strings인쇄 가능한 문자가 4개 이상 포함된 문자열을 찾는 것입니다. 노력하다 echo abc | strings. 나는 더 미묘한 차이가 있다고 확신합니다. 따라서 제목 질문에 대한 대답은 "아니요"입니다.

게다가 두 명령은 목적이 다르고 명령줄 옵션 세트도 다르기 때문에 매우 동일하지 않습니다.

답변2

물론 그것들은 동일하지 않습니다. 다음은 일반 텍스트 파일의 예입니다.

$ 고양이 file_with_newline_at_the_end
개행



다른 줄


$ 문자열 file_with_newline_at_the_end
개행
다른 줄
$ 고양이 파일_without_newline_at_the_end

보시 strings다시피 빈 줄은 무시하세요. 하지만 cat은 기본적으로 전체 바이트 스트림을 터미널에 전달합니다. 이는 또한 cat아무것도 모르고 파일 인코딩에 관심이 없지만 strings관심이 있음을 의미합니다. 기본적으로 strings7비트 ASCII 문자만 발견되므로 0x7F보다 큰 바이트를 가진 문자열은 다른 출력을 생성합니다. UTF-16 및 UTF-32 파일도 작동하지 않지만 이 옵션을 사용하면 catGNU에서 올바르게 출력될 수 있습니다.strings--encoding

strings찾는 것 외에도인쇄 가능한 문자(0x20-0x7E)이므로 수직 탭(0x0B)과 같은 제어 문자가 있는 파일은 다른 출력을 갖게 됩니다.

$ echo -e "abcd\x0bcdef" | $ echo -e "abcd\x0bcdef" |문자열
ABCD
CDF
$ echo -e "abcd\x0bcdef" | $ echo -e "abcd\x0bcdef" |cat
ABCD
    CDF

-o또는 -tin strings또는 -benstvin 과 같은 다양한 출력을 생성하는 다양한 옵션도 있습니다.cat

또 다른 차이점은 strings다른 답변에서 언급한 것처럼 기본적으로 4자 이상의 문자열을 찾는다는 것입니다.

그누 strings:

주어진 각 파일에 대해 GNU 문자열은 최소 4자 길이(또는 아래 옵션에 제공된 숫자)의 인쇄 가능한 문자 시퀀스와 인쇄할 수 없는 문자를 인쇄합니다.

애플 시스템 strings:

String은 바이너리 파일이나 표준 입력에서 ASCII 문자열을 찾습니다. 문자열은 임의의 개체 파일과 기타 여러 가지를 식별하는 데 유용합니다. 문자열은 4개(기본값) 이상의 인쇄된 문자[다른 문자 또는 EOF로 끝나지만 포함하지 않음]의 시퀀스입니다. - 플래그를 지정하지 않으면 대상 파일의 ( __TEXT, __text) 부분을 제외한 모든 부분에서 문자열을 검색합니다. 파일을 지정하지 않으면 표준 입력을 읽습니다.

관련 정보