1.目录与路径
根目录下有没有上层目录存在?
可以看到根目录下确实存在 . 与 … 两个目录,再仔细的查阅,
可发现这两个目录的属性与权限完全一致,这代表根目录的上一层(…)与根目录自己(.)是同一个目录。
1.1目录的相关操作
指令 | 作用 |
---|---|
pwd | 显示当前目录,可加-P选项,显示完整路径而不是链接路径 |
mkdir | -m 创建目录的同时设置目录的权限 -p 递归创建所需目录 |
rmdir | -p 递归删除所有目录,连同“上层”“空的”目录也一起删除 |
1.2 关于可执行文件路径的变量: $PATH
为了安全起见,不建议将“.”加入PATH的搜寻目录中
工作目录并非固定(常常会使用cd来切换到不同的目录), 因此能够执行的指令会有变动(因为每个目录下面的可可执行文件都不相同),这对使用者来说并非好事。
若有人在公共目录加入一些和常用指令同名的危险性的可执行文件,会导致漏洞
总结
不同身份使用者默认的PATH不同,默认能够随意执行的指令也不同 |
---|
PATH是可以修改的 |
使用绝对路径或相对路径直接指定某个指令的文件名来执行,会比搜寻PATH来的正确 |
${PATH} 里面哪个目录先被查询,则那个目录下的指令就会被先执行 |
2.文件与目录管理
2.1 ls命令:
2.2 cp命令
在默认的条件中, cp 的来源文件与目的文件的权限是不同的,目的文件的拥有者通常会是指令操作者本身。举例来说, 上面的范例二中,操作者是root的身份,因此复制过来的文件拥有者与群组就改变成为 root 所有了。
要注意一点,复制行为不能超出操作者本人的权限:
这里即使使用了-a来试图完整复制文件的属性高信息,但是鉴于dmtsai自身的权限限制,并不能修改文件所有者和文件所有组。
2.3 rm命令
2.4 mv命令
3.文件内容查阅
3.1 无翻页指令(一次性的将数据一口气显示到屏幕上):
指令名 | 用法 |
---|---|
cat (concatenate) | ![]() |
tac (反向列示) | ![]() |
nl (添加行号打印) | ![]() |
3.2 可翻页检视
指令名 | 用法 |
---|---|
more | ![]() |
less | ![]() |
4.文件内容截取
指令名 | 用法 |
---|---|
head | ![]() |
tail (取出后面几行) | ![]() |
5.非纯文本文件:od
6.修改文件时间或创建新文件: touch
文件具有三种修改时间:
名称 | 含义 |
---|---|
modification time (mtime) | 文件的“内容数据”变更时间 |
status time (ctime) | 文件的“状态 (status)”改变时间,比如属性与权限 |
access time (atime) | “该文件的内容被取用”时间 |
复制文件时,mtime不变(内容不变),ctime是当前时间(新建文件)
使用ls指令可以查看文件的三种时间:
默认情况,显示mtime
可以加上命令行参数- -time=atime/ctime 来修改所要查看的时间种类
考虑一种情况:由于BIOS的设置错误,导致系统时间跑到未来时间,并且你又创建了某些文件。 等你将时间改回正确的时间时,该文件不就变成来自未来了?
为了纠正这些错误,可使用touch指令修改文件时间:
7.文件和目录的默认和隐藏权限
7.1 默认权限
可使用指令umask查看默认权限,加上-S以符号方式显示默认权限:
注意单独使用umask会有四个数字,第一个为特殊权限
umask 的分数指的是该默认值需要减掉的权限,如上述的022,即为u需要去掉0的权限,也就是不需要去掉任何权限,而g和o需要去掉2的权限,2表示w的权限。所以:
注意,在创建文件时,会默认没有x权限,也就是无论在umask中有没有指出要去掉x,默认都不会有x权限
7.2 隐藏权限
使用chattr设置隐藏属性:
需要 lsattr 才能看到隐藏属性。+a与+i尤为重要
7.3 文件特殊权限
7.3.1 SUID:
如果某个用户具有SUID权限,那么:
在如下两个前提下:
目标文件为二进制文件;本权限仅在执行过程中有效
如果该用户对目标文件有执行权限,那么用户将具有目标文件所有者的权限。
例子,有用户dmtsai,文件/usr/bin/passwd,passwd的所有者为root,且dmtsai对文件有SUID特殊权限:
在查看权限时,如果用户对文件有SUID权限,那么会在对应的位置将x换成s
7.3.2 SGID:
SGID于SUID类似,只是是对应文件的所有组:
SGID 也能够用在目录上。:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同
7.3.3 SBIT(Sticky Bit)
仅对目录有效。
7.3.4 观察文件类型:file
7.4 指令与文件的搜寻
7.4.1 which搜寻指令:
注意,which只能搜寻PATH所规范的指令,比如history 是“bash 内置的指令”(有 bash 就有 history) 但是 which 默认是找 PATH 内所规范的目录,所以使用which history
找不到。
7.4.2 whereis搜寻文件:
去某些主要目录查找:
7.4.3 locate / updatedb
去数据库查找:
locate 寻找的数据是由“已创建的数据库 /var/lib/mlocate/” 里面的数据,数据库的创建默认是在每天执行一次 (每个 distribution 都不同,CentOS 7.x 是每天更新数据库一次),可使用updatedb手动更新。updatedb 指令会去读取 /etc/updatedb.conf 这个配置文件的设置,然后再去硬盘里面搜寻文件名, 最后就更新整个数据库文件
7.4.4 find
对-exec的补充说明:

不过由于 find 在寻找数据的时后相当的操硬盘。所以没事情不要使用find 。有更棒的指令可以取代。那就是上面提到的 whereis 与 locate