04 Linux根文件系统和目录结构及bash特性

时间:2022-01-12 18:52:52

Linux文件系统:

  Linux:glibc

  程序编译方式:

    动态链接式编译

    静态链接式编译

  进程的类型:

    终端:硬件设备,在硬件设备上可以关联一个用户接口,从而让用户用此接口与操作系统打交道

    与终端相关:通过终端启动

    与终端无关:操作引导启动过程当中自动启动

  操作系统的组成:

      静态:kernel(内核),application(应用程序)

      文件系统:层级结构

  FHS:

     Filesystem Hierarchy Standard(文件系统层次化标准)

        /bin:所有用户可用的基本命令程序文件

        /sbin:供系统管理使用的工具程序

        /boot:引导加载器必须用到的各静态文件;例如:kernel,initramfs(initrd,grub等)

        /dev:存储特殊文件或设备文件

          设备有两种类型:字符设备(线性设备),块设备(随机设备)

        /etc:系统程序的配置文件,只能为静态的不能为二进制文件

        /home:普通用户的家目录的集中位置:一般每个普通的家目录默认为此目录下与用户名同名的子目录,/home/username

        /lib:为系统启动或根文件系统上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块

          libc.so.*:动态链接的C库

          ld*:运行时链接器/加载器

          modules:用于存储内核模块的目录

        /lib64::64位系统特有的存放64位共享库的路径

        /media:便携式设备挂载点,cdrom,floppy等

        /mnt:其它文件系统的临时挂载点

        /opt:附加应用程序的安装位置;可选路径

        /root:管理员的家目录;可选

        /srv:当前主机为服务提供的数据;

        /tmp:为那些会产生临时文件的程序提供的用于存储临时文件的目录;可供所用户执行写入操作;有特殊权限

        /usr:/usr Hierarchy,全局共享的只读数据路径;

          bin,sbin

          lib,lib64

          include:C程序头文件

          share:命令手册页和自带文档等架构特有的文件的存储位置

          local:另一个层级目录:

          x11R6:X-Window程序的安装位置

          src:程序源码文件的存储位置

        /usr/local:Local Hierarchy,让系统管理员安装本地应用程序,也通常用于安装第三方程序

        /var:/var Hierarchy,存储常发生变化的数据的目录

          /var/cache/ 应用程序的缓存数据

          /var/lib/  状态信息。由程序在运行时维护的持久性数据。

          /var/log/ 日志文件

          /var/run 已经被/run/替代,自最后一次启动以来运行中的系统的信息:如运行中的守护进程,当前登录的用户。

          /proc:基于内存的虚拟文件系统;内核及进程存储其相关信息;它们多为内核参数,例如net.ipv4.ip_forward,虚拟为net/ipv4/ip_forward,存储于/porc/sys/,因此其完整路径为/proc/sys/net/ipv4/ip_forward

          /sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径

            主要作用:在于为管理Linux设备提供一种一模型的接口

      Linux文件系统层次结构标准简介(参考网址):

            https://blog.csdn.net/qq_29753285/article/details/69791332

  Linux系统上的文件类型:

      -:常规文件;即f;

      d:directory,目录文件

      b:block device,块设备文件,支持以“block”为单位进行随机访问

      c:character device,字符设备文件,支持以“character”为单位进行先行访问

        major number:主设备号,用于标识设备类型,进而确定要加载的驱动程序

        minor number:次设备号,用于标识同一类型中的不同的设备,

      l:symbolic link:符号链接文件(相当于Windows当中的快捷方式);

      p:pipe,命名管道;

      s:socker,套接字文件

  基本命令:

    命令类型:

      外部命令

      shell内嵌命令

      type command

        内部:builtin

        外部:显示为命令文件路径

          注意:命令可以有别名:别名可以与原名相同(此时原名被隐藏),此时如果要运行原命令,则使用\command

      命令别名:

        获取所有可用别名的定义:

          ~]# alias

        定义别名:

          ~]# alias NAME="command"

          注意:仅对当前shell进程有效

        撤销别名:

          ~]# unalias NAME

    which命令

      which - shows the full path of (shell) commands.(完整的显示命令路径)

      which [options] programname [...]  (使用格式)

        --skip-alias:忽略别名

      whereis命令:

        whereis - locate the binary, source, and manual page files for a command

        可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以通过文件索引数据库而非PATH来查找的,所以查找的面比which要广

        whereis [options]  name...

          -b:仅搜索二进制程序路径

          -m:仅搜索使用手册文件路径

        who命令:

            who - show who is logged on

            显示出系统中有哪些用户登录系统,显示的资料包含了使用者的ID、使用的登录终端、上线时间、呆滞时间、CPU占用,以及做了些什么。使用权限为所有用户

            who [OPTION]...

              -b:系统此次启动的时间

              -r:运行级别

        w命令:

           w - Show who is logged on and what they are doing.

           w命令就是who命令的增强版,用于显示目前登入系统的用户信息,执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序,单独执行w指令会显示所有的用户,您也可以指定用户名称,仅显示某位用户的相关信息

  bash的基础特性之一:

      命令历史:shell进程会在其会话中保存此前用户提交执行过的命令

        ~]# history 

        查看历史命令

          定制history的功能,可通过环境变量实现:

            HISTSIZE:shell进程可保留的命令历史的条数

            HISTFILE:持久保存命令历史的文件

                .bash_history

            HISTFILESIZE:历史命令文件的大小

        命令用法:

          history [-c] [-d 偏移量] [n]

          或 history -anrw [文件名]

          或 history -ps 参数 [参数...]

          -c:删除所有history所有命令历史

          -d offset: 删除指定命令历史

          -r:从文件读取命令历史至历史列表中

          -w:把历史列表中的命令追加至历史文件中

          history n:显示最近的n条命令

        调用命令历史列表中的命令:

          !n:再一次执行历史列表中的第n条命令

          !!:再一次执行上一条命令

          !STRING:再一次执行历史列表中最近一个以STRING开头的命令

            注意:命令的重复执行有时候需要依赖于幂等性

        调用上一条命令的最后一个参数:

          快捷键:ESC,(逗号代表松开).

          字符串:command !$

        控制命令历史记录的方式:

          环境变量:HISTCONTROL

            ignoredups:忽略重复的命令

            ignorespace:忽略以空白字符开头的命令

            ignoreboth:以上两者同时生效

          修改变量的值:

            NAME='VALUE'

