本文并不是一份完整的 Linux 實(shí)用命令列表,,如果你的預(yù)期是這樣的,,那這篇文章可能就要讓你失望了。
本文主要針對(duì)于 FEer 們,。作為前端,一開(kāi)始我們總是和 HTML/JavaScript/CSS 三大塊打交道,,但是久而久之,,我們就會(huì)接觸更多的內(nèi)容,比如服務(wù)的部署,。而這一塊對(duì)于我們的要求會(huì)更全面,,其中對(duì) Linux 指令就有很多要求。如果你想要部署服務(wù),,而又沒(méi)有成熟的工具或平臺(tái)可以借助,,需要完全自己來(lái)操作的話(huà),你就需要準(zhǔn)備好部署服務(wù)需要的所有文件,、登錄指定的服務(wù)器,、發(fā)布指定文件、啟動(dòng)服務(wù),、服務(wù)器啟動(dòng)不成功時(shí)候進(jìn)行調(diào)試以及服務(wù)維護(hù)過(guò)程中進(jìn)行問(wèn)題的排查,。本文就將從這一條線(xiàn)講起,分享歪馬在工作中所積累的一些實(shí)用指令,。
別看指令簡(jiǎn)單,,熟練使用后,你將會(huì)收獲:“哇,,牛 B,!”。
下面歪馬會(huì)從三個(gè)部分來(lái)講述相關(guān)的 Linux 命令,,第一部分是服務(wù)部署前的準(zhǔn)備,,第二部分是登錄服務(wù)器部署,第三部分是問(wèn)題排查相關(guān),。
一,、部署前準(zhǔn)備
前端的業(yè)務(wù)部署,簡(jiǎn)單說(shuō)起來(lái)就是把編譯好的靜態(tài)文件準(zhǔn)備好,,放到服務(wù)器就行,。不簡(jiǎn)單的,我們也從這種簡(jiǎn)單的說(shuō)起 ??。
通常情況下,,我們會(huì)將編譯后的文件以及服務(wù)啟動(dòng)相關(guān)的文件放到一個(gè)目錄里,,然后將其壓縮打包好。我們會(huì)比較高頻的使用以下幾個(gè)命令,。
1. mkdir 創(chuàng)建打包目錄
mkdir
可以用來(lái)創(chuàng)建目錄,,要求命令執(zhí)行用戶(hù)有當(dāng)前目錄的寫(xiě)權(quán)限,且創(chuàng)建的目錄不能已存在,。如果創(chuàng)建的目錄已存在會(huì)給予提示,,但不會(huì)報(bào)錯(cuò)。如我們創(chuàng)建一個(gè)output
目錄,,提示如下,。
mkdir創(chuàng)建已存在目錄mkdir
的命令格式如下:mkdir [選項(xiàng)] <目錄名>
。比較有用的參數(shù)是-p/--parent
,,該參數(shù)可以是一個(gè)路徑名,。如果路徑中的某些目錄上不存在,加上此選項(xiàng)后,,可以自動(dòng)創(chuàng)建尚不存在的目錄,,可以一次創(chuàng)建多個(gè)目錄。
如下,,帶有參數(shù) p 和不帶的對(duì)比:
mkdir 參數(shù)p帶不帶對(duì)比可以看出帶有參數(shù) p 的命令會(huì)自動(dòng)創(chuàng)建不存在的目錄,。
2. cp 復(fù)制內(nèi)容
準(zhǔn)備好了打包目錄之后,我們就需要復(fù)制我們需要的內(nèi)容了,。這時(shí)候就需要用到cp
命令了,。cp
命令可以將源文件復(fù)制到目標(biāo)文件,或者將多個(gè)源文件復(fù)制到目標(biāo)文件,。
命令格式如下:cp [選項(xiàng)] <源文件> <目錄>
,。歪馬覺(jué)得比較有用的參數(shù)有以下幾個(gè):
-n/--no-clobber
: 不要覆蓋已存在文件,與下面的-i
互斥使用,。(經(jīng)測(cè)試,,cp
的默認(rèn)行為是覆蓋,至少 mac 是這樣的 ??),。-i/--interactive
: 覆蓋前詢(xún)問(wèn)-f/--force
: 強(qiáng)行復(fù)制文件或內(nèi)容,不論目的文件或目錄是否已存在-u/--update
:只有在源文件比目標(biāo)文件新時(shí)才復(fù)制
一般我們會(huì)有兩種操作,,一種是復(fù)制目錄下的所有內(nèi)容,,一種是復(fù)制單個(gè)文件。
如下我們將www
目錄下的內(nèi)容整體拷貝到output
目錄,,并且復(fù)制了單個(gè)文件nginx.conf
:
cp -r www/* output/www/;
cp nginx.conf output/;
3. tar 壓縮和解壓文件
準(zhǔn)備好文件之后,,接下來(lái)我們就可以打包壓縮文件了,。
tar 可以用來(lái)壓縮和解壓文件。準(zhǔn)備階段,,我們只需要用到 tar 的壓縮功能,,部署時(shí)會(huì)用到解壓功能。為了方便,,放在一起講述,。tar 的命令格式如下:tar [選項(xiàng)] <打包文件名> <文件>
。
比如 output 目錄的壓縮和解壓可以如下操作:
// 壓縮
cd output
tar -zcvf ../output.tar.gz *;
// 解壓
tar -zxvf ../output.tar.gz;
其中壓縮和解壓只有一個(gè)參數(shù)之差,,下面我們來(lái)看一下這幾個(gè)參數(shù)吧,。
好了,上面我們說(shuō)了部署前的整個(gè)準(zhǔn)備過(guò)程中,,歪馬覺(jué)得最常用的三個(gè)命令,。除了這些之外,可能還有一些你也會(huì)用到,,如touch
創(chuàng)建文件、rm
刪除文件或目錄等,,這些相信大家都用過(guò),。如果有需要可以回顧或者學(xué)習(xí)一下,這里歪馬就不廢話(huà)了,。
接下來(lái)讓我們看看部署階段會(huì)用到哪些命令,。
二、部署階段
多數(shù)情況下,,我們說(shuō)的部署都不是本機(jī)部署,,而是遠(yuǎn)程部署,這時(shí)候我們常常會(huì)用到scp
和ssh
兩個(gè)命令,。下面我們就一一學(xué)習(xí)一下吧,。
1. scp
遠(yuǎn)程加密復(fù)制
scp
(secure copy 的縮寫(xiě))是 Linux 系統(tǒng)下基于 ssh 登陸進(jìn)行安全的遠(yuǎn)程文件拷貝命令。
利用這一命令,,我們就可以將打包好的文件拷貝到遠(yuǎn)程服務(wù)器,,如下:
這里解釋一下,代碼中最后的~/
是指服務(wù)器的個(gè)人目錄,。
如果需要復(fù)制整個(gè)目錄,,則添加-r
參數(shù)即可,與cp
類(lèi)似,。
由于scp
是基于ssh
實(shí)現(xiàn)的,。下面我們?cè)賮?lái)看看ssh
命令。
2. ssh
登錄遠(yuǎn)程服務(wù)器
將打包好的內(nèi)容復(fù)制到遠(yuǎn)程服務(wù)器后,,我們就需要登錄遠(yuǎn)程服務(wù)器,,解壓文件,,然后起服務(wù)了,具體怎么起服務(wù)就看大家各自的服務(wù)了,。
ssh
可以用來(lái)登錄遠(yuǎn)程服務(wù)器,,其命令格式如下:ssh <user>@<host>
。如:ssh [email protected]
,。如果本地用戶(hù)名和登錄服務(wù)器用戶(hù)名一樣,,則用戶(hù)名可以省略。
此外,,ssh
默認(rèn)使用的是22
端口,,如果特殊需要修改端口,可以通過(guò)-p
參數(shù)修改,,如下:ssh -p <port> <user>@<host>
,。
其中,ssh 登錄時(shí)會(huì)用到最常用的免密登錄,,本文篇幅有限,,不做介紹,歪馬會(huì)在下一篇進(jìn)行簡(jiǎn)單說(shuō)明,。
三,、問(wèn)題排查階段
經(jīng)過(guò)上面的兩個(gè)階段,如果順利的話(huà),,我們的服務(wù)應(yīng)該部署成功了,。但是如果大家真的自動(dòng)部署過(guò)的話(huà),往往會(huì)發(fā)現(xiàn),,能一次成功的很少,,經(jīng)常會(huì)出現(xiàn)各種問(wèn)題。這時(shí)候我們就需要排查問(wèn)題了,。下面我們要說(shuō)的命令就和排查問(wèn)題息息相關(guān),。
1. ping
和telnet
首先部署完之后,我們?cè)L問(wèn)服務(wù)會(huì)發(fā)現(xiàn)可能無(wú)法訪(fǎng)問(wèn),。這時(shí),,我們可以先通過(guò)ping
指令確定與目標(biāo)機(jī)器的連通性。下面分別是正常連通和不連通的效果,。正常連通會(huì)收到返回值,,不連通會(huì)收到超時(shí)提醒。
正常連通不連通超時(shí)提醒(隨意的ip)如果確認(rèn)了與目標(biāo)機(jī)器可以連通,,但是仍然無(wú)法訪(fǎng)問(wèn),,則可以通過(guò)telnet
確認(rèn)我們服務(wù)的端口是否可訪(fǎng)問(wèn)。如下,,確認(rèn)80
和8080
端口是否正常,,正常和非正常提示如下,。
端口正常可訪(fǎng)問(wèn)端口不可訪(fǎng)問(wèn)如果不正常會(huì)一直在 Tring....
如果端口不可用,,可以通過(guò)下面的netstat
來(lái)查看下端口的使用情況,。
2. netstat
netstat
可以用于顯示與 IP、TCP,、UDP 和 ICMP 協(xié)議相關(guān)的統(tǒng)計(jì)數(shù)據(jù),。
這里我們可以用來(lái)查看端口的使用情況。如通過(guò)netstat -apn
查看所有端口的使用情況,。
端口使用情況如果想要搜索指定端口,,可以結(jié)合grep
一起使用,如netstat -apn | grep 8380
,。
通過(guò)查看端口的占用情況和開(kāi)放狀態(tài),,可以判斷服務(wù)未啟動(dòng)成功的原因。如果被占用,,可以考慮更換一個(gè)端口,。
其中上面所有到的三個(gè)參數(shù)分別含義如下:
-a/-all
: 顯示所有連線(xiàn)中的 Socket-n/–numeric
: 直接使用 IP 地址,而不通過(guò)域名服務(wù)器-p/–programs
: 顯示正在使用 Socket 的程序識(shí)別碼和程序名稱(chēng),。這個(gè)很有用,,顯示出當(dāng)前端口的進(jìn)程,可以便于我們kill
掉 ??,。
3. ps 查看進(jìn)程狀態(tài)
通過(guò)我們的不懈努力,,我們的服務(wù)應(yīng)該已經(jīng)能正常跑起來(lái)了,。就讓它自己跑著吧,,走咯。
別,,等等,,少年別走。你還有下面兩個(gè)命令需要了解一下,。
要知道,,機(jī)器的運(yùn)行也是會(huì)出故障的,雖然我們的服務(wù)正常跑起來(lái)了,,但是難保它不會(huì)出問(wèn)題,。所以當(dāng)?shù)弥覀兊姆?wù)出問(wèn)題了的時(shí)候,我們可以通過(guò)ps
來(lái)查看對(duì)應(yīng)進(jìn)程的狀態(tài),,確定是否是進(jìn)程掛了,。
使用這一命令時(shí),我們也可以結(jié)合grep
來(lái)查詢(xún),,如ps aux | grep node.js
,,通過(guò)起服務(wù)的腳本來(lái)查詢(xún)效率會(huì)高很多,。
如果你查詢(xún)之后發(fā)現(xiàn)進(jìn)程不在,那就重啟一下就可以了,,so easy,。
5. tail -f 查看日志
最后,如果我們的服務(wù)運(yùn)行正常,,但是有部分功能出錯(cuò)了,。這時(shí)就需要?jiǎng)邮植檫\(yùn)行日志了。一般情況下,,我們都會(huì)將系統(tǒng)運(yùn)行的日志輸出到某個(gè)文件,。可以通過(guò)以下命令來(lái)查看日志tail -f logs
,。這一命令會(huì)動(dòng)態(tài)更新新增加的日志內(nèi)容,,非常適合用來(lái)調(diào)試。
總結(jié)
到此,,歪馬今天要分享的內(nèi)容就結(jié)束啦,。主要是梳理了一些自己常用的 Linux 命令,其中加入了場(chǎng)景化的過(guò)程,,希望能夠給大家?guī)?lái)幫助,。至于牛不牛 B 我就不敢保證了,不牛 B 你就當(dāng)我在吹牛 B 吧 ??,。
關(guān)于奇舞周刊
《奇舞周刊》是360公司專(zhuān)業(yè)前端團(tuán)隊(duì)「奇舞團(tuán)」運(yùn)營(yíng)的前端技術(shù)社區(qū),。關(guān)注公眾號(hào)后,直接發(fā)送鏈接到后臺(tái)即可給我們投稿,。