第六章 文件与目录管理
1. 特殊目录
- … 上一层目录 如 $ cd … 跳转到上一层
- . 当前目录 如 $ cd ./xxx/ 跳转到本目录下的xxx目录下./来对含有特殊符号的文件进行操作
- - 之前的目录
- ~ 家目录
- ~username 某个用户的家目录
2. 目录操作
- $ cd directory 改变当前目录(可以用tab自动补全)
- $ pwd 显示当前路径
- -P 显示真正路径非链接文件的路径
- $ mkdir directoryname 创建目录
- -m 771 设置创建目录的权限不用umask
- -p 创建包括父目录
- $ rmdir directoryname 删除空目录
- -p 删除包括父目录
- $ basename /xxxx/xxx/xx 获取文件名
- $ dirname /xxx/xxx/xx 获取目录名
- $ file filename 用于查看文件类型,动态链接库信息,和特殊权限等
3. 环境变量
- $ echo $PATH 打印环境变量,执行相关命令会根据环境变量目录的次序 去每个目录下依次寻找执行
- PATH 中 每个目录之间用 " : " 隔开
- 通过 $ PATH="{PATH}:/root" 加入相关路径
4. 文件操作
$ ls
- $ ls [-adfFhilnrRSt] --color=[never always auto] --full-time --time 文件与目录查看
- -al / h / --color --full-time 常用
- -s 显示占用的数据区块大小>=实际数据大小
- -R 显示子目录
- -d 显示文件夹
- -i 显示inode 号码
- –time=mtime,ctime,atime 显示不同的时间
- -F 显示文件类型
- -r 以反向排序
- -S 以大小排序
- -f 以存储位置排序
- -t 以时间排序
$ cp
- $ cp [-adfilprsu] source1 source2 … directory 复制多个文件到某目录下 / source destination 复制文件source为文件destination
- 注意 默认拷贝owner为操作者 权限也会发生改变
- -d 复制链接( 默认复制文件本身)
- -p 保持源文件的拥有者,组和atime,mitme属性 ctime一定会发生改变
- -r 递归复制(-a=-dpr)
- -l 建立硬链接 -s 建立软链接
- -i 询问是否覆盖 -u 源文件更新才进行复制或者目标文件不存在
$ mv
- $mv [-fiu] source1 source2 … destination / source destination 移动文件
- -fiu 上同
$ rm
- $ rm [-fir] file/directory 删除文件或目录
- -f 忽略不存在文件的提示
- -i 删除前进行询问 身份为root 默认加入-i
- -r 递归删除 可以用 $ \rm -r dirname 来取消询问 \ 来忽略alias指定选项
$ touch
- $ touch [-acdmt] filename 建立文件或者更新文件时间属性
- 默认将atime ctime 更新为当前时间 没有该文件则新建文件 -c 不建立文件
- -a / --time=atime 只修改atime为当前时间 -m / --time=mtime 只修改mtime为当前时间 --time=ctime 修改
- -t “[[CC]YY]MMDDhhmm[.SS]” 修改为指定时间
5. 内容查看
$ cat
- $ cat [-bEnTv] filename 从第一行到最后以行显示内容 $tac 相反
- -A = -vET v列出看不出来的字符 E换行符用$列出 T[tab]用^I显示出来
- -b 非空白行显示行号 -n 所有行显示行号
$ nl
- $ nl [-bnw] filename 与cat类似多了添加行号打印
- -b a 显示所有行号 -b t 显示非空白行号 (默认)
- -n ln 行号左对齐不加零 -n rn 右对齐不加零 -n rz右对齐加零
- -w n 行号栏占n位
$ more/less
- $ more filename 翻动查看(管道文件无法往上翻页)
- space 下翻一页 b 上翻一页 Enter 下翻一行
- /string 向下查找sring
- :f 显示文件名及当前行数
- q 退出
- $ less filename 翻动查看(对more进行模拟做了增强额外功能如下)
- pgdn 下翻一页 pdup 上翻一页
- ?string 向上查找string
- n 重复前一个查找 N反向重复前一个查找
- g 回到第一行 G 到最后一行
$ od
- $ od [-AtNJw] filename 查看不能显示在终端的字符(二进制文件)
- -A [dox] 地址输出的格式(默认用八进制输出地址)
- -t a 字符输出 c 字符输出包括转义字符 -t d/o/x/f/u size 各种进制输出 每个数占用size Bytes 或用CSIL表示一个char,short,int,long大小 FDL表示一个float,double,long double大小
- -N/-J/-w n[KB M G…] 总计输出/跳过/每行输出 n个Bytes[KB M G]个字符
- $ echo password | od -t dCc 转换password为10进制的ascii码(可以每行转换成多个格式)
6. 文件内容截取
- $ head [-n] filename 截取前几行
- -n 100 取前100行 (默认取10行)
- -n -10 取所有不要最后10行
- $ tail [-nf] filename 截取后几行
- -n 20 显示最后20行
- -n +20 显示20行及以后的行
- -f 持续检测文件如果有更新就会显示
- $ head -n 20 filename | tail -n 10 通过管道截取指定的内容
7. 默认权限与隐藏权限
$ umask
- $ umask [-S] [xxx]
- 默认按位模式显示需要去掉的权限 -S 用符号显示需要去掉的权限
- xxx设置数值 如 002 表示 文件或目录去除写权限
- 默认值 文件 666(rw-rw-rw-) 目录 777(rwxrwxrwx) 减去 umask 后为默认权限(注意 6-1 还是rw-)
$ chattr
- $ chattr [±=] [AadiS] 改变文件的隐藏属性
- -i 文件无法 删除,修改,改名,设置连接
- -a 文件无法 删除,修改,只能增加数据
- -A 文件在读取时atime不会改变
- -d 文件不会被dump备份
- -s 文件在删除时永远被删除
$ lsattr
- $ lsattr [adR] filename/directoryname 显示文件的隐藏属性
- -a 将隐藏文件的隐藏属性显示
- -d 不显示目录下的文 只显示目录属性(默认显示目录下的文件)
- -R 递归显示所有子目录和子文件
8. 文件的特殊权限
SUID - 4
- 执行者需要有该程序的可执行权x,且拥有者权限–x变成–s
- 仅对二进制程序有效,对于Shell脚本和目录无效
- 执行者仅在执行程序过程中具有拥有者的权限
SGID - 2
- 执行者需要有该程序的可执行权x,且用户组权限–x变成–s
- 对二进制程序有效,对于Shell脚本和无效
- 执行者仅在执行程序过程中具有用户组的权限
- 用于目录后 该目录下新建的文件用户组为该目录用户组 , 拥有rx权限才可进入该目录之下
SBIT - 1
- 只对目录有效,拥有rx权限才可进入该目录之下,其他权限–x变成–t
- 用户在目录下建立文件目录时仅有自己与root有权限删除该文件
- 解释: 如 /tmp 其他人都可以进去修改但是只能对自己的文件修改
改变特殊权限
- $ chmod u+s,g+s,o+t filename 或 $ chmod 7777 filename
9. 命令与文件查找
$ which
- $ which [-a] command 查找命令
- -a 在所有PATH中寻找 默认在指定的路径中查找
- $ type 查找bash中的命令
$ whereis
- $ whereis [-bmsu] filename/directoryname 在特定目录下查找
- -b 只找bin二进制 -s 只找src源文件 -m 只找man文件
- -l 列出查找的目录
- -u 查找不在 man src bin 下的其他特殊文件
$ locate
- $ locate [-iclSr] keyword 在数据库中根据关键字查找文件
- -i 忽略大小写 -c 只计算个数 -l n 输出 n 行
- -S 输出数据库信息
- -r 根据 后面的正则表达式来搜索
- 通过 $ updatedb 来及时更新数据库防止新建立的文件找不到
$ find
- $ find [path] [option] [action] 更强大的搜索 (path 可以有多个 , 会默认搜索子目录)
- -atime/mtime/ctime +n / n / -n : n+1天之前 / n 天前的一天 / n 天内
- path1 - newer path2 搜索 文件1 比 文件 2 早的文件 (-newer[XY] [XY]是[acm] 针对三种不同时间的两个组合 或者可以用 -anewer / -cnewer 替代 , 默认是 对mtime)
- -uid / gid n 查询uid和gid 为 n 的文件
- -user/ group name 查询user和group 为 name 的文件 -nouser / - nogroup 查询user和group 不存在的文件
- -name filename 查询文件名为 filename的文件 filename 可以为 " 正则表达式 "
- -size [±]SIZE 查询比SIZE大或小的文件 可用 c/k/M 表示 B/KB/MB
- -type [fbcdlsp] 根据文件类型查找
- -perm mod / -mod / /mod 根据权限查找 正好为mod / 全部包含 / 包含任意一个权限 的文件
- -exec command 举例 : $ find /home -exec ls -l {} \ ;
- ( -size +1500k -o/-a -size 0k ) 可以表示逻辑或和逻辑与 ! -size +1500k 表示否