马哥教育M28-24天、

1.使用nmcli创建bond, team ,bridge bond nmcli connection add con-name bond0 type bond ifname bond0 mode active-backup nmcli connection add type bond-slave ifname eth2 master bond0 nmcli conncetion add type bond-slave ifname eth3 master bond0 nmcli connection up bond-slave-eth2 nmcli connection up bond-slave-eth3

cat /proc/net/bonding/bond0 查看bond状态 lsmod |grep bonding

team nmcli connection add con-name team0 type team ifname team0 config '{"runner":{"name":"activebackup"}}' nmcli connection add type team-slave ifname eth2 master team0 nmcli connection add type team-slave ifname eth3 master team0 nmcli connection modify team0 ipv4.addresses 8.8.8.9/24
teamdctl team0 state

bridge nmcli connection add type bridge con-name br0-con ifname br0-con ifname ipv4.method manual ipv4.addresses 8.8.8.6/24 nmcli connection add type bridge-slave ifname eth2 master br0-con nmcli connection add type bridge-slave ifname eth3 master br0-con nmcli connection up br0-con brctl show

hostname ping x.x.x.x ping -c1 只ping一个包 ping -w1 错误后仅重试1s ping -s 60000 指定一个包大小 ping -f 思考:在禁Ping情况下,实际是icmp包协议被禁止,但是可以通过tcp协议方式去Ping不会关闭的某些端口如80,443等-- 实用工具:tnsping 工作在windows下(可以测试网络稳定性和丢包率); hping3; nmap(只能实现一次全网所描,不能测试网络稳定性和丢包率)

ftp lftp lftpget http:// ftp://

wget -P 指定下载目录,默认下载到运行程序的当前目录 -O 指定文件名,默认与原文件名一致 --limit-rate=xx(K,M,G) 下载速度 -c 断电续传 -q 静默下载

links --dump 只看文字 --source 看源码

curl

进程管理

root --> cat --> /etc/shadow

ps BSD方式 a 所有用户在所有终端上运行的前台进程 x 当前用户运行的所有进程(包括前台进程和后台daemon) ax 所有用户运行的所有进程 aux 所有用户运行的所有进程,结果中显示用户名 f 显示父子进程关系 -C 用进程名进行过滤

		axo 配合
		o  自定义输出列
				 %cpu      %mem     pid    uid     gid    cmd     comm    tty(显示终端名,如?,表示daemon后台进程)        ruser  (命令发起人)      euser   命令的真正执行人        state   
				 
		 k    排序或--sort

VSZ:虚拟内存集,线性内存,表示操作系统承诺内存集 RSS:常驻内存集,实际分配内存

UNIX方式 -e 显示所有进程 -f 显示完整格式 -ef -eF 以更完整格式显示所有进程 -efH 显示父子进程关系 -eo 自定义显示结果:ps -eo %cpu,%mem,pid,nice,pri,stat,comm

nice值
			-20~19  数字越小,优先级越高
			renice  -n  #(-20~19)  pid
			nice  -n  #(-20~19)   -#   command
			查看方式    ps axo nice

pgrep -u UID/USERNAME 基于执行程序的用户名进行搜索 -U 实际发起者 (考虑命名有u+s权限,实际生效者可变) -t 终端名 -P 查看子进程

pidof   进程名     查询对应进程名的PID

uptime       top      htop(epel)
			[epel]
			name=centos69 epel
			baseurl=http://x.x.x.x/fedora-epel/$releasever/$basearch
    gpgcheck=0

马哥教育M28-二十五天、 vmstat r:可运行进程 b:处于不可中断睡眠状态的进程个数

		swpd:当前虚拟内存的已使用空间
  free  :物理内存的剩余空间,直至不够用时,才会使用虚拟内存
		buffer/cache:用于缓存的内存总量
		si:  表示内存从swap读入的总量
		so:表示从内存写出到swap的总量
		bi:表示内存从硬盘读入的总量
		bo:表示从内存写出到硬盘的总量
		in: 每秒中断的速率
		cs:进程切换速率
		us: 用户空间时间
		sy:内核空间,系统空间
		id:空闲时间
		wa:等待时间
		st: 被虚拟机偷走的时间
		
		vmstat -s  详细查看内存信息      vmstat 1   1
		iostat
		
