• linux之文件目录,输入及输出


    文件目录结构

    ls 查看文件
    ll 查看详细文件
    
    • 文件和目录被组织成一颗倒置的树状结构
    • 文件系统从根开始,'/'
    • 文件名严格区分大小写
    • 隐藏文件以.开头
    • 文件的分隔符为'/'

    文件命名规范

    • 文件字符最长的字符为255
    • 包括路径在内文件名称最长为4095个
    • 颜色
      • 蓝色 --> 文件夹
      • 绿色 --> 可执行文件
      • 红色 --> 压缩文件
      • 晴朗蓝 --> 链接文件(windows中快捷方式)
      • 灰色 --> 其他文件
      • 白色 --> 文件
    • 除了 '/'和NULL.其他所有字符都可以使用
    • 对大小写敏感

    文件系统结构

    /boot # 引导文件的存放位置,内核文件,引导加载器都在此目录
    /bin  # 所有用户都可以使用的命令.
    /sbin # 管理类命令,即root用户可以使用的命令. system 管理
    /lib  # 启动时程序使用的基本库文件,windows库文件以.dll结		  尾,linux库文件以.so结尾
    /lib64 # 存放x86-64系统上的辅助库文件,windows系统中	 program files/program files(x86)
    /etc   # 存放配置文件的目录
    /home  # 普通用户家目录
    /root  # 管理员家目录
    /media # 便携式移动设备的挂载点
    /mnt   # 临时文件的挂载点
    /dev   # 设备文件(硬件设备)和特殊文件存放位置
    /opt   # 第三方的应用安装位置
    /tmp   # 重启之后清空此文件夹下文件,临时文件的放置点,类似于windows回收站
    /usr   # 存放安装程序
    /var   # 存放经常变化的文件,比如目录.  /var/log
    /proc  # 存放内核启动和进程相关的虚拟文件,(进程被表示文件)
    /sys   # 输出当前系统上的硬件相关文件
    /srv   # 系统上允许永达ode数据
    

    linux应用程序的组成

    • 二进制文件
      • /bin
      • /sbin
      • /usr/bin
      • /usr/sbin
      • /usr/local/bin
      • /usr/loacl/sbin
    • 库文件
      • /lib
      • /lib64
      • /usr/lib
      • /usr/lib64
      • /usr/local/lib
      • /usr/local/lib64
    • 配置文件
      • /etc
      • /etc/name
      • /usr/local/etc
    • 帮助文件
      • /usr/share/man
      • /usr/share/doc
      • /usr/local/share/man
      • /usr/local/share/doc

    绝对路径与相对路径

    • 绝对路径
      • 以根开始
      • 完整的文件的存放位置
      • 可以读取到任何一个文件或者文件夹
    • 相对路径
      • 不以根开始
      • 相对于当前的位置来决定的
      • 可以简单的表示一个文件或文件夹
      • . 当前目录 ..父级目录

    目录名和基名

    # 基名
    [root@localhost log]#basename /etc/sysconfig/network-scripts/ifcfg-ens33 
    ifcfg-ens33
    [root@localhost log]#basename /etc/sysconfig/network-scripts
    network-scripts
    
    # 目录名
    [root@localhost log]#dirname /etc/sysconfig/network-scripts
    /etc/sysconfig
    [root@localhost log]#dirname /etc/sysconfig/network-scripts/ifcfg-ens33 
    /etc/sysconfig/network-scripts
    

    切换目录

    cd 切换目录 change directory

    • 可以使用相对路径
    • 可以使用绝对路径

    切换家目录

    cd # 切换家目录
    cd - # 回到上一次目录
    

    显示当前的工作目录

    pwd # 显示当前工作目录 print working directory
    [root@localhost network-scripts]#pwd
    /etc/sysconfig/network-scripts
    
    pwd -p # 查看链接的真正目录
    [root@localhost /]# cd lib
    [root@localhost lib]# pwd -p
    /usr/lib
    

    列出目录或者文件

    -rw-r--r--. 1 root root 0 Aug 22 17:21 10
    权限 硬盘引用次数 属主 属组 大小 访问时间 文件名称
    ls list
    ls -a  # 显示所有文件
    ls -l  # 以长格式显示文件列表
    -rw-r--r--. 1       root root  0  Aug 22 17:21    10
    权限    硬盘引用次数  属主 属组  大小   访问时间   文件名称
    ls -R  # 递归显示目录
    ls -d  # 显示目录本身
    ls -1  # 文件分行显示
    ls -S  # 按照文件大小排序
    ls -r  # 倒序显示
    ls -t  # 按照时间排序
    ls -lh # 显示人类易读方式
    ls -d */ # 显示当前目录下文件夹
    ls l.  # 只显示隐藏文件
    ls -lut # 时间倒叙排列
    
    # 这里全是段命令可以自由组合
    

    linux下的目录类型

    - 用来表示文件
    d 用来表示目录
    b 块设备
    c 字符设备
    | 表示符号链接文件
    s socket套接字文件
    

    stat查看文件状态

    File: ‘anaconda-ks.cfg’
    Size: 1747       	Blocks: 8          IO Block: 4096   regular file
    Device: fd00h/64768d	Inode: 33574992    Links: 1
    Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
    Context: system_u:object_r:admin_home_t:s0
    # Size   磁盘大小 Blocks 块大小  IO Block Io块大小
    # Access 权限     Uid    用户   
    Access: 2019-08-22 12:09:03.288000381 +0900 # 访问时间
    Modify: 2019-08-22 11:47:12.262947345 +0900 # 修改时间
    Change: 2019-08-22 11:47:12.262947345 +0900 # 改动时间
    
    Access # 最近访问时间 atime 查看cat文件内容就会改变
    Modify # 最近修改时间 mtime 改变内容时发生变化
    Change # 最近改动时间 ctime 元数据发生变化就会改变
    

    touch

    创建空文件和刷新时间,如果文件存在,则刷新时间,不存在则创建文件
    touch -a 修改atime和ctime
    touch -m 修改mtime和ctime
    # 无论是-a 还是-m ctime都会改变
    
    

    文件通配符

    *           # 表示0-多个字符
    ?           # 匹配任意单个字符
    ~           # 表示家目录
    [123]       # 表示其中一个
    [-]         # 范围
    # 根据ascii码 
    file[a-z]   # 字母(有坑) 缺少Z   
    file[A-Z]   # 字母(有空) 缺少a
    [^]         # 取反
    [:lower:]   # 小写字母
    [:upper:]   # 大写字母
    [:alpha:]   # 所有字母
    [:alpha:]   # 所有字母
    [:alnum:]   # 表示字母和数字
    [:digit:]   # 表示数字
    
    

    创建目录

    mkdir    # 创建目录
    -p a/b/c   # 递归创建
    -v         # 显示创建详细过程
    
    

    显示目录树

    yum install-y tree  # 安装目录树
    tree                # 显示目录树
    tree -d             # 仅显示文件夹
    -L num              # 仅显示num层,排除当前目录
    
    

    删除目录

    rmdir   # 只能删除非空目录
    -p      # 递归删除空父目录
    -v      # 显示删除过程
    rm -rf  # 删除非空目录
    
    

    复制文件和文件夹

    cp copy默认情况下是别名,原来本身命令(cp)是不提示覆盖

    使用方法:
    Usage: cp [OPTION]... [-T] SOURCE DEST
      or:  cp [OPTION]... SOURCE... DIRECTORY
      or:  cp [OPTION]... -t DIRECTORY SOURCE
    
    cp              # copy
    -i              # 显示覆盖提示信息
    -n              # 不覆盖
    -f              # 非强制的
    -R -r           # 递归复制,如果复制文件夹,不加递归复制会报错
    -s              # 拷贝一个链接文件
    -d              # 只复制链接文件不复制原文件
    -a              # 归档
    -v              # 显示复制过程
    -b              # 覆盖之前,备份原来的文件
    --backup=number # 备份
    -p              # 复制时保留原来的属性
    
    
    • 如果源文件是文件
      • 目标文件是文件
        • 目标文件如果不存在,则新建目标文件,并把内容写到目标文件中
        • 如果目标文件存在,本来的命令是直接覆盖.建议使用-i提示用户.
      • 目标是文件夹
        • 在文件夹中新建一个同名的文件,并把文件内容写到新文件中
    • 如果原文件为多个文件
      • 目标必须是文件夹,而且文件夹必须存在.其他情况都会报错
    • 如果原文件是文件夹
      • 目标文件是文件:不可以
      • 目标文件必须是文件夹,必须使用-r选项
      • 如果目标文件不存在:则直接创建目标文件夹,并把原文件夹的数据都复制到目标文件夹
      • 如果目标文件存在:
        • 如果是文件,则报错
        • 如果是文件夹:则在目标文件夹中创建同名文件夹,并把目标放在新的文件夹中.

    移动,重命名

    mv move

    mv  # move
    Usage: mv [OPTION]... [-T] SOURCE DEST
      or:  mv [OPTION]... SOURCE... DIRECTORY
      or:  mv [OPTION]... -t DIRECTORY SOURCE...
    
    -i 		       # 提示
    -f 			   # 强制
    -b 			   # 备份
    --backup=number # 备份后面加数字
    -v 			   # 显示过程
    
    

    删除

    rm remove

    Usage: rm [OPTION]... FILE...
    
    -i         # 提示
    -r -R      # 递归删除
    -f         # 强制
    rm -rf     # 慎用
    rm -rf /*  # 慎用
    cd /
    rm -rf *
    
    # 这里需要提前用VMware 提前快照,然后恢复快照
    # 右击里面点击拍摄快照
    
    

    链接

    软链接

    ln -s 源文件 目标文件	 # 创建命令 
    1.相当于windows快捷方式
    2.可以对目录做软链接,执行另外的一个文件或者目录的路径,大小是路径的长度的字符
    3.对磁盘引用次数没有影响
    4.可以跨分区
    5.源文件发生改变,软链接会跟着发生变化
    6.源文件删除,软链接不能访问,再添加相同名字时,即可引用
    

    硬链接

    ln 原文件 目标文件 	# 创建硬链接
    1.磁盘引用次数发生变化
    2.指向的是硬盘上的同一块区域
    3.硬盘的引用数会随着硬链接的次数而增加
    4.不能对目录做硬链接
    5.不能跨越分区
    6.源文件发生改变,硬链接会发生改变
    7.源文件删除,硬链接可以访问,磁盘引用数减少
    

    CP

    查看文件类型

    file
    

    输入和输出

    1.标准输入      默认是来自键盘的输入  stdin      0
    2.标准输出      默认输出到终端窗口    stdput     1
    3.标准错误输出  默认输出到终端窗口    stderr      2
    
    

    I/O重定向

    > 覆盖
    1.  >    将>标准输出重定向到文件中
    2.  2>   将错误输出重定向到文件中
    3.  &>   将所有的输出都重定向到文件中
    禁止,允许覆盖
    1.  禁止覆盖set -C
    2.  允许覆盖set +C
    >> 追加
    1.  >>    将标准输出追加到文件中
    2.  2>>   将错误输出追加到文件中
    3.  &>>   将所有的输出都重定向到文件中
    
    

    标准输入和错误输入分开保存

    [root@localhost ~]# ls f 45yu > log.log 2>error.log
    [root@localhost ~]# cat log.log
    f
    [root@localhost ~]# cat error.log
    ls: cannot access 45yuio: No such file or directory
    
    

    合并所有输出

    • &> 覆盖重定向
    • &>> 追加重定向
    • command>file 2>&1
    • command>>file 2>&1
    • ():合并多个文件的输出 (错误1;错误2) 2> file
    • &> /dev/null(类似于黑洞,无限制接收)
    • /dev/zero

    从文件导入stdin

    tr 字符替换

    # 参数
    -t 截断
    -d 删除
    -s 压缩,去重
    -c 取反
    
    
    tr字符替换
    tr 'a-z' 'A-Z' < /etc/issue
    
    # 按字符顺序替换
    tr ab 12
    ab
    12
    abb
    122
    # 分赃不均则默认取最后
    tr abc 12
    abc
    122
    # 解决分赃不均问题(截断)
    tr -t abc 12
    abc
    12c
    # 删除
    tr -d abc
    a1b1c
    11
    # 去重
    tr -s a
    aaaaabc
    abc
    # 取反
    tr -sc a
    aasdaaaa
    # tr -d a 默认会把回车删掉,要ctrl+d删除
    # 解决办法 tr -dc 'a
    '
    
    读入文件和输出文件不能是同一文件,要写到新的文件中
    tr -d <issue>issue
    
    

    多行发送给stdin

    1. cat > f1
    # ctrl c可以结束
    2. cat > f2 <<EOF 
    # <<后面的值随便写,但是必须以它结束,约定俗成EOF
    > EOF 
    # 结束,结束之后,才能显示.
    
    

    管道

    管道使用 "|" 来表示

    命令1|命令2|命令3

    • 把命令1的输出结果当做命令2的输出结果,把命令2的输出结果当做命令3的输入结果
    • 默认情况下,管道只能传送标准输出
    • 如果需要把错误输出也传递,则需要|&
    • 一般用来组合多个命令
    有一些命令是不接受管道的
    # 如touch,cat等 
    
  • 相关阅读:
    install sklearn-crfsuite on mac
    排序算法之选择排序
    排序算法之冒泡排序
    Python中__init__与self的解释
    Python中 if __name__ == "__main__"解释
    Python活力练习Day25
    Python活力练习Day24
    Python活力练习Day23
    动态规划之编辑距离
    Python活力练习Day22
  • 原文地址:https://www.cnblogs.com/taosiyu/p/11432946.html
Copyright © 2020-2023  润新知