本文並非一份完整的 Linux 實用命令列表,若是你的預期是這樣的,那這篇文章可能就要讓你失望了。前端
本文主要針對於 FEer 們。做爲前端,一開始咱們老是和 HTML/JavaScript/CSS 三大塊打交道,可是長此以往,咱們就會接觸更多的內容,好比服務的部署。而這一塊對於咱們的要求會更全面,其中對 Linux 指令就有不少要求。若是你想要部署服務,而又沒有成熟的工具或平臺能夠藉助,須要徹底本身來操做的話,你就須要準備好部署服務須要的全部文件、登陸指定的服務器、發佈指定文件、啓動服務、服務器啓動不成功時候進行調試以及服務維護過程當中進行問題的排查。本文就將從這一條線講起,分享歪馬在工做中所積累的一些實用指令。node
別看指令簡單,熟練使用後,你將會收穫:「哇,牛 B!」。nginx
下面歪馬會從三個部分來說述相關的 Linux 命令,第一部分是服務部署前的準備,第二部分是登陸服務器部署,第三部分是問題排查相關。web
前端的業務部署,簡單提及來就是把編譯好的靜態文件準備好,放到服務器就行。不簡單的,咱們也從這種簡單的提及 😂。安全
一般狀況下,咱們會將編譯後的文件以及服務啓動相關的文件放到一個目錄裏,而後將其壓縮打包好。咱們會比較高頻的使用如下幾個命令。服務器
mkdir
能夠用來建立目錄,要求命令執行用戶有當前目錄的寫權限,且建立的目錄不能已存在。若是建立的目錄已存在會給予提示,但不會報錯。如咱們建立一個output
目錄,提示以下。app
mkdir
的命令格式以下:mkdir [選項] <目錄名>
。比較有用的參數是-p/--parent
,該參數能夠是一個路徑名。若是路徑中的某些目錄上不存在,加上此選項後,能夠自動建立尚不存在的目錄,能夠一次建立多個目錄。ssh
以下,帶有參數 p 和不帶的對比:編輯器
能夠看出帶有參數 p 的命令會自動建立不存在的目錄。工具
準備好了打包目錄以後,咱們就須要複製咱們須要的內容了。這時候就須要用到cp
命令了。cp
命令能夠將源文件複製到目標文件,或者將多個源文件複製到目標文件。
命令格式以下:cp [選項] <源文件> <目錄>
。歪馬以爲比較有用的參數有如下幾個:
-n/--no-clobber
: 不要覆蓋已存在文件,與下面的
-i
互斥使用。(經測試,
cp
的默認行爲是覆蓋,至少 mac 是這樣的 😳)。
-i/--interactive
: 覆蓋前詢問
-r
: 遞歸複製,用於複製目錄
-f/--force
: 強行復制文件或內容,不論目的文件或目錄是否已存在
-u/--update
:只有在源文件比目標文件新時才複製
通常咱們會有兩種操做,一種是複製目錄下的全部內容,一種是複製單個文件。
以下咱們將www
目錄下的內容總體拷貝到output
目錄,而且複製了單個文件nginx.conf
:
cp -r www/* output/www/;
cp nginx.conf output/;
複製代碼
準備好文件以後,接下來咱們就能夠打包壓縮文件了。
tar 能夠用來壓縮和解壓文件。準備階段,咱們只須要用到 tar 的壓縮功能,部署時會用到解壓功能。爲了方便,放在一塊兒講述。tar 的命令格式以下:tar [選項] <打包文件名> <文件>
。
好比 output 目錄的壓縮和解壓能夠以下操做:
// 壓縮 cd output tar -zcvf ../output.tar.gz *; 複製代碼// 解壓 tar -zxvf ../output.tar.gz; 複製代碼
其中壓縮和解壓只有一個參數之差,下面咱們來看一下這幾個參數吧。
-z
: 支持 gzip 解壓文件
-c
: 創建新的壓縮文件
-v
: 顯示操做過程
-f
: 指定壓縮文件
-x
: 從壓縮的文件中提取文件
好了,上面咱們說了部署前的整個準備過程當中,歪馬以爲最經常使用的三個命令。除了這些以外,可能還有一些你也會用到,如touch
建立文件、rm
刪除文件或目錄等,這些相信你們都用過。若是有須要能夠回顧或者學習一下,這裏歪馬就不廢話了。
接下來讓咱們看看部署階段會用到哪些命令。
多數狀況下,咱們說的部署都不是本機部署,而是遠程部署,這時候咱們經常會用到scp
和ssh
兩個命令。下面咱們就一一學習一下吧。
scp
遠程加密複製scp
(secure copy 的縮寫)是 Linux 系統下基於 ssh 登錄進行安全的遠程文件拷貝命令。
利用這一命令,咱們就能夠將打包好的文件拷貝到遠程服務器,以下:
scp output.tar.gz verymuch@10.xx.xx.xx:~/;
複製代碼
這裏解釋一下,代碼中最後的~/
是指服務器的我的目錄。
若是須要複製整個目錄,則添加-r
參數便可,與cp
相似。
因爲scp
是基於ssh
實現的。下面咱們再來看看ssh
命令。
ssh
登陸遠程服務器將打包好的內容複製到遠程服務器後,咱們就須要登陸遠程服務器,解壓文件,而後起服務了,具體怎麼起服務就看你們各自的服務了。
ssh
能夠用來登陸遠程服務器,其命令格式以下:ssh <user>@<host>
。如:ssh verymuch@10.xx.xx.xx
。若是本地用戶名和登陸服務器用戶名同樣,則用戶名能夠省略。
此外,ssh
默認使用的是22
端口,若是特殊須要修改端口,能夠經過-p
參數修改,以下:ssh -p <port> <user>@<host>
。
其中,ssh 登陸時會用到最經常使用的免密登陸,本文篇幅有限,不作介紹,歪馬會在下一篇進行簡單說明。
通過上面的兩個階段,若是順利的話,咱們的服務應該部署成功了。可是若是你們真的自動部署過的話,每每會發現,能一次成功的不多,常常會出現各類問題。這時候咱們就須要排查問題了。下面咱們要說的命令就和排查問題息息相關。
ping
和telnet
首先部署完以後,咱們訪問服務會發現可能沒法訪問。這時,咱們能夠先經過ping
指令肯定與目標機器的連通性。下面分別是正常連通和不連通的效果。正常連通會收到返回值,不連通會收到超時提醒。
若是確認了與目標機器能夠連通,可是仍然沒法訪問,則能夠經過telnet
確認咱們服務的端口是否可訪問。以下,確認80
和8080
端口是否正常,正常和非正常提示以下。
若是不正常會一直在 Tring....
若是端口不可用,能夠經過下面的netstat
來查看下端口的使用狀況。
netstat
能夠用於顯示與 IP、TCP、UDP 和 ICMP 協議相關的統計數據。
這裏咱們能夠用來查看端口的使用狀況。如經過netstat -apn
查看全部端口的使用狀況。
若是想要搜索指定端口,能夠結合grep
一塊兒使用,如netstat -apn | grep 8380
。
經過查看端口的佔用狀況和開放狀態,能夠判斷服務未啓動成功的緣由。若是被佔用,能夠考慮更換一個端口。
其中上面全部到的三個參數分別含義以下:
-a/-all
: 顯示全部連線中的 Socket
-n/–numeric
: 直接使用 IP 地址,而不經過域名服務器
-p/–programs
: 顯示正在使用 Socket 的程序識別碼和程序名稱。這個頗有用,顯示出當前端口的進程,能夠便於咱們
kill
掉 😋。
經過咱們的不懈努力,咱們的服務應該已經能正常跑起來了。就讓它本身跑着吧,走咯。
別,等等,少年別走。你還有下面兩個命令須要瞭解一下。
要知道,機器的運行也是會出故障的,雖然咱們的服務正常跑起來了,可是難保它不會出問題。因此當得知咱們的服務出問題了的時候,咱們能夠經過ps
來查看對應進程的狀態,肯定是不是進程掛了。
使用這一命令時,咱們也能夠結合grep
來查詢,如ps aux | grep node.js
,經過起服務的腳原本查詢效率會高不少。
若是你查詢以後發現進程不在,那就重啓一下就能夠了,so easy。
最後,若是咱們的服務運行正常,可是有部分功能出錯了。這時就須要動手查運行日誌了。通常狀況下,咱們都會將系統運行的日誌輸出到某個文件。能夠經過如下命令來查看日誌tail -f logs
。這一命令會動態更新新增長的日誌內容,很是適合用來調試。
到此,歪馬今天要分享的內容就結束啦。主要是梳理了一些本身經常使用的 Linux 命令,其中加入了場景化的過程,但願可以給你們帶來幫助。至於牛不牛 B 我就不敢保證了,不牛 B 你就當我在吹牛 B 吧 😎。
若是你喜歡,歡迎掃碼關注個人公衆號,我會按期陪讀,並分享一些其餘的前端知識喲。