以前我用strings命令的頻率不高, 現在越用越順手, 而且已經是離不開strings命令了。雖然以前說過strings命令, 但今天還是要說。 主要是兩大用途, 下面來說明一下:
一. 確認**編是否譯到庫中去了?
在大型的開發中, 我們經常修改一兩行**, 有時候自己修改的**並沒有編到庫中去(有可能是**沒有同步到linux上編譯, 也有可能是有編譯錯誤導致生成庫失敗, 也有肯能是該make clean的地方沒有make clean或rm庫, 還有可能是其他雜七雜八的原因), 這樣會經常誤導自己的判斷, 折騰大半天。
還有, 比如你**提交了, 結果你的同事更新(svn up)了**(也就是獲取了你的**), 但編譯的時候由於各種原因沒有把你的**編譯進去, 然後他提交了這個庫, 然後呢, 自然就出了問題, 老闆找到你的頭上。 此時, 可以用strings命令快速判斷提交的庫中是否包含你自己的**。 我用過無數次, 屢試不爽。 說了這麼多, 下面來實戰一下:
[taoge@localhost test]$ ls
test.c
[taoge@localhost test]$ cat test.c
#include int main()
[taoge@localhost test]$ gcc test.c
[taoge@localhost test]$ ls
a.out test.c
[taoge@localhost test]$ strings a.out | grep ***
***, %d, %d, %d
[taoge@localhost test]$
如上, 一般都是在自己寫的**中, 加點日誌(字串), 相當於打點tag, 然後用strings命令進行判斷。 如果是不需要加日誌, 那怎麼辦呢? 我經常是對檔案中的之前日誌中的字串做簡要修改, 比如加上***, 實際上也相當於打下自己的tag印記。
二. 對於新手來說, 需要知道新生成的**進入了哪個庫, 然後才好找庫啊!
這個需求也很合理, 不能說**編譯到哪個庫中去了, 你還不知道。 用strings命令吧, 如下:
[taoge@localhost test]$ find -name "*" | xargs strings -f | grep ***
./test.c: printf("***, %d, %d, %d\n", a, b, c);
./a.out: ***, %d, %d, %d
[taoge@localhost test]$
ok, 一目了然, 知道***編譯到**去了。要補充一下, find命令中的雙引號不能少, 否則:
[taoge@localhost test]$ find -name *
find: paths must precede expression: test.c
usage: find [-h] [-l] [-p] [-olevel] [-d help|tree|search|stat|rates|opt|exec] [path...] [expression]
[taoge@localhost test]$
golang中strings包用法
1.strings.split split 以 sep 為分隔符,將 s 切分成多個子切片,結果中不包含 sep 本身 如果 sep 為空,則將 s 切分成 unicode 字元列表。如果 s 中沒有 sep 子串,則將整個 s 作為 string 的第乙個元素返回 func split s,sep...
linux中的apachectl是什麼命令
apachectl是apache http伺服器的前端程式。其設計意圖是幫助管理員控制apachehttpd後台守護程序的功能。apachectl指令碼有兩種操作模式。首先,作為簡單的httpd的前端程式,設定所有必要的環境變數,然後啟動httpd,並傳遞所有的命令列引數。其次,作為sysv初始化指...
Linux下shell指令碼中的read命令
read命令作用 從標準輸入中讀取一行,並把輸入行的每個欄位的值指定給shell變數 引數 a 後跟乙個變數,該變數會被認為是個陣列,然後給其賦值,預設是以空格為分割符。d 後面跟乙個標誌符,其實只有其後的第乙個字元有用,作為結束的標誌,會舉例說 明。p 後面跟提示資訊,即在輸入前列印提示資訊。e ...