同步操作将从 baoke/Linux学完就忘系列 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
CentOS启动流程:POST-->Bootloader(BIOS,MBR)-->Kernel(initrd)-->rootfs-->switch_root-->/sbin/init
root (hd0,0)
kernel
initrd
打印应用程序所依赖到的库文件(二进制程序文件所依赖到的库);
ldd [OPTION]... FILE...
#打印ls的所依赖到的库
ldd /bin/ls
#仅获取各库文件的路径,-o:代表只匹配正则匹配到的文本,而非整行
ldd /bin/ls | grep -o "/lib[^[:space:]]*"
Linux:单内核设计,但充分借鉴了微内核体系的设计的优点;为内核引入了模块化机制;
内核的组成部分:
kernel:内核核心,一般为bzimage,通常位于/boot目录,名称为vmlinuz-VERSION-release;
kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/
内核模块与内核核心版本一定要严格匹配;
[ ]:N,不编译此内核模块;
[M]:Module,用到时临时装载;
[*]:Y,编译进内核核心;
内核:动态装载和卸载;
ramdisk:辅助性文件,并非必须,这取决于内核是否能直接驱动rootfs所在的设备;
目标设备驱动,例如:SCSI设备的驱动;
逻辑设备驱动,例如LVM设备的驱动;
文件系统,例如xfs文件系统;
ramdisk:是一个简装版的根文件系统;
print system information
内核对应文件:/boot/vmlinuz-VERSION-release
uname [OPTION]...
-r:内核的release号
-n:主机名
-v:操作系统编译版本号(和程序版本号是两回事)
-a:显示所有信息
#内核的release号
uname -r
#主机名
uname -n
#操作系统编译版本号
uname -v
Show the status of modules in the Linux Kernel
显示的内容来自于/proc/modules
三个字段:
Module:模块名称
Size:模块大小
Used by:被引用次数以及被什么模块所引用
lsmod
用于显示指定Linux模块的详细信息
#显示ext4模块的详细信息
modinfo ext4
#未被加载的btrfs模块也能使用modinfo查看详细信息
lsmod | grep btrfs
modinfo btrfs
内核中模块的动态装卸载
modprobe [-r] module_name
不带-r表示装载模块,带-r表示卸载模块
#装载btrfs模块
modprobe btrfs
#查找btrfs是否装载
lsmod | grep btrfs
#卸载btrfs模块,注:对正在使用的内核模块,不要轻易去卸载它
modprobe -r btrfs
内核模块依赖关系文件及系统信息映射文件的生成工具;
insmod [filename] [module options...]
filename:模块文件的路径;
#查看btrfs文件路径
modinfo -n btrfs
#查看依赖关系
modinfo -F depends btrfs
#insmod无法解决依赖关系,所以需要先插入依赖模块;`modinfo -n raid6_pq`:引用命令结果的方式
insmod `modinfo -n raid6_pq`
insmod `modinfo -n xor`
insmod `modinfo -n btrfs`
#查看
lsmod | grep btrfs
rmmod btrfs
为当前使用中的内核重新制作ramdisk文件:
mkinitrd [OPTION...] []
--with=:除了默认的模块之外需要装载至至initramfs中的模块;
--preload=:initramfs所提供的模块需要预先装载的模块;
#移动或删除之后,下次重启系统之后发现系统启动不了了,这里面拥有装载根文件系统所在设备的驱动和文件系统
mv /boot/initramfs-3.10.0-957.12.1.el7.x86_64.img /tmp
#为了避免下次重启系统启动不了,我们可以重新创建它,指定创建文件名和内核版本;过程需要消耗一点时间
mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
#查看
ls /boot/
较为底层的用于生成ramdisk文件的命令
dracut [OPTION...] [ []]
#删除ramdisk文件
rm /boot/initramfs-3.10.0-957.12.1.el7.x86_64.img
#重新创建
dracut /boot/initramfs-$(uname -r).img $(uname -r)
#查看
ls /boot/
/proc目录:内核状态和统计信息的输出接口;同时,还提供一个配置接口,/proc/sys;
参数:
只读:信息输出;例如/proc/#/* (只是用来输出进程的相关信息)
可写:可接受用户指定一个"新值"来实现对内核某功能或特性的配置; /proc/sys/
/proc/sys:
net/ipv4/ip_forward 相当于 net.ipv4.ip_forward
专用于查看或设定/proc/sys目录下参数的值;
sysctl [options] [variable[=value]] [...]
查看:
sysctl -a
sysctl variable
cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
#显示所有的可配置的内核参数
sysctl -a
#查看某个内核参数的值
sysctl net.ipv4.ip_forward
#修改某个内核参数的值;-w选项就是write
sysctl -w net.ipv4.ip_forward=1
#查看对应的伪文件系统的文件
cat /proc/sys/net/ipv4/ip_forward
#修改主机名
sysctl -w kernel.hostname=www.abc.com
#查看的三种方式
cat /proc/sys/kernel/hostname
uname -n
hostname
查看:
cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
设定:
echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE
#设置内核参数主机名为node1
echo "node1" > /proc/sys/kernel/hostname
#查看
uname -n
cat /proc/sys/kernel/hostname
注意:上述两种方式的设定仅当前运行内核有效;
使用配置文件永久有效
使配置文件立即生效:sysctl -p [/PATH/TO/CONFIG_FILE]
vim /etc/sysctl.conf 加入以下内核参数:
net.ipv4.ip_forward=1
#重新加载sysctl.conf文件,-p不指定任何配置文件默认重启加载sysctl.conf文件
sysctl -p
#查看
cat /proc/sys/net/ipv4/ip_forward
内核参数:
kernel.hostname:主机名;
net.ipv4.ip_forward:核心转发;
vm.drop_cache:手动清除缓存,回收内存;
net.ipv4.icmp_echo_ignore_all:忽略所有发往本主机的ping操作;
#关闭ping功能
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
/sys目录:
sysfs:输出内核识别出的个硬件设备的相关属性信息,也有内核对硬件特性的可设置参数;对此些参数的修改,即可定制硬件设备工作特性;
udev:通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件;udev是用户空间程序;专用工具:devadmin,hotplug;
udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/目录下,以及/usr/lib/udev/rule.d目录下;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。