/proc目录
1 内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出;(进程)
2 参数
只读:输出信息
可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
3 /proc/sys
(1) sysctl 命令用于查看或设定此目录中诸多参数 (存不住盘)
/net/ipv4/ip_forward = net.ipv4.ip_forward (/ 变为 .)
sysctl -w path.to.parameter=VALUE
sysctl -w kernel.hostname=mail.magedu.com
(2) echo命令通过重定向方式也可以修改大多数参数的值 (存不住盘)
echo "VALUE" > /proc/sys/path/to/parameter
echo “websrv” > /proc/sys/kernel/hostname
4 sysctl命令
更改/proc/sys目录下的相关文件
默认配置文件:/etc/sysctl.conf(默认值文件)
(1) 设置某参数
sysctl -w parameter=VALUE
(2) 通过读取配置文件设置参数(使更改生效)
sysctl -p [/path/to/conf_file]
(3) 查看所有生效参数
sysctl -a
5 常用的几个参数
net.ipv4.ip_forward
net.ipv4.icmp_echo_ignore_all(禁ping)
vm.drop_caches(管理缓存)
6 vim /etc/sysctl.conf
net.ipv4.icmp_ignore_all 此参数本来不存在,但可以添加
删除此选项后,sysctl -p 生效;还是ping不通;
原因:已设置默认值为1,即使删除此选项,并未更改此默认值;
sysctl -p 只是重读/etc/sysctl.conf,原文件参数不存在,就默认还是原来的值;但是重启就恢复了最初系统默认值;
7 与centos7做比较
ll /etc/sysctl.conf; cat /etc/sysctl.conf /etc/sysctl.conf文件内容减少
8 经常需要更改/etc/sysctl.conf文件
9 sysctl -a 查看所有生效参数
arp_ignore:忽略、不响应,拿到一个ip地址、不说,对方不知道你拿到了这个ip;
/sys目录
1 sysfs
用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;
有些参数是可以修改的,用于调整硬件工作特性;
2 udev
通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序;
3 专用工具:udevadmin, hotplug(使更改的策略生效)
4 udev为设备创建设备文件时,会读取其事先定义好的规则文件;
一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下;
硬件设备的名称可以根据规则来更改 如:更改网卡名称 定义一个规则,影响设备名称
cat /etc/udev/rules.d/70-persistent-cd.rules 参考旧文件来编辑新文件
== 比较 = 赋值
SYMLINK="fengusb" 软连接,生成/dev/fengusb
增加新磁盘
内核 kernel
物理上,与硬件打交道是内核,不是软件;
模块:声卡、显卡驱动......
编译安装 apache http,有些功能启用,有些可以不启用;内核也是一样;
如:防火墙设计——底层linux内核——根据所需编译安装内核,不需要的就删除;
1 内核组成部分
kernel: 内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE
kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]: N [M]: M [*]: Y
辅助文件:ramdisk initrd initramfs
2 运行中的内核
uname命令
uname [OPTION]...
-n: 显示节点名称;主机名
-r: 显示VERSION-RELEASE;
-a:显示所有信息
lsmod命令
显示由核心已经装载的内核模块
显示的内容来自于: /proc/modules文件
modinfo命令
显示模块的详细描述信息
modinfo [ -k kernel ] [ modulename|filename... ]
-n: 只显示模块文件路径
-p: 显示模块参数
-a: author
-d: description
-l: license
lsmod|grep xfs; modinfo xfs
modprobe命令(不用写路径)
装载或卸载内核模块
modprobe [ -C config-file ] [ modulename] [ module parame-ters... ]
配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf(更改配置文件的参数,然后用上面的命令加载,即可使更改的参数生效)
modprobe[ -r ] modulename...
卸载——从内存移除
加载——加到内存里
depmod命令
内核模块依赖关系文件及系统信息映射文件的生成工具
装载或卸载内核模块:
insmod命令:指定模块文件,不自动解决依赖模块
insmod [ filename ] [ module options... ] (写路径)
insmod `modinfo–n exportfs`
insmod `modinfo–n xfs`
rmmod命令:卸载模块
rmmod [ modulename]
rmmod xfs
rmmod exportfs
centos6上无xfs工具,在centos6上创建xfs分区
思路:从centos7上取下xfs分区,放到centos6上
1 手工添加新磁盘 20G
2 fdisk /dev/sdb 分1G
3 mkfs.xfs /dev/sdb1; sync; blkid;
4 取下磁盘,安装在centos6上;
centos6上操作
5 modprobe xfs;
6 yum -y install xfsprogs
7 mkfs.xfs -f /dev/sdb1
8 mkdir /mnt/xfs; mount /dev/sdb1 /mnt/xfs; df
编译内核
1 前提
(1) 准备好开发环境
(2) 获取目标主机上硬件设备的相关信息
(3) 获取目标主机系统功能的相关信息
例如:需要启用相应的文件系统
(4) 获取内核源代码包
www.kernel.org
2 包组(CentOS 6)
Server Platform Development
Development Tools
3 目标主机硬件设备相关信息
CPU:
#cat /proc/cpuinfo
#x86info -a
#lscpu
4 PCI设备
lspci(查看PCI接口的设备、网卡)
-v
-vv
lsusb(查看U盘)
-v
-vv
lsblk块设备
5 列出全部硬件设备信息
hal-device(CentOS6)
ethtool -i eth0; modinfo e1000
内核编译安装系统
1 流程
(1)下载源码文件
(2)安装开发包组
(3).config:准备文本配置文件
(4)make menuconfig:配置内核选项
(5)make -j # (#是cpu的数量)
(6)make modules_install:安装模块
(7)make install :安装内核相关文件
安装/boot/vmlinuz-VERSION-RELEASE
生成initramfs文件
编辑grub的配置文件
2 配置内核选项
支持“更新”模式进行配置:make help
(a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
(b) make menuconfig:基于curses的文本窗口界面(建议使用)
(c) make gconfig:基于GTK (GNOME)环境窗口界面
(d) make xconfig:基于QT(KDE)环境的窗口界面
支持“全新配置”模式进行配置
(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
(b) make allyesconfig: 所有选项均回答为“yes“
(c) make allnoconfig: 所有选项均回答为"no“
3 编译
全编译:make -j #
编译内核的一部分功能:
(a) 只编译某子目录中的相关代码
cd /usr/src/linux (/usr/src是存放解包后的内核文件的路径,可以自定义,前提是空间足够大;)
make dir/
(b) 只编译一个特定的模块
cd /usr/src/linux
make dir/file.ko
例如:只为e1000编译驱动:
make drivers/net/ethernet/intel/e1000/e1000.ko
4 如何交叉编译内核
编译的目标平台与当前平台不相同
make ARCH=arch_name
5 要获取特定目标平台的使用帮助
make ARCH=arch_name help
make ARCH=arm help
6 在已经执行过编译操作的内核源码树做重新编译
需要事先清理操作
make clean:清理大多数编译生成的文件,但会保留config文件等
make mrproper: 清理所有编译生成的文件、config及某些备份文件
make distclean:mrproper、patches以及编辑器备份文件
卸载内核
删除/lib/modules/目录下不需要的内核库文件
删除/usr/src/linux/目录下不需要的内核源码
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表
光盘内核:/misc/cd/isolinux/vmlinuz 已编译完成
系统内核:/boot/vmlinuz-3.10.0-514.el7.x86_64
实验:centos7 编译安装kernel-4.12 支持NTFS
1 准备源码包
(1)下载kernel源码包
(2)rz 上传源码包
(3)放在/root目录下,先检查free空间是否足够(df -Th);
(4)tar xvf linux-4.12.tar.xz; du -sh linux-4.12.tar.xz
/root/linux.4.12/ 可以自定义目录,下面的所有操作均在此目录下进行;
(5)参考/boot/vmlinuz-3.10.0-514.el7.x86_64文件,在此基础上,新增某些功能,如:ntfs;
查看已经启用的功能:/boot/config-3.10.0-514.el7.x86_64
/boot/vmlinuz-3.10.0-514.el7.x86_64 功能已经在内核里
/lib/modules/3.10.0-514.el7.x86_64/ 功能以模块化方式存在(.ko文件)
2 生成配置模版文件
cp /boot/config-3.10.0-514.el7.x86_64 /root/linux.4.12/.config
vim /boot/config-3.10.0-514.el7.x86_64 (y:已经安装到内核里;m:模块化驱动;)
3 安装开发包组
yum groupnstall "Development Tools"
4 make menuconfig
yum install ncurses-devel (安装过程中,缺少此包,需要安装)
make menuconfig
Tab键——Exit返回上一级
General setup——Local version——添加"-1.0-fengkernel"
File systems——DOS/FAT/NT Filesystems——NTFS
5 编译
yum -y install openssl-devel(openssl包未安装,需要安装后,再编译)
make -j 4 && for i in {1..10};do echo -e "\a";sleep 1;done
4——4颗cpu,后面的命令是编译完成后,提醒自己;
watch -n1 du -sh . 观察安装情况
编译之前,最好开一个screen会话,防止断电或断网;
updatedb(更新); locate ntfs.ko(查看是否有此驱动)
6 make modules_install
安装完成后,形成/lib/modules/`uname -r`(4.2-...)文件
7 make install
yum -y install elfutils-libelf-devel (安装过程中缺少此包,需要安装)
不需要再执行make install操作
安装完成后,形成/boot/vmlinuz(最新版本)和/boot/grub2/grub.cfg文件
cat /boot/grub2/grub.cfg 可以观察到menuentry4.12版本
8 重启,在菜单栏中,选择4.12版本;
9 插上U盘,格式化为ntfs分区,关联到centos7.3上;
10 mkdir /mnt/nfs; mount /dev/sdb1 /mnt/nfs; df -T;;
11 cd /mnt/nfs; ls 可以观察到ntfs文件,但只是只读文件,不能更改和删除;
安装完成后,删除某些目录,不影响新内核