• Linux基础知识与实操-篇二:初识Linux目录管理与操作



    在经过上篇 篇一:初识Linux文件权限与配置 后,我们已经基本熟悉并使用了Linux关于文件管理相关的内容,本篇则继续从文件深入,探究目录管理,这里一定要记住: 在Linux系统中,一切皆文件!

    文件与目录管理

    相对路径与绝对路径

    • 绝对路径:
      由 根目录/写起,例如 /usr/share/doc
      一般来说,如果是 shell脚本等类似的程序,务必使用 绝对路径的写法
    • 相对路径:
      不是由/写起,. 表示当前目录,.. 表示上一级目录(父目录)

    关于目录的基本常识:
    使用命令cd - 就可以回到上一个工作目录,实现直接跳回的操作了
    image

    在所有目录底下都会存在的两个目录,分别是『.』与『..』 分别代表此层与上层目录的意思

    那么在Linux 的根目录下,是否也存在上层目录呢?
    若使用『 ls -al / 』去查询,可以看到根目录下确实存在 . 与 … 两个目录,再仔细的查阅, 可发现这两个目录的 属性与权限完全一致,这代表根目录的上一层(…)与根目录自己(.)是同一个目录

    目录相关操作

    cd  	变换目录
    
    pwd  	见识当前目录,pwd -P 可以取得正确的目录名称,而不是以链接文件的路径来显示
    
    mkdir  	建立一个新目录
    -m 选项,配置文件的权限,直接设定,不需要看预设权限
    -p 选项,直接将所需要的多层目录,递归建立起来
    
    rmdir  	删除一个空目录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image

    执行文件路径的变量:
    为什么在Linux系统的任何地方都可以执行 基础命令,比如 ls 命令

    因为,我们在写入命令后,系统会按照 PATH 的设定去设定每个 PATH定义的目录下搜寻文件名为 ls 的可执行文件,如果在 PATH 定义的目录中含有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行。
    image

    因为基本都包含在 PATH 这个变量内了,所以基本在任何地方都可以使用 这些基本命令了

    查看文件的基本操作:ls
    更多选项如下:
    image

    复制文件或目录:cp
    image

    cp 指令在不同身份的人执行,会有不同的结果产生,而且差异很大
    一般在备份文件的时候,如果使用cp 命令,默认 cp 的 来源档和目的档 的权限是不同的,目的档 的拥有者通常会是指令的操作者本身,就是说如果 root 用户 cp 了其他用户的目录,那么目的目录的拥有者就变为 root用了,不再是 其他用户了
    所以在备份的时候,需要特别注意 特殊权限和文件,例如 密码文件(/etc/shadow), 需要 -a-p 选项才可以完整复制问价权限的选项

    如果遇到 连接文件,cp 命令是默认 复制源文件,而不是复制 链接文件的属性,如果非要链接文件,就需要指定 -d 选项了

    移除文件或目录:rm
    image

    rm 指令前 加上 \,可以忽略 alias 的指定选项

    移动文件目录或更名:mv
    image

    重命名文件,也可以使用 rename 命令

    查阅文件相关操作

    查阅一个文件的命令,不仅仅是 cat 命令(这个是连续 c o n c a t e n a t e concatenate concatenate的简写

    • cat: 从第一行开始显示文件内容
      image
    • tac: 从最后一行开始显示,cat 命令的反写
    • nl: 显示的时候,可以输出行号
      image
    • more: 一页一页的显示文件内容
      image
    • less: 与 more 类似,但是可以向前翻页
      image
    • head: 只看开头几行,如果 n 是负数,那么就不列出从尾计算的n行,打印从头开始的剩余行
      image
    • tail: 只看后面几行,如果要获取 中间的几行,可以配合管道符,使用 headtail 实现
      image
    • od: 以二进制方式读取文件内容
      image

    修改文件时间或创建文件:touch
    image

    要注意一点,我们在复制一个文件时,复制左右的属性,唯独无法复制 ctime 属性
    image

    文件预设权限

    我们可以通过 chmod 更改权限,但是在建立目录 或 文件 的时候,默认会有一个权限,这个权限的赋予,就是通过 umask 命令实现的:

    # 八进制数字表示权限,第一位表示特殊权限,可以先忽略,重点关注后面三个
    [root@AliComputer william]# umask
    0022
    # -S 选项执行使用字母表示权限
    [root@AliComputer william]# umask -S
    u=rwx,g=rx,o=rx
    [root@AliComputer william]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在默认权限属性上,umask 表示的是 该默认值需要减掉的权限,因为 r w x 可以分别用八进制数字 4 2 1 来表示,比如上面的 022, 就表示 当前用户拥有全部权限,同组其他用户被去掉了 写权限,其他组用户被去掉了 写权限

    如果要修改默认权限, 只需要 umask num 就可以了,其中 num 为 八进制权限表示数字

    配置文件隐藏属性:chattr
    image

    这个指令在 系统的数据安全上有很重要的作用,最重要的就是 +i+a 属性了

    显示文件隐藏属性:lsattr
    image

    显示文件类型:file
    image

    搜索与文件

    搜寻指令或文件:which
    image

    which 预设是找 PATH 内所规范的目录 , 所以有些 bash 命令是无法通过 which 命令找到的

    文件的搜索

    一般是不采用 find 命令搜索文件的,不仅仅是因为速度慢,也是因为 对硬盘操作很多,所以一般是使用 whereislocate 命令来获取 文件,实在找不到了,才会考虑使用 find 命令

    在特定目录中寻找文件或文件名:whereis
    image

    因为 whereis 只找几个特定的目录而已~ 并没有全系统去查询之故。所以说, whereis 主要是针对 /bin /sbin 底下的执行档, 以及 /usr/share/man 底下的 man page 文件,跟几个比较特定的目录来处理而已。所以速度当然快的多!

    文件的部分名称的搜索:locate
    image

    因为 locate 寻找的数据是由『已建立的数据库 /var/lib/mlocate/』 里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据, 速度就很快
    但是一般该数据库是每天执行一次更新操作,所以入股还 没有更新数据库的话,就会找不到该文件,可以选择 手动更新数据库:updatedb 命令,updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库文件(这里就会读取硬盘,所以会很慢)

    • updatedb:根据 /etc/updatedb.conf 的设定去搜寻系统硬盘内的文件名,并更新 /var/lib/mlocate 内的数据库
      文件;
    • locate:依据 /var/lib/mlocate 内的数据库记载,找出用户输入的关键词文件名

    在硬盘中搜索文件:find
    image

    我们现在知道 atime(上一次访问该文件的时间[读取或执行该文件]), ctime(上一次修改该文件内容或访问权限等) 与 mtime(上一次修改文件内容[特指文件内容]) 的意义,如果你想要找出一天内被
    更动过的文件名, 可以使用上述范例一的作法。但如果我想要找出『4 天内被更动过的文件档名』
    呢?那可以使用『 find /var -mtime -4 』。那如果是『4 天前的那一天』就用『 find /var -mtime 4 』。有没有加上『+, -』差别很大!!

    find 的其他用法:
    image

    还有更多用法:
    image
    image

    find 的特殊功能:
    image

    find 命令可以实现 额外的动作,上面 范例八 的例子图解如下:
    image

    基本权限与指令

    一、让用户能进入某目录成为『可工作目录』的基本权限为何:

    • 可使用的指令:例如 cd 等变换工作目录的指令;
    • 目录所需权限: 用户对这个目录至少需要具有 x 的权限
    • 额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。

    二、用户在某个目录内读取一个文件的基本权限为何?

    • 可使用的指令:例如本章谈到的 cat, more, less 等等
    • 目录所需权限:用户对这个目录至少需要具有 x 权限;
    • 文件所需权限: 使用者对文件至少需要具有 r 的权限才行!

    三、让使用者可以修改一个文件的基本权限为何?

    • 可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
    • 目录所需权限:用户在该文件所在的目录至少要有 x 权限;
    • 文件所需权限: 使用者对该文件至少要有 r, w 权限

    四、让一个使用者可以建立一个文件的基本权限为何?

    • 目录所需权限: 用户在该目录要具有 w,x 的权限,重点在 w 啦!

    五、让用户进入某目录并执行该目录下的某个指令之基本权限为何?

    • 目录所需权限:用户在该目录至少要有 x 的权限;
    • 文件所需权限:使用者在该文件至少需要有 x 的权限

    最后

    一起提高,慢慢变强。

  • 相关阅读:
    常用设计模式总结
    进公司第二天:绿盾+TFS拉取代码
    聊聊推荐系统的评测(下)
    字节跳动端智能工程链路 Pitaya 的架构设计
    【Redis】深入探索 Redis 的数据类型 —— 无序集合 Set
    四十六、AJAX
    Opus 1.4 编译脚本
    Shell
    Elasticsearch快速入门及结合Next.js案例使用
    shell脚本基础
  • 原文地址:https://blog.csdn.net/qq_45966201/article/details/128136577