zoukankan      html  css  js  c++  java
  • Linux笔记02—Linux进阶应用

    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应用服务器和数据库服务器之间的通讯。

  • 相关阅读:
    友元函数
    异常处理
    RTTI
    接口类
    纯虚函数和抽象类
    虚函数与虚析构函数原理
    查看表空间使用率及shrink 表空间
    RAC fail over 测试
    js判断数组中是不是有某个元素
    layui 表格图片放大
  • 原文地址:https://www.cnblogs.com/superjishere/p/13782237.html
Copyright © 2011-2022 走看看