Linux复习

Author Avatar
YZ 4月 05, 2018
  1. 简要说明什么是Linux,历史,发布的主要版本。

    GNU GPL下免费开源的类Unix操作系统,支持多种硬件平台;

    历史:1984,Richard Stallman starts GNU project

    ​ 1991,Linus Torvalds writes 1st version of Linux kernel

    ​ 1992, First Distributions emerge

    主要发行版本:Redhat—>Fedora Debian Ubuntu SuSe Mandrake

  2. GNU与Linux的关系

    Linux是操作系统内核,GNU提供了大量自由软件丰富在Linux上;

    GNU是一个由自由软件构成的类Unix操作系统。Linux应该叫GNU/Linux

  3. Linux安装

    ​ Choose language, keyboard type, mouse type
    Create partitions
    Setup a boot loader

    Configure network

    Configure user and authentication

    Select package groups
    Configure X
    Install packages

    Create boot disk

  4. 选择磁盘文件系统,分区:MBR or GPT

    MBR(Master Boot Record)主引导记录,有自己的启动代码;最大支持2TB(容量瓶颈)

    GPT(GUID Partition Table)GUID分区表,提供更加灵活的磁盘分区机制;支持2TB以上的大磁盘;磁盘分区个数无限制;

  5. 文件系统

    操作系统中负责存取和管理文件的部分;一个文件及其某些属性的集合,它为这些文件的序列号提供了一个名称空间;

    类型:

    • VFS,虚拟文件系统,与以下的磁盘文件系统(即文件的分区格式不同),为底层的文件系统 供了统一的抽象。(更多内容参见 Chapter3 VFS)
    • EXT2、EXT3、FAT32
  6. 启动过程

    1)加载BIOS【主板上的固定芯片,控制开机】,包含了CPU的相关信息,设备启动顺序信息,硬盘信息,内存信息,时钟信息等;之后BIOS将系统的控制权交给硬盘的第一个扇区,开始由Linux控制系统;

    2)读取MBR主引导记录,存放着预启动信息,分区表信息;找到MBR后,会复制0x7c00地址的内容(BootLoader)到物理内存;

    3)Boot Loader:加载和启动Linux系统内核;Linux下的BootLoader为GRUB;

    4)init过程,根据inittab文件来设定运行等级。

  7. 安装软件

    apt-get command * ; dpkg; aptitude;yum+rpm

  8. 文件

    文件是一堆数据的集合;可以读写的对象,有确定的属性,包括访问权限和类型;byte stream字节流文件;

    文件类型:
    

    (-)普通文件:纯文本文档、二进制文件、数据格式文件等

    (c)字符设备文件:与设备进行交互的文件。Linux中所有的设备都被抽象为了对应的文件。字符设备是按字符读取。

    (b)块设备文件:同字符设备文件,但是是按块读取。

    (p)数据输送文件,管道文件(FIFO,pipe)。他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。

    (s)socket文件。我们可以启动一个程序来监听客户端的要求,而客户端就可以通过这个 socket 来进行数据的沟通。如启动 Mysql 服务会创建一个对应的 socket 文件。一般在/var/run 目录中

    (l)符号链接

    (d)目录

  9. 目录

    Linux 中所有的目录均包含在一个统一的、虚拟的统一文件系统(Unified File System)中;物理设备被挂载到对应挂载点,抽象为一个文件;

    根目录下文件夹的作用:图

  10. 虚拟终端Virtual Terminal(Alt+Fn)

    VT1-6: text mode logins

    VT7: graphic mode login prompt

  11. 文件权限:用户、组、其他用户;读、写、执行; $ chmod 765 file

    默认文件权限:file:-rw-r—r— 644 directory:drwxr-xr-x 755

  12. 进程:进程是一个正在执行的程序实例,由执行程序、它的当前值、状态信息以及通过操作系统管理进程执行情况的资源组成;

  13. 重定向

    标准输入0 标准输出1 标准错误2

    1
    2
    3
    4
    >  输出重定向到一个文件或设备 覆盖原来的文件
    >! 输出重定向到一个文件或设备 强制覆盖原来的文件
    >> 输出重定向到一个文件或设备 追加原来的文件
    < 输入重定向到一个程序
  14. 管道:一个进程的输出作为另一个进程的输入; |

  15. 环境变量

    echo 显示环境变量 echo $PATH
    env 显示系统所有的环境变量
    set 显示本地定义的shell变量
    export 设置新的环境变量 export HELLO=”hello”

    常见环境变量

    • HOME 用于保存注册目录的完全路径名。
    • PATH 用于保存用冒号分隔的目录路径名,Shell 将按 PATH 变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。
    • TERM 终端的类型。
    • UID 当前用户的识别字,取值是由数位构成的字串。
    • PWD 当前工作目录的绝对路径名,该变量的取值随 cd 命令的使用而变化。
    • PS1 主 示符,在特权用户下,默认的主示符是#,在普通用户下,默认的主 示符是$。
  16. 脚本文件的执行方式及不同点:

    • $ sh script_file
    • chmod +x script_file ./script_file
    • source script_file 或 . script_file

    不同:法1,2会在当前进程下新开一个子进程执行该脚本;法3直接用和shell进程交互的当前进程执行该脚本。

  17. shell不同类型

  18. 变量:用户变量、环境变量、参数变量和内部变量

    用户变量:用户在shell脚本里定义的变量

    read:-n作用是不换行,echo默认换行; -p参数允许在read命令行中直接指定一个提示;

    省略变量名则输入的内容存储在默认变量REPLY; -t为等待输入时间添加一个最大值;

    -n1表示只取输入的第一个字母;-s输入密码;

