我的Linux实验——第7章(文件与目录管理)

文章目录

第7章(文件与目录管理)

1. 常见处理目录的命令

1.1 切换目录:cd

1.2 显示当前目录:pwd

如果使用-P选项,就会显示纯物理路径(无符号链接):
在这里插入图片描述
实验过程如下图:
在这里插入图片描述

1.3 新建一个新的目录:mkdir

  • -m选项,可以直接设置目录的权限
  • -p选项,可以直接创建多层的文件夹,而不必我们一层一层的创建,但根据文档,如果在创建前,如果文件夹已经存在,不会报错

在这里插入图片描述
实验结果如下:
在这里插入图片描述

1.4 删除一个空目录:rmdir

-p选项,可以逐层的删除空文件夹:
在这里插入图片描述
实验结果如下:
在这里插入图片描述

2. 执行文件路径变量:$PATH

我们所使用的命令,本质上是已经被制作好的程序。但是为什么我们在终端中输入命令后,shell就能找到我们要执行的命令呢;又为什么,我们按Tab键时,就可以补全命令呢?其实并不神奇,这一切是被提前设置好的,执行文件的路径是被$PATH这个变量设置好的,我们可以用echo命令显示它。

2.1 CentOS 5,6 与 CentOS 8 的些许不同

根据我第6章的文章,CentOS 5,6 和 8 的目录配置发生了一些变化,所以,不出意外,变量$PATH的值,也发生了变化。
CentOS 6 的值:
在这里插入图片描述
CentOS 8 的值:
在这里插入图片描述
我的上篇文章所写,CentOS 8 中 /bin,/lib,/lib64,/sbin目录已经变成符号链接了,所以$PATH中,没有这些路径了。

2.2 临时修改$PATH

$PATH只不过是一个bath中的字符串变量罢了,可以直接当作字符串处理:
在这里插入图片描述
这个我在第5章文章中通过改变$LANG改变语系一样,都是临时的。而通过修改配置文件永久改变执行路径的方法,则会在第11章的文章中出现。

3. 文件与目录管理

3.1 查看文件与目录:ls

3.2 复制文件或目录:cp

3.2.1 复制的使用

  在使用cp命令新建文件时,文件默认获得的权限,是新建者创建文件的权限。

在这里插入图片描述
cp命令无法直接复制目录,需要加上-r选项,但是可能改变文件权限。
在这里插入图片描述
所以也可以利用 cp -a 执行命令,保留源文件的所有信息。复制文件属性(-p),链接(-d),递归执行(-r)。

cp -u 更新文件:
在这里插入图片描述

3.2.2 软硬链接的区别

cp -l 建立硬链接。
cp -s 建立软链接。
这部分需要第8章文件系统的内容才能看懂,但因为我已经把书全看完一遍了,所以在这里先做了一张图放在这,以便以后再看。
在这里插入图片描述

3.3 移除文件或目录:rm

  • 这个命令可以搭配通配符使用,十分好用:
    在这里插入图片描述
    在使用rm命令时,总会问你是不是确认删除,但是我们也没使用-i选项呀,这是怎么回事呢?
    如果没有使用-i选项,却问你是不是确认删除了,就是你的distribution默认加入了-i参数。在命令前加入\可以忽略掉alias的制定参数。alias会在第11章中介绍。
  1. 删除以-开头的文件,有两种方法。
  • ./方法

  • --方法

    在这里插入图片描述

3.4 移动文件与目录,或更名:mv

3.5 取得最后的文件名:basename

在这里插入图片描述

3.6 取得目录名:dirname

在这里插入图片描述

4. 文件内容查询

4.1 由第一行开始显示文件内容:cat

参数 效果
-n 打印行号(包括空白行)
-b 打印行号(不包括空白行)
-A 显示特殊字符

4.2 由最后一行开始显示文件内容: tac

4.3 显示的时候,顺便输出行号: nl

默认空白行不打印行号。
但是可以这样:
nl -b a /etc/issued,对比如下:
在这里插入图片描述
详情可以参照man文档。

4.4 一页一页地显示文件内容: more

4.5 一页一页地显示文件内容,可以向前翻页: less

4.6 只看头几行: head

默认显示前10行,可以使用-n 数字来选择显示前几行。
写一个简单的shell脚本,来验证:
在这里插入图片描述
在这里插入图片描述
执行脚本:
在这里插入图片描述
testfile中,每行都有一个自己的行号:
在这里插入图片描述
使用head查看文件:
在这里插入图片描述
使用head -n 20 查看前20行:
在这里插入图片描述

4.7 只看结尾几行: tail

tail默认查看最后10行,同样可以使用-n参数,调整显示的行数。
在这里插入图片描述
还可以使用-f参数,进行持续监测(有新增内容,就会持续滚动更新):
在这里插入图片描述通过 Ctrl+c 结束程序。

还可以将head和tail搭配使用,比如我想显示第11~20行:
在这里插入图片描述

4.8 以二进制形式读取文件内容: od

上面的命令都是针对文本文件而言的,打开二进制文件会乱码:
在这里插入图片描述
od是专门用来打开二进制文件的命令:
在这里插入图片描述
虽然都是数字,但是可以在合理运用od命令的前提下,通过查编码表的方式,读懂程序。

4.8 修改文件时间或创建新文件: touch

Linux下,文件有三个主要的变动时间:
modification time(mtime)
文件内容被更改时更新。与文件的属性和权限无关。
status time(ctime)
当文件状态被改变时更新。比如文件的属性和权限。
access time(atime)
当文件内容被取用时更新。比如用cat命令操作文件。
ls命令,默认显示的是mtime,可以通过选项–time=atime或ctime,调整显示的时间。
通过man文档也可以通过-u和-c选项调整显示什么类型的时间:
在这里插入图片描述

4.8.1 在默认状态下使用touch:

在这里插入图片描述
书上说使用cp -a 复制过来的文件的ctime和atime会改变,我测试了一下:
在这里插入图片描述
只有ctime改变了?
我觉得这有可能是这是个空文件的原因,所以再做一次不是空文件的测试:
在这里插入图片描述
就算不是空文件,atime也没有改变,所以我觉得是书上写错了。但是一般来说,我一觉得书错了,其实就是我错了,如果有谁发现了我的错误,还请斧正。

当然,不带选项的cp命令,新建出的文件都是新建文件时的时间:
在这里插入图片描述

我觉得上面默认使用touch只放一个图还是太苍白了,姑且还是做个实验吧,不带选项的touch,会更改所有时间:
在这里插入图片描述

4.8.2 更改文件时间:

4.8.2.1 根据原有时间调整时间: -d

将时间调整到两天前

touch -d "2 days ago" 文件名

在这里插入图片描述
可以看见,mtime和atime都更改了,而ctime没有变化。

4.8.2.2 指定新时间:-t

将时间改为2007/09/15 2:02

 touch -t 0709150202 文件名

在这里插入图片描述
可以看见,mtime和atime都更改了,而ctime没有变化。

5. 文件与目录的默认权限与隐藏权限

5.1 文件默认权限:umask

通过umask命令得知数字表示的权限(后三位是一般权限),加上-S选项可以得到符号表示的权限:
在这里插入图片描述
关于一般权限的作用,请看:
我的Linux实验——第6章(文件权限与目录配置)

  • 默认创建文件时,默认权限为:
    -rw-rw-rw-

  • 默认创建文件夹时,默认权限为:
    drwxrwxrwx

umask的值是默认减去的权限,根据图上的umask

新建文件的权限:(-rw-rw-rw-)-(-----w–w-)==> -rw-r–r--

新建文件夹的权限:(drwxrwxrwx)-(-----w–w-)==> drwxr-xr-x

实验如下:
在这里插入图片描述
在root用户下,umask的值是0022,同组的人没有w权限。这对root用户当然可以,他是系统的神,孤家寡人,不需要同组的人来分享他的权力,但是对一般用户来说,却需要让同组的人来一起制作文件,这时候就得修改umask码了。
想修改umask码,只需要在umask后面加数字就可以了:
在这里插入图片描述
这样,创建出的文件和文件夹,用户组有了w权限,同组人就可以操作了。
在这里插入图片描述
在重启后,设置就失效了,这种设置是临时的。

要想进行永久设置,请参考/etc/bashrc(不建议修改),和~/.bashrc(第十一章会提到)。

5.2 文件隐藏属性

5.2.1 设置文件隐藏属性: chattr

+:增加属性
-:减少属性
=:设置属性

属性 作用
i 不能删除,修改,设置连接
a 只能增加数据,不能删除,修改

在这里插入图片描述

5.2.2 设置文件隐藏属性: lsattr

在做书上实验时,发现 j 属性在 CentOS 6 可以实现,但CentOS 8 不行。
CentOS 6 :
在这里插入图片描述CentOS 8 :
在这里插入图片描述
查询man文档,j属性只能在ext2和ext3文件系统上进行使用。
在这里插入图片描述
通过df -T查看已挂载的文件系统格式:
在这里插入图片描述
因为安装系统时并没有为/tmp设置单独的分区,所以该分区与根目录使用相同的文件系统xfs,所以不能添加j属性。

5.3 文件特殊权限

除了r、w、x这三个一般权限,还有两个特殊权限s、t。
这两个权限与第14章(系统的账号)、第17章(系统的进程)相关。
在这里插入图片描述

5.3.1 SetUID

当文件具有SetUID(简称SUID)属性时,s这个标志会出现在文件所有者的x权限位置。如上图的/usr/bin/passwd。

重点
SUID权限只对二进制程序有效
执行者对该程序需要具有x的可执行权限
本权限仅在执行该程序的过程中有效
执行者将具有该程序所有者的权限

在这里插入图片描述

5.3.2 SetGID

在这里插入图片描述
如果没有locate命令,yum -y install mlocate 安装。

和SUID不同,SGID对文件和目录都能设置。

文件
SGID权限只对二进制程序有效
执行者对该程序需要具有x的可执行权限
本权限仅在执行该程序的过程中有效
执行者将具有该程序用户组用户的权限
目录
用户若对此目录具有r与x的权限时,该用户能够进入此目录
用户在此目录下的有效用户组将会变成该目录的用户组
若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与目录的用户组相同

5.3.3 Sticky Bit

文件和目录都能设置,但只针对目录有效。
在具有该权限的目录下,自己创建的文件,只有自己和root能删。

5.3.4 特殊权限设置

5.3.4.1 数字法

在这里插入图片描述
当文件没有x权限,却有s,t权限时,会变成大写的S,T。这说明这是空的,比如SUID是使用者用所有者的身份执行文件,但是连所有者都没有执行文件的权限,使用者当然也使用不了。

5.3.4.2 符号法

在这里插入图片描述
我的Linux实验——第6章(文件权限与目录配置),设置一般权限区别不大。

5. 4 查看文件类型: file

6 命令与文件的查询

6.1 寻找执行文件:which

通过命令名,查命令所在路径。这个命令是根据PATH这个环境变量所规范的路径去查询“执行文件的文件名”。
查询cd命令,查不到的原因是因为cd命令是bash内置命令。通过type命令可以得到命令的类型。type的用法在第11章的bash中。

实验之后我发现了很诡异的情况。。。
CentOS 6 还算正常:
在这里插入图片描述
CentOS 8 就闹鬼了:
在这里插入图片描述
这cd命令既是内置命令,又能用which查到?希望有好心人看到,给我解答一下,谢谢了。

6.1 文件名的查找

6.1.1 寻找特定文件:whereis

只支持二进制文件,源代码,man手册。
加选项-u可以查询不在上述三个范围之内的其他特殊文件。

书上说,whereis这个命令查询较快,是因为它也使用了下面locate命令所使用的/va/lib/mlocate里的文件,我对此保有怀疑态度。因为我将文件/va/lib/mlocate/mlocate.db这个文件删除之后,locate命令就无法使用了,但whereis命令却还可以正常使用。
没法,还是得看man文档,CentOS 6 和 CentOS8 的man文档还有一些细小的差别。
CentOS 6 :
在这里插入图片描述
CentOS 8 :
在这里插入图片描述
whereis的man文档里根本就没提过/va/lib/mlocate,只说了in a list of standard standard Linux places(标准的Linux位置),又在CentOS 8 中加入了in the places specified by $PATH and $MANPATH ,更说明了whereis和which一样,都是根据特定路径查找,只是查找的对象和范围不同罢了。
而在locate的man文档里却多次提及了updatedb和数据库文件:
1.
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述
4.
在这里插入图片描述
5.
在这里插入图片描述
这足以说明,鸟哥书上写的whereis 也使用和locate一样的数据库是错误的。但是网上的答案竟然都是从鸟哥书上扒下来的。打个省略号,一切尽在不言中吧。。。。。。

6.1.2 寻找相关文件:locate

locate会比find查得快,因为它从已创建的数据库/var/lib/mlocate里面的数据所查找。

有时候locate会查到过时的信息,或是查不到最新的信息,这是因为数据库没有更新。可以通过updatedb命令更新数据库文件。
updatedb命令会去读取/etc/updatedb.conf这个配置文件的,然后查找硬盘,最后更新数据库文件。

6.1.3 扫描硬盘查找:find

find可以直接查找,也可以用来通过设定参数来查找符合条件的文件。

  1. 时间
  2. 用户或用户组
  3. 文件名、大小、类型、权限
  4. 其他可进行的操作
    -exec command:command为其他命令,-exex后面接其他命令来处理查找到的结果。
    -print:将结果打印到屏幕上,这个操作是默认操作。

书上的例子是这样的:
在这里插入图片描述

-exec和 \; 是默认的格式,中间的内容是额外的命令。{}带表find命令搜索出的结果。

上述图片是在CentOS 6 下运行的,CentOS 8 无法使用例子。具体愿意,还是得查看文档。
CentOS 6 :
在这里插入图片描述
CentOS 8:
在这里插入图片描述
+mode这个选项已经被废弃了,CentOS 6的文档还比较详细一点,我没完全看懂,只看了个大概,大致就是如果使用+的话,会与symbolic modes冲突,并且不符合POSIX标准,所以用/mode代替他。

在CentOS 6 中+mode和/mode都可以使用,可以看出,搜索出的结果是一样的。
在这里插入图片描述

6.1 权限与命令间的关系(极重要)

这章和我的Linux实验——第6章(文件权限与目录配置)关系密切,需要搭配食用。
一、进入某目录成为“可以工作的目录”
1.命令:例如cd等切换工作目录的命令
2.目录:至少需要x
3.额外的需求:如果想在这个目录内使用ls,则用户对此目录还需要r。
在这里插入图片描述

二、在某一个目录内读取一个文件
1.命令:例如cat、more、less等。
2.目录:至少要有x权限。
3.文件所需要的权限:r。
在这里插入图片描述
在这里插入图片描述

三、修改文件
1.命令:nano、vi
2.目录:x。
3.文件:r、w。

四、创建文件
1.目录:w、x,重点在w。

五、进入目录并执行某个文件
1.目录:x。
2.文件:x。

发布了12 篇原创文章 · 获赞 2 · 访问量 517

猜你喜欢

转载自blog.csdn.net/qq_45582319/article/details/104308449