分享页面
已经找到“” 的记录2508条
Linux中通过expect工具实现脚本的自动交互
 

1.安装expect工具

expect是建立在tcl基础上的一个自动化交互套件, 在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是:

spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成, 退出.

由于expect是基于tcl, 所以需要确保系统中安装了tcl:

# 检查是否安装了tcl:

# 如果没有安装, 使用yum安装tclexpect:

[root@localhost ~]# yum install -y tcl

[root@localhost ~]# yum install -y expect

# 查看expect的安装路径:

 

2.expect的常用命令

命 令

说 明

spawn

启动新的交互进程, 后面跟命令或者指定程序

expect

从进程中接收信息, 如果匹配成功, 就执行expect后的动作

send

向进程发送字符串

send exp_send

用于发送指定的字符串信息

exp_continue

expect中多次匹配就需要用到

send_user

用来打印输出 相当于shell中的echo

interact

允许用户交互

exit

退出expect脚本

eof

expect执行结束, 退出

set

定义变量

puts

输出变量

set timeout

设置超时时间

 

3.作用原理简介

3.1 示例脚本

这里以ssh远程登录某台服务器的脚本为例进行说明, 假设此脚本名称为remote_login.sh:

3.2 脚本功能解读

(1) #!/usr/bin/expect

上述内容必须位于脚本文件的第一行, 用来告诉操作系统, 此脚本需要使用系统的哪个脚本解析引擎来执行.

具体路径可通过command -v expect命令查看.

注意:

这里的expectLinuxbashWindowscmd等程序一样, 都是一种脚本执行引擎.

脚本需要有可执行权限(chmod x remote_login.sh, chmod 755 auto_login.sh), 然后通过命令./remote_login.sh运行即可;

如果输入sh remote_login.sh, 意义就不一样了: 明确调用sh引擎去执行此脚本, 此时首行的#!/usr/bin/expect就失效了.

(2) set timeout 30

设置连接的超时时间为30.

(3) spawn ssh -l root 172.16.22.131

spawnsend等命令是expect工具中的内部命令, 如果没有安装expect工具, 就会出现"spawn not found"等错误.

不要用which spawn之类的命令去找spawn, 因为并没有这样的程序.

(4) expect "password*"

这个命令用来判断上次输出结果里是否包含"password*"的字符串, 如果有则立即返回, 否则就等待一段时间后返回. 这里的等待时长就是前面设置的timeout, 也就是30.

(5) send "123456\r"

这里就是执行交互动作, 作用等同于手工输入密码.

提示: 命令字符串结尾加上\r, 这样的话, 如果出现异常等待的状态就能够停留下来, 作进一步的核查.

(6) interact

expect执行完成后保持用户的交互状态, 这个时候用户就可以手工操作了.

如果没有这一句, expect执行完成后就会退出脚本刚刚远程登录过去的终端, 用户也就不能继续操作了

 

4.其他脚本使用示例

4.1 直接通过expect执行多条命令

注意首行内容, 这种情况下就只能通过./script.sh来执行这类脚本了:

#!/usr/bin/expect -f

 

set timeout 10

# 切换到root用户, 然后执行lsdf命令:

spawn su - root

expect "Password*"

send "123456\r"

expect "]*" # 通配符

send "ls\r"

expect "#*" # 通配符的另一种形式

send "df -Th\r"

send "exit\r" # 退出spawn开启的进程

expect eof # 退出此expect交互程序

 

4.2 通过shell调用expect执行多条命令

注意首行内容, 这种情况下可通过sh script.shbash script.sh ./script.sh, 都可以执行这类脚本:

#!/bin/bash

ip="172.16.22.131"

username="root"

password="123456"

 

# 指定执行引擎

/usr/bin/expect <<EOF

set time 30

spawn ssh $username@$ip df -Th

expect {

"*yes/no" { send "yes\r"; exp_continue }

"*password:" { send "$password\r" }

}

expect eof

EOF



 

5.spawn not found 的解决

出现这个错误的基本上都是出学者: Linux 执行shell脚本有两种方式:

一种是将脚本作为sh的命令行参数, sh remote_login.sh, sh /data/remote_login.sh;

一种是将脚本作为具有执行权限的可执行脚本, ./remote_login.sh, /data/remote_login.sh.

