加载内核
运行的程序便是/sbin/init,该文件会读取/etc/inittab文件
inittab文件格式:
<id>:<runlevels>:<action>:<process>
<runlevels>: The runlevels field is completely ignored.
加载BIOS
Boot Loader
加载内核屏幕一般会输出“Uncompressing Linux”的提示,系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立
内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件
Linux系统执行的第一个用户层文件就是/etc/init.d/rc.sysinit脚本程序
IFTPATH=/lib:/web/lib
LD_LIBRARY_PATH=${IFTPATH}
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/ift/application:${IFTPATH}
export PATH
# mount root filesystem in read-write mode
/bin/busybox echo "Mounting root fs rw ..."
/bin/busybox mount -n -o remount,rw /
if [ ! -e /proc/mounts ]; then
/bin/busybox mount -t sysfs sysfs /sys
/bin/busybox mount -t proc proc /proc
fi
-n 不要将载入的信息记录在/etc/mtab文件中 -o 指定载入文件系统时的选项 remount 重新载入设备 rw 可读写载入模式 |
如果系统中还没有加载 proc 文件系统,可以通过如下命令加载 proc 文件系统:
mount -t proc proc /proc
$ cat /proc/cpuinfo 可以查看cpu信息
目录名称 目录内容
apm 高级电源管理信息
cmdline系统启动时输入的内核命令行参数
Cpuinfo CPU 的信息 (型号, 家族, 缓存大小等)
Devices主设备号及设备组的列表,当前加载的各种设备(块设备/字符设备)
Dma 使用的DMA通道
Filesystems当前内核支持的文件系统,当没有给 mount(1) 指明哪个文件系统的时候, mount(1) 就依靠该文件遍历不同的文件系统
Interrupts 中断的使用及触发次数,调试中断时很有用
Ioports I/O当前在用的已注册 I/O 端口范围
Kcore该伪文件以 core 文件格式给出了系统的物理内存映象,可以用 GDB 查探当前内核的任意数据结构。该文件的总长度是物理内存 (RAM) 的大小再加上 4KB
Kmsg可以用该文件取代系统调用 syslog(2) 来记录内核日志信息,对应dmesg命令
Ksyms 内核符号表,该文件保存了内核输出的符号定义, modules(X) 使用该文件动态地连接和捆绑可装载的模块
Loadavg 负载均衡,平均负载数给出了在过去的 1, 5, 15 分钟里在运行队列里的任务数
Locks 内核锁
Meminfo物理内存、交换空间等的信息,系统内存占用情况,对应df命令
Misc 杂项
Modules 已经加载的模块列表,对应lsmod命令
Mounts已加载的文件系统的列表,对应mount命令,无参数
Partitions 系统识别的分区表
Rtc 实时时钟
Slabinfo Slab池信息
Stat 全面统计状态表,对应ps命令
Swaps 对换空间的利用情况
Version指明了当前正在运行的内核版本,对应uname –v,例如:
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
Uptime 系统正常运行时间,对应date命令
并不是所有这些目录在你的系统中都有,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和 sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则 scsi目录不存在。
net
该子目录包括多个 ASCII 格式的网络伪文件, 描述了网络层的部分情况。 可以用 cat 来察看这些文件, 但标准的 netstat(8) 命令组更清晰地给出了这些文件的信息
arp
该文件以 ASCII 格式保存了内核 ARP 表, 用于地址解析, 包括静态和动态 arp 数据. 文件格式如下:
IP address HW type Flags HW address
10.11.100.129 0x1 0x6 00:20:8A:00:0C:5A
10.11.100.5 0x1 0x2 00:C0:EA:00:00:4E
44.131.10.6 0x3 0x2 GW4PTS
其中 'IP address' 是机器的 IPv4 地址; 'HW type' 是地址的硬件类型, 遵循 RFC 826; flags 是 ARP 结构的内部标志, 在 /usr/include/linux/if_arp.h 中定义; 'HW address' 是该 IP 地址的物理层映射(如果知道的话).
dev
该伪文件包含网络设备状态信息, 给出了发送和收到的包的数目, 错误和冲突的数目, 以及别的一些基本统计数据. ifconfig(8) 利用了该文件来报告网络设备状态. 文件格式如下:
Interface | Receive | Transmit|packets errs drop fifo frame|packets errs drop fifo colls carrier
lo: 0 0 0 0 0 2353 0 0 0 0 0
eth0: 644324 1 0 0 1 563770 0 0 0 581 0
rarp
该文件具有和 arp 同样的格式, 包含当前的逆向地址映射数据. rarp(8) 利用这些数据来作逆向地址查询服务. 只有将 RARP 配置进内核, 该文件才存在.
route
没有信息, 但是看上去类似于 route(8)
tcp
该文件保存了 TCP 套接字表, 大部分信息除用于调试以外没有什么用. "local address" 包括本地地址和端口号; "remote address" 包括远地地址和端口号(如果有连接的话); 'tx_queue' 和 'rx_queue' 是内核存储器使用意义上的输入输出数据队列;
udp
该文件保存了 UDP 套接字表, 大部分信息除用于调试以外没有什么用
$ ls -l /proc/32558
total 0
-r--r--r-- 1 root root 0 Dec 25 22:59 cmdline
-r--r--r-- 1 root root 0 Dec 25 22:59 cpu
lrwxrwxrwx 1 root root 0 Dec 25 22:59 cwd -> /proc/
-r-------- 1 root root 0 Dec 25 22:59 environ
lrwxrwxrwx 1 root root 0 Dec 25 22:59 exe -> /usr/bin/mozilla*
dr-x------ 2 root root 0 Dec 25 22:59 fd/
-r--r--r-- 1 root root 0 Dec 25 22:59 maps
-rw------- 1 root root 0 Dec 25 22:59 mem
-r--r--r-- 1 root root 0 Dec 25 22:59 mounts
lrwxrwxrwx 1 root root 0 Dec 25 22:59 root -> //
-r--r--r-- 1 root root 0 Dec 25 22:59 stat
-r--r--r-- 1 root root 0 Dec 25 22:59 statm
-r--r--r-- 1 root root 0 Dec 25 22:59 status
目录名称 目录内容
Cmdline 命令行参数,包含启动进程时调用的命令行,如果该进程已经被交换出内存, 或者该进程已经僵死, 那么就没有任何东西在该文件里, 这时候对该文件的读操作将返回零个字符
Environ该文件保存进程的环境变量, 各项之间以空字符分隔
Fd进程所打开的每个文件都有一个符号连接在该子目录里, 以文件描述符命名, 这个名字实际上是指向真正的文件的符号连接
Mem 进程的内存被利用情况
Stat 进程状态
Status 进程当前状态,包括启动进程的用户的用户ID (UID) 和组ID(GID) ,父进程ID (PPID),还有进程当前的状态,比如"Sleelping"和"Running"
Cwd一个符号连接, 指向进程当前的工作目录。例如, 要找出进程 20 的 cwd, cd /proc/20/cwd; /bin/pwd
Exe 指向该进程的执行命令文件
Maps该文件包含当前的映象内存区及他们的访问许可
Statm 进程内存状态信息
Root 链接此进程的root目录
self 当某进程访问 /proc 目录时, 该目录就指向 /proc 下以该进程 ID 命名的目录.
8182 linux startup: