我是靠谱客的博主 儒雅白开水,最近开发中收集的这篇文章主要介绍7.Linux系统启动流程及内核参数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、列举常见的内核参数以及参数的意义
内核的绝大部分参数都存在于目录/proc/sys中

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

常见的有以下几个:

参数默认值意义
net.ipv4.ip_forward:0核心转发功能
vm.drop_caches:0丢掉caches内存,即清理缓存
kernel.hostname:0主机机名;
net.ipv4.icmp_echo_ignore_all:0忽略所有ping操作;
rhgb0开启开机启动动画,删除这个参数开机将没有动画,而是输出诊断信息
quiet0不显示内核的诊断信息
net.ifnames0网卡的命名方式使用传统方式命名
selinux0关闭selinux
启动参数设置文件
[root@localhost net]# cat /proc/cmdline 
BOOT_IMAGE=/vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8

实时配置的内核参数只是暂时的,系统重启后就会消失,要想永久保存内核配置文件,需要将参数写入/etc/sysctl.conf 文件中

内核参数修改方式:
(1) sysctl命令:专用于查看或设定/proc/sys目录下参数的值;
sysctl [options] [variable[=value]]

命令意义
sysctl -a查看所有参数的设定值
sysctl +variablevariable可以表示net.ipv4.ip_forward的相关路径
sysctl -w variable=value修改内核参数值

(2) 文件系统命令(cat, echo)

命令意义
cat /proc/sys/FILE查看参数
echo “VALUE” > /proc/sys/FILE设定参数

注意:上述两种方式的设定仅当前运行内核有效;

(3) 配置文件:/etc/sysctl.conf, /etc/sysctl.d/*.conf (永久有效)
|立即生效的方式:

命令意义
sysctl -p +文件路径重读此配置文件

2、如何通过/proc查看top中展示的进程状态
top命令能够动态显示进程的相关信息

[root@localhost net]# top
top - 22:46:53 up  4:27,  2 users,  load average: 0.03, 0.03, 0.05
Tasks: 201 total,   1 running, 200 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  1.0 sy,  0.0 ni, 98.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1863252 total,   865220 free,   454476 used,   543556 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1149940 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND              
  6954 root      20   0  573712  42536  13884 S   2.3  2.3   0:47.70 containerd           
 11650 root      20   0       0      0      0 S   2.0  0.0   0:02.85 kworker/0:0          
 12884 root      20   0  162012   2340   1592 R   0.7  0.1   0:00.14 top                  
     9 root      20   0       0      0      0 S   0.3  0.0   0:13.01 rcu_sched            
  6551 root      20   0   21676   1300    988 S   0.3  0.1   0:09.11 irqbalance           
  6559 root      20   0   90392   3208   2340 S   0.3  0.2   0:05.04 rngd                 
  6633 root      20   0  115304    968    708 S   0.3  0.1   0:00.96 ksmtuned             
     1 root      20   0  128316   7028   4192 S   0.0  0.4   0:09.80 systemd  

进程的相关文件存在于/proc目录里面,每个进程都以自己的PID号创建了一个目录

[root@localhost proc]# ls
1      14    3105  5     6292  6568  7364  8049  9546         filesystems   partitions
10     16    3120  50    6293  6584  7370  8056  9550         fs            sched_debug
10370  1739  3123  51    6294  6589  7394  8059  9552         interrupts    schedstat
10371  1745  3143  5188  6297  6590  7484  8061  9699         iomem         scsi
10372  1751  3146  5191  6298  6598  749   8064  97           

例如1号进程,通过查看1号目录里的status文件可以得到进程的相关信息
进程的优先级则是查看 /proc/[pid]/oom_adj 文件

[root@localhost 1]# cat 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: 256
Groups:
VmPeak:   193852 kB
VmSize:   128316 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:      7028 kB
VmRSS:      7028 kB
RssAnon:            2836 kB
RssFile:            4192 kB
RssShmem:              0 kB
VmData:    84468 kB
VmStk:       132 kB
VmExe:      1412 kB
VmLib:      3724 kB
VmPTE:       124 kB
VmSwap:        0 kB
Threads:        1
SigQ:   0/7144
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 7be3c0fe28014a03
...............................................

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

for循环
#!/bin/bash
#
declare -i uphost=0
declare -i downhost=0
for i in {1..254};do
        if ping -w 1 -c 10.0.0.$i &>/dev/null;then
                echo "10.0.0.$1 is up!"
                uphost+=1
        else
                echo "10.0.0.$1 is down!"
                downhost+=1
        fi
done

echo "uphost:$uphost; downhost:$downhost"
while循环
#!/bin/bash
#
declare -i uphost=0
declare -i downhost=0
declare -i a=1
while [ $a -le 254 ]; do
        if ping -w 1 -c 10.0.0.$a &>/dev/null;then
                echo "10.0.0.$a is up!"
                uphost+=1
        else
                echo "10.0.0.$a is down!"
                downhost+=1
        a+=1
        fi
done
echo "uphost:$uphost; downhost:$downhost"

4、说明initrd的作用
initrd.img是一个小的映象,是一个ram disk镜像,包含一个最小的linux系统。步骤是先启动内核,然后内核挂载initrd.img,内核会将这个initrd文件作为其阶段引导过程的一部分来加载模块,这样才能在以后的引导过程中使用真正的文件系统,挂载实际的根文件系统,然后发现真正的root分区,挂载并执行/sbin/init。
主要用来解决在挂载根分区前要先加载支持根分区的文件系统模块,但是这个模块又要先挂载根分区才能访问的问题,initrd镜像包含了需要的各种模块。但他是非必须的文件。
mkinitrd:该命令用于重新创建ramdisk文件
mkinitrd [OPTION…] []

选项意义
–with=module除了默认的模块之外需要装载至initramfs中的模块;
–preload=moduleinitramfs所提供的模块需要预先装载的模块;
mkinitrd  /boot/initramfs-$(uname -r).img   $(uname -r)

最后

以上就是儒雅白开水为你收集整理的7.Linux系统启动流程及内核参数的全部内容,希望文章能够帮你解决7.Linux系统启动流程及内核参数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部