而作为sh命令行参数来运行, 那么脚本第一行的#!/usr/bin/expect就会失效, 所以才会出现spawn not foundsend not found等错误, 所有上面的automate_login.sh脚本必须用以下命令运行:

./automate_expect.sh

 

OSPF中常见的几种LSA类型及其作用
 

LSALink-State Advertisement)链路状态广播,是链接状态协议使用的一个分组,它包括有关邻居和通道成本的信息。 LSA被路由器接收用于维护它们的路由选择表。在OSPF中,将LSA定义为11种类别,其中常见的有下列6种:

1LSA:路由器LSA.

Router LSA描述了路由器物理接口所连接的链路或接du,指明了链路的状态,代价等.每个OSPF区域内的zhi路由器均会产生第一类LSA.它让路由器彼此认识彼此的链路 接口等.只在产生的区域内泛洪。

2LSA:网络LSA

Network LSA是由DR始发的,它描述了一个广播多路访问网络所有相连的网络和子网,只在产生的区域内泛洪。

3LSA:网络汇总LSA

Network summary LSA是由ABR发出的,它将某个区域的汇总告知其他区域,也就是通知其他区域路由器要到这些网络就找我.这里就有点距离矢量路由协议的味道,依靠下一跳路由器来路由。

4LSAASBR汇总LSA

ASBR Summary LSA ,它也是由ABR发出的,描述了ASBRRID,它是告诉其他区域路由器到某个非OSPF AS外的网络要找通告里告诉的那个ASBR.可以理解为汇总是由ASBR产生但由ABR代为通告出去的.然后由ABR代为转成LSA4发出。

5LSA:自治系统外部LSA

Autonomous system external LSA .,它是由ASBR产生的,用来通告自治系统外部的路由,它在整个OSPF自治系统内泛洪.所以管理员应该尽量在ASBR上进行路由汇总(summary-address 外部汇总网络号 汇总掩码)

7LSANSSA 外部LSA

是指在非纯末梢区域内(not-so-stubby area)ASBR发出的通告外部ASLSA.仅仅在这个非纯末梢区域内泛洪.不能在整个自治系统内泛洪.NSSA网络中的ABR会将这个7LSA转换为5LSA告诉主干区域。

OSPF中DR与BDR的选举规则
 

OSPF中,有两个相当重要的概念:DRBDRDRdesignated router):指定路由器;BDRbackup designated router):备份指定路由器。设置DRBDR的目的在于减少网络中LSA流量的泛洪。

在一个LAN连接中,OSPF将选举出一个路由器做为DR,再选举一个做为BDR,所有其他的和DR以及BDR相连的路由器形成完全邻接状态而且只传输LSA(链路状态通告)DRBDR

换句话说,在一个OSPF的网络中,所有的路由器将被分为两类:指定路由器(DR/BDR)和非指定路由器(DROTHER)。所有的非指定路由器都要和指定路由器建立邻居关系,并且把自己的LAS发送给DR,而其他的OSPF路由器将不会相互之间建立邻居关系。也就是说,OSPF网络中,DRBDRLSDB(链路状态数据库)将会包含有整个网络的完整拓扑。

DR从邻居处转发更新到另外一个邻居那里。DR的主要功能就是在一个LAN内的所有路由器拥有相同的数据库,而且把完整的数据库信息发送给新加入的路由器。路由器之间还会和LAN内的其他路由器(DR/BDR,DROTHERs)维持一种部分邻居关系(two-way adjacency)OSPF的邻接一旦形成以后,会交换LSA来同步LSDB,LSA将进行可靠的洪泛。

DRBDR的选举存在以下特点:

.不会减少Hello报文,较少的DDLSRLSULSAck报文;

.DRother只和DR以及BDR泛洪DDLSRLSU

.DRother之间只互相发送Hello报文;

.DRother之间保持2-Way关系;

.DRBDR负责收集网络LSA

.DR负责向网络中其他DRother通告拓扑信息;

.BDR监控DR运行状态,准备随时取代;

.只存在MA网络。

DRBDR的选举规则如下:

.先比较优先级,默认为1,大的为DR,次大为BDR;优先级0,表示不参与选举;如果两台路由器优先级都为0,则邻居状态为2-Way

.先级相同,比较Router-ID,大的为DR次大为BDR

备注:1.网络初始时,先选出BDRBDR发现网络中没有DR后,把自己变为DR,再选出BDR

