庖丁解牛Linux基本系统组成分析

 

 

 

 

 

庖丁解牛—Linux基本系统组成分析


 

 

 

 


 

 

目 录

 

 TOC \o "1-3" \h \z \u 1.      概述

2.      LFS简介

3.     Linux系统基础软件

3.1 基础源码包

3.2 Linux系统命令分类

3.3 Linux命令执行过程


 

1.  概述

Linux系统很大,在安全操作系统上用rpm –aq  | wc –l 查看,可以看到有1000多个包所组成,而每个包又包含无数个命令和文件等,给人感觉Linux系统庞大无比,本文在LFS基础上,对基本Linux系统组成元件进行分析

2. LFS简介

 LFS是Linux From Scratch英文简称,它的意思是从零开始构成一个Linux系统,整个Linux系统所有的软件包都是通过手动编译,再经过相应配置,最终安装完成一个基本Linux系统。相比于安全操作系统安装过程,直接点击”下一步“来完成安装,这个工作量会大得多.

LFS构建完成的Linux,所有的软件都是通过源代码编译完成的,这就需要有编译环境,也即是需要宿主系统,通常以现有的Linux系统或是LFS的LiveCD作为宿主系统.

LFS官网: http://www.linuxfromscratch.org/

3. Linux系统基础软件   3.1 基础源码包

 查看LFS中文文档,可知Linux基本系统主要有如下软件包,现在就这个软件包进行分析,主要分析这些包中所包含的命令以及库文件

1             Linux-2.6.32.8 API Headers

2             Man-pages-3.23

3             Glibc-2.11.1

4             Zlib-1.2.3

5             Binutils-2.20

6             GMP-5.0.0

7             MPFR-2.4.2

8             File-5.04

9             GCC-4.4.3

10          Sed-4.2.1

11          Pkg-config-0.23

12          Ncurses-5.7

13          Util-linux-ng-2.17

14          E2fsprogs-1.41.10

15          Coreutils-8.4

16          Iana-Etc-2.30

17          M4-1.4.13

18          Bison-2.4.1

19          Procps-3.2.8

20          Grep-2.5.4

21          Readline-6.1

22          Bash-4.1

23          Libtool-2.2.6b

24          GDBM-1.8.3

25          Inetutils-1.7

26          Perl-5.10.1

27          Autoconf-2.65

28          Automake-1.11.1

29          Bzip2-1.0.5

30          Diffutils-2.8.1

31          Gawk-3.1.7

32          Findutils-4.4.2

33          Flex-2.5.35

34          Gettext-0.17

35          Groff-1.20.1

36          GRUB-1.97.2

37          Gzip-1.4

38          IPRoute2-2.6.31

39          Kbd-1.15.1

40          Less-436

41          Make-3.81

42          Man-DB-2.5.6

43          Module-Init-Tools-3.11.1

44          Patch-2.6.1

45          Psmisc-22.10

46          Shadow-4.1.4.2

47          Sysklogd-1.5

48          Sysvinit-2.86

49          Tar-1.22

50          Texinfo-4.13a

51          Udev-151

52          Vim-7.2

以上52源码包,按顺序编译,再加上Linux内核,即构成基本Linux系统

以下对部分源码包进行分析

1     Linux API Headers ----是为了用户 Glibc 而公开的内核 API

2      Glibc-2.11.1      ----包含了主要的C库

5  Binutils-2.20      --- 包含一个链接器,一个汇编器和其他处理目标文件的工具

8  File-5.04         ---编译生成file命令,file命令的作用主要为通过执行一些测试,尝试对指定文件进行分类, 这些测试包括: 文件系统测试、幻数(magic number)测试和语言测试。

10 Sed-4.2.1     --sed为一个流编译器,在Linux系统脚本中,有广泛作用

12 Ncurses-5.7  ---程序包提供字符终端处理库以及clear等一些命令

13 Util-linux-ng-2.17

agetty

打开 tty端口,为登录名称建立命令控制符,并引出 login 程序

arch

报告机器的体系结构

ctrlaltdel

设置 Ctrl+Alt+Del 组合键的功能为硬重启或软重启

dmesg

显示内核的启动信息

fdisk

管理指定设备的分区表

fsck

用来检查,并可以修复文件系统

hwclock

查询和设置硬件时钟,也被称为实时时钟(RTC) 或 基本输入输出系统(BIOS) 时钟

mkfs

在一个设备(通常是一个硬盘分区)上建立文件系统

mkswap

初始化指定设备或文件,以用做交换区域

more

分屏显示文件

mount

把一个文件系统从一个设备挂载到一个文件系统树中的目录

rename

重命名文件,用另一个字符串代替给定字符串

swapoff

取消对指定交换设备和交换文件的使用

swapon

使指定的交换设备和交换文件生效,并列出当前使用的交换设备和交换文件

umount

卸载一个被挂载的文件系统

whereis

报告给定命令的二进制文件、源文件、手册文档的位置

14  E2fsprogs-1.41.10

chattr

在 ext2 和 ext3 文件系统上改变文件属性

e2fsck

用来检查和修复 ext2 和 ext3 文件系统

filefrag

报告一个特定文件可能被破坏的如何严重

fsck.ext2

