我是靠谱客的博主 儒雅白开水,这篇文章主要介绍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
复制代码
1
2
3
4
启动参数设置文件 [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命令能够动态显示进程的相关信息

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[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号创建了一个目录

复制代码
1
2
3
4
5
6
7
[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 文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[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地址

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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"
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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所提供的模块需要预先装载的模块;
复制代码
1
2
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

最后

以上就是儒雅白开水最近收集整理的关于7.Linux系统启动流程及内核参数的全部内容,更多相关7内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部