第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]
    选项与参数:

    1. 与时间有关的选项:-atime,-ctime,-mtime,以mtime说明
    • -mtime n: n为数字,意义为在n天之前的一天之内被更动过内容的文件
    • -mtime +n:n天之前(不含)被更动过的文件档
    • -mtime -n:列出在n天之内(含)被更动过内容的文件档名
    • -newer file:file为一个存在的文件,列出比file还要新的文件档
    1. 与使用者或组名有关的参数:
    • -uid n
    • -gid n
    • -user name
    • -group name
    • -nouser
    • -nogroup
    1. 与文件权限及名称有关的参数:
    • -name filename
    • -size [+-]SIZE:搜寻比SIZE还要大(+)或小(-)的文件
    • -type TYPE
    • -perm mode:刚好等于
    • -perm -mode:全部囊括
    • -perm /mode:包含任一
    1. 额外可进行的动作:
    • -exec command:后面可接额外的指令来处理搜寻到的结果
    • -print:将结果打印到屏幕上,预设动作
      范例:
      find /usr/bin /usr/sbin -perm /7000 -exec ls -l {} \;
posted @ 2023-07-31 11:10  Evan-whc  阅读(20)  评论(0编辑  收藏  举报