默认检查 ext2 文件系统。它是指向 e2fsck 的一个硬链接

fsck.ext3

默认检查 ext3 文件系统。它是指向 e2fsck 的一个硬链接

fsck.ext4

默认检查 ext4 文件系统。它是指向 e2fsck 的一个硬链接

fsck.ext4dev

默认检查 ext4 开发文件系统。它是指向 e2fsck 的一个硬链接

lsattr

列出 ext2 文件系统上的文件属性

mke2fs

在给定设备上创建 ext2 或 ext3 文件系统

mkfs.ext2

默认创建ext2 文件系统,它是mke2fs 的一个硬链接。

mkfs.ext3

默认创建ext3 文件系统,它是mke2fs 的一个硬链接。

mkfs.ext4

默认创建ext4 文件系统,它是mke2fs 的一个硬链接。

15  Coreutils-8.4

   这个源码包,顾名思义,包括一系列系统核心命令,以下为部分命令

basename

去掉文件名中的目录和后缀

cat

把文本文件的内容发送到标准输出

chcon

改变文件和目录的安全内容(用于SELinux)

chgrp

改变文件和目录属组

chmod

改变每个文件的权限到指定模式;该模式或者将权限改变成符号形式, 或者变成八进制数字形式

chown

改变文件和目录的属主和/或属主组

chroot

使用特定的目录作为执行某个命令的根( /) 目录

cksum

输出指定的每个文件的循环冗赘核对 (CRC) 校验和字节数

cp

拷贝文件

csplit

把一个文件按照给定的模式或者行号分成几块

cut

从指定的文件中提取特定的列送到标准输出

date

以特定的格式显示当前时间,或者设置系统日期

dd

以给定的块大小和数量拷贝文件,同时还可以对文件进行一些转换

df

报告所有挂载的文件系统或仅仅是保存选定文件的文件系统上可用(和已用) 的磁盘空间的数量。

38  IPRoute2-2.6.31  (以下为部分命令)

ip

主可执行程序,它包含一些不同的功能:

ip link  <device>查看和修改设备状态

ip addr   查看地址和属性,添加新地址、删除旧地址。

ip neighbor 查看邻居的特性,添加新邻居、删除旧邻居。

ip rule  查看和修改路由规则

ip route  查看路由表和修改路由表规则

ip tunnel  查看和修改 IP 隧道及其特性

ip maddr  查看和修改多播地址及其特性

ip mroute  设置、修改、删除多播路由

ip monitor  不间断的监视设备状态、地址、路由

48  Sysvinit-2.86 (部分命令)

bootlogd

把启动信息记录到一个日志文件

halt

正常情况下等效于shutdown加上-h 参数(当前系统运行级别是 0 时除外)。 它将告诉内核去中止系统,并在系统正在关闭的过程中将日志记录到 /var/log/wtmp文件里。

init

当内核已经初始化硬件,接管引导程序,开启指令线程时, init 会被第一个启动。通过ps命令查看,该进程ID为1

killall5

发送一个信号到所有进程, 但那些在它自己设定级别的进程将不会被这个运行的脚本所中断。

last

给出哪一个用户最后一次登录(或退出登录),它搜索 /var/log/wtmp文件,出给出系统引导、关闭、运行级别改变等信息。

lastb

给出登失败的尝试,并写入日志 /var/log/btmp

mesg

控制是否允许其他用户也有向系统所有用户发送信息的权限

3.2 Linux系统命令分类

Linux系统命令,还可以分为shell内部命令以及系统命令

可通过type command方式查看一个命令是系统命令还是shell内部命令

由上可知,more为系统命令,echo为shell内建命令

3.3 Linux命令执行过程

Linux系统构成如下图所示,位于最外层的是shell,用户通过shell,将要执行的命令传递给系统,系统执行完命令,将执行结果反馈给shell.

shell

kernel

hardware

 
   


当shell接到一个用户输入的命令,首先判断该命令是否为shell内建命令,如果是,则直接执行,如果不是,则根据$PATH变量指定的路径来搜索该命令是否存在于$PATH变量定义的目录中,

[root@HSW ~]# echo $PATH

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

如果不存在,则提示:

[root@HSW ~]# hsw

-bash: hsw: command not found

如果存在,则执行该命令,执行时,命令会调用一系列系统共享库,可用ldd命令查看一个命令执行时共调用了哪些共享库,

[root@HSW ld.so.conf.d]# ldd /bin/more

        linux-vdso.so.1 =>  (0x00007fff22f89000)

        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00000030c5400000)

        libc.so.6 => /lib64/libc.so.6 (0x00000030bac00000)

        /lib64/ld-linux-x86-64.so.2 (0x00000030ba400000)

以上所说的是命令在执行时,调用系统默认的动态共享库,如果在我们自己在程序开发过程中,开发了一些动态库,并未放在系统指定的路径中,为了让命令在运行时,动态加载自定义的动态共享库,则可通过定义LD_LIBRAY_PATH来实现,例如,自定义了一个动态共享库libmy.so中当前目录,要使命令在运行时加载该库,则可通过

export  LD_LIBRAY_PATH=$LD_LIBRAY_PATH:./来实现

 

 

原文地址:https://www.cnblogs.com/gentoofly/p/2808832.html