Linux文件与目录管理(7)
今天开始进入Linux文件属性的学习。
Linux系统中的文件或目录的属性主要包括:索引节点(inode)、文件类型、权限属性、连接数、所属用户和用户组,最近修改时间等内容:
我们可以通过前面学过的ls命令查看文件或目录的所有属性,下面我们看一个例子:
[root@studyclub ~]# ls -lhi
total 202M
33612378 -rw-r--r-- 1 root root 120M Feb 3 15:45 PySide2-5.14.2.2-5.14.2-cp35.cp36.cp37.cp38-none-win_amd64.whl
33612377 -rw-r--r-- 1 root root 60M Dec 10 17:30 PySide6-6.0.0-6.0.0-cp36.cp37.cp38.cp39-none-win_amd64.whl
我们看到,上面列出来的结果中包含10列内容,接下来的几篇文章就按照这10列的顺序,详细解释每一列的相关知识。下面我们来看看这10列都是什么:
1) node索引节点编号
2) 文件类型及权限(共11个字符,第一个字符为类型,中间9个为文件权限,最后一个为和SELinux相关的
3) 硬链接个数(这部分我们在磁盘与文件系统章节进行介绍)
4) 文件或目录所属的用户
5) 文件或目录所属的用户组
6) 文件或目录的大小
7) 文件或目录最后修改时间
8) 文件或目录名
ls -li第一列内容详解 - inode
inode的内容比较多,我们后面专门讲解。
ls -li第二列内容详解 - 文件类型、文件权限
文件类型
在linux系统中,一切皆文件。文件类型包括普通文件、目录、字符设备文件、块设备文件、符号链接文件、管道文件等;下面我们分别说明。
当执行ls -l或ls -al后显示的结果:
[root@studyclub ~]# ll
total 206844
-rw-r--r-- 1 root root 22 Jan 24 23:56 issue.net
lrwxrwxrwx 1 root root 9 Feb 5 22:58 james -> jason.txt
-rw-r--r--. 1 root root 76 Jan 27 18:36 jason.txt
drwxr-xr-x. 15 root root 154 Jan 21 05:51 test
[root@studyclub dev]# ll
total 0
crw-rw---- 1 root video 10, 175 Feb 5 19:42 agpgart
crw------- 1 root root 10, 235 Feb 5 19:42 autofs
srw-rw-rw- 1 root root 0 Feb 5 19:42 log
crw--w---- 1 root tty 4, 60 Feb 5 19:42 tty60
brw-rw---- 1 root disk 8, 2 Feb 5 19:42 sda2
brw-rw---- 1 root disk 8, 3 Feb 5 19:42 sda3
第一列第2-10个字符是用来描述文件权限的(权限后面介绍),而第一列中的第一个字符就是描述文件类型的,比如上面结果中就有-、d、l、c、b等类型。下面介绍一下这几种文件类型:
文件类型标识符 | 文件类型说明 |
d(dirctory) | 表示这是一个目录,如上文ext,在ext2fs中,目录是一个特殊的文件。 |
-(regular file) | 表示这是一个普通的文件,如上文的jason |
l(link) | 表示这是一个符号连接(软连接)文件。 |
b(block) | 表示块设备和其他的外围设备,是特殊类型的文件 |
c(char) | 表示字符设备文件 |
s(socket) | 表示socket文件 |
p(named pipe) | 表示管道文件 |
提示:linux初学者学习需要抓重点,雷哥建议初学者先重点掌握d、-、l这三种即可。
普通文件(regular file)
我们通过ls -l查看文件的属性,可以看到第一列内容为-rw-r--r--.值得注意的是第一个符号是-(英文减号),在linux中,以这样的字符开头的文件就表示普通文件。 这样的文件一般是用相关的应用程序或系统命令创建,比如touch、cp、tar、echo、cat等工具。普通文件的删除命令可以使用rm。
普通文件(regular file):第一个属性为“-”,按照文件内容又可以分为:
纯文本文件 二进制文件 数据格式文件:有些程序在运行过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件,例如:linux在用户登录时,都会把登录的数据记录在/var/log/wtmp那个文件内,该文件就是一个数据文件。通过last命令读出来,cat命令会读出乱码,因为他属于一种特殊格式的文件。
目录文件
当我们执行ls -ld时,可以看到第一列内容为drwxr-xr-x,这种d开头的就表示目录,目录在linux中是比较特殊的文件。
创建目录的命令可以用mkdir,通过使用-p参数可以实现递归创建。
特别提示,下面是执行ls -F的结果,在写脚本时可以直接区别目录和文件,注意,每个目录的后面多了一个斜线。
[root@studyclub ~]# ls -F
20 awkprof.out d.txt f.txt issue.net old qt-unified-windows-x86-4.0.1-1-online.exe zhuo/
anaconda-ks.cfg b.txt ett.txt g.txt james@ PySide2-5.14.2.2-5.14.2-cp35.cp36.cp37.cp38-none-win_amd64.whl test/
a.txt c.txt e.txt issue jason.txt PySide6-6.0.0-6.0.0-cp36.cp37.cp38.cp39-none-win_amd64.whl test.txt
生产环境下我们一般通过下面的方法过滤出所有目录:
[root@studyclub ~]# ls -l | grep "^d"
drwxr-xr-x. 15 root root 154 Jan 21 05:51 test
drwxrwxrwx. 2 root root 6 Jan 21 05:46 zhuo
字符设备或块设备
如果我们进入/dev目录,列出如下文件,就会看到类似的内容:
[root@studyclub ~]# ls -al /dev/tty
crw-rw-rw- 1 root tty 5, 0 Feb 5 19:42 /dev/tty
我们看到属性是crw-rw-rw-,注意第一个字符是c,这表示字符设备文件。字符设备就是串行端口的接口设备。
[root@studyclub ~]# ls -al /dev/sda
brw-rw---- 1 root disk 8, 0 Feb 5 19:42 /dev/sda
我们看到上面的属性是brw-rw----,注意前面的第一个字符是b,这表示块设备。
以上种类的文件,一般可用mknod来创建,用rm删除,目前在Centos系统中,我们不需要来创建设备文件。因为这些文件是和内核相关联的。
套接字文件
当我们启动MySQL服务时,会产生一个mysql.sock文件,这个文件的属性的第一个字符是s
[root@studyclub ~]# ls -l /dev
srw-rw-rw- 1 root root 0 Feb 6 18:49 log
[root@studyclub ~]# find /dev -type s
/dev/log
符合链接文件
符号链接文件也被成为软连接文件:
[root@studyclub ~]# ll
lrwxrwxrwx 1 root root 9 Feb 5 22:58 james -> jason.txt
如上,我们查看文件属性时,会看到有类似lrwxrwxrwx的字符串,注意第一个字符是l,这类文件表示链接文件。
文件权限
Linux中每个文件或目录都有一组共9个基础权限位,每三位字符分为一组,他们分别是属主权限位,用户组权限位,其他用户权限位。比如rw-rw-rw-,在linux中正是这9个权限位来控制文件属主、组、其他用户的权限。
linux文件或目录的权限位是由9个权限位来控制,每三位为一组,他们分别是文件属主的读写执行权限,用户组的读写执行权限以及其他用户的读写执行权限:
-r 即read,代表读权限,数字表示为4
-w 即write,代表写权限,数字表示为2
-x 即execute,代表可执行权限,数字表示为1
- 没有权限,数字表示为0
关于用户、用户组、其他用户的表示:
用户:user,简写为u
用户组:group,简写为g
其他用户:other,简写为o
下一篇推文我们通过实例讲解权限,今天我们先准备演示环境:
[root@studyclub ~]# groupadd jasonhome #一个家庭
[root@studyclub ~]# id james
uid=1001(james) gid=1002(jasonhome) groups=1002(jasonhome)
[root@studyclub ~]# useradd eric -g jasonhome
[root@studyclub ~]# useradd simon -g jasonhome
[root@studyclub ~]# id eric
uid=1002(eric) gid=1002(jasonhome) groups=1002(jasonhome)
[root@studyclub ~]# id simon
uid=1003(simon) gid=1002(jasonhome) groups=1002(jasonhome)
[root@studyclub ~]# usermod -g jasonhome james # 如果用户已经存在,就用修改用户的命令
[root@studyclub ~]# useradd test #组外用户
下次预告:
实例讲解权限
微信号|bjdream-1
Cloud研习社 ·