proc、sys、内核编译安装

/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
proc、sys、内核编译安装_第1张图片
Paste_Image.png
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(管理缓存)
proc、sys、内核编译安装_第2张图片
Paste_Image.png
6 vim /etc/sysctl.conf
    net.ipv4.icmp_ignore_all  此参数本来不存在,但可以添加
    删除此选项后,sysctl -p 生效;还是ping不通;
    原因:已设置默认值为1,即使删除此选项,并未更改此默认值;
    sysctl -p 只是重读/etc/sysctl.conf,原文件参数不存在,就默认还是原来的值;但是重启就恢复了最初系统默认值;

Paste_Image.png
7 与centos7做比较
ll /etc/sysctl.conf; cat /etc/sysctl.conf  /etc/sysctl.conf文件内容减少
proc、sys、内核编译安装_第3张图片
Paste_Image.png
Paste_Image.png
8 经常需要更改/etc/sysctl.conf文件
proc、sys、内核编译安装_第4张图片
Paste_Image.png
9 sysctl -a  查看所有生效参数
  arp_ignore:忽略、不响应,拿到一个ip地址、不说,对方不知道你拿到了这个ip;
proc、sys、内核编译安装_第5张图片
Paste_Image.png

/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
proc、sys、内核编译安装_第6张图片
Paste_Image.png
增加新磁盘
proc、sys、内核编译安装_第7张图片
Paste_Image.png
proc、sys、内核编译安装_第8张图片
Paste_Image.png

内核 kernel

物理上,与硬件打交道是内核,不是软件;
模块:声卡、显卡驱动......
Paste_Image.png
编译安装 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...
proc、sys、内核编译安装_第9张图片
Paste_Image.png
proc、sys、内核编译安装_第10张图片
Paste_Image.png
卸载——从内存移除
加载——加到内存里

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

proc、sys、内核编译安装_第11张图片
Paste_Image.png
proc、sys、内核编译安装_第12张图片
Paste_Image.png
proc、sys、内核编译安装_第13张图片
Paste_Image.png

编译内核

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
proc、sys、内核编译安装_第14张图片
Paste_Image.png
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版本

proc、sys、内核编译安装_第15张图片
Paste_Image.png
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文件,但只是只读文件,不能更改和删除;
   安装完成后,删除某些目录,不影响新内核
proc、sys、内核编译安装_第16张图片
Paste_Image.png

你可能感兴趣的:(proc、sys、内核编译安装)