03-文件管理

目录

1 文件系统目录结构

1.1 目录结构

1.2 常见的文件系统目录功能

1.3 应用程序的组成部分

1.4 Linux下的文件类型

2 文件操作命令

2.1 显示当前的工作目录

2.2 相对路径和绝对路径

2.3 更改目录

2.4 列出目录内容

2.5 查看文件状态

2.6 确定文件内容

2.7 文件通配符

2.8 创建空文件或刷新文件时间

2.9 复制文件或目录

2.10 移动和重命名文件

2.11 删除文件

2.12 目录操作

3 文件元数据和节点表结构

3.1 inode表

3.2 硬链接

3.3 软链接

3.4 软硬连接的区别

3.5 故障案例分析


1 文件系统目录结构

1.1 目录结构

  • 文件系统从根目录下开始,用“/”表示
  • 标准Linux文件系统(如:ext4),文件名称大小写敏感,例如:MAIL, Mail, mail, mAiL
  • 以 . 开头的文件为隐藏文件
  • 路径分隔用 /
  • 每个文件都有两类相关数据:元数据:metadata,即属性, 数据:data,即文件内容

1.2 常见的文件系统目录功能

  • /boot:引导文件存放目录,内核文件、引导加载器都存放于此目录
  • /bin:所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序
  • /sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序
  • /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
  • /lib64:专用于x86_64系统上的辅助共享库文件存放位置
  • /etc:配置文件目录
  • /home/USERNAME:普通用户家目录 /root:管理员的家目录
  • /media:便携式移动设备挂载点
  • /mnt:临时文件系统挂载点
  • /dev:设备文件及特殊文件存储位置
  • /opt:第三方应用程序的安装位置
  • /srv:系统上运行的服务用到的数据
  • /tmp:临时文件存储位置
  • /proc: 用于输出内核与进程信息相关的虚拟文件系统
  • /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统

1.3 应用程序的组成部分

  • 二进制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin
  • 库文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
  • 配置文件:/etc, /etc/DIRECTORY, /usr/local/etc
  • 帮助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/do

1.4 Linux下的文件类型

  • - 普通文件
  • d 目录文件directory
  • b 块设备block
  • c 字符设备character
  • l 符号链接文件link
  • p 管道文件pipe
  • s 套接字文件socket

2 文件操作命令

2.1 显示当前的工作目录

pwd命令:

  • -P 显示真实物理路径
  • -L 显示链接路径(默认)

2.2 相对路径和绝对路径

绝对路径:

  • 以正斜杠/ 即根目录开始
  • 完整的文件的位置路径
  • 可用于任何想指定一个文件名的时候

相对路径:

  • 不以斜线开始
  • 一般情况下,是指相对于当前工作目录的路径
  • 特殊场景下,是相对于某目录的位置
  • 可以作为一个简短的形式指定一个文件名

相关命令:

  • 基名:basename,只取文件名而不要路径
  • 目录名:dirname,只取路径,不要文件名

2.3 更改目录

cd命令:

  • 切换至上级目录:cd ..
  • 切换至家目录:cd
  • 切换至上一个工作目录:cd -

相关环境变量:

  • PWD 当前目录路径
  • OLDPWD 上一次工作目录路径

2.4 列出目录内容

ls 命令可以列出当前目录或指定目录的内容

  • -a 包含隐藏文件
  • -l 显示详细的信息
  • -R 目录递归
  • -ld 目录和符号链接信息
  • -1 文件分行显示
  • -S 按从大到小排序
  • -t 按mtime排序
  • -u 配合-t选项,显示并按atime从新到旧排序
  • -U 按目录存放顺序显示
  • -X 按文件后缀排序

说明:

  • ls 查看不同后缀文件时的颜色由 /etc/DIR_COLORS 和@LS_COLORS变量定义

2.5 查看文件状态

