前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux文件和目录的属性详解

linux文件和目录的属性详解

作者头像
老油条IT记
发布2020-03-20 11:08:07
1.9K0
发布2020-03-20 11:08:07
举报

1.Linux文件

#概述

代码语言:javascript
复制
#1.linux里一切皆为文件
#2.Linux系统中的文件或目录的属性主要包括:inode(索引节点)、文件类型、权限属性、链接数、所属用户和用户组、最近修改时间等内容

#例如:执行ls -lhi ,会出现10列内容

代码语言:javascript
复制
[root@cots3 ~]# ls -lhi
total 28K
33865597 -rw-r--r--  1 root root  104 Feb 29 09:43 1.txt
33865598 -rw-r--r--  1 root root   13 Feb 29 09:44 2.txt
33619589 -rwxr-xr-x  1 root root  187 Mar  2 23:44 3.sh

#10列内容讲解

代码语言:javascript
复制
第一列:inode索引节点编号(唯一的,像人的身份证)
第二列:文件类型及权限(共10个字符,第一字符为类型,后9个为文件权限)
第三列:硬链接数
第四列:文件或目录所属的用户
第五列:文件或目录所属的组
第六列:文件或目录的大小
第七、八、九列:时间戳
第十列:实际的文件或目录名

#上图

2.文件属性详细讲解

#2.1索引节点:inode

#概述

代码语言:javascript
复制
#1.indoe,中文意思是索引节点(index node)。在每个Linux存储设置或存储设备的分区被格式化为ext4文件系统之后,一般会生成两个部分,第一部分时inode,第二部分时block

#2.block是真正用来存储实际数据的,例照片,视频等普通文件数据
   inode是用来存储这些数据的属性信息(也就是ls -l的结果),inode属性信息包括不限于文件大小、属主(用户)、归属的用户组、文件权限、文件类型、修改时间,但是inode里面不包含文件名

#3.inode除了记录文件属性的信息外,还会为每个文件信息索引,操作系统就会根据inode的值最快的找到相对应的文件实体

#读文件的过程

代码语言:javascript
复制
文件名>inode>block
#读文件的时候首先找到文件名,然后找到文件的inode,文件许可后就可以看block数据了

#例子:

# 比如一本书,整本书就相当于一块磁盘或分区,书的前几页目录就相当于inode。每一页的文字、图片相当于一个block

#扩展:Linux组成

#Linux文件系统由三分部组成:文件名,inode,block(真正存数据)  

#使用stat命令查看inode信息

#stat:显示文件和文件系统状态

代码语言:javascript
复制
[root@cots3 ~]# stat /etc/passwd
  File: ‘/etc/passwd’
  Size: 1032          Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 17042355    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-03-04 03:37:21.549000201 -0500
Modify: 2020-02-29 20:50:57.126146678 -0500
Change: 2020-02-29 20:50:57.126146678 -0500
 Birth: -

#查看目录的inode号

代码语言:javascript
复制
[root@cots3 ~]# ls -di /etc/
16777281 /etc/

#inode的大小

#inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域

一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息

#查看磁盘空间是否满了,由inode是否满了和block是否满了决定的,任何一个满了,都无法存放东西

#磁盘满的特征(no space on device left)

#查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令

代码语言:javascript
复制
[root@cots3 ~]# df -i
Filesystem               Inodes IUsed   IFree IUse% Mounted on
/dev/mapper/centos-root 8910848 33678 8877170    1% /
devtmpfs                 230105   396  229709    1% /dev
tmpfs                    233163     1  233162    1% /dev/shm
tmpfs                    233163   723  232440    1% /run
tmpfs                    233163    16  233147    1% /sys/fs/cgroup
/dev/sda1                524288   327  523961    1% /boot
tmpfs                    233163     1  233162    1% /run/user/0

#查看磁盘的使用量

