1、列举常见的内核参数以及参数的意义

内核把自己的大部分参数输出到/proc/sys目录中

    通过查看或修改对应的文件来查看或修改内核参数,而且修改的内核参数是即时生效的。但是这种修改内核参数的方法在下次开机后将会还原参数设置。
    要永久保持内核参数值,需要将参数设置写入/etc/sysctl.conf 文件中。注意设置参数的格式,比如/proc/sys/net/ipv4/ip_forward这个参数值设置为1的写法是 net.ipv4.ip_forward = 1。

常见的参数 	默认值 	参数的含义
net.ipv4.ip_forward 	0 	用于是否开启IP转发功能
net.ipv4.icmp_echo_ignore_all 	0 	用于是否开启禁止ping入的功能
vm.drop_caches 	0 	用于清理缓存的,就是free命令看到的cache/buffer项。1 清空page 2… 3 清空所有缓存

和启动相关的内核参数,文件是 /proc/cmdline

cat /proc/cmdline 
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=UUID=f544bfb5-0c16-49e7-834b-a105ad67b2da ro rhgb quiet


    修改启动的内核参数在 /etc/default/grub 文件中GRUB_CMDLINE_LINUX 行修改。
    参数还可以在 /usr/share/doc/kernel-doc-3.10.0/Documentation/kernel-parameters.txt 文档中查看,需要安装对应的包。

常见的参数 	参数的含义
rhgb 	开启开机启动动画,删除这个参数开机将没有动画,而是输出诊断信息
quiet 	不显示内核的诊断信息
net.ifnames=0 	网卡的命名方式使用传统方式命名
selinux=0 	关闭selinux

2、如何通过/proc查看top中展示的进程状态


top命令展示的进程状态有

  PID  USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 14793 root      20   0   58428   2232   1476 R   6.2  0.2   0:00.05 top
     1 root      20   0  193804   6924   4144 S   0.0  0.7   0:06.93 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd    


通过查看 /proc/[pid]/status 文件内容

    能够查看的进程状态 PID、USER、VIRT、RES、S、COMMAND
    对应的status行pid、uid、vmSize、VMRSS、State、Name

cat /proc/1/status 
Name:   systemd
Umask:  0000
State:  S (sleeping)
Tgid:   1
Ngid:   0
Pid:    1
PPid:   0
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 64
Groups:
VmPeak:   259340 kB
VmSize:   193804 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      6928 kB
VmRSS:      6924 kB
......



进程的优先级是查看 /proc/[pid]/oom_adj 文件

cat /proc/1/oom_adj 


至于CPU占有率是要通过复杂的计算得到

3、分别用while、for循环检测10.0.0.1/24网段存活的IP地址

方法一:

#!/bin/bash if [[ $@ != '1' ]] ;then echo "please input a IP" exit fi net=$(echo $1 | grep -oE '^.+.') declare -i i=2 declare -i sumup=0 declare -i sumdown=0 while ((i>1&&i<254));do ip=${net}$i if ping -n -c1 $ip &>/dev/null;then echo "the host $ip is up." let sumup++ else echo "the host $ip is down." let sumdown++ fi let i++ done echo "the sum of up host is $sumup" echo "the sum of down host is $sumdown" unset net unset ip unset i unset sumup unset sumdown

方法二:

#!/bin/bash if [[ $@ != '1' ]] ;then echo "please input a IP" exit fi net=$(echo $1 | grep -oE '^.+.') declare -i i=2 declare -i sumup=0 declare -i sumdown=0 for (( i=1; i<254; i++ ));do ip=${net}$i if ping -n -c1 $ip &>/dev/null;then echo "the host $ip is up." let sumup++ else echo "the host $ip is down." let sumdown++ fi let i++ done echo "the sum of up host is $sumup" echo "the sum of down host is $sumdown" unset net unset ip unset i unset sumup unset sumdown

4、说明initrd的作用

initrd 是一个cpio镜像,包含了一个最小的linux系统。用来解决在挂在根分区前要先加载支持根分区的文件系统模块,但是这个模块又要先挂载根分区才能访问的问题,initrd镜像包含了需要的各种模块。
使用命令 生成本机的initrd镜像

mkinitrd /boot/initramfs-3.10.0-862.el7.x86_64.img 3.10.0-862.el7.x86_64 



查看镜像的内容

cpio -tv < initramfs-3.10.0-957.el7.x86_64.img