Linux系统管理命令

使用ifconfig查看网卡ip

netstat查看网络端口号

◆netstat-tulpn或者netstat-ano

netstat常用选项

查看进程&杀掉进程

◆ps -ef ◆kill -9 PID

可以使用grep进行筛选

应用服务化

◆应用服务化是指让应用程序以服务方式在系统后台运行 ◆Liux系统对服务化应用进行统一管理 ◆服务管理命令:systemctl

systemctl

将redis应用服务化,随着linux开启而启动,不用每次手动加载conf文件进行启动 先确定PID文件是否存在,进入redis文件夹 使用命令find / -name *.pid 找到一个文件/run/redis_6379.pid,使用vim打开,里面保存的是pid号 或者使用grep进行搜索查看

里面保存的是进程编号,我们如果应用服务化后要进行重启或者杀进程就需要这个编号 记住文件位置/run/redis_6379.pid注意,重启后需要手动开启一次redis.conf文件,才会出现pid文件 ./src/redis-server redis.conf

打开路径/usr/lib/systemd/system文件路径 看到里面大量文件都是以.service结尾的,我们应用服务话也是这样的文件 我们需要新建一个servse文件,使用vim redis.servse

[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/run/redis_6379.pid
ExecStart=/usr/local/redis-5.0.14/src/redis-server /usr/local/redis-5.0.14/redis.conf
ExecStop=/bin/kill -s QUIT $MAINPID
 
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

然后:wq保存并退出 对所有service 进行重载,执行命令systemctl daemon-reload 在此之前需要杀掉启动的redis进程 然后输入命令启动systemctl start redis

CSDN

应用服务化简介

为什么需要应用服务化?

以为redis为例,阐述如下内容:

痛点一: 在Linux系统中安装redis后,启动redis、关闭redis、重启redis,都需要去redis的源代码目录,手动去调用文件:挺麻烦的!!!

痛点二: 而且,安装了redis后,我们可以通过在redis安装文件目录中,手动执行【./src/redis-server redis.conf】,去加载redis.conf,启动redis;但是,当我们关闭Linux系统或者重启Linux系统时候,redis都是自动被关闭了的;然后,如果我们还想启动redis,任然需要手动执行【./src/redis-server redis.conf】;手动启动redis,这么做当然是可以的,但是在实际中,一家公司的服务器有很多台,如果每台服务器重启后都要手动去启动redis,这个工作量太大。为此,就可以将redis进行服务化,这样以后redis就会随着系统的启动而自动启动,就不需要我们手动去启动redis了。

说白了有两个重要的痛点:(1)redis需要手动的去redis源代码目录,进行各种管理;(2)redis无法跟随Linux系统启动而自启动;

而,把redis设置成系统服务,就可以解决这个两个痛点。


应用服务化简介

(1) 应用服务化在Windows中也存在;

(2) 应用服务化的好处:通过简单的命令,就可以列出目前系统中正在运行那些服务,以及这些服务的工作状态如何,也可以通过服务管理命令对这些服务进行管理;

(3) 应用服务化的核心命令:systemctl(System Control:系统控制);

● 在把一个应用设置成应用服务化的过程 中 ,需要大量的调用systemctl命令;

● 在把一个应用设置成应用服务化的过程 后 ,也可通过调用systemctl命令,来管理这个应用;

(4) 【把一个应用程序以为服务的方式在后台运行】,也可以称作【把这个应用配置成系统服务】;


应用服务化的核心命令:【systemctl】及其子指令

【systemctl及其子指令】 要明确两点:

● 【在将一个应用设置成系统服务】的过程中,需要使用【systemctl及其子指令】;

● 【已经把一个应用设置成了系统服务后】,依旧可以使用【systemctl及其子指令】来管理这个应用;

systemctl是一个核心的命令,其涉及到了很多子指令:这些是在日常开发中,所使用到的systemctl的常用命指令;这些指令都是针对服务的;

案例:CentOS中将redis配置成系统服务

该案例以【redis的服务化设置】为例;

1.第一步:手动启动redis,并确定redis.pid文件的存在 启动redis后,确认redis是否有pid文件: 主要目的是:获取redis的pid文件的全路径

然后,这儿可以顺便看下pid文件的内容:

说明:

(1)redis的pid文件【redis_6379.pid】,是一个标识,保存的是当前进程的编号;如果,我们在redis服务化以后,在redis进行重启或者是关闭的时候,需要从redis的pid文件【redis_6379.pid】中读取进程编号,对其进行kill杀进程的操作;

(2) 在确认了redis的pid文件【redis_6379.pid】的文件名和路径后,就可以进行后续的动作了;

(3) 在配置redis为系统服务的过程中,是否需要在redis已经被手动启动的情况下设置,尚不明确;反正,自己在设置的时候,是在redis被手动启动的情况下设置的,然后也设置OK了;(这一点,待确认吧)。。即经过实测,有一点是明确的,redis没有启动的时候,在run目录下,是没有redis_6379.pid文件;


2.第二步:在【/usr/lib/systemd/system】目录下,创建并编写redis的服务描述文件:redis.service切换到system目录:

cd /usr/lib/systemd/system

查看system目录下的内容;可以看到该目录下的很多文件都是.service文件,这些是服务描述文件;

在system目录下,创建redis.service

这儿是通过vim命令直接创建的;

vim redis.service

如果想将redis进行服务化,需要在system目录中,创建一个redis的.service文件,这个.service文件的文件名就是服务名;

在redis.service中编写如下内容:

[Unit]
Description=Redis
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
#Type=forking
PIDFile=/run/redis_6379.pid
ExecStart=/usr/local/redis-5.0.14/src/redis-server
/usr/local/redis-5.0.14/redis.conf
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

说明:

(1)第一个配置项[Unit]

●【Description=Redis】:这是个描述信息,来说明当前的服务是做什么的;这一项,纯粹是给读者看的;

●【After=syslog.target network.target remote-fs.target nss- lookup.target】:After是“什么什么之后的意思”,后面跟了很多系统服务;这儿的意思是,要在【syslog.target network.target remote-fs.target nss-lookup.target】这些服务启动后,才允许启动redis服务;这些服务,暂时不需要过度了解;以后,在设置其他应用程序的时候,这儿固定这样能写就行;

(2)第二个配置项【Service】

●【Type=forking】:描述服务的类型;forking代表后台运行;( PS:这儿注释掉了,因为,我们不要在redis的服务文件中,将redis设置为默认后台运行;而是后面将redis设置为系统服务后,可以通过systemctl命令,可以随时任性的设置redis是否是后台运行

●【PIDFile=/run/redis_6379.pid】:这一项指向的,就是描述redis程序进程编号的pid文件;

●【ExecStart=/usr/local/redis-5.0.14/src/redis-server/usr/local/redis-5.0.14/redis.conf】:这一项,表示服务启动时使用什么命令。这儿需要书写应用程序的完整路径;

●【ExecStop=/bin/kill -s QUIT 变量,其具体值来自于redis的pid文件【redis_6379.pid】中的那个进程编号;即,在实际运行时,其会把【PIDFile=/run/redis_6379.pid】中的值代入到【$MAINPID】上;【-s QUIT】表示按照正常的流程,通知指定的进程去关闭应用,以前接触过【kill -9】;-9是比较粗暴的做法,是强制的删除进程,就行是直接拔电源一样;-s是通知进程按照正常的流程进行退出;在服务关闭时,建议使用-s,但是如果入到僵尸进程或者无法正常退出的进程,就需要使用-9了;

●【PrivateTmp=true】:代表为每一个服务设置私有的Tmp临时文件目录;

(3)第三个配置项【Install】:安装的配置项

●【WantedBy=multi-user.target】:将当前redis服务,分配到multi-user.target这个服务组上;multi-user.target是系统默认的服务组,系统为这个服务组分配了一个权限,允许multi-user.target服务组中所有的服务可以随系统启动而自动启动;即,只要把一个服务分配到multi-user.target这个服务组中,那么这个服务就可以随系统启动而自动启动了;

编写好了之后,Esc退出编辑模式,然后:wq保存并退出:然后,在system目录中,就有了redis.service这个redis的服务描述文件了;


3.第三步:重载【/usr/lib/systemd/system】目录下的.service,让【redis服务描述文件】生效使用【systemctl daemon-reload】命令,重载所有Service;

systemctl daemon-reload


至此,redis的服务化,就算是设置好了;然后,我们就可以使用服务化的systemctl及其子命令,来对redis这个应用进行各种操作了。 然后,我们就不用去redis的源代码目录,去操作redis了;也就是,经过上面的设置后,我们可以借由systemctl这个系统命令,从系统层面上对redis进行统一管理了。


进行接下来的操作前,需要把原先手动开启的redis给关掉(Ctrl+C);


应用服务演示一:systemctl start redis:启动redis服务

systemctl start redis


应用服务演示二:systemctl status redis:查看启动后的redis状态

systemctl status redis


应用服务演示三:systemctl stop redis:关闭redis服务

systemctl stop redis


应用服务演示四:systemctl restart redis:重启redis服务


应用服务演示五:systemctl enable redis:设置redis开机自启

systemctl enable redis

可以看到,在【multi-user.target】分组下增加了redis.service,然后其指向了我们编写的那个resis.service配置文件;我们将这个称为“软关联”,软关联类似于Windows中的快捷方式,即 【multi-user.target分组下的redis.service】就像是一个快捷方式,具体执行的时候,还是需要去/usr/lib/systemed/system目录下去加载redis.service;


应用服务演示六:systemctl is-enabled redis:查看redis,是否已经设置为了自启动

systemctl is-enabled redis


验证【自启动】:设置为redis自启动后,可以shutdown -r now重启系统,验证一下


应用服务演示七:systemctl disable redis:设置redis开机不自启

systemctl disable redis

然后,设置redis开机不自启后,通过【systemctl is-enables redis】命令,可以看到redis已经disabled了。


验证【不自启动】:设置为redis不自启动后,可以shutdown -r now重启系统,验证一下


应用服务演示八:systemctl list-unit-files:查看当前系统中,所有的服务的当前状态

systemctl list-unit-files

自然可以使用通道技术,筛选出目前自启动的服务:

systemctl list-unit-files | grep enabled


如Tomcat,redis,MySQL这种重要的中间件,就可以把其设置为系统服务,这样以后就可以借由systemctl及其子命令,对其进行统一管理,然后也可以设置其为自启动;

Linux用户与用户组管理

用户

◆Linux是多用户多任务系统,包含两个概念:用户与用户组 ◆用户与账户是同一概念,用于登录系统与区分资源权限 ◆用户让系统变的更安全,同时也保护了用户的个人数字资产

(1) 任何想登录Linux系统的人,都必须给他一个用户(或称账户),然后这个人使用这个用户去登录Linux系统;

(2) 不同的用户,可以设置不同的权限;某用户创建的东西,可以设置哪些人可以读写,哪些人不能读写;

用户组

◆用户组就是将用户分组,隶属用户自动拥有组权限 ◆一个用户可隶属于多个组,用户可任意切换当前组 ◆用户组的出现让用户权限管理变更轻松

按照用户在现实中的某种特性,对这些用户进行分组,就称作用户组;比如,在实际公司中,有研发组、测试组、运维组,不同的组有不同的权限;

(1) 组权限:用户组能够访问的文件和目录的权限;

(2) 一个用户可以隶属于多个组,但是在系统访问的时候,同一时间只能有一个组为当前组;

(3)确实,管理员不用给一个新的用户手动去设置各种权限,只要根据该用户的职责将其分配到对应的用户组中就可以了;这种方式,也方便管理用户权限,尤其是在人比较多的公司中,优点更加明显;

用户与用户组常用命令

(1) usermod:将用户原有分配的用户组先删除,再进行重新分配;

(2) chown:就是变更对应文件或目录的所有权;

案例

案例介绍:假设当前是一个下项目组,主要包含开发组、测试组这两组人员;这两组人员所能访问的文件是不一样的,研发人员可以访问源代码和开发手册,测试人员主要是在服务器上创建对应的测试用例文档;这两组人彼此所创建的文件,应该隔离开,不能出现互相修改和访问的情况;所以,下面的案例就是分别创建研发用户、测试用户;研发组,测试组,并给用户分配组;

声明,设置用户和用户组的操作都是在root管理员账户下操作的;

使用 【useradd命令】,创建三个账户; 比如,公司中有两个开发(developer),一个测试(tester);登录root管理员账户,

使用 【passwd命令】给用户设置密码;

d2和t1账户设置密码,同理;

利用 【groupadd命令】,创建新的用户组;

创建了developer开发组,testor测试组;

使用 【usermod命令】给用户分配组;

把d1和d2账户分配到developer研发组;t1账户分配到testor测试组;

登录d1,d2,t1三个账户;

然后,粘贴三份:为登录d1,d2,t1三个账户做准备;

然后,再在粘贴的副本中,去修改用户名和密码:

然后,就愉快的以d1账户的身份登录了:

d2账户和t1账户同理:

使用 【groups命令】查看,当前用户隶属于哪个组;

主机名:附加说明:

Linux文件权限设置

一:文件或目录的【权限】、【属主拥有者】、【所关联的用户组】简介

权限代码介绍:

(1) d:directory;r:read;w:write;x:execute;

(2) 第一组权限(红色部分,1-4位):【“创建这个文件或目录”的属主】,对于这个文件或目录有什么权限;

(3) 第二组权限(棕色部分,5-7位):与【“创建这个文件或目录”的属主】位于相同用户组下的其他用户,对于这个文件或目录有什么权限;

(4) 第三组权限(蓝色部分,8-10位):剩余的其他用户,对于这个文件或目录有什么权限;

(5) 如果在对应位置上,有对应的字母,就表示有对应的权限;如果是-就表示,没有对应权限;

drwxr-xr-x.  2 root root   6 7月  10 04:01 dev-document
 123456789A

上面的意思是:d表示这个一个目录,root用户对dev-document目录拥有读、写、执行权限;(对于目录来说,读就是查看目录的文件列表;写就是修改这个目录的名称;执行就是进入这个目录 );root同用户组的其他用户对dev-document目录拥有读、执行权限;剩余的其他用户对dev-document目录拥有读、执行权限;

(6) 第二行的数字,是对应权限的权重;(本篇博客的后面,会介绍这部分的用处)


二:用户与用户组常用命令

(1) usermod:将用户原有分配的用户组先删除,再进行重新分配;

(2) chown:就是变更对应文件或目录的所有权;

在 【Linux进阶三:Linux用户与用户组管理;】已经演示了【useradd】,【passwd】,【usermod】,【groupadd】,【groups】命令;本篇博客演示剩余的【chown】,【chmod】,【newgrp】命令;


三:案例

使用 【chown命令】更改目录或文件的属主和用户组;

因为,dev-document目录是root用户创建的,又因为dev-document目录是隶属于研发部的,自然dev-document目录管理权要由【root超级管理员】移交给【研发组(也就是developer用户组)的负责人员】(这儿假设d1用户,是developer研发组的负责人);

使用 【chmod命令】更改目录或文件的权限;

可以发现,dev-document目录原先的访问权限是【drwxr-xr-x】,即developer用户组以外的用户也可以访问并执行dev-document目录,这不是我们想要的样子。我们希望,developer用户组以外的其他用户,不能够访问dev-document目录;所以,使用【chmod命令】修改一下dev-document目录的权限;

修改dev-document目录权限以后,可以发现,不属于developer用户组的t1用户,是无法访问dev-document目录的;


说明

(1)上面案例中的750解释:看图好吧,很容易理解的;

(2)chmod命令常见的权限设置值:


又比如,研发团队的负责人d1,准备创建一个文件,公司的所有研发人员(也就是,所有developer用户组中的用户啦)都可以对其进行维护;

在这个code.md文档中,随便写点东西;

(上面例子也可以发现,某个用户创建的文件,其他用户对这个文件的默认权限是只读;)

为了,实现我们的目的:【公司的所有研发人员(也就是,所有developer用户组中的用户啦)都可以对其进行维护】,需要修改这个文件的权限;

然后,此时同属developer用户组的d2用户,就可以读写code.md文件了;

**使用 【newgrp命令】**切换用户当前用户组;

………………………………

首先, 使用【usermod命令】重新给d1用户分配用户组:为了能够演示,切换用户的当前用户组,先给d1用户重新分配用户组:

说明:

(1)上面的G是大写的G哦;大写的G就是一次性的给某个用户,赋予多个用户组;

(2)即使,d1用户已经属于developer用户组了,这儿还是需要写上developer;因为,usermod命令在执行的时候,其会删除d1用户之前的用户组,然后再重新添加;

(3)然后,就可以通过【groups d1】查看d1用户的所有用户组了;即,此时d1用户,同时存在于developer和testor两个用户组;

但是,我们给d1分配了新的用户组,如果想让其生效,需要关掉d1用户的连接,重新连接:


然后, 就可以使用【newgrp命令】切换d1用户的当前用户组了;

如果,d1想要访问testor用户组中下的资源,需要使用【newgrp命令】,将d1用户的当前组切换到testor用户组上:

sudo获取超级管理员权限

一:sudo命令介绍

(1) sudo是一个命令,(已经被授权的)普通用户,可以通过sudo命令去执行那些【“只有超级管理员root账户才能够执行”的命令】

●对于Linux系统,最高级用户root管理员账户,全局只有一个,root用户主要用于管理系统中的用户,用户组等系统中最关键的对象;root用户是全局唯一的,所以root用户的持有者(系统管理员)要无时无刻的对系统进行有效管理;

●但是,可以假设,比如root账户的持有者A(系统管理员),因故要有几天不能工作,此时由另一个同事B暂代“系统管理员的任务”,A总不能把root用户的密码告诉B吧(这涉及到个人隐私);

●此时,比较不错的做法是,A(通过root用户)创建一个新的用户,并为这个新用户进行超级管理员的授权,然后把这个新用户交给B;然后,B在这个新用户中,就可以使用sudo命令,来执行“只有超级管理员才能够执行的命令了”;

(2) 一个普通用户,只有被超级管理员root用户授权后,才能够使用sudo命令;

(PS:演示sudo ls时,也是如此;)

(3) visudo:(vi是只文本编辑器,sudo是sudo命令本身):超级管理root用户使用【visudo】来给某个普通用户授权;


二:案例

1.root管理员账户,使用【visudo】给某个普通用户d1授权

输入快捷命令【100gg】(其实就是vim文本编辑器,在普通模式下的一个快捷命令啦):快速定位到100行;

我们需要在100行的地方,编辑一些配置内容:(因为,visudo是通过vim编辑器打开的这个文件)按i进入(vim)的编辑模式,

当写完后,【Esc】切回到普通模式,然后【:wq】保存并退出vim;

然后,使用【visudo -c】:-c的意思是对【sudoers这个授权文件】的检查,因为这个文件太重要了,这个文件一旦出问题,就可能造成系统无法启动,或者无法远程连接的情况;所以,每次编辑完后,一定要调用【visudo -c】对这个文件进行格式检查;

此时,d1用户可以通过sudo命令去执行那些【“只有超级管理员root账户才能够执行”的命令】


2.被授权的d1用户,使用sudo命令

【useradd命令,是只有root管理员账户才能够调用的】:

(然后,可以发现,第二次使用sudo命令的时候,这儿就没再让输入密码了)


注:一个无伤大雅,但目前存在迷惑的点:sudo + 【普通用户就能执行的命令】


3.root管理员账户,使用【visudo】给某个普通用户d1授权后,同时让d1在使用sudo的时候,无需输入d1的密码

如何让d1用户,每次使用sudo的时候,不用输入d1的密码嘞?

当写完后,【Esc】切回到普通模式,然后【:wq】保存并退出vim;

验证,关闭d1连接,重新连接;


在实际中,建议少用sudo命令!

FireWall防火墙设置实战

一:防火墙简介

(1) 职能一:主动防御来自于外部网络的攻击;职能二:对内,服务器内部的网络资源对外暴露时,加以控制;

(2) ● CentOS6基于iptables(ip表):在七层协议中的网络层进行控制;

●CentOS7基于firewall:在七层协议中的应用层,即应用层防火墙;(应用层防火墙,可以更加细粒度的对防火墙进行设置,同时也可以对应用程序进行有效的控制)

(3) 【firewall-cmd命令】是CentOS中防火墙设置的核心命令;


二:案例演示:(以【对外开放Tomcat的端口】为例)

准备工作:在CentOS 7中安装Tomcat

(1)首先,获取Tomcat的源代码

(2)在CentOS7中,以【编译方式】安装Tomcat、启动Tomcat;

(【编译方式】安装软件,可以参考Linux入门十一:CentOS软件方式之:【编译方式】安装和卸载程序;(以安装Redis为例演示)

startup.sh是Tomcat在Linux中的启动脚本程序,这个脚本称之为shell(下篇博客会介绍shell);

(3)Tomcat启动成功后,如何访问?(会看到:Linux本机访问没问题,远程访问不行;(因为Linux没开放Tomcat的端口))

在Linux本机访问,没问题,但是如果远程访问呐?

之所以不能访问,是因为CentOS是有防火墙的;默认情况下,CentOS虚拟机并不对外开放8080端口,即【从远程,向虚拟机发送的所有8080端口的请求,都会被CentOS的防火墙挡住】;为解决这个问题,只需要设置防火墙放行8080端口就可以了;


CentOS 7 通过【firewall-cmd防火墙命令】设置端口开发

说明:【firewall-cmd命令】是防火墙的核心命令,通过这个命令可以对防火墙进行各种操作;

(1)设置单个端口的开放和关闭

【firewall-cmd —state】:查看防火墙是否已经开启:

【firewall-cmd —list-ports】:查看当前防火墙放行了哪些端口:

【firewall-cmd —zone=public —permanent —add-port=8080/tcp】:放行8080端口

【firewall-cmd —reload】:重载防火墙规则,使更改生效 ;

【firewall-cmd —zone=public —permanent —remove-port=8080/tcp】:不开放8080端口了,如何移除?

(2)设置一个端口范围的开放和关闭

【firewall-cmd —zone=public —permanent —add-port=8000-9000/tcp】:放行一个区域的端口:比如放行8000-9000的端口:

【firewall-cmd —zone=public —permanent —remove-port=8000-9000/tcp】:关闭一个区域的端口:


CentOS中部署的网络应用程序,比如Tomcat、redis、MySQL等,这些都是基于网络进行通信的,我们除了把这些软件安装好了以外,还需要在防火墙中放行对应的端口;

Bash Shell入门

说明:shell到底是啥? (本部分参考自:【C语言中文网】中的【Shell是什么?1分钟理解Shell的概念!】)

● Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质;

● 简而言之,用户通过shell,可以在系统上完成一些操作;(而不用像在Windows上那些,各种使用鼠标键盘去操作);

一:shell简介

1.shell引入

(1) 【自己编写的一些脚本文件】经过【shell解释器这个程序】的解释,可以实现一些对系统的操作;

比如Windows中的bat:

写了一个测试用的search.bat:

这个search.bat脚本可以被Windows执行;双击这个文件就可以在Windows中执行了:

至于,search.bat中的代码,是由Windows中的解释程序去解析执行的;

对于Linux也是同理,Linux提供了(由C语言编写的)shell这个解释器,可以执行Linux中的脚本;让用户可以通过代码的方式,来批量的完成一些复杂的操作;

(2) 在Linux中,脚本一般是shell脚本,脚本文件一般是.sh文件;

(3) 在Linux中,解释执行【.sh脚本】的解释器有很多种;

2.Linux中解释器分类

(1) 【Bourne Shell】:发布时间比较长了,有些特性相对落后,已经很少用了;

(2) 【Bourne Again Shell】:即通常说的bash;bash是目前大多数Linux发行版所提供的默认的【shell脚本文件的解释器】;

【Bourne Again Shell】可以看成是【Bourne Shell】的升级版,其提供了很多额外的功能(比如自动补全,以及更加丰富的解释器特性)

(3) 【C Shell】、【K Shell】、【Shell for Root】都不太常用;

(4) 不同的shell解释器,都有自己独立的特性和相关的语法;即,比如针对【Bourne Again Shell】开发的shell脚本文件,使用【C Shell】可能会无法执行,因为不同的解释器的部分命令或语法是不同的;

(5) 在大多数情况下,使用【Bourne Again Shell】作为shell脚本的解释器;这也是CentOS默认的shell解释器;


二: 案例:以编写一个【下载、解压、启动Tomcat】的脚本为例

(1)首先,先清理掉/usr/local目录下的Tomcat文件,防止干扰

(2)然后,创建脚本文件

(3)按【i】进入编辑模式,编写如下内容:

说明:

(1)【echo命令】:在运行过程中,屏幕上显示其后面的文字;

(2)【wget命令】:从指定的网址下载对应的文件到当前目录;

(3)在解压Tomcat压缩包的时候,使用的是【zxf】而不是【zxvf】,没有使用v的目的是,这儿我们就不显示解压的过程了;

(4)解压后,进入到Tomcat的bin目录,执行startup.sh就行了;

(4)脚本写好后,按【Esc】退出编辑模式,然后:wq退出;

(5)那么这个脚本写好了,如何调用?