备注:2.非抢占性,当网络中已经有了DRBDR,有一台优先级更高的或者RID更高的路由器接入,为了保障网络的稳定,DRBDR不会发生改变。

(1)重启DRBDR或者OSPF进程

(2)把路由器接口的优先级置为0

.当整个网络没有DRBDR存在时,所有的OSPF路由器都会在2-Way状态下,等待一个dead时间(40s)后进行选举;

.当多个MA网络通过交换机互联时,DRDR之间竞选,BDRBDR之间进行竞选;

.在帧中继HubSpoke结构,必须让Hub节点成为DR,最好其他节点不参与选举优先级为0。

MAC如何远程windows桌面
 

1.首先在APPSTOR下载“Microsoft Remote Desktop”应用

2.在打开的“Microsoft Remote Desktop”窗口中,单击“New”图标按钮,来创建一个新的远程主机

3.根据图片上得文字描述,输入需要连接的用户名密码,和ip地址。

PC Name:这里输入你要连接的远程计算机IP地址

UserName:平时登录计算机的用户名

Password:登录计算机的密码

输入以上信息后,直接关闭窗口就可以了,系统会自动保存

4.新建远程计算机后,在列表内就会出现了,您只需要双击就可以连接了

6.当您双击列表开始连接后,正常就会看到这个提示框了,单击“Continue”继续就可以了

7.Yes,已经成功连接至Windows系统了

LSI阵列卡设置阵列启动顺序
 

1.创建多个阵列后选择左侧的virtual drives选项

 

2.选择需要设置为下次启动的阵列,并勾选Set Boot Drive,点击Go即设置完成。

 

3.返回首页,点击Exit退出,重启后则进入DG1阵列。

LSI或INTEL阵列卡组建RAID5阵列
 

RAID 5是一种存储性能、数据安全和存储成本兼顾的存储解决方案,要组建RAID 5,至少需要3块硬盘(我们的绝大多数宿主机配置4SSD硬盘)。目前,我们使用的阵列卡主要为LSIINTELDELLHP这几个品牌,不同品牌的阵列卡设置阵列的操作方法也不一样。本文将向大家介绍LSIINTEL阵列卡组建RAID 5阵列的配置方法。

 

1.在服务器启动的过程当中,自检到logo画面后,下一步就会进入Raid卡自检过程(要进入这一步骤需要在BIOS关闭快速启动),此时界面上会出现Ctrl-H提示(IntelCtrl-G),如下图:

 

2.按下Ctrl-H组合键,服务器自检完成后会进入Raid卡配置界面,如下图,点击“Start”按钮进入Raid卡主页:

 

3.RAID卡主页点击“Configuration Wizard”,打开配置向导:

 

4.选择“Add Configuration”后,点击“Next”:

 

5.选择“Manual Configuration”,点击“Next”:

 

6.左侧方框内可以看到所有未使用的硬盘,我们选择全部(也可以逐个选择),然后点击下的“Add To Array”将其加入到右侧方框内:

 

7.点击“Accept DG”,创建磁盘组:

 

8.点击“Next”:

 

9.点击“Add to SPAN”将刚才创建好的磁盘组加入到右侧方框内:

 

10.点击“Next”:

 

11.阵列参数配置,第一个参数“Raid Level”选择“RAID 5”,其余保持默认:

 

12.最后一个参数“Select Size”输入阵列容量大小,最大值可参考右侧绿色字体提示(其中R5代表做Raid5的最大容量),也可直接点击“Update Size”自动输入当前所选的阵列类型所支持的最大阵列容量,完成后点击“Accept”:

 

13.弹出提示选择“Yes”:

 

14.回到配置界面,点击“Next”:

 

15.点击“Accept”配置完成:

 

16.提示保存,选择“Yes”:

 

17.提示初始化,选择“yes”:

 

18.正在初始化,能看到百分比进度条(速度较快,可能一闪而过):

 

19.初始化完成,点击“Home”返回首页:

 

20.此时,阵列已配置完成,Raid5状态显示“Optimal”表示正常,Drives显示四块硬盘绿色“Online”正常。最后点击“Exit”退出,然后键盘按Ctrl-Alt-Delete组合键重启服务器(备注:由于宿主机通常使用41T硬盘组建阵列,最终划分给D盘的空间将超过2T,而采用传统方式启动的硬盘格式为MBR,不支持超过2T的空间,因此,建立完阵列之后记得到BIOS里将启动项改为UEFI启动)。

