目录
5、查看当前系统每个 IP 的连接数(访问本机的远程主机数量)
7.统计出apache的access.log中访问量最多的5个IP
18、限定apache的HTTP服务器:每秒钟连接数为1,峰值为3
20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行
22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用:
23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符:
24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线:
25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入 Q 或者 q 无视错误并退出其它任何键可以通过 vim 打开这个指定的脚本
1.linux 挂载windows 下的共享目录
linux挂载在windows上
2.查看 http 的并发请求数与其 TCP 连接状态
yum install net-tools -y
netstat -n | awk '/^tcp/ {++b[$NF]} END {for(a in b) print a, b[a]}'
SYN_SENT 套接字正在试图主动建立连接[发送SYN后还没有收到ACK]
SYN_RECV 正在处于连接的初始同步状态[收到对方的SYN,但还没收到自己发过去的SYN的ACK]
ESTABLISHED 正常数据传输状态,连接已建立
FIN_WAIT_1 套接字已关闭,正在关闭连接[发送FIN,没有收到ACK也没有收到FIN]
FIN_WAIT_2 套接字已关闭,正在等待远程套接字关闭[在FIN_WAIT_1状态下收到发过去FIN对应的ACK]
TIME_WAIT 这个套接字已经关闭,正在等待远程套接字的关闭传送[FIN、ACK、FIN、ACK都完毕,这是主动方的最后一个状态,在过了2MSL时间后变为CLOSED状态]
还有 ulimit -n 查看 linux 系统打开最大的文件描述符,这里默认 1024,不修改这里 web 服务器修改再大也没用。若要用就修改很几个办法,这里说其中一个:
vi /etc/security/limits.conf
* soft noproc 11000
* hard noproc 11000
* soft nofile 4100
* hard nofile 4100
重启电脑生效
#说明:* 代表针对所有用户,noproc 是代表最大进程数,nofile 是代表最大文件打开数
ulimit -n
3、用 tcpdump 嗅探 80 端口的访问看看谁最高
yum install tcpdump -y
tcpdump -i ens33 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -20
1)tcpdump -i eth0 -tnn dst port 80 -c 1000:统计本机中目标端口为80的数据包,-tnn:直接以IP及port number显示,而非主机名与服务名称,并且不显示时间戳。-c 1000:统计1000个数据包。
2)awk -F"." '{print$1"."$2"."$3"."$4}':对tcpdump的输出一行一行得进行处理,以.作为分隔域,将远程主机IP依次打印出来。
3)sort:对输出的访问端IP进行排序。
4)uniq –c:将相同行合并,并统计相同行的数量。
5)sort –nr:以相同行数量进行排序,反向排序,最大的放在最前面。
6)head -20:提取前20行。
4、查看/var/www/html/目录下文件数
ls /var/www/html/ -lR | grep "^-" | wc -l
find /var/www/html/ -type f | wc -l
# find / -type f:找出根目录下,一般文件。
# wc –l:统计行数。
5、查看当前系统每个 IP 的连接数(访问本机的远程主机数量)
yum install net-tools -y
netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' | sort | uniq -c | sort -rn
1)netstat –n:列出本机的所有网络连接,包括TCP/UDP和Unix socket两部分。
2)awk '/^tcp/ {print $5}':/^tcp/:条件是以tcp开头的行,^:在此处代表行首的意思。{print $5:将第5个字段打印出来,代表远程主机的IP和port,默认是以tab作为分隔域。
3)awk -F: '{print $1}':“-F:”:以:作为分隔域;打印第一个字段,将port去掉,只显示IP。
4)sort:将IP进行排序。
5)uniq –c:将相同行合并,并统计相同行的数量。
6)sort –nr:以相同行数量进行排序,反向排序,最大的放在最前面。
6、shell 下 32 位随机密码生成
cat /proc/sys/kernel/random/uuid | md5sum | cut -c 1-32 >> pass
# cat /proc/sys/kernel/random/uuid:读取UUID码文件,每次获得的数据都会不同,为8-4-4-4-12形式数字加字母的字符串。
# md5sum :将UUID码转换为MD5码;
# cut –c 1-32:选取每行中的1-32字符的内容。
7.统计出apache的access.log中访问量最多的5个IP
cat /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -n -r | head -5
# head -5:前五个
8、如何查看二进制文件的内容
hexdump -C XXX(文件名)
# -C 是比较规范的 十六进制和 ASCII 码显示
# -c 是单字节字符显示
# -b 单字节八进制显示
# -o 是双字节八进制显示
# -d 是双字节十进制显示
# -x 是双字节十六进制显示
9、ps aux 中VSZ代表什么意思 ,RSS代表什么
ps aux:查看系统正在运行的所有进程。
[1]a:显示所有与终端相关的进程,由终端发起的.
[2]x:显示所有与终端无关的进程.
[3]u:显示用户导向的用户列表.
1)VSZ:虚拟内存集,进程占用的虚拟内存空间
2)RSS:物理内存集,进程占用实际物理内存空间.
3)S:可中断的睡眠态
4)R:运行态
5)D:不可中断的睡眠态
6)T:停止态
7)Z:僵死态
10、检测并修复/dev/hda5
umount /dev/hda5
e2fsck -p /dev/hda5
mount /dev/hda5
# -p:不询问使用者意见,便自动修复文件系统;检测并修复完毕后,记得再重新挂载/dev/hda5。
11、Linux 系统的开机启动顺序
加载 BIOS –> 读取 MBR –> Boot Loader –> 加载内核
–> 用户层 init 一句 inittab 文件来设定系统运行的等级(一般 3 或者 5,3 是多用户命令行,5 是界面)
–> init 进程执行 rc.syninit –> 启动内核模块 –> 执行不同级别运行的脚本程序
–> 执行/etc/rc.d/rc.local(本地运行服务) –> 执行/bin/login,就可以登录了。
开机顺序:
1)BIOS程序读取CMOS上的信息到内存中,取得各项硬件的参数,对硬件进行检测和初始化(POST,Power-on self-test,加电自检),并决定启动设备次序。
2)BIOS读取MBR中的引导装载程序(boot loader)到内存中。
3)引导装载程序将内核文件读入内存,内核加载后,重新检测硬件并加载各硬件的驱动程序,使硬件准备就绪!
4)运行第一个进程initrd,并逐步启动各种服务。
5)此外,如果是多系统主机,还包括引导加载程序和grub的内容。每个分区也会有引导扇区(boot sector),用于完成多重引导功能。
12、符号链接和硬链接的区别:
我们可以把符号链接,也就是软连接:当做是windows系统里的快捷方式。
硬链接:就好像是又复制了一份。
ln -s 3.txt 4.txt 这是软连接,相当于快捷方式。修改 4,3也会跟着变,若删除3,4就坏掉了。不可以用了。
ln 3.txt 4.txt 这是硬链接,相当于复制,不可以跨分区,但修改3,4会跟着变,若删除3,4不受任何影响。
13、保存当前磁盘分区的分区表
sfdisk -d /dev/sda
14、检测并自动修复文件系统:
e2fsck -f/-p check[a Linux ext2/ext3 file system]
-B 指定块大小
-f 强制检测.
-p 自动修复文件系统
15、手动安装grub
grub2-install /dev/sda1
16、改内核参数
vi /etc/sysctl.conf #这里修改参数
sysctl -p #刷新后可用
-p 不用重启系统,让内核重读/etc/sysctl.conf文件
-a 显示所有内核参数及其正在使用的值.
-w 临时设置/etc/sysctl.conf参数sysctl -w net.ipv4.ip_froward=0
17、在指定范围内取随机数
#在1到100之间取一个数:
expr $[$RANDOM%100] + 1
#对100进行取余,余数肯定是100以内的数字:
echo $[$RANDOM%100]
18、限定apache的HTTP服务器:每秒钟连接数为1,峰值为3
#每秒新建连接数 一般都是由防火墙来做,apache 本身好像无法设置每秒新建连接数,只能设置最大连接:
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second --limit-burst 3 -j ACCEPT
–A INPUT:新增加一条INPUT表格规则。
–d 172.16.100.1:目标主机的IP即本机。此处也可换乘-i
eth0:eth0为HTTP的对外网卡,表示想要进入此网卡的数据包。
–p tcp --dport 80:tcp协议,目标端口为80。
–m limit --limit 1/second –limit-burst 3:限制每秒钟连接数为1,峰值为3。
–j ACCEPT:操作为接受。
19、FTP 的主动模式和被动模式
FTP 协议有两种工作方式:PORT (主动模式)方式和 PASV (被动模式)方式:
1.主动模式
1)客户端随机启动一个大于1024的端口A,和FTP服务器端的命令端口21,经过三次握手后,建立命令传送通道。
2)客户端再启动一个端口(端口号为:A+1),并通过命令传送通道,告知服务器端。
3)服务器端接受到端口后(A+1),就主动通过20端口和客户端A+1端口进行三次握手连接,建立数据传送通道。
4)但是由于客户端可能存在防火墙的原因,使得服务器端无法连接到客户端的A+1端口,这就产生了被动连接模式了。
2.被动模式
1)客户端随机启动一个大于1024的端口A,和FTP服务器端的端口21,经过三次握手后,建立命令传送通道。
2)服务器端随机启动一个端口B,并通过命令传送通道告知客户端。
3)客户端接受到端口后(B),就启动端口(A+1),和服务器端的B端口经过三次握手连接,建立数据传送通道
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。
20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行
grep "^# \{1,\}[^ ]" /etc/inittab
grep "^\#[[:space:]]\{1,\}.\{1,\}" /etc/inittab
^: 行首;\#:转义字符;[[:space:]]\{1,\}:代表一个或多个空白字符。
.\{1,\}:.: 代表一定有一个任意字符。
21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行:
grep "\:[0-9]\:" /etc/inittab
[0-9]:代表一定有0-9中的一个数字,
22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用:
1)编写测试脚本test
#!/bin/bash
#!chkconfig: - 90 10
#!description: just a test
echo "Hello,$1"
2)使脚本能够被service命令调用
[1]mv test /etc/init.d/:将脚本放置到stand alone目录下。
[2]chmod +x /etc/init.d/test:对文件添加x权限,代表可执行。
[3]chkconfig --add test:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
[4]service test start
:开机系统服务“test”。
23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符:
vim useradd.sh
#!/bin/bash
time=$( date )
echo "$time" >> ./userlist.out
for i in {1..20};
do
pass=$( cat /proc/sys/kernel/random/uuid | md5sum | cut -c 1-5 )
useradd user${i}
echo user$pass | passwd --stdin user${i}
echo "user${i} <=============> $pass">> ./userlist.out
done
echo -e "\n" >> ./userlist.out
echo 'Sucess,passwd is in userlist.out':添加成功。
方法二:
#!/bin/bash
#description: useradd
for i in `seq -f"%02g" 1 3`;
do
useradd user$i
pass=$(echo $RANDOM | md5sum | cut -c 1-5)
echo user$pass | passwd --stdin user$i >/dev/null 2>&1
echo "user${i} <=============> user$pass">> ./userlist.out
done
24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线:
vim ping_online.sh
#!/bin/bash
time=$( date )
echo "$time" >> ping_uplog.txt
ips="172.25.250."
for i in {1..254}; do
ping -W 1 -c 1 ${ips}${i} &>/dev/null && echo "${ips}${i} is up" | tee -a ping_uplog.txt || echo "${ips}${i} is down"
done
echo -e "\n" >> ping_uplog.txt
echo '查询完成,日志在 ping_uplog.txt '
25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入 Q 或者 q 无视错误并退出其它任何键可以通过 vim 打开这个指定的脚本
vim checksh.sh
#!/bin/bash
read -p "please input check script-> " file
if [ -f $file ]; then
sh -n $file > /dev/null 2>&1
if [ $? -ne 0 ]; then
read -p "You input $file syntax error,[输入q或者Q退出 或者 输入vim进入编辑]:" answer
case $answer in
q | Q)
exit 0
;;
vim )
vim $file
;;
*)
exit 0
;;
esac
fi
else
echo "$file not exist"
exit 1
fi
26.写一个脚本:(26 包括 3 个小题)
1、创建一个函数,能接受两个参数:
1) 第一个参数为 URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2) 如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个 51 的错误值给调用脚本;
3) 如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回 0 给调用脚本,否则,返回 52 给调用脚本;
vim downfile.sh
#!/bin/bash
read -p "请输入url链接: " url
read -p "请输入保存到: " dir
download()
{
if [[ ! -d $dir ]];then
read -p "$dir 没有这样的目录,是否创建?(y/n):" answer
if [[ "$answer" == "y" ]];then
mkdir -p $dir
else
echo "目录不存在!"
return "51"
fi
fi
cd $dir && wget $url >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "下载失败!"
return "52"
fi
echo "下载成功,$dir"
return 0
}
download $url $dir
echo $?
27、写一个脚本:(27 包括 2 个小题)
1、创建一个函数,可以接受一个磁盘设备路径(如/dev/sdb)作为参数;在真正开始后面步骤之前提醒用户有危险,并让用户选择是否继续;而后将此磁盘设备上的所有分区清空(提示,使用命令 dd if=/dev/zero of=/dev/sdb bs=512 count=1 实现,注意其中的设备路径不要写错了;
如果此步骤失败,返回 67 给主程序;
接着在此磁盘设备上创建两个主分区,一个大小为 100M,一个大小为 1G;如果此步骤失败,返回 68 给主程序;
格式化此两分区,文件系统类型为 ext3;如果此步骤失败,返回 69 给主程序;
如果上述过程都正常,返回 0 给主程序;
2、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来