代码语言:javascript
复制
[root@cots3 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  2.2G   15G  13% /
devtmpfs                 899M     0  899M   0% /dev
tmpfs                    911M     0  911M   0% /dev/shm
tmpfs                    911M  9.5M  902M   2% /run
tmpfs                    911M     0  911M   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
tmpfs                    183M     0  183M   0% /run/user/0

#扩展:linux中ctime,mtime,atime的区别

代码语言:javascript
复制
ctime: 改变时间(change time)
mtime:修改时间(modification time)
改变和修改之间的区别在于是改文件的属性还是更改它的内容。chmod a-w myfile,那么这是一个改变
  echo foo >> myfile,那么这是一个修改
改变是文件的索引节点发生了改变;修改是文本本身的内容发生了变化

atime: 访问时间(access time)
访问时间是文件最后一次被读取的时间。因此阅读一个文件会更新它的访问时间,但是它的改变时间和修改时间并没有变

ls -lc filename   列出文件的ctime
ls -lu filename   列出文件atime
ls -l  fimename   列出文件的mtime

#inode和block的小结

代码语言:javascript
复制
有关inode的小结
      1、磁盘被分区并格式化为ext4文件系统后会生成一定数量的inode和block
      2、inode称为索引节点,它的作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)
      3、ext3/ext4文件系统的block存放的是文件的是实际内容
      4、inode是磁盘上的一块存储空间,非启动分区inode默认大小256字节
      5、inode的表现是形式一串数字,不同的文件对应的inode(一串数字)在文件系统里是唯一的
      6、inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口
      7、ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个block
      8、ext3/ext4文件系统下,正常一个文件占用且只能占用一个inode(相当于人和身份证)
      9、block是用来存储实际数据的,每个block的大小一般有1K、2K、4K几种,其中引导分区等为1K,其他普通分区多为4K
     10、查看inode的大小和总量: 
     11、查看inode的总量和使用量命令 df -i
     12、查看文件的inode信息方法
     13、如何生成及指定inode大小
                   格式化命令:mkfs.ext4 -b 2048 -l 256 /dev/sdb

有关block的知识小结
      1、磁盘读取数据是按block为单位读取的
      2、一个文件可能占用多个block,但是每读取一个block就会消耗一次磁盘I/O
      3、如果要提升磁盘IO性能,那么就要尽可能一次性读取数据尽量的多
      4、一个block只能存放一个文件的内容,无论内容有多小,如果block默认是4K大小,那么存放一个1K的文件,剩余3K就不能存放别的文件,只能浪费了
      5、block并非越大越好,block太大对于存放小文件就会浪费磁盘空间,例如:1000K的文件,block大小为4K,占用250个Block,如果block默认为1K,则需要占1000个block,访问效率谁更高? 当然是4K那个。消耗IO分别为250和1000次
      6、根据业务需求,确定默认的block大小,如果是大文件(大于16K) 一般设置block大一点,小文件(小于1K)一般设置block小一点
       7、block太大,例如4K,文件都是0.1K的,太浪费磁盘空间,但是访问性能高
       8、block太小,例如1K,文件都是1000K的,消耗大量磁盘IO
       9、block大小设置也是格式化分区时候确定的,命令mkfs.ext4 -b 2048 -l 256 /dev/sdb (-b 是block大小,-i是inode大小)
       10、一般企业里文件都会比较大,(一般大于4K).block设置大一些会提升磁盘访问效率
      11、ext3/ext4文件系统,一般设置为4K   

#2.2.文件类型

#概述: 在linux系统中,可以说一切(包括目录、普通文件、设备文件等)皆为文件。文件类型包含有普通文件、目录、字符设备文件、块设备文件、符号链接文件、管道文件等等

#在ls -l 显示文件属性内容后,第一列的第一个字符就是用来区分文件类型的

#类型种类

代码语言:javascript
复制
d(directory) :    #表示一个目录
-(regular file):  #表示一个普通文件
l(link):           #表示一个符合链接文件
b(block):         #表示块设备和其他外围设备,是特殊类型的文件
c(character):     #表示字符设备文件
s(socket):        #表示socket文件
p(name pipe):     #表示管道文件

#查找文件类型参数命令 find /-type b/p/c

#例子:

代码语言:javascript
复制
#查找管道文件
[root@cots3 ~]# find / -type p
/run/dmeventd-client
/run/dmeventd-server
/run/systemd/inhibit/1.ref
/run/systemd/sessions/1.ref
/run/systemd/initctl/fifo
#查找块设备文件
[root@cots3 ~]# find / -type b
/dev/dm-1
/dev/dm-0
/dev/sr0
/dev/sda2
/dev/sda1
/dev/sda