​ 参数变量和内部变量:

​ 调用脚本程序时如果带有参数,对应的参数和额外产生的一些变量

  1. 引号:单引号内所有的字符都是其字面意思;双引号内,除了$、``和\外,所有字符保持本身含义

  2. 条件测试

    test expression 或 expression 或((expression)),但是(())里只能使用 C 风格的比较(< <= > >= !=)(无法使用-eq 等比较命令)

    捕获命令

    1
    $(command)    `command`

    参数扩展

    1
    $((...))
  3. 即时文档:在shell脚本中向一条命令传送输入数据;

  4. 静态库 动态库

    动态库链接时并不链接进.exe,等到执行时才链接;

    执行时,静态库.a比动态库.so效率高一些,但是使用动态库可以减小单个文件的大小,防止单个可执行文件过大。全部使用静态库,不利于维护。

  5. gcc

  6. 为什么编译分前后端:

    - 编译前端主要包括词法分析、语法分析、语义分析、中间代码生成这几个部分,仅与编译的源语言有关

    - 后端则包含代码优化和目标代码生成部分。仅与编译的目标语言及运行环境有关。

    - 将编译过程划分成前端和后端,主要目的是在多种源语言和多种目标语言的开发过程中,可以灵活搭配组合,消除重复开发的工作量,提高编译系统的开发效率;

  7. makefile描述模块间的依赖关系;make命令根据makefile对程序进行管理和维护;make判断被维护文件的时序关系

  8. 多目标:当多个目标文件依赖于一个文件,并且其生成的命令大体类似,可以使用一个自动化变量“$@”表示着目前规则中所有的目标的集合;

  9. VFS:内核中负责文件系统运作;会把各种不同的文件系统组织成同一个接口,在系统调用层再做一次封装,之后可以进行系统调用。

    产生四种对象:

    超级块对象super block:代表当前VFS内核挂载知道这个分区,存储文件系统的信息;代表一个文件系统单位;

    索引节点对象index-node object:记录磁盘上的文件;代表一个具体文件;

    文件对象file object:代表某个文件被打开;文件对象并不代表磁盘上的文件;

    目录项对象dentry object:记录每个文件的目录结构。

  10. 硬连接:不同的文件名对应同一个inode;不能跨越文件系统;对应系统调用link;

    软链接:存储被链接文件的文件名(而不是inode)实现链接;可以跨越文件系统;对应系统调用symlink;可以对目录进行链接;

  11. 系统调用 库函数

    系统调用是Linux内核的对外接口,用户程序和内核之间的唯一接口,提供最小接口;

    库函数依赖于系统调用,提供较复杂的功能;

  12. 文件描述符:0读进数据 1写数据 2也随时写数据error

  13. 文件锁

  14. 标志位

    Linux是有强制锁的,默认不开启;想让Linux支持强制性锁,不但在mount时加上-o mand,而且要对加锁的文件需要设置相关权限;

    使用 -o mand 选项来挂载文件系统。这样在执行 mount() 系统调用时,会传入 MS_MANDLOCK 标记,从而将 super_block 结构中的 s_flags 设置为 1,用来表示在这个文件系统上可以采用强制锁。例如:

    1
    2
    # mount -o mand /dev/sdb7 /mnt``
    # mount | grep mnt``/dev/sdb7 on /mnt type ext3 (rw,mand)
  15. 命令集合

    more:分页显示文件

    less:与more类似,但可以随意浏览文件;less在查看之前不会加载整个文件;

    nice:调整程序运行的优先级

    renice:可以给正在运行的进程设置调度优先级

  16. 命令行1.为用户提供了强大的文本编辑器;2.节省资源,进程树比较小;3.不会因为线程被阻塞就停止响应;

  17. 配置文件

    - title —————— Ubuntu, kernel 2.6.20-16-generic

    - root —————— (hd0,1)

    - kernel —————— /boot/vmlinuz-2.6.20-16-generic root=UUID=3f784cd9-516f-4808-a601– b19356f6bdea ro quiet splash locale=zh_CN vga=0x318

    - initrd —————— /boot/

    • title:指定此菜单项的名称,既在grub列表里的名称

    • root:指定启动分区,注意,编号从0开始:比如第一块硬盘的第一个分区应该是(hd0,0)。启动分区的编号可以使用fdisk -l查询,但是需要root权限。

    • kernel:指定启动的内核的绝对路径和名称,后边跟参数,一般来说root参数就是你的根文件系统,一定要有的,可以像范例中使用

    • initrd:指定系统启动访问真正的根文件系统前,访问的ramdisk映象