pmap  pid (经常用来查看内存泄漏问题,进程单个程序占用内存大小异常或者查看文件描述符数量异常情况)
				pmap -x pid
				ls -l  /proc/pid/fd   |wc -l 

kill
-0 无作为,可以用来单纯判断进程是否运行 >dev/null;echo $? -1 -HUP:强制进程重读配置文件(在无需关闭进程前提下实用) -2 -INT: 终止正在运行的进程,相当于ctrl+c -3 -QUIT:相当于ctrl+
-9 -KILL :强制正在运行的进程 (exit) -18 恢复后台睡眠进程 -19 暂停进程到后台睡眠 -15 -TERM:终止正在运行的进程(默认)(先释放资源再停止,可能阻塞信号)

killall 进程名

pkill
			-u  用户名    杀死指定用户所运行的所有进程
			pkill -t  pts/1   杀死指定终端上运行的所有进程
			

进程的前后台
			ctrl+z  将运行在前台的进程暂停,或kill -19  PID
			bg  将在当前终端上暂停的进程,放入后继续运行,或kill -18 PID
			fg   将在当前终端上暂停的或在当前终端上后台运行的进程,放入前台继续运行

使进程不再依附于终端在后台运行(与终端剥离shell) nohup command &>/dev/null screen; screen -S ; screen -sl ;screen -r (command&);(command&)

*并行运行多条命令: vim all.sh sh1& sh2& sh3&

			(sh1&);(sh2&)
				{sh1& sh2& sh3&}

马哥M28-第二十六天、

at hh:mm 未来某一时间点运行一次的计划任务 atq 或 at -l 列出指定队列中等待运行的作业 at -c 队列序号 查看指定序号队列的详细信息 atrm 队列序号 或 at -d 队列序号 删除指定序号的队列 echo wall 123 |at 20:00

at 20:00 << EOF

wall hello EOF

at 20:00 -f at.txt

at的任务是否运行依赖于atd服务 centos : service atd start centos : systemctl start atd.service

限制用户不能使用at配置计划任务 当仅/etc/at.deny存在时,写入deny的用户不能配置at 当/etc/at.allow存在时/etc/at deny失效,只有写在allow中的用户才能配置at,当/etc/at.allow和/etc/at.deny都不存在时,仅有root才能配置at

cron /etc/crontab 系统级计划任务 (必须严格区别个人计划任务) 00 07 1,15 * 3 root /root/naozhong.sh 仅能通过root定义,不过可以以普通用户的身份去执行计划任务中的命令。 日志/var/log/crond

特殊的日期表达方式: @reboot Run once after reboot 当下次启动计算机时,启动到crond服务时运行该计划。 @yearly 0 0 1 1 * @annually 0 0 1 1 * @monthly 0 0 1 * * @weekly 0 0 * * 0 @daily 0 0 * * * @hourly 0 * * * *

centos7:单用户启动 1.grub:linux16 最后加上空格rd.break 按ctrl+x 2.mout -o remout,rw /sysroot 3.vim /sysroot/etc/crontab centos6:单用户启动解决循环重启任务 1.grub: kernel 最后空格+1 先ESC加到主界面 再b启动 2.vim /etc/crontab

/etc/crontab 是系统级计划任务的主配置文件 --> /etc/cron.d 是系统计划任务的扩展配置文件目录,其中的所有都应该是按crond的格式编写,每一个文件都会生效 --> /etc/cron.d/0hourly 01 * * * * root run-parts /etc/cron.hourly 又用run-parts命令,扩展到了/etc/cron.hourly目录,其中的所有脚本均会在每小时的01分执行

crontab crontab -e [-u username] crontab -l crontab -r 直接该用户的crontab文件,所以所有计划全删除,如只需删除某条,直接crontab -e 编辑删除该行即可 crontab -i -r 功能同上,在删除前询问

限制用户不能使用crontab配置计划任务 当今当/etc/cron.deny 存在时(默认)写入deny的用户不能配置crontab,当/etc/cron.allow存在时/etc/cron.deny失效,只有写在allow中的用户才能配置crontab,当/etc/cron.allow以及/etc/cron.deny都不存在时,仅有root才能配置crontab

shell脚本编程进阶

