Linux文件编程1-基本概念

文件属性信息

“Linux系统中万物皆文件”,当我们进入家目录并键入命令:

ls -l

终端会输出目录下文件的一些信息。但是在这些信息中,作为小白的我只能看出来,输出中包含时间文件名,其余的项就不知道代表什么了。

(base) torch@torch:~$ ls -l
total 20
drwxr-xr-x 28 torch torch 4096 Aug 16 16:57 anaconda3
drwxr-xr-x 6 torch torch 4096 Aug 21 13:43 code
drwxrwxr-x 13 torch torch 4096 Nov 18 2022 opencv
drwxr-xr-x 2 torch torch 4096 Mar 18 18:36 proxy
drwxr-xr-x 2 torch torch 4096 May 19 09:17 virtualenv

我们以输出中的第二行为例:

drwxr-xr-x 28 torch torch 4096 Aug 16 16:57 anaconda3

从左到右,字符的意义依次是:

字符意义
d文件类型
rwx文件所有者权限
r-x文件所属用户组权限
r-x其他用户权限
28连接数
torch所属用户
torch所属用户组
4096文件大小
Aug 16 16:57文件最新修改日期
anaconda3文件名

这其中有一些名词需要解释和扩充,我们整理如下

文件类型

其中,我们经常会去操作的是普通文件和目录文件。以后的重心也会放在普通文件和目录文件上。如果对其他文件类型不清楚也没关系,用到的很少。

类型解释
-普通文件
d目录文件
b硬盘、光驱等块设备文件
c光猫、串口设备等字符设备文件
l链接文件
p管道文件
s套接口文件/数据接口文件

文件所有者与文件所属用户组

文件所有者默认情况下是文件创建者,所属用户组为文件创建者所属的组。

权限

虽然普通文件和目录文件的权限种类和代表字符相同,但是却代表着不同的含义1

类型文件权限目录权限
r可读可查看目录下的文件
w可写可以对目录内容进行创建、删除和重命名
x可执行可以进入目录

奇怪的40962

可以看到,我们的目录文件大小都是4096B,但是我们的目录中明明存放了不同的东西,不应该一样大呀?而且这4096B也就是4kb是不是太小了?值得注意的是,我们的目录文件的大小并不表示该目录内所有文件大小的总和,而是该目录的i节点和目录下所有的文件名字符的大小(这么说也不准确,但是可以这么理解)。文件名可以理解,i节点又是啥?这个后面说。总之,目录文件所包含的信息总共就这两部分,其实占不了多大的空间,所以不会像我们在windows中看目录属性那样显示大小有几百兆。但是,即使是这样,也不应该相等,都是4kb呀?这就是另一个问题了,涉及到linux系统文件存取的最小单位——。这个最小存储单元的存在意味着,linux系统中的文件最小也的是4kb,而我们的目录,i节点占用的空间很小,一般是128B或256B,主要的空间都用在记录文件名上了,只要该目录下的文件名没有多到一定程度,突破了一个的记录限制,那么这个目录文件的大小就只能是4096B。

i节点

上面一节中,我们有说到目录中包含一个i节点。其实linux系统中的所有文件都有一个i节点(索引节点,index node)。它的具体内容如下:

内容解释
i节点号在系统中该文件的唯一编号,是系统访问文件的途径
文件类型——————
权限——————
文件字节数——————
uid文件拥有者
gid文件所属组
文件时间戳包含i节点变动时间、文件内容变动时间、最近一次无变动访问时间
硬链接数该文件的别名数量
储存位置存放该文件的的位置

可以看到,文件的i节点中并不包含文件名的信息,我们在上一节中也说到过,文件名信息是包含在目录文件中的。i节点是计算机查找文件的途径,文件名只是方便我们人类记忆的符号,那当我们按照文件名去操作文件时,系统是如何将文件名与文件的i节点号对应的呢?

目录文件

我们之前说到,目录文件由i节点包含的文件名两部分组成,其实目录也可以像普通文件一样被打开。我们在终端中键入以下命令

vim anaconda3/

获得如下输出:

" ============================================================================
" Netrw Directory Listing (netrw v156)
" /home/torch/anaconda3
" Sorted by name
" Sort sequence: [/]KaTeX parse error: Undefined control sequence: \< at position 2: ,\̲<̲core\%(\.\d\+\)…,.c , c ˙ p p ,\.cpp ,c˙pp,~=* , ∗ , o ˙ ,*,\.o ,,o˙,.obj , i ˙ n f o ,\.info ,i˙nfo,.swp , b ˙ a k ,\.bak ,b˙ak," Quick Help: :help -:go up dir D:delete R:rename s:sort-by x:special
" ==============================================================================
…/ ./
bin/
compiler_compat/
conda-meta/
condabin/
doc/
envs/
etc/
include/
lib/
libexec/
licensing/
man/
mkspecs/
phrasebooks/
pkgs/
plugins/
qml/
resources/

可以看到,其实这个目录文件中的文字内容就是该目录下所包含的文件名称。而实际上,这些输出已经被vim处理过了,实际的内容不只是文件名,还有文件名所对应的i节点号。文件名与i节点号构成了一个查询列表,当我们通过文件名操作文件时,计算机就可以通过查询列表找到文件的i节点号来完成操作。而这个查询列表就保存在目录文件中。


  1. Linux 实操篇⑤(组管理:文件所有者、所属组、其他组;权限管理:rwx 权限详解 0-9 位说明 、修改文件权限 chmod、修改文件/目录所有者 chown、修改文件/目录所在组 chgrp) ↩︎

  2. Linux下为什么目录的大小总是4096 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值