0.打印九九乘法表
[root@localhost ~]# more mul.sh
#!/bin/bash
for ((num=1; num<=9; num++ ))
do
for (( i=1; i<=num; i++ ))
do
echo -n " $i*$num=$((i*num))"
done
echo -e "\n"
done
效果图如下:
[root@localhost ~]# sh mul.sh
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
[root@localhost ~]#
1.批量生成随机字符文件名;在/tmp目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串tmp
apquvdpqbk_tmp.html
mktemp | awk -F. ‘{print $2}’,利用正则来生成也可
[root@localhost ~]# more html.sh
#!/bin/bash
for i in {1..10};
do
var=`mktemp | awk -F. '{print $2}' | tr "[A-Z]" "[a-z]" | tr "[1-9]" "[a-z]" `
mkdir -p /tmp/$var\_tmp.html
done
[root@localhost ~]# chmod u+x html.sh
[root@localhost ~]# sh html.sh
[root@localhost ~]# ls /tmp
betvutiwfl_tmp.html
bhoyrb0eit_tmp.htmll
cdgvrbqtud_tmp.html
ddcpgzbfgi_tmp.html
fkndgtj0cp_tmp.html
iiwkfbmbsh_tmp.html
tultpppxqz_tmp.html
vppeadnfrn_tmp.html
wfaiypytpu_tmp.html
wyeecmsjcr_tmp.html
[root@localhost ~]
2.批量修改名称,后缀修改为大写
apquvdpqbk_tmp.html —> apquvdpqbk_tmp.HTML
[root@localhost ~]# more name.sh
#!/bin/bash
for i in /tmp/*.html
do
var=`echo $i | awk -F. '{print $1}' `
mv $i $var.HTML
done
[root@localhost ~]# chmod u+x name.sh
[root@localhost ~]#sh name.sh
[root@localhost ~]ls /tmp
betvutiwfl_tmp.HTML
bhoyrb0eit_tmp.HTML
cdgvrbqtud_tmp.HTML
ddcpgzbfgi_tmp.HTML
fkndgtj0cp_tmp.HTML
...(后面省略)
[root@localhost ~]
3.批量创建10个系统帐号user01-user10并设置密码(密码为随机数,要求字符和数字等混合)
[root@localhost ~]# more uname.sh
#!/bin/bash
for i in {01..10}
do
useradd user$i
echo "[a-z]|[0-9]" | passwd --stdin user$i
done
[root@localhost ~]# sh uname.sh
[root@localhost ~]#more /etc /passwd
user01:x:1000:1000::/home/user1:/bin/bash
user02:x:1001:1001::/home/user2:/bin/bash
user03:x:1002:1002::/home/user3:/bin/bash
user04:x:1003:1003::/home/user4:/bin/bash
user05:x:1004:1004::/home/user5:/bin/bash
user06:x:1005:1005::/home/user6:/bin/bash
user07:x:1006:1006::/home/user7:/bin/bash
user08:x:1007:1007::/home/user8:/bin/bash
user09:x:1008:1008::/home/user9:/bin/bash
user10:x:1009:1009::/home/user10:/bin/bash
4.判断自己的网络里,当前在线的IP有多少
[root@localhost ~]# more ip.sh
#!/bin/bash
sum=0
for i in {1..254}
do
ping -c2 192.168.0.$i > /dev/null
if [ $? -eq 0 ]
then
sum=$[$sum+1]
echo "该ip地址192.168.0.$i在线"
else
echo "该ip地址192.168.0.$i不在线"
fi
done
echo "当前在线的ip有:$sum"
[root@localhost ~]# chmod u+x ip.sh
[root@localhost ~]# sh ip.sh
该ip地址192.168.0.1在线
该ip地址192.168.0.2不在线
该ip地址192.168.0.3不在线
该ip地址192.168.0.4不在线
该ip地址192.168.0.5不在线
...(后面省略)
当前在线的ip有:7
[root@localhost ~]#
5.计算1-100的和
方法一:
[root@localhost ~]# more sum1.sh
#!/bin/bash
for i in {1..100}
do
sum=$[$sum+$i]
done
echo $sum
[root@localhost ~]# chmod u+x sum1.sh
[root@localhost ~]# sh sum1.sh
5050
方法二:
[root@localhost ~]# more sum2.sh
#!/bin/bash
for ((i=1;i<=100;i++))
do
sum=$(($sum+$i))
done
echo $sum
[root@localhost ~]#
6.把/root/目录下的所有目录 拷贝到/tmp/目录下
[root@localhost ~]# tar -czvf /tmp/.tar.gz /root/*
7.判断输入的IP是否正确(x.x.x.x)
8.生成1-50内取随机数
$RANDOM
[root@localhost ~]# echo $(($RANDOM%50))
43
[root@localhost ~]#
9.每日生成一个文件,格式为2018-05-25-diskinfo.log, 并且把磁盘的使用情况写到到这个文件中
[root@localhost ~]# df -h > `date +%F`-diskinfo.log
[root@localhost ~]#ls
2018-11-14-diskinfo.log (其他文件省略)
[root@localhost ~]# more 2018-11-14-diskinfo.log
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 18G 5.4G 13G 30% /
devtmpfs 478M 0 478M 0% /dev
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 489M 6.8M 482M 2% /run
tmpfs 489M 0 489M 0% /sys/fs/cgroup
/dev/sda1 197M 103M 95M 53% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@localhost ~]#
10.http的access.log中访问量最多的5个ip
11.可以查看进程的内存占用大小,计算一下所有进程所占用内存大小的和
12.查看/var/log目录下的文件数
[root@localhost ~]# ls -aRl /var/log | grep '^-' | wc -l
38
[root@localhost ~]#
13.如果查看Linux系统每个ip的连接数
14.shell下生成32位随机密码
方法一:
[root@localhost ~]# openssl rand -base64 32
hdOtxo2KnR5Y0Vad4ghCyaVUs3NWt/z5POndOsEnD+8=
[root@localhost ~]#
方法二:
[root@localhost ~]# date | md5sum
a1852ca96cf07c5c4b6eb30c1db3122e -
15.简述Linux系统的开机启动顺序
第一步:开机自检
第二步:加载BIOS设置,选择启动盘。这是因为因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。在BIOS将系统的控制权交给启动硬盘第一个扇区之后,就开始由Linux来控制系统了。
第三步:加载磁盘中MBR中的grub
MBR(Master Boot Record):硬盘上第0磁道第一个扇区被称为MBR,即主引导分区,是启动盘的前512字节,里面存放了预启动信息和分区信息。前446个字节,即是grub引导程序后66个字节是分区表的信息。
第四步:加载Linux内核系统到内存当中,运行超级进程/sbin/init进程。在Linux系统中,init进程的进程号永远是1,也就是说,系统中的所有进程的父进程都是init进程。可以使用命令pstree进行查看。
第五步:加载配置文件。init程序启动之后,会读取/etc/inittab文件,来决定系统的运行级别,Linux系统的运行级别有7中,从0-6
# 0 - 关机模式(千万不要把initdefault设置为0 ,要不然你永远开不了机)
# 1 - 单用户模式 (此模式相当于救援模式,内核损坏,root忘记密码等可以使用此模式进行恢复。相当于windows下的安全模式)
# 2 - 多用户,但是没有NFS
# 3 - 完全多用户模式 (文本命令行界面,一般服务器都是此模式)
# 4 - 保留未使用
# 5 - 图形桌面(系统启动之后会进入到图形化桌面系统中)
# 6 - 重新启动(千万不要把initdefault设置为6 )
平时我们常用的也就是1,3,5。可以使用init 3 ,init 5进行切换。运行级别决定之后,加载相应的配置文件。第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等
第六步:加载内核模块,具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
第七步:根据运行级别,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
第八步:启动init.d下的系统进程
第九步:出现登录系统的画面。
Linux开启启动完成。
16.如何在文本里面进行复制、粘贴,删除行,删除全部,按行查找和按字母查找
复制:yy (行数yy) 粘贴:p
删除:dd (行数dd) 删除全部:rm -rf
查找:\+字母
17.如何手动安装grub
1. cd /boot/
2. rm -rf grub* #手动删除grub下的所有文件
3. 以光盘启动引导系统
①Boot-->CD-Rom Driver -->F10-->Yes
②Troubleshooting-->Rescue a Centos System
③enter-->continue-->enter
4. chroot /mnt/sysimage
5. ls /boot
6. grub2-mkconfig -o /boot/grub2/grub.cfg
(若无此目录,则创建 mkdir /boot/grub2
7.grub2-install /dev/sda
8. exit
9. reboot
10.Boot-->+Hard Drive-->F10-->Yes
18.显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行
[root@localhost ~]# more /etc/inittab | grep '^#*[[:space:]]\+[^[:space:]].*'
# inittab is no longer used when using systemd.
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
# To view current default target, run:
# systemctl get-default
# To set a default target, run:
# systemctl set-default TARGET.target
[root@localhost ~]#
cat /etc/grub2.cfg | grep “[[:space:]]+[[:space:]].*”
19.history命令显示具体时间
[root@localhost ~]# export HISTTIMEFORMAT='%F %T'
[root@localhost ~]# history
...
462 2018-11-14 15:49:44history
463 2018-11-14 15:50:02export HISTTIMEFORMAT='%F %T'
464 2018-11-14 15:50:09history
...
20.打印3天前的日期
[root@localhost ~]# date -d "3 day ago" +"%F"
2018-11-11
[root@localhost ~]#
21.一个目录中有很多文件,最快速度查看到最近更新的文件,如何看?
[root@localhost ~]# ls -lt
total 120
-rw-r--r-- 1 root root 441 Nov 14 15:12 2018-11-14-diskinfo.log
-rwxr--r-- 1 root root 72 Nov 14 15:04 sum2.sh
-rwxr--r-- 1 root root 65 Nov 14 15:00 sum1.sh
-rwxr--r-- 1 root root 169 Nov 14 14:57 sum.sh
-rwxr--r-- 1 root root 112 Nov 14 14:55 uname.sh
-rwxr--r-- 1 root root 98 Nov 14 14:42 name.sh
...(后面省略)
22.如何过滤出目录中的所有一级目录(不包含子目录,即只能是一级目录)
[root@localhost ~]# ls -al | grep '^d' | wc -l
3
[root@localhost ~]#