- 查找 Linux 系统中的僵尸进程
#!/bin/bash
#awk 判断 ps 命令输出的第 8 列为 Z 是,显示该进程的 PID 和进程命令
ps aux |awk ‘{if($8 == “Z”){print $2,$11}}’ - 提示用户输入年份后测试判断是否为闰年
#!/bin/bash
#Author:丁丁历险(Jacob)
#能被 4 整除并且并 100 整除的年是闰年
#能被 400 整除的年也是闰年
read -p “请输入一个年份:” year
if [ “KaTeX parse error: Expected 'EOF', got '#' at position 41: …有输入年份" exit fi #̲使用正则测试变量 year 中…year” =~ [a-Z] ]];then
echo “你输入的不是数字”
exit
fi
if [ $[year % 4] -eq 0 ] && [ [ y e a r e c h o " [year % 100] -ne 0 ];then echo " [yearecho"year 是闰年"
elif [ [ y e a r e c h o " [year % 400] -eq 0 ];then echo " [yearecho"year 是闰年"
else
echo “$year 不是闰年”
fi - 生成随机密码(urandom 版本)
#!/bin/bash
#Author:丁丁历险(Jacob)
#/dev/urandom 文件是 Linux 内置的随机设备文件
#cat /dev/urandom 可以看看里面的内容,ctrl+c 退出查看
#查看该文件内容后,发现内容有些太随机,包括很多特殊符号,我们需要的密码不希望使用这些符号
#tr -dc ‘_A-Za-z0-9’ </dev/urandom
#该命令可以将随机文件中其他的字符删除,仅保留大小写字母,数字,下划线,但是内容还是太多
#我们可以继续将优化好的内容通过管道传递给 head 命令,在大量数据中仅显示头 10 个字节
#注意 A 前面有个下划线
tr -dc ‘_A-Za-z0-9’ </dev/urandom | head -c 10 - 生成随机密码(子串截取版本)
#!/bin/bash
#Author:丁丁历险(Jacob)
#设置变量 key,存储密码的所有可能性(密码库),如果还需要其他字符请自行添加其他密码字符
#使用KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲统计密码库的长度 key="0…{#key}
#设置初始密码为空
pass=’’
#循环 8 次,生成 8 为随机密码
#每次都是随机数对密码库的长度取余,确保提取的密码字符不超过密码库的长度
#每次循环提取一位随机密码,并将该随机密码追加到 pass 变量的最后
for i in {1…8}
do
index= [ R A N D O M p a s s = [RANDOM%num] pass= [RANDOMpass=passKaTeX parse error: Expected '}', got 'EOF' at end of input: {key:index:1}
done
echo $pass - 生成随机密码(UUID 版本,16 进制密码) #!/bin/bash
uuidgen - 生成随机密码(进程 ID 版本,数字密码)
#!/bin/bash
echo $$ - 测试用户名与密码是否正确
#!/bin/bash
#用户名为 tom 并且密码为 123456,则提示登录成功,否则提示登录失败
read -p “请输入用户名:” user
read -p “请输入密码:” pass
if [ “ u s e r " = = ′ t o m ′ − a " user" == 'tom' -a " user"==′tom′−a"pass” == ‘123456’ ];then
echo “Login successful”
else
echo “Login Failed”
fi - 循环测试用户名与密码是否正确
#!/bin/bash
#循环测试用户的账户名和密码,最大测试 3 次,输入正确提示登录成功,否则提示登录失败
#用户名为 tom 并且密码为 123456
for i in {1…3}
do
read -p “请输入用户名:” user
read -p “请输入密码:” pass
if [ “ u s e r " = = ′ t o m ′ − a " user" == 'tom' -a " user"==′tom′−a"pass” == ‘123456’ ];then
echo “Login successful”
exit
fi
done
echo “Login Failed” - Shell 脚本的 fork 炸弹
#!/bin/bash
#快速消耗计算机资源,致使计算机死机
#定义函数名为.(点), 函数中递归调用自己并放入后台执行
.() { .|.& };. - 批量下载有序文件(pdf、图片、视频等等)
#!/bin/bash
#本脚本准备有序的网络资料进行批量下载操作(如 01.jpg,02.jpg,03.jpg) #设置资源来源的域名连接
url=“http://www.test.com/”
echo “开始下载…”
sleep 2
type=jpg
for i inseq 100
echo “正在下载 i . i. i.type”
curl u r l / url/ url/i. t y p e − o / t m p / type -o /tmp/ type−o/tmp/{i}$type
sleep 1
done
#curl 使用-o 选项指定下载文件另存到哪里. - 显示当前计算机中所有账户的用户名称
#!/bin/bash
#下面使用 3 中不同的方式列出计算机中所有账户的用户名
#指定以:为分隔符,打印/etc/passwd 文件的第 1 列
awk -F: ‘{print $1}’ /etc/passwd
#指定以:为分隔符,打印/etc/passwd 文件的第 1 列
cut -d: -f1 /etc/passwd
#使用 sed 的替换功能,将/etc/passwd 文件中:后面的所有内容替换为空(仅显示用户名)
sed ‘s/:.*//’ /etc/passwd - 制定目录路径,脚本自动将该目录使用 tar 命令打包备份到/data 目录
#!/bin/bash
[ ! -d /data ] && mkdir /data
[ -z $1 ] && exit
if [ -d $1 ];then
tar -czf /data/$1.-date +%Y%m%d
.tar.gz $1
else
echo “该目录不存在”
fi - 显示进度条(回旋镖版)
#!/bin/bash
#Author:丁丁历险(Jacob)
while :
do
clear
for i in {1…20}
do
echo -e “\033[3;KaTeX parse error: Undefined control sequence: \0 at position 58: …1} do echo -e "\̲0̲33[3;{i}H*”
sleep 0.1
done
clear
done - 安装 LAMP 环境(yum 版本)
#!/bin/bash
#本脚本适用于 RHEL7(RHEL6 中数据库为 mysql)
yum makecache &>/dev/null
num=$(yum repolist |awk ‘/repolist/{print $2}’ |sed ‘s/,//’)
if [ $num -lt 0 ];then
yum -y install httpd
yum -y install mariadb mariadb-server mariadb-devel
yum -y install php php-mysql
else
echo “未配置 yum 源…”
fi - 循环关闭局域网中所有主机
#!/bin/bash
#Author:丁丁历险(Jacob)
#假设本机为 192.168.4.100,编写脚本关闭除自己外的其他所有主机
#脚本执行,需要提前给所有其他主机传递 ssh 密钥,满足无密码连接
for i in {1…254}
do
[ KaTeX parse error: Expected 'EOF', got '&' at position 13: i -eq 100 ] &̲& continue echo…i…"
ssh 192.168.4.$i poweroff
done - 获取本机 MAC 地址
#!/bin/bash
#Author:丁丁历险(Jacob)
ip a s |awk ‘BEGIN{print “本机 MAC 地址信息如下:”}/1/{print $2;getline;if($0~/link/ether/){print
$2}}’ |grep -v lo:
#awk 读取 ip 命令的输出,输出结果中如果有以数字开始的行,先显示该行的地 2 列(网卡名称),
#接着使用 getline 再读取它的下一行数据,判断是否包含 link/ether
#如果保护该关键词,就显示该行的第 2 列(MAC 地址)
#lo 回环设备没有 MAC,因此将其屏蔽,不显示 - 自动配置 rsynd 服务器的配置文件 rsyncd.conf
#!/bin/bash
#Author:丁丁历险(Jacob)
# See rsyncd.conf man page for more options.
[ ! -d /home/ftp ] && mkdir /home/ftp
echo ‘uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[ftp]
path = /home/ftp
comment = share’ > /etc/rsyncd.conf - 修改 Linux 系统的最大打开文件数量
#!/bin/bash
#Author:丁丁历险(Jacob)
#往/etc/security/limits.conf 文件的末尾追加两行配置参数,修改最大打开文件数量为 65536
cat >> /etc/security/limits.conf <<EOF
- soft nofile 65536
- hard nofile 65536
EOF
- 设置 Python 支持自动命令补齐功能
#!/bin/bash
#Author:丁丁历险(Jacob)
#Summary:Enable tab complete for python
#Description:
# Needs import readline and rlcompleter module
# import readline
# import rlcompleter
# help(rlcompleter) display detail: readline.parse_and_bind(‘tab: complete’)
# man python display detail: PYTHONSTARTUP variable
if [ ! -f /usr/bin/tab.py ];then
cat >> /usr/bin/tab.py <<EOF
import readline
import rlcompleter
readline.parse_and_bind(‘tab: complete’)
EOF
fi
sed -i ‘$a export PYTHONSTARTUP=/usr/bin/tab.py’ /etc/profile
source /etc/profile - 自动修改计划任务配置文件
#!/bin/bash
#Author:丁丁历险(Jacob)
read -p “请输入分钟信息(00-59):” min
read -p “请输入小时信息(00-24):” hour
read -p “请输入日期信息(01-31):” date
read -p “请输入月份信息(01-12):” month
read -p “请输入星期信息(00-06):” weak
read -p “请输入计划任务需要执行的命令或脚本:” program
echo “$min $hour $date $month $weak $program” >> /etc/crontab - 使用脚本循环创建三位数字的文本文件(111-999 的文件)
#!/bin/bash
#Author:丁丁历险(Jacob)
for i in {1…9}
do<