#普通文件(regular file)

代码语言:javascript
复制
[root@cots3 ~]# ls -l 1.txt 
-rw-r--r-- 1 root root 104 Feb 29 09:43 1.txt

#可以通过ls -l来查看hosts的属性,可以看到第一列内容-rw-r--r--,值得注意的是第一个符号是-(英文字符减号),在linux中,以这样的字符开头的文件就表示普通文件 这些文件一般都是用相关的应用程序或系统命令创建。比如touch、cp、tar、echo、cat、>、>> 等工具命令。普通文件的删除方式可以使用rm命令

#普通文件(regular file):第一个属性为“-”, 按照文件内容,又大略可以分为 :

代码语言:javascript
复制
1、纯文本文件(asell ):文件内容可以直接读到数据,例如:字母、数字等,可以用cat命令读文件,比如配置文件几乎都是这种类型的
2、二进制文件(binary):linux中的命令程序就是属于这种格式。例如cat命令就是一个二进制文件
3、数据格式文件(data):有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件

#数据格式的例子: 例如linux在用户登录时,都会将登陆的数据记录在/var/log/wtmp(last命令的数据库文件)那个文件内,该文件是一个数据文件,通过last命令读出来(last 查看用户登录信息)。cat命令会读出乱码,因为他属于一种特殊格式的文件。lastlog(/var/log/lastlog)

#两图命令讲解   last:查看用户登录信息 。 /var/log/wtmp 数据文件   lastlog:显示最近登陆的用户信息。 /var/log/lsatlog数控文件

#字符设备或块设备文件 #如果进入/dev/目录,列一下文件。会看到类似如下的内容:

代码语言:javascript
复制
[root@cots3 ~]# ls -la /dev/tty
crw-rw-rw- 1 root tty 5, 0 Mar  4 22:07 /dev/tty

可以看到/dev/tty的属性是crw-rw-rw-。注意前面第一个字符是c,这表示字符设备文件。字符设备就是串行端口的接口设备

#再看下面这个

代码语言:javascript
复制
[root@cots3 ~]# ls -la /dev/sda
brw-rw---- 1 root disk 8, 0 Mar  4 22:07 /dev/sda

可以看到/dev/sda的属性brw-rw-----,注意前面的第一个字符是b。这表示块设备,块设备就是存储数据供系统及程序访问的接口设备。如硬盘、光驱等都属于块设备 创建一个字符设备 mknod oldbiy c 5 1 c 指字符设备 5 是该设备在majorh中定义的标记 1 表示第一个子设备

#链接文件

代码语言:javascript
复制
find /etc/ -type l | xargs ls -l 查看/etc下的链接文件

#2.3.链接数

代码语言:javascript
复制
在linux系统中,链接可分为两种:
  一种为硬链接(hard link),另一种为软链接或符号链接(symblic link or soft link)。
  ln这个命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建的是硬链接。
  如果使用ln -s创建链接则为软链接

#创建的格式

代码语言:javascript
复制
硬链接:ln 源文件 目标文件
软链接:ln -s 源文件 目标文件 (目标文件不能事先存在)

#硬链接

代码语言:javascript
复制
定义:
    1、 硬链接是指通过索引节点(inode)来进行链接。
    2、在linux文件系统中,多个文件名指向同一个索引节点(inode)是正常且允许的。这种情况的文件就称为硬链接。
         提示:硬链接文件就相当于文件的另一个入口,另一个通道。
    3、硬链接的作用之一:
         是允许一个文件拥有多个有效路径名(多个入口),这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据)。
    4、为什么一个文件建立了硬链接就会防止数据误删呢?
        因为文件系统(ext2)的原理是,
         只要文件的索引节点(index inode)还有一个以上的硬链接,只删除其中一个硬链接(即仅仅删除了该文件的链接指向)。并不影响索引节点本身和其它的链接(即数据文件实体并未被删除),
         只有当文件的最后一个链接被删除后,那个文件才是被删掉了

#硬链接的创建

