文章目录
- 文件与目录管理
- 相对路径与绝对路径
- 目录相关操作
- 查阅文件相关操作
- 文件预设权限
- 搜索与文件
- 文件的搜索
- 基本权限与指令
- 最后
在经过上篇 篇一:初识Linux文件权限与配置 后,我们已经基本熟悉并使用了Linux关于文件管理相关的内容,本篇则继续从文件深入,探究目录管理,这里一定要记住: 在Linux系统中,一切皆文件!
文件与目录管理
相对路径与绝对路径
- 绝对路径:
由 根目录/写起,例如/usr/share/doc
一般来说,如果是 shell脚本等类似的程序,务必使用 绝对路径的写法 - 相对路径:
不是由/写起,.
表示当前目录,..
表示上一级目录(父目录)
关于目录的基本常识:
使用命令cd -
就可以回到上一个工作目录,实现直接跳回的操作了
在所有目录底下都会存在的两个目录,分别是『
.
』与『..
』 分别代表此层与上层目录的意思那么在Linux 的根目录下,是否也存在上层目录呢?
若使用『ls -al /
』去查询,可以看到根目录下确实存在 . 与 … 两个目录,再仔细的查阅, 可发现这两个目录的 属性与权限完全一致,这代表根目录的上一层(…)与根目录自己(.)是同一个目录
目录相关操作
cd 变换目录
pwd 见识当前目录,pwd -P 可以取得正确的目录名称,而不是以链接文件的路径来显示
mkdir 建立一个新目录
-m 选项,配置文件的权限,直接设定,不需要看预设权限
-p 选项,直接将所需要的多层目录,递归建立起来
rmdir 删除一个空目录
执行文件路径的变量:
为什么在Linux系统的任何地方都可以执行 基础命令,比如 ls
命令
因为,我们在写入命令后,系统会按照 PATH 的设定去设定每个 PATH定义的目录下搜寻文件名为
ls
的可执行文件,如果在 PATH 定义的目录中含有多个文件名为ls
的可执行文件,那么先搜寻到的同名指令先被执行。
因为基本都包含在 PATH 这个变量内了,所以基本在任何地方都可以使用 这些基本命令了
查看文件的基本操作:ls
更多选项如下:
复制文件或目录:cp
cp
指令在不同身份的人执行,会有不同的结果产生,而且差异很大
一般在备份文件的时候,如果使用cp
命令,默认 cp
的 来源档和目的档 的权限是不同的,目的档 的拥有者通常会是指令的操作者本身,就是说如果 root 用户 cp 了其他用户的目录,那么目的目录的拥有者就变为 root用了,不再是 其他用户了
所以在备份的时候,需要特别注意 特殊权限和文件,例如 密码文件(/etc/shadow
), 需要 -a
或 -p
选项才可以完整复制问价权限的选项
如果遇到 连接文件,cp
命令是默认 复制源文件,而不是复制 链接文件的属性,如果非要链接文件,就需要指定 -d
选项了
移除文件或目录:rm
在 rm
指令前 加上 \
,可以忽略 alias 的指定选项
移动文件目录或更名:mv
重命名文件,也可以使用 rename
命令
查阅文件相关操作
查阅一个文件的命令,不仅仅是 cat
命令(这个是连续
c
o
n
c
a
t
e
n
a
t
e
concatenate
concatenate的简写
cat
: 从第一行开始显示文件内容
tac
: 从最后一行开始显示,cat
命令的反写nl
: 显示的时候,可以输出行号
more
: 一页一页的显示文件内容
less
: 与more
类似,但是可以向前翻页
head
: 只看开头几行,如果 n 是负数,那么就不列出从尾计算的n行,打印从头开始的剩余行
tail
: 只看后面几行,如果要获取 中间的几行,可以配合管道符,使用head
和tail
实现
od
: 以二进制方式读取文件内容
修改文件时间或创建文件:touch
要注意一点,我们在复制一个文件时,复制左右的属性,唯独无法复制 ctime 属性
文件预设权限
我们可以通过 chmod
更改权限,但是在建立目录 或 文件 的时候,默认会有一个权限,这个权限的赋予,就是通过 umask
命令实现的:
# 八进制数字表示权限,第一位表示特殊权限,可以先忽略,重点关注后面三个
[root@AliComputer william]# umask
0022
# -S 选项执行使用字母表示权限
[root@AliComputer william]# umask -S
u=rwx,g=rx,o=rx
[root@AliComputer william]#
在默认权限属性上,umask
表示的是 该默认值需要减掉的权限,因为 r w x
可以分别用八进制数字 4 2 1
来表示,比如上面的 022
, 就表示 当前用户拥有全部权限,同组其他用户被去掉了 写权限,其他组用户被去掉了 写权限
如果要修改默认权限, 只需要 umask num
就可以了,其中 num 为 八进制权限表示数字
配置文件隐藏属性:chattr
这个指令在 系统的数据安全上有很重要的作用,最重要的就是 +i
和 +a
属性了
显示文件隐藏属性:lsattr
显示文件类型:file
搜索与文件
搜寻指令或文件:which
which 预设是找 PATH 内所规范的目录 , 所以有些 bash 命令是无法通过 which
命令找到的
文件的搜索
一般是不采用 find
命令搜索文件的,不仅仅是因为速度慢,也是因为 对硬盘操作很多,所以一般是使用 whereis
或 locate
命令来获取 文件,实在找不到了,才会考虑使用 find
命令
在特定目录中寻找文件或文件名:whereis
因为 whereis
只找几个特定的目录而已~ 并没有全系统去查询之故。所以说, whereis
主要是针对 /bin
/sbin
底下的执行档, 以及 /usr/share/man
底下的 man page 文件,跟几个比较特定的目录来处理而已。所以速度当然快的多!
文件的部分名称的搜索:locate
因为 locate 寻找的数据是由『已建立的数据库 /var/lib/mlocate/
』 里面的数据所搜寻到的,所以不用直接在去硬盘当中存取数据, 速度就很快
但是一般该数据库是每天执行一次更新操作,所以入股还 没有更新数据库的话,就会找不到该文件,可以选择 手动更新数据库:updatedb
命令,updatedb 指令会去读取 /etc/updatedb.conf
这个配置文件的设定,然后再去硬盘里面进行搜寻文件名的动作, 最后就更新整个数据库文件(这里就会读取硬盘,所以会很慢)
updatedb
:根据/etc/updatedb.conf
的设定去搜寻系统硬盘内的文件名,并更新/var/lib/mlocate
内的数据库
文件;locate
:依据/var/lib/mlocate
内的数据库记载,找出用户输入的关键词文件名
在硬盘中搜索文件:find
我们现在知道 atime(上一次访问该文件的时间[读取或执行该文件]), ctime(上一次修改该文件内容或访问权限等) 与 mtime(上一次修改文件内容[特指文件内容]) 的意义,如果你想要找出一天内被
更动过的文件名, 可以使用上述范例一的作法。但如果我想要找出『4 天内被更动过的文件档名』
呢?那可以使用『 find /var -mtime -4 』。那如果是『4 天前的那一天』就用『 find /var -mtime 4 』。有没有加上『+, -』差别很大!!
find
的其他用法:
还有更多用法:
find
的特殊功能:
find
命令可以实现 额外的动作,上面 范例八 的例子图解如下:
基本权限与指令
一、让用户能进入某目录成为『可工作目录』的基本权限为何:
- 可使用的指令:例如 cd 等变换工作目录的指令;
- 目录所需权限: 用户对这个目录至少需要具有 x 的权限
- 额外需求:如果用户想要在这个目录内利用 ls 查阅文件名,则用户对此目录还需要 r 的权限。
二、用户在某个目录内读取一个文件的基本权限为何?
- 可使用的指令:例如本章谈到的 cat, more, less 等等
- 目录所需权限:用户对这个目录至少需要具有 x 权限;
- 文件所需权限: 使用者对文件至少需要具有 r 的权限才行!
三、让使用者可以修改一个文件的基本权限为何?
- 可使用的指令:例如 nano 或未来要介绍的 vi 编辑器等;
- 目录所需权限:用户在该文件所在的目录至少要有 x 权限;
- 文件所需权限: 使用者对该文件至少要有 r, w 权限
四、让一个使用者可以建立一个文件的基本权限为何?
- 目录所需权限: 用户在该目录要具有 w,x 的权限,重点在 w 啦!
五、让用户进入某目录并执行该目录下的某个指令之基本权限为何?
- 目录所需权限:用户在该目录至少要有 x 的权限;
- 文件所需权限:使用者在该文件至少需要有 x 的权限
最后
一起提高,慢慢变强。