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文件;|: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权限的目录具有如下功能:
- 使用者对于此目录具有 r 与 x 权限时,能够进入此目录;
- 使用者在此目录下的有效群组将会变成该目录的群组;
- 用途:若使用者在此目录下拥有 w 权限,则该使用者所创建的新文件的群组与此目录的群组相同。
————————
- Sticky Bit
当 t 标志出现在文件使用者的 x 权限上时,该特殊权限称为Sticky Bit 简称 SBIT,仅对目录有效,其限制和功能为:
- 使用者对此目录具有 w,x 权限;
- 当使用者在该目录下创建文件或目录时,仅有自己与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 将结果打印到屏幕上(默认动作)
总结:指令与权限的关系
-
进入某目录,使之成为工作目录
- 指令:cd 等变换工作目录指令
- 权限:目标目录 x
- 额外需求:如果想在这个目录内使用ls查阅文件名,则还需要有 r 权限
-
在某个目录内读取一个文件
- 指令:cat、more、less 等
- 权限:当前目录 x、目标文件 r
-
修改一个文件
- 指令:nano、vi等
- 权限:当前目录 x、目标文件 r、w
-
创建一个文件
- 权限:当前目录 w、x
-
进入某个目录并执行目录下的某个指令
- 权限:当前目录 x、指令文件 x