1、Linux网络

1.1、网络频繁变动

背景:

  • 如果一台电脑,经常需要更换网段;vmware的网络会随之变化;
  • 一旦变动了,就会导致xshell连接不上?这个应该如何处理?

设置DHCP

  • 网卡文件设置dhcp模式;让vmware自己分配IP;
  • 然后再从IP上面连接
#直接修改配置文件
[root@test31 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
TYPE=Ethernet
BOOTPROTO=dhcp			#把这里从static改为dhcp
NAME=ens33
DEVICE=ens33
ONBOOT=yes
##IPADDR=192.168.75.31		#把静态IP的配置全部注释
##PREFIX=24
##GATEWAY=192.168.75.2
DNS1=8.8.8.8

#然后重新启动网卡;
[root@test31 ~]# systemctl restart network

可以直接使用静态IP

  • 在不同的地方设置一个快照–>这样比较麻烦,但是也可以
  • 快照一:在家里的网段:192.168.0/24的网段
    • 配置一个专属的IP:192.168.0.31
  • 快照二:在公司的万股单:192.168.1/24的网段
    • 配置一个专属的IP:192.168.1.31

可以直接把电脑放着开机

  • 开启向日葵,然后笔记本远程连接过去使用;

2、Docker报错

2.1、Docker报错

模拟环境:

–>首先需要模拟一下报错

  • 虚拟机重新恢复快照,给一个初始的环境
#创建一个docker的陌路
[root@Test1 ~]# mkdir /docker

#然后准备好相关的RPM包
[root@Test1 ~]# cd /docker/
[root@Test1 docker]# ls
containerd.io-1.6.9-3.1.el7.x86_64.rpm  docker-ce-cli-23.0.1-1.el7.x86_64.rpm
docker-ce-23.0.3-1.el7.x86_64.rpm       docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm

#然后直接安装,让其报错显示-->这里就明显会出现报错
[root@Test1 docker]# yum -y localinstall ./*.rpm
............
错误:软件包:1:docker-ce-cli-23.0.1-1.el7.x86_64 (/docker-ce-cli-23.0.1-1.el7.x86_64)
          需要:docker-buildx-plugin
.................

如果Docker离线安装的时候遇到缺包的情况?报错页面如下:

原因分析:

  • 一般都是缺少安装的包导致的
  • 可以通过配置yum源来解决问题–>缺什么就装什么
    • 本地源:rpm 放到iso镜像里面, iso镜像挂载本地磁盘 /mnt
    • 网络源: 阿里云 提供的, 大学, 本地搭建
    • Centos官方源: centos-extra 源
#可以把原来所有的repo的源都移走,
[root@Test1 ~]# mv  /etc/yum.repos.d/* /tmp/

#然后配置docker-ce.repo的源
[root@Test1 ~]# cd /etc/yum.repos.d/
[root@Test1 yum.repos.d]# ls
docker-ce.repo

#然后进入直接修改-->添加一个额外的源
[root@Test1 yum.repos.d]# vim  docker-ce.repo 
	#在最上面添加以下信息
[centos-extras]
name=Centos extras - $basearch
enabled=1
gpgcheck=0
baseurl=http://mirror.centos.org/centos/7/extras/x86_64

#然后回到原来的地方重新安装
[root@Test1 yum.repos.d]# cd /docker/
[root@Test1 docker]# yum -y localinstall ./*.rpm
.....
#最后检测是否成功-->直接查看docker的版本
[root@Test1 docker]# docker -v
Docker version 23.0.3, build 3e7cbfd

3、docker安装Centos7.9

3.1、Centos7.9容器下载

  • 这里题目要求是下载Centos7.9版本的Linux
  • centos:centos7.9.2009–>前面代表名字,后面代表版本;
#先启动docker
[root@Test1 docker]# systemctl start docker

#可以尝试查询一下有多少
[root@Test1 docker]# docker search centos
..

#然后尝试下载镜像
[root@Test1 docker]# docker pull centos:centos7.9.2009
........

#校验是否成功-->可以使用echo $?-->如果是0代表成功-->非0代表失败
0

#然后查看镜像
[root@Test1 docker]# docker images
REPOSITORY   TAG              IMAGE ID       CREATED         SIZE
centos       centos7.9.2009   eeb6ee3f44bd   19 months ago   204MB

到这里,代表已经下载容器镜像成功了

3.2、启动Centos

镜像准备好了,就可以直接启动;

  • 首先需要获取root的权限
  • run:代表运行
    • -i 以交互模式运行容器;
    • -t 为容器重新分配一个伪输入终端;
    • -d:创建一个后台运行容器
    • –name 为容器指定一个名称
    • –privileged=true:
    • -p:指定端口映射关系;5000是属主机的端口;22是容器的端口
    • –privileged=:表示启动的容器
      • true:代表拥有真正的root权限
      • flase:代表容器外部仅仅是普通用户
    • 最后的代表:/usr/sbin/init
      • 启动容器之后可以使用systemctl方法
#直接输入-->这里服务器会重新启动
[root@Test1 docker]# docker run -itd --name=centos --privileged=true -p 5000:22 centos:centos7.9.2009 /usr/sbin/init
fa07ac89938c8d52b4aba8ae296107c6563dc8eba9f69998663ef5ee3fcbe243

#查看是否启动成功
[root@Test1 docker]# docker ps 
CONTAINER ID   IMAGE                   COMMAND            CREATED         STATUS         PORTS                                   NAMES
fa07ac89938c   centos:centos7.9.2009   "/usr/sbin/init"   7 minutes ago   Up 7 minutes   0.0.0.0:5000->22/tcp, :::5000->22/tcp   centos

#这里可以尝试登陆进入
[root@Test1 docker]# docker exec -it centos /bin/bash
[root@fa07ac89938c /]# 

4、Docker远程连接SSH

4.1、容器安装依赖包

  • 宿主机:yum源必须可用;–>能够访问外网
  • 安装基础的包
#首先需要进入容器
[root@Test1 docker]# docker exec -it centos /bin/bash
	#然后再安装
[root@fa07ac89938c /]# yum install -y openssh-server vim lrzsz wget gcc-c++ pcre pcre-devel zlib zlib-devel ruby openssl openssl-devel patch bash-completion zlib.i686 libstdc++.i686 lsof unzip zip

–>后续我们需要直接使用sshd服务

  • 关联的包是:openssh-server
  • 上面已经安装好了;
#确认一下是否安装好了openssh-server-->看到有对应的包出现了就代表成功;
[root@fa07ac89938c /]# rpm -qa | grep openssh*
openssh-7.4p1-22.el7_9.x86_64
openssl-devel-1.0.2k-26.el7_9.x86_64
openssh-server-7.4p1-22.el7_9.x86_64
openssl-libs-1.0.2k-26.el7_9.x86_64
openssl-1.0.2k-26.el7_9.x86_64

#如果没有的话直接再次安装
[root@fa07ac89938c /]# yum -y install openssh*

4.2、远程连接容器

上述已经完成安装好openssh-server的包了

–>这里可以预先查看一下容器的ip

  • 查看ip需要用到ifconfig命令
    • 这里就需要查找一下ifconfig来自哪个包
#查找一下ifconfig来自哪个软件包
[root@fa07ac89938c /]# yum search ifconfig
.........#看到这个类似于包的玩意就是这个玩意
net-tools.x86_64 : Basic networking tools

#然后直接安装即可-->前提下你的yum源完成没有问题的前提下
[root@fa07ac89938c /]# yum -y install net-tools

#查看ip
[root@fa07ac89938c /]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 47345  bytes 146457268 (139.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 40022  bytes 2192326 (2.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
.........

到这里为止–>可以启动sshd服务了

  • 这里又会遇到一个问题,容器没有systemctl管理
    • 因此需要安装一下initscripts的包
  • 要完成远程连接–>就要开启sshd服务
    • 开启sshd服务
  • 注意:这里有两个ip
    • 一个宿主机ip:192.168.75.31
    • 一个是容器的ip: 172.17.0.2
  • 我们启动容器的时候,有个-p参数用于映射的,因此连接容器的时候是不能使用22端口
    • 而我们也没有办法直接连接172的网段,因此需要我们直接连接宿主机ip
#查看一下是否有安装好sshd服务-->这里什么信息都没有代表没有启动
[root@fa07ac89938c /]# netstat -antlup | grep sshd

#先安装一下initscripts
[root@fa07ac89938c /]# yum -y install initscripts
Loaded plugins: fastestmirror, ovl
.....
#安装好了直接启动
[root@fa07ac89938c /]# service  sshd start
Starting sshd (via systemctl):                             [  OK  ]

#最后查看端口;
[root@fa07ac89938c /]# netstat -antlup | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      437/sshd  
.........

–>sshd服务都已经 启动起来了

  • 给root设置一个密码
#查看当前用户是谁
[root@fa07ac89938c /]# whoami
root

#给自己一个密码
[root@fa07ac89938c /]# echo 1| passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.

最后–>完成远程登录

  • xshell–>新建–>输入ip:端口
    • 注意:ip:是宿主机ip192.168.75.31
    • 端口是:5000

配置如下图

如果看到登录界面代表配置完成

4.3、xshell7下载

  • xshell是运维人员经常用到的一款远程连接软件
  • 官网:https://www.xshell.com/zh/xshell/

点击下载–>找到免费授权页面–>点击进去注册–>然后下载即可;

5、基础命令讲解

5.1、history命令

作用:查看历史命令

语法:history+选项

选项:

  • -c:删除所有条目从而清空历史列表。
  • -d:从指定位置删除历史列表。
  • -a:把历史命令追加到配置文件当中
  • -n:从历史文件中读取所有未被读取的行
  • -r:读取历史文件并将内容追加到历史列表中
#查看一下历史命令
[root@Test1 docker]# history 

#查看最后十个命令
[root@Test1 docker]# history  10
  131  docker pull centos:centos7.9.2009
......

#把历史命令写入配置文件
[root@Test1 docker]# 

#删除某个命令
[root@Test1 docker]# history  -d 139

隐藏输入的历史命令

  • 如果用户输入了类似于密码的命令行
    • mysql -uroot -p123123
    • 这种输入就会被记录到历史命令当中,
    • 相当危险
  • 如何不记录历史命令?
    • 设置:set +o history
      • o:是英文字母的o,不是数字0
    • 取消:set -o history
  • 这个方法是当前shell使用,如果切换了会失效
#清楚一下历史命令
[root@Test1 docker]# history -c
[root@Test1 docker]# 

#隐藏历史命令
[root@Test1 docker]# set +o history

# 然后输入命令之后也不会被记录进去
[root@Test1 docker]# cd /usr/local/
[root@Test1 local]# pwd
/usr/local
[root@Test1 local]# history 
    1  set +o history

有时候,运维工作有个审计需要统计

  • 统计历史命令的数量–》$HISTSIZE
  • 设置历史命令的条数;
#查看历史命令的存放数量
[root@Test1 local]# echo $HISTSIZE
1000

#设置历史命令保存的数量
[root@Test1 local]# export HISTSIZE=10
[root@Test1 local]# echo $HISTSIZE
10

5.2、历史命令的调用

快捷键:

  • ctrl+r:调出查询的历史明林
    • 直接输入可以直接调用名–>确认
    • 左右键可以选择
  • !+数字:调用编号为多少多少的命令
    • 都是从历史命令里边的标号
  • !+字符串:调用以什么字符串开头的命令
    • 调用最近的,

5.3、date命令

作用:用于查看时间、或者是修改时间

语法:date+选项

选项:

  • -d:可以增加多少时间
  • -s:可以修改时间

常用的描述:

  • %F:;以年月日的格式显示
  • %Y:显示年份
  • %m:显示月份
  • %d:显示日期
#修改时间
[root@Test1 local]# date -s "2023-01-01"
2023年 01月 01日 星期日 00:00:00 CST
[root@Test1 local]# date
2023年 01月 01日 星期日 00:00:01 CST

#日期之上多加一个月
[root@Test1 local]# date -d '3months'
2023年 04月 01日 星期六 00:00:47 CST

#显示时间
[root@Test1 local]# date +%F
2023-01-01

#显示时间的另外一个方式
[root@Test1 local]# date "+%Y-%m-%d %H:%M:%S"
2023-01-01 00:02:39

5.4、man命令

作用:查看命令用法

man帮助说明:

  • 1:用户
  • 2:内核系统调用
  • 3:库函数
  • 4:特殊文件和设备
  • 5:文件格式和规范
  • 6:游戏
  • 7:规范和标准其他页面
  • 8:系统管理命令
  • 9:API

操作手册:

  • page up 上
  • /spring
  • home 返回首页
  • end 翻到最后
  • q 退出帮
#查阅命令手册
[root@Test1 local]# man cd

5.5、help命令

作用:查看命令帮助

语法:help+命令

#查看命令帮助
[root@Test1 local]# help cd

#或者--help
[root@Test1 local]# cat --help

5.6、百度帮助

百度:www.baidu.com

  • 搜索框输入自己想要知道的东西
  • docker安装 site:csdn.net—>这里可以指定那个网站给出的内容;
    • 十分方便
  • 如果不想看到有广告;还可以直接减去广告
  • 百度搜索框输入
    • docker安装 site:csdn.net -广告

6、shell脚本

6.1、题目要求:

shell脚本判断命令花费的时间

  1. 计算命令执行的之前距离1970的秒数(时间戳)
  2. 执行命令
  3. 计算执行完成之后的时间戳
  4. 两个时间戳做减法

所有的shell自动化上都是以手工能够实现为基础的;

6.2、shell脚本

编写脚本的方式:穷举法

  • 首先模仿–>多模仿
  • 然后一点一点修改,慢慢修正

命令行操作

#date命令-->计算时间戳
[root@Test1 ~]# date +%s
1672504908

#执行一个命令
[root@Test1 ~]# ping -c2 -w2 www.baidu.com
PING www.a.shifen.com (14.119.104.254) 56(84) b

#在执行一个操作
[root@Test1 ~]# date +%s
1672504984

#两个时间戳相减就是命令执行的时间

脚本如下:

[root@Test1 ~]# vim aa.sh
#!/bin/bash
#2023年4月13日
#Author By LiangGaRy
##############################
#定义一个变量,开始的时间戳
START=$(date +%s)
        #执行一个命令,这里需要把信息丢不输出到屏幕
ping -c2 -w5 www.baidu.com &>/dev/null
        #再定义一个变量作为结束的时间戳
END=$(date +%s)
        #然由两个时间戳相减得出的就是时间
DIFF=$((END - START))
        #最后输出一个时间,这里用了变量来代表数值
echo  "命令执行用了:$DIFF seconds"

#执行脚本
[root@Test1 ~]# bash aa.sh 
命令执行用了:1 seconds
04-23 12:33