在Linux系统中,所有的设备、目录都统称为文件。
文件系统概述
文件系统时操作系统用来管理和存储文件信息的一种管理系统,它剋为用户建立文件,并可以存储、读取、修改文件等。
文件类型
Linux中的文件可分为普通文件、目录文件、块设备文件、字符设备文件、套接字文件、管道文件和链接文件7种类型。
-
普通文件
以echo
、touch
、cp
、cat
等命令创建的文件都属于普通文件,普通文件又分为以下三种。- 纯文本文件,以ASCII码形式存储在计算机中,从文件中可以直接读取到数据。
可以通过file
查看文件类型
得到反馈结果[root@test ~]# file abc.txt
abc.txt:ASCII text
。 - 二进制文件,以文本的二进制形式存储在计算机中。
Linux系统中的二进制文件很多,如系统自带的命令,如cat
,也可以通过file
命令查看。[root@test ~]# file -L /usr/bin/cat
- 数据文件,有些程序在运行的过程中会读取某些特定格式的文件,这些特定的文件被称为数据文件。例如,在用户登陆时,Linux系统会将登陆的数据记录在
/var/log/wtmp
文件内,该文件就是一个数据文件,可以通过file
命令查看该文件类型。[root@test ~]# file /var/log/wtmp
- 纯文本文件,以ASCII码形式存储在计算机中,从文件中可以直接读取到数据。
-
目录文件
目录文件指的就是Linux下的目录,如根目录、/home目录、/usr目录等。
可以使用命令ls -ld
来查看是否目录文件。
Linux中的.
表示当前目录,使用命令ls -ld
显示结果的第一列以d开头就表示目录文件。 -
块设备文件
块设备文件时一些存储数据以供系统访问的接口设备,如磁盘、软盘等。 -
字符设备文件
字符设备文件时一些串行端口的接口设备,如键盘、鼠标等。 -
套接字文件
套接字文件也称为数据接口文件,通常用于网络上数据的连接。
我们可以启动一个程序来监听客户端的请求,而客户端就可以通过套接字文件来进行数据通信。 -
管道文件
管道是一种特殊的文件类型,主要用于解决多个程序同时访问一个文件造成的错误问题。 -
链接文件
Linux系统中的链接文件分为两种:硬链接文件与软连接文件。- 硬连接文件时指通过索引节点来进行连接。在Linux系统中,多个文件同时指向同一个索引节点,这种情况下的文件被称为硬链接文件。
- 软链接文件,也称为符号链接,与Windows系统中的快捷方式类似。实际上它时一个文本文件,文本文件里存储着指向源文件链接的位置信息。
Linux系统中链接文件的创建命令为
ln
,语法格式:ln 源文件名 链接文件名 #创建硬链接文件 ln -s 源文件名 链接文件名 #创建软链接文件
文件属性
在Linux系统中,每一个文件都有自己的属性信息。
文件的属性包括索引节点、文件类型、权限、文件的所有者与所属组、文件大小、文件名或目录名、硬链接数量等信息。
在Linux系统中,可以使用ls -li
命令来查看文件属性信息。
从命令的结果来看,一个完整的属性信息共有9个部分:
- inode 索引节点号。
- 文件类型(-)。
- - 代表普通文件
- d 代表目录文件
- b 代表块设备文件
- c 代表字符设备文件
- s 代表套接字文件
- p 代表管道文件
- l 代表链接文件
- 权限信息(---------)。 #后面章节介绍
- 硬链接数量。
- 文件的所有者。
- 文件的所属组。
- 文件大小,单位字节。
- 最近修改时间。
- 文件名或目录名。
在Linux系统中,存储设备或分区被格式化文件系统后,一般会分成两个部分。
第一个部分为inode,第二个部分时block。
inode存储文件的属性信息,每个文件都有其对应的inode号,如同我们的身份证号一样,具有唯一性。
操作系统识别文件其实就是识别inode节点号,因此inode号也可以用来区分不同的文件。
用户与用户组
在Linux系统中,用户是分角色的,用户的角色由UID和GID来辨别,即操作系统识别的是用户的UID与GID,而非用户名。
用户分类
- 超级系统管理员
在Linux系统中,默认超级管理员就是root用户,可以使用head -l /etc/passwd
命令来查看。
输入命令后获得结果,结果包括以:
分割的7列信息。
其中第三列和第四列就是root用户的UID和GID,因此可以得知,Linux的超级管理员的UIR和GID都为0。 - 系统用户
在Linux系统中,系统用户又被称为虚拟用户。这些用户是安装操作系统时就默认存在的,且不可登陆到系统的用户,他们的UID和GID范围都是1~499。 - 普通用户
在Linux系统中,还有一种用户是管理员用户创建的,我们称之为普通用户。
普通用户的UID和GID范围都是500~65535,权限很小,只能操作自己的家目录中的文件及子目录。
用户组
在Linux系统中的每一个用户都有一个用户组,系统可以对一个用户组中的所有用户进行统一管理。
用户组的管理包含对用户组的添加、删除和修改。
用户组的添加、删除和修改实际是对/etc/group
文件的更新操作。
示例:
- 添加一个名为mingong的用户组。
[root@test ~]# groupadd mingong
- 删除名为mingong的用户组。
[root@test ~]# groupdel mingong
- 修改名为mingong用户组的GID为8899。
[root@test ~]# groupmod -g mingong
用户权限
默认权限
在Linux系统中,创建完成的文件或目录自己会产生相应的权限,即系统的默认权限。
分别使用root用户与普通用户,创建一个名为test001.txt的文件和一个名为test001的目录,创建完以后使用ls -l
命令查看。
结果中可以得出以下结论
- root用户创建的文件默认权限为644,目录的默认权限是755。
- 普通用户创建的文件默认权限为664,目录的默认权限是775。
关于权限数值的意思:
所有权限都由三组符号表示,每组三个字符,一共9个字符,就跟在文件类型的后面。
每组里面都可以出现r、w、x三个字符,r字符等于4,w字符等于2,x字符等于1。
所以,644等同于rw-r--r--
,664等同于rw-rw-r--
。
umask值与默认权限的关系
在Linux系统中,这些默认分配的权限其实全部由umask值来决定,每个用户的umask值不相同,因此它所创建的文件和目录的默认权限也不同。
Linux系统规定如下权限值:
- 文件的权限值666,默认权限=权限值-umask值。
- 目录的权限值是777,默认权限=权限值-umask值。
如何修改默认权限
从上面的介绍中也能得出结论,修改默认权限也就是修改用户的umask值。
修改umask值可以使用umask n
命令,n的取值范围为000~777。
示例:
- 将root用户的umask值修改为044。
[root@test ~]# umask 044
- 将root用户的umask值修改为023.
上述修改后,会发现文件的默认权限应该是666-023=643,这样就出现计算结果与实际结果不一样的现象。[root@test ~]# umask 023
因此,当umask值部分或全部为奇数时,目录的默认权限不变,文件的默认权限是在出现奇数位的计算结果上加1。
文件权限
文件权限分类
在Linux系统中,文件的权限分为以下3种。
- 读权限,用字母
w
表示,转换成数字是4。 - 写前线,用字母
r
表示,转换成数字是2。 - 执行权限,用字母
x
表示,转换成数字是1。
如何修改权限
在Linux系统中,权限列中3位一组,一共3组,分别代表用户、组、其他人的权限。
修改权限可以是对某一组或全部组进行修改。
- 命令格式
修改权限的命令格式如下:
锁定/取消锁定是文件的一种特殊权限,锁定后的文件不可删除、新增或清空。可使用chmod [选项] [文件名或目录名] #修改文件或目录的权限 chown [选项] [用户名] [文件名或目录名] #修改文件或目录的属主 chown [选项] [组名] [文件名或目录名] #修改文件或目录的属组 chattr +i/-i [文件名或目录名] #锁定/取消锁定文件或目录
lsattr
命令查看文件是否有这种特殊权限,命令格式如下。lsattr [文件名]
- 修改权限示例
- 将文件abc.txt的属主、属组的权限修改为可读、可写、可执行,其他人的权限不变。
[root@test ~]# chmod 774 abc.txt
- 将abc.txt的属主与属组全部修改成mingong。
[root@test ~]# chown mingong.mingong abc.txt
- 将abc.txt文件锁定,并测试是否可写、可删除。
[root@test ~]# chattr +i abc.txt [root@test ~]# rm -f abc.txt [root@test ~]# echo "hehehehe">>abc.txt
- 查看文件abc.txt是否具有特殊权限。
结果中如果只有一个字母[root@test ~]# lsattr abc.txt
i
,表示它是不可认一更改的文件或目录,即该文件或目录被锁定。
- 将文件abc.txt的属主、属组的权限修改为可读、可写、可执行,其他人的权限不变。