你有沒有試過在編輯器中打開一個文件才發現它包含不可讀的二進制內容?
Linux的 “字符串”命令可以在任何文件中查看人類可讀的字符。
使用“strings”命令的主要目的是計算出您正在查看的文件類型,但您也可以使用它來提取文本。 例如,如果您有專用程序中的文件,該文件以奇怪的二進制格式保存文件,則可以使用“字符串”來提取放入文件中的文本。
字符串命令的示例用法
演示字符串命令強大功能的好方法是使用LibreOffice Writer創建文檔。
只需打開LibreOffice Writer並輸入一些文本,然後將其保存為標準的ODT格式 。
現在打開終端窗口 (同時按CTRL,ALT和T),然後使用cat命令顯示文件,如下所示:
cat yourfilename.odt | 更多
(將yourfilename.odt替換為您創建的文件的名稱)
你會看到的是整面難以辨認的文字。
按空格鍵滾動文件。 在整個文件中偶爾會看到一些你輸入的文字。
字符串命令可以用來顯示人類可讀的部分。
以最簡單的形式,您可以運行以下命令:
字符串yourfilename.odt | 更多
和以前一樣,文字牆會出現,但只有文字可以作為人閱讀。 如果你很幸運,那麼你將能夠看到你的文字。
然而,你將能夠看到的是關鍵,在第一行:
mimetypeapplication / vnd.oasis.opendocument.text
我們知道文件類型是LibreOffice Writer ODT文件,原因有二:
- 我們創建了該文件
- 擴展名是.ODT
假設您沒有創建該文件,或者您在恢復的磁盤上找到了該文件,並且該文件沒有擴展名。
Windows恢復通常會恢復名稱為0001,0002,0003等的文件。文件恢復的事實很好,但試圖弄清楚這些文件的類型是一場噩夢。
通過使用字符串,您可以製定出文件類型的戰鬥機會。 知道文件是opendocument.text文件意味著您可以使用ODT擴展名保存並在LibreOffice編寫器中打開它。
如果你不知道ODT文件基本上是一個壓縮文件。 如果您將yourfilename.odt重命名為yourfilename.zip,則可以使用歸檔工具打開它,甚至可以解壓縮該文件。
替代行為
默認情況下,strings命令會返回文件中的所有字符串,但您可以切換行為,以便從文件中初始化,加載的數據部分返回字符串。
這是什麼意思? 似乎沒有人知道。
假設您正在使用字符串來嘗試找出文件類型或查找文件中的特定文本,這是有道理的。
如果使用默認行為運行strings命令,則不會獲得您希望的輸出,然後嘗試運行以下命令之一來查看它是否有所作為:
字符串-d你的文件名
字符串 - 數據文件名
手冊頁指出上述命令可能有助於減少從字符串返回的垃圾數量。
“串”命令可以設置為反向工作,以便減號開關是默認行為。 如果您的系統出現這種情況,則可以使用以下命令返回所有數據:
字符串-a你的文件名
格式化輸出
您可以在輸出中獲得文本以顯示每行文本旁邊的文件名稱。
為此,請運行以下命令之一:
字符串-f yourfilename
字符串 - 打印文件名稱您的文件名
輸出現在看起來像這樣:
yourfilename:一段文字
yourfilename:另一段文字
作為輸出的一部分,您還可以顯示文本在文件中出現位置的偏移量。 為此,請運行以下命令:
字符串-o yourfilename
輸出結果如下所示:
你的
17024文本
偏移量實際上是八進制偏移量,儘管取決於系統如何編譯字符串,它也很容易成為十六進製或十進制偏移量。
獲得所需偏移量的更準確方法是使用以下命令:
字符串-td你的文件名
字符串 - 你的文件名
字符串 - 您的文件名
減號表示返回偏移量,後面的字符確定偏移量類型。 (即d =十進制,o =八進制,h =十六進制)。
默認情況下,strings命令會在新行上打印每個新字符串,但您可以設置您選擇的分隔符。 例如,要使用管道符號(“|”)作為分隔符,請運行以下命令:
字符串-s“|” yourfilename
調整字符串限制
字符串命令默認在一行中查找4個可打印字符的字符串。 您可以調整默認值,以便它僅返回一個帶有8個可打印字符或12個可打印字符的字符串。
通過調整此限制,您可以調整輸出以獲得最佳結果。 通過查找太長的字符串,您可能會忽略有用的文本,但如果太短,您可能會返回更多的垃圾。
要調整字符串限制,請運行以下命令:
字符串-n 8 yourfilename
在上面的例子中,我將限制更改為8。
您可以用您選擇的號碼替換8。
您也可以使用以下命令來執行相同的操作:
字符串 - 字節= 8您的文件名
包括空白
默認情況下,strings命令包含空白字符(如製表符或空格)作為可打印字符。 因此,如果你有一個字符串,讀作“貓坐在墊子上”,那麼字符串命令將返回整個文本。
新行字符和回車符在默認情況下不被視為可打印字符。
要讓字符串將新行字符和回車識別為可打印字符,請按以下方式運行字符串:
字符串-w yourfilename
更改編碼
有5種編碼選項可用於字符串:
- s = 7位字節(用於ASCII,ISO 8859)
- S = 8位字節
- b = 16位bigendian
- l = 16位littleendian
默認值是7位字節。
要更改編碼,請運行以下命令:
字符串 - 你的文件名
字符串--encoding = s yourfilename
在上面的命令中,我指定了默認的“s”,這意味著7位字節。 只需用您選擇的編碼字母替換“s”即可。
更改二進製文件描述名稱
您可以更改字符串的行為,以便它使用與系統提供的不同的二進製文件描述符庫。
這個開關是專家的一個選擇。 如果您有另一個庫可用,則可以通過運行以下字符串命令來完成此操作:
字符串-T bfdname
從文件讀取選項
如果每次要使用相同的選項,則不必在每次運行命令時都指定所有開關,因為這需要時間。
你可以做的是使用nano創建一個文本文件並指定該文件中的選項。
要在終端中嘗試以下命令,請執行以下操作:
納米弦樂隊
在文件中輸入以下文本:
-f -o -n 3 -s“|”
按下CTRL和O保存文件,然後按CTRL和X退出。
要使用這些選項運行字符串命令,請運行以下命令:
字符串@stringsopts您的文件名
這些選項將從文件stringsopts中讀取,並且您應該在每個字符串之前看到文件名,偏移量和“|” 作為分隔符。
獲得幫助
如果您想了解更多關於字符串的信息,可以運行以下命令獲取幫助。
字符串 - 幫助
或者,您也可以閱讀手冊頁面:
人弦
找出正在運行的字符串的版本
要查找正在運行的字符串版本,請運行以下命令之一:
字符串-v
字符串-V
字符串 - 版本