Linux基础知识 

 bash的基础特性:

      命令行补全功能:

        shell程序在接受到用户执行命令的请求,分析完成之后,最左侧的字符串会被当做命令:

        命令查找机制:

          查找内部命令

          根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名

        给定的打头字符串如果能唯一标识某命令程序文件,则直接补全

                  不能唯一标识某命令程序文件,再击tab键一次,会给出列表

        路径补全:

          在给定的起始路径下,以对应路径下的打头字串逐一匹配起始路径下的每个文件

            tab:

              如果能唯一标识,则直接补全  

              否则,再一次tab,给出列表

  目录管理类的命令:

      mkdir:make directory

        mkdir [OPTION]... DIRECTORY...

          -p:自动按需创建父目录

          -v:verbose,显示详细过程

          -m MODE:直接给定创建目录的权限

          注意:路径基名方为命令的作用对象,基名之前的路径必须得存在

          

      rmdir:remove directoryies  仅能删除空目录

        rmdir [OPTION]... DIRECTORY...

        -p:删除某目录后,如其父目录为空,则一并删除之

        -v:显示命令执行过程

   bash的基础特性之:命令行展开

      ~:自动展开为用户的家目录,或指定的用户的家目录

      {}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径

        例如:/tmp{a,b}相当于 /tmpa /tmp/b

      问题一:如何创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b?

          mkdir -pv /tmp/x/{y1/{a,b},y2}

      问题二:如何创建a_c,a_d,b_c,b_d

          [root@localhost tmp]# mkdir  -v  {a,b}_{c,d}

      问题三:创建如下目录结构:

         

[root@localhost tmp]# tree /tmp/mysysroot/
/tmp/mysysroot/
├── bin
├── etc
│   └── sysconfig
│   └── network-scripts
├── sbin
├── usr
│   ├── bin
│   ├── lib
│   ├── lib64
│   ├── local
│   │   ├── bin
│   │   ├── etc
│   │   ├── lib
│   │   └── sbin
│   └── sbin
└── var
├── cache
├── log
└── run

19 directories, 0 files

mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/networkscripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}

 

  tree命令:查看目录结构

     tree [options] [diretory]

     -L level:指定要显示的层级

  bash的基础特性:命令的执行状态结果

    命令执行的状态结果:

      bash通过状态返回值来输出此结果:

        成功:0

        失败:1-255

      命令执行完成之后,其状态返回值保存于bash的特殊变量$?中

    命令正常执行时,有的还回有命令返回值:

      根据命令及其功能不同,结果各不相同

    引用命令的执行结果:

      $(command)

      或`command`

  bash的基础特性:引用

    强引用:‘ ’

    弱引用:“ ”

    命令引用:` `

  bash的基础特性:快捷键

    Ctrl+a:跳转至命令行行首

    Ctrl+e:跳转至命令行行尾

    Ctrl+u:删除光标所在处至行首之间的所有字符

    Ctrl+k:删除光标所在处至行尾之间的所有字符

    Ctrl+l:清屏,相当于clear

  文本查看类命令:cat,tac,head,tail,more,less

    分屏查看命令:more和less

    more命令:

       more FILE

        特点:翻屏至文件尾部后自动退出

    less命令:

       less FILE

    head命令:

      查看文件的前n行:

        head [options] FILE

          -n #:#代表指定的前多少行

          -#:和加-n选项一样

    tail命令:

       查看文件的后n行

        tail [options] FILE

          -n #:#代表指定的后多少行

          -#:和加-n选项一样

          -f:查看文件尾部内容结束后不退出,而是跟随显示新增的行

    stat命令:stat - display file or file system status 显示文件或文件系统的状态

      stat  FILE...

      文件:两类数据

        元数据:metadate

        数据:date

      时间戳:

        最近访问(access time):2018-12-27 11:05:22.616718714 +0800
        最近更改(modify time):2018-12-27 11:05:22.616718714 +0800
        最近改动(change time):2018-12-27 11:05:22.616718714 +0800

     touch命令:

        touch - change file timestamps

        -c:指定的文件路径不存在时不予创建

        -a:仅修改access time

        -m:仅修改modify time

        -t:STAMP

          use [[CC]YY]MMDDhhmm[.ss] instead of current time

        一般 -a和-m会和-t选项一块使用

          change time 是不能手动指定时间的

文件管理工具:cp、mv、rm

    cp命令:copy

      源文件:目标文件

      单源复制:cp [OPTION]... [-T] SOURCE DEST
      多源复制:cp [OPTION]... SOURCE... DIRECTORY
           cp [OPTION]... -t DIRECTORY SOURCE...

        单源复制:

          如果DEST(目标文件)不存在:

            则事先创建此文件,并复制源文件的数据流至DEST

          如果DEST存在:

            如果DEST是非目录文件:则覆盖目标文件

            如果DEST是目录文件:则现在DEST目录下创建一个与源文件同名的文件,并复制数据流至目标文件

        多源复制:cp [OPTION]... SOURCE... DIRECTORY
             cp [OPTION]... -t DIRECTORY SOURCE...

          如果DEST不存在:错误

          如果DEST存在:

            如果DEST是非目录文件:错误

            如果DEST是目录文件:分别复制每个文件至目录中,并保持原名

        常用选项:

           -i:交互式复制,覆盖之前提醒用户确认的

          -f:强制覆盖目标文件

          -r,-R:递归复制目录

          -d:复制符号链接文件本身,而非其指向的源文件

          -a:-dR --preserve=all,archive,用于实现归档,做备份

          --preserve=

            mode:权限

            ownership:属主和属组

            timestamps:时间戳

            context:安全标签

            xattr:扩展属性

            links:符号链接

            all:上述所有属性

      mv命令:move

        mv [OPTION]... [-T] SOURCE DEST
        mv [OPTION]... SOURCE... DIRECTORY
        mv [OPTION]... -t DIRECTORY SOURCE...

        常用选项:

          -i:交互式

          -f:force,强行覆盖

      r m命令:remove

        r m [OPTION]... FILE...

        常用选项:

          -i:interactive,交互式

          -f:force,强制删除

          -r:recursive,递归删除

          删除目录:rm -rf /PATH/TO/DIR

            危险操作:rm -rf /*

        注意:所有不用的文件建议不要直接删除,而是移至某个专用目录

    变量:

      命名的内存空间

        变量类型:

          字符型

          数值型:

            精确数值、近似数值

          存储格式、数据范围、参与运算

          8:1000,0000 10000

          16:10000,0001 0000

        ASCII码:

      变量的赋值操作:

        name=tom