EdwardWong
2022/09/25阅读:44主题:姹紫
Linux文件和目录管理
Linux中的文件和目录管理
文件系统的层次结构
在linux
操作系统中,所有文件和目录都被阻止成以一个根节点/
开始的倒置的树状结构。

为了方便管理和维护,linux
系统采用了文件系统层次标准,也成为FHS(Filesystem Hierarchy Standard)
标准,它规定了根目录下各个目录应该存放哪些类型的文件(或子目录)。
Linux
一级目录
Linux
/usr
目录

Linux
/var
目录
/var
目录用于存储动态数据,例如缓存、日志文件、软件运行过程中产生的文件等,此目录下通常包含以下这些子目录:

硬件设备 /dev
目录
在linux
系统中,硬件设备是文件,也有各自的文件名称,linux
系统内核中的udev
设备管理器会自动对硬件设备的名称进行规范,目的是让用户通过设备文件的名称,就可以大致猜测出设备的属性及相关信息。
udev
设备管理器会一直以进程的形式运行,并侦听系统内核发出的信号来管理位于/dev
目录下的设备文件。

SATA
接口时目前性价比较高和较为常见的HDD/SSD
硬盘接口,支持热插拔的优点。SAS
可向下兼容SATA
,SAS
硬盘的数据传输速度高于SATA
硬盘,与SATA
硬盘相比,SAS
硬盘价格比较高。

识别文件类型
每种不同的文件类型都赋予不同的颜色
在/etc/DIR_COLORS
配置文件中赋予给不同文件类型赋予不同颜色。具体的可以查看man dir_colors
.
对于有些linux发行版而言,其ls
命令无法显示出带有不同颜色的文件和目录,此时需要使用ls --color=auto
命令。明确令其使用颜色来区分文件类型。

查看目录下的文件

当使用ls -l
时列出文件具体信息时,各列表达的含义如下:


如果只想知道某个目录的详细信息,不要列出该目录下的所有文件,需要使用
-d
选项,例如ls -ld /root/
.
如果需要列出某个目录下所有的文件,其中这个目录下还有子目录,也需要列出子目录中的文件,此时需要使用
-R
选项。
ll --time=atime/mtime/ctime 文件名
查看文件的访问数据时间/修改数据时间/状态修改时间。
ll -i /root/test /tmp/test-hand
--> 会指出文件的inode号
创建目录(文件夹)
mkdir -m
--用于手动配置创建目录的权限,而不再使用默认权限(默认权限是755),
mkdir -m 711 test2
通过设定711 权限来给与新目录drwx--x--x
权限
默认权限是
drwxr-xr-x
mkdir -p
递归创建所有目录。
删除空目录
rmdir -p 目录名
-- 递归的删除空目录
只能删除空目录,如果目录中有内容,则会报错。
创建文件及修改文件的时间戳
使用touch
命令不仅可以用来创建文件,也可以在指定文件存在的时候修改文件的时间参数。
touch [选项] 文件名
-
a: 只修改文件的访问时间
-
c: 仅修改文件的时间参数(3个时间参数都改变),如果文件不存在,则不建立新文件
-
d: 后面可以跟欲修改的日期,而不用当前的日期,即把文件的
atime
和mtime
改为指定的时间
touch -d "2017-05-04 15:44" bols
-
m: 只修改文件的数据修改时间
-
t: 命令后跟欲修改的时间,而不是目前的时间,时间书写格式为
YYMMDDhhmm
touch
命令可以只修改文件的访问时间,也可以修改文件的数据修改时间,但是不能只修改文件的状态修改时间。 无论是修改访问时间还是数据修改时间,对文件而言,状态修改时间都会随之发生变化。
文件的时间参数
linux系统中,文件的时间参数主要有三个,可以通过stat
命令进行查看,分别是文件的访问时间、数据修改时间和状态修改时间。
-
访问时间(access time/atime):只要文件的内容被读取,访问时间就会更新。例如使用
cat
命令查看文件内容时,此时文件的访问时间就会发生变化 -
数据修改时间(modify time/mtime):当文件的内容数据发生变化时,文件的修改时间就会相应的变化
-
状态修改时间(Change time/ctime):当文件的状态发生变化,就会相应的改变这个时间。 比如文件的权限及属性发生变化,此时间就会相应改变(状态修改时间不可以指定,更新为操作当前文件的真正时间)。
建立链接文件
Linux
中的ext
文件系统

