zoukankan      html  css  js  c++  java
  • 庖丁解牛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:./来实现

     

     

  • 相关阅读:
    中移动ipv6-老毛子固件获取ipv6设置
    win7-win10 禁用IPV6临时地址
    辅助调用函数【call,apply,bind】
    Unraid修改docker镜像地址&默认启动
    docker基本入门知识-小白向
    [不止于代码]Unraid基本使用速记
    Dockerfile文件说明
    Git之pull,fetch差别
    代码片段添加智能提示,打造一款人见人爱的ORM框架
    新定义三层,指挥官模式
  • 原文地址:https://www.cnblogs.com/gentoofly/p/2808832.html
Copyright © 2011-2022 走看看