每个文件有三个时间戳:

  • access time 访问时间,atime,读取文件内容
  • modify time 修改时间,mtime,改变文件内容(数据)
  • change time 改变时间,ctime,元数据发生改变

2.6 确定文件内容

文件可以包含多种类型的数据,使用file命令检查文件的类型,然后确定适当的打开命令或应用程序使用。

选项:

  • -b 列出文件辨识结果时,不显示文件名称
  • -f filelist 列出文件filelist中文件名的文件类型
  • -F 使用指定分隔符号替换输出文件名后默认的”:”分隔符
  • -L 查看对应软链接对应文件的文件类型
  • --help 显示命令在线帮助

相关命令:

  • hexdump:以多少进制方式显示文件内容,-C选项输出规范的十六进制和ASCII码。
  • dos2unix:将windows文本文件格式转换成Linux文本格式文件
  • iconv:转换文件的编码方式

范例1:Linux文本格式与windows文本格式的区别

范例2:转换文件字符集编码

iconv -f gb2312 win.txt  -o win1.txt

选项说明:

  • -f 指定字符的编码方式
  • -o 指定输出文件

范例3:将windows文本格式文件与Linux文本格式文件相互转换

2.7 文件通配符

文件通配符可以用来匹配符合条件的多个文件,方便批量管理文件

常见的通配符如下:

  • * 匹配零个或多个字符,但不匹配 "." 开头的文件,即隐藏文件
  • ? 匹配任何单个字符
  • ~ 当前用户家目录
  • ~mage 用户mage家目录
  • ~+和. 当前工作目录
  • ~- 前一个工作目录
  • [0-9] 匹配数字范围
  • [a-z] 字母
  • [A-Z] 字母
  • [wang] 匹配列表中的任何的一个字符
  • [^wang] 匹配列表中的所有字符以外的字符

此外还有在Linux系统中预定义的字符类:

  • [:digit:]:任意数字,相当于0-9
  • [:lower:]:任意小写字母,表示 a-z
  • [:upper:]: 任意大写字母,表示 A-Z
  • [:alpha:]: 任意大小写字母
  • [:alnum:]:任意数字或字母
  • [:blank:]:水平空白字符
  • [:space:]:水平或垂直空白字符
  • [:punct:]:标点符号
  • [:print:]:可打印字符
  • [:cntrl:]:控制(非打印)字符
  • [:graph:]:图形字符 [:xdigit:]:十六进制字符

范例:

  1. 显示/etc目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
  2. 显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录
  3. 显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
  4. 显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
  5. 显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
  6. 只显示/root下的隐藏文件和目录列表 7、只显示/etc下的非隐藏目录

2.8 创建空文件或刷新文件时间

touch命令可以用来创建空文件或刷新文件的时间

  • -a 仅改变 atime和ctime
  • -m 仅改变 mtime和ctime
  • -t [[CC]YY]MMDDhhmm[.ss] 指定atime和mtime的时间戳
  • -c 如果文件不存在,则不予创

2.9 复制文件或目录

利用 cp(copy)命令可以实现文件或目录的复制

格式:

  • cp [OPTION]... [-T] SOURCE DEST
  • cp [OPTION]... SOURCE... DIRECTORY
  • cp [OPTION]... -t DIRECTORY SOURCE...

常用选项:

  • -i 如果目标已存在,覆盖前提示是否覆盖
  • -n 不覆盖,注意两者顺序
  • -r, -R 递归复制目录及内部的所有内容
  • -a 归档,相当于-dR --preserv=all,常用于备份功能
  • -b 目标存在,覆盖前先备份,默认形式为 filename~ ,只保留最近的一个备份
  • --backup=numbered 目标存在,覆盖前先备份加数字后缀,形式为 filename.~#~ ,可以保留多个版本

范例1:每天将/etc/目录下所有文件,备份到/data独立的子目录下,并要求子目录格式为 backupYYYY mm-dd,备份过程可见。

cp -av /etc/ /data/backup`date +%F`

范例2:创建/data/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限