代码语言:javascript
复制
[root@cots3 ~]# ln 1.txt 11.txt
[root@cots3 ~]# ls -lhi 1.txt 11.txt 
33865597 -rw-r--r-- 2 root root 104 Feb 29 09:43 11.txt
33865597 -rw-r--r-- 2 root root 104 Feb 29 09:43 1.txt

#硬链接知识总结

代码语言:javascript
复制
    1、具有相同inode节点号的多个文件是互为硬链接文件
    2、删除硬链接文件或者源文件任意之一,文件实体并未被删除
    3、只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除
    4、当所有的硬链接文件及源文件被删除后,在存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收
    5、硬链接文件就是文件的另一个入口,另一个通道(相当于教室的前门后门一样)
    6、可以通过给文件设置硬链接文件,来防止重要文件被删除
    7、通过执行命令“ln 源文件 硬链接文件”。即可完成创建硬链接
    8、硬链接是普通文件,因此可以用rm命令删除
    9、对于静态文件(没有进程正调用的文件)来讲,当对应硬链接数为0(i_link),文件就被删除,i_link的查看方法(ls -l 结果的第三列就是)
    10、创建时,不能跨分区

#软链接

代码语言:javascript
复制
软链接(soft link)也称为符号链接(symbolic link)。
linux里的软链接文件就类似于window系统中的快捷方式,
linux里的软链接文件实际上是一个特殊的文件,文件类型是l。

#软链接的创建

代码语言:javascript
复制
[root@cots3 ~]# ln -s /tools/apache2.2.17/ /tools/apache
[root@cots3 ~]# ls -ld /tools/apache
lrwxrwxrwx 1 root root 20 Mar  5 00:00 /tools/apache -> /tools/apache2.2.17/

#软链接知识总结

代码语言:javascript
复制
       1、软链接类似window的快捷方式
       2、软链接类似于一个文本文件,里面存放的是源文件的路径,指向源文件实体
       3、删除源文件,软链接文件依然存在,但是无法访问指向的源文件路径内容了
       4、失效的时候一般是白字红底闪烁提示
       5、执行命令 "ln -s 源文件 软链接文件",即可完成创建软链接(目标不能存在)
       6、软链接和源文件是不同类型的文件,也是不同的文件,inode好也不相同
       7、删除软链接文件的文件类型为(l),可以用rm命令删除

#扩展:Linux下文件删除的原理

代码语言:javascript
复制
Linux是link的数量誺控制文件删除的,只有当一个文件不存在任何link的时候,文件才会被删除,每个文件都有两个link计数器:i_count和i_link

#2.4.用户和组

#linux多用户多任务介绍:linux/unix是一个多用户、多任务的操作系统, #linux系统中用户角色划分:

代码语言:javascript
复制
linux系统中用户是分角色的,对linux系统来说,用户的角色是通过UID和GID识别的,特别是UID,在linux系统运维工作中,一个UID是唯一标识一个系统用户的账号(相当于我们的身份证)。
用户名相当于我们的名字
UID (User ldentify) 中文用户ID,相当于我们的身份证,在系统中是唯一的
GID (Group ldentify)中文组ID,相当于家庭或者学校

#用户

#当我们使用linux时,需要以一个用户的身份登入,一个进程也需要以一个用户的身份运行, 用户限制使用者或进程可以使用、不可以使用哪些资源

代码语言:javascript
复制
用户ID为32位,从0开始,但是为了和老式系统兼容 ,用户ID限制在60000以下

用户分为以下三种:
-root用户 (ID为0的用户为root用户)
-系统用户 (1-499)
-普通用户 (500以上) 权限很小

系统中的文件都有一个所属用户及所属组
使用id命令都可以显示当前用户的信息
使用passwd命令可以修改当前用户密码

相关文件

代码语言:javascript
复制
/ect/passwd -保存用户信息
/ect/shadow -保存用户密码
/ect/group -保存组信息
/etc/gshadow -保存组的密码信息

#/etc/passwd中每个字段的作用

#/etc/shadow结构

#创建、修改、删除用户

代码语言:javascript
复制
创建一个用户
命令useradd用以创建一个新用户
useradd+名字(如nash su)