ext
文件系统会把分区主要分为两大部分:一小部分用于保存文件的inode
信息,剩余的部分用于保存block
信息。
inode
的默认大小是128Byte,其主要用途如下:
-
用于记录文件的权限(r/w/x)
-
文件的所有者和属组、文件大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的
block
编号。每个文件需要占用一个inode
,inode中是不记录文件名的,文件名记录在文件所在目录的block中。
block
的大小可以是1KB
、2KB
、4KB
,默认是4KB
。 block
用于实际的数据存储,如果一个block
放不下数据,则可以占用多个blcok
。例如有一个10kB的文件需要存储,则会占用3个block
,虽然最后一个block
不能占满,但也不能在放入其他文件的数据,这3个block
可以是连续的,也可以是分散的。
每个文件都占有一个
inode
,文件内容由inode
的记录来指向。如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的inode
,才能成功找到文件内容所在的block
块。也就是说目录的block
中记录的是这个目录下所有一级子文件的文件名及对应的inode
号,而文件的block
中记录的是文件实际的数据。
软链接和硬链接
-
软链接: 类似于windows的文件快捷方式,这个快捷方式指向另一个文件。
-
硬链接: 文件的基本信息都存储在
inode
中,硬链接就是给一个文件的inode
分配多个文件名,通过任何一个文件名,都可以找到此文件的inode
,从而读取该文件的数据信息。
对硬链接的深度剖析


根目录的
inode
是系统已知的,inode
号是2.

硬链接的特点如下:

硬链接的限制很多,既不能跨文件系统,也不能链接目录,而且源文件和硬链接文件之间除
inode
号是一样的外,没有其他明显的特征。 所以硬链接并不常用
对软链接的深度剖析
对于软链接,源文件必须写成绝对路径,否则建立的软链接文件就会报错。 软链接不像硬链接那样限制很多,可以链接目录,当然也可以跨分区链接。
软链接的最大用途就是照顾管理员的习惯, 比如有些系统的自启动文件/etc/rc.d/rc.local
放置在/etc
目录中,而有些系统却将其放置在/etc/rc.d/rc.local
中,那么可以将两个文件建立软链接。
对下面建立的软链接建立的过程如下:



软链接的特点:

软硬链接的区别
硬链接不会建立自己的inode
索引和block
,而是直接指向源文件的inode
信息和block
,所以硬链接和源文件的inode
号是一致的;而软链接会真正建立自己的inode
索引和block
,所以软链接和源文件的inode
号是不一致的,而且在软链接的block中,写的不是真正的数据,而仅仅是源文件的文件名及inode
号。
ln
命令的基本格式
ln [选项] 源文件 目标文件
-
-s:建立软链接文件,如果不加“-s”选项,则建立硬链接文件
-
-f 强制,如果目标文件已经存在,则删除目标文件后在建立链接文件
软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求)
例如ln -s /root/bols /tmp
/tmp
后没有指明文件名会默认和源文件的文件名一样。
复制文件和目录
cp
命令的基本格式如下:
cp [选项] 源文件 目标文件

cp
命令可以复制多个源文件,在这种情况下,目标文件必须是目录才可以。
# 建立软链接
ln -s /root/cangls /tmp/cangls_slink
# 复制软链接文件,但是不接`-d`选项
cp /tmp/cangls_slink /tmp/cangls_t1
# 复制的结果
-rw-r--r-- 1 root root 0 6月 14 05:56 /tmp/cangls_t1
# 复制软链接文件,但是接`-d`选项
cp -d /tmp/cangls_slink /tmp/cangls_t2
# 复制的结果
lrwxrwxrwx 1 root root 12 6 月 14 05:56/tmp/ cangls_t2-> /root/cangls
由上面可以看出,在复制软链接文件的时候不加-d
选项,cp
命令复制的是源文件,而不是软链接文件,只有加入了-d
选项,才会复制软链接文件,且**-d选项对硬链接是无效的**
使用cp
命令复制文件的时候,文件的属性,时间可能会发生改变,-p
选项可以替我们保留文件的属性,包括所有者、所属组和时间,这对执行备份和日志备份的时候非常重要。
-l
选项可以直接为文件建立硬链接, -s
选项可以直接为文件建立软链接。
删除文件或目录rm

一般使用rm -rf
来删除文件和目录。
移动文件或改名mv
mv
命令可以实现在不同目录之间移动文件或目录,也可以对文件和目录重命名
mv [选项] 源文件 目标文件

如果目标目录中有已经存在的同名文件,则会提示是否覆盖,默认执行的是mv -i
命令,如果移动的同名文件很多,会很不方便,此时可以使用-f
选项进行强制移动,使用-n
选项不强制覆盖。如果想要显示移动过程,可以使用-v
选项。
使用mv
命令改名需要源文件和目标文件在同一目录。
通配符在文件操作中的应用

[]
可以通过-
(短横线)表示一定范围内的任意字符(数字)。
ls [a-g]*
--> 匹配以字母a
到g
之间任意字母开头的文件名。
Linux命令的执行过程
-
判断路径
-
检查别名
-
判断是内部命令还是外部命令
可以通过type + 命令
来查看
-
查找外部命令对应的可执行文件
当用户执行的是外部命令时,系统会在指定的多个路径中查找该命令的可执行文件,也就是系统的PATH
环境变量。
环境变量
可以使用env
命令查看linux系统中所有的环境变量,使用echo $环境变量
查看变量值。常见的环境变量如下:

Linux
是一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境。因此一个相同的环境变量会因为用户身份的不同而具有不同的值
可以自定义环境变量,例如WORKDIR=/home/work1
,这样的环境变量不具备全局性,作用范围也有限,默认范围不能被其他用户使用。 可以使用export
命令将其提升为全局环境变量。
作者介绍