
어리석은 질문일 수도 있고, 답변이 도움이 되지 않을 수도 있지만 궁금합니다. 이 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
관심이 있음을 의미합니다. 기본적으로 strings
7비트 ASCII 문자만 발견되므로 0x7F보다 큰 바이트를 가진 문자열은 다른 출력을 생성합니다. UTF-16 및 UTF-32 파일도 작동하지 않지만 이 옵션을 사용하면 cat
GNU에서 올바르게 출력될 수 있습니다.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
또는 -t
in strings
또는 -benstv
in 과 같은 다양한 출력을 생성하는 다양한 옵션도 있습니다.cat
또 다른 차이점은 strings
다른 답변에서 언급한 것처럼 기본적으로 4자 이상의 문자열을 찾는다는 것입니다.
그누 strings
:
주어진 각 파일에 대해 GNU 문자열은 최소 4자 길이(또는 아래 옵션에 제공된 숫자)의 인쇄 가능한 문자 시퀀스와 인쇄할 수 없는 문자를 인쇄합니다.
애플 시스템 strings
:
String은 바이너리 파일이나 표준 입력에서 ASCII 문자열을 찾습니다. 문자열은 임의의 개체 파일과 기타 여러 가지를 식별하는 데 유용합니다. 문자열은 4개(기본값) 이상의 인쇄된 문자[다른 문자 또는 EOF로 끝나지만 포함하지 않음]의 시퀀스입니다. - 플래그를 지정하지 않으면 대상 파일의 (
__TEXT
,__text
) 부분을 제외한 모든 부분에서 문자열을 검색합니다. 파일을 지정하지 않으면 표준 입력을 읽습니다.