E

EdwardWong

V1

2022/09/25阅读:28主题:姹紫

Linux文件和目录管理

Linux中的文件和目录管理

文件系统的层次结构

linux操作系统中,所有文件和目录都被阻止成以一个根节点/开始的倒置的树状结构。

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

Linux 一级目录

Linux /usr目录

Linux /var目录

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

硬件设备 /dev目录

linux系统中,硬件设备是文件,也有各自的文件名称,linux系统内核中的udev设备管理器会自动对硬件设备的名称进行规范,目的是让用户通过设备文件的名称,就可以大致猜测出设备的属性及相关信息。

udev设备管理器会一直以进程的形式运行,并侦听系统内核发出的信号来管理位于/dev目录下的设备文件。

SATA接口时目前性价比较高和较为常见的HDD/SSD硬盘接口,支持热插拔的优点。 SAS可向下兼容SATASAS硬盘的数据传输速度高于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: 后面可以跟欲修改的日期,而不用当前的日期,即把文件的atimemtime改为指定的时间

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编号。每个文件需要占用一个inodeinode中是不记录文件名的,文件名记录在文件所在目录的block中。

block的大小可以是1KB2KB4KB,默认是4KBblock用于实际的数据存储,如果一个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]* --> 匹配以字母ag之间任意字母开头的文件名。

Linux命令的执行过程

  1. 判断路径

  2. 检查别名

  3. 判断是内部命令还是外部命令

可以通过type + 命令来查看

  1. 查找外部命令对应的可执行文件

当用户执行的是外部命令时,系统会在指定的多个路径中查找该命令的可执行文件,也就是系统的PATH环境变量。

环境变量

可以使用env命令查看linux系统中所有的环境变量,使用echo $环境变量查看变量值。常见的环境变量如下:

Linux是一个多用户多任务的操作系统,能够为每个用户提供独立的、合适的工作运行环境。因此一个相同的环境变量会因为用户身份的不同而具有不同的值

可以自定义环境变量,例如WORKDIR=/home/work1,这样的环境变量不具备全局性,作用范围也有限,默认范围不能被其他用户使用。 可以使用export命令将其提升为全局环境变量。

分类:

后端

标签:

运维部署

作者介绍

E
EdwardWong
V1