前端必會(huì)Linux常用命令,看這一篇就夠了!
本文并不是一份完整的 Linux 實(shí)用命令列表,如果你的預(yù)期是這樣的,那這篇文章可能就要讓你失望了。
本文主要針對(duì)于 FEer 們。作為前端,一開始我們總是和 HTML/JavaScript/CSS 三大塊打交道,但是久而久之,我們就會(huì)接觸更多的內(nèi)容,比如服務(wù)的部署。而這一塊對(duì)于我們的要求會(huì)更全面,其中對(duì) Linux 指令就有很多要求。如果你想要部署服務(wù),而又沒有成熟的工具或平臺(tái)可以借助,需要完全自己來操作的話,你就需要準(zhǔn)備好部署服務(wù)需要的所有文件、登錄指定的服務(wù)器、發(fā)布指定文件、啟動(dòng)服務(wù)、服務(wù)器啟動(dòng)不成功時(shí)候進(jìn)行調(diào)試以及服務(wù)維護(hù)過程中進(jìn)行問題的排查。本文就將從這一條線講起,分享歪馬在工作中所積累的一些實(shí)用指令。
別看指令簡(jiǎn)單,熟練使用后,你將會(huì)收獲:“哇,牛 B!”。
下面歪馬會(huì)從三個(gè)部分來講述相關(guān)的 Linux 命令,第一部分是服務(wù)部署前的準(zhǔn)備,第二部分是登錄服務(wù)器部署,第三部分是問題排查相關(guān)。
一、部署前準(zhǔn)備
前端的業(yè)務(wù)部署,簡(jiǎn)單說起來就是把編譯好的靜態(tài)文件準(zhǔn)備好,放到服務(wù)器就行。不簡(jiǎn)單的,我們也從這種簡(jiǎn)單的說起 ?。
通常情況下,我們會(huì)將編譯后的文件以及服務(wù)啟動(dòng)相關(guān)的文件放到一個(gè)目錄里,然后將其壓縮打包好。我們會(huì)比較高頻的使用以下幾個(gè)命令。
1. mkdir 創(chuàng)建打包目錄
mkdir可以用來創(chuàng)建目錄,要求命令執(zhí)行用戶有當(dāng)前目錄的寫權(quán)限,且創(chuàng)建的目錄不能已存在。如果創(chuàng)建的目錄已存在會(huì)給予提示,但不會(huì)報(bào)錯(cuò)。如我們創(chuàng)建一個(gè)output目錄,提示如下。

mkdir的命令格式如下:mkdir [選項(xiàng)] <目錄名>。比較有用的參數(shù)是-p/--parent,該參數(shù)可以是一個(gè)路徑名。如果路徑中的某些目錄上不存在,加上此選項(xiàng)后,可以自動(dòng)創(chuàng)建尚不存在的目錄,可以一次創(chuàng)建多個(gè)目錄。
如下,帶有參數(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)] <源文件> <目錄>。歪馬覺得比較有用的參數(shù)有以下幾個(gè):
-n/--no-clobber: 不要覆蓋已存在文件,與下面的-i互斥使用。(經(jīng)測(cè)試,cp的默認(rèn)行為是覆蓋,至少 mac 是這樣的 ?)。-i/--interactive: 覆蓋前詢問-r: 遞歸復(fù)制,用于復(fù)制目錄-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)備好文件之后,接下來我們就可以打包壓縮文件了。
tar 可以用來壓縮和解壓文件。準(zhǔn)備階段,我們只需要用到 tar 的壓縮功能,部署時(shí)會(huì)用到解壓功能。為了方便,放在一起講述。tar 的命令格式如下:tar [選項(xiàng)] <打包文件名> <文件>。
比如 output 目錄的壓縮和解壓可以如下操作:
// 壓縮
cd output
tar -zcvf ../output.tar.gz *;
// 解壓
tar -zxvf ../output.tar.gz;
其中壓縮和解壓只有一個(gè)參數(shù)之差,下面我們來看一下這幾個(gè)參數(shù)吧。
-z: 支持 gzip 解壓文件-c: 建立新的壓縮文件-v: 顯示操作過程-f: 指定壓縮文件-x: 從壓縮的文件中提取文件
好了,上面我們說了部署前的整個(gè)準(zhǔn)備過程中,歪馬覺得最常用的三個(gè)命令。除了這些之外,可能還有一些你也會(huì)用到,如touch創(chuàng)建文件、rm刪除文件或目錄等,這些相信大家都用過。如果有需要可以回顧或者學(xué)習(xí)一下,這里歪馬就不廢話了。
接下來讓我們看看部署階段會(huì)用到哪些命令。
二、部署階段
多數(shù)情況下,我們說的部署都不是本機(jī)部署,而是遠(yuǎn)程部署,這時(shí)候我們常常會(huì)用到scp和ssh兩個(gè)命令。下面我們就一一學(xué)習(xí)一下吧。
1. scp 遠(yuǎn)程加密復(fù)制
scp(secure copy 的縮寫)是 Linux 系統(tǒng)下基于 ssh 登陸進(jìn)行安全的遠(yuǎn)程文件拷貝命令。
利用這一命令,我們就可以將打包好的文件拷貝到遠(yuǎn)程服務(wù)器,如下:
scp output.tar.gz [email protected]:~/;
這里解釋一下,代碼中最后的~/是指服務(wù)器的個(gè)人目錄。
如果需要復(fù)制整個(gè)目錄,則添加-r參數(shù)即可,與cp類似。
由于scp是基于ssh實(shí)現(xiàn)的。下面我們?cè)賮砜纯?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(239, 112, 96);">ssh命令。
2. ssh 登錄遠(yuǎn)程服務(wù)器
將打包好的內(nèi)容復(fù)制到遠(yuǎn)程服務(wù)器后,我們就需要登錄遠(yuǎn)程服務(wù)器,解壓文件,然后起服務(wù)了,具體怎么起服務(wù)就看大家各自的服務(wù)了。
ssh可以用來登錄遠(yuǎn)程服務(wù)器,其命令格式如下:ssh 。如:ssh [email protected]。如果本地用戶名和登錄服務(wù)器用戶名一樣,則用戶名可以省略。
此外,ssh默認(rèn)使用的是22端口,如果特殊需要修改端口,可以通過-p參數(shù)修改,如下:ssh -p 。
其中,ssh 登錄時(shí)會(huì)用到最常用的免密登錄,本文篇幅有限,不做介紹,歪馬會(huì)在下一篇進(jìn)行簡(jiǎn)單說明。
三、問題排查階段
經(jīng)過上面的兩個(gè)階段,如果順利的話,我們的服務(wù)應(yīng)該部署成功了。但是如果大家真的自動(dòng)部署過的話,往往會(huì)發(fā)現(xiàn),能一次成功的很少,經(jīng)常會(huì)出現(xiàn)各種問題。這時(shí)候我們就需要排查問題了。下面我們要說的命令就和排查問題息息相關(guān)。
1. ping和telnet
首先部署完之后,我們?cè)L問服務(wù)會(huì)發(fā)現(xiàn)可能無法訪問。這時(shí),我們可以先通過ping指令確定與目標(biāo)機(jī)器的連通性。下面分別是正常連通和不連通的效果。正常連通會(huì)收到返回值,不連通會(huì)收到超時(shí)提醒。


