查看原文
其他

Linux文件与目录管理(7)

Cloud研习社 Cloud研习社 2023-06-06

今天开始进入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 #组外用户


下次预告:

实例讲解权限


新手应知:
    尝鲜Rocky Linux
《Linux基础及进阶》:
    005 - Linux文件与目录管理(2)
    006 - Linux文件与目录管理(3)
    007 - Linux文件与目录管理(4)
    008 - Linux文件与目录管理(5)
    009 - Linux文件与目录管理(6)

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

微信号|bjdream-1


Cloud研习社 · 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存