Linux基础知识--linux的文件系统和bash的基础特性

一.Linux文件系统:

    Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中

    linux文件系统遵循FHS(Filesystem Hierarchy Standard,文件系统目录标准),多数Linux版本采用这种文件组织形式。FHS采用了树行组织文件。

    FHS定义了两层规范,第一层是,/目录下面的各个目录应该要放什么文件数据。第二层是针对/usr及/var 这两个目录的子目录来定义的。

  根文件系统:(root filesystem)

    /boot:引导文件存放的目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放此目录中。

    /bin:供所有用户使用的基本命令存放的目录。不能关联(挂载)至独立分区,os启动时即会用到目录下的程序。

    /sbin:供管理员才能使用的执行命令的存放目录。不能关联至独立分区,os启动时会用到目录下的程序。

    /lib:基本共享库文件和内核模块文件(/lib/modules)

    /lib64:

    /etc:主机特有的配置文件存放的目录(大多数为纯文本文件)

        /etc/opt:专门为opt下的程序存放配置文件的

        /etc/X11:专门为X协议程序存放配置文件的。X-->Xmanager-->桌面

    /home:用户的家目录,一班普通用户的家目录都在此

    /media:便携式移动设备的挂载点

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

    /dev:设备文件和特殊文件的存放目录

        b:block device:块设备文件。可随机访问设备。

        c:character device:线性设备。

    /opt:第三方应用程序的安装目录。(附件的存放目录)

    /srv:系统上的服务用到的数据的存放目录。

    /tmp:临时文件,当前系统上临时文件都存放在此目录中

    以上的目录除了/boot,/home,/media,/mnt之外的目录都不能进行关联

    

    /usr:(universal shared only-read data):全局共享只读数据目录

        /usr/bin:所有用户都能使用的命令存放目录。存放系统完成一些基本功能的命令,而不是系统启动时的所用到的命令的目录,保证系统拥有完整功能而提供的应用程序。

        /usr/sbin:

        /usr/lib:各应用软件的函数库文件

        /usr/lib64:

        /usr/include:C语言程序头文件存放的目录。头文件时库文件的调用方式和打开方式

        /usr/local:取代了/opt。第三方应用程序的安装目录。此目录下还有以下目录:

          bin,sbin,lib,lib64,etc,share

        /usr/share:结构化独立的数据,存放一些背景文件,doc,man等。

        /usr/X11R6:Xwindows system

        /usr/src:源代码存放的目录

    /var:variable data file:可变文件目录

        /var/cache:Application cache data:应用程序缓存目录

        /var/lib:存放可变的状态数据

        /var/local:专用于为/usr/local下的应用程序存储可变数据

        /var/lock:锁文件

        /var/log:日志目录

        /var/run:运行中的进程相关的数据,通常用于存放进程的pid文件

        /var/spool:应用程序的缓存数据

        /var/tmp:系统重启产生的临时数据存储的目录

    /proc:伪文件系统:用于输出内核与进程信息相关的虚拟文件系统

    /sys:伪文件系统:用于输出当前系统上硬件设备相关信息的虚拟文件系统

    /selinux:security enhanced linux:selinux相关的安全策略信息的存放路径


  Linux上的应用程序的组成部分:

    二进制程序:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

    库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64。要么是共享的库,要么是自己供二次开发的库

    配置文件:/etc

    帮助文件:/usr/share


二.bash的基础特性:

    (1)历史命令:

       history:

        环境变量:

        HISTSIZE:命令历史记录的条数

        HISTFILE:~/.bash_history

        HISTFILESIZE:命令历史文件中的命令条数。可以修改此环境变量来改变历史文件存放

        命令的条数

       history -d OFFSET

           -c清楚缓存

           -a:手动追加当前会话缓冲区的命令历史至历史文件中。

       history #:显示历史命令最近的#条命令

       调用命令的快捷键:

        !#:执行第#号命令

        !!:

        !string:执行最近一次一string开头的命令

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

        !$

        ESC,.

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

        环境变量:HISTCONTROL

          ignoredups:忽略重复的命令,重复且连续

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

          ignoreboth:==ignoredups,ignorespace

       hash:

       linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令

       时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器

       默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先

       会查看hash表,没有该命令才会去PATH路径下寻找。

    (2)命令补全:

     bash执行的命令:

       内部命令:

       外部命令:bash根据PATH环境变量定义的路径,自左而右在每一路径搜寻以命令名的文件

        第一次找到即为要执行的命令所在的目录。

       直接补全:tab键,用户给定的字符串至于一条唯一对应的命令

    (3)路径补全:

       把用户给出的字符串当做路径的开头,并在其指定上级目录下搜寻已指定的字符串开头的

       的文件名;如果唯一则补全,否则,再tab就会列出文件列表

    (4)命令行展开:

       ~:展开为用户的主目录

       ~USERNAME:展开为指定用户的主目录

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

        /tmp/{a,b} ==>/tmp/a  /tmp/b

        /tmp/{a,b}/hi ==> /tmp/a/hi /tmp/b/hi

        /tmp/{x,y}_{m,n} ==> /tmp/x_m /tmp/x_n /tmp/y_m /tmp/y_n

    (5)命令的执行状态结果

        执行成功:当上一条命令执行成功后,再次执行echo $? 查看执行状态;0表示成功。

        如:         

          [root@localhost ~]# ls
                  a  anaconda-ks.cfg  install.log  install.log.syslog
                  [root@localhost ~]# echo $?
                  0

        执行失败:当上一条命令执行成功后,再次执行echo $? 查看执行状态;1-255表示失

        败。如:    

        [root@localhost ~]# lls
        -bash: lls: command not found
        [root@localhost ~]# echo $?
        127

        bash使用特殊变量$?保存最近一次执行命令的状态结果。

程序执行结果有两类:

命令执行的返回值:

命令执行状态结果: