• Linux 基础学习2


    Linux 基础学习2

    文件目录结构

    • 文件和目录被组织成一颗倒置的树状结构
    • 文件系统从根开始,“/”
    • 文件名称严格区分大小写
    • 隐藏文件以"."开头
    • 路径的分隔符为"/"

    文件命名规范

    • 文件字符最长为255个字符
    • 包括路径在内文件名称最长为4095个
    • 颜色表示
      • 蓝色文件 --> 目录

    • 绿色文件 --> 可执行文件,可执行的程序

    • 红色文件 --> 压缩文件或者包文件

    • 浅蓝色文件 --> 链接文件,主要是使用ln命令建立的文件

    • 白色文件 --> 一般性文件,如文本文件,配置文件,源码文件等
    • 红色闪烁:表示链接的文件有问题
    • 黄色:表示设备文件
    • 灰色文件 -->其他文件
    • 除了斜杠和NULL,其他所有字符都可以使用
    • 对大小写敏感

    文件系统结构

    • /boot 引导文件的存放位置,内核文件、引导加载器都在此目录
    • /bin 所有的用户都可以使用的命令
    • /sbin 管理类的命令
    • /lib 启动时程序使用的基本库文件 .so结尾
    • /lib64 专门存放X86_64系统上得辅助库文件
    • /etc 存放配置文件
    • /home/USERNAME 普通用户的家目录
    • /root 管理员的家目录
    • /media 便携式移动设备的挂载点
    • /mnt 临时文件的挂载点
    • /dev 设备文件和特殊文件的存放位置
    • /opt 第三方的应用的安装位置
    • /tmp 临时文件的存放位置
    • /usr 存放安装程序
    • /var 存放经常变化的文件,比如日志
    • /proc 存放内核启动和进程相关的虚拟文件
    • /sys 输出当前系统上的硬件相关的文件
    • /srv 系统上允许的服务用到的数据

    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/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

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

    切换到家目录

    [root@localhost log]#cd 
    [root@localhost ~]#
    

    切换到上一次的目录

    [root@localhost ~]#cd /etc/sysconfig/network-scripts/
    [root@localhost network-scripts]#cd -
    /root
    [root@localhost ~]#cd -
    /etc/sysconfig/network-scripts
    

    显示当前的工作目录

    pwd print working directory

    [root@localhost network-scripts]#pwd
    /etc/sysconfig/network-scripts
    # 查看链接的真正目录
    [root@localhost /]#cd lib
    [root@localhost lib]#pwd -P
    /usr/lib
    

    列出目录或者文件

    ls list

    命令格式:Usage: ls [OPTION]... [FILE]...

    ls -a 显示所有文件
    [root@root ~]# ls -a
    .                .cshrc  file15  file3  .passwd.swo
    ..               file1   file16  file4  .tcshrc
    anaconda-ks.cfg  file10  file17  file5  teaching_plan.zip
    
    ls -l 以长格式显示文件列表
    [root@root ~]# ls -l
    total 8
    -rw-------. 1 root root 1414 Aug 22  2019 anaconda-ks.cfg
    -rw-r--r--. 1 root root    0 Mar  1 18:28 file1
    
    -rw-r--r--.    1        root     root      0    Aug 22 17:21  10
    权限      硬盘的引用次数  属主      属组     大小  访问时间    文件名称
    
    ls -R 递归显示目录
    [root@root ~]# ls -R
    .:
    anaconda-ks.cfg  file12  file16  file2   file5  file9
    file1            file13  file17  file20  file6  teaching_plan.zip
    
    ls -d 显示目录本身
    [root@root ~]# ls -d
    .
    
    ls -1(数字1) 文件分行显示
    [root@root ~]# ls -1
    anaconda-ks.cfg
    file1
    file10
    file11
    file12
    
    
    ls -S 安装文件大小排序
    [root@root ~]# ls -S
    teaching_plan.zip  file11  file15  file19  file4  file8
    
    ls -r 倒序显示
    [root@root ~]# ls -r
    teaching_plan.zip  file6  file20  file17  file13  file1
    
    ls -t 按照时间来排序
    [root@root ~]# ls -t
    file18  file11  file15  file3  file7  teaching_plan.zip
    
    ls -lh 显示人类易读的方式
    [root@root ~]# ls -1h
    anaconda-ks.cfg
    file1
    file10
    file11
    file12
    file13
    
    ls -d */ 显示当前目录下的文件夹
    l. 只显示隐藏文件
    
    
    #修改文件创建时间
    [root@root ~]# touch -c -m -t 201301211925 b19
    [root@root ~]# ll b19
    -rw-r--r--. 1 root root 0 Jan 21  2013 b19
    
    #ls -l 等同于 ll
    [root@root ~]# ls -l b19
    -rw-r--r--. 1 root root 0 Jan 21  2013 b19
    [root@root ~]# ll b19
    -rw-r--r--. 1 root root 0 Jan 21  2013 b19
    

    linux下的目录类型

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

    查看文件状态

      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
    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 # 改动时间
    atime 访问时间  查看文件内容就会改变
    mtime 修改时间  改变内容发生变化
    ctime 改动时间  元数据发生变化
    

    touch

    创建空文件和刷新时间,如果文件存在,则刷新时间,如果文件不存在,则创建文件

    -a 只修改atime和ctime

    -m 只修改mtime和ctime

    文件通配符

    • * 所有
    • ? 匹配的是任意单个字符
    • ~ 表示用户的家目录
    • [123] 其中一个
    • [^123] 取反
    • [0-9] 表示数字
    • file[a-z] 字母(有坑)缺少Z
    • file[A-Z] 字母(有坑)缺少a
    • [:lower:] 小写字母
    • [:upper:] 大写字母
    • [:alpha:] 所有字母 a-zA-Z
    • [:alnum:] 表示字母和数字
    • [:digit:] 表示数字

    创建目录

    mkdir 创建目录

    • -p 递归创建
    • -v 显示详细过程

    显示目录树

    安装:yum install -y tree

    tree 显示目录树

    [root@root ~]# tree
    .
    ├── anaconda-ks.cfg
    ├── file1
    ├── file10
    ├── file11
    ├── file12
    ├── file13
    ├── file14
    ├── file15
    ├── file16
    ├── file17
    ├── file18
    ├── file19
    ├── file2
    ├── file20
    ├── file3
    ├── file4
    ├── file5
    ├── file6
    ├── file7
    ├── file8
    ├── file9
    └── teaching_plan.zip
    
    0 directories, 22 files
    

    -d 只显示文件夹

    [root@root ~]# tree -d
    .
    
    0 directories
    

    -L # 只显示#层

    [root@root ~]# tree -L 1
    .
    ├── anaconda-ks.cfg
    ├── file1
    ├── file10
    ├── file11
    ├── file12
    ├── file13
    ├── file14
    ├── file15
    ├── file16
    ├── file17
    ├── file18
    ├── file19
    ├── file2
    ├── file20
    ├── file3
    ├── file4
    ├── file5
    ├── file6
    ├── file7
    ├── file8
    ├── file9
    └── teaching_plan.zip
    
    0 directories, 22 files
    

    删除目录

    rmdir 只能删除非空目录

    -p 递归删除空父目录

    -v 显示删除过程

    rm -rf 删除非空目录

    复制文件和文件夹

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

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

    移动、重命名

    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 显示过程
    
    #文件重命名示例
    [root@root ~]# ls
    b111111  
    [root@root ~]# mv b111111 bbb233
    [root@root ~]# ls
    bbb233  
    

    删除

    rm remove

    Usage: rm [OPTION]... FILE...
    -i 提示
    -r -R 递归删除
    -f 强制删除
    rm -rf 慎用
    rm -rf /*
    cd /
    rm -rf *
    
    删除文件
    [root@localhost bighome]# rm install.log
    
    删除文件夹
    [root@localhost ~]# rm -r b
    
    -f 省略确认步骤
    [root@localhost ~]# rm -rf b
    
    删除文件里面的内容
    [root@localhost ~]# > filename 
    [root@localhost ~]# > filename 
    [root@localhost ~]# echo “” > filename 
    [root@localhost ~]# echo > filename 
    [root@localhost ~]# cat /dev/null > filename
    

    链接

    • 软链接

    • 相当于windows的快捷方式

    • 创建命令 ln -s 源文件 目标文件

    • 可以对目录做软链接

    • 指向另外的一个文件或者目录的路径,大小是路径的长度的字符

    • 对磁盘引用次数没有影响

    • 可以跨分区

    • 源文件发生改变,软链接会跟着发生变化

    • 源文件删除,软链接不能访问

    • 硬链接

    • 磁盘引用次数会发生变化

    • 指向的是硬盘上的同一块区域

    • 磁盘的引用数会随着硬链接次数来增加

    • 不能对目录做硬链接

    • 不能跨越分区

    • 源文件发生改变,硬链接也会跟着变化

    • 源文件删除以后,硬链接可以访问

    查看文件类型

    file

    输入和输出

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

    I/O重定向

    > 覆盖

    • > 将标准输出重定向到文件中
    • 2> 将错误输出重定向到文件中
    • &> 将所有的输出都重定向到文件中

    禁止、允许覆盖

    • 禁止覆盖 set -C
    • 允许覆盖 set +C

    >> 追加

    >> 将标准输出追加到文件中

    2>> 将错误输出追加到文件中

    &>> 将所有输出追加到文件中

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

    [root@localhost ~]#ls f 45yuio > 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
    • ():合并多个文件的输出
    • /dev/null 黑洞

    从文件导入stdin

    tr 字符替换

    -t 截断
    -d 删除
    -s 压缩,去重
    -c 取反
    [root@localhost ~]#tr 'a-z' 'A-Z' < /etc/issue
    S
    KERNEL R ON AN M
    [root@localhost ~]#tr 'a-z' 'A-Z' 
    qwertyy
    QWERTYY
    12345678
    12345678
    ASDFGHJ
    ASDFGHJ
    qwertyuio
    QWERTYUIO
    ^C
    [root@localhost ~]#tr ab 12
    ab
    12
    abb
    122
    asdfghjkl
    1sdfghjkl
    ^C
    [root@localhost ~]#tr abc 12
    ab
    12
    abc
    122
    abc
    122
    ^C
    [root@localhost ~]#tr ab 123
    ab
    12
    abb
    122
    avc
    1vc
    qbc
    q2c
    abc
    12c
    [root@localhost ~]#tr -t abc 12
    abc
    12c
    ab
    12
    [root@localhost ~]#tr -d abc
    qwertyui
    qwertyui
    an^H^H
    n
    
    abc
    
    artyibrtyuiocrtyuiop
    rtyirtyuiortyuiop
    ^C
    [root@localhost ~]#tr -d abc < /etc/issue
    S
    Kernel 
     on n m
    
    [root@localhost ~]#cat /etc/issue
    S
    Kernel 
     on an m
    [root@localhost ~]#tr -s a
    abc
    abc
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc
    abc
    ^C
    [root@localhost ~]#tr -sc a 
    aasdaaaaaaa
    aasdaaaaaaa
    ^[[A^H^H^C
    [root@localhost ~]#tr -sc a 
    aaaaaaaaabbbbbbbbbbbbbccccccccddddddddddd
    aaaaaaaaabcd
    [root@localhost ~]#tr -dc a
    aaaaaaaaaaaabbbbbbbbbb
    asdfghjkqwertyuiozxcvbnmxcvbnm,.
    aaaaaaaaaaaaa
    ctrl+d 结束
    [root@localhost ~]#tr -dc "a
    "
    asdfghjk
    a
    wertyujk;l'
    
    
    
    asdfghj
    a
    [root@localhost test]#tr -d a < issue > issue  处理完成以后不能写会到源文件,要写到新的文件中
    [root@localhost test]#seq 1 10 > b
    [root@localhost test]#cat b
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@localhost test]#tr -d "
    " < b
    12345678910[root@localhost test]#tr -d "
    " < b
    [root@localhost test]#tr "
    " " " <b
    1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr "
    " " " <b >c
    [root@localhost test]#cat c
    1 2 3 4 5 6 7 8 9 10 [root@localhost test]#tr " " "
    " <c
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    多行发送给stdin

    # 第一种方式
    [root@localhost test]#cat > f1
    qwert
    wertyui
    wertyui
    wertyuiopasdfghjk
    sdfghjkl
    sdfyhjkl;sdfghjkl;xcvb
    
    # 第二种方式
    [root@localhost test]#cat > f2 <<EOF
    > qwerty
    > qwertyu
    > wertyui
    > qwertyu
    > EOF
    EOF 不是必须得,只要两个相同就可以
    

    管道

    管道使用“|”来表示

    命令1|命令2|命令3

    • 把命令1的输出结果当做命令2的输出结果,把命令2的输出结果当成命令3的输入结果
    • 默认情况下,管道只能传送标准输出
    • 如果需要把错误输出也传递,则需要|&
    • 一般用来组合多个命令
    • 有一些命令是不接受管道的
    [root@localhost test]#ls f1|tr 'a-z' 'A-Z'
    F1
    [root@localhost test]#ls f
    ls: cannot access f: No such file or directory
    [root@localhost test]#ls f|tr 'a-z' 'A-Z'
    ls: cannot access f: No such file or directory
    [root@localhost test]#ls f|&tr 'a-z' 'A-Z'
    LS: CANNOT ACCESS F: NO SUCH FILE OR DIRECTORY
    [root@localhost test]#echo file{1..20}|touch 
    touch: missing file operand
    Try 'touch --help' for more information.
    
    
    作 者:郭楷丰
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角 推荐一下。您的鼓励是博主的最大动力!
    自 勉:生活,需要追求;梦想,需要坚持;生命,需要珍惜;但人生的路上,更需要坚强。带着感恩的心启程,学会爱,爱父母,爱自己,爱朋友,爱他人。
  • 相关阅读:
    代码阅读之术一:结构与源流
    linux cat /etc/passwd 说明
    Linux软连接
    文件上传文件的权限--lnmp 环境配置,尤其整个项目复制过来
    Redis面试总结
    php上传文件与图片到七牛的实例详解
    在浏览器中打开php文件时,是Linux中的哪个用户执行的?
    Laravel [1045] 解决方法 Access denied for user 'homestead'@'localhost'
    linux中快速清空文件内容的几种方法
    linux如何查看所有的用户和组信息?
  • 原文地址:https://www.cnblogs.com/guokaifeng/p/11415237.html
Copyright © 2020-2023  润新知