80%的人都不會的,15個Linux實用技巧

肖邦linux發表於2021-04-06

熟悉 Linux 系統的同學都知道,它高效主要體現在命令列。通過命令列,可以將很多簡單的命令,通過自由的組合,得到非常強大的功能。

命令列也就意味著可以自動化,自動化會使你的工作更高效,釋放很多手工操作,讓你有更多的時間去做更有意義的事情。

這篇文章,會分享一些非常實用小技巧,希望能夠幫助你提高工作效率,學完就能夠用得上!

1. 快速清空檔案的方法

快速清空一個檔案,有 N 種方法,我比較喜歡下邊這種,因為它最短

$ > access.log

不過癮?好吧,我也順便總結下,其它幾種最常見的清空檔案的方法

  • : > access.log
  • true > access.log
  • cat /dev/null > access.log
  • echo -n "" > access.log
  • echo > access.log
  • truncate -s 0 access.log

簡單解釋下, : 在 shell 中是一個內建命令,表示 no-op,大概就是空語句的意思,所以 : 的那個用法,就是執行命令後,什麼都沒有輸出,將空內容覆蓋到檔案。

2. 快速生成大檔案

有時候,在 Linux 上,我們需要一個大檔案,用於測試上傳或下載的速度,通過 dd 命令可以快速生成一個大檔案

$ dd if=/dev/zero of=file.img bs=1M count=1024

上述命令,生成一個檔名為 file.img 大小為 1G 的檔案。

3. 安全擦除硬碟資料

介紹一種擦除硬碟資料的方法,高效,安全。可以通過 dd 命令,輕鬆實現:

$ dd if=/dev/urandom of=/dev/sda

使用 /dev/urandom 生成隨機資料,將生成的資料寫入 sda 硬碟中,相當於安全的擦除了硬碟資料。

當年陳老師,如果學會了這條命令,可能也不會有豔兆門事件了。

4. 快速製作系統盤

在 Linux 下製作系統盤,老毛桃神麼工具都弱爆了,直接一條命令搞定:

$ dd if=ubuntu-server-amd64.iso if=/dev/sdb

哈哈,是不是很爽,sdb 可以 U 盤,也可以是普通硬碟

5. 檢視某個程式的執行時間

可能,大部分同學只會使用 ps aux,其實可以通過 -o 引數,指定只顯示具體的某個欄位,會得到更清晰的結果。

$ ps -p 10167 -o etimes,etime
ELAPSED     ELAPSED
1712055 19-19:34:15

通過 etime 獲取該程式的執行時間,可以很直觀地看到,程式執行了 19 天

同樣,可以通過 -o 指定 rss 可以只獲取該程式的記憶體資訊。

$ ps -p 10167 -o rss
  RSS
 2180

6. 動態實時檢視日誌

通過 tail 命令 -f 選項,可以動態地監控日誌檔案的變化,非常實用

$ tail -f test.log

如果想在日誌中出現 Failed 等資訊時立刻停止 tail 監控,可以通過如下命令來實現:

$ tail -f test.log | sed '/Failed/ q'

7. 時間戳的快速轉換

時間操作,對程式設計師來說就是家常便飯。有時候希望能夠將時間戳,轉換為日期時間,在 Linux 命令列上,也可以快速的進行轉換:

$ date -d@1234567890 +"%Y-%m-%d %H:%M:%S"
2009-02-14 07:31:30

當然,也可以在命令列上,檢視當前的時間戳

$ date +%s
1617514141

8. 優雅的計算程式執行時間

在 Linux 下,可以通過 time 命令,很容易獲取程式的執行時間:

$ time ./test
real    0m1.003s
user    0m0.000s
sys     0m0.000s

可以看到,程式的執行時間為: 1.003s。細心的同學,會看到 real 貌似不等於 user + sys,而且還遠遠大於,這是怎麼回事呢?

先來解釋下這三個引數的含義:

  • real:表示的鐘表時間,也就是從程式執行到結束花費的時間;
  • user:表示執行期間,cpu 在使用者空間所消耗的時間;
  • sys:表示執行期間,cpu 在核心空間所消耗的時間;

