|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
内核管理: {
内核的功能 {
进程: Task_Struct (任务结构定义) Scheduler (任务调度)
内存: 分配 回收 碎片整理
I
/O
: 中断及处理(读写)
文件系统: 管理文件系统内容与内存交互
驱动程序: 硬件运行交互
}
内核设计流派 {
单内核: 单一体系结构 linux 采用模块化设计(动态装卸)
微内核: 内核子系统 win
fork(): init 负责管理用户空间的进程
/sbin/init
}
linux启动初始化 {
1. post阶段 固化在ROM中
2. BIOS自检启动 (boot sequence)
3. MBR(bootloader) 装机时写入第一个盘符
4. MBR引导内核启动 initrd,initramfs
5. init进程启动 (upstat)
pre
/etc/init/rcS
.conf
/etc/rc
.d
/rc
.sysinit
post
/etc/inittab
==
/etc/init/rc
.conf
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
系统初始化脚本
/etc/rc
.d
/rc
.sysinit
设置主机名
打印文本欢迎信息
激活SELinux和udev
激活swap
挂载
/etc/fstab
定义的本地文件系统
检测根文件系统并对其以读写方式重新挂载
设置系统时钟
装载键盘映射
根据
/etc/sysctl
.conf设置内核参数
激活RAID和LVM设备
清理操作
}
MBR,GPT {
引导加载程序 (早期 LILO)
GRUB 分为3个阶段 1st,1.5st,2st stage
1st 为了引导2st
1.5st 识别文件系统
2st 位于boot分区中,grub引导
grub 可选择启动的系统 可交互 可密码保护
grub conf
/boot/grub/grub
.conf
default: 是否默认启动
timeout: 默认启动延时
splashimage:
/path
启动图片
hiddenmenu: 隐藏菜单
password: 密码保护
title
""
可自定义启动标题
root(hd0,0)
kernel
/path
ro root=
/path/to/device
quiet 内核boot目录
init=
/path
路径 selinux=0
initrd
/cpio
归档文件
grub损坏维护
grub配置损坏
启动阶段 -e 编辑
kernel
/path
ro root=
/path/to/device
quiet init=
/bin/bash
进入
bash
模式修正grub.conf文件
grub彻底损坏
进入救援模式
chroot
/mnt/sysimage
grub-
install
--root-directory=/
/dev/sda
exit
}
内核模块 {
单内核,支持模块动态加载与装卸
/lib/moduals/
版本
/kernel/
查看信息
lspci 查看pci信息
lsblk 查看所有磁盘信息
lsmod 加载的驱动信息
lscpu cpu信息
lsusb 所有usb信息
modinfo [模块名称] (查询模块所有信息) 关注 depends license filename
modprobe [-r 模块名称] 卸载模块(自动探索)
modprobe [模块名称] 装载模块(自动探索)
rmmod [-f 模块名称] 强制卸载模块
insmod [path] 装载模块指定路径
}
编译源码 {
rpmsrc:
1. 创建mockbuild用户
2. 安装src.rpm包
3. rpmbuild ->
source
4. rpmbuild -bb rpmbuild
/specs/nginx
.spec
内核编译: (初次编译选择默认配置)
1.
cp
/boot/config-2
.6.32-431.el6.x86_64
/usr/src/linux/
.config
2.
make
menuconfig(调整编译选项 * 编译到内核中 M 模块形式存在)
3.
make
-j 4 多线程编译 或
make
bzImage 仅编译内核
4. 为新磁盘安装MBR
make
clean 删除编译生成文件.o,不删除配置文件
make
mrproper 完全删除
make
disclean 重置代码树
编译部分目录
make
/path/to/dir
编译部分模块
make
-M
/path/to/modual
编译单一模块
make
/path/to/modual/
*.ko -o
/path/to/output
交叉编译
make
ARCH=arm
screen
的使用
screen
新建一个命令窗口
Ctrl+A , D 隐藏新建窗口
screen
[-
ls
] 查看所有的窗口
screen
[-r 编号] 恢复窗口
内核调优:
/proc/sys
kernel net vm fs 都是伪文件系统
所有
echo
"value"
>
/path/to/file
sysctl [-a] 所有内核参数
sysctl [-w 参数名称] = value
配置文件
/etc/sysctl
.conf
设备文件: udev 基于系统自动探查
tmpfs
/dev/shm
tmpfs defaults 0 0
mknod
-m 660
/dev/testdev
b 100 0 手动创建设备文件
}
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
sed
初步: {
sed
是一个行编辑器,每次读取一行到内存中来进行处理并输出
sed
[options]
'script'
file
-n 静默模式
-r 拓展的正则表达式
-f 加载文件脚本
-e 可连续执行script
-i 可直接读写文件
COMAND d 删除 p 打印(默认) i
/a
\text 匹配的前后添加内容
r
/path/to/file
插入文件内容 w
/path/to/file
保存到
= 匹配内容的行号
<a>s/<b>/<c>/[g
/i
] 查找替换模式
a: 可定界
b: 查找内容
c: 替换内容 \1 引用替换
g: 全局模式
i: 忽略大小写
例:
sed
'/^\/\//d'
/etc/named
.conf 删除named.conf中所有的以
//
开头的行
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
awk
初步: {
awk
是一个报告生成器,可以将选中内容的每行每列进行格式化
awk
[options]
'script'
file
awk
[options]
'/pattern/{action}'
file
-f 脚本文件
-F 分割符
定界模式: 默认全部文件
/part1/
,
/part2/
/pattern/
表达式 > >= < <= == != ~
BEGIN
/END
:
执行前/后操作
awk
-F:
'{print $1}'
/etc/passwd
}
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
Linux系统的安装: (自动化){
安装方式可分为三种
1. 光盘MBR bootloader
2. 网络设备 基于PXE或者Cobbler
3. 可移动设备
1. 光盘制作过程
a) 以当前最微系统的安装过程为蓝本
cp
~
/anaconda-ks
.cfg ~
/ks
.cfg
b) 修正 ks 参数 , 以及安装需要的所有工具
详细参见 Red_Hat_Enterprise_Linux-5-Installation_Guide-en-US.pdf
# Kickstart file automatically generated by anaconda.
#version=DEVEL
text
install
cdrom
lang en_US.UTF-8
keyboard us
network --onboot
yes
--device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$pcYzFDFOq
/kCTHmk
$r
/4JaQm8qav2X1OfAh5S/uTH
.V0JIxFZoef5FhU10Ox53TBsH1IXeelSc5xIM
/0gfWYD7OWDdGjttFOlBvy400
firewall --service=
ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc America
/New_York
bootloader --location=mbr --driveorder=sda --append=
"crashkernel=auto rhgb quiet"
zerombr
clearpart --all
volgroup VolGroup --pesize=4096 pv.008002
logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
logvol swap --name=lv_swap --vgname=VolGroup --grow --size=992 --maxsize=992
part
/boot
--fstype=ext4 --size=500
part pv.008002 --grow --size=1
repo --name=
"CentOS"
--baseurl=cdrom:sr0 --cost=100
%packages --nobase
@core
%end
c) 制作光盘
#!/bin/bash
#
[ -e
"/root/myiso/packages"
] ||
mkdir
-p
/root/myiso/packages
[ -e
"/root/myiso/linuxiso"
] ||
mkdir
-p
/root/myiso/linuxiso
cd
/root/myiso/packages
#yum list | grep "^[^[:space:]].*@" | awk '{print "172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/Packages/"$1".rpm"}' | xargs wget -q
cat
/root/install
.log |
grep
"^Installing"
|
awk
'{print "172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/Packages/"$2".rpm"}'
|
xargs
wget
cd
/root/myiso/linuxiso
echo
"mirror"
| lftp
"http://172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/isolinux"
cp
/root/iso
.cfg
/root/myiso/
sed
-i
"s/\(^[[:space:]]\{2\}append.*img$\)/\\1 ks=cdrom:\/iso.cfg/"
/root/myiso/linuxiso/isolinux
.cfg
cd
/root/myiso
mkisofs
-R -J -T -
v
--no-emul-boot --boot-load-size 4 --boot-info-table -V
"CentOS 6.5 x86_64 boot"
-b linuxiso
/isolinux
.bin -c linuxiso
/boot
.
cat
-o
/root/centos6
.4.iso ~
/myiso
2. 网络设备 PXE
基于DHCP 与 TFTP + Web服务器
a) 建立 dhcp 引导网络中的设备 etc
/dhcp/dhcpd
.conf
subnet 172.16.43.0 netmark 255.255.255.0 {
range 172.16.43.1 172.16.43.50;
}
b) 在动态为客户端分配IP后 指向 nextserver为 tftp isolinux所在路径
/var/lib/tftpboot/
下的pxelinux.0
subnet 172.16.43.0 netmark 255.255.255.0 {
range 172.16.43.1 172.16.43.50;
next-server 10.0.0.100
filename
"pxelinux.0"
}
c) 安装启动 xinetd tftp-server tftp 并chkconfig服务
d) 安装httpd 将安装树绑定到httpd的目录下
先挂载在绑定
mount
--bind
/media
/var/www/html/centos6
e) 安装syslinux
f) 拷贝如下文件
//
boot.msg init文件初始化文件系统 dhcp引导安装文件 引导配置文件 背景图 vesamenu.c32 内核
//
boot.msg initrd.img pxelinux.0 pxelinux.cfg splash.jpg vesamenu.c32 vmlinuz
# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# mkdir /var/lib/tftpboot/pxelinux.cfg
# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
g) 网络引导 pxelinux.cfg中加入
ks=http:
//HTTP_SERVER_IP/ks
.cfg
日志??
}
|
本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1376168
,如需转载请自行联系原作者