第6章 Linux文件与目录管理
第六章 Linux文件与目录管理
6.1 目录与路径
6.1.1 相对路径与绝对路径
- 绝对路径:路径的写法【一定由根目录/写起】,例如:/usr/share/doc。
- 相对路径:路径的写法【不是由/写起】,例如由/usr/share/doc要到/usr/share/man底下时,可以写成:【cd ../man】。相对路径意指【相对于目前工作目录的路径】。
6.1.2 目录的相关操作
底下几个是比较特殊的目录,得要用力的记下来才行:
- . 代表此层目录
- .. 代表上一层目录
- - 代表前一个工作目录
- ~ 代表【目前用户身份】所在的家目录
- ~account 代表account这个用户的家目录
底下我个就来谈一谈几个常见的处理目录的命令吧:
- cd: 变换目录
- pwd:显示当前目录
- mkdir: 建立一个新的目录
- rmdir: 删除一个空的目录
mkdir [-mp] 目录名称
选项与参数:
-m: 配置文件案的权限喔!直接设定,不需要看预设权限,不需要看预设权限的脸色~
-p: 直接将所需要的目录递归建立起来
6.1.3 关于执行文件路径的变量:$PATH
当我们执行一个指令的时候,举例来说【ls】好了,系统会依照PATH的设定去每个目录下搜寻文件名为ls的可执行文件,如果有PATH定义的目录中含有多个ls指令,那么先搜寻到的同名指令先被执行!
6.2 文件与目录管理
6.2.1 文件与目录的检视:ls
ls [-aAdfFhilnrRSt] 文件名或目录名称
ls [--color={never,auto,always}] 文件或目录名称
ls [--full-time] 文件名或目录名称
选项与参数:
-a: 全部的文件
-d: 仅列出目录本身,而不是列出目录内的文件数据
-F: 根据文件、目录等信息,给予附加数据结构,例如:*:代表可执行文件,/:代表目录,=:代表socket文件
-h: 将文件容量以人类较易读的方式列出来
-l: 长数据串列出,包含文件的属性与权限等数据
-r: 将排序结果反向输出
-R: 连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来
-S: 以文件容量大小排序,而不是用档名排序
-t: 依时间排序
--color=never: 不要依据文件特性给予颜色显示
--color=always: 显示颜色
--color=auto: 让系统自行依据设定来判断是否给予颜色
--full-time: 以完整时间模式输出
--time={atime|ctime}: 输出access时间或改变权限属性时间,而非内容变更时间
6.2.2 复制、删除与移动:cp,rm,mv
-
cp(复制文件或目录)
cp [-adfilprsu] 来源文件(source) 目标文件(destination) cp [options] source1 source2 source3 .... directory 选项与参数: -a: 相当于-dr --preserve=all的意思 -d: 若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身 -f: 为强制的意思,若目标文件已经存在且无法开启,则移除后再尝试一次 -i: 若目标文件已经存在时,在覆盖时会先询问动作的进行 -l: 进行硬件连结(hard link)的连结档建立,而非复制文件本身 -p: 连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性 -r: 递归持续复制,用于目录的复制行为 -s: 复制成为符号链接文件(symbolic link),亦即【快捷方式】文件 -u: destination比source旧才更新destination,或destination不存在的情况下才复制 --preserve=all: 除了-p的权限相关参数外,还加入SELinux的属性,links,xattr等也复制了 最后需要注意的,如果来源档有两个以上,则最后一个目的文件一定要是【目录】才行!
-
rm [-fir] 文件或目录
选项与参数: -f: 就是force的意思,忽略不存在的文件,不会出现警告讯息; -i: 互动模式,在删除前会询问使用者是否动作 -r: 递归删除啊!
-
mv [fiu] source destination
选项与参数: -f: 强制的意思 -i: 若目标文件已存在,询问是否覆盖 -u: 若目标文件已经存在,且source比较新,才会更新
6.2.3 取得路径的文件名与目录名称
每个文件的完整档名包含了前面的目录与最终的文件名,而每个档名的长度都可以到达255个字符耶!那么你怎么知道哪个是档名?哪个是目录名?嘿嘿!就是利用斜线(/)来分辨啊!其实,取得文件名或是目录名称,一般的用途是写程序的时候用来判断之用的啦!
# basename /etc/sysconfig/network
network #文件名
# dirname /etc/sysconfig/network
/etc/sysconfig # 目录名
6.3 文件内容查询
如果我们要查阅一个文件的内容时,该如何是好呢?这里有相当多有趣的指令可以来分享一下:最常使用的显示文件的指令可以说是cat与more及less了!此外,我们要查看一个很大型的文件,但是我们只需要后端的几行字而已,那么如何是好?呵呵,用tail呀。
- cat 由第一行开始显示文件内容
- tac 从最后一行开始显示
- nl 显示的时候,顺道显示行号
- more 一页一页的显示文件内容
- less 与more类似,但是比more更好的是,他可以往前翻页
- head 只看头几行
- tail 只看尾巴几行
- od 以二进制的方式读取文件内容
在less里头可以拥有更多的【搜寻】功能喔!不止可以向下搜寻,也可以向上搜寻~,实在是很不错的:
* 空格键:向下翻动一页
* 【pagedown】:向下翻动一页
* 【pageup】:向上翻动一页
* /字符串:向下搜寻【字符串】
* ?字符串:向上搜寻【字符串】
* n:重复前一个搜寻
* N:反向重复前一个搜寻
* g:前进到这个资料的第一行去
* G: 前进到这个数据的最后一行去
* q:离开less这个程序
6.3.5 修改文件时间或建置新档:touch
touch [-acdmt] 文件
选项与参数:
-a: 仅修订access time
-c:仅修改文件的时间,若不若文件不存在则不建立新文件
-d: 后面可以接欲修订的日期而不用目前的日期,也可以使用--date="日期或时间"
-m: 仅修改mtime
-t:后面可以接欲修订的时间而不用目前的时间,格式为【YYYYMMDDhhmm】
6.4 文件与目录的默认权限与隐藏权限chgrp,chown,chmod,chattr,lsattr
6.4.1 文件预设权限:umask
umask就是指定【目前用户在建立文件或目录时候的权限默认值】,umask的分数指的是【该默认值需要减掉的权限】。
如何修改umask呢?简单的很,直接在umask后输入数值即可,如umask 002
在预设的情况下,root的umask会拿掉比较多的属性,root的umask默认是022,这是基于安全的考虑啦~,至于一般身份使用者,通常他们的umask为002,亦即保留同群组的写入权力!
6.4.3 文件特殊权限:SUID,SGID,SBIT
-
当s这个标志出现在文件拥有者的x权限上时,此时就被称为Set UID。基本上SUID有这样的限制与功能:
- SUID权限仅对二进制程序有效
- 执行者对于该程序需要具有x的可执行权限
- 本权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者的权限
-
Set GID
SGID可以针对文件或目录来设定!如果是对文件来说,SGID有如下的功能:- SGID对二进制程序有用
- 程序执行者对于该程序来说,需具备x的权限
- 执行者在执行过程中将会获得该程序群组的支持
当一个目录设定了SGID的权限后,他将具有如下的功能: - 用户若对于此目录具有r与x的权限时,该用户能够进入此目录
- 用户在此目录下的有效群组(effective group)将会变成该目录的群组
- 用途:若用户在此目录下具有w的权限,则使用者所建立的新文件,该新文件的群组与此目录的群组相同
-
Sticky Bit
这个Sticky Bit,SBIT目前只针对目录有效,对于文件已经没有效果。SBIT对于目录的作用是: -
当用户对于此目录具有w,x权限,亦即具有写入的权限时
-
当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件
-
SUID/SGID/SBIT权限设定
- 4为SUID
- 2为SGID
- 1为SBIT
假设要将一个文件权限改为【-rwsr-x-r-x]时,由于s在用户权力中,所以是SUID,因此,在原先的755之前还要加上4,也就是【chmod 4755 filename】来设定!此外,还有大S与大T(无效权限)的产生喔!
6.4.4 观察文件类型:file
如果你想要知道某个文件的基本数据,例如是属于ASCII或者是data文件,或者是binary,且其中有没有使用到动态函式库(share library)等等的信息,就可以利用file这个指令来检阅喔!
6.5 指令与文件的搜寻
6.5.1 脚本文件名的搜寻
- which(寻找执行档)
选项与参数:
-a: 将所有由PATH目录中可以找到的指令均列出,而不止第一个被找到的指令名称
6.5.2 文件档名的搜寻
-
whereis [-bmsu] 文件或目录名
选项与参数:
-l: 可以列出whereis会去查询的几个主要目录而已
-b: 只找binary格式的文件
-m: 只找在说明文件manual路径下的文件
-s:只找source来源文件
-u: 搜寻不在上述三个项目当中的其他特殊文件 -
locate /updatedb
locate [-ir] keyword
选项与参数:
-i: 忽略大小写的差异
-c: 不输出档名,仅计算找到的文件数量
-l: 仅输出几行的意思
-S:输出locate所使用的数据库文件的相关信息,包括该数据记录的文件/目录数量等
-r: 后面可接正规表示法的显示方式
locate寻找数据特别的快,这是因为locate寻找的数据是由【已建立的数据库/var/lib/mlocate/】里面的数据所搜寻到的。数据库的建立默认是每天执行一次。也可以手动更新数据库,方法是:直接输入【updatedb】
-
find
find [PATH] [option] [action]
选项与参数:- 与时间有关的选项:-atime,-ctime,-mtime,以mtime说明
- -mtime n: n为数字,意义为在n天之前的一天之内被更动过内容的文件
- -mtime +n:n天之前(不含)被更动过的文件档
- -mtime -n:列出在n天之内(含)被更动过内容的文件档名
- -newer file:file为一个存在的文件,列出比file还要新的文件档
- 与使用者或组名有关的参数:
- -uid n
- -gid n
- -user name
- -group name
- -nouser
- -nogroup
- 与文件权限及名称有关的参数:
- -name filename
- -size [+-]SIZE:搜寻比SIZE还要大(+)或小(-)的文件
- -type TYPE
- -perm mode:刚好等于
- -perm -mode:全部囊括
- -perm /mode:包含任一
- 额外可进行的动作:
- -exec command:后面可接额外的指令来处理搜寻到的结果
- -print:将结果打印到屏幕上,预设动作
范例:
find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;