由於 usersys 只統計 cpu 消耗的時間,程式執行期間會呼叫 sleep 發生阻塞,也可能會等待網路或磁碟 IO,都會消耗大量時間。因此對於類似情況,real 的值就會大於其它兩項之和。

另外,也會遇到 real 遠遠小於 user + sys 的場景,這是什麼鬼情況?

這個更好理解,如果程式在多個 cpu 上並行,那麼 usersys 統計時間是多個 cpu 時間,實際消耗時間 real 很可能就比其它兩個之和要小了

9. 命令列檢視ascii碼

我們在開發過程中,通常需要檢視 ascii 碼,通過 Linux 命令列就可以輕鬆檢視,而不用去 Google 或 Baidu

$ man ascii

10. 優雅的刪除亂碼的檔案

在 Linux 系統中,會經常碰到名稱亂碼的檔案。想要刪除它,卻無法通過鍵盤輸入名字,有時候複製貼上亂碼名稱,終端可能識別不了,該怎麼辦?

不用擔心,下邊來展示下 find 是如何優雅的解決問題的。

$ ls  -i
138957 a.txt  138959 T.txt  132395 ڹ��.txt

$
 find . -inum 132395 -exec rm {} \;

命令中,-inum 指定的是檔案的 inode 號,它是系統中每個檔案對應的唯一編號,find 通過編號找到後,執行刪除操作。

11. Linux上獲取你的公網IP地址

在辦公或家庭環境,我們的虛擬機器或伺服器上配置的通常是內網 IP 地址,我們如何知道,在與外網通訊時,我們的公網出口 IP 是神馬呢?

這個在 Linux 上非常簡單,一條命令搞定

$ curl ip.sb
$ curl ifconfig.me

上述兩條命令都可以

12. 如何批量下載網頁資源

有時,同事會通過網頁的形式分享檔案下載連結,在 Linux 系統,通過 wget 命令可以輕鬆下載,而不用寫指令碼或爬蟲

$ wget -r -nd -np --accept=pdf http://fast.dpdk.org/doc/pdf-guides/
# --accept:選項指定資源型別格式 pdf

13. 歷史命令使用技巧

分享幾個歷史命令的使用技巧,能夠提高你的工作效率。

  • !!:重複執行上條命令;
  • !N:重複執行 history 歷史中第 N 條命令,N 可以通過 history 檢視;
  • !pw:重複執行最近一次,以pw開頭的歷史命令,這個非常有用,小編使用非常高頻;
  • !$:表示最近一次命令的最後一個引數;

猜測大部分同學沒用過 !$,這裡簡單舉個例子,讓你感受一下它的高效用法

$ vim /root/sniffer/src/main.c
$ mv !$ !$.bak
# 相當於
$ mv /root/sniffer/src/main.c /root/sniffer/src/main.c.bak

當前工作目錄是 root,想把 main.c 改為 main.c.bak。正常情況你可能需要敲 2 遍包含 main.c 的長引數,當然你也可能會選擇直接複製貼上。

而我通過使用 !$ 變數,可以很輕鬆優雅的實現改名,是不是很 hacker 呢?

14. 快速搜尋歷史命令

在 Linux 下經常會敲很多的命令,我們要怎麼快速查詢並執行歷史命令呢?

通過上下鍵來翻看歷史命令,No No No,可以通過執行 Ctrl + r,然後鍵入要所搜尋的命令關鍵詞,進行搜尋,回車就可以執行,非常高效。

15. 真正的黑客不能忽略技巧

最後,再分享一個真正的黑客不能忽略技巧。我們在所要執行的命令前,加一個空格,那這條命令就不會被 history 儲存到歷史記錄

有時候,執行的命令中包含敏感資訊,這個小技巧就顯得非常實用了,你也不會再因為忘記執行 history -c 而煩惱了。
推薦閱讀

本次分享就到這裡了,謝謝大家的閱讀,我是肖邦。關注我的公眾號「程式設計修養」,大量的乾貨文章等你來!

公眾號後臺回覆「1024」有驚喜!

相關文章