文章目录
- 第7章(文件与目录管理)
- 1. 常见处理目录的命令
- 2. 执行文件路径变量:$PATH
- 3. 文件与目录管理
- 4. 文件内容查询
- 4.1 由第一行开始显示文件内容:cat
- 4.2 由最后一行开始显示文件内容: tac
- 4.3 显示的时候,顺便输出行号: nl
- 4.4 一页一页地显示文件内容: more
- 4.5 一页一页地显示文件内容,可以向前翻页: less
- 4.6 只看头几行: head
- 4.7 只看结尾几行: tail
- 4.8 以二进制形式读取文件内容: od
- 4.8 修改文件时间或创建新文件: touch
- 5. 文件与目录的默认权限与隐藏权限
- 6 命令与文件的查询
第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章中介绍。
- 删除以
-
开头的文件,有两种方法。
-
./
方法 -
--
方法
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可以直接查找,也可以用来通过设定参数来查找符合条件的文件。
- 时间
- 用户或用户组
- 文件名、大小、类型、权限
- 其他可进行的操作
-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。
来源:CSDN
作者:郭仁旭
链接:https://blog.csdn.net/qq_45582319/article/details/104308449