判断某字符串是否为整数 num=1322; [[ "$num" =~ ^[0-9]+$ ]] && echo true $score -ge 60 -a $score -lt 80 $score -ge 60 -o $score -lt 80

随机生成16位包含数字、大小写字母、符号的密码 cat /dev/urandom |tr -dc 'a-zA-Z0-9_$@#?.' |head -c 12

练习:写一个×××系统,判断5个数字。
1 5 3 8 9 
输入 第一个值。
输入 第二个值。
输入 第三个值。
输入 第四个值。
输入 第五个值。
每一步在输入完,都会判断,如果中了,则有输出结果:
  第一次中输出 : First blood
  第二次中输出 : Double kill
  第三次中输出 :Triple kill
  第四次中输出 :Quadra Kill
  第五次中输出 :Penta Kill 以及 ACE!
  一次也不中输出: Defeat!
	
	 1 #!/bin/bash
  2 # ------------------------------------------
  3 # Filename:    lucky_dog
  4 # Revision:    1.0
  5 # Date:        2018-03-16
  6 # Author:      Hodge 
  7 # Email:       123@163.com
  8 # ------------------------------------------
  9 # Copyright:   2018 Hodge
 10 # License:     GPL
 11 
 12 cnt=0
 13 #标记命中次数
 14 for i in `seq 1 5`
 15 do
 16     echo "第$i次判断"
 17     read -p 'please input your num:' num_by_usr
 18     num_judge=$[$RANDOM%3]
 19     echo " lucky_num is $num_judge"
 20     flag=1
 21     if [ $num_by_usr -eq $num_judge ]
 22     then
 23         cnt=$[$cnt+1]
 24         flag=0
 25         #若命中则下面输出,不命中不输出,防止不命中依然输出
 26     fi
 27     if [ $flag -eq 0 ]
 28     then
 29         case "$cnt" in
 30             1)echo First blood;;
 31             2)echo Double kill;;
 32             3)echo Triple kill;;
 33             4)echo Quadra kill;;
 34             5)echo Penta kill ACE;;
 35         esac
 36     fi
 37 done
 38     if [ $cnt -eq 0 ]
 39     then
 40         echo "defeat"
 41     fi



作业:

使用♥,利用for,显示出一个等腰三角形。 1、判断/var/目录下所有文件的类型 2、添加10个用户user1-user10,密码为8位随机字符 3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的输出为文件加stop,以S开头的输出为文件名加start,如K34filename stop S66filename start 4、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和 5、计算100以内所有能被3整除的整数之和 6、编写脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态 7、打印九九乘法表 8、在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字母,如:1AbCdeFgH.html 9、打印等腰三角形

  1. 探测局域网内的主机 172.18.250-254.X 能ping通显示并保存至/root/ip.log 要求并行探测提高效率

#/bin/bash #/使用 #!/bin/bash #---------------------------------- #Filename: pingbat #Revision: 1.0 #Date: 2018-03-21 #Author: sunxuefeng #Email: 15610366898@163.com #--------------------------------- #Copyright: 2018-03-21 sunxuefeng #License: GPL #--------------------------------- #批量并行ping网段主机的在线状态

function ping_ip(){ rpm -qa | grep sipcalc >>/dev/null [ $? -ne 0 ] && yum -y install sipcalc read -p "[请输入要检查的网段及子网,输入示例:192.168.1.0/24]:" ip_mask echo "${ip_mask}" | grep -E -q "([0-9]{1,3}[.]){3}[0-9]{1,3}/[0-9]+" if [ $? -eq 0 ];then for i in $(sipcalc ${ip_mask} | grep Usable|egrep -o "[0-9.]+" | eval echo awk '{a[NR]=$0}END{split(a[1],b,".");split(a[2],c,".");for(i in b){if(b[i]!=c[i]){b[i]="{"b[i]".."c[i]"}"}};print b[1]"."b[2]"."b[3]"."b[4]}' | tr " " "\n") do ( ping -c3 -w2 ${i} >/dev/null if [ $? -eq 0 ];then echo "${i} is alive" else echo "${i} is not alive" fi )& done

else
	clear
	echo -e "\033[31m[输入不规范,请重新执行,输入示例:192.168.1.0/24]\033[0m"
fi

} ping_ip