Linux系统中查找大文件的方法有哪些
 

一、ls命令

最简单的方法就是借助 ls 命令,因为 ls 命令本身输出是带文件大小信息的。

比如,我要列出 /opt 目录中的 5 个最大文件,可以:

1.ls -lSh /opt | head -5



二、find命令

find 本身就是查找命令,可以递归查找一个目录的子目录,所以用它是自然的。

比如,查找 / 目录下最大的一个文件:

1. sudo find / -type f -printf “%st%pn” | sort -n | tail -1

如果要找前 10 个大文件呢,可以这样:

2. $ find $HOME -type f -printf ‘%s %pn’ | sort -nr | head -10

也可以使用 -size 选项来查找,以下命令将显示大于100MiB(注意不是100MBMiBMB的区别,emmm)的所有文件:

3. find / -size 100M-ls

也可以查找一个区间大小的(比如 100MiB 200MiB )之间的文件:

4. find / -size 100M-size -200M-ls

最后,下面这个命令也比较常用,查找某个目录最大的5个文件:

5. find $DIRECTORY -type f -exec ls -s {} ; | sort -n | tail -n 5

补充一点,find 也可以查找最近的文件:少于或等于n(-ctime -n)的文件或属于特定用户(-user mrlinus)的文件。

三、du命令

du 命令可以查看磁盘空间的使用情况,自然也可以用来查看磁盘上占用空间较多的文件和文件夹。

比如,查找 / 下前 20 个最大的文件:

6.sudo du -a / | sort -n -r | head -n 20

查找当前文件夹中最大的 10 个目录:

7.sudo du -a | sort -n -r | head -n 10

如果要显示可读的KBMBGB信息,可以加上 -h 参数:

8.du -hs * | sort -rh | head -n 10

查找最大目录/文件(包括子文件夹)

9.du -Sh| sort -rh | head -n 10

如果只看大小在 GB 范围内的所有文件,可以同时使用 du 命令和 grep 命令:

10.du -h -a /dir | grep “[0-9]Gb”

Linux下使用alias设置命令别名
 

有时候在Linux下执行一条命令过长,挺麻烦的,我们可以在.bashrc文件下设置alias,对命令设置简短的别名,相当于缩短命令,方便操作。

1.设置别名

alias 别名=’原命令 -选项/参数’

例如:

alias ll='ls -lt'1

这样设置了ls -lt命令的别名是ll,在终端输入ll时,则相当于输入了ls -lt命令

注意: 在定义别名时,等号两边不能有空格,否则shell不能决定您需要做什么。仅在命令中包含空格或特殊字符时才需要引号。如果键入不带任何参数的alias 命令,将显示所有已定义的别名。

2.查看已经设置的别名列表

alias -p1

3.删除别名

unalias 别名1

例如:

unalias ll1

4.设置别名每次登入可用

alias命令只作用于当次登入的操作。如果想每次登入都能使用这些命令的别名,则可以把相应的alias命令存放在 ~/.bashrc 文件中。

打开~/.bashrc文件,输入要设置的alias命令,保存,然后运行

source ~/.bashrc1

如果这样还不行,表示没有~/.bash_profile文件或文件中没有执行~/.bashrc文件

可以在~/.bash_profile中加入命令 source ~/.bashrc 后保存

这样就可以每次登入后都可以使用设置好的命令别名。

Ubuntu18.04系统如何用uptime命令打印系统总运行时长和平均负载
 

ubuntu18.04中如何用uptime命令打印系统总共运行了多长时间和系统的平均负载呢?本文给出详细说明。

语法:

uptime(选项)

选项:

-V:显示指令的版本信息。

实例:

查看系统运行时间与平局负载

uptime

Lrzsz安装和使用
 

Lrzsz Linux服务器和window互传文件工具lrzsz这个工具只适合传输小文件

 

1、安装lrzsz

yum install -y lrzsz

 

2sz命令发送文件到本地

sz filename

 

输入命令后会弹出接受文件选择目录

sz 111

 

选择好路径后点击确定

 

这样就从linux下载文件成功了

 

3rz命令本地上传文件到服务器:

 

# rz

 

执行该命令后,在弹出框中选择要上传的文件即可。

 

这样就从windows系统上传文件到linux系统成功了

 

扫码添加专属客服

扫码关注公众号