linux_4
1、编写脚本实现登陆远程主机。(使用expect和shell脚本两种形式)
#1 安装expect
[root@centos7 ~]# yum install expect -y
[root@centos7 home]# vim expect2
#!/usr/bin/expect
set ip 192.168.61.131
set user root
set password a123456
set timeout 10
spawn ssh $user@$ip
expect {
"*(yes/no*" { send "yes\r";exp_continue }
"*password:*" { send "$password\r";exp_continue }
}
interact
#2 安装sshpass
#!/bin/bash
IP=$1
USER=$2
PASSWORD=$3
sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no $USER@$IP
[root@centos7 home]# ./shell.sh 192.168.61.131 root a123456
2、生成10个随机数保存于数组中,并找出其最大值和最小值
[root@centos7 home]# vim min_max.sh
#!/bin/bash
declare -i min max
declare -a nums
for ((i=0;i<10;i++));do
nums[$i]=$RANDOM
[ $i -eq 0 ] && min=${nums[0]} && max=${mums[0]} && continue
[ ${nums[$i]} -gt $max ] && max=${nums[$i]}
[ ${nums[$i]} -lt $min ] && min=${nums[$i]}
done
echo “Numbers are ${nums[*]}”
echo Max is $max
echo Min is $min
3、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
[root@centos7 home]# vim matrix.sh
#!/bin/bash
read -p "请输入正整数字,并已空格隔开:" num
a=( $num )
for ((i=1;i<${#a[*]};i++))
do
for ((j=0;j<${#a[*]}-i;j++))
do
if [ ${a[$j]} -gt ${a[`expr $j + 1`]} ]
then
tmp=${a[`expr $j + 1`]}
a[`expr $j + 1`]=${a[$j]}
a[$j]=$tmp
fi
done
done
echo ${a[@]}
4、总结查看系统负载的几种命令,总结top命令的指标大概什么含义(不要求全部写出来)
负载查询 uptime
/proc/uptime 包括两个值,单位 s
-
系统启动时长
-
空闲进程的总时长(按总的CPU核数计算)
uptime 和 w 显示以下内容
-
当前时间
-
系统已启动的时间
-
当前上线人数
-
系统平均负载(1、5、15分钟的平均负载,一般不会超过1,超过5时建议警报)
系统平均负载: 指在特定时间间隔内运行队列中的平均进程数,通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
如:linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用
范例:
[root@centos8 ~]# uptime
21:19:15 up 1 day, 30 min, 1 user, load average: 0.03, 0.03, 0.00
[root@centos8 ~]# w
21:19:45 up 1 day, 31 min, 1 user, load average: 0.01, 0.02, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 18:21 0.00s 0.21s 0.00s w
显示CPU相关统计 mpstat
#安装sysstat软件包
[root@centos8 ~]# yum install -y sysstat
[root@centos8 ~]# mpstat
Linux 4.18.0-240.el8.x86_64 (centos8.magedu.org) 01/27/2022 _x86_64_ (2 CPU)
09:24:24 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:24:24 PM all 0.05 0.01 0.18 0.00 0.13 0.11 0.00 0.00 0.00 99.53
#查看3秒内负载
[root@centos8 ~]# mpstat 1 3
Linux 4.18.0-240.el8.x86_64 (centos8.magedu.org) 01/27/2022 _x86_64_ (2 CPU)
09:29:44 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:29:45 PM all 0.00 0.00 0.50 0.00 0.00 0.00 0.00 0.00 0.00 99.50
09:29:46 PM all 0.00 0.00 0.00 0.00 0.50 0.00 0.00 0.00 0.00 99.50
09:29:47 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.17 0.00 0.17 0.00 0.00 0.00 0.00 99.67
查看进程实时状态 top 和 htop
top
top 提供动态的实时进程状态
有许多内置命令
帮助:h 或 ? ,按 q 或esc 退出帮助
排序:
P:以占据的CPU百分比,%CPU
M:占据内存百分比,%MEM
T:累积占据CPU时长,TIME+
首部信息显示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
保存文件:W
top命令栏位信息简介
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
top选项:
-d # 指定刷新时间间隔,默认为3秒
-b 全部显示所有进程
-n # 刷新多少次后退出
-H 线程模式
htop
htop 命令是增强版的TOP命令,来自EPEL源,比top功能更强
#提前安装epel源与htop软件包
[root@centos8 ~]# yum install -y epel-release
[root@centos8 ~]# yum install -y htop
选项:
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程
-s COLUME: 以指定字段进行排序
子命令:
s:跟踪选定进程的系统调用
l:显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t:显示进程树
5、编写脚本,使用for和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
#1 for
[root@centos7 home]# vim forping.sh
#!/bin/bash
NETID=192.168.0
for HOSTID in {1..254};do
{
if ping -c1 -W1 $NETID.$HOSTID &> /dev/null; then
echo $NETID.$HOSTID is success
else
echo $NETID.$HOSTID is fail
fi
} &
done
#2 while
[root@centos7 home]# vim whileping.sh
#!/bin/bash
NETID=192.168.0
HOSTID=1
while [ $HOSTID -le 254 ];do
{
if ping -c1 -w1 $NETID.$HOSTID &>/dev/null;then
echo $NETID.$HOSTID is success
else
echo $NETID.$HOSTID is fail
fi
}&
let HOSTID++
done
6、每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式 为“etcbak-yyyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间
#方法1[root@centos7 home]# vim etcbak.sh
#!/bin/bash
DIR=etcbak-`date -d '-1 day' +%Y-%m-%d-%H`
tar -Jcvf /backup/${DIR}.tar.xz /etc/ &> /dev/null
crontab -e
30 1 * * 1-5 bash etcback.sh
#方法2
crontab -e
30 1 * * * 1-5 tar -Jcvf /backup/`date -d '-1 day' +%F-%H`.tar.xz /etc
7、描述密钥交换的过程
密钥交换:IKE( Internet Key Exchange )
-
公钥加密:用目标的公钥加密对称密钥
-
DH (Deffie-Hellman):生成对称(会话)密钥
DH 介绍
-
这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表
-
它是一种安全协议,让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥,这个密钥一般作为“对称加密”的密钥而被双方在后续数据传输中使用。
-
DH数学原理是base离散对数问题。做类似事情的还有非对称加密类算法,如:RSA。
-
其应用非常广泛,在SSH、VPN、Https...都有应用,勘称现代密码基石
-
DH 实现过程:
A: g,p 协商生成公开的整数g, 大素数p
B: g,p
A:生成隐私数据:a (a<p),计算得出 g^a%p,发送给B
B:生成隐私数据:b,(b<p),计算得出 g^b%p,发送给A
A:计算得出 [(g^b%p)^a]%p = g^ab%p,生成为密钥
B:计算得出 [(g^a%p)^b]%p = g^ab%p,生成为密钥
DH 特点
泄密风险:私密数据a,b在生成K后将被丢弃,因此不存在a,b过长时间存在导致增加泄密风险。
中间人攻击:由于DH在传输p,g时并无身份验证,所以有机会被实施中间人攻击,替换双方传输时的数据
8、https的通信过程
-
客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到服务器的443端口
-
服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自
己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出
提示页面。这套证书其实就是一对公钥和私钥
-
传送服务器的证书给客户端
证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等
-
客户端解析验证服务器证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等
等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一
个随机值。然后用证书中公钥对该随机值进行非对称加密
-
客户端将加密信息传送服务器
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端
的通信就可以通过这个随机值来进行加密解密了
-
服务端解密信息
服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值
-
服务器加密信息并发送信息
服务器将数据利用随机值进行对称加密,再发送给客户端
-
客户端接收并解密信息
客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容
9、使用awk以冒号分隔获取/etc/passwd文件第一列
awk -F: '{ print $1 }' /etc/passwd
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App