• Linux基础学习笔记2-文件管理和重定向


    本节内容

      1)文件系统结构元素

      2)创建和查看文件

      3)复制、转移和删除文件

      4)软和硬链接

      5)三种I/O设备

      6)把I/O重定向至文件

      7)使用管道

                        文件系统和结构

    文件系统

    文件和目录被组织成一个单根倒置树的结构
    文件系统从根目录开始,用"/"表示
    根文件系统(rootfs):root filesystem
    文件名称区分大小写
    以.开头的文件为隐藏文件
    路径分隔/
    文件有两类数据:
        元数据:metadata
        数据:data
    文件系统分层结构:LSB(Linux Standard Base)
    文件分层标准FHS:(File Hierarchy Standard)
        http://www.pathname.com/fhs/

    文件名规则

    文件名最长255个字节
    包括路径在内文件名称最长4095个字节
    蓝色-->目录  
    绿色-->可执行文件  
    红色-->压缩文件  
    浅蓝色-->链接文件  
    灰色-->其他文件(实际上文件颜色由配置文件/etc/DIR_COLORS来定义的)
    除了斜杠和NUL,所有字符都有效。但使用特殊字符的目录名和文件不推荐使用,有些字符需要用引号来引用它们。
    标准Linux文件系统(centos6中的ext4,centos7中的xfs),文件名称

    文件系统结构

    Directory                   Decription
    bin                            Essential command binaries
    boot                          Static files of the boot loader
    dev                           Devices files
    etc                            Host-specific system configuration
    lib                             Essential shared libraries and kernel modules
    media                        Mount point for removeable media
    mnt                           Mount point for mounting a filesystem temporarily
    opt                            Add-on application software packages
    sbin                           Essential system binaries
    srv                             Data for services provided by this system
    tmp                            Temporary files
    usr                             Secondary hierarchy
    var                             Variable data

    /boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录。
    /bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序。
    /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序。
    /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)。
    /lib64:专用于x86_64系统上的辅助共享文件存放位置。
    /etc:配置文件目录。
    /home/USERNAME:普通用户的家目录。
    /root:管理员的家目录。
    /media:便携式移动设备挂载点。

    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,/etc/DIRECTORY,/usr/local/etc
    帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc
    

    Linux下的文件类型

    -:普通文件
    d:目录文件
    b:块设备
    c:字符设备
    l:符号链接文件
    p:管道文件pipe
    s:套接字文件socket
    

    Centos7(相比较于Centos6)目录变化

    /bin和/usr/bin
    /sbin和/usr/sbin
    /lib和/usr/lib
    /lib64和/usr/lib64

    显示当前工作目录

    每个shell和系统进程都有一个当前的工作目录
    pwd:显示当前工作路径
        -P:显示真实的物理路径
        -L:显示链接路径(默认)

    绝对路径和相对路径

    绝对路径
        以正斜杠开始
        完整的文件的位置路径
        可用于任何想指定一个文件名的时候
    相对路径名
        不以斜线开始
        指定相对于当前工作目录或某目录的位置
        可以作为一个简短的形式指定一个文件名
    基名:basename
    目录名:dirname
    
    切换至父目录:cd  ..
    切换至当前用户主目录:cd 
    切换至以前的工作目录:cd -
    相关环境变量
        OLDPWD:上一次目录路径
        PWD:当前目录路径
    

     列出目录内容

    ls:列出当前目录的内容或指定目录
    参数:
        -a 包含隐藏文件
        -R 目录递归显示

    查看文件状态

    stat
    文件:metadata,data
    三个时间戳:
        access time:访问时间,atime,读取文件内容
        modify time:修改时间,mtime,改变文件内容(数据)
        change time:改变时间,ctime,元数据发生改变(即可理解为属性信息,比如权限)

    文件通配符

    *匹配零个或多个字符
    ?匹配任何单个字符
    ~当前用户目录
    ~mage 用户mage家目录
    ~+当前工作目录
    ~- 前一个工作目录
    [0-9] 匹配数字范围
    [a-z]: 字母
    [A-Z]: 字母
    [wang]:匹配列表中的任何一个字符
    [^wang]:匹配列表中所有字符以外的字符
    预定义的字符类: man 7 glob
      [:digit:]:任意数字,相当于0-9
      [:lower:]:任意小写字母
      [:upper:]:任意大写字母
      [:alpha:]:任意大小写字母
      [:alnum:]:任意数字或字母
    touch命令 创建空文件和刷新时间
    -a 仅改变atime和ctime -m 仅改变mtime和ctime   -c 如果文件不存在,则不予创建 用touch创建文件时,如果原文件已经存在则是不会覆盖的。用>创建文件时则会覆盖
    cp命令
    用法格式:
        cp [OPTION] ...[-T] SOURCE DEST
        cp [OPTION] ... SOURCE ...DIRECTORY
        cp [OPTION] ... -t DIRECTORY SOURCE...
        cp SRC DEST
        SRC是文件:
            如果目标不存在:新建DEST,并将SRC中内容填充至DEST中
            如果目标存在:
                       如果DEST是文件:将SRC中的内容覆盖至DEST中,基于安全,最好加上-i选项                
                       如果DEST是目录:在DEST下新建与原文件同名的文件,并将SRC中内容填充至新文件中
    

      

    mv 命令
        移动和重命名文件
        用法:
            mv [OPTION] ...[-T] SOURCE DEST
            mv [OPTION] ...SOURCE ...DIRECTORY
            mv [OPTION] ...-t DIRECTORY SOURCE...
         常用选项:
            -i:交互式
            -f:强制
    
    rm 命令
        用法: rm [OPTIONS] ...FILE...
        常用选项:
                -i:交互式
                -f:强制删除
                -r:递归
                --no-preserve-root
        
    
    目录操作
        tree命令    
        显示目录树
        参数:
            -d:只显示目录
            -L level:显示指定的层级数目
            -P pattern:只显示由指定pattern匹配到的路径
        
        mkdir命令 创建目录
            -p:存在于不报错,且可自动创建所需的各目录
            -v:显示详细信息
            -m MODE:创建目录时直接指定权限
        rmdir命令 删除空目录
            -p:递归删除父空目录
            -v:显示详细信息

    索引节点

    inode(index node)表中包含文件系统所有文件列表
    一个节点(索引节点)是一个表项,包含有关文件的信息(元数据),包括:
        文件类型、权限、UID、GID
        链接数(指向这个文件名路径名称个数)
        该文件的大小和不同的时间戳
        指向磁盘上文件的数据块指针
        有关文件的其他数据
        
    

     Inode表结构

    cp和inode
      在执行cp的命令时:分配一个空闲的inode号,在inode表中生成新条目,在目录中创建一个目录项,将名称与inode编号关联拷贝数据生成新的文件。
    rm和inode   在执行rm命令时:链接数递减,从而释放的inode号可以被重用;把数据块放空闲链表;删除目录项;数据实际上不会马上被删除,但当另一文件使用数据块时将被覆盖。
    mv和inode   如果mv命令的目标和源在相同的文件系统,作为mv命令:用新的文件名创建新的目录项,删除旧目录条目对应的旧的文件名,不影响inode表(除了时间戳)或磁盘上的数据位置:没有数据被移动。   如果目标和源不在同一个文件系统,mv相当于cp和rm。
    硬链接
      link命令(ln)
    创建硬链接会增加额外的记录项以引用文件
    对应于同一文件系统上一个物理文件
    每个目录引用相同的inode号
    创建时链接数递增
    删除文件时:
        rm命令递减计数的链接
        文件要存在,至少有一个链接数
        当链接数为0时,该文件被删除
    不能跨越驱动器或分区
    
    软链接ln -s
      
    软链接和硬链接的区别:
      1.硬链接不能跨分区,而软链接可以
      2.硬链接的inode number是一样的,软链接各有各的编号
      3.创建硬链接会增长链接数,而软链接不会
      4.硬链接不支持文件夹,而软链接可以
      5.删除原始文件时,硬链接还是可以访问(相当于少了一个名称而已),而软链接则会提示找不到文件了。
    软硬链接根本区别:硬链接本质是同一个文件,多个名字;软链接本质是多个不同文件。

     确定文件内容

    file命令
      可以检查文件的类型,然后确定适当的打开命令或应用程序使用
      file [options] <filaname> ...
      常用选项:-b 列出文件识别结果时,不显示文件名称
           -f filelist 列出文件filelist中文件名的文件类型
           -F 使用指定分隔符号替换输出文件名后默认的" :" 分隔符
           -L 查看对应软链接对应文件的文件类型
           --help 显示命令在线帮助

     标准输入和标准输出

    程序:指令+数据
        读入数据:Input
        输出数据:Output
    打开的文件都有一个fd:file descriptor(文件描述符)
    Linux给程序提供三种I/O设备
        标准输入(STUIN)-0 默认接受来自键盘的输入
        标准输出(STDOUT)-1 默认输出到终端窗口
        标准错误(STDERR)-2 默认输出到终端窗口
    I/O重定向:改变默认位置
    
    命令查看对应的设备:ls /proc/$$/fd -l

    把输出和错误重新定向到文件

    STDOUT和STDERR可以被重定向到文件
        格式:命令 操作符号 文件名
    支持的操作符包括:
        > 把STDOUT重定向到文件
        2> 把STDERR重定向到文件
        &> 把所有输出重定向到文件
    > 文件内容会被覆盖
        set -C 禁止将内容覆盖已有文件,但可追加
        >| file 强制覆盖
        set +C 允许覆盖
    >> 原有内容基础上,追加内容
    2> 覆盖重定向错误输出数据流
    2>> 追加重定向错误输出数据流
    标准输出和错误输出各自定向至不同位置
      如: COMMAND > /path/to/file.out  /path/ti/error.out
    合并标准输出和错误输出为同一个数据流进行重定向
      &> 覆盖重定向
      &>> 追加重定向
      COMMAND > /path/to/file.out 2>&1(顺序很重要) 
      COMMAND >> /path/to/file.out 2>&1
    ():合并多个程序的STDOUT
      (cal 2018;cal 2019) > all.txt

    tr命令

    tr转换字符和删除字符
        用法:tr [OPTION] ... SET1 [SET2]
       选项:
        -c -C --complement:取字符集的补集
        -d --delete:删除所有属于第一字符集的字符
        -s --squeeze-repeats:把连续重复的字符以单独一个字符表示
        -t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符

     从文件中带入STDIN

    使用<来重定向标准输入
    某些命令能够接受从文件中导入的STDIN
        tr 'a-z' 'A-Z' < /etc/issue
        该命令会把/etc/issue中的所有小写字母都转换为大写字母
        tr -d abc < /etc/fstab 
        该命令删除fstab文件中所有abc中字符
    cat > file
        mage
        wangxiaochun
        按Ctrl+d离开,可以使用文件来代替键盘的输入
      
      cat < filea > filea 起到类似清空的效果
      cat < filea > fileb 起到类似cp命令的效果

     把多行发送给STDIN

    使用"<<终止词"命令从键盘把多行重导向给STDIN
        直到 终止词 位置的所有文本都发送给STDIN
        示例:
          
    小结:
        > 1> >> file 重定向输出
        2> 2>>file 重定向错误
        < 0< file 输入重定向
        <<keyword 多行重定向
        xxx
        keyword
    
        &> file 输出和错误一起重定向
        
        cmd1 | cmd2
        cmd1 2>&1 | cmd2

     管道

    管道(使用符号"|"表示)用来连接命令
        命令1 | 命令2 | 命令3 | ...
        将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送给命令3的STDIN
        STDERR默认不能通过管道转发,可利用2>&1或|&实现
        最后一个命令会在当前shell进程的子shell进程中执行
        组合多种工具的功能
        示例:ls | tr 'a-z' 'A-Z'
      less:一页一页得查看输入
        示例:ls -l /etc | less
      mail:通过电子邮件发送输入
        示例:echo "test email" | mail -s "test" user#example.com
      lpr:把输入发送给打印机
        示例:echo "test print" | lpr -P printer_name
    
    管道中-符号
      将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将tar -cvf - /home传送给后面的tar -xvf -,后面的这个-则是取前一个命令的stdout,因此,就不需要使用临时的file了。  
      示例:tar -cvf - /home | tar -xvf -
    重定向到多个目标(tee命令)
    tee命令结合管道一起用:使得能够同 时输出到文件以及输出到屏幕
      示例:ls |tee file 把ls的STUOUT保存到file文件中
      参数:-a 追加
      使用:保存不同阶段的输出;复杂管道的故障排除;同时查看记录和输出。

     

    做一枚奔跑的老少年!
  • 相关阅读:
    【递归】拆分自然数
    HDOJ3068最长回文
    博弈论——尼姆博奕
    vijos P1047最小公倍数
    Eular质数筛法-hiho一下 第九十三周
    hdoj-5652 India and China Origins二分+bfs
    hdoj-1166排兵布阵 简单的树状数组
    hdoj-5641 king's phone
    hdoj-1548简单的bfs题目
    命令中"|"的意义
  • 原文地址:https://www.cnblogs.com/xiaoshayu520ly/p/10514848.html
Copyright © 2020-2023  润新知