• 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等 
    
  • 相关阅读:
    HDU 5486 Difference of Clustering 图论
    HDU 5481 Desiderium 动态规划
    hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
    HDU 5478 Can you find it 随机化 数学
    HDU 5477 A Sweet Journey 水题
    HDU 5476 Explore Track of Point 数学平几
    HDU 5475 An easy problem 线段树
    ZOJ 3829 Known Notation 贪心
    ZOJ 3827 Information Entropy 水题
    zoj 3823 Excavator Contest 构造
  • 原文地址:https://www.cnblogs.com/taosiyu/p/11432946.html
Copyright © 2020-2023  润新知