概述
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操作; |
rhgb | 0 | 开启开机启动动画,删除这个参数开机将没有动画,而是输出诊断信息 |
quiet | 0 | 不显示内核的诊断信息 |
net.ifnames | 0 | 网卡的命名方式使用传统方式命名 |
selinux | 0 | 关闭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 +variable | variable可以表示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=module | initramfs所提供的模块需要预先装载的模块; |
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
最后
以上就是儒雅白开水为你收集整理的7.Linux系统启动流程及内核参数的全部内容,希望文章能够帮你解决7.Linux系统启动流程及内核参数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复