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
- 设置: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脚本判断命令花费的时间
- 计算命令执行的之前距离1970的秒数(时间戳)
- 执行命令
- 计算执行完成之后的时间戳
- 两个时间戳做减法
所有的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