1、编写脚本实现传入进程pid,查看对应进程/proc下CPU、内存指标.
脚本内容:
#!/bin/sh
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2019-12-12 16:36
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : 7-1.sh
# Description :
# ******************************************************
cat <<EOF
一键查询进程信息
版本:Ver 1.32 复合版
功能:输入PID号码可以查询进程使用了多少CPU、内存资源,输入quit可以退出查询
本软件仅供学习交流,严禁用于商业用途,请于24小时内删除。
支持正版,人人有责
|||||||||||||
╭| ━ ━ |╮
╰| • • |╯找女朋友中……………………
╰╭╮-╭╮╯
EOF
sleep 1
while :
do
#用户输入的进程号赋值给后面的 Pid_Num 变量
read -p '请输入需要查询的进程PID号,或者输入quit退出:' Pid_Num
case $Pid_Num in
#这里要先判断$Pid_Num 是否是quit
quit)
echo '已退出'
exit 1
;;
#这里我忘了case语句 )这儿怎么表示多位数的数字,先在这儿用*,再在语句里面判断
*)
#用 expr 计算和 $? 取是否是正常值 0
expr $Pid_Num + 0 &> /dev/null && echo $? >/dev/null
#如果 $?等于 0 并且 /proc/$Pid_Num 目录存在,就打印这个进程使用的CPU、内存指标
if [ $? -eq 0 -a -d /proc/$Pid_Num ];then
cat /proc/$Pid_Num/status
else
echo '系统没有这个进程号'
fi
;;
esac
done
执行结果:
执行结果 :
[root@localhost mage]# sh 7-1.sh
一键查询进程信息
版本:Ver 1.32 复合版
功能:输入PID号码可以查询进程使用了多少CPU、内存资源,输入quit可以退出查询
本软件仅供学习交流,严禁用于商业用途,请于24小时内删除。
支持正版,人人有责
|||||||||||||
?| ━ ━ |?
?| ? ? |?找女朋友中……………………
???-???
请输入需要查询的进程PID号,或者输入quit退出:1
Name: systemd
Umask: 0000
State: S (sleeping)
Tgid: 1
Ngid: 0
Pid: 1
PPid: 0
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
VmPeak: 256236 kB
VmSize: 190832 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 3720 kB
VmRSS: 3720 kB
RssAnon: 1156 kB
RssFile: 2564 kB
RssShmem: 0 kB
VmData: 148424 kB
VmStk: 132 kB
VmExe: 1412 kB
VmLib: 3728 kB
VmPTE: 120 kB
VmSwap: 0 kB
Threads: 1
SigQ: 0/14588
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 7be3c0fe28014a03
SigIgn: 0000000000001000
SigCgt: 00000001800004ec
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
Seccomp: 0
Speculation_Store_Bypass: thread vulnerable
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 95684
nonvoluntary_ctxt_switches: 4256
请输入需要查询的进程PID号,或者输入quit退出:2
Name: kthreadd
Umask: 0000
State: S (sleeping)
Tgid: 2
Ngid: 0
Pid: 2
PPid: 0
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
Threads: 1
SigQ: 0/14588
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: ffffffffffffffff
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 0000001fffffffff
CapEff: 0000001fffffffff
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
Seccomp: 0
Speculation_Store_Bypass: thread vulnerable
Cpus_allowed: f
Cpus_allowed_list: 0-3
Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list: 0
voluntary_ctxt_switches: 2936
nonvoluntary_ctxt_switches: 0
请输入需要查询的进程PID号,或者输入quit退出:ew33
系统没有这个进程号
请输入需要查询的进程PID号,或者输入quit退出:233weew
系统没有这个进程号
请输入需要查询的进程PID号,或者输入quit退出:1qe
系统没有这个进程号
请输入需要查询的进程PID号,或者输入quit退出:1..2
系统没有这个进程号
请输入需要查询的进程PID号,或者输入quit退出:quit
已退出
2、编写脚本实现每分钟检查一个主机端口是否存活(提示使用nmap),如果检查到端口不在线,sleep 10s,如果三次都不存在,记录到日志
脚本内容:
#!/bin/sh
# Last modified: 2019-12-15 13:13
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : 7-2.sh
# Description :
# ******************************************************
#ip_geshi=`grep -o "\<\([0-9]\{1,3\}\.\)\{3\}\([0-9]\{1,3\}\)\>"`
#nmap_ceshi 变量目的是过滤出 open
nmap_ceshi=`nmap $1 -p $2 | sed -n '6p' |cut -d' ' -f2`
for i in `seq 1 3`;do
if [ $nmap_ceshi != "open" ];then
sleep 10
fi
[ $i -eq 3 ] && echo "Port $2 with IP address $1 does not exist for 3 consecutive times" >> /var/log/ip_duankou.log
done
执行结果:
3、编写脚本/root/bin/excute.sh,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件
vim /root/bin/excute.sh
脚本内容:
#!/bin/sh
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2019-12-14 21:56
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : excute.sh
# Description :
# ******************************************************
rrr=`echo "$1" |sed -n 's/.*\(\.sh\)/\1/g'`
if [[ $rrr =~ .sh ]];then
chmod o+x $1
else
echo $1'不是脚本文件'
fi
执行结果:
4、编写/root/bin/nologin.sh和login.sh,实现禁止和允许普通用户登录系统
vim /root/bin/nologin.sh
nologin.sh 脚本内容:
#!/bin/sh
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2019-12-14 19:20
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : nologin.sh
#变量,自定义登录状态
Login_Status=/sbin/nologin
while :
do
read -p '请输入你需要禁止用户登录系统的用户名,退出请输入quit.:' NoLogin
if [[ $NoLogin =~ quit ]];then
echo '已成功退出。'
exit 1
else
#这里用id 命令来判断输入的是否是用户名
id $NoLogin &> /dev/null
#如果 $? 等于0,那么输入的就是用户名
if [ $? -eq 0 ];then
#这里用sed来取值更改 /etc/passwd 文件后面的登录状态
#注:我这儿用的是变量来控制 输入的用户名 和 要更改的登录状态,如果分隔符用的是 / ,那么
sed 命令会报错,错误信息为:sed: -e expression #1, char 22: unknown option to `s'
#解决方法:把 sed 的分隔符由 / 改为 @ 或者 # 符号等。
sed -i 's@\(^'''$NoLogin''':.*:\).*@\1'''$Login_Status'''@g' /etc/passwd
echo "$NoLogin现在已经禁止登录系统。"
else
#否则打印提示信息
echo "系统里没有用户名$NoLogin"
fi
fi
done
____________________________________________________
vim /root/bin/login.sh
login.sh 脚本内容:
#!/bin/sh
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2019-12-14 19:20
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : login.sh
#变量,自定义登录状态
Login_Status=/bin/bash
while :
do
read -p '请输入你需要用户登录系统的用户名,退出请输入quit.:' Login
if [[ $Login =~ quit ]];then
echo '已成功退出。'
exit 1
else
#这里用id 命令来判断输入的是否是用户名
id $Login &> /dev/null
#如果 $? 等于0,那么输入的就是用户名
if [ $? -eq 0 ];then
#这里用sed来取值更改 /etc/passwd 文件后面的登录状态
#注:我这儿用的是变量来控制 输入的用户名 和 要更改的登录状态,如果分隔符用的是 / ,那么
sed 命令会报错,错误信息为:sed: -e expression #1, char 22: unknown option to `s'
#解决方法:把 sed 的分隔符由 / 改为 @ 或者 # 符号等。
sed -i 's@\(^'''$Login''':.*:\).*@\1'''$Login_Status'''@g' /etc/passwd
echo "$Login现在已经可以登录系统。"
else
#否则打印提示信息
echo "系统里没有用户名$Login"
fi
fi
done
执行结果 :
5、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件的第10个用户和第20个用户的ID之和
vim /root/bin/sumid.sh
脚本内容:
#!/bin/sh
# ******************************************************
# Author :suika_xiaoyuzhenren
# Last modified: 2019-12-13 21:18
# Email : 2429366765@qq.com
# blog : https://blog.csdn.net/suika_xiaoyuzhenren
# Filename : 7-5.sh
# Description :
# ******************************************************
a=`sed -n '10s/.*:x:\([0-9]\+\):.*/\1/gp' /etc/passwd`
b=`sed -n '20s/.*:x:\([0-9]\+\):.*/\1/gp' /etc/passwd`
echo '第十个用户和第二十个用户ID之和为'$(($a+$b))
执行结果: