系列文章目录
(一) Linux入门概述
(二) Linux环境搭建
(三)Linux基本目录详解
(四)Linux系统中文件属性详解
(五)Linux命令详解—文件和目录管理
文章目录
前言
1、文件属性信息概述
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限(详细介绍后面再讲):
- chown (change owner) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
文件的属性信息(1-8):
1. 文件数据的 inode 信息:index node -- 索引节点
作用:快速从磁盘 block 中找到数据信息
2. 文件的数据类型:文件 目录 链接文件 设备文件 ……
作用:指明文件的数据类型
3. 权限位信息: r(read)读 w(write)写 x(execute)执行
作用:控制让不同用户对文件可以有不同的权限
4. 文件目录的硬链接数:类似于超市的多个门
作用:可以多个路径查看数据信息
5. 文件所属用户信息(属主):
作用:文件的创建者或者拥有者
6. 文件所属组信息(属组):
作用:文件或数据的所属用户组
7. 文件的大小信息
8. 文件的时间信息(修改时间)
9. 文件名称
2、文件类型
Linux中文件的类型,可以根据多种方法来区分。比如颜色、属性信息、特殊命令等。
1、根据属性信息区分:
d --目录
- --文件
c --字符文件
b --块文件
l --链接文件
s --socket文件
2、根据颜色区分:
1.红色:压缩文件或者包文件
2.蓝色:目录
3.绿色:可执行文件,可执行的程序
4.白色:普通文件,如文本文件,配置文件,源码文件等
5.浅蓝色:链接文件,主要是使用ln命令建立的文件
6.红色闪烁:表示链接的文件有问题
7.黄色:表示设备文件,包括block,char,fifo
8.灰色:表示其它文件
3、根据特殊命令区分:file 文件名
[root@localhost /]# file /bin/yum
/bin/yum: Python script, ASCII text executable --可执行文件
一些常见的文件类型:
d -- 目录文件类型
- -- 普通文件
1. 纯文本文件(text) /etc/hosts -- 文本文件,可以直接编辑查看
2. 二进制文件(binary) /bin/ls -- 命令文件,不可以编辑查看
3. 数据型文件(data) /tmp/tar.gz -- 压缩文件
l -- 链接文件(快捷方式)
c/b -- 字符文件/块文件(设备文件)
块文件:存储的设备文件 光驱设备文件 磁盘
字符文件:根本停不下来的输出字符信息
磁盘设备文件 /dev/sda
随机设备文件 /dev/urandom(产生随机字符信息)
输出设备文件 /dev/zero(黑洞的出口文件)
输入设备文件 /dev/null(黑洞的入口文件)
s -- socket文件(网络编程)
3、文件权限
3.1、文件权限概述
每个文件的属性由 10 个字符来确定,可以分为 4 部分(如下图)。
- 第1部分(0位):文件类型,上面已详细介绍。
- 第2部分(1-3位):属主(该文件的所有者)拥有该文件的权限。
- 第3部分(4-6位):属组(所有者的同组用户)拥有该文件的权限。
- 第4部分(7-9位):其他用户拥有该文件的权限。
Linux 文件的基本权限:Linux 文件的基本权限有9个,分别是owner/group/others(拥有者/组/其他) 三种身份,每种身份各自有自己的 read/write/execute 权限。
权限的表示方法:
权限类型 | 数字标识 | 字符标识 |
---|---|---|
读(read) | 4 | r |
写(write) | 2 | w |
执行(execute) | 1 | e |
没权限(-) | 0 | - |
身份的表示方法:
身份类型 | 字符标识 |
---|---|
用户(即文件所有者)(user) | u |
组(即文件所有者所属的组)(group) | g |
其他用户(others) | o |
所有(all) | a |
3.2、更改文件属性
3.2.1、chgrp:更改文件属组
语法:chgrp [-R] 属组名 文件名
--R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
[root@localhost test]# ls -il
total 0
76961 -rw-r--r--. 2 root root 0 Aug 17 07:58 h2 #现在属于root组
76974 -rw-r--r--. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# cat /etc/group #查询有哪些组
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
......
[root@localhost test]# chgrp sys h2 #更改文件 h2 的属组为sys
[root@localhost test]# ls -il
total 0
76961 -rw-r--r--. 2 root sys 0 Aug 17 07:58 h2
76974 -rw-r--r--. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
3.2.2、chown:更改文件属主,也可以同时更改文件属组
语法:chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
- -R:递归更改文件属主/组,就是在更改某个目录文件的主/组时,如果加上-R的参数,那么该目录下的所有文件的主/组都会更改。
[root@localhost test]# ls -il
total 0
76961 -rw-r--r--. 2 root sys 0 Aug 17 07:58 h2 # 属主为 root
76974 -rw-r--r--. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chown lzx h2 # 更改属主为 lzx
[root@localhost test]# ls -il
total 0
76961 -rw-r--r--. 2 lzx sys 0 Aug 17 07:58 h2 # 属主更改为了 lzx
76974 -rw-r--r--. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
3.2.3、chmod:更改文件9个属性
Linux 文件的基本权限有9个,分别是owner/group/others(拥有者/组/其他) 三种身份,每种身份各自有自己的 read/write/execute 权限。所以我们按身份分为3组,每组都有读、写、执行权限。
Linux文件属性有两种设置方法:一种是数字,一种是符号。
1、 数字方式更改权限
前面介绍过,每个身份有三个权限r(读)/w(写)/x(执行),三个权限的数字之和就表示一个身份的权限,比如:rwx = 4+2+1 = 7,就表示读、写、执行的权限。那三个身份就是三组数字。
语法:chmod [-R] xyz 文件或目录
- xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。比如:rwx = 4+2+1 = 7
- -R : 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更。
[root@localhost test]# ls -il
total 0
76961 -rw-rw-rw-. 2 lzx sys 0 Aug 17 07:58 h2
76974 -rw-r--r--. 1 root root 0 Aug 17 08:05 h3 #更改前的权限
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod 666 h3 #更改 h3 的文件权限,数字格式
[root@localhost test]# ls -il
total 0
76961 -rw-rw-rw-. 2 lzx sys 0 Aug 17 07:58 h2
76974 -rw-rw-rw-. 1 root root 0 Aug 17 08:05 h3 #更改后的权限
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
2、 符号方式更改权限
前面介绍过三种身份,分别用**u(用户)/g(组)/o(其他)来表示三个身份,用a(所有)**表示全部身份。也就是可以使用下表的方式来分配权限:
命令 | 身份 | 操作 | 权限 | 操作对象 |
---|---|---|---|---|
chmod | u(用户)/g(组)/o(其他)/a(所有) | +(加入)/-(除去)/=(设定) | r(读)/w(写)/x(执行) | 文件或目录 |
[root@localhost test]# ls -il
total 0
76961 -rw-rw-rw-. 2 lzx sys 0 Aug 17 07:58 h2
76974 -r--r--r--. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod u=rw-,g=rw-,o=rw- h3 #设置u读写、g读写、o读写权限
[root@localhost test]# ls -il
total 0
76961 -rw-rw-rw-. 2 lzx sys 0 Aug 17 07:58 h2
76974 -rw-rw-rw-. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod o-w h3 #取消o(其他用户)的w(写)权限
[root@localhost test]# ls -il
total 0
76961 -rw-rw-rw-. 2 lzx sys 0 Aug 17 07:58 h2
76974 -rw-rw-r--. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
[root@localhost test]# chmod a=r h3 #所有的身份时候设置成r(读)权限
[root@localhost test]# ls -il
total 0
76961 -rw-rw-rw-. 2 lzx sys 0 Aug 17 07:58 h2
76974 -r--r--r--. 1 root root 0 Aug 17 08:05 h3
166935 drwxr-xr-x. 2 root root 26 Aug 17 08:08 tt1
4、用户信息(属主/属组)
Linux系统是一个多用户多任务的分时操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。(详细信息后面介绍)
5、索引节点 inode
5.1 概述
索引节点相当于书籍的目录,用于存储文件属性的信息和文件或数据在磁盘中保存的位置。首先了解ext文件系统(即Linux 文件系统)的原理,而我们Linux目前使用ext4文件系统。如下图:
ext4 文件系统主要把分区分为两大部分:inode(i节点) 和 block。
- inode :占用小部分空间。大小默认为 128 Byte,用来记录文件的权限(r、w、x)、文件的所有者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。
- block:占用大部分空间。大小可以是 1KB、2KB、4KB,默认为 4KB。block 用于实际的数据存储,文件名也保存在block中。如果一个 block 放不下数据,则可以占用多个 block。比如:15KB的文件要占用4个block。
总结 :
1、每个文件都独自占用一个 inode,文件内容由 inode 的记录来指向。
2、如果想要读取文件内容,就必须借助目录中记录的文件名找到该文件的 inode,才能成功找到文件内容所在的 block 块(即文件内容)。
5.2 查看 inode 和 block 信息
1、inode 查看方法:
[root@localhost /]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 120512 377 120135 1% /dev
tmpfs 124455 1 124454 1% /dev/shm
tmpfs 124455 871 123584 1% /run
tmpfs 124455 16 124439 1% /sys/fs/cgroup
2、block 查看方法:
[root@localhost /]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 482048 0 482048 0% /dev
tmpfs 497820 0 497820 0% /dev/shm
tmpfs 497820 8464 489356 2% /run
tmpfs 497820 0 497820 0% /sys/fs/cgroup
(命令详细信息后面介绍)
5.3、读取数据的原理
1、找到指定数据
2、读取数据内容,先获取文件数据的 inode 信息
3、根据 inode 信息在磁盘中找到对应的 block
4、根据 block 信息获取文件真实内容
6、时间信息
6.1、文件数据时间类型
访问时间 Access time -- atime
修改时间 Modify time -- mtime
改变时间 Change time -- ctime 数据属性信息发生改变
6.2 如何查看文件详细属性信息
stat 文件名
[root@yunxuanedu data]# stat index.conf
File: ‘index.conf’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1572874 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-08-14 12:21:34.931911740 +0800
Modify: 2021-08-14 12:17:58.855963278 +0800
Change: 2021-08-14 12:17:58.855963278 +0800
Birth: -
6.3、时间属性改变案例
# 查看当前时间属性信息
[root@yunxuanedu data]# stat index.conf
File: ‘index.conf’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1572874 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-08-14 13:58:18.350433799 +0800
Modify: 2021-08-14 13:58:18.350433799 +0800
Change: 2021-08-14 13:58:18.350433799 +0800
Birth: -
# 修改文件属性,ctime 将会变动
[root@yunxuanedu data]# chmod 600 index.conf
[root@yunxuanedu data]# stat index.conf
File: ‘index.conf’
Size: 4 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1572874 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-08-14 13:58:18.350433799 +0800
Modify: 2021-08-14 13:58:18.350433799 +0800
Change: 2021-08-16 10:38:35.779929115 +0800
Birth: -
# 修改文件内容,mtime 和 ctime 都会变动(修改文件内容时,文件属性信息也发生改变)
[root@yunxuanedu data]# echo "qwer" >> index.conf
[root@yunxuanedu data]# stat index.conf
File: ‘index.conf’
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1572874 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-08-14 13:58:18.350433799 +0800
Modify: 2021-08-16 10:39:04.322112606 +0800
Change: 2021-08-16 10:39:04.322112606 +0800
Birth: -
# 查看文件内容,atime 发生变动(访问时间)
[root@yunxuanedu data]# cat index.conf
123
qwer
[root@yunxuanedu data]# stat index.conf
File: ‘index.conf’
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1572874 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2021-08-16 10:39:24.691957234 +0800
Modify: 2021-08-16 10:39:04.322112606 +0800
Change: 2021-08-16 10:39:04.322112606 +0800
Birth: -
7、硬链接
7.1 硬链接文件特征
- 一个硬链接文件相当于访问该文件内容的一个入口
- 硬链接数相当于访问该文件内容的入口数量
- 同一个分区中,inode号相同的文件互为硬链接文件
- 不能给目录创建硬链接
- 硬链接可以防止误删除,但是不能防止误修改。因此修改文件之前,做好备份。
7.2 软链接文件特征
- 软链接文件相当于 Windows 系统中文件的快捷方式
- 软链接文件用于存放指向源文件的路径信息
- 软链接创建最好采用绝对路径,否则容易失效
- 链接的源文件删除,容易影响软连接。建立相同名的文件后,软链接恢复,但是当前新建文件并不是被删除的文件,两者的inode号不相同
软硬链接的区别:
- 链接后的文件大小不一致
- 链接后的文件权限和类别不一致
- 连接后的文件和原文件inode信息有出入(硬链接与原文件inode一致,软链接与原文件inode不同)
- 原文件被删除,硬链接文件依然有效,软链接文件失效(可创建同名文件进行恢复)
- 软硬链接文件创建过程不一致
- 系统中的目录不能创建硬链接