文件与目录管理

152 阅读13分钟

ArmouryCrateDownloadTool# 目录与路径

绝对路径与相对路径

  • 绝对路径:相对于根目录的路径,写法是由根目录 “/” 写起;
  • 相对路径:相对于当前工作目录的路径,写法是不由“/”写起。

目录相关操作

特殊目录符号

.    代表此层目录
..   代表上一层目录
-    代表前一工作目录
~    代表目前使用者身份所在的主文件夹
~xxx 代表使用者xxx的主文件夹

常见处理目录指令

cd      变换目录
pwd     显示目前的目录        -P 显示实际工作目录,而不是链接文件本身的目录名
mkdir   创建一个新的目录      -m 设置文件权限    -p 递归创建所有目录
rmdir   删除一个空的目录      -p 连同上层的空目录一起删除

可执行文件路径变量:$PATH

echo $PATH    查看PATH变量定义的路径

路径加入到可执行文件搜寻路径PATH变量中之后,该路径下的可执行文件可在任何目录执行。

文件与目录管理

查看文件与目录命令:ls

ls [-/--] name
选项与参数:
-a    全部文件,包括隐藏文件(开头为 . 的文件)          *
-A    全部文件,包括隐藏文件,不包括 . 与 .. 两个目录
-d    仅列出目录,不包括文件                            *
-f    直接列出结果,不进行排序
-F    根据文件、目录等信息,给予附加数据结构,如:*:可执行文件,/:目录,=:socket文件;&#124:FIFO文件
-h    将文件大小以人类易读的方式列出来(如GB、KB)
-i    列出inode号码
-l    长数据串行出,包含文件的属性与权限等数据           *
-n    列出UID与GID,而非使用者与群组名称
-r    将排序结果反向输出
-R    连同子目录内容一起列出
-S    以文件大小排序,而非默认的文件名排序
-t    根据时间排序

--color=never    不用根据文件特性基于颜色显示
--color=always   显示颜色
--color=auto     让系统自行依据设置判断是否给予颜色
--full-time      以完整时间模式(年月日时分)输出
--time=atime     输出访问时间
--time=ctime     输出改变权限属性时间

复制、删除、移动:cp,rm,mv

  • cp:复制文件或目录
cp [-] source dest(file/dir)
cp [-] source1 source2 ... dest(dir)
选项与参数:
-a    完整复制文件或目录,包括文件属性,相当于 -dr --preserve=all *
-d    若dest为链接文件,则复制链接文件而非文件本身
-f    若目标文件已经存在且无法打开,则移除后再试一次
-i    若目标文件已经存在,在覆盖前会先询问动作的进行               *
-l    进行硬连接的链接文件创建,而非复制文件本身
-p    连同文件属性(权限、用户、时间)一起复制,而非使用默认属性    *
-r    递归复制目录
-s    复制成符号链接文件,即快捷方式
-u    dest比source旧才更新dest,或dest不存在才复制

--preserve=all    除了-p的权限相关参数外,还加入SELinux属性,如links、xattr等也会被复制
  • rm:移除文件或目录
rm [-] file/dir
选项或参数:
-f    忽略不存在的文件,不会出现警告信息
-i    互动模式,在删除前询问使用者
-r    递归删除(危险!)
  • mv:移动文件与目录,或更名
mv [-] source dest(file/dir)
mv [-] source1 source2 ... dest(dir)
选项或参数:
-f    如果目标已存在,不会询问而是直接覆盖
-i    若目标文件已存在,会询问是否覆盖
-u    若目标文件已存在,且source比dest新才会更新

取得路径的文件名称与目录名称

basename:获取路径的文件名称
basename path

dirname:获取路径的目录名称
dirname path

文件内容查阅

直接查看文件内容

  • cat:从第一行开始显示文件内容
cat [-]
选项与参数:
-A    相当于 -vET
-b    列出行号(空白行除外)
-E    将换行符以 $ 显示
-n    打印出行号,包括空白行
-T    将 [Tab] 键以 ^I 显示
-v    显示一些不可打印的特殊字符
  • tac:从最后一行开始显示文件内容
tac [-]
选项与参数:
-b    在行前而非行尾添加分隔标志
-r    将分隔标志视作正则表达式来解析
-s    使用指定字符串代替换行作为分隔标志
  • nl:添加行号打印
nl [-] file
选项与参数:
-b a      空行也列出行号
-b t      空行不列出行号
-n ln     行号在最左方显示
-n rn     行号在最右方显示,不加0
-n rz     行号在最右方显示,左侧加0补齐
-w [num]  行号占[num]个字符显示

翻页查看文件内容

  • more:单页翻动,只能向后
按键操作:
空格:    下翻一页
Enter:   下翻一行
/[str]:  从当前显示内容向下搜寻字符串
:f:      显示文件名及目前显示的行数
q:       离开more
b:       向前翻页
  • less:单页翻动,可向前或向后
空格:       下翻一页
[pagedown]: 下翻一页
[pageup]:   上翻一页
/[str]:     向下搜寻字符串
?[str]:     向上搜寻字符串
n:          重复前一个搜寻
N:          反向重复前一个搜寻
g:          跳转到第一行
G:          跳转到最后一行
q:          离开less

数据截取显示

  • head:截取前面几行显示
// 默认显示前10行
head [file]

// 显示前[num]行
head -n [num] [file]

// 显示除了最后[num]行以外的所有行
head -n [-num] [file]
  • tail:截取后面几行显示
// 默认显示最后10行
tail [file]

// 显示最后[num]行
tail -n [num] [file]

// 显示[num]行之后的所有行
tail -n [+num] [file]

// 持续检测文件内容,ctrl-c停止
tail -f [file]

非纯文本文件

  • od:查阅非纯文本文件
od [-t TYPE] file
选项或参数:
-t:后接类型,如:
    a        利用默认字符输出
    c        使用ASCII字符输出
    d[size]  利用十进制输出,每个整数占用size字节
    f[size]  利用浮点数输出,每个数占用size字节
    o[size]  利用八进制输出,每个整数占用size字节
    x[size]  利用十六进制输出,每个整数占用size字节

修改文件时间或创建新文件

  • touch:修改文件时间或创建新文件

文件时间主要包括:

  • mtime:(modification time)文件内容改变的时间;
  • ctime:(status time)文件状态改变的时间;
  • atime:(access time)文件内容读取的时间。
touch [-] file
选项或参数:
-a    仅修改atime
-c    仅修改文件时间,若文件不存在则不创建新文件
-d    后可接欲修订的日期而不是当前日期,也可使用--date
-m    仅修改mtime
-t    后可接欲修订的日期而不是当前日期,格式为[YYYYMMDDhhmm]

默认权限与隐藏权限

文件默认权限

  • unmask:指定目前使用者在创建文件或目录时的默认权限值
unmask 0022 // 第一组数字为特殊权限,后三组为rwx

unmask -S u=rwx,g=rx,o=rx // -S表示使用符号表示权限

文件隐藏属性

  • chattr:设置文件隐藏属性
chattr [+-=][ASacdistu] file/dir
选项或参数:
+    增加一个特殊参数
-    移除一个特殊参数
=    设置仅有后面接的参数

A    存取文件时不会修改atime
S    修改的文件会同步写入磁盘(一般情况下文件是异步写入磁盘)
a    (仅root)使文件只能增加数据,不能删除或修改数据
c    存储文件时会压缩文件,读取文件时会解压文件
d    可使dump程序被执行时,文件不被dump备份
i    (仅root)使文件不能被删除、改名、设置链接、写入数据
s    使文件被完全地移出硬盘空间
u    删除文件,但是还可以找回
  • lsattr:显示文件隐藏属性
lsattr [-adR] file/dir
选项或参数:
-a    同时显示隐藏文件的属性
-d    如果接的是目录名称,仅列出目录本身的属性,不显示目录内文件的属性
-R    同时显示子目录的文件属性

文件特殊权限

  • Set UID

s 标志出现在文件拥有者x 权限上时,该特殊权限称为Set UID,简称为SUID,具有以下限制和功能:

  • SUID权限对二进制程序有效;
  • 执行者对该程序需要具有 x 权限;
  • 仅在执行该程序的过程中有效(run-time);
  • 执行者在执行过程中将具有该程序拥有者的权限。

例如:/etc/shadow 文件中记录了所有账号的密码,其权限为“---------- 1 root root”,即仅root可读写,但是由于一般用户对于/usr/bin/passwd 程序具有 x 权限,而该程序的权限为“-rwsr-xr-x”,具有SUID权限,且拥有者为root,因此用户执行passwd命令后会暂时获得root的权限,从而对/etc/shadow 文件进行修改。

而一般用户执行/bin/cat 时,由于其权限为“-rwxr-xr-x”,不具有SUID权限,因此无法读写/etc/shadow 文件。

————————

  • Set GID

s 标志出现在文件群组x 权限上时,该特殊权限称为Set GID,简称为SGID,具有以下限制和功能:

  • SGID权限对二进制程序有效;
  • 执行者对该程序需要具有 x 权限;
    • 执行者在执行过程中将获得该程序群组的支持。

例如:群组外的用户可以通过具执行有SGID权限的/usr/bin/locate 程序获得slocate群组的支持,从而读取mlocate.db 文件。