mkdir /data/rootdir

cp -a /root /data/rootdir

2.10 移动和重命名文件

mv 命令可以实现文件或目录的移动和改名

2.11 删除文件

使用 rm 命令可以删除文件

  • -i 交互式
  • -f 强制删除
  • -r 递归
  • --no-preserve-root 删除/,注意该选项极度危险

2.12 目录操作

显示目录树:tree

  • -d: 只显示目录
  • -L level:指定显示的层级数目
  • -P pattern: 只显示由指定wild-card pattern匹配到的路径

创建目录:mkdir

  • -p: 存在于不报错,且可自动创建所需的各目录
  • -v: 显示详细信息
  • -m MODE: 创建目录时直接指定权限

删除空目录:rmdir

  • -p 递归删除父空目录

  • -v 显示详细信息

3 文件元数据和节点表结构

3.1 inode表

每个文件的属性信息,比如:文件的大小,时间,类型等,称为文件的元数据(meta data)。这此元数 据是存放在node(index node)表中。

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表及inode number对应关系:

  • 文件引用的是一个 inode号
  • 人是通过文件名来引用一个文件
  • 一个目录是目录下的文件名和文件inode号之间的映射

3.2 硬链接

硬链接本质上就给一个文件起一个新的名称,实质是同一个文件

硬链接特性:

  • 创建硬链接会在对应的目录中增加额外的记录项以引用文件
  • 对应于同一文件系统上一个物理文件
  • 每个目录引用相同的inode号
  • 创建时链接数递增
  • 删除文件时:rm命令递减计数的链接,文件要存在,至少有一个链接数,当链接数为零时,该文件被删除
  • 不能跨越驱动器或分区
  • 不支持对目录创建硬链接 

创建硬链接:

  • ln filename [linkname]

3.3 软链接

一个符号链接指向另一个文件,就像 windows 中快捷方式,软链接文件和原文件本质上不是同一个文件。

软链接特性:

  • 一个符号链接的内容是它引用文件的名称
  • 可以对目录创建软链接
  • 可以跨分区的文件实现
  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode的引用计数
  • 软链接如果使用相对路径,是相对于原文件的路径,而非相对于当前目录

创建软链接:

  • ln -s filename [linkname]

说明:软链接以相对路径方式创建时,相对的是被链接的文件路径

范例:

3.4 软硬连接的区别

1. 本质:

  • 硬链接:本质是同一个文件
  • 软链接:本质不是同一个文件

2. 跨设备

  • 硬链接:不支持
  • 软链接:支持

3. inode

  • 硬链接:相同
  • 软链接:不同

4. 链接数

  • 硬链接:创建新的硬链接,链接数会增加,删除硬链接,链接数减少
  • 软链接:创建或删除,链接数不会变化

5. 文件夹

  • 硬链接:不支持
  • 软链接:支持

6. 相对路径

  • 硬链接:原始文件相对路径是相对于当前工作目录
  • 软链接:原始文件的相对路径是相对于链接文件的相对路径

7. 删除源文件

  • 硬链接:只是链接数减一,但链接文件的访问不受影响
  • 软链接:链接文件将无法访问

8. 文件类型

  • 硬链接:和源文件相同
  • 软链接:链接文件,和源文件无关

3.5 故障案例分析

案例1:创建文件提示空间满 No space left on device,但 df 可以看到空间很多,为什么?

  • 问题原因:每创建一个文件都会用掉该分区的一个inode编号,编号用完就会报该错误。
  • 解决办法:删除无用文件。

案例2:使用df发现空间快满,使用rm 删除了很大的无用文件后,但df仍然看到空间不足?

  • 问题原因:当有其它用户在对改文件进行操作(如vim)时,可能会导致该情况
  • 解决办法:使用lsof |grep delete找到删除该文件的进程,再使用kill -f 杀掉该进程
  • 未来正确删除方法:cat /dev/null > bigfile
  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值