Linux文件系统,用户与权限

文件系统:文件系统是操作系统用来管理和存储文件信息的一种管理系统。

  1. 文件类型分类
    普通文件(以echo,touch,cat,cp创建的文件都是普通文件):包括纯文本文件,数据文件,二进制文件。纯文本文件,以ASCII码形式存储,从文件中可以直接读取到数据。数据文件,某些程序运行过程中读取的某种特殊格式的文件,如系统会将用户登录数据存储到/var/log/wtmp中。二进制文件,以文本的二进制形式存储在计算机中,比如系统自带的命令,本质上就是二进制文件。
#通过file命令查看文件的类型
[root@#test ~]# file abc.txt
abc.txt: ASCII text

#二进制文件
[root@#test ~]# file -L /usr/bin/cat
/usr/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]=8ac8b57ae50762a4a0480486839107e87b3c284d, stripped

#数据文件
[root@#test ~]# file /var/log/wtmp
/var/log/wtmp: data

目录文件:中Linux系统中的目录

块设备文件:一些存储数据的可供系统读取的接口设备,如磁盘,软盘等

字符设备文件:一些串行接口设备,如键盘,鼠标等。

套接字文件:也称数据接口文件,用以网络端口间的数据通信。

管道文件:一种特殊的用以解决多个程序同时对某一文件的读取产生的错误问题。

链接文件:分为软链接文件和硬链接文件。硬链接文件是指通过索引节点来进行连接,多个文件同时指向同一个索引节点,这种情况下的文件称为硬链接文件。
文件系统就是磁盘上管理文件的系统,一个硬盘有两个分区,一个是swap交换分区,是当内存不够用时将这个分区当做交换内存来使用;一个是filesystem文件系统分区,用来存储管理文件的;
文件系统分区是由多个磁盘块来组成的,如果我们要将我们的文件保存到磁盘中,就必须是离散式存储,离散式存储就必须要有文件的描述信息,而这个描述信息描述了文件都使用了哪个磁盘块,以及文件的大小,属性等。这个描述信息是一个结构体struct inode。所以要存储一个文件,就必须找到空闲的磁盘块存储文件数据,以及需要找到一个未被使用的inode结点来存储自己的元信息,每个文件都会有一个唯一的inide结点号。
在这里插入图片描述
但是磁盘是非常大的,磁盘块也是相当的多,要找到空闲的磁盘块是非常困难的,所以操作系统针对这个问题,给每个磁盘块都做了一个整体的位图,这样子就可以快速找到空闲的磁盘块了。
位图是一串的二进制比特位,用来做一种数据的标记,使用0/1来判断磁盘块的使用情况,节省大量的空间以及查找效率大大提高。
在一个文件系统磁盘中,又分了几个区域,data区用来存放数据的 ;inode区 用来存放inode结点的; data_bitmap存放的是数据块的位图,用二进制位来表示数据区的磁盘块使用情况;inode_bitmap 用二进制来表示inode区域的磁盘块使用情况;超级块 描述文件系统信息,例如磁盘的块数,磁盘的使用情况,各区域的起始地址。

文件存储流程
根据上面对文件系统的理解,我们可以总结一下文件存储的流程情况。
文件的存储:通过超级块找到inode位图以及数据块位图,再通过数据块位图找到空闲的磁盘块存储文件数据,以及通过inode位图快速找到空闲的inode结点来存储文件的元信息,等到数据存储完毕后,还需要在这个文件所在的目录下,记录这个文件的名称和inode结点号(目录项)。

文件数据的获取:通过文件名打开一个文件,在所在目录下通过文件名找到inode结点号,在磁盘超级块中找到inode结点区,根据inode结点号,就可以找到inode结点,得到数据存储的磁盘块号,取出文件数据。

注:linux下文件的数据和文件的名称是分离的,文件的名称只是告诉文件系统是在哪个目录下的文件

软链接文件与硬链接文件
软/硬链接文件概念:给一个源文件创建一个软/硬链接文件,就可以通过创建出来的软/硬链接来操作该源文件

#实例:为test.txt文件创建一个硬链接文件
ln test.txt test.hard

#实例:为test.txt文件创建一个软链接文件
ln -s test.txt test.sort

软/硬链接文件的区别
我们在创建好一个文件的软硬链接文件后,来查看他们各自的信息
我们发现他们的inode节点号并不都是相同的,只有硬链接文件和源文件的节点号相同,是同一个文件只是名称不同。而软链接文件是一个单独的新的文件,软链接文件后面保存了源文件的路径,当操作软链接文件时,就会通过该路径找到源文件,再操作这个源文件。总结下来就是:硬链接文件本质上和源文件没有什么不同,都是一个文件的名称,与源文件共同使用一个inode节点,通过inode节点访问源文件数据;软链接文件时一个独立的文件,有自己的inode节点,文件数据中保存了源文件的路径,通过这个路径访问源文件的数据。

下面我们试图删除源文件看软/硬链接文件的变化

我们可以发现,在删除源文件后,软链接文件就找不到它所保存的路径的源文件。而硬文件还是能继续访问原来源文件的内容,而且红框的数字又2变成了1,其实那是链接数:也就是一个inode结点有几个目录项

所以它们能明显看出的区别是删除源文件后,软链接文件失效,硬链接文件链接数-1。
删除一个文件,文件并不会被立即删除,而是直接删除了目录项信息,inode中的链接数-1,如果inode结点中的链接数为0后,才会真正的将文件删除。

还有一个区别是软链接文件可以跨分区,硬链接文件不可以。软链接文件只是保存了源文件的路径,不管你是哪一个文件系统分区的,我只要通过自己保存的路径去访问源文件即可(路径唯一)。而硬链接是通过inode节点去访问源文件的,虽然一个文件系统分区里的inode结点唯一,但是磁盘中有多个文件系统分区,每个文件系统分区都有自己的一套inode节点。如果跨区保存,就不无法通过inode节点找到唯一的源文件了

可以通过前面的链接符号可以区分哪些是软链接文件,哪些是硬链接文件–有l表示软链接文件。

  1. 文件属性
    在linux系统中所有的文件都有自己的属性信息。
[root@#test ~]# ls -li
总用量 8
33595097 -rw-r--r--  1 root root    5 815 08:28 abc.txt

33595097:innode索引节点号
-:文件类型,-为普通文件,d为目录文件,b为块设备文件,c为字符文件,s为套接字文件,p
为管道文件,l为连接文件
rw-r--r--:权限信息。
1 :硬连接数量
root:文件所有者
root:文件所属组
..

用户和用户组:linux系统中,用户是分角色的,用户的角色有UID和GID来辨别。
用户分类

  1. 超级用户(root):UID和GID都是0
    超级用户是Linux系统中具有最高权限的用户。
    root用户对系统的配置、管理和维护具有无限制的权限。
    root用户可以执行所有操作,包括创建、修改和删除系统文件、安装软件包以及管理所有用户和组。
  2. 系统用户:UID和GID在1-499
    系统用户是由系统自动创建和使用的用户账号,用于执行特定系统任务。
    系统用户通常以非交互方式运行,无需登录到系统。
    它们用于运行系统服务、守护进程和后台任务,如Web服务器、数据库服务器等。
    系统用户的账号名称通常以字母“_”或者“-”开头,例如_www或nobody。
  3. 普通用户:UID和GID在500-65535
    普通用户的主目录位于/home目录下,并且有限的权限仅限于自己的文件和部分系统资源。(只能操作自己家目录中的文件和子目录)
[root@#test ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash

用户组:linux系统中,每一个用户都有所属的用户组,系统可对一个用户组中的所有用户统一管理。用户组的管理包括增删查改等,实际上是对/etc/group文件的更新操作。

[root@#test ~]# groupadd sss
[root@#test ~]# tail -2 /etc/group
guoj:x:1000:
sss:x:1001:
[root@#test ~]# groupdel sss
[root@#test ~]# tail -2 /etc/group
chrony:x:996:
guoj:x:1000:
#更改某个用户组的GID为指定GID
[root@#test ~]# groupmod -g 8899 guoj
[root@#test ~]# tail -2 /etc/group
chrony:x:996:
guoj:x:8899:

用户权限

  1. 默认权限:在Linux系统中,root用户和普通用户创建的文件的默认权限是有所不同的。

当root用户创建一个.txt文件时,该文件的默认权限通常是rw-r–r–(也就是,110 100 100,644)。这意味着root用户具有读写权限,而所属组和其他用户只有读取权限。

而当普通用户创建一个.txt文件时,默认权限通常是rw-rw-r–(也就,110 110 100,664)。这表示创建该文件的普通用户和同一所属组的用户具有读取和写入权限,而其他用户只有读取权限。

权限解读
rwxr-xr-x 是一个文件权限模式,对应755,表示了文件的访问权限。每个字符串中的字符代表着不同的权限。

解读每个字符的含义如下:
第一个字符 r:表示所有者(Owner)拥有读取(Read)权限。
第二个字符 w:表示所有者拥有写入(Write)权限。
第三个字符 x:表示所有者拥有执行(Execute)权限。
第四个字符 r:表示所属组(Group)拥有读取权限。
第五个字符 -:表示所属组没有写入权限。
第六个字符 x:表示所属组拥有执行权限。
第七个字符 r:表示其他用户(Others)拥有读取权限。
第八个字符 -:表示其他用户没有写入权限。
第九个字符 x:表示其他用户拥有执行权限。

修改默认权限:默认情况下,每个用户都有一个默认的umask 值,通常为 022(以八进制表示)。这意味着在创建新文件时,会屏蔽掉其他用户的写权限和执行权限,将权限设置为 644。在创建新目录时,会屏蔽掉其他用户的写权限和执行权限,将权限设置为 755。
实际权限值=权限值-umask值。
修改用户的umask值即可修改文件的默认权限。

修改权限
chmod

chmod [选项] 模式 文件/目录

chmod +x script.sh    # 添加执行权限
chmod 644 file.txt    # 设置文件权限为644
chmod -R 755 dir/     # 递归设置目录及其内容的权限为755

chown

chown [选项] 用户:组 文件/目录

chown root:users file.txt    # 设置文件所有者为root,所属组为users
chown -R admin:admin dir/    # 递归设置目录及其内容的所有者和所属组为admin

chgrp

chgrp [选项] 组 文件/目录

chgrp users file.txt    # 设置文件所属组为users
chgrp -R staff dir/    # 递归设置目录及其内容的所属组为staff

chattr

chattr [选项] <标志> 文件/目录

chattr +i file.txt        # 将文件设置为不可修改
chattr +a log.txt         # 将文件设置为只附加
chattr -i file.txt        # 解除文件的不可修改标志
chattr -R +i directory/   # 递归设置目录及其内容为不可修改

lsattr 命令可查看文件被chattr设置成的状态

[root@#test ~]# lsattr abc.txt
----i----------- abc.txt
[root@#test ~]#   rm -f abc.txt
rm: 无法删除"abc.txt": 不允许的操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值