【无标题】

目录

1.linux 挂载windows 下的共享目录

2.查看 http 的并发请求数与其 TCP 连接状态

3、用 tcpdump 嗅探 80 端口的访问看看谁最高

4、查看/var/www/html/目录下文件数

5、查看当前系统每个 IP 的连接数(访问本机的远程主机数量)

6、shell 下 32 位随机密码生成

7.统计出apache的access.log中访问量最多的5个IP

8、如何查看二进制文件的内容

9、ps aux 中VSZ代表什么意思 ,RSS代表什么

10、检测并修复/dev/hda5

11、Linux 系统的开机启动顺序

12、符号链接和硬链接的区别:

13、保存当前磁盘分区的分区表

14、检测并自动修复文件系统:

15、手动安装grub

16、改内核参数

17、在指定范围内取随机数

18、限定apache的HTTP服务器:每秒钟连接数为1,峰值为3

19、FTP 的主动模式和被动模式

20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行

22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用:

23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符:

24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线:

25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入 Q 或者 q 无视错误并退出其它任何键可以通过 vim 打开这个指定的脚本

26.写一个脚本:(26 包括 3 个小题)

27、写一个脚本:(27 包括 2 个小题)


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、调用此函数;并通过接收函数执行的返回值来判断其执行情况,并将信息显示出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值