让你牛B加身的前端必会Linux命令

1,852 阅读9分钟

本文并不是一份完整的 Linux 实用命令列表,如果你的预期是这样的,那这篇文章可能就要让你失望了。

本文主要针对于 FEer 们。作为前端,一开始我们总是和 HTML/JavaScript/CSS 三大块打交道,但是久而久之,我们就会接触更多的内容,比如服务的部署。而这一块对于我们的要求会更全面,其中对 Linux 指令就有很多要求。如果你想要部署服务,而又没有成熟的工具或平台可以借助,需要完全自己来操作的话,你就需要准备好部署服务需要的所有文件、登录指定的服务器、发布指定文件、启动服务、服务器启动不成功时候进行调试以及服务维护过程中进行问题的排查。本文就将从这一条线讲起,分享歪马在工作中所积累的一些实用指令。

别看指令简单,熟练使用后,你将会收获:“哇,牛 B!”。

下面歪马会从三个部分来讲述相关的 Linux 命令,第一部分是服务部署前的准备,第二部分是登录服务器部署,第三部分是问题排查相关。

一、部署前准备

前端的业务部署,简单说起来就是把编译好的静态文件准备好,放到服务器就行。不简单的,我们也从这种简单的说起 😂。

通常情况下,我们会将编译后的文件以及服务启动相关的文件放到一个目录里,然后将其压缩打包好。我们会比较高频的使用以下几个命令。

1. mkdir 创建打包目录

mkdir可以用来创建目录,要求命令执行用户有当前目录的写权限,且创建的目录不能已存在。如果创建的目录已存在会给予提示,但不会报错。如我们创建一个output目录,提示如下。

mkdir创建已存在目录
mkdir创建已存在目录

mkdir的命令格式如下:mkdir [选项] <目录名>。比较有用的参数是-p/--parent,该参数可以是一个路径名。如果路径中的某些目录上不存在,加上此选项后,可以自动创建尚不存在的目录,可以一次创建多个目录。

如下,带有参数 p 和不带的对比:

mkdir 参数p带不带对比
mkdir 参数p带不带对比

可以看出带有参数 p 的命令会自动创建不存在的目录。

2. cp 复制内容

准备好了打包目录之后,我们就需要复制我们需要的内容了。这时候就需要用到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/;

3. tar 压缩和解压文件

准备好文件之后,接下来我们就可以打包压缩文件了。

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删除文件或目录等,这些相信大家都用过。如果有需要可以回顾或者学习一下,这里歪马就不废话了。

接下来让我们看看部署阶段会用到哪些命令。

二、部署阶段

多数情况下,我们说的部署都不是本机部署,而是远程部署,这时候我们常常会用到scpssh两个命令。下面我们就一一学习一下吧。

1. scp 远程加密复制

scp(secure copy 的缩写)是 Linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

利用这一命令,我们就可以将打包好的文件拷贝到远程服务器,如下:

scp output.tar.gz verymuch@10.xx.xx.xx:~/;

这里解释一下,代码中最后的~/是指服务器的个人目录。

如果需要复制整个目录,则添加-r参数即可,与cp类似。

由于scp是基于ssh实现的。下面我们再来看看ssh命令。

2. ssh 登录远程服务器

将打包好的内容复制到远程服务器后,我们就需要登录远程服务器,解压文件,然后起服务了,具体怎么起服务就看大家各自的服务了。

ssh可以用来登录远程服务器,其命令格式如下:ssh <user>@<host>。如:ssh verymuch@10.xx.xx.xx。如果本地用户名和登录服务器用户名一样,则用户名可以省略。

此外,ssh默认使用的是22端口,如果特殊需要修改端口,可以通过-p参数修改,如下:ssh -p <port> <user>@<host>

其中,ssh 登录时会用到最常用的免密登录,本文篇幅有限,不做介绍,歪马会在下一篇进行简单说明。

三、问题排查阶段

经过上面的两个阶段,如果顺利的话,我们的服务应该部署成功了。但是如果大家真的自动部署过的话,往往会发现,能一次成功的很少,经常会出现各种问题。这时候我们就需要排查问题了。下面我们要说的命令就和排查问题息息相关。

1. pingtelnet

首先部署完之后,我们访问服务会发现可能无法访问。这时,我们可以先通过ping指令确定与目标机器的连通性。下面分别是正常连通和不连通的效果。正常连通会收到返回值,不连通会收到超时提醒。

正常连通
正常连通
不连通超时提醒(随意的ip)
不连通超时提醒(随意的ip)

如果确认了与目标机器可以连通,但是仍然无法访问,则可以通过telnet确认我们服务的端口是否可访问。如下,确认808080端口是否正常,正常和非正常提示如下。

端口正常可访问
端口正常可访问
端口不可访问
端口不可访问

如果不正常会一直在 Tring....

如果端口不可用,可以通过下面的netstat来查看下端口的使用情况。

2. netstat

netstat可以用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据。

这里我们可以用来查看端口的使用情况。如通过netstat -apn查看所有端口的使用情况。

端口使用情况
端口使用情况

如果想要搜索指定端口,可以结合grep一起使用,如netstat -apn | grep 8380

通过查看端口的占用情况和开放状态,可以判断服务未启动成功的原因。如果被占用,可以考虑更换一个端口。

其中上面所有到的三个参数分别含义如下:

  • -a/-all: 显示所有连线中的 Socket
  • -n/–numeric: 直接使用 IP 地址,而不通过域名服务器
  • -p/–programs: 显示正在使用 Socket 的程序识别码和程序名称。这个很有用,显示出当前端口的进程,可以便于我们kill掉 😋。

3. ps 查看进程状态

通过我们的不懈努力,我们的服务应该已经能正常跑起来了。就让它自己跑着吧,走咯。

别,等等,少年别走。你还有下面两个命令需要了解一下。

要知道,机器的运行也是会出故障的,虽然我们的服务正常跑起来了,但是难保它不会出问题。所以当得知我们的服务出问题了的时候,我们可以通过ps来查看对应进程的状态,确定是否是进程挂了。

使用这一命令时,我们也可以结合grep来查询,如ps aux | grep node.js,通过起服务的脚本来查询效率会高很多。

如果你查询之后发现进程不在,那就重启一下就可以了,so easy。

5. tail -f 查看日志

最后,如果我们的服务运行正常,但是有部分功能出错了。这时就需要动手查运行日志了。一般情况下,我们都会将系统运行的日志输出到某个文件。可以通过以下命令来查看日志tail -f logs。这一命令会动态更新新增加的日志内容,非常适合用来调试。

总结

到此,歪马今天要分享的内容就结束啦。主要是梳理了一些自己常用的 Linux 命令,其中加入了场景化的过程,希望能够给大家带来帮助。至于牛不牛 B 我就不敢保证了,不牛 B 你就当我在吹牛 B 吧 😎。


如果你喜欢,欢迎扫码关注我的公众号,我会定期陪读,并分享一些其他的前端知识哟。