文章目录 1. 删除某个目录下大小为 0 的文件 2. 查找 Linux 系统中的僵尸进程 3. 提示用户输入年份后判断该年是否为闰年 4. 生成随机密码(urandom 版本)
文章目录
- 1. 删除某个目录下大小为 0 的文件
- 2. 查找 Linux 系统中的僵尸进程
- 3. 提示用户输入年份后判断该年是否为闰年
- 4. 生成随机密码(urandom 版本)
- 5. 生成随机密码(字串截取版本)
- 6. 生成随机密码(UUID 版本,16 进制密码)
- 7. 生成随机密码(进程 ID 版本,数字密码)
- 8. 测试用户名与密码是否正确
- 9. 循环测试用户名与密码是否正确
- 10. Shell 脚本的 fork 炸弹
- 11. 批量下载有序文件(pdf、图片、视频等)
- 12. 显示当前计算机中所有账户的用户名称
- 13.指定目录路径,脚本自动将该目录使用 tar 命令打包备份到 /data 目录
- 14. 显示进度条(回旋镖版)
- 15. 安装 LAMP 环境(yum 版本)
- 16. 循环关闭局域网中所有主机
- 17. 获取本机 MAC 地址
- 18. 自动配置 rsynd 服务器的配置文件 rsyncd.conf
- 19. 修改 Linux 系统的最大打开文件数量
- 20. 设置 Python ⽀持⾃动命令补⻬功能
- 21. 自动修改计划任务配置文件
- 22. 使用脚本循环创建三位数字的文本文件(111-999的文件)
- 23. 找出 /etc/passwd 中能登录的用户,并将对应再 /etc/shadow 中第二列密码提出处理
- 24. 统计 /etc/passwd 中 root 出现的次数
- 25. 统计 Linux 进程相关数量信息
1. 删除某个目录下大小为 0 的文件
dir="/var/www/html"
find $dir -type f -size 0 -exec rm -rf {} \;
2. 查找 Linux 系统中的僵尸进程
ps aux | awk '{if($8 == "Z"){print $2, $11}}'
3. 提示用户输入年份后判断该年是否为闰年
read -p "请输入一个年份:" year
if [ "$year" = "" ]; then
echo "没有输入年份"
exit
fi
# 使用正则测试变量 year 中是否包含大小写字母
if [[ "$year" =~ [a-Z] ]]; then
echo "你输入的不是数字"
exit
fi
# 判断是否为闰年
if [ $[year % 4] -eq 0 ] && [ $[year % 100] -ne 0 ]; then
echo "$year年是闰年"
elif [ $[year % 400] -eq 0 ]; then
echo "$year年是闰年"
else
echo "$year年不是闰年"
fi
4. 生成随机密码(urandom 版本)
# /dev/urandom 文件是 Linux 内置的随即设备文件
# tr -dc '_A-Za-z0-9' < /dev/urandom 将随机文件中其它的字符删除,仅保留大小写字母,数字,下划线
# head 命令,显示头部 xx 字节
tr -dc '_A-Za-z0-9' < /dev/urandom | head -c 10
5. 生成随机密码(字串截取版本)
key="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
num=${#key}
#### 设置初始密码为空
pass=''
#### 循环 8 次,⽣成随机密码
#### 每次都是随机数对密码库的⻓度取余,确保提取的密码字符不超过密码库的⻓度
#### 每次循环提取⼀位随机密码,并将该随机密码追加到 pass 变量的最后
for i in {1..8}
do
index=$[RANDOM%num] pass=$pass${key:$index:1}
done
echo $pass
6. 生成随机密码(UUID 版本,16 进制密码)
uuidgen
7. 生成随机密码(进程 ID 版本,数字密码)
echo $$
8. 测试用户名与密码是否正确
#### 测试⽤⼾名与密码是否正确
#⽤⼾名为 tom 并且密码为 123456,则提⽰登录成功,否则提⽰登录失败
read -p "请输⼊⽤⼾名:" user
read -p "请输⼊密码:" pass
if [ "$user" == 'tom' -a "$pass" == '123456' ];then
echo "Login successful"
else
echo "Login Failed"
fi
9. 循环测试用户名与密码是否正确
#### 循环测试⽤⼾名与密码是否正确
#### 循环测试⽤⼾的账⼾名和密码,最⼤测试 3 次,输⼊正确提⽰登录成功,否则提⽰登录失败
#### ⽤⼾名为 tom 并且密码为 123456
for i in {1..3}
do
read -p "请输⼊⽤⼾名:" user
read -p "请输⼊密码:" pass
if [ "$user" == 'tom' -a "$pass" == '123456' ];then
echo "Login successful"
exit
fi
done
echo "Login Failed"
10. Shell 脚本的 fork 炸弹
# 快速消耗计算机资源,至使计算机死机
.(){ .|.& };.
11. 批量下载有序文件(pdf、图片、视频等)
#### 批量下载有序⽂件(pdf、 图⽚、 视频等等)
#### 本脚本准备有序的⽹络资料进⾏批量下载操作(如 01.jpg,02.jpg,03.jpg)
#### 设置资源来源的域名连接
url="http://www.baidu.com/" echo "开始下载..."
sleep 2
type=jpg
for i in `seq 100`
do
echo "正在下载$i.$type"
curl $url/$i.$type -o /tmp/${i}$type
sleep 1
done #curl 使⽤-o 选项指定下载⽂件另存到哪⾥.
12. 显示当前计算机中所有账户的用户名称
#### 显⽰当前计算机中所有账⼾的⽤⼾名称
#### 下⾯使⽤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
13.指定目录路径,脚本自动将该目录使用 tar 命令打包备份到 /data 目录
#### 制定⽬录路径,脚本⾃动将该⽬录使⽤ tar 命令打包备份到/data⽬录
[ ! -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
14. 显示进度条(回旋镖版)
#### 显⽰进度条(回旋镖版)
while :
do
clear
for i in {1..20}
do
echo ‐e "\033[3;${i}H*"
sleep 0.1
done
clear
for i in {20..1}
do
echo ‐e "\033[3;${i}H*"
sleep 0.1
done
clear
done
15. 安装 LAMP 环境(yum 版本)
#### 安装 LAMP 环境(yum 版本)
#### 本脚本适⽤于 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
16. 循环关闭局域网中所有主机
#### 循环关闭局域⽹中所有主机
#### 假设本机为 192.168.4.100,编写脚本关闭除⾃⼰外的其他所有主机
#### 脚本执⾏,需要提前给所有其他主机传递 ssh 密钥,满⾜⽆密码连接
for i in {1..254}
do
[ $i -eq 100 ] && continue
echo "正在关闭 192.168.4.$i..."
ssh 192.168.4.$i poweroff
done
17. 获取本机 MAC 地址
#### 获取本机 MAC 地址
ip a s | awk 'BEGIN{print " 本 机 MAC 地 址 信 息 如 下 :"}/^[0‐9]/{print $2;getline;if($0~/link\/ether/){print $2}}' | grep -v lo:
#### awk 读取 ip 命令的输出,输出结果中如果有以数字开始的⾏,先显⽰该⾏的地 2 列(⽹卡名称), #### 接着使⽤ getline 再读取它的下⼀⾏数据,判断是否包含 link/ether
#### 如果保护该关键词,就显⽰该⾏的第 2 列(MAC 地址)
#### lo 回环设备没有 MAC,因此将其屏蔽,不显⽰
18. 自动配置 rsynd 服务器的配置文件 rsyncd.conf
#### 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
19. 修改 Linux 系统的最大打开文件数量
#### 修改 Linux 系统的最⼤打开⽂件数量
#### 往/etc/security/limits.conf ⽂件的末尾追加两⾏配置参数,修改最⼤打开⽂件数量为 65536 cat >> /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* EOF
20. 设置 Python ⽀持⾃动命令补⻬功能
#### 设置 Python ⽀持⾃动命令补⻬功能
#### 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
21. 自动修改计划任务配置文件
#### ⾃动修改计划任务配置⽂件
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
22. 使用脚本循环创建三位数字的文本文件(111-999的文件)
for i in {1..9} do
for j in {1..9} do
for k in {1..9} do
touch /tmp/$i$j$k.txt
done
done
done
23. 找出 /etc/passwd 中能登录的用户,并将对应再 /etc/shadow 中第二列密码提出处理
user=$(awk -F: '/bash$/{print $1}' /etc/passwd)
for i in $user
do
awk -F: -v x=$i '$1==x{print $1,$2}' /etc/shadow
done
24. 统计 /etc/passwd 中 root 出现的次数
#### 统计/etc/passwd 中 root 出现的次数
# 每读取⼀⾏⽂件内容,即从第 1 列循环到最后 1 列,依次判断是否包含 root 关键词,如果包含则 x++ awk -F: '{i=1;while(i<=NF){if($i~/root/){x++};i++}} END{print "root 出现次数为"x}' /etc/passwd
25. 统计 Linux 进程相关数量信息
#### 统计 Linux 进程相关数量信息
running=0
sleeping=0
stoped=0
zombie=0
#### 在 proc ⽬录下所有以数字开始的都是当前计算机正在运⾏的进程的进程 PID
#### 每个 PID 编号的⽬录下记录有该进程相关的信息
for pid in /proc/[1‐9]*
do
procs=$[procs+1]
stat=$(awk '{print $3}' $pid/stat)
#### 每个 pid ⽬录下都有⼀个 stat ⽂件,该⽂件的第 3 列是该进程的状态信息
case $stat in
R)
running=$[running+1]
;;
T)
stoped=$[stoped+1]
;;
S)
sleeping=$[sleeping+1]
;;
Z)
zombie=$[zombie+1]
;;
esac
done
echo "进程统计信息如下"
echo "总进程数量为:$procs"
echo "Running 进程数为:$running"
echo "Stoped 进程数为:$stoped"
echo "Sleeping 进程数为:$sleeping"
echo "Zombie 进程数为:$zombie"