快來 Get 常用的 Linux 命令和技巧!
好奇開發(fā)人員使用哪些Linux命令嗎? 有什么技巧呢? 讓我們帶你走進(jìn)程序開發(fā)人員的日常工作吧。
端口轉(zhuǎn)發(fā)(Port forwarding)
有時候我需要連接到數(shù)據(jù)庫,當(dāng)然我更喜歡使用我的GUI管理器(JetBrains DataGrip)來做這件事。但是,如果你公司的安全策略規(guī)定數(shù)據(jù)庫的端口不能公開,那么你可以執(zhí)行以下命令:
ssh -L{你PC端的端口號}:localhost:{數(shù)據(jù)庫端的端口號} root@{服務(wù)器IP地址}
下面這行命令將打開你的筆記本電腦上的3308端口,并將所有內(nèi)容轉(zhuǎn)發(fā)到IP地址為192.168.1.2的服務(wù)器的3306端口上:
ssh-L3308:localhost:3306root@192.168.1.2
這里的localhost意味著數(shù)據(jù)庫正在偵聽服務(wù)器(192.168.1.2)自身。你也可以鍵入一個不同的服務(wù)器IP地址,如192.168.3.77,這樣所有內(nèi)容都將通過192.168.1.2轉(zhuǎn)發(fā)到服務(wù)器192.168.3.77。
在VIM中編輯文件前忘記sudo,保存時需要sudo權(quán)限怎么辦?
你是否曾經(jīng)在編輯一些配置文件前,忘記了先sudo獲得權(quán)限?我有過很多這樣的經(jīng)歷。別緊張,這里有一個保存文件的技巧,只要在VIM中鍵入:
:w !sudotee %
詳細(xì)解釋請參考這里:https://stackoverflow.com/questions/2600783/how-does-the-vim-write-with-sudo-trick-work/7078429#7078429。
在Linux控制終端上到達(dá)行首和行尾
如果你在Linux控制終端上寫了一條很長的命令,這時候你發(fā)現(xiàn)你忘記了在這行命令的開始處鍵入sudo,你需要回到行首添上漏掉的sudo,然后,你還要回到行尾去添加一些參數(shù)。
你可以通過同時按下crtl + a移動光標(biāo)到行首,同樣地,你也可以通過同時按下 crtl + e移動光標(biāo)到行尾。
ll命令
鍵入ll而不是ls –la命令,可以讓你在一年中節(jié)省幾天敲鍵盤的時間。這個命令適用于大多數(shù)Linux服務(wù)器。
執(zhí)行以前執(zhí)行的命令
執(zhí)行上一個命令
想要再次執(zhí)行上一個命令,當(dāng)然可以按↑(向上箭頭)鍵。但你也可以直接敲鍵盤!!. 以根用戶身份重復(fù)執(zhí)行上一個命令非常容易。就像下面這樣:
sudo !!
如果要重復(fù)執(zhí)行以apt開頭的上一個命令,直接鍵入!apt。
搜索歷史命令
要查找你執(zhí)行過的上一個包含/tmp的命令,可以按ctrl + r,并且鍵入/tmp。如果你還想得到下一個結(jié)果,可以再次按下ctrl + r。
要顯示所有執(zhí)行過的包含/tmp的命令,可以使用正則表達(dá)式搜索,命令如下:
history | grep "/tmp"
yes命令
如果你想對一個命令中出現(xiàn)的問題都回答“是”,那么你可以用yes命令。例如:
yes | yum install curl
這個命令會對yum安裝過程中的所有問題都回答“yes”。
如果你想回答“no”的話,那么就用yes no, 命令如下:
yesno| yum install curl
警告:使用yes命令可能會產(chǎn)生一些意想不到的后果。比如說,你可能會意外地安裝10GB的依賴項,或其他你不想發(fā)生的事情。
在后臺運行一個長時進(jìn)程時,關(guān)閉終端窗口
如果你運行一個腳本,需要3天的時間,那么你不需要一直打開終端窗口。你可以使用nohup命令在后臺運行它:
nohup wget http://large-files.com/10gb-super-movie.avi &
這樣的話,wget命令就在后臺工作,它的輸出會保存到工作目錄下的nohup.out文件中。
查找是誰占用了你最喜歡的端口
當(dāng)你試圖運行nginx的時候,你發(fā)現(xiàn)已經(jīng)有一個apache在運行,并且占用了你想要用的443端口,這讓你真的很惱火。
這時候,你需要知道是誰正在使用這個端口。下面的命令可以告訴你哪個進(jìn)程正在偵聽端口80:
$ netstat -tulpn | grep80tcp6 00 :::80 :::* LISTEN 10177/java
找到了,那個偵聽80端口的是進(jìn)程10177。現(xiàn)在你可以執(zhí)行下面的命令來找到更多的信息:
ps aux | grep 10177
讀取日志文件
每個人都知道,less是讀取日志文件的一種非常好的方法。但是你知道它也可以讀取一個用gzip壓縮過的日志而無需解壓縮嗎!
less /var/log/my-app/my-app.log.2015.12.14.gz
實時讀取日志文件
下面的命令將只顯示指定日志文件中包含“ERROR”字符的新行:
tail -f /var/log/my-app/my-app.log | grep ERROR
進(jìn)程排序
下面的命令是按CPU使用率排序,顯示最高的3個進(jìn)程:
ps aux --sort=-pcpu | head -n 4
下面的命令是按內(nèi)存使用率排序,顯示最高的3個進(jìn)程:
ps aux --sort=-rss | head -n 4
每隔X秒執(zhí)行一次命令
要每隔X秒打印命令的輸出,可以使用watch命令。下面的例子是每隔一秒打印一次date命令的輸出:
watch -n 1 dat
安靜模式
很多標(biāo)準(zhǔn)命令都有安靜模式或靜默模式,這個模式在你創(chuàng)建一個bash腳本時非常有用。在大多數(shù)情況下,只需要在命令后面添加-q或-s(如下)。詳細(xì)信息可以閱讀 --help或man輸出的內(nèi)容,或者上StackOverflow網(wǎng)站查找。
zip-qarchive.zipbig-file.jpg
輸出不可避免時,有時候也必須忽略輸出(實際上在使用內(nèi)部腳本你總是需要這樣做),這時候你可以將輸出定向到/dev/null:
./very-verbose.sh 1>/dev/null
讓crontab(自動定時)執(zhí)行的腳本創(chuàng)建日志文件
在crontab中輸入以下命令。 如果腳本執(zhí)行失敗,您也可以在生成的日志中搜索原因:
022 * * 1-5 /opt/scripts/send-report.sh 2>/var/log/scripts/report-error.log