Linux 文件管理

一、lrzsz

Linux和Windows互传文件工具。

1. 安装

yum install lrzsz
rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm

二、Linux一级目录

带*号为标准的目录结构。

boot*

存放静态文件和启动相关文件,包括内核。

内核文件:
ll -h /boot/vmlinuz-2.6.32-696.el6.x86_64
-rwxr-xr-x. 1 root root 4.1M Mar 22 2017 /boot/vmlinuz-2.6.32-696.el6.x86_64

dev*

存放设备相关文件。
字符设备,不是硬件的,是逻辑上的设备。按照顺序访问。没有缓存概念。如:/dev/zero、……;
块设备,随机访问(按照一定规则,快速定位文件所在位置)。有缓存概念。如:/dev/sda、/dev/sdb、……。

etc*

存放系统配置。

lib*

存放共享库。

media*

挂载点,用于挂载设备。

mnt*

挂载点,一般是管理员手工挂载。

opt*

存放第三方应用程序软件包。

sbin*

存放管理员运行的程序。

bin*

存放普通用户能运行的程序。
存放基本命令库,基本二进制程序。
在CentOS7中,bin不是文件,而是软链接。

srv*

存放服务相关的程序和数据。

tmp*

存放临时文件。

usr*

第二层目录结构,存放大部分应用程序。默认情况,所有一级目录中usr目录最大。

var*

存放可变数据,如:web页面、ftp数据、log日志、……

home

用户家目录,存放用户数据。

lost+found

与文件系统有关,只要是ext系列文件系统,所有目录下都会有该目录。存放因系统某些故障原因导致路径混乱的文件。

misc

杂项。

实战功能
(1) 实现光盘自动挂载

CentOS6执行命令cd /misc/cd,进入神奇的目录,即可使用光盘;
CentOS7需要先安装autofs程序。

proc

虚拟目录,映射成内存数据,该目录下的内容都存在内存。

sys

存放硬件相关信息。

实战功能
(1) 识别新增硬盘

执行命令echo '- - -' > /sys/class/scsi_host/host2/scan,触发磁盘扫描,在不重启系统的情况下识别硬盘。

net

与misc相关,和自动挂载相关。

selinux

与selinux安全策略相关。

三、文件系统

1. 识别大小写

在Linux中,对大小写敏不敏感由文件系统决定,如:标准Linux文件系统(ext*和xfs)对大小写敏感,而FAT等格式对大小写不敏感。

2. Linux支持类型

Linux默认支持ext系列、xfs和FAT系列文件系统,不支持NTFS文件系统。

四、文件名

1. 实战功能

(1) 创建和删除带-号文件

创建和删除时带上该文件的完整路径。

五、文件类型

1. 类型颜色

(1) 系统颜色配置文件

/etc/DIR_COLORS

六、复制

1. 场景

(1) 1个源文件,目标不存在

复制并改名。

(2) 1个源文件,目标存在且为文件

覆盖目标文件,默认管理员用户会提示是否覆盖,而普通用户直接覆盖。

(3) 1个源文件,目标存在且为目录

复制到目标目录下并保留原文件名。

(4) 多个文件,目标不存在

报错:提示目标非目录。

(5) 多个文件,目标存在且为文件

报错:提示目标非目录。

(6) 多个文件,目标存在且目录

复制到目标目录下并保留原文件名。

(7) 目录,目标不存在

复制并改名。

(8) 目录,目标存在且为文件

报错。

(9) 目录,目标存在且为目录

复制到目标目录下并保留原目录名。

(10) 目录,目标同名存在且为目录

提示是否覆盖目标目录及内部的所有同名文件。

2. 实战功能

(1) 复制字符文件或块文件等特殊文件

cp -a

不能直接使用cp复制,需要使用cp -a保留文件属性信息,否则会进入特殊文件中逐个字节的数据复制,而不是复制文件名称。

(2) 批量复制并修改文件名

rename

cp无法实现批量复制并修改文件名,需要使用rename命令批量修改文件名。

(3) 备份文件

cp Source_File{,.bak}

配合文件通配符可以实现文件备份

七、删除

1. 实战功能

(1) 删除为挂载点的目录

如果目标目录为挂载点,则rm -rf只能删除该目录下所有文件及子目录,而作为挂载点的目录无法被删除。

(2) 删除根目录下所有数据

方法1:
rm -rf / --no-preserve-root

从CentOS6开始,rm -rf /已经不允许执行,需要带上--no-preserve-root参数;
删除时/proc/目录下的文件会提示无法被删除,因为/proc/不是硬盘数据,是存储在内存,所以无法被删除。

