第十五章 Linux系统文件属性及类型
一、文件属性
1.举例引用
[root@jindada ~]# ls -li
total 24
134317708 drwxr-xr-x. 2 root root 22 Jul 13 19:06 backup
16346 drwxr-xr-x. 2 root root 22 Jul 13 19:06 data
134317704 -rw-r--r--. 1 root root 28 Jul 13 16:53 file.txt
134317705 -rw-r--r--. 1 root root 75 Jul 14 20:17 ip.txt
134317678 -rw-r--r--. 1 root root 798 Jul 14 19:13 passwd
2.具体释义
第一列: 134317708 #inode号 索引节点
第二列: -rw-r--r--. #文件的类型和权限
第三列: 2 #文件的硬链接的数量
第四列: root #文件的所有者 属主
第五列: root #文件的所属组 属组
第六列: 798 #文件的大小,默认字节显示
第七八九列 Jul 13 19:06 #文件创建时间或最后的修改时间
第十列: passwd #文件的名称 不属于文件的属性
3.文件的类型和权限
drwxr-xr-x.
-rw-r--r--.
lrwxrwxrwx
crw-rw-rw-
srw-rw-rw-
prw-------.
第一个字符为文件的类型信息,第二个到第10个为文件权限
4.文件类型的种类
- # 普通文件 二进制 日志 文本 脚本
d # 目录
l # 软链接文件
b # 块设备 磁盘 硬盘 磁盘分区 镜像 光盘
c # 字符设备
s # 套接字文件 socket文件
p # 管道文件
5.文件后缀名
Linux中对后缀没有任何的要求, 系统存在一些带后缀名的文件,只是为了方便程序人员的使用
Linux中是区分大小写的 :
.txt
.log
.xml
.conf
.cnf
.html
.php
.sh
.py
.mp3
.jpg
.png
.tar
.tar.gz
.gz
.zip
二、文件属性及类型常用命令-stat
1.含义
stat命令来自于英文单词status的缩写,其功能是用于显示文件的状态信息。Linux系统中每个文件都有三个“历史时间”——最后访问时间(ATIME)、最后修改时间(MTIME)、最后更改时间(CTIME),用户可以使用stat命令查看到它们,进而判别有没有其他人修改过文件内容。
*使用touch命令可以轻易修改文件的ATIME和MTIME,因此请勿单纯以文件历史时间作为判别系统有无被他人入侵的唯一标准。
语法格式:stat [参数] 文件名
2.常用参数:
-L | 支持符号链接 |
---|---|
-f | 显示文件系统的信息 |
-t | 以简洁的方式输出 |
-c | 指定格式输出 %a 以8进制显示文件的权限 |
--help | 显示命令帮助信息 |
--version | 显示命令版本信息 |
3.常用示例
查看指定文件的状态信息(含ATIME、MTIME与CTIME)
[root@jindada ~]# stat passwd
File: ‘passwd’
Size: 1203 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 393958 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-11-02 11:05:13.015767486 +0800
Modify: 2022-11-02 11:05:12.332771968 +0800
Change: 2022-11-02 11:05:12.332771968 +0800
Birth: -
仅查看指定文件的文件系统信息
[root@jindada ~]# stat -f passwd
File: "passwd"
ID: 47d795d8889d00d3 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 25769961 Free: 24544964 Available: 23471378
Inodes: Total: 6553600 Free: 6369382
以简洁的方式查看指定文件的状态信息:
[root@jindada ~]# stat -t passwd
passwd 1203 8 81a4 0 0 fd01 393958 1 0 0 1667358313 1667358312 1667358312 0 4096
以8进制显示文件的权限
[root@jindada ~]# stat -c %a passwd
644
三、文件属性及类型常用命令-file
1.含义
file命令的功能是用于识别文件的类型,也可以用来辨别一些内容的编码格式。由于Linux系统并不是像Windows系统那样通过扩展名来定义文件类型,因此用户无法直接通过文件名来进行分辨。file命令则是为了解决此问题,通过分析文件头部信息中的标识来显示文件类型,使用很方便。
语法格式:file [参数] 文件
2.常用参数:
-b | 列出辨识结果时,不显示文件名称 (简要模式) |
---|---|
-c | 详细显示指令执行过程 |
-f | 指定名称文件,显示多个文件类型信息 |
-L | 直接显示符号连接所指向的文件类别 |
-m | 指定魔法数字文件 |
-v | 显示版本信息 |
-z | 尝试去解读压缩文件的内容 |
-i | 显示MIME类别 |
3.常用示例
查看某些文件的类型
[root@jindada ~]# file passwd
passwd: ASCII text
[root@jindada ~]# file /opt/
/opt/: directory
查看某个文件的类型,但不显示文件名:
[root@jindada ~]# file -b passwd
ASCII text
以MIME类别来显示某个文件的类型
[root@jindada ~]# file -i passwd
passwd: text/plain; charset=us-ascii
查看某个符号链接文件(快捷方式)的类型,会提示目标文件名称
[root@jindada ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
[root@jindada ~]# ll /bin/ls
-rwxr-xr-x. 1 root root 117680 Oct 31 2018 /bin/ls
[root@jindada ~]# file /etc/grub2.cfg
/etc/grub2.cfg: symbolic link to `../boot/grub2/grub.cfg'
[root@jindada ~]# file /dev/log
/dev/log: socket
[root@jindada ~]# file /run/systemd/initctl/fifo
/run/systemd/initctl/fifo: fifo (named pipe)
直接查看某个符号链接文件(快捷方式)所对应的目标文件的文件类型
[root@jindada ~]# file -L /dev/cdrom
/dev/cdrom: block special
四、文件的组成
一个文件在Linux中,会被分为两部分:
1.元数据: 用来形容一个文件数据 metadata 属性信息 大小 时间 属主 属组 权限 inode 索引节点
2.用户数据: 文件中的真实内容 user data 数据块 硬盘存放真实数据的地方 block
文件分为硬链接文件 hard link 和软链接文件或者符号链接 symbolic link == soft link
五、软链接文件
当我们访问这个软链接文件时,其实就是在访问源文件的本身。就是相当于Windows上面的快捷方式,里面存放的是文件的路径 及可以执行这个文件
1)软链接文件和源文件属于不同的文件 inode是不一样 那么当我们对一个文件创建多个软链接时,其实就是多个inode指向同一个block。
2)那么当我们删除软链接文件时,其实只是删除了一个inode的指向,并不会对源文件造成影响。
3)如果我们删除的是源文件,那么该文件的所有软链接文件都会失效。
[root@jindada ~]# ll -i /etc/sysconfig/selinux
134477906 lrwxrwxrwx. 1 root root 17 Jul 6 02:14 /etc/sysconfig/selinux -> ../selinux/config
[root@jindada ~]# ll -i /etc/selinux/config
223842 -rw-r--r--. 1 root root 543 Jul 6 02:14 /etc/selinux/config
1.应用场景
1)软件升级
2)企业的代码发布 Jenkins 秒级发布
3)不方便移动的目录
4)数据回滚
5)程序读取
2.软链接的创建
ln #创建软链接
选项:
-s #创建软链接
&& #前面的命令执行成功 才会执行后面的命令
|| #前面的命令执行失败,才会执行后面的命令
用法:
ln -s 源文件 链接文件
[root@jindada ~]# ln -s /etc/sysconfig/network-scripts/ifcfg-eth0 /root/eth0
[root@jindada ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
[root@jindada ~]# mkdir nginx-1.17.0
[root@jindada ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
[root@jindada ~]# mkdir nginx-1.18.0
[root@jindada ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@jindada ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@jindada ~]# ln -s nginx-1.17.0/ nginx
[root@jindada ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
lrwxrwxrwx. 1 root root 13 Jul 15 20:04 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@jindada ~]# rm -f nginx && ln -s nginx-1.18.0/ nginx #版本升级
[root@jindada ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
lrwxrwxrwx. 1 root root 13 Jul 15 20:04 nginx -> nginx-1.18.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@jindada ~]# rm -f nginx && ln -s nginx-1.17.0/ nginx #版本回退
[root@jindada ~]# ll
total 0
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
lrwxrwxrwx. 1 root root 13 Jul 15 20:07 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
3.软链接的特点
1.概念
2.创建
3.跟源文件是不同类型的文件,inode是不一样的
4.软链接可以对目录创建 也可以跨文件系统
5.删除上:rm -f
删除软链接文件对源文件没有任何影响
删除源文件,软链接存在,但是会失效 出现 红底白字闪烁状
六、硬链接文件
1.概念
概念: 多个文件的数据指向同一个数据块,多个不同的入口,inode是相同的,这样的文件互为硬链接
防止文件被误删除
2.创建硬链接
ln命令直接创建 只能对文件创建 不能对目录创建
用法:
ln 源文件 硬链接文件
[root@jindada ~]# cp /etc/hosts ./
[root@jindada ~]# ll
total 4
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
-rw-r--r--. 1 root root 158 Jul 15 20:18 hosts
lrwxrwxrwx. 1 root root 13 Jul 15 20:07 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@jindada ~]# ln hosts hosts_hard
[root@jindada ~]# ll
total 8
lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
-rw-r--r--. 2 root root 158 Jul 15 20:18 hosts
-rw-r--r--. 2 root root 158 Jul 15 20:18 hosts_hard
lrwxrwxrwx. 1 root root 13 Jul 15 20:07 nginx -> nginx-1.17.0/
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.17.0
drwxr-xr-x. 2 root root 6 Jul 15 19:59 nginx-1.18.0
[root@jindada ~]# ll -i
total 8
134317677 lrwxrwxrwx. 1 root root 41 Jul 15 20:01 eth0 -> /etc/sysconfig/network-scripts/ifcfg-eth0
134317704 -rw-r--r--. 2 root root 158 Jul 15 20:18 hosts
134317704 -rw-r--r--. 2 root root 158 Jul 15 20:18 hosts_hard
[root@jindada ~]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# cat hosts_hard
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# echo "123" >>hosts_hard
[root@jindada ~]# cat hosts_hard
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
123
[root@jindada ~]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
123
删除源文件或者硬链接文件都没有什么影响 只有硬链接为0时,这个文件才会被真正的删除
七、软链接和硬链接的区别
1.概念上
硬链接文件与源文件inode相同,软链接文件与源文件inode不同
2.创建方式上
创建命令不同:
软链接:ln -s
硬链接:ln
3.创建对象上
目录不能创建硬链接,并且硬链接不可以跨越系统的分区,软链接可以
4.删除层面上
删除软链接文件,对源文件无影响,但是删除软链接源文件对软链接文件有影响
删除硬链接文件,对源文件也无影响,并且删除源文件,对硬链接文件也无影响
八、文件的执行过程
1. 系统会判断你输入的命令是否绝对路径,是直接执行
2. 如果是相对路径,系统会判断命令是否存在别名,如果存在,执行别名
3. 如果命令不存在别名,系统会判断输入的命令是否内置命令,如果是,直接执行
4. 如果不是内置命令,系统会查询内存的hash缓存表,如果命令存在缓存,则按照缓存执行
5. 如果hash缓存表中没有命令的缓存,系统会从环境变量PATH中的命令路径查询命令的路径进行执行
6. 如果PATH变量没有命令的路径,就会报错 command not found
#查询命令是否为内置命令
[root@jindada ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
[root@jindada ~]# type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
#查看系统中所有的内置命令
[root@jindada ~]# help
#查看当前窗口下所有外部命令的缓存表
[root@jindada ~]# hash
hits command
53 /usr/bin/grep
1 /usr/bin/egrep
1 /usr/bin/tail
6 /usr/bin/file
[root@jindada ~]# /usr/bin/wc /etc/hosts
2 10 158 /etc/hosts
[root@jindada ~]# ll /usr/bin/wc
-rwxr-xr-x. 1 root root 41688 Oct 31 2018 /usr/bin/wc
[root@jindada ~]# mv /usr/bin/wc /usr/bin/gl
[root@jindada ~]# wc /etc/hosts
-bash: /usr/bin/wc: No such file or directory
[root@jindada ~]# gl /etc/hosts
2 10 158 /etc/hosts
[root@jindada ~]# hash
hits command
53 /usr/bin/grep
1 /usr/bin/egrep
1 /usr/bin/tail
1 /usr/bin/gl
#从缓存中删除一个命令的缓存
[root@jindada ~]# hash -d wc
[root@jindada ~]# wc /etc/hosts
-bash: wc: command not found
[root@jindada ~]# mv /usr/bin/gl /usr/bin/wc
[root@jindada ~]# wc /etc/hosts
2 10 158 /etc/hosts
[root@jindada ~]# mv /usr/bin/wc /usr/sbin/
[root@jindada ~]# wc /etc/hosts
-bash: /usr/bin/wc: No such file or directory
[root@jindada ~]# hash -d wc
[root@jindada ~]# wc /etc/hosts
2 10 158 /etc/hosts
#清空hash缓存表中的所有缓存
[root@jindada ~]# hash -r
[root@jindada ~]# hash
hash: hash table empty
#里面存放的是系统中的命令的路径,每个路径用:号分割
[root@jindada ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin