本文并非一份完整的 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 吧 😎。
若是你喜欢,欢迎扫码关注个人公众号,我会按期陪读,并分享一些其余的前端知识哟。