• linux文件系统及bash基础特性


    linux文件系统

        一、根文件系统

      linux被识别的第一个被称为根之间关联的文件系统叫做根文件系统(rootfs),其他分区要想被读到,需要挂载到根目录的某个挂载点(根的子目录)上。根文件系统至关重要,整个文件系统统一访问入口。  

      Linux引导启动时,默认使用的文件系统是根文件系统。其中一般都包括这样一些子目录:

      /boot 系统引导文件存放目录

      /bin 供所有用户使用的命令(不能关联到独立分支)不能关联到独立分区,os启动即会用到的程序。

      /sbin 管理员使用特权命令。root-only使用的命令。不能关联到独立分区,os启动即会用到的程序。

      /lib 基本共享库文件(启动就需要的库文件),以及内核模块文件。

      /lib64 专用于64位系统上的辅助库文件

      /etc 配置文件目录(大多纯文本文件)

          (1)/etc/opt 为opt启动文件存放配置目录

          (2)/etc/sgml /etc/xml两种标记语言。

      /home用户主目录约定俗成在/home/username(普通用户)管理员家目录就是/root

      /media 挂载光盘u盘等设备

      /mnt  挂载临时文件系统

      /dev 设备文件目录(特殊文件)

          b block device(可随机访问设备,三个电影,想看那个随机点那个都可以)  c character device(县信访设备,按顺序访问)

      /opt 附件,第三方应用程序安装目录系统安装完,额外安装的其他程序

      /srv 当前系统某些服务程序运行时,使用的中间数据。

      /tmp 临时文件存放位置

      注:除了/boot和/home是不能关联到独立分区的,必须在根上

      /usr 独立分区上的目录(全局共享只读数据):这可不是user的简写呦(拥有独立的文件系统结构)

       (1)/usr/bin 所有程序可使用

          (2)/usr/sbin 管理员使用

             他的配置文件还是在/etc下

              include,c语言头文件的标准库(头文件是描述库文件打开调用接口方式的)

          (3)/usr/share只读的 ,结构化独立数据

          (4)/usr/local第三方应用程序安装位置

      /var 通常独立分区,可变数据文件

      其中cache:应用程序缓存数据目录

          lib 可变状态信息数据
          local:专用于为/usr/local下应用程序存储可变数据
          lock 锁文件
          log 日志目录及文件
          opt 专用于为/opt下应用程序存储可变数据
             run 运行中进程的相关数据,通常用于存储进程中的pid
          spool应用程序缓冲池
          tmp 系统重启过程中的临时文件
      /proc 用于输出内核,进程相关的虚拟文件系统,
      /sys 输出当前系统上硬件设备相关信息的虚拟文件系统
      /selinux selinux相关安全策略等信息的存储位置
        二、linux下的文件类型
      -(f)普通文件
      d目录文件(存放的是路径信息,找到目录下的信息的路径信息,文件名到文件的路径信息)
      b块设备文件,l软连接文件,c字符设备,p管道文件,s套接字文件(访问现有系统的一个专用接口)
        三、系统管理类命令
      关机或重启命令:
      (1)halt,halt调用shutdown来关机,-f选项就是不调用shutdown强制关机,不建议使用
      (2)shutdown,shutdown  [option...]  time  [message...]
        -r 重启;-h关闭并清电源;-c取消关机选项;
        time:now:立刻
        +m:相对时间表示法,从命令提交后开始计算。
        hh:mm:给定具体时间。
      (3)power off,关机。
      (4)init 0:关机;init6 重启。
      (5)reboot;重启。
      用户登录信息查看命令:
      (1)whoami:显示当前登录的用户;
      (2)who:当前所有登录会话;
      (3)w:系统当前所有登录会话和操作。

    常用管理命令

      1.使用pwd和cd命令来确定和切换目录

    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# cd /
    [root@localhost /]# pwd
    /
    
    [root@localhost /]# pwd
    /
    [root@localhost /]# cd
    [root@localhost ~]# cd
    

      2.使用ls命令列出目录中的内容

      -a 显示所有的文件,包括隐藏文件,.开头的为隐藏文件

      -all 显示所有文件的详细信息,

      -l 显示文件详细信息,不包括隐藏文件

    [root@localhost ~]# ls -a
    .   anaconda-ks.cfg  .bash_logout   .bashrc  .lesshst  Python-3.6.1      .tcshrc
    ..  .bash_history    .bash_profile  .cshrc   .pki      Python-3.6.1.tgz  .viminfo
    [root@localhost ~]# ls -all
    total 22084
    dr-xr-x---.  4 root root      223 Aug 28 03:04 .
    dr-xr-xr-x. 22 root root     4096 Jul 23 06:59 ..
    -rw-------.  1 root root     1669 May 13 10:16 anaconda-ks.cfg
    -rw-------.  1 root root    19956 Jul 24 11:01 .bash_history
    -rw-r--r--.  1 root root       18 Dec 28  2013 .bash_logout
    -rw-r--r--.  1 root root      176 Dec 28  2013 .bash_profile
    -rw-r--r--.  1 root root      176 Dec 28  2013 .bashrc
    -rw-r--r--.  1 root root      100 Dec 28  2013 .cshrc
    -rw-------.  1 root root       35 May 15 10:53 .lesshst
    drwxr-----   3 root root       19 May 25 09:38 .pki
    drwxr-xr-x  18  501  501     4096 Jun 12 09:15 Python-3.6.1
    -rw-r--r--   1 root root 22540566 May 23 11:21 Python-3.6.1.tgz
    -rw-r--r--.  1 root root      129 Dec 28  2013 .tcshrc
    -rw-------   1 root root     9062 Aug 28 03:04 .viminfo
    [root@localhost ~]# ls -l
    total 22024
    -rw-------.  1 root root     1669 May 13 10:16 anaconda-ks.cfg
    drwxr-xr-x  18  501  501     4096 Jun 12 09:15 Python-3.6.1
    -rw-r--r--   1 root root 22540566 May 23 11:21 Python-3.6.1.tgz
    

      3.使用cp命令复制文件和目录

      cp -r 递归复制

      cp -p 保留原文件的用户权限

    [root@localhost /]# cp a.txt /tmp/
    [root@localhost /]# ls /tmp/
    a.txt  etc.conf  etc.test  maxusers.txt  test.txt
    [root@localhost /]# cp -r /dj /tmp/
    [root@localhost /]# ls /tmp/
    a.txt  dj  etc.conf  etc.test  maxusers.txt  test.txt
    [root@localhost /]# cp -rpf /dj /tmp/
    [root@localhost /]# ls /tmp/
    a.txt  dj  etc.conf  etc.test  maxusers.txt  test.txt
    

      4.使用mv命令移动及修改文件和目录名 

    [root@localhost /]# mv a.txt b.t
    [root@localhost /]# ls
    bin   b.t  dj   home  lib64  mnt      oo   Packages  root  sbin  sys  tt   var
    boot  dev  etc  lib   media  mylinux  opt  proc      run   srv   tmp  usr
    [root@localhost /]# mv b.t /tmp/
    [root@localhost /]# ls /tmp/
    a.txt  b.t  dj  etc.conf  etc.test  maxusers.txt  test.txt
    

      5.使用mkdir命令创建目录 

    [root@localhost /]# mkdir -p /a/b/c/d
    [root@localhost /]# ls /a/b/c/
    d

        [root@localhost /]# mkdir -p /tmp/a/b/c/d
        [root@localhost /]# ls /tmp/
        a a.txt b.t dj etc.conf etc.test maxusers.txt test.txt

      6.使用touch命令创建文件

    [root@localhost /]# touch a.txt
    [root@localhost /]# ls
    a      bin   dev  etc   lib    media  mylinux  opt       proc  run   srv  tmp  usr
    a.txt  boot  dj   home  lib64  mnt    oo       Packages  root  sbin  sys  tt   var
    

      7.使用rm命令删除文件

    [root@localhost /]# rm -rf a.txt 
    

    bash的基础特性:

      一、命令历史

      history;history的环境变量:

      (1)HISTSIZE:命令历史的条数;

    [root@localhost ~]# echo $HISTSIZE
    1000

      (2)HISTFILE:持久保存命令历史的文件,当退出登录的时候,此次的命令历史才会被写入到HISTFILE中

    [root@localhost ~]# echo $HISTFILE
    /root/.bash_history

      命令历史存在~/.bash_history里。

      (3)HISTFILESIZE:命令历史文件记录的历史条数。

    [root@localhost ~]# echo $HISTFILESIZE
    1000

      二、history常用命令用法  

      -c:清空命令历史  

      -d offset:删除指定命令历史,offset为指定的行数  

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

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

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

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

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

      !#:再次执行历史列表中第#条命令

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

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

      调用上一条最后一个参数方法:!$;ESC,.;ALT+.。

      控制命令历史的记录方式:环境变量:HISTCONTROL;

      ignoredups:忽略重复命令,连续且相同才算重复。

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

      ignoreboth:以上两者皆忽略。
      修改环境变量值得方式为export 变量名=‘值’;变量赋值就是把赋值符号后面的数据存储于变量名指向内存空间。

    [root@localhost ~]# echo $HISTCONTROL
    ignoredups
    [root@localhost ~]# export HISTCONTROL=ignoreboth
    [root@localhost ~]# echo $HISTCONTROL
    ignoreboth

      三、命令、路径补全

      命令补全:

      shell程序在接受到用户执行命令的请求时,最左侧的字符串会被当做命令

      命令查找机制:根据PATH环境变量中设定的目录($PATH),自左而右逐个搜索目录下的文件名

      按Tab可直接补全命令,若给定字符开头的命令不唯一,再次Tab给出以给定字符作为开头的文件列表

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

      四、命令行展开

      ~:展开为用户家目录;

      ~username:展开为指定用户的家目录

      {}:展开为多个路径。例:/tmp/{a,b} = /tmp/a,/tmp/b;/tmp/{a,b}/{c,d} =/tmp/a/c,/tmp/a/d,/tmp/b/c,/tmp/b/d。

      五、命令的执行结果

      命令执行的状态结果有两种:成功(0),失败(1-255),可用$?查看最近一条命令的执行状态结果。

      程序执行有两类结果:程序返回值和程序执行状态结果。

      六、命令别名(alias)

      alias:显示当前shell进程所有可用别名。

    [root@localhost tmp]# alias
    alias cp='cp -i'
    alias egrep='egrep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias grep='grep --color=auto'
    alias l.='ls -d .* --color=auto'
    alias ll='ls -l --color=auto'
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'
    alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

      alias name=‘value’:定义别名,使用alias相当于执行value。

      :在命令行定义别名,仅对当前shell有效,永久有效需要定义在配置文件中。

      对当前用户:~/.bashrc

      对所有用户:/etc/bashrc

      并且编辑配置不会立即生效。

      撤销别名(unalias)

      七、glob(bash中用于实现文件通配)

      通配符:*,?,[]

      *任意长度的任意字符

      ?任意单个字符

      []匹配指定范围的单个字符[0-9],[a-z]:所有字母,不区分大小写[A-Z]:大写字母

      [^]取反

      专用字符集:

       [[:upper:]]:所有大写字母

         [[:lower:]]:所有小写字母

         [[:alpha:]]:所有字母

         [[:digit:]]:所有数字

         [[:alnum:]]:所有的字母和数字

         [[:space:]]:所有空白字符

         [[:punct:]]:所有标点符号

      八、bash的I/O重定向及管道

      打开文件都有一个fd:file descriptor(文件描述)

      标准输入:0

      标准输出:1

      错误输出:2

      I/O重定向就是改变标准位置。

      输出重定向:

      >    覆盖输出

      >>    追加输出

      set -C:禁止覆盖输出重定向至已存在的文件

      set +C:开启覆盖输出重定向至已存在的文件(默认)

      错误输出重定向:

      2>    覆盖输出

      2>>    追加输出

      合并正常输出流和错误输出流

      &>    覆盖输出

      &>>    追加输出

      COMMADN > /PATH/TO/somefile  2>&1 :如果命令执行成功则覆盖输出至somefile,执行不成功也覆盖输出至somefile

      COMMAND >> /PATH/TO/somefile 2>&1:如果命令执行成功则追加覆盖至somefile,执行不成功也追加输出至somefile

      注:特殊设备:当不需要命令的执行结果,只需要知道命令的执行状态,则可以重定向至/dev/null,/dev/null相当于一个垃圾桶。

      输入重定向:<

      Here Document:<<,可以作为指定文件的结束符,常用于shell编程

    [root@localhost tmp]# cat <<EOF
    > how are you
    > EOF
    how are you

      tr [OPTION]... SET1 [SET2]

      把输入的数据当中的字符,凡是在SET1定义范围内出现的,通通对位转换为SET2出现的字符,不修改原文件

      tr -d SET1  <  /PATH/FROM/SOMEFILE     删除SET1中的字符,区分大小写

      管道

      连接程序,最后一个命令会在当前shell进程的子进程中执行。

      COMMAND1 | COMMAND2 | COMMAND3 ...

    [root@localhost tmp]# echo 'abcdefg' | tr 'a-z' 'A-Z' | tr -d 'AD' 
    BCEFG

      tee

      显示程序的输出并将其复制到一个或多个文件中。

    目录管理类命令

      一、mkdir

      make directories 创建目录

      mkdir [OPTION]... DIRECTORY...

      常用选项:

      -p:存在不报错,逐级生成目录;

      -v:显示详细信息;

      -m:mode,创建目录时直接指定权限。

      mkdir一次可创建多个目录:

    [root@localhost tmp]# mkdir -v {a,b}/{c,d}
    mkdir: cannot create directory ‘a/c’: No such file or directory
    mkdir: cannot create directory ‘a/d’: No such file or directory
    mkdir: cannot create directory ‘b/c’: No such file or directory
    mkdir: cannot create directory ‘b/d’: No such file or directory

      

    [root@localhost ~]# mkdir -p /mylinux/{bin,boot/grub,dev,etc/{rd.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}
    [root@localhost ~]# tree /mylinux
    /mylinux
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rd.d
    │   │   └── init.d
    │   └── sysconfig
    │       └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │       ├── bin
    │       └── sbin
    └── var
        ├── lock
        ├── log
        └── run

      二、rmdir

      remove empty direcories

      移除空目录

      常用选项:

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

      -v:显示过程

    [root@localhost b]# rmdir -pv /tmp/a/b/c/
    rmdir: removing directory, ‘/tmp/a/b/c/’
    rmdir: removing directory, ‘/tmp/a/b’
    rmdir: removing directory, ‘/tmp/a’
    rmdir: removing directory, ‘/tmp’
    rmdir: failed to remove directory ‘/tmp’: Device or resource busy

      三、tree:

      -d:只显示目录

      -L:level:指定显示的层级数目

      -P:pattern只显示由指定pattern匹配到的路径。

    快捷操作

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

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

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

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

      ctrl+l:清屏,相当于clear

    文本文件查看类命令

      cat

      cat [OPTION]... [FILE]...

      查看文件内容,直接显示到文件底部

      常用选项:

      -n:可以显示行数;

      tac与cat类似,可反向查看文件内容

      head

      与cat类似,常用选项:

      -c #:指定获取前#字节;

      -n # / -#:指定获取前#行。

      tail

      与head相似,除了-c与-n以外,-f可跟踪显示文件新追加的内容。

    文件的时间戳管理工具:

      一、stat

      display file or file system status

      文件:两类数据

      元数据:metadata,文件的状态,创建时间,修改时间,大小,权限等

      数据:文件里面的内容

      stat显示的就是文件的元数据,包含文件路径,大小,blocks数目,IO block,文件类型,inode号,权限,uid,gid和三个时间戳等

      三个时间戳:

      access:最近一次访问的时间,即atime

      modify:最近一次修改文件的时间,即mtime

      change:文件最近一次改变的时间,即改变元数据的时间即ctime

      二、touch

      change file timestamps  修改时间戳

      touch [OPTION]... FILE...

      文件不存在则创建文件,当直接使用命令去touch一个文件的时候,修改的是所有的时间戳

      常用选项:

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

      -a:仅修改access time

      -m:仅修改modify time

      -t   STAMP

           [[CC]YY]MMDDhhmm[.ss]

    文件管理工具

      一、cp

      复制文件或者目录

      cp [OPTION]... [-T] SOURCE DEST

      cp [OPTION]... SOURCE... DIRECTORY

      cp [OPTION]... -t DIRECTORY SOURCE...

      cp SRC DEST

      SRC是文件

        如果DEST不存在,则先创建DEST,并复制源文件的数据流至DEST文件中

        如果DEST存在:DEST是非目录文件,则覆盖DEST文件

        DEST是目录文件,则在DEST目录下创建一个与源文件同名的文件,并复制其数据

      SRC是多个文件时:
        DEST必须存在,且为目录,否则就会报错。
      SRC是目录:
        DEST不存在,则创建指定目录,复制SRC目录中所有文件至DEST。
        DEST存在,DEST是文件,报错,DEST是目录分别复制每个文件至目标目录中,并保持原名。

      常用选项:

      -i:交互式复制

      -f:强制覆盖目标文件

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

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

      -a:-dR --preserve=all, archive,用于实现归档;

      --preserv[=ATTR_LIST]         

        mode:权限  

        ownership:属主和属组

             timestamps: 时间戳

             context:安全标签

             xattr:扩展属性

             links:符号链接

             all:上述所有属性

      二、mv

      移动文件,可用来重命名文件

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

           mv [OPTION]... SOURCE... DIRECTORY

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

      常用选项:
      -i:交互式

      -f:强制覆盖文件

      三、rm

      移除文件

      rm [OPTION]... FILE...

      常用选项:

      -i:交互式移除文件

      -f:强制删除文件

      -r:递归删除

      :所有不用的文件建议不要直接删除,可以移动至某个专用的目录(用来做回收站的目录)

      :还有个无敌bug,rm-rf /*。

  • 相关阅读:
    从零开始搭建Wpf基础9-使用MaterialDesignToolkit对界面进行美化下
    从零开始搭建Wpf基础8-登录界面成功后显示主窗体
    从零开始搭建Wpf基础7-Api数据接入
    从零开始搭建Wpf基础6-Tab选项卡MVVM实现
    Wpf下dragablz使用Prism8进行导航-3
    从零开始搭建Wpf基础5-无限级菜单MVVM实现
    从零开始搭建Wpf基础篇4-使用Prism进行模块化
    从零开始搭建Wpf初学篇3-界面模块化
    手写es5和es6实现原型继承
    判断类型(通用类型检测方法)和手写深拷贝
  • 原文地址:https://www.cnblogs.com/Jeffding/p/7192418.html
Copyright © 2020-2023  润新知