首页 > 代码库 > linux基础知识学习-linux架构
linux基础知识学习-linux架构
硬盘分区:
第一扇区(512bytes):
MSR:master boot record (446bytes)主引导分区
partion table:(64bytes)分区表,四个。可以是主分区(primary)或者扩展分区(Extended), 每个表指向磁盘某段区间。最多只有一个扩展分区,扩展分区里面可以扩展多个逻辑分区。
其余扇区(柱面(cylinder)):实际存储的地方
linux 中(\etc/fstab):
IDE 总线形式不同 (a~d)
/dev/hda
SATA,SCSI,USB(a~p)
/dev/sda1 C 主分区( 扩展分区)
/dev/sda2 D
/dev/sda3 E
/dev/sda4 F
/dev/sda5 逻辑分区
/dev/sda6
/dev/sdb1 U盘 挂到/mnt
/dev/cdrom->sr0 光盘 挂到/media 或/mnt
Linux ext2文件系统:
block0, block1, block2, block3 ...
boot sector
superblock 超级块,存放磁盘整体信息,inode数量,block数量
inode bitmap inode的使用情况
block bitmap block的使用情况
inode table 每个文件都对应一个inode,存放文件的权限和属性 128 bytes
data block 存放文件的真实数据。有1k ,2k, 4k.
linux系统内核模块
1.MMU 内存管理模块123456
2.FS文件系统管理
3.进程管理
4.进程调度
5.网络设备接口
linux系统层次
1.linux内 核(kernel)
linux 3.1.0-7.fc16.i686 .内核版本,奇数测试版,修改次数
2.linux API接口
3.shell
4.utilities实用程序
Windows里启动加载:
BIOS:固件程序,上电后完成硬件检测盒资源分配,将引导程序读到内存,跳转到引导程序入口。
引导:GRUB (或者 LILO),将内核读入到内存中,跳转到内核入口点运行。
linux系统启动引导方式:
Bootloader:(vivi,U-Boot)
stage1:=BIOS
stage2:=GRUB
运行级别:
/etc/inittab 存放
启动第一运行 : inix进程,pid为1;
linuxt系统终端模式:
1.字符终端runlevel 3: tty1~tty6(command line命令行)
2.图形终端runlevel 5: tty7 ( init->X window system->x11->->->GNOME,KDE窗口管理员)
查看所有登陆linux系统用户(终端用户)
who
pts/0:虚拟终端用户(图形界面下)
tty1: 登入系统用户(字符终端下tty1-tty6)
控制终端自动运行着一个shell,即/bin/bash进程,来随时解析输入的命令,一旦有命令输入ls,即fork创建一个子进程/bin/bash,exec将/bin/ls程序的代码数据替换,即执行ls的代码。
登入系统用户名
whoami
linux文件系统
FHS:Filesystem Hierarchy Standard 文件系统分层标准
/ 开机系统有关(开机还原修复,分区要小)
/usr 软件安装、执行有关(unix software resource,分区大)
/var 系统运作有关 (variable,分区大点)
*********************************************************************
bin: 在单用户模式下还能被执行的程序,root用户和一般用户都可执行
sbin:重要的系统程序,只有root用户可执行(一般用来设置系统环境)
其他系统命令,服务器软件程序/usr/sbin 自行安装软件程序 /usr/local/sbin
etc: 配置文件
开机配置:/etc/inittab , /etc/rc.d/*, /etc/init/*
服务启动脚本:/etc/init.d/*
开机启动脚本:/etc/rc.d/init.d/*
系统配置:/etc/sysconfig/*
xinetd服务管理的各服务配置:/etc/xinetd.d/*
dev:设备映射文件。
hd*, sd*, sdb1U盘,cdrom光盘,lp*打印机,tty终端,
null ,zero
stdin,stdout,stderr
lib:程序库文件(.so)
1.开机时用到的链接库
/lib/modules 开机时加载的驱动模块
2./bin和/sbin下的命令用到的链接库
*********************************************************************
boot:系统启动文件(grub引导的目录)
1.Linux内核文件 vmlinuz-2.6.32-131.12.1.1.ky3.2.x86_64
2.用于启动的内存虚拟文件系统 initramfs-2.6.32-131.12.1.1.ky3.2.x86_64.img
3.grub目录
menu.lst 引导程序grub的配置文件
其他引导配置文件
*********************************************************************
usr: unix软件资源,可共享不可变。
bin 软件程序,绝大部分的用户可使用命令都放在这里。(开机无关)
include 程序包含的头文件
lib 程序运行的链接库
local 本地软件,也包含bin,etc,include,lib等目录
usr 一般放置软件源码
*********************************************************************
var:系统运行服务后动态产生的文件
lib 存放程序的数据文件
mysql: MySQL数据库,
rpm:rpm数据库
log 日志文件
messages 错误日志
wtmp 登录日志
spool 队列数据
at 一次执行脚本
cron 循环例行性工作脚本
run 进程pid
mail 个人电子邮件
*********************************************************************
root:管理员目录
home:用户家目录
media:挂载光盘 /media/cdrom
mnt:挂载目录。与/media差不多,可用来挂载U盘。
tmp: 存放临时数据,任何人都可访问,可定时删除
srv 网络服务的数据。www,FTP等数据目录
lost+found:ext2/ext3文件系统,当发生错误时,将一些丢失的片段放置到这个目录下。
proc:内存中内核,进程,设备,网络状态等数据
sys:内存中内核,文件系统等数据
opt:第三方软件目录,类似 /usr/local
*********************************************************************
linux文件类型:(7种类型 S_ISREG(st->st_mode) )
-:reg 一般文件
d:dir目录文件
l:lnk链接文件
b: block块设备文件
c: chr字符设备文件
p: pipe管道文件
s: socket套接字文件
文件模式(mode_t st_mode S_IRUSR,S_IWGRP,S_IXOTH)
rwx -w- r-- read4,write2,execute1 111 010 100 -> 0724(八进制)
各种下载地址:
uboot:ftp://ftp.denx.de/pub/u-boot/
linux kernel:http://www.kernel.org
busybox:http://www.busybox.net/
硬件->bootloader->kernel内核->utilities实用程序
(进程0->init1->tty终端->命令(程序)->线程)
linux启动细节:
一、BIOS
系统信息CMOS,硬件检测,读取MBR转到grub
二、MBR-grub,bootload引导加载程序
安装windows和linux的时候,各自的的文件系统分区内都有一份各自的grub,windows默认将grub装在MBR中,而linux可以选择不安装在MBR中。
bootload:
1.启动选项
2.加载内核
3.转交其他loader(windows无,linux有。)
三、加载内核kernel和initrd制作虚拟文件系统来加载驱动模块
bootload加载/boot/vmlinux-2.6.18-92.e15 ,解压缩内核文件到内存中运行,并利用内核的功能开始测试与驱动各个周边设备,包括存储设备、CPU、网卡、声卡等。此时,linux内核会以自己的功能重新检测一次硬件,而不一定会使用BIOS检测到的硬件信息。
(此时内核没有驱动不认识SATA磁盘,无法加载/lib/modules/目录下系统模块,IDE,ext2/ext3可以。)
bootload加载/boot/initrd-2.6.18-92.e15.img,解压缩成initialRAM Disk虚拟文件系统的根目录(只读),kernel借此加载所需/boot/modules下系统模块(硬件驱动),最终释放虚拟文件系统,并挂载实际的跟目录文件系统。
四、启动第一个进程init
/etc/inittab :
1.id:5:initdefault: 获得默认的run level设置
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode 单用户维护模式
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11 图形化界面
# 6 - reboot (Do NOT set initdefault to this)
2.si::sysinit:/etc/rc.d/rc.sysinit 启动系统环境初始化配置
? 取得网络环境与主机类型
? 测试挂载与挂载设备/proc及USB设备/sys
? 决定是否启动SELinux
? 启动系统的随机数生成器
? 设置终端机字体
? 设置显示于启动过程中的欢迎界面
? 设置系统时间与时区设置:需读入/etc/sysconfig/clock设置值
? 接口设备的检测与Plug and Play 参数的测试
? 用户自定义模块的加载
? 加载内核的相关设置
? 设置主机名与初始化电源管理模块
? 初始化软件磁盘阵列:主要是通过/etc/mdadm.conf
? 初始化LVM的文件系统功能
? 以fsck检验磁盘文件系统:会进行filesystem check
? 进行磁盘配额quota的转换
? 重新以可读写模式挂载系统磁盘
? 启动quota功能,所以我们不需要自定义quotaon的操作
? 启动系统伪随机数生成器
? 清除启动过程的临时文件
? 将启动相关信息加载/var/log/dmesg
很多工作配置在/etc/sysconfig中。
自定义模块加载:/etc/sysconfig/modules/* 配置文件/etc/modprobe.conf
启动相关信息放在/var/log/dmesg
3.10:0:wait:/etc/rc.d/rc X 启动renlevel X 的服务程序
执行rc来启动/etc/rcX.d/下各个链接文件启动/etc/init.d/下的服务脚本,Kxx,Sxx按数字顺序执行,
这些链接文件可用chkconfig命令管理。
/etc/rc.d/rc.local为各服务启动完后自定义的开机启动脚本,可自行添加自己写的脚本。
用runlevel得到当前运行等级。 以后在运行的时候想修改运行等级,用init X,则两个/etc/rcX.d中的K与S文件进行比较,保留一样的,关闭多余的,启动没有的。就可以不用重新启动了。
4.设置ctrl+alt+del 重新启动键
5.设置不断电系统UPS
6.1:2345:respawn:/sbin/mingetty tty1 运行在2345等级时,会打开tty1-tty6终端,可删除一些。
7.x:5:respawn:/etc/x11/prefdm -nodaemon 运行在5等级时另外执行的命令。
2.6.32版本以后的init配置文件:
# inittab is only used by upstart for the default runlevel.
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
# 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.
[root@Kylin-VMware init]# ls
control-alt-delete.conf rc.conf serial.conf
init-system-dbus.conf rcS.conf splash-manager.conf
kexec-disable.conf rcS-sulogin.conf start-ttys.conf
plymouth-shutdown.conf readahead-collector.conf tty.conf
prefdm.conf readahead.conf vmware-tools.conf
quit-plymouth.conf readahead-disable-services.conf
内核与内核模块
内核:/boot/vmlinuz
内核解压缩所需RAMDisk:/boot/initrd
内核模块:/lib/modules//$(uname -r)/kernel
内核源码:/usr/src/kernels
内核版本:/proc/version
系统内核功能:/proc/sys/kernel
模块管理:
内核模块依赖性:/lib/modules/$(uname -r)/modules.dep
depmod 分析相关模块的依赖性,结果写入modules.dep文件中。
内核模块的额外参数:/etc/modprobe.conf
lsmod
insmod
modprobe 可克服模块的依赖问题。
rmmod