这个命令会执行以下操作:
1.在/etc/passwd中添加用户信息
2.如果使用passwd命令创建密码,则将密码加密保存在etc/shadow中
3.为用户建立一个新的家目录/home/nash su
4.将/ect/skel中的文件复制到用户的家目录中
5.建立一个与用户用户名相同的组,新建用户默认属于这个同名组

命令useradd支持以下参数:
-d  家目录
-s  登陆shell
-u  user id
g   主族
-D  附属组(最多31个,用逗号分隔)
也可以通过直接修改/etc/passwd 的方式实现,但是不建议


修改用户信息
命令usermod用来修改用户信息
usermod+参数+你要修改的东西
usermod 参数  username

命令usermod支持以下参数
-l  新用户名
-u 新userid
-d 用户家目录位置
-g 用户所属主组
-G 用户所属附属组
-L 锁定用户使其不能登陆
-U 解除锁定

删除用户
命令userdel用以删除指定用户:
userdel nash su     (保留用户的家目录)
userdel -r nash su   (同时删除用户的家目录)
del是delete的简写
批量创建用户:
     for i in{1..50}
    do
       useradd user$i
 done 

#用户的相关文件

代码语言:javascript
复制
/etc/skel
/etc/login.defs 
/etc/default/useradd

#用户组

代码语言:javascript
复制
几乎所有操作系统都有组的概念,通过组,我们可以更加方便的归类、管理用户。一般来讲,我们使用部门、职能或地理区域的分类方式来创建使用组。
一每个组有一个组ID
二.组信息保存在/etc/group中
三.每个用户拥有一个主组,同时还可以拥有最多31个附属组

创建、修改、删除组
命令groupadd用以创建组:
      groupadd+组名
命令groupmod用以修改组信息:
      groupmod -n newname 原来的组name     修改组名
      groupmod -g newGid   oldGid           修改组ID
命令groupdel用以删除组:
      groupdel +组名

#2.5.文件大小

代码语言:javascript
复制
#给1.txt创建一个软链接
[root@cots3 ~]# ln -s  1.txt aa.txt
[root@cots3 ~]# ls -l aa.txt 
lrwxrwxrwx 1 root root 5 Mar  4 23:29 aa.txt -> 1.txt

#提示:创建软链接的时候,文件的大小不一样

#2.6.时间戳

#7、8、9三列是时间(默认是修改时间)

代码语言:javascript
复制
modify 修改 对应的是 -mtime 一般是修改文件内容时候改变
change 改变时间 -ctime 文件属性改变
access 访问时间 -atime 访问文件内容时候改变

#演:时间的变化

代码语言:javascript
复制
[root@cots3 ~]# touch guo.txt
[root@cots3 ~]# stat guo.txt 
  File: ‘guo.txt’
  Size: 0             Blocks: 0          IO Block: 4096   regular empty file
Device: fd00h/64768d    Inode: 33574991    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-03-04 23:26:28.523104035 -0500
Modify: 2020-03-04 23:26:28.523104035 -0500    #开始时间
Change: 2020-03-04 23:26:28.523104035 -0500    #开始时间
 Birth: -
[root@cots3 ~]# echo aa > guo.txt 
[root@cots3 ~]# stat guo.txt 
  File: ‘guo.txt’
  Size: 3             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33574991    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-03-04 23:26:28.523104035 -0500
Modify: 2020-03-04 23:26:41.455206922 -0500      #时间变了
Change: 2020-03-04 23:26:41.455206922 -0500      #时间变了
 Birth: -

#如果想要格式化属性时间的话就使用

代码语言:javascript
复制
[root@cots3 ~]# ls -l --time-style=long-iso 1.txt 
-rw-r--r-- 1 root root 104 2020-02-29 09:43 1.txt

#2.7.文件名

#文件名不在inode里,而是在上级目录的Block里

关文件

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.Linux文件
  • 2.文件属性详细讲解
    • #2.1索引节点:inode
      • #2.2.文件类型
        • #2.3.链接数
          • #2.4.用户和组
            • #2.5.文件大小
              • #2.6.时间戳
                • #2.7.文件名
                相关产品与服务
                对象存储
                对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档