Linux系统管理命令
使用ifconfig查看网卡ip
netstat查看网络端口号
网络协议 接收队列数量 发送队列数量 本地地址 远程地址 网络连接的状态 创建了网络连接的应用的进程编号(唯一标识)/名字
发送队列数量长时间不为0,可能是数据处理不过来网络阻塞了。
netstat -tulpn (推荐)
netstat -ano
netstat常用选项:
查看进程&杀掉进程
图中又使用到了|通道,grep 是通过正则表达式对结果进行筛选
5412那一列是pid进程编号 vim test.txt那一列显示启动时使用的命令是什么
有些应用不需要进行网络通信,这时用netstat就无法查到它的pid,要用ps -ef
ps -ef 查看当前系统进程有哪些
kill -9 PID 在内存中将对应pid的进程删除(尽量使用应用程序特有的关闭方式来关闭程序,强制kill可能造成数据丢失等情况)
应用服务化
应用服务化是指让应用程序以服务方式在系统后台运行;
Linux系统对服务化应用进行统一管理;
服务管理命令:
systemctl
systemctl常用指令
例子:将redis服务化,让redis随系统启动
1)查看redis的pid文件名及目录
里面存放的是redis当前进程的pid,将redis服务化后,要对redis进行开启和关闭时要从这个文件中读取进程编号,再通过kill杀掉redis进程。
2)进入 /usr/lib/systemd/system 目录
里面有许多.service结尾的文件,是服务描述文件,要将redis服务化,也要在这个目录中创建一个redis的服务描述文件,文件名就是默认的服务名。
vim打开并编辑redis.service,要注意大小写。
[Unit]
description:描述这个服务是干嘛的
After:在服务启动时,先启动其后的服务,再启动redis服务。大多数情况下都是图中那些
[Service]用于服务描述
Type: 服务运行的类型,forking表示后台运行
PIDFile=pid文件 指向上面介绍的描述进程号的pid文件
ExecStart=应用服务的完整路径 配置文件 表示服务启动时使用什么命令,服务启动时会调用应用服务启动配置文件
ExecStop=:表示服务关闭时使用什么命令,利用kill命令对指定进程进行关闭。-s QUIT表示按照正常对流程通知进程关闭,推荐。-9表示强制删除进程,无法正常退出再用。
PrivateTmp:为每个服务设置私有的tmp临时文件目录
[Install]安装配置项
WantedBy:将redis服务分配到multi-user.target服务组上,multi-user.target是系统默认的一个服务组,系统为它分配了一个权限,允许当前服务组中所有的服务可以随系统自动启动,只要把服务分配到这个服务组中,这个服务就会被允许随系统自动启动
3)重载redis.service使其生效
还在/usr/lib/systemd/system 目录下执行
systemctl daemon-reload
4)将之前自己启动的redis关闭
5)启动服务
systemctl start redis
如果没有看到报错,表示服务在后台启动成功
6)查看redis服务启动的状态
systemctl status redis
可以看到active(running) ,表示程序是激活的并且正在运行
process后是当前redis进程号
底下是redis启动日志
7)关闭服务
systemctl stop redis
8)重启服务
systemctl restart redis
会先关闭当前redis,再重新启动一个新的redis服务
9)让服务随系统启动
systemctl enable redis
软关联:类似windows中的快捷方式
立即重启:shutdown -r now
这时当前的centos7连接就断开了,我们再手动重新连接上
再查看redis服务状态,发现已经随系统自动启动了
10)让服务不随着系统启动
systemctl disable redis
在multi-usr服务组 redis的软关联(快捷方式)就被删除了,自然redis服务也不会再随着系统启动了。
11)查看当前系统都有那些服务,服务的状态,这些服务都包含了哪些信息?
systemctl list-unit-files
还可以利用通道和gref命令进行筛选
Linux用户与权限
1)用户
Linux是多用户多任务系统,包含两个概念:用户和用户组;
用户与账户是同一概念,用于登录系统与区分资源权限;
用户让系统变得更安全,同时也保护了用户的个人数字资产。
2)用户组
用户组就是将用户分组,隶属用户自动拥有组权限;
一个用户可隶属于多个组,用户可任意切换当前组;
用户组的出现让用户权限管理变的更轻松。
3)用户与用户组常用命令
4)项目内部文件权限管理实践
假如一个项目组有三名员工:两个程序猿+一个测试,分别在研发组和测试组
1⃣️创建3个用户,并设置密码(最好8位以上,包含字母数字)
2⃣️创建两个组,将人员分配到各自组中 -g ⚠️注意是小写
3⃣️创建3个centos副本,分别用三个用户登录
查看用户隶属于哪个组,执行命令:
groups
4⃣️root用户为初始的目录进行创建和授权
假设资源放在共享资源目录 /usr/local/share
创建各组的文件夹
ll可以查看目录的权限
第一个root列表示当前目录是哪个用户创建的(属主,拥有者,用户名) ,第二个root列表示这个目录关联的用户组是哪个
drwxr... 表示权限代码,由10位组成。权限码右边一列的数字表示权限的权重。
文件权限代表码:
红色(1~4位)表示属主的权限
黄色(5~7位)表示与属主相同用户组下的其他用户所拥有的权限
蓝色(8~10位)表示属主所在用户组以外的其他用户拥有的权限
-表示没有对应属性
调整dev-document目录的权限:
chown 用户:组名 目录名字 更改对应文件/目录的属主或用户组
chmod 权限码 目录 改变对应目录/文件的权限
chmod 750 组用户可读写,其他用户不允许访问;7=4+2+1属主有全部权限,5=4+1所在用户组有读和执行权限,0=其他用户没有任何权限
chmod 777 所有用户拥有完整权限;
chmod 700 只有属主拥有完整权限。
设置其他用户不可访问后,其他组将没有权限查看
在目录上的w写权限,表示对目录名称修改的权限
属主d1要创建一个文件,允许研发组所有研发人员可见:
以下是默认产生的权限
第一位是d表示是一个文件夹,-表示是文件
修改权限为770,d2也可以进行该文件的操作,但t2没有权限
给一个用户赋予多个用户组 -G ⚠️注意是大写
但对于d1用户来说,如果要是新的用户组权限对他生效,需要将系统断开重新连接
默认左边第一个是当前用户组
切换到新的用户组:
5)sudo超级管理员命令
sudo可以让普通用户拥有超级管理员的执行权限;
普通用户要进行经过超级管理员授权才能使用;
对某一用户进行sudo授权,授权命令:
visudo 查看授权文件
tips:在普通模式下输入100gg 可以快速定位到100行
进入编辑模式,在root下面一行,增加用户d1 以及相关权限信息
第一个ALL表示允许d1用户从哪个客户端上进行远程连接(可修改为主机名,这样就只有主机名一致的电脑才能远程连接d1做sudo管理员的任务)
第二个ALL表示切换用户的意思,可以切换至其他任意用户来执行某个命令
第三个ALL表示利用sudo可以执行哪些超级管理员的命令
:wq保存并退出
格式检查授权文件:
visudo -c
这时d1就有了sudo权限。
可以测试一下,默认情况下,除了系统管理员root是不能够创建其他用户的
很多拥有sudo权限的用户不希望每次使用sudo命令的时候都重新输入密码,这个可以进行配置:
在root用户上对sudo配置进行修改
执行visudo,定位至100行,在第三个ALL前增加NOPASSWD:
保存并退出
格式检查授权文件:
visudo -c
重新连接d1,直接使用sudo命令,就不用再输入密码了
Centos 7 防火墙firewall
防火墙是借助硬件和软件对内外部网络环境对保护措施;(主动防御外部网络的攻击&将服务器内部的网络资源对外暴露时加以控制)
centos7基于firewall实现应用层防火墙,centos6基于iptables实现网络层防火墙;应用层设置可以更细粒度。
firewall-cmd是firewall的核心命令。
对外开放tomcat
在tomcat的bin目录中有一个核心的启动脚本程序文件:startup.sh
启动tomcat:
判断tomcat是否启动成功:
那么在外部就能访问了呢?
回到虚拟机桌面,点击应用程序,打开浏览器,输入访问地址localhost:8080,可以看到在虚拟机内部本机可以正常访问
在我们自己的电脑桌面,远程访问,就无法访问到
虚拟机ip地址:8080
这就是centos7防火墙设置的,默认不对外开放8080端口,只需要让防火墙放行8080端口即可
firewall-cmd
systemctl start|restart firewalld 启动防火墙
firewall0cmd --state|--reload 查看状态,重载防火墙
firewall-cmd --list-ports 查看防火墙放行的端口有哪些
firewall-cmd --zone=public --permanent --add-port=8080/tcp
zone区域 默认防火墙区域的名字为public
permanent产生永久变更,不加这一项表示临时更改防火墙策略
--add-port 添加端口号
端口号/什么协议下放行
更改好后,要重启防火墙才能生效:
firewall-cmd --reload
此时远程访问就能成功了!
移除掉放行单个端口:
firewall-cmd --zone=public --permanent --remove-port=8080/tcp
别忘了重载firewall:firewall-cmd --reload
放行一个区域(zone)的所有端口:如放行8000~9000的端口
firewall-cmd --zone=public --permanent --add-port=8000-9000/tcp
别忘了重载firewall:firewall-cmd --reload
移除一个区域(zone)的所有端口的放行:如移除8000~9000的端口
firewall-cmd --zone=public --permanent --remove-port=8000-9000/tcp
Bash Shell
什么是Shell
Shell是一个用c语言编写的脚本解释器,是用户通过代码操作Linux的桥梁(类似windows中解释.bat脚本文件的程序);
Shell脚本描述要执行的任务,完成系列复杂操作,文件通常以.sh后缀;
Shell脚本通过Shell解释器执行,按解释器分类分为多种类型。
Linux中Shell分类
Bourne Shell 最早使用的解释器
bash 大多数Linux发行版默认的解释器,是bourne shell的升级版
其他的都用的不太多,他们都有自己独立的特性及相关语法,比如bash开发的脚本放到其他shell中可能就无法执行
目前统一用bash
一键发布Tomcat应用程序
新建一个shell文件
vim deploy_tomcat.sh
编辑脚本:
echo 文本 运行后,屏幕上显示的文字
wget 网址 从指定网址(官网,gz安装包下载,右键复制下载链接)下载文件到当前目录
tar zxf 文件名 解压安装包
firewall-cmd --zone=public --permanent --add-port=8080/tcp 防火墙开放8080端口
firewall-cmd --reload 重载firewall
cd ./apache-tomcat-9.0.34/bin 进入tomcat的bin目录
./startup.sh 启动tomcat
保存脚本:
:wq!
运行shell脚本:
/bin/bash 脚本名字
因为当前系统默认使用bash,可以简化执行代码如下:
./脚本名
提示权限不够?
ll查看发现
新创建的bash文件,属主只拥有读写的权利,没有执行的权利
需要再设置下权限:
chmod 755 文件名
再重新执行脚本即可:
综合训练
Linux部署项目
部署架构
用户通过浏览器访问➡️tomcat web服务器➡️mysql数据服务器
步骤:
需要两台虚拟服务器,分别作为tomcat web服务器和mysql数据服务器
1)mysql数据服务器
软件选择:最小安装
但这种方式安装,很多常用命令都没有,比如ifconfig
系统安装好后,可以通过yum安装这些常用工具
就可以使用ifconfig了
2)同样的方式安装tomcat web服务器
3)在mysql服务器(centos)上安装mysql8
yum上没有mysql相关组件和应用程序,所以从mysql官网获取
官网中提供了各类仓库源,供我们安装最新版本
找到centos7对应的下载版本,点击download
找到nothanks那句话,点击右键,复制链接地址,使用wget命令进行下载
结果wget命令也不存在。。。
先用yum安装wget
重新下载mysql
使用本地的rpm文件进行应用安装
yum localinstall -y 文件名
看到已安装表示mysql8的安装源准备成功
再用yum search就能看到mysql相关组件了
这时再使用yum安装
yum install -y mysql-community-server
但是我们在国内通过国外仓库下载可能速度会很慢,如何进行快速安装呢?
先按ctrl + c 停止安装
切换至刚刚yum下载的缓存路径
所有下载的rpm包都在里面,但由于我们刚刚中断了下载,mysql的安装包是不完整的
我们可以自己找到这些rpm文件,替换进来,这样yum在下载时看到有了就不会重复下载了,会直接进行安装
百度搜索:mysql 下载
找到mysql下载的链接,里面有各平台mysql二进制安装文件的下载路径
此时我们选择红帽企业版及对应版本
下方会出现若干备选项
我们选择最新最完整的版本下载
在nothanks链接右键,下载
我们将这些文件替换到刚刚的缓存目录中即可
先将之前不完整的缓存文件删除,再将这些rpm文件复制进去
疑问:既然能够下载到这些rpm为啥还要在线安装呢?
因为除了这些rpm包以外还有许多依赖需要下载,如果直接使用这些rpm文件或使用localinstall的方式安装,就需要手动找到那些依赖找到并安装,非常大工作量且麻烦,所以目前只能用手动下载rpm 再通过yum在线安装的方式 比较妥
重新执行yum安装:
yum install -y mysql-community-server
这样下载安装就很快了。
看到完毕,表示mysql8已经安装完成了。
启动mysql:
用rpm的方式安装,程序会以服务的形式驻留
可以用systemctl命令启动服务:
systemctl start mysqld
如果没有任何报错,表示服务启动成功,默认3306端口,可以用netstat -tulpn查看是否存在
查看服务状态:
systemctl status mysqld
设置mysql为开机启动:
systemctl enable mysqld
安装好后,还不能使用,还需要默认密码,远程登录,数据库数据表初始化等的配置。
初始化Mysql 8:
mysql安装过程中会自动将密码保存到日志文件中。
默认情况下最小安装版的Linux不会提供vim指令,只有vi指令,我们可以用vi命令查看密码
vi /var/log/mysqld.log
/var/log 这个目录用于保存系统运行过程中的应用程序日志
可以看到mysql为root用户随机生成的一个临时密码,我们直接复制密码,退出vi编辑器
:q
用root用户登录本机mysql
mysql -uroot -p
回车后,粘贴上刚刚的密码(屏幕上不会显示)
再回车,进入了mysql
修改密码:
alter user 'root'@'localhost' identified with mysql_native_password by '新密码'
localhost表示root用户只允许用本机登录
新密码要求必须包含英文,数字,特殊符号,长度大于八位,且不能有连续的常见的字符串
with mysql_native_password 兼容性考虑,mysql8对于密码进行存储时默认采用的是sha256的方式进行加密存储,早期mysql5以前的版本使用的是mysql本地密码表的方式,两者是有区别的,如果客户端使用的是navicat,没有进行及时更新,可能导致新版mysql8不兼容的情况,无法登录;增加这个参数可以让mysql8和navicat更好地兼容。
回车,密码即变更。
现在默认的root用户只能从本机登录,我们刚开始部署数据库时,往往需要远程连接,如何设置root可以在远程访问?
use mysql 切换到mysql数据库
select host,user from user; 查看主机和用户表,host表示当前用于允许在哪些计算机上登录
update user set host='%' where user = 'root'; 将host值改为%,代表任意设备都可以使用root用户来远程连接到mysql服务器。
回车,更改成功!
但如果想让root用户但权限生效还需运行一条指令,让刚刚修改的权限立即生效:
flush privileges;
退出mysql:
exit
放行防火墙3306端口:
firewall-cmd --zone=public --permanent --add-port=3306/tcp
重启防火墙:
firewall-cmd --reload
这样就可以从外部访问mysql服务器了。
使用navicat连接mysql数据库:
创建数据库,导入数据:
在当前连接创建一个新的数据库
在新数据库右键,执行sql文件
选择sql文件,点击开始,即可将数据导入。
4)tomcat web应用服务器部署
进入tomcat服务器。
1⃣️安装jdk
tomcat是依赖java运行的,所以需要在当前系统中安装jdk或jre
可以安装开源的openjdk或标准的sun公司jdk,基本一致
文件名后的.x86_64可以省略
等待下载和安装所有的依赖。
查看java的版本和安装位置
2⃣️安装tomcat
tar zxf apache-tomcat-9.0.34.tar.gz
3⃣️应用程序部署
准备好打包好的程序war包,解压
移动这个解压好的目录到tomcat9的web-apps下
这个应用是要连接到数据库的,之前开发时默认连接的是本地的数据库,需要远程连接mybatis对数据库连接进行配置:
安装vim的公共基础包和增强包:
yum install vim-common
yum install vim-enhanced (vim命令包含在这里)
vim打开配置文件:
/root 进行全文查找
修改连接属性:
配置tomcat运行参数:
两部分:
修改server.xml修改端口号,以及将我们的应用设置为默认的context上下文,映射到上下文路径,指向默认的根路径
/8080 搜索8080
修改配置,改为过端口80对外暴露应用
按键盘pagedown找到文件末尾,在host标签结尾前增加context标签:
启动tomcat:
将防火墙80端口放行,重启防火墙:
此时可以成功访问项目登录页:
如果能登录成功,进入系统,说明底层数据库也连接成功。
风险:任何一个主机都可以通过网络连接我们的数据库,很危险。
解决方式:对指定ip的指定端口进行放行
进入mysql服务器,关闭防火墙对3306端口对放行
更改端口放行规则:
rich-rule规则表达式,图中的意思是图上的ip向本机3306端口发送的数据包给予放行。
此时其他ip已经无法远程连接我们的数据库。
重启tomcat,应用也能正常登录访问,并没有影响web应用服务器和数据库服务器之间的通讯。