网络安全:系统文件属性

[#####成功在于你坚持了别人坚持不了的东西####]

1.1 系统文件属性概述

1.1.1 文件属性概述介绍

在Linux系统中,每个数据文件都会有详细的属性信息,文件的属性信息描述文件数据的存在于系统中的具体情况。

其中主要包含:数据存储情况,文件类型分类,文件权限配置,文件所属用户,文件时间信息等等。

文件详细的属性信息,可以帮助运维人员更清晰的操控数据,并且在系统或服务出现问题时,可以更精准的解决处理问题。— 关注属性信息

文件的属性信息获取方法如下:

[root@xiaoq ~]# ls -lid /etc
67108929 drwxr-xr-x. 80 root root 8192 1220 21:20 /etc
[root@xiaoq ~]# ll -i /etc/hosts
67122845 -rw-r--r--.    1 root root 180 1215 23:11 /etc/hosts

1.1.2 文件属性组成介绍

根据以上命令信息获取的文件属性信息,具体组成说明:
在这里插入图片描述

在这里插入图片描述

组成部分简述说明:

文件属性索引节点-inode(index node)(唯一的)

主要用于定位文件数据存储到磁盘的什么位置,有点类似于人的身份证号码;

系统读取文件时首先通过文件名找到inode号码,然后才能读取到文件内容。

文件属性类型权限

文件类型:定义所操作的文件是属于什么类型的文件(普通文件 目录文件 数据文件 设备文件等等)

文件权限:定义可以对文件进行哪些操作处理(读 写 执行)

文件属性链接概念-硬链接(Linux系统特有的链接概念)

硬链接:类似于定义获取数据文件内容的入口(类似商场购物,会有多个们进出一样)

正常文件数据是存储在硬盘中的,可以拥有多少个相应入口调取硬盘中的数据。

文件属性用户信息:

用户信息:可以有效管理数据的用户/可以是数据的创造者

用户组信息:当某个数据需要被多个用户管理时,可以创建一个用户组,将数据管理者划分到组中。

在Linux系统里,文件或程序,以及进程的存在必须要有用户或用户组进行管理,才有意义。

文件属性存储信息-block

存储信息:表示数据信息所占用磁盘空间的大小,具体存储单位有Byte kB MB GB等。

1GB=1024MB=1024*1024KB=1024*1024*1024B

文件属性时间信息-修改时间

时间信息:定义文件数据最后被用户配置修改的时间。

说明:文件名称信息不属于文件属性的组成部分。

1.2 系统文件属性详述

1.2.1 文件类型知识介绍

文件类型概念说明(扩展名) 文件类型 不等于 文件扩展名-- Linux系统环境
windows系统是通过扩展名来区分不同文件类型,如果扩展名错误,或者没有扩展名,则会导致文件无法识别。

Linux系统不同于windows系统,Linux系统不会根据扩展名来区分文件类型,而是通过为文件设定属性的方式区分文件类型。但是Linux系统中也会包含各种带有扩展名的文件,但这些文件的扩展名并不代表文件类型,扩展名只是为了让用户更容易区分文件类型,更易读而已,并且即使出现扩展名错误,文件也是可以正常使用的。

Linux系统下常见的文件扩展名及意义:

序号	常见文件扩展名	代表的意义
01	.rpm	CentOS/Redhat版本系统二进制软件程序包文件
02	.tar.gz/.zip	压缩包文件(.tgz .tar .gz等也是压缩包文件)
03	.sh/.py/.php/.html/.js	shell脚本文件,通过shell脚本语言开发的程序
04	.conf	表示系统服务的配置文件
05	.log	系统或服务程序的日志文件

文件类型分类说明
在Linux系统中,可以说一切皆文件(包括目录 普通文件 设备文件);

在Linux系统文件属性中,可以利用特定的符号表示不同类型的文件。

序号 文件类型符号 代表的意义

01	- ※	英文名称为regular file,表示普通文件,包含纯文本 二进制文件 数据文件等
02	d ※	英文全程为directory,代表目录
03	l ※	英文全程link,代表符号链接或软链接文件,类似于windows系统快捷方式。
04	c	英文全程character,代表字符设备文件,例如:串口设备,早期上网拨号用的猫
05	b ※	英文全程block,代表块设备文件,例如:硬盘 光驱
06	s	英文全程socket,代表套接字文件,进程之间进行通信是会用到
07	p	英文全程named pipe,表示管道文件,主要作用是控制服务进程读取或加载文件

想要查看文件类型,可以执行ls -l或ls -al命令:

[root@xiaoq ~]# ls -l
总用量 24
-rw-r--r--.   1 root root 41 123 00:38 grep_test.txt
-rw-r--r--.   1 root root 36 129 00:21 shell-01.sh
drwxr-xr-x. 2 root root  6 1221 01:16 xiaoQ_dir

输出信息中的第一列(-rw-r–r–)对应的第一个字符就是描述文件类型的,比如上面结果中就有 - d等类型符号。

文件类型查看命令扩展:

file:显示文件具体类型信息:

语法格式:

file [option] [file]
file  参数        文件或目录
使用说明:

[root@xiaoq ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@xiaoq ~]# file /etc
/etc: directory

文件类型详细说明
普通文件(regular file):

[root@xiaoq ~]# ll /etc/hosts
-rw-r–r–. 1 root root 180 12月 15 23:11 /etc/hosts
普通文件的第一个特征就是其属性开头为 “-”,按照文件内容,又可以细分为三种

纯文本文件(ASCII):
此类文件的文件内容可以直接读取到数据,例如:字母、数字、特殊符号等。

可以用cat命令读文件,比如Linux系统里的配置文件几乎都是这种类型。

# 纯文本文件-可以进行编辑的文件
[root@xiaoq ~]# ll /etc/hosts
-rw-r--r--. 1 root root 180 1215 23:11 /etc/hosts
[root@xiaoq ~]# file /etc/hosts
/etc/hosts: ASCII text

二进制文件(binary):可执行文件
Linux中的常见命令就属于这种文件类型。

例如:cat命令就是一个二进制文件,部分脚本代码文件也属于可执行文件。

# 二进制文件-可以进行执行的文件
[root@xiaoq ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 54080 820 2019 /bin/cat
[root@xiaoq ~]# file /bin/cat
/bin/cat: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b97cc8358edb123e8a9e21390f30924fe66a5e55, stripped
[root@xiaoq ~]# file /etc/init.d/network 
/etc/init.d/network: Bourne-Again shell script, ASCII text executable

数据格式文件(data)
有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件即称为数据文件。

例如:Linux在用户登录时都会将登录的数据记录在/var/log/wtmp文件内,该文件时一个数据文件;某些系统中被压缩处理的文件,也可以称为数据文件。

# 数据性文件-一般为压缩包文件
[root@xiaoq ~]# ll /var/log/wtmp
-rw-rw-r--. 1 root utmp 6528 1221 12:36 /var/log/wtmp
[root@xiaoq ~]# file /var/log/wtmp
/var/log/wtmp: data
​
[root@xiaoq ~]# ll /usr/share/man/man1/cp.1.gz 
-rw-r--r--. 1 root root 2363 820 2019 /usr/share/man/man1/cp.1.gz
[root@xiaoq ~]# file /usr/share/man/man1/cp.1.gz 
/usr/share/man/man1/cp.1.gz: gzip compressed data, from Unix, max compression

说明:利用file命令可以获取详细的文件类型信息。

目录文件(directory):

[root@xiaoq ~]# mkdir /data 
[root@xiaoq ~]# ll -d /data /etc
drwxr-xr-x.   2  root root       6 1221 12:45 /data
drwxr-xr-x. 80  root root 8192 1221 12:26 /etc
[root@xiaoq ~]# file /data /etc
/data: directory
/etc:  directory

从输出信息可以看出,第一列的内容开头带有d字符的文件就表示目录,可以认为目录在Linux中是一种特殊的文件。

创建目录命令:mkdir 或 cp (-a -r)

删除目录命令:rm -r或rmdir(删除空目录)

利用ls -F命令的执行结果,可以在不同文件的结尾加上特殊标识,用以区分文件。

[root@xiaoq ~]# ls -F /
bin@   data/  etc/   lib@    media/  opt/   root/  sbin@  sys/  usr/  xiaoQ/
boot/  dev/   home/  lib64@  mnt/    proc/  run/   srv/   tmp/  var/

说明:/标识为目录 @标识为链接文件,此内容了解即可

符号链接(symbolic link)文件:

符号链接文件也称为软链接文件,它类似于windows下的快捷方式,它本身并没有内容,而是指向了其他实体文件。

使用软链接文件,主要作用是为了使管理人员可以更快速的定位指定的文件。
在这里插入图片描述

软链接文件可以通过ln命令进行创建,使用方法:

ln -s 源文件名 链接文件名
如果不使用-s参数,则表示创建硬链接文件,有关链接文件知识后面知识点详细说明。

[root@xiaoq ~]# cat xiaoQ.txt 
I am xiaoQ teacher
[root@xiaoq ~]# ln -s xiaoQ.txt xiaoQ_soft.txt
[root@xiaoq ~]# ls -l xiaoQ.txt xiaoQ_soft.txt 
lrwxrwxrwx. 1 root root  9 1221 16:19 xiaoQ_soft.txt -> xiaoQ.txt
-rw-r--r--. 1 root root 19 1221 16:18 xiaoQ.txt
[root@xiaoq ~]# cat xiaoQ_soft.txt 
I am xiaoQ teacher
[root@xiaoq ~]# file xiaoQ_soft.txt 
xiaoQ_soft.txt: symbolic link to `xiaoQ.txt'

字符(character)/块(block)设备文件:

在查看/dev目录特定文件的属性信息时,会看到如下内容:

[root@xiaoq ~]# ls -l /dev/tty /dev/sda1
brw-rw----. 1 root disk 8, 1 1214 18:38 /dev/sda1
crw-rw-rw-. 1 root tty  5, 0 1215 23:17 /dev/tty
[root@xiaoq ~]# file /dev/tty /dev/sda1
/dev/tty:  character special
/dev/sda1: block special

/dev/tty文件的属性信息中,第一个字符是c,表示为字符设备文件:

对于字符设备,一般典型的文件就是串行端口的接口设备,如猫等串口设备。

/dev/sda文件的属性信息中,第一个字符是b,表示为块设备文件:

块设备就是存储数据供系统及程序访问的接口设备,如硬盘、光驱等都均属于块设备

套接字(socket)文件

当启动数据库软件MySQL服务时,会产生一个mysql.sock文件,这个文件的属性里,第一个字符是s,

表示此文件为套接字文件:

[root@web03 ~]# ll /var/lib/mysql/mysql.sock 
srwxrwxrwx 1 mysql mysql 0 1221 16:32 /var/lib/mysql/mysql.sock
[root@web03 ~]# file /var/lib/mysql/mysql.sock 
/var/lib/mysql/mysql.sock: socket

.sock文件是一类特殊的文件,这类文件通常在网络之间进行数据连接。

在启动一个网络服务程序后,会监听客户端的请求,客户端可以通过套接字文件来进行数据通信。

mysql -uroot -ppass -S /data/3306/mysql.sock

以上便是mysql数据库客户端程序连接服务器端的命令,并通过套接字文件与数据库服务器进行通信。

管道(pipe)文件:

管道文件(FIFO first-in first-out)也是一种特殊的文件类型,主要用于解决多个程序同时访问一个文件所造的冲突问题;文件属性标识符为p。

文件相关命令扩展:

命令信息:which
功能说明:

此命令用于显示命令的全路径,可以用于确认指定命令存储在什么路径下,which命令查找的范围是PATH环境变量的路径。

语法格式:

which [option] [programname]
which    选项            命令名

实践操作:

实践情况:获取指定命令的所在目录的全路径信息

[root@xiaoq ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@xiaoq ~]# which date
/usr/bin/date
[root@xiaoq ~]# which cat
/usr/bin/cat
[root@xiaoq ~]# which cd
/usr/bin/cd

命令信息:whereis
功能说明:

此命令用于定位指定命令的可执行文件、源码文件及man帮助文件的路径。

语法格式:

whereis [option] [filename]
whereis   选项         文件名

参数选项:

序号 参数选项 解释说明

01	-b	查找可执行文件
02	-m	查找man帮助文件
03	-s	查找源代码文件

实践操作:

实践情况:通过whereis命令将相关的文件都查找出来

[root@xiaoq ~]# whereis ntpdate
ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz
​
# 只查找可执行文件
[root@xiaoq ~]# whereis -b ntpdate
ntpdate: /usr/sbin/ntpdate
# 只查找man帮助文件
[root@xiaoq ~]# whereis -m ntpdate
ntpdate: /usr/share/man/man8/ntpdate.8.gz
# 只查找源代码文件
[root@xiaoq ~]# whereis -s ntpdate
ntpdate:

命令信息:locate
功能说明:

在linux系统里有一个名为mlocate.db的数据库文件,这个文件包含系统文件的文件名及对应的路径信息。

locate命令查找文件时不用遍历磁盘,而是直接查找mlocate.db文件,这样可以快速给出结果。

如果是新添加的文件,那么mlocate.db文件就会没有记录,需要使用updatedb命令更新一下mlocate.db数据库

默认该命令在CentOS 7中默认未安装,如果需要使用此命令,则需要提前安装和配置:

[root@xiaoq ~]# yum install -y mlocate
[root@xiaoq ~]# updatedb

语法格式:

locate [option] [pattern]
locate    选项       文件名

参数选项:

序号 参数选项 解释说明

01	-c	不显示匹配的内容,只显示匹配到的行数
02	-i	匹配时忽略大小写
03	-r	支持基本正则表达式匹配
04	--regex	支持扩展正则表达式匹配

实践操作:

实践情况:查找文件路径

[root@xiaoq ~]# locate  xiaoQ
/xiaoQ
/etc/xiaoQ.txt
/home/xiaoQ
/home/xiaoQ/.bash_history
/home/xiaoQ/.bash_logout
/home/xiaoQ/.bash_profile
/home/xiaoQ/.bashrc
/home/xiaoQ/.viminfo
/home/xiaoQ/xiaoQ_dir

说明

:虽然locate命令可以用于检索数据信息,但是对于检索的数据不够精准

命令信息:find (非常重要一个命令)4剑客命令之一
功能说明:

此命令用于查找目录下的文件,同时还可以调用其他命令执行相应的操作

语法格式:

find  [pathname] [option] [expression]
find     查找路径        选项       操作语句

在这里插入图片描述

参数选项:

序号 参数选项 解释说明

01	pathname	命令所查找的目录路径,如用 "." 表示当前目录,用 / 来表示系统根目录
Options	参数信息
01	-depth	从指定目录下最深层的子目录开始查找
02	-maxdepth levels	查找的最大目录级数,levels为自然数
03	-mindepth levels	查找的最小目录级数,levels为自然数
Tests	限定的条件
01	-mtime [-n|n|+n]	按照文件的修改时间来查找文件(这个参数常用)
·-n 表示文件更改时间距现在n天以内
·+n 表示文件更改时间距现在n天以前
·n 表示距现在第n天
02	-atime [-n|n|+n]	按照文件的访问时间来查找文件,单位是天
03	-ctime [-n|n|+n]	按照文件的状态改变时间来查找文件,单位是天
04	-amin	按照文件的访问时间来查找文件,单位是分钟
05	-cmin	按照文件的状态改变时间来查找文件,单位是分钟
06	-mmin	按照文件的修改时间来查找文件,单位是分钟
07	-group	按照文件所属的组查找文件
08	-name	按照文件名查找文件,只支持“*”“?”“[]”等特殊通配符
09	-newer	查找更改时间比指定文件新的文件
10	-path pattern	指定路径样式,配合-prune参数排除指定目录
11	-perm	按照文件权限来查找文件
12	-size n[cwbkMG]	查找文件长度为n大小的文件,带有cwbkMG时表示长度以字节计
13	-type	查找某一类型的文件,具体说明如下

b 块设备文件
c 字符设备文件
d 目录文件 *
p 管道文件
l 符号链接文件
f 普通文件 *
s socket文件

 	Actions	执行动作方式
01	-delete	将查找出的文件删除(慎用)
02	-exec	对匹配的文件执行该参数所给出的执行命令
03	-ok	与-exec的作用相同,但在执行每个命令之前,都会让用户来确定是否执行
04	-prune	使用这一选项可以使find命令不在特殊指定的目录中查找
05	-print	将匹配的文件输出到标准输出(默认功能,使用中可省略)
 	OPERATORS	可以支持逻辑运算符
01	!	取反进行查找数据 找女朋友 !只要人品好
02	-a	取交集,全拼为 and 找女朋友 好看 孝敬父母 文化知识
03	-o	取并集,全拼为 or 找女朋友 好看 心底善良 有钱

实践操作:

实践情况-01:根据时间信息查找数据文件(access time 访问时间 ctime 创建时间(错误)mtime(修改时间) )

find根据时间条件查找数据说明图
在这里插入图片描述

解释说明:

-4 表示文件更改时间距现在4天以内
+4 表示文件更改时间距现在4天以前
4 表示文件更改时间距现在第4天
# 查找当前目录,两天内被访问的文件
[root@xiaoq ~]# find ./ -atime -2 
.
./.bash_history
./.lesshst
./.bashrc
./.bash_profile
./xiaoQ.txt
./xiaoQ_dir
./xiaoQ_soft.txt
./.viminfo
​
# 使用绝对路径,查找修改时间在5天内的文件
[root@xiaoq ~]# find /root/ -mtime -5 
/root/.lesshst
/root/test.txt
/root/.ssh
/root/.ssh/known_hosts

实践情况-02:根据文件名称信息查找

[root@xiaoq ~]# find / -name "xiaoQ.txt"
/etc/xiaoQ.txt
/root/xiaoQ.txt
/xiaoQ/xiaoQ.txt
[root@xiaoq ~]# find / -mtime +5   -name "xiaoQ.txt"
/xiaoQ/xiaoQ.txt
​
# 名称查找数据时,也支持模糊查找方式(利用通配符号 *[root@xiaoq ~]# find . -name "xiaoQ*"
./xiaoQ.txt
./xiaoQ01.txt
./xiaoQ02.txt
./xiaoQ03.txt
./xiaoQ_dir
./xiaoQ_soft.txt
[root@xiaoq ~]# find . -name "*.txt"
./xiaoQ.txt
./xiaoQ01.txt
./xiaoQ02.txt
./xiaoQ03.txt
./test.txt
./xiaoQ_soft.txt
./grep_test.txt
./tr_test.txt
[root@xiaoq ~]# find . -name "*Q*"
./xiaoQ.txt
./xiaoQ01.txt
./xiaoQ02.txt
./xiaoQ03.txt
./xiaoQ_dir
./xiaoQ_soft.txt

说明:find命令的查找参数信息可以组合使用,可以使查找的数据更加精准。

实践情况-03:根据指定文件类型查找(并实现反向查找)

[root@xiaoq ~]# find . -type d
.
./.pki
./.pki/nssdb
./xiaoQ_dir
./.ssh
[root@xiaoq ~]# find . !-type d
-bash: !-type: event not found
-- 逻辑符号后面跟参数需要有空格
[root@xiaoq ~]# find . ! -type d
./.bash_logout
./.cshrc
./.tcshrc
./.bash_history
./.lesshst
./shell-01.sh
省略部分信息

实践情况-04:根据文件权限信息进行查找 – 学习完系统数据权限后进行操作

[root@xiaoq ~]# find /root -perm 755
/root/xiaoQ_dir
 

实践情况-05:根据指定文件大小查找

# 根据字节进行查找
[root@xiaoq ~]# find . -size +1000c  
-- 查找大于1000字节文件
[root@xiaoq ~]# find . -size -1000c
-- 查找小于1000字节文件
​
# 根据其他大小单位查找
[root@xiaoq ~]# find . -size +1k
[root@xiaoq ~]# find . -size -10M
[root@xiaoq ~]# find . -size -10G
 

实践情况-06:查找文件时希望忽略某个目录(看看)

[root@xiaoq data]# tree
.
├── xiaoQ_dir01
│   ├── linux01
│   ├── linux02
│   └── linux03
├── xiaoQ_dir02
│   ├── linux01
│   ├── linux02
│   └── linux03
└── xiaoQ_dir03
      ├── linux01
      ├── linux02
      └── linux03
​
3 directories, 9 files
​
[root@xiaoq data]# find /data -path "/data/xiaoQ_dir03" -prune -o -name "linux01" -print
/data/xiaoQ_dir01/linux01
/data/xiaoQ_dir02/linux01
-path "/data/xiaoQ_dir03" -prune -o -name "linux01" -print 此参数信息可以理解为是

-path "/data/xiaoQ_dir03" -a -prune -o -name "linux01" -print 参数信息的简写

-a 和 -o 类似于shell中的&&|| ,当 -path "/data/xiaoQ_dir03" 为真时执行-prune,为假时,执行后续参数

 

find /data -path "/data/xiaoQ_dir02" -a -prune -o -name "linux01" -print

/data/xiaoQ_dir01/linux01

/data/xiaoQ_dir03/linux01

/data/xiaoQ_dir01 不匹配 -path设置 不做修剪 可以根据名称查找 并输出信息

/data/xiaoQ_dir02 匹配 -path设置 做修剪 不会继续执行后面操作

/data/xiaoQ_dir03 不匹配 -path设置 不做修剪 可以根据名称查找 并输出信息

实践情况-07:查找文件时希望忽略多个目录

[root@xiaoq data]# find /data \( -path "/data/xiaoQ_dir03" -o -path "/data/xiaoQ_dir02" \) -prune -o -name "linux01" -print
/data/xiaoQ_dir01/linux01

使用圆括号可以将多个表达式结合在一起,但是圆括号在命令行中另有特殊含义,所以需要利用\进行转义。

而且两个括号和参数之间要有空格,这是语法格式要求。

实践情况-08:查找不同目录深度的文件数据

[root@xiaoq data]# tree dir01/
dir01/
├── dir02
│   ├── dir03
│   │   ├── dir04
│   │   │   ├── dir05
│   │   │   │   └── xiaoQ.txt
│   │   │   └── xiaoQ.txt
│   │   └── xiaoQ.txt
│   └── xiaoQ.txt
└── xiaoQ.txt
​
4 directories, 5 files
​
# 查找最多三级目录下的xiaoQ文件
[root@xiaoq data]# find ./dir01/ -maxdepth 3 -type f -name "xiaoQ.txt"
./dir01/dir02/dir03/xiaoQ.txt
./dir01/dir02/xiaoQ.txt
./dir01/xiaoQ.txt
​
# 查找至少三级目录下的xiaoQ文件
[root@xiaoq data]# find ./dir01/ -mindepth 3 -type f -name "xiaoQ.txt"
./dir01/dir02/dir03/dir04/dir05/xiaoQ.txt
./dir01/dir02/dir03/dir04/xiaoQ.txt
./dir01/dir02/dir03/xiaoQ.txt

在这里插入图片描述

-maxdepth:表示深入子目录的最深层次到几层

-mindepth:表示至少从第几层目录开始查找

实践情况-09:find命令结合-exec参数对数据进行批量处理

# 查询指定文件的属性信息
[root@xiaoq data]# find . -type f -name "xiaoQ.txt"
./dir01/dir02/dir03/dir04/dir05/xiaoQ.txt
./dir01/dir02/dir03/dir04/xiaoQ.txt
./dir01/dir02/dir03/xiaoQ.txt
./dir01/dir02/xiaoQ.txt
./dir01/xiaoQ.txt
[root@xiaoq data]# find . -type f -name "xiaoQ.txt" -exec ls -l {} \;
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/dir03/dir04/dir05/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/dir03/dir04/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/dir03/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:03 ./dir01/xiaoQ.txt

以上命令操作说明:

在这里插入图片描述

-exec后面跟的是command命令,最后以分号 ;作为结束标志,由于各个系统分号会有不同的意义,所以要转义

{} 的作用,表示代替前面find命令找到的文件或目录数据信息,并{}后面要有空格

command可以是其他任何命令。

# 实现文件批量复制操作
 [root@xiaoq data]# find . -type f -name "xiaoQ.txt" -exec cp {} /tmp \;
​
# 实现文件批量删除操作
 [root@xiaoq data]# find . -type f -name "xiaoQ.txt" -exec rm -f {}  \;

实践情况-10:find命令结合xargs命令对数据进行批量处理

命令信息:xargs

功能介绍:

此命令是向其他命令传递行参数的一个过滤器,它能够将管道或者标准输入传递的数据转换为xargs命令后所跟命令的行参数。并且此命令单独使用可以实现对信息分组作用。

在这里插入图片描述

参数选项:

序号 参数 解释说明

01	-n	指定每行最大参数量n,也就是可以将标准输入的文本划分为多行
02	-d	自定义分隔符
03	-i	以{}替代前面的结果
04	-I	指定一个符号替代前面的结果,而不用-i参数默认的{}
05	-p	提示让用户确认是否执行后面的命令,y表示执行,n表示不执行
06	-0	用null代替空格作为分隔符,配合find命令的-print()选项的输出使用

查询指定文件属性信息:

[root@xiaoq data]# find . -type f -name "xiaoQ.txt"|xargs ls -l
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/dir03/dir04/dir05/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/dir03/dir04/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/dir03/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:04 ./dir01/dir02/xiaoQ.txt
-rw-r--r--. 1 root root 0 1221 23:03 ./dir01/xiaoQ.txt

实现指定文件批量复制:

[root@xiaoq data]# find . -type f -name "xiaoQ.txt"|xargs -i cp {} /tmp 
[root@xiaoq data]# find . -type f -name "xiaoQ.txt"|xargs -I [] cp [] /tmp 
或者
[root@xiaoq data]# find . -type f -name "xiaoQ.txt"|xargs  cp -t /tmp
说明:| 管道符号,表示将符号前面命令产生的数据结果交给后面的命令进行处理

多行信息变单行显示/单行信息进行分组显示

[root@xiaoq data]# cat test.txt 
1 2 3 4 5 6
7 8 9
[root@xiaoq data]# xargs < test.txt 
1 2 3 4 5 6 7 8 9[root@xiaoq data]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@xiaoq data]# echo {01..10}|xargs -n 2
01 02
03 04
05 06
07 08
09 10[root@xiaoq data]# echo xiaoQ?xiaoQ?xiaoQ?xiaoQ
xiaoQ?xiaoQ?xiaoQ?xiaoQ
[root@xiaoq data]# echo xiaoQ?xiaoQ?xiaoQ?xiaoQ|xargs -d ?
xiaoQ xiaoQ xiaoQ xiaoQ

知识总结:find命令结合exec和xargs使用的区别

区别 -exec xargs
区别一 该参数是将查找的结果文件名逐个传递给后面的命令来执行,如果文件多时则执行的效率低 该命令是将查找的结果一次性传递给后面的命令执行,命令执行效率高,可以使用-n参数控制一次性传递文件的个数
区别二 文件名若有空格等特殊字符也照常处理 处理特殊文件名,需要采用特殊方式

验证区别一的案例:

-exec:从命令的执行结果中可以看出,每次获得一个文件就输出一次

[root@xiaoq data]# find . -type f -exec echo info {} \;
info ./xiaoQ_dir01/linux01
info ./xiaoQ_dir01/linux02
info ./xiaoQ_dir01/linux03
info ./xiaoQ_dir02/linux01
info ./xiaoQ_dir02/linux02
info ./xiaoQ_dir02/linux03
info ./xiaoQ_dir03/linux01
info ./xiaoQ_dir03/linux02
info ./xiaoQ_dir03/linux03
info ./dir01/dir02/dir03/dir04/dir05/xiaoQ.txt
info ./dir01/dir02/dir03/dir04/xiaoQ.txt
info ./dir01/dir02/dir03/xiaoQ.txt
info ./dir01/dir02/xiaoQ.txt
info ./dir01/xiaoQ.txt
info ./xiaoQ linux.txt
info ./xiao01.txt
info ./xiao02.txt
info ./test.txt

xargs:默认输出结果只有一行,获取到所有数据信息一次性输出;也可以每行控制输出的信息

[root@xiaoq data]# find . -type f|xargs echo info
info ./xiaoQ_dir01/linux01 ./xiaoQ_dir01/linux02 ./xiaoQ_dir01/linux03 ./xiaoQ_dir02/linux01 ./xiaoQ_dir02/linux02 ./xiaoQ_dir02/linux03 ./xiaoQ_dir03/linux01 ./xiaoQ_dir03/linux02 ./xiaoQ_dir03/linux03 ./dir01/dir02/dir03/dir04/dir05/xiaoQ.txt ./dir01/dir02/dir03/dir04/xiaoQ.txt ./dir01/dir02/dir03/xiaoQ.txt ./dir01/dir02/xiaoQ.txt ./dir01/xiaoQ.txt ./xiaoQ linux.txt ./xiao01.txt ./xiao02.txt ./test.txt
​
[root@xiaoq data]# find . -type f|xargs -n 3 echo info
info ./xiaoQ_dir01/linux01 ./xiaoQ_dir01/linux02 ./xiaoQ_dir01/linux03
info ./xiaoQ_dir02/linux01 ./xiaoQ_dir02/linux02 ./xiaoQ_dir02/linux03
info ./xiaoQ_dir03/linux01 ./xiaoQ_dir03/linux02 ./xiaoQ_dir03/linux03
info ./dir01/dir02/dir03/dir04/dir05/xiaoQ.txt ./dir01/dir02/dir03/dir04/xiaoQ.txt ./dir01/dir02/dir03/xiaoQ.txt
info ./dir01/dir02/xiaoQ.txt ./dir01/xiaoQ.txt ./xiaoQ
info linux.txt ./xiao01.txt ./xiao02.txt
info ./test.txt

验证区别二的案例:

[root@xiaoq data]# touch "xiaoQ linux.txt"
[root@xiaoq data]# ll "xiaoQ linux.txt"
-rw-r--r--. 1 root root 0 1221 23:54 xiaoQ linux.txt
​
[root@xiaoq data]# find . -name "*linux.txt" -exec ls -l {} \;
-rw-r--r--. 1 root root 0 1221 23:54 ./xiaoQ linux.txt
​
[root@xiaoq data]# find . -name "*linux.txt"|xargs ls -l
ls: 无法访问./xiaoQ: 没有那个文件或目录
ls: 无法访问linux.txt: 没有那个文件或目录
[root@xiaoq data]# find . -name "*linux.txt" -print0|xargs -0 ls -l
-rw-r--r--. 1 root root 0 1221 23:54 ./xiaoQ linux.txt

命令信息:tar
功能说明:

tar是linux系统里将多个文件打包在一起并且可以实现将打包的文件解压的命令。

tar是系统管理员最常用的命令之一。

语法格式:

tar [option] [file]
tar     参数  文件或目录


tar 参数 数据包.tar.gz 需要打包数据01 需要打包数据02 …
参数选项:

说明:tar命令选项参数使用比较特殊,参数前面是否加 - 都可以正常使用参数。

序号	参数	解释说明
01	z	通过gzip方式压缩或解压
02	j	通过bzip2方式压缩或解压
03	c	创建新的tar包
04	v	显示详细的tar命令执行过程
05	f	指定压缩文件的名字和路径信息
06	t	不解压只是查看tar包内的数据信息
07	p	保持文件的原有属性
08	P(大写)	以绝对路径打包,危险参数
09	x	解压tar包
10	C	指定解压的目录路径
11	--exclude=PATTERN	打包是排除不需要处理的文件或目录
12	-X 文件名	从指定文件读取不需要处理的文件或目标列表
13	-N 时期	仅打包比指定日期新的文件,可用于增量打包备份
14	-h	打包软链接文件指向的真实源文件
15	--hard-dereference	打包硬链接文件

实践操作:

实践情况-01:打包备份指定目录下数据

# 打包数据环境准备
[root@xiaoq data]# mkdir www/html/xiaoQ/ -p
[root@xiaoq data]# touch www/html/{01..05}.html
[root@xiaoq data]# ls www/html/
01.html  02.html  03.html  04.html  05.html  xiaoQ
​
# 进行打包操作过程
[root@xiaoq data]# cd www/
[root@xiaoq www]# pwd
/data/www
[root@xiaoq www]# tar zcvf www.tar.gz ./html/
./html/
./html/xiaoQ/
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
[root@xiaoq www]# ll -h www.tar.gz 
-rw-r--r--. 1 root root 194 1222 14:37 www.tar.gz

实践情况-02:查看压缩包内的内容

[root@xiaoq www]# tar ztvf www.tar.gz 
drwxr-xr-x root/root         0 2021-12-22 14:36 ./html/
drwxr-xr-x root/root         0 2021-12-22 14:35 ./html/xiaoQ/
-rw-r--r-- root/root           0 2021-12-22 14:36 ./html/01.html
-rw-r--r-- root/root           0 2021-12-22 14:36 ./html/02.html
-rw-r--r-- root/root           0 2021-12-22 14:36 ./html/03.html
-rw-r--r-- root/root           0 2021-12-22 14:36 ./html/04.html
-rw-r--r-- root/root           0 2021-12-22 14:36 ./html/05.html
-- 使用选项t不解压就可以查看压缩包的内容,选项v可以显示压缩数据的文件属性信息
[root@xiaoq www]# tar ztf www.tar.gz 
./html/
./html/xiaoQ/
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
-- 可以省略v选项,只查看数据内容
[root@xiaoq www]# tar tf www.tar.gz 
./html/
./html/xiaoQ/
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
-- 如果不指定z选项,tar命令也会自动判断压缩包的类型,自动调用gzip命令。

实践情况-03:解压压缩包数据信息

[root@xiaoq www]# tar zxvf www.tar.gz -C /tmp/
./html/
./html/xiaoQ/
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
-- 选项C指定解压路径,不加C解压到当前目录
[root@xiaoq www]# ls /tmp/html/
01.html  02.html  03.html  04.html  05.html  xiaoQ
[root@xiaoq www]# tar xf www.tar.gz -C /tmp/
-- 如果不想显示太多输出,可以去掉v,同时z选项也可以省略。

实践情况-04:排除打包的示例

[root@xiaoq www]# tar zcvf www.tar.gz ./html/ --exclude=html/xiaoQ
./html/
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
-- xiaoQ目录结尾不要加 / ,否能会出现异常
[root@xiaoq www]# tar zcvf www.tar.gz ./html/ --exclude=html/xiaoQ --exclude=html/01.html
./html/
./html/02.html
./html/03.html
./html/04.html
./html/05.html
-- 排除2个以上数据信息时,可以并且使用--execlude参数
[root@xiaoq www]# cat /data/exclude.txt 
html/xiaoQ
html/01.html
[root@xiaoq www]# tar zcvf www.tar.gz ./html/ -X /data/exclude.txt 
./html/
./html/02.html
./html/03.html
./html/04.html
./html/05.html
-- 排除2个以上数据信息时,可以将多个信息写入到一个文件中,使用-X参数进行加载

实践情况-05:打包软件链接文件方法

[root@xiaoq www]# cd /etc/
[root@xiaoq etc]# tar zcf local.tar.gz ./rc.local 
-- 使用常规方式对软链接文件打包压缩
[root@xiaoq etc]# tar tvf local.tar.gz 
lrwxrwxrwx root/root         0 2021-11-18 16:30 ./rc.local -> rc.d/rc.local
-- 打包后的文件将是个软链接文件,而不是rc.local的实体内容
采用-h参数打包链接文件,才可以解决此问题:

[root@xiaoq etc]# tar zcfh local_h.tar.gz ./rc.local 
[root@xiaoq etc]# tar tvf local_h.tar.gz 
-rw-r--r-- root/root       473 2020-04-01 09:30 ./rc.local

说明:在企业环境中,对大量数据打包压缩时,无法确认是否存在软链接文件,建议打包时也要加上h参数。

实践情况-06:对筛选出的数据文件进行打包备份

[root@xiaoq www]# find . -type f -name "*.html" -exec tar zcvf www_exec.tar.gz {} \;
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
[root@xiaoq www]# tar ztvf www_exec.tar.gz 
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/05.html
-- 由于exec参数输入逐行数据进行操作,所以进行打包压缩数据时,会出现数据覆盖的情况
​
[root@xiaoq www]# find . -type f -name "*.html"|xargs tar zcvf www_xargs.tar.gz
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
[root@xiaoq www]# tar ztvf www_xargs.tar.gz 
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/01.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/02.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/03.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/04.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/05.html
-- 由于xargs参数输入一次性数据进行操作,所以进行打包压缩数据时,可以全部数据打包压缩
​
[root@xiaoq www]# tar zcvf www.tar.gz `find . -type f -name "*.html"`
./html/01.html
./html/02.html
./html/03.html
./html/04.html
./html/05.html
[root@xiaoq www]# tar ztvf www.tar.gz 
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/01.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/02.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/03.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/04.html
-rw-r--r-- root/root         0 2021-12-22 14:36 ./html/05.html
-- 利用反引号特性,实现对检索后的数据批量打包压缩

说明:反引号可以实现将引号内命令执行后的结果信息,交给引号外的命令再次进行加载处理

打包压缩数据经验建议:

打包一个目录之前,建议先进入到这个目录的上一级目录,这样打包数据更加规范;
打包数据的命令格式:tar 参数 压缩包 相对或绝对路径/数据

1.2.2 文件权限知识介绍

权限类型介绍说明:

在这里插入图片描述

说明:文件属性中的权限位,可以理解为系统基础的9位权限位

读权限:字符标识 r 数值标识 4

针对文件来说,主要利用此权限可以实现对文件数据信息的读取。

针对目录来说?延伸。。。

写权限:字符标识 w 数值标识 2

针对文件来说,主要利用此权限可以实现对文件数据信息的编辑修改。> >>

针对目录来说?

执行权限:字符标识 x 数值标识 1

针对文件来说,主要利用此权限可以实现对脚本或代码文件,以及命令文件的执行功能。

针对目录来说?

权限描述练习:

权限标识 数值表示 含义说明

rwxrw-rw-	766	属主具有可读可写可执行权限 属组和其他用户只具有可读可写权限
rw-r--r--	644	属主具有可读可写权限 属组和其他用户具有可读权限
r---w---x	?	?

1.2.3 文件用户知识介绍

用户知识概念介绍:

用户信息:可以作为系统数据或程序进程的操作管理者,一般不同的用户会有不同的操作系统能力。

用户组信息:可以将多个系统用户进行整合,方便统一对多个用户的权限进行管理

说明:系统识别用户信息不是依靠名称,而是依靠相应用户或用户组的编号id识别。

系统用户分类介绍:

管理用户:(皇帝)root — uid=0

虚拟用户:(傀儡)nobody — uid = 1-999

Linux下面每个程序/进程需要有一个用户和用户组管理;并且虚拟用户无法登录Linux系统。

普通用户:(百姓)xiaoQ — uid=1000+

用户信息可以成为管理系统数据、程序或进程的人员,并且也是权限的赋予者。

1.2.4 文件时间信息介绍

文件时间信息分类:

文件修改时间:mtime(modified time)(更加关注)

当文件信息内容发生变动时,会修改调整此时间信息。

文件访问时间:atime(access time)

当文件信息内容访问读取时,会修改调整此时间信息。

文件改变时间:ctime(change time)

当文件属性状态发生变动时,会修改调整此时间信息。

[root@xiaoq ~]# stat /etc/hosts
  File:/etc/hosts’
  Size: 180         Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d  Inode: 67122845    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:net_conf_t:s0
Access: 2021-12-22 23:29:01.964585584 +0800
Modify: 2021-12-15 23:11:57.669526404 +0800
Change: 2021-12-15 23:11:57.669526404 +0800
Birth: -

创建文件的初始时间信息:

[root@xiaoq ~]# stat time.txt 
Access:  2021-12-23 14:24:38.880221824 +0800
Modify:  2021-12-23 14:24:38.880221824 +0800
Change: 2021-12-23 14:24:38.880221824 +0800

编辑文件内容查看时间变化:

[root@xiaoq ~]# stat time.txt 
Access: 2021-12-23 14:25:22.610444741 +0800
Modify: 2021-12-23 14:25:22.610444741 +0800
Change: 2021-12-23 14:25:22.611444769 +0800
-- 修改文件时,会访问文件内容(atime) 修改文件本身(mtime)修改文件大小(ctime)

查看文件内容查看时间变化:

[root@xiaoq ~]# stat time.txt 
Access: 2021-12-23 14:28:02.364912300 +0800
Modify: 2021-12-23 14:25:22.610444741 +0800
Change: 2021-12-23 14:25:22.611444769 +0800

修改属性内容查看时间变化:

[root@xiaoq ~]# ll time.txt 
-rw-r--r--. 1 root root 6 Dec 23 14:25 time.txt
[root@xiaoq ~]# chown xiaoQ time.txt 
[root@xiaoq ~]# ll time.txt 
-rw-r--r--. 1 xiaoQ root 6 Dec 23 14:25 time.txt
[root@xiaoq ~]# stat time.txt 
Access: 2021-12-23 14:28:02.364912300 +0800
Modify: 2021-12-23 14:25:22.610444741 +0800
Change: 2021-12-23 14:29:16.990999224 +0800

系统时间信息操作命令:date

功能说明:

命令用于显示当前的系统时间或设置系统时间

语法格式:

date [option] [+FORMAT]
date    选项       日期格式

参数选项:

序号 参数 解释说明
OPTION参数选项

01	-d 时间字符串	显示指定字符串所描述的时间,而非当前时间
02	-f 时间文件	从日期文件中按行读入时间描述
03	-r 文件	显示指定文件的最后修改时间
04	-s 日期时间	设置系统时间
05	-u	显示或设置UTC时间
FORMAT日期格式	 
01	%a	星期名缩写(如Tue代表星期二)
02	%A	星期名全称(如Tuesday,星期二)
03	%b	月名缩写(Aug 代表八月)
04	%B	月名全称(August 代表八月)
05	%F	完整的日期格式,等价于%Y-%m-%d(如2019-08-1806	%y	年份的最后两位简写(20年)
07	%Y	年份的完整书写方式(2020年)
08	%m	月份信息(01-1209	%M	分钟信息(00-5910	%d	每月的第几天
11	%D	等于%m%d%y(如 08/18/1512	%T	时间信息,等价于%H:%M:%S(14:30:50)
13	%H	24小时制(00-2314	%I	12小时制(00-1215	%S	秒信息(00-60

实践操作:

实践情况-01:常用时间格式输出信息

[root@xiaoq ~]# date +%y
21
-- 显示年份信息(短格式)
[root@xiaoq ~]# date +%Y
2021
-- 显示年份信息(长格式)
[root@xiaoq ~]# date +%m
12
-- 显示月份信息
[root@xiaoq ~]# date +%d
23
-- 显示日期信息
[root@xiaoq ~]# date +%H
14
-- 显示小时信息
[root@xiaoq ~]# date +%M
10
-- 显示分钟信息
[root@xiaoq ~]# date +%S
10
-- 显示秒信息
[root@xiaoq ~]# date +%F
2021-12-23
-- 显示特殊格式日期信息
[root@xiaoq ~]# date +%T
14:10:19
-- 显示特殊格式时间信息

实践情况-02:通过参数-d显示未来或过去的时间情况

# 显示过去的时间
[root@xiaoq ~]# date +%F -d "-1day"
2021-12-22
[root@xiaoq ~]# date +%F -d "yesterday"
2021-12-22
​
​
# 显示未来的时间
[root@xiaoq ~]# date +%F -d "+1day"
2021-12-24
[root@xiaoq ~]# date +%F -d "tomorrow"
2021-12-24
[root@xiaoq ~]# date +%F -d "1month"
2022-01-23
[root@xiaoq ~]# date +%F -d "1year"
2022-12-23
[root@xiaoq ~]# date +%F -d "24hour"
2021-12-24
[root@xiaoq ~]# date +%T -d "24min"
14:41:15

实践情况-03:通过参数-s设定时间(主要用于某些测试-- 定时服务进行测试)

[root@xiaoq ~]# date -s 20170706
Thu Jul  6 00:00:00 CST 2017
[root@xiaoq ~]# date -s 00:10:05
Thu Jul  6 00:10:05 CST 2017
[root@xiaoq ~]# date -s "00:00:03 20170506"
Sat May  6 00:00:03 CST 2017
[root@xiaoq ~]# date -s "00:00:03 2017-05-07"
Sun May  7 00:00:03 CST 2017
[root@xiaoq ~]# date -s "00:00:03 2017/05/08"
Mon May  8 00:00:03 CST 2017

1.2.5 文件存储属性介绍

数据存储关联信息:

在每个Linux存储设备进行格式化操作之后(创建文件系统),都会创建两个部分内容:

inode:(默认大小为128或256字节)

block:(默认大小为1~4kB)

由于磁盘或分区一般都比较大,因此inode和block都会存在很多个,并且都可以存放数据信息

在这里插入图片描述

inode:(数据索引信息–书的目录)
本质上是一小块具备唯一数字编号的存储空间,主要用来存放文件(目录)属性的数据信息,以及指针信息

inode里不能包含文件名称信息(文件名不属于文件的属性)

查看系统inode信息:

[root@xiaoq ~]# df -i
Filesystem       Inodes      IUsed    IFree           IUse%     Mounted on
/dev/sda3        51539456 61548    51477908    1%            /
/dev/sda1        102400     326        102074        1%            /boot

block
称为磁盘块,是用来存放实际数据的实体单元(一般最大为4KB),即用来存放真实数据。

单个的大文件需要占用多个Block块来存储,特别小的单个文件如果不能占满整个block块,剩余空间也无法利用

查看系统block信息:

[root@xiaoq ~]# df
Filesystem     1K-blocks    Used      Available     Use%   Mounted on
/dev/sda3      103028584 2192704  100835880   3%       /
/dev/sda1      201380       122072    79308           61%     /boot

通过“ls -i”或者“stat 文件名”可以查看文件的inode数值

通过 dumpe2fs xfs_info等命令可以查看分区的inode或block的单位大小及各种相关信息。

利用inode和block实现数据读取过程简述:(面试题:简单介绍数据如何访问)

在这里插入图片描述

inode特点总结:

一个非空文件至少要占用一个inode(有且只有一个)和一个block(可以有多个)

inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口 — 硬链接知识相关

inode在每一个文件系统分区内是唯一的

block特点总结:

磁盘读取数据是以block为单位进行读取的

每读取一个block就会消耗一次磁盘I/O(input/output,磁盘读写)

若文件比较大,那么一个文件可能占用多个block

若文件比较小,那么一个block的剩余空间会被浪费,无论内容有多小。

1.2.6 文件链接概念介绍

在Linux系统中,链接可分为两种:

硬链接(hard link):ln 原始文件 目标文件(硬链接文件)

软链接(soft link):ln -s 原始文件 目标文件(软链接文件)

在执行ln命令可以来创建相应链接文件信息。

硬链接(hard link):
是指通过索引节点进行的链接,当多个文件名指向同一个索引节点,这种情况下的两个文件就称为互为硬链接文件。

硬链接的作用是允许一个文件拥有多个有效的文件名,可以建立硬链接到重要的文件上,避免误删造成的影响。

[root@xiaoq ~]# cat xiaoQ.txt 
I am xiaoQ teacher
[root@xiaoq ~]# ln xiaoQ.txt xiaoQ_hard_link.txt
[root@xiaoq ~]# ll -i xiaoQ.txt xiaoQ_hard_link.txt 
134318520 -rw-r--r--. 2 root root 19 Dec 21 16:18 xiaoQ_hard_link.txt
134318520 -rw-r--r--. 2 root root 19 Dec 21 16:18 xiaoQ.txt 

说明:对于硬链接创建操作,只能对普通文件进行操作,不能对目录文件创建硬链接。

软链接(soft link)
也称为符号链接(symblic link,symlink),实质就是类似于windows系统中的快捷方式。

软链接实际上是一个特殊的文件,文件类型用字母l表示,链接文件会通过逻辑指针,指向到真实文件上。

利用软链接可以快速定位指定数据信息,也可以解决文件或目录名称改动造成程序加载异常情况。

[root@xiaoq ~]# cat xiaoQ.txt 
I am xiaoQ teacher
[root@xiaoq ~]# ln -s xiaoQ.txt xiaoQ_soft_link.txt
[root@xiaoq ~]# ll  xiaoQ.txt xiaoQ_soft_link.txt 
lrwxrwxrwx. 1 root root  9 Dec 23 16:41 xiaoQ_soft_link.txt -> xiaoQ.txt
-rw-r--r--. 2 root root 19 Dec 21 16:18 xiaoQ.txt

企业生产目录软链接作用:

企业应用情况一:

编译软件时指定版本号,访问时希望去掉版本号,可以设置软链接到编译的路径。

所有程序都访问软链接文件,当软件升级高版本后,只需删除链接文件重建到高版本路径的软链接即可

# 给编译后的软件程序目录创建软链接 方便程序加载
/application/apache-2.2.23 -->/application/apache <-- 程序代码访问软链接
# 编译程序升级后,重新创建软链接即可
/application/apache-2.2.24-->/application/apache 重新建立软链接即可

企业应用情况二:

企业代码发布时(PHP程序),需要把所有代码传到一个新发布的临时目录或新的站点目录。

发布时要么一个mv,也可以重建软链接指向到这个新的临时目录或新的站点目录

企业应用情况三:

在有些目录数据不方便移动时,可以使用软链接

在这里插入图片描述

企业面试题目:请问以下目录的硬链接数表示的含义

[root@xiaoq ~]# mkdir xiaoQ_dir/{xiaoQ01,xiaoQ02}
[root@xiaoq ~]# ll -di  xiaoQ_dir/
67666015 drwxr-xr-x. 4 root root 36 Dec 23 16:43 xiaoQ_dir/[root@xiaoq ~]# ll -ia xiaoQ_dir/
total 4
67666015 drwxr-xr-x. 4 root root   36 Dec 23 16:43 . 
-- 在xiaoQ_dir目录下会有一个 . 目录 对应的inode和原有目录一致 硬链接+1
134318465 dr-xr-x---. 5 root root 4096 Dec 23 16:41 ..
134335243 drwxr-xr-x. 2 root root    6 Dec 23 16:43 xiaoQ01
202305322 drwxr-xr-x. 2 root root    6 Dec 23 16:43 xiaoQ02
[root@xiaoq ~]# ll -ia xiaoQ_dir/xiaoQ01 xiaoQ_dir/xiaoQ02/
xiaoQ_dir/xiaoQ01:
total 0
134335243 drwxr-xr-x. 2 root root  6 Dec 23 16:43 .
67666015 drwxr-xr-x. 4 root root 36 Dec 23 16:43 ..
-- 在xiaoQ_dir目录下的子目录xiaoQ01中,有.. 的目录表示上一级目录 inode一致 硬链接+1
​
xiaoQ_dir/xiaoQ02/:
total 0
202305322 drwxr-xr-x. 2 root root  6 Dec 23 16:43 .
 67666015 drwxr-xr-x. 4 root root 36 Dec 23 16:43 ..
-- 在xiaoQ_dir目录下的子目录xiaoQ02中,有.. 的目录表示上一级目录 inode一致 硬链接+1
-- 因此虽然不能直接给目录创建硬链接,但目录的默认硬链接数,决定了目录下有所多少个子目录

硬链接(hard link)特点总结:

具有相同inode节点号的多个文件互为硬链接文件,本质上是相同文件数据的不同访问入口文件。
删除硬链接文件或者删除源文件任意之一,文件实体并未删除。
只有删除了源文件及源文件对应的所有硬链接文件,文件实体才会被删除。
只有所有的硬链接文件及源文件均被删除之后,再存放新的数据时,新数据才会占用这个文件存储空间。
可以通过对文件设置硬链接文件,来防止重要文件被删除 (不经常改动的并尺寸容量比较大的文件)
硬链接文件类型属于普通文件
硬链接只能针对文件,不能针对目录

软链接(soft link)特点总结:

软链接类似于windows的快捷方式,链接文件中会存放指向源文件的路径信息。
删除源文件,软链接文件依然存在,但是无法访问并指向源文件路径的实体内容。
软链接失效的时候一般是白色红底闪烁提示
软链接和源文件是不同类型的文件,也是不同的文件,inode号也不相同
软链接文件不仅可以针对文件,还可以针对目录。

1.3 企业实战面试题目

1.3.1 文件数据读取原理

在这里插入图片描述

简述说明:

获取访问文件的目录路径信息

根据目录层级依次访问不同的目录,获取目录的inode和block信息

inode:获取目录的属性信息中的权限信息以及对应block的指针信息

block:获取目录中的文件数据名称信息

目录层级依次检索完毕后,获取具体文件的inode和block信息

inode:获取文件的属性信息中的权限信息以及对应block的指针信息

block:获取文件中的真实的数据信息。

1.3.2 文件数据删除原理

Linux系统是通过Link数量来控制文件是否被删除的,只有当一个文件不存在任何Link的时候,这个文件才会被删除

系统每个数据文件都有2个Link计数器:i_count和i_nlink

i_nlink: 可以理解为磁盘的引用计数器,就是前面提到的文件硬链接的数量。

i_count:可以理解为内存的引用计数器,就是当前文件使用者(例如:被进程调用)的数量。

从文件系统的角度描述文件删除原理:

Linux系统上的文件名是存储在父目录的block里面的,并获得了这个文件的inode节点,这个文件的inode节点标记指向存放了这个文件的block的数据块。

当系统用户删除一个文件时,实际并不会清除inode节点和block的数据,只是在这个文件父目录的block里,删除了文件的名字,从而是这个文件名消失,并且无法识别这个文件的inode节点,当没有文件名指向这个inode节点的时候,系统将会释放inode和block节点的空间供其他数据使用。

在这里插入图片描述

简单描述为:此文件的硬链接数为0了-i_nlink

从文件引用的角度描述文件删除原理:

在系统服务运行过程中,系统进程会加载很多的文件信息,当进程加载的文件被误删除后,进程产生的数据信息会仍然记录在内存中,通过内存和磁盘的通讯机制,仍然会锁定磁盘相应的inode和block空间,使其他数据文件不能使用。

因此,这时需要重启或停止相应服务进程,才能将内存占用磁盘的inode和block空间解绑,从而是空间得以释放。

简单描述为:此文件的进程调用数为0了-i_count

在这里插入图片描述

1.3.3 磁盘空间不足原因

系统磁盘空间不足主要和两个方面有关:

  • inode数量是否不足:系统存在了大量小文件数据
  • block数量是否不足:系统存在了大量大文件数据

如有侵权,请联系删除!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值