字元串命令是否等同於非二進製文件上的 cat ?
這可能是一個愚蠢的問題,或者只是答案可能沒有幫助——但我很好奇。看起來
strings
命令和cat
命令在非二進製文件上是等效的。這是真的?strings
或者在所有文件類型上使用有一些注意事項嗎?
預設情況下
strings
,查找至少包含四個可列印字元的字元串。試試echo abc | strings
。我相信還有更細微的差異。因此,標題中問題的答案是“否”。此外,這兩個命令有不同的用途和一系列不同的命令行選項,這使得它們非常不等效。
當然它們不是等價的。這是一個普通文本文件的例子
**$ cat file_with_newline_at_the_end** 用新線 另一條線 **$ 字元串 file_with_newline_at_the_end** 用新線 另一條線 **$ cat file_without_newline_at_the_end**
如您所見,
strings
只是忽略空行,但 cat 預設情況下只是將整個字節流傳遞給終端。這也意味著cat
什麼都不知道,也不關心文件編碼,但strings
確實如此。預設情況下strings
只查找 7 位 ASCII 字元,因此字節大於 0x7F 的字元串將產生不同的輸出。UTF-16 和 UTF-32 文件也無法使用,cat
但在 GNUstrings
中可以通過--encoding
選項正確輸出除了
strings
查找可列印字元(0x20-0x7E),因此帶有控製字元(如垂直製表符(0x0B))的文件將具有不同的輸出**$ echo -e "abcd\x0bcdef" | 字元串** A B C D 定義 **$ echo -e "abcd\x0bcdef" | 貓** A B C D 定義
還有許多選項可以產生不同的輸出,例如
-o
or-t
instrings
或-benstv
incat
另一個區別是
strings
預設情況下查找長度至少為 4 個字元的字元串,如另一個答案中所述GNU
strings
:對於給定的每個文件,GNU 字元串列印至少 4 個字元長(或下面的選項給出的數字)的可列印字元序列,然後是不可列印的字元。
macOS
strings
:Strings 在二進製文件或標準輸入中查找 ASCII 字元串。字元串對於辨識隨機對象文件和許多其他東西很有用。字元串是 4 個(預設)或更多列印字元的任意序列
$$ ending at, but not including, any other character or EOF $$. 除非給出 - 標誌,否則字元串會在目標文件的所有部分中查找,除了 (
__TEXT
,__text
) 部分。如果沒有指定文件,則讀取標準輸入