同时SGID也可用于目录,设置了SGID权限的目录具有如下功能:

  • 使用者对于此目录具有 rx 权限时,能够进入此目录;
  • 使用者在此目录下的有效群组将会变成该目录的群组;
  • 用途:若使用者在此目录下拥有 w 权限,则该使用者所创建的新文件的群组此目录的群组相同。

————————

  • Sticky Bit

t 标志出现在文件使用者x 权限上时,该特殊权限称为Sticky Bit 简称 SBIT,仅对目录有效,其限制和功能为:

  • 使用者对此目录具有 wx 权限;
  • 当使用者在该目录下创建文件或目录时,仅有自己root才能删除该文件。

————————

  • SUID/SGID/SBIT权限设置

若使用数字设置权限,则在数字的最前面加上以下数字:

  • 4:SUID;
  • 2:SGID;
  • 1:SBIT

如 “chmod 4755 filename” 将文件的权限改为 “-rwsr-xr-x”。

若使用符号设置权限,则按照以下方式:

  • SUID:u+s;
  • SGID:g+s;
  • SBIT:o+t

如 “chmod u=rwxs,go=x test” 将文件的权限设为 “-rws--x--x”,再执行 “chmod g+s,o+t test” 将文件的权限设为“-rws--s--t”。

观察文件类型

  • file:查看文件类型

指令与文件的搜寻

  • which:寻找PATH目录中指令的可执行文件的完整文件名
which [-a] command
选项或参数:
-a    将所有由PATH目录中可以找到的指令均列出
  • whereis:从特定的目录中寻找文件
whereis [-bmsu] file/dir
选项或参数:
-l    列出whereis会去查询的几个主要目录
-b    只找binary文件
-m    只找说明文档manual路径下的文件
-s    只找source来源文件
-u    搜寻不在以上三个项目中的其他文件

由于whereis只从几个特定目录(如/bin/sbin 下的可执行文件、/usr/share/man 下的man page文件等)寻找文件,而find则是全盘搜索,因此whereis的搜寻速度比find快得多。

  • locate:利用数据库搜索文件名
locate [-ir] keyword
选项或参数:
-i    忽略大小写
-c    仅计算找到的文件数量,不输出文件名
-l    后接数字,仅输出几行
-S    输出 locate 所使用的数据库文件的相关信息,包括该数据库记录的文件/目录数量等
-r    后可接正则表达式

locate寻找的数据由已创建的数据库 /var/lib/mlocate/ 内的数据所搜寻到,而不直接从硬盘中存取数据。

由于数据库的创建默认是每天执行一次(不同发行版可能有所不同),因此新创建的文件在数据库更新之前可能出现搜索不到的问题,需要使用updatedb命令进行手动更新。

  • updatedb:手动更新locate数据库

updatedb命令会读取配置文件 /etc/updatedb.conf 中的设置,然后在硬盘中搜寻文件名,最后更新/var/lib/mlocate 内的数据库文件。

  • find:全盘搜索特定文件
find [PATH] [option] [action]
与时间相关的选项:
-mtime  n    在n天之前的一天之内被修改过内容的文件
-mtime +n    在n天之前(不包含n)被修改过内容的文件
-mtime -n    在n天之内(包含n)被修改过内容的文件
-newer file  比file还要新的文件

与使用者或群组名称相关的选项:
-uid  n      使用者的ID为n的文件
-gid  n      群组ID为n的文件
-user name   使用者名称为name的文件
-group name  群组名称为name的文件
-nouser      寻找拥有者不在/etc/passwd 中的文件
-nogroup     寻找拥有群组不在/etc/group 中的文件

与文件权限及名称相关的选项:
-name filename    文件名称为filename的文件
-size [+-]SIZE    比SIZE大(+)或小(-)的文件,SIZE的单位包括c:Byte、k:KB
-type TYPE        类型为TYPE的文件,TYPE包括:f:一般文件、b/c:设备文件、d:目录、l:链接文件、
                  s:socket文件、p:FIFO文件
-perm mode        权限等于mode的文件
-perm -mode       权限囊括mode所包含权限的文件
-perm /mode       权限包含mode中任一权限的文件

额外可进行的动作:
-exec command     用额外的command指令处理搜索结果
-print            将结果打印到屏幕上(默认动作)

总结:指令与权限的关系

  1. 进入某目录,使之成为工作目录

    • 指令:cd 等变换工作目录指令
    • 权限:目标目录 x
    • 额外需求:如果想在这个目录内使用ls查阅文件名,则还需要有 r 权限
  2. 在某个目录内读取一个文件

    • 指令:cat、more、less
    • 权限:当前目录 x目标文件 r
  3. 修改一个文件

    • 指令:nano、vi
    • 权限:当前目录 x目标文件 r、w
  4. 创建一个文件

    • 权限:当前目录 w、x
  5. 进入某个目录并执行目录下的某个指令

    • 权限:当前目录 x指令文件 x