Linux:单内核
模块化:动态
/lib/modules/
lsmod,modinfo,modprode,insmod,modprobe -r,rmmod
rpm制作
src.rpm
源码rpm包+specs文件
步骤:
1.创建mockbuild用户
2.切换至mockbuild用户,而后安装src.rpm包
3.rpmbuild -bb|-ba ~/rpmbuild/SPECS/package_name.spec
4.制作完成的rpm包:位于/root/rpmbuild/RPMS/x86_64中
专门放源码编译 : /usr/src,/usr/local/src
编译内核:
第一步:可能需要的模块不多,红帽或者centos为了使版本更通用,
y:编译进核心
m:编译成模块
make config
make allyesconfig
make allnoconfig
make menuconfig
建议将/boot/下的config文件拷贝到当前目录下,叫.config
make kconfig(KDE桌面环境,并且安装了qt开发环境)
make gconfig(Gnome桌面环境,并且安装gtk开发环境)
第二步:编译
make -j #
第三步:安装模块
make modules_install
第四步:安装内核
make install
第五步:检查。测试
grub.conf中是否已经有新内核配置项
重启系统并启用新内核
Linux两大剑客
sed (Stream Editor)
一次只读一行(不对源文件进行操作)
命令格式:
sed [options] "script" FILE 。。。。。
选项
—n : 精默摸式,不输出模式空间中的内容
-r : 扩展的正则表达
-f :/path/to/sed_script_file 指定sed 脚本 来执行
—e : ‘script’ -e 'script': 指定多个编辑指令
-i : 直接编辑源文件
编辑命令:
d: 删除
p: 打印
i \text: 在同行插入
a \test: 在下一行插入
r /path/to/somefile:指定位置把另外一个文件的内容插入进来
w /path/to/somefile: 将符合条件的所有行保存至指定的文件中
= : 显示符合条件的行号
s///:查找条件可以使用模式,但要替换的内容不行
地址定界:
startline,endline
1,3
/pat1/,/pat2/
/pattern/
用法:
sed [opions] 'addr1[,addr2]编辑命令' FILE .....
sed [opions] “addr1[,addr2]编辑命令” FILE .....
正则表达式:
基本的:
字符:
.
[]
[^]
次数:
* 0次以上
\? 一次
\{m,n\} 指定m到n此
瞄定:
^
$
\<,\b
\>,\b
分组:
\(\)
引用:
\1,\2....
扩展:
字符:
.
[] 指定范围内
[^] 指定范围外
[[:lower:]] 小写字符
[[:punct:]] 标点符号
[[:alnum:]] 所有字母数字
次数:
*
?
+
{m,n}
锚定:
^
$
\>, \b
\<, \b
或:
a|b
分组:
()
引用:
\1,\2....
sed '地址定界s@查找条件@替换文本@g'
修饰符
g:global ,全局替换
i:ignore-case ,不区分字符大小写
练习:
1.替换/etc/inittab文件中”id: 3:initadefault:” 一行中的数字为5
sed 's@\(id:\)[0-9]\(:initdefault\)@\15\2@' /etc/inittab
2.删除/etc/init.d/functions 文件中的空白行
sed '/^$/d' /etc/init.d/functions
3.删除/etc/inittab文件中位于行首的#
sed '/^#/d' /etc/init.d/functions
4.删除/etc/rc.d/rc.sysinit文件中以#后至少一个空白字符开头的行
sed 's@^#[[:space:]]\{1,\}@@g' /etc/rc.d/rc.sysinit
5.删除/boot/grub/grub.conf 文件中首行的空白字符
sed 's@^[[:space:]]\{1,\}@@' /boot/grub/grub.conf
6. 取出一个文件路径的目录名称,/ect/sysconfig/network.其目录为/etc/sysconfig 功能类似于dirname命令
echo /etc/sysconfig/network| sed 's@[^/]\{1,\}/\?$@@'
sed 高级用法: t, T ,D ,P,n,N,h,H,g,G
awk
awk: 报告生成工具(生成美观的输出结果)
把文件中读取到的每一行的每一个字段分别进行格式化,而后进行显示
变量: 条件判断,循环,数组
awk --> new awk --> nakw
参数
-F :指定分隔符号
用法格式:
awk [options] 'script' FILE...
awk [options] '/pattern/{action}' FILE ....
action: print $1,$1
模式
地址定界:
/pat1/,/pat2/
/pattern/
expression:表达式
> ,>=,<,<=,==,!=,=~
BEGIN:执行前的做准备工作
END:执行后的收尾工作
awk的常用四种分隔符
输入:
行分隔符
字段分隔符
输出:
行分隔符
字段分隔符
awk的内置变量
NF:最后一个字段
FS: 指定输入分隔符 在BEGIN中定义,指定时要使用""
默认为空白
OFS:输出时指定的分隔符,在BEGIN中定义,指定时要使用"",默认为空白
练习:
1.显示GID小于500的组
awk -F : '$3<500{print $1}' /etc/group
2.显示默认的shell为nologin的用户
awk -F : '$7~/nologin$/{print $1}' /etc/passwd
3,显示eth0网卡文件的配置信息,注意,只显示等号后面的值
awk -F = '{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
4.显示/etc/sysctl。conf文件中定义的内核参数:只显示名称,
awk -F =' !/^#|^$/{print $1}'/etc/sysctl.conf
5.显示eth0网卡的ip地址,通过ifconfig命令结果进行过滤
ifconfig eth0 |awk '/inet addr/{print $2}' |awk -F : '{print $2}'
bash编程:数组初步
数组:
数据结构,数据序列,保存了连续的多个数据,可以使用索引获取相关元素
声明数组:
declare -a arryname
初始化或赋值:各元素间使用空白字符分隔,不加下标默认为第一个
arrayname=('a' 'b' 'c')
第二种:可以自定义下标
[下标]='字符'
第三种:arrayname[0]='a';arrayname[1]='b';
显示第一个字符
echo ${arrayname(0)}
获取元素的长度
${#arrayname[下标]}
查看有效元素的个数
${#arrayname[@|*]}
bash的伪随机生成器
$RANDOM
取特定位数的
$[$RANDOM%7]