方法2:
rm -rf /*

执行该操作没有任何提示信息,也不需要追加任何参数,直接删除根目录下所有数据。

建议:
alias 'rm=mv -t /recycle/'

rm命令定义成mv -t,删除时只是把文件移动到指定的临时目录下,以便将来删除错误还能还原恢复。

(3) 删除文件后无法释放空间或删除大文件

因为该文件在删除时正在被占用或访问,删除时不会立即释放空间。

方法1:
lsof | grep deleted
killall

执行lsof | grep deleted命令查看当前系统中被删除但还未释放空间的文件,然后使用killall杀掉正在占用或访问文件的进程。

方法2:
> Source_File
rm

直接使用>覆盖目标文件的内容,然后执行rm删除。
建议使用这种方法处理大文件。

八、移动

1. 同一分区下移动

在同一分区移动,数据在磁盘中是不动的,只是把目录结构调整,所以速度快。

2. 不同分区下移动

不同分区移动,就需要把数据慢慢移动到另一个分区上,所以速度慢;
移动相当于先复制再删除,如果移动过程中死机,会发现两边都存在数据。

九、tree

显示目录树

1. 安装

yum install tree
rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm

十、meta data

元数据,即文件属性。

1. 节点表

存放文件元数据的空间。

内容:文件类型、权限、UID、GID、链接数、文件大小、时间戳、指向磁盘上文件的数据块指针、inode(节点编号)、有关文件的其他数据……

2. 节点编号

用于标识文件的唯一性。

范围:
在分区中唯一,每个分区有自己的节点编号范围。当在分区中创建新文件时,系统会自动分配在该分区中唯一的节点编号。

数量:
不同分区最多存放的节点编号总数都不同,每创建1个文件就要消耗1个节点编号。

(1) 实战功能

创建文件时提示空间满,但查看磁盘分区实际仍有空闲空间
df -i

原因是该磁盘分区下的创建过多小文件把所有节点编号耗尽,而不是空间满。使用df -i命令查看磁盘分区的节点编号使用情况。

3. 指针地址

指向数据所在位置;
指针指向的磁盘数据块大小固定4KB,单位为block(在Linux中是分配文件的最小单位)。

(1) 直接指针

能够直接指向存储的数据区域,共有12个直接指针,也就是能通过直接指针直接找到的最大文件为48KB。

(2) 间接指针

不指向数据块,而是指向指针块。指针块里分成很多小指针块,小指针块再指向真正存放数据的数据块或其他指针块。
小指针块大小固定4Byte,1个指针块由1024个小指针块组成,所以一级间接指针最多可以存储4MB数据;而二级间接可以存储4GB数据;三级间接指针可以存储4TB数据。

4. 目录

文件引用一个是 inode号;
人是通过文件名来引用一个文件;
一个目录是目录下的文件名和文件inode号之间的映射;
目录的元数据里只存储了关于该目录的元数据信息,元数据的数据信息(即目录的数据内容)存储了该目录下每个文件及节点编号的对应关系。

(1) 访问目录下文件的流程

要访问目录下的文件,需要先找到目录的节点表,然后通过指针找到数据内容(目录下的文件的节点编号),再通过文件的节点编号找到文件的节点表,最后再通过节点表找到文件的真正数据内容。
如果要访问目录下的文件,前提就是必须要有权限访问该目录,因为那些文件存放再目录下的,如果访问不了目录下的内容,就不能拿到文件的节点编号,也就进不了文件的节点表,进而看不到文件数据内容。

(2) 删除文件的流程

实际是系统把文件的节点表删除,但文件数据仍在磁盘上,没有立即删除,只是在数据空间上加上标记(该空间已空闲,可以写入内容),但当另一个文件使用数据块时将被覆盖。

实战功能
恢复被删除的文件数据

为被删除的文件分配新的节点编号,再指向原来的数据空间。

十一、硬链接与软链接

1. 硬链接

(1) 定义

1个文件,有1个节点编号,对应多个文件名。

(2) 创建

不能跨分区创建,必须在同一设备或分区下创建;
不支持对目录创建;
一般针对不同目录创建。

(3) 链接数

文件

每创建一次硬链接后,链接数会递增+1;
文件要存在,至少有一个链接数;
当链接数为0,该文件将被删除。

目录

目录默认至少有2个链接数,第一个链接数是目录本身,第二个链接数是目录下的.(即当前目录);
如果在目录下每创建一个子目录后,链接数会递增+1,该链接数是子目录下的..(即父目录)。

2. 软链接

(1) 定义

通过指针把符号链接指向另一个文件;
软链接跟原始文件不是同一个文件。

(2) 创建

支持跨设备、分区创建;
支持对目录创建;
软链接的大小跟的原始文件大小没有任何关系,大小是指向路径字符串的长度(字节);
软链接不仅可以针对文件、目录创建,还可以针对软链接创建,如果原始文件丢失,则相关的软链接全部失效;
指定原始文件时,要么使用绝对路径,要么使用相对于软链接的路径,不能相对原始文件当前工作目录;
建议使用相对路径创建。

(3) 实战功能

软件、版本快速安全切换

不论软件什么版本,都创建同一名称的软链接,将来更新版本时,只需要把软链接指向新版本路径即可,不需要更改文件配置。
软链接不能直接修改指向,需要先删除,再重新创建。

基于兼容性的目的

有些软件由于版本更迭,数据迁移到新的目录,为了照顾旧软件,创建软链接指向新路径,旧软件通过软链接路径还能找到新版本软件。

定义短路径

把一些比较深的路径定义成较短路径,类似别名的效果。

3. 总结

(1) 硬链接和软链接区别

本质

硬链接:一个文件对应多个名称,是同一文件;
软链接:一个文件对应快捷方式,是不同文件。

链接数

硬链接:增长链接数;
软链接:不增长链接数。

跨分区

硬链接:不支持跨分区;
软链接:支持跨分区。

目录

硬链接:不支持对目录创建;
软链接:支持对目录创建。

原始文件和链接文件关系

硬链接:原始文件和链接文件属性一样,是平等关系;
软链接:软链接依赖于原始文件。

删除

硬链接:删除原始文件,链接文件不受任何影响;
软链接:删除原始文件,链接文件失效。

大小

硬链接:与原始文件一致;
软链接:由原始文件的路径所决定。

十二、文件内容

1. 文件后缀

在Linux中,文件后缀对系统没什么影响,只是对操作者有影响。

2. 文件类型

(1) 分析流程

判断文件头部信息,不同类型的文件,区别主要在于头部。头部会有描述,体现文件的区别,即magic number。

3. 运行程序格式

(1) Windows

EXE、.dll、.lib、……

(2) Linux

ELF、.so、.a、……

4. 实战功能

(1) 通过十六进制数工具查看文件头部信息

hexdump -n 100 -c

因为不同类型的文件,区别主要在于头部。

你可能感兴趣的:(Linux 文件管理)