linux工具与文件

主要是linux系统的基础:包括一些工具以及文件系统的解释

GPL版权

-- copyleft含义;
-- LGPL含义动态链接ok,静态链接not ok;
-- black duck提供扫版权服务

linux内核版本

-- 最后一位为补丁号,2.6.39 --> 3.0 --> 3.8;
-- 2.6.39.1,2.6为2003年开始

系统层次结构

内核结构

-- 最底层为硬件驱动层,包含:CPU support code,CPU/MMU(内存管理单元) support,块设备驱动,字符设备驱动,网络设备驱动。此层为内存比重最大一层。
-- 中层为 处理管理,内存管理,文件系统支持,设备控制,网络。 中层与具体硬件无关。
-- 上层为系统调用接口

-- 注释
[*] 三个套在一起的圆;内核为最内层,系统调用为中间层,用户态为最外层
[*] 系统调用,软中断,在用户区使用3-4G的空间,在系统调用时,内核态使用超过此限度
[*] 不同程序调用动态链接库代码段会共享,数据段各自独立

内核跟踪命令strace

-- strace ltrace ./a.out
-- strace内核,ltrace动态库

源代码与项目管理工具

-- git --author:linus,c

工具链

GNU Binutils

-- 包括连接程序ld,汇编程序as。主要目的为GUN系统,提供汇编和连接工具

  • gprof :程序的统计信息,每个函数被调用情况和次数

gcc -pg
gprof -a.out gmon.out

  • gcov测试代码覆盖率报告

gcc -fprofile-arcs -ftest-coverage test.cpp

  • nm 动态链接库中的二进制符号(函数)

  • objdump,从目标函数obj中展示信息

  • 符号表与debug信息

-- 符号表,与debug信息,反汇编
gcc -g main.c ;符号表与debug信息都有
gcc main.c ;没有dbug信息

  • strip,去除符号表与debug信息

strip ./a.out
程序执行 不依赖符号表,所以发布程序时

  • objdump -S a.out

gdb ==>C+a看是否有代码

  • readdelf 二进制程序依赖关系

-- 可以编写程序依赖库的脚本

GNU GCC

-- 为GUN系统提供C编译器

GUN GLibc

-- 用于定义系统调用和其他基本函数调用

文件系统

proc

-- 内核运行信息放在用户空间来看:cat cpuinfo
-- 进程的pid为阿拉伯数字 cd 1 cat status
-- cd fd ;控制台console

sys

-- 内核信息放在用户信息来看:导出总线外设、驱动等次你 ca bus/ic2/dev1-0060/

dev

-- 设备
-- 主设备号与次设备号,LANANA.org组织维护

temp

-- 临时文件系统

bin、sbin、/usr/bin、/usr/sbin/

-- 二进制程序

lib、/usr/lib

-- 动态链接库

busybox

--命令本身为argv[],本身第一个参数,将linux命令集成在一起

mount

-- 挂载,mount机制扩展文件系统,不同类型的文件系统可以挂载在系统的文件树的任何位置

init

-- upstart
-- systemd
-- android init

Sysvinit

linux系统启动首先从BIOS开始,大概是将boot loader启动起来;进入boot loader后,由它将内核从硬盘装载进内存,完成内核的初始化,内核初始化的最后一步为启动pid为1的进程。它以守护进程的方式存在,是所有其他进程的祖先。不同版本采用了不同的Init实现,根据先后顺序分别为sysvinit、UpStart、systemd。sysvinit是基于脚本的,问题在于启动慢,Upstart已经有8年,不少系统中已经替代了sysinit。systemd出现较晚,发展很快。

运行级别:runlevel

sysinit检查 ‘/etc/inittab’文件中是否含有 initdefault项,来启动默认的运行模式。通常有8种运行模式0到6,S或者s。每种运行模式的定义不太一样,但0,1,6得到了一致。0:关机;1 单用户模式; 6,重启。redHat中3为字符界面的shell模式、5为GUI模式。

ps:说白了就是通过配置文件来启动程序,不同的配置启动模式不同。

sysinit运行顺序

1、/etc/inittab
分析这个文件的内容,它获得以下一些配置信息:
a 系统需要进入的 runlevel
b 捕获组合键的定义
c 定义电源 fail/restore 脚本
d 启动 getty 和虚拟控制台
将系统初始化为预订的runlevel

2、/etc/rc.d/rc.sysinit
rc.sysinit执行一些重要的系统初始化工作
a 激活 udev 和 selinux
b 设置定义在/etc/sysctl.conf 中的内核参数
c 设置系统时钟
d 加载 keymaps
e 使能交换分区
f 设置主机名(hostname)
g 根分区检查和 remount
h 激活 RAID 和 LVM 设备
i 开启磁盘配额
j 检查并挂载所有文件系统
k 清除过期的 locks 和 PID 文件

3、/etc/rc.d/rc 和/etc/rc.d/rcX.d/ (X 代表运行级别 0-6)
根据不同的 runlevel,rc 脚本将打开对应该 runlevel 的 rcX.d 目录(X 就是 runlevel),找到并运行存放在该目录下的所有启动脚本。每个 runlevel X 都有一个这样的目录,目录名为/etc/rc.d/rcX.d
在这些目录下存放着很多不同的脚本,文件名以 S 开头的脚本就是启动时应该运行的脚本,S 后面跟的数字定义了这些脚本的执行顺序。在/etc/rc.d/rcX.d 目录下的脚本其实都是一些软链接文件,真实的脚本文件存放在/etc/init.d 目录下。

4、/etc/rc.d/rc.local
rc.local 是 Linux 留给用户进行个性化设置的地方。您可以把自己私人想设置和启动的东西放到这里,一台 Linux Server 的用户一般不止一个,所以才有这样的考虑。

5、X Display Manager(如果需要的话)

Sysvinit 和 系统关闭

Sysvinit 不仅需要负责初始化系统,还需要负责关闭系统。在系统关闭时,为了保证数据的一致性,需要小心地按顺序进行结束和清理工作。

比如应该先停止对文件系统有读写操作的服务,然后再 umount 文件系统。否则数据就会丢失。

这种顺序的控制这也是依靠/etc/rc.d/rcX.d/目录下所有脚本的命名规则来控制的,在该目录下所有以 K 开头的脚本都将在关闭系统时调用,字母 K 之后的数字定义了它们的执行顺序。

Sysvinit 的管理和控制功能
原始的 sysvinit 软件包包含了一系列的控制启动,运行和关闭所有其他程序的工具。
halt 停止系统。

init 这个就是 sysvinit 本身的 init 进程实体,以 pid1 身份运行,是所有用户进程的父进程。最主要的作用是在启动过程中使用/etc/inittab 文件创建进程。

mesg 控制其它用户对用户终端的访问

pidof 找出程序的进程识别号(pid),输出到标准输出设备。

poweroff 等于 shutdown -h –p,或者 telinit 0。关闭系统并切断电源。

reboot 等于 shutdown –r 或者 telinit 6。重启系统。

wall 向所有有信息权限的登录用户发送消息。

# Linux 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×