inode

linux 在整个架构上可以看作是三层:
1.底层代码, (引导层strip) 跟硬件沟通的那一层的代码(可能是汇编+c), 驱动底层的;
strain: n./v. 拉紧, 张力, 气质, 风格, 乐曲(这个词的意思很多): 

  1. 中间层代码, OS层,用来管理文件系统,内存,作业调度等. 里面的实现包括很多文件,或 各种各样的数据结构, 数据库等等,
    (数据库也是由分散的文件构成的吧), 其中inode等等就是在这里支撑用户接触层的东东

  2. 表现层代码, 就是我们所看到的, 我们所接触的那些东西, 包括目录结构, 文件等等.


linux内核用 数字 管理文件系统, 内存, 进程等等, 是为了 方便, 简洁. 因为文件名称, 进程名称是很长很多 很占字节的东西, 让内核
去接触这些东西, 很累! 通过这些 实体的编号, id来管理它们就 撇脱 多了.

进程 通过 pid 来管理, 进程名称是pid的别名;
文件 通过 inode来管理, 文件名称是inode的别名;


inode的读法:
i-node : [ai ' n2ud]: i: 可以认为是id, identifier , 所以读成: [ai] , node是节点, 代表着对应文件的实体.


参考这篇关于inode的文章

linux上的inode编号是索引节点的编号。理解inode,要从文件储存说起。

  文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
** (如果把硬盘当作 一把称, 就是说, 它的最小刻度, 最小能够称出的重量 , 最大精度, 最多能够称出的, "只能打得起...多重?")

 这种由多个扇区组成的"块",是文件存取的最小单位。所以 即使文件内容只有1个byte

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,(需要折中, 在效率和磁盘利用率的矛盾上折中!) 最常见的是4KB,即连续八个 sector组成一个 block。

  文件数据都储存在"块"中,那么很显然,还必须找到一个地方储存文件的元信息(metadata, 就是文件的"属性, 描述信息"!) ,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。(区域叫inode, 区域的编号叫inode 编号, inode号码)!

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。 对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:

首先,系统找到这个文件名对应的inode号码;(对应的文件或数据库表: 比如叫做: "文件名-inode表")
其次,通过inode号码,获取inode信息;
最后,根据inode信息,找到文件数据所在的block,读出数据。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

二、inode的内容
inode包含文件的元信息,具体来说有以下内容:
  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:
stat example.txt

三、inode的大小

  inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

  每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

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

  代码如下:

  df -i

  查看每个inode节点的大小,可以用如下命令:

  代码如下:

  sudo dumpe2fs -h /dev/hda | grep “Inode size”

  由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

使用ls -i命令,可以看到文件名对应的inode号码:
ls -i example.txt

----------------------------------------- 什么叫dirent?
LINUX系统下的一个头文件,在这个目录下/usr/include
为了获取某文件夹目录内容,所使用的结构体。
引用头文件#include
结构体说明
编辑
struct dirent
{
long d_ino; /* inode number 索引节点号 / inode: 表示区域, inode number才是节点号.
off_t d_off; /
 offset to this dirent 在目录文件中的偏移 /
unsigned short d_reclen; /
 length of this d_name 文件名长 /
unsigned char d_type; /
 the type of d_name 文件类型 /
char d_name [NAME_MAX+1]; /
 file name (null-terminated) 文件名,最长256字符 */
}

五、目录文件

  Unix/Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。

  目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

  ls命令只列出目录文件中的所有文件名:

  代码如下:

  ls /etc

  ls -i命令列出整个目录文件,即文件名和inode号码:

  代码如下:

  ls -i /etc

  如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。

  代码如下:

  ls -l /etc

----------------------------------- 软链接和硬链接?
目的: 都是为了使用的方便. (如同一个人, 可以有多个名字, 父母叫的乳名, 长辈叫的小名, 同事叫的书名, 下属叫的尊称等等)

表现: 都是多个名字对应着同一个inode. inode: 文件名 = 1:N 是1对多的关系!

语法: ln 源文件 目标文件.
ln -s 源文件或目录名 目标文件或目录

    << 根据 源和目标, 就可以确定 哪个是依赖, 那个是被依赖..  "源文件" 是最开始最根本被依赖的东西!)
        源文件就是 原始 文件>>

区别: 硬链接, 各个文件的内容都相同! 都是真正的file data! 彼此之间的地位是相同的, 没有依赖性, 删除一个, 不影响另一个!
硬链接的主要目的是: 为了防止对重要文件的"误删". 有些 : "类似" 复制备份, 但是不是复制 备份!
硬链接的限制: 只能对文件, 不能对目录 ! 创建硬链接; 只能在同一分区内创建...

    软链接,  两个文件的内容不同.  ln -s  A  B,  就是 A文件是源文件, B依赖A,  A是源, B是目标文件, 
            A是包含真正的内容, B的内容是A的路径,  对B的访问将跳转到对A的访问.    
            
            也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。      这就允许符号链接(经常简写为symlinks)指向位于其他分区、甚至是其他网络硬盘上的某个文件

----------------------------------------------------------软链接和硬链接? (完)

八、inode的特殊作用

  由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。

  1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。

  2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。

  3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

  第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的inode则被回收。

  九、实际问题

  在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。

  查找原因:

  /data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。

  解决方案:

  1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。

  2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:

  ln -s /opt/newcache /data/cache

,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录),这里的2是父目录对其的“硬链接”和当前目录下的".硬链接“。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值