如果確認(rèn)了與目標(biāo)機(jī)器可以連通,但是仍然無法訪問,則可以通過telnet確認(rèn)我們服務(wù)的端口是否可訪問。如下,確認(rèn)80和8080端口是否正常,正常和非正常提示如下。


如果不正常會(huì)一直在 Tring....
如果端口不可用,可以通過下面的netstat來查看下端口的使用情況。
2. netstat
netstat可以用于顯示與 IP、TCP、UDP 和 ICMP 協(xié)議相關(guān)的統(tǒng)計(jì)數(shù)據(jù)。
這里我們可以用來查看端口的使用情況。如通過netstat -apn查看所有端口的使用情況。

如果想要搜索指定端口,可以結(jié)合grep一起使用,如netstat -apn | grep 8380。
通過查看端口的占用情況和開放狀態(tài),可以判斷服務(wù)未啟動(dòng)成功的原因。如果被占用,可以考慮更換一個(gè)端口。
其中上面所有到的三個(gè)參數(shù)分別含義如下:
-a/-all: 顯示所有連線中的 Socket-n/–numeric: 直接使用 IP 地址,而不通過域名服務(wù)器-p/–programs: 顯示正在使用 Socket 的程序識(shí)別碼和程序名稱。這個(gè)很有用,顯示出當(dāng)前端口的進(jìn)程,可以便于我們kill掉 ?。
3. ps 查看進(jìn)程狀態(tài)
通過我們的不懈努力,我們的服務(wù)應(yīng)該已經(jīng)能正常跑起來了。就讓它自己跑著吧,走咯。
別,等等,少年別走。你還有下面兩個(gè)命令需要了解一下。
要知道,機(jī)器的運(yùn)行也是會(huì)出故障的,雖然我們的服務(wù)正常跑起來了,但是難保它不會(huì)出問題。所以當(dāng)?shù)弥覀兊姆?wù)出問題了的時(shí)候,我們可以通過ps來查看對(duì)應(yīng)進(jìn)程的狀態(tài),確定是否是進(jìn)程掛了。
使用這一命令時(shí),我們也可以結(jié)合grep來查詢,如ps aux | grep node.js,通過起服務(wù)的腳本來查詢效率會(huì)高很多。
如果你查詢之后發(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è)文件。可以通過以下命令來查看日志tail -f logs。這一命令會(huì)動(dòng)態(tài)更新新增加的日志內(nèi)容,非常適合用來調(diào)試。
總結(jié)
主要是梳理了一些自己常用的 Linux 命令,其中加入了場(chǎng)景化的過程,希望能夠給大家?guī)韼椭V劣谂2慌?B 我就不敢保證了,不牛 B 你就當(dāng)我在吹牛 B 吧 ?。
另一篇推介的 Linux 實(shí)用文章:?<手摸手教你 CentOS 入門必備基礎(chǔ)知識(shí)(建議收藏)>?
最后
如果你覺得這篇內(nèi)容對(duì)你挺有啟發(fā),我想邀請(qǐng)你幫我三個(gè)小忙:
點(diǎn)個(gè)「在看」,讓更多的人也能看到這篇內(nèi)容(喜歡不點(diǎn)在看,都是耍流氓 -_-)
歡迎加我微信「qianyu443033099」拉你進(jìn)技術(shù)群,長(zhǎng)期交流學(xué)習(xí)...
關(guān)注公眾號(hào)「前端下午茶」,持續(xù)為你推送精選好文,也可以加我為好友,隨時(shí)聊騷。

