问题标签 [inode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4267 浏览

security - UNIX 访问控制如何产生妥协问题?

我的系统管理员建议我在设置文件和目录的访问控制时要小心。他给了我一个例子,我很困惑,这里是:一个保护模式为 644(八进制)的文件包含在一个保护模式为 730 的目录中。所以它的意思是:

  • 文件:110 100 100(所有者、组、其他:rw- r-- r--)
  • 目录:111 011 000(所有者、组、其他:rwx -wx ---)

在这种情况下如何破坏文件?

0 投票
1 回答
1547 浏览

file - 文件描述符和打开文件

我有两个简单的问题:

两个文件描述符什么时候指向同一个打开的文件?

两个打开的文件什么时候指向同一个 inode ?

另外,如果您碰巧有一些很好的文档,其中包含解释这一点的图表,如果您向我展示它的链接,我将非常感激 :)

谢谢!

0 投票
1 回答
25396 浏览

c - 您如何使用 stat() 确定文件是否为符号链接?

我基本上必须为一个类编写一个 UNIX ls 命令的克隆,而且我几乎已经完成了所有工作。我似乎不知道该怎么做的一件事是检查文件是否是符号链接。从 的手册页中stat(),我看到mode_t定义了一个值,S_IFLNK

这就是我试图检查文件是否是符号链接的方式,没有运气(注意,stbuf 是将stat()inode 数据返回到的缓冲区):

我的代码总是打印this is not a link,即使它是,我知道所述文件是一个符号链接,因为实际的 ls 命令是这样说的,而且我创建了符号链接......

谁能发现我可能做错了什么?谢谢您的帮助!

0 投票
4 回答
784 浏览

c++ - 四叉树的核心实现

我正在尝试在辅助存储器(硬盘)上构建四叉树数据结构(或者我们只是说一棵树)。

我有一个 C++ 程序可以这样做,我使用 fopen 来创建文件。此外,我正在使用 tesseral 编码将每个单元格存储在一个文件中,该文件以其相应的代码命名,以将其存储在磁盘上的一个目录中。

问题是在创建大约 1,100 个文件后,fopen 只返回 NULL 并停止创建新文件。我可以在该目录中手动创建更多文件,但使用 C++ 无法创建任何其他文件。

我知道 ext3 文件系统上 inode 的最大限制是(来自 Wikipedia)32,000,但我的要少得多,还要注意我可以在磁盘上手动创建文件;只是没有通过 fopen。

另外,我真的很感激关于在磁盘上存储一个非常动态的四叉树的最佳方法的任何想法(我需要将节点放在单独的文件中,并且四叉树的深度可能为 50)。

使用嵌套目录是一种想法,但我认为它会降低性能,因为遵循文件系统上的链接来访问文件。

谢谢,尼玛

0 投票
3 回答
39002 浏览

unix - 给定特定 inode 结构的最大文件大小?

假设一个 UNIX 文件系统有一些限制——比如说,2 KB 块和 8B 磁盘地址。如果 inode 包含 13 个直接条目,并且每个包含一个单个、两个和三个间接条目,那么最大文件大小是多少?

0 投票
3 回答
25043 浏览

unix - 了解索引节点的概念

我指的是关于 Inodes 概念的链接

我对部分感到困惑:

  1. 12个直接块指针
  2. 1 个单间接块指针
  3. 1个双间接块指针
  4. 1个三重间接块指针

现在该图显示每个指针都是 32/64 位。

  • [查询]:为什么以及如何推断这些值?我的意思是为什么专门只有 32 位或 64 位指针?

该图显示,每个指针 {4 bytes/8 bytes} 一个数据块 {8 KB}

  • [查询]:这实际上是如何解决的?即 8*1024 字节 / 8 字节 = 1024 字节?8KB 块的 8 字节指针背后的逻辑是什么?
0 投票
3 回答
1346 浏览

macos - 如何在保留 inode 的同时更改符号链接目标

通常要更改符号链接目标,首先将取消链接文件,然后使用新目标路径重新创建符号链接。但是,它将被分配一个新的 inode 编号。

也许有一个带有update_target_for_symlink()函数的私有Mac api,所以inode可以保持不变?

如果您想知道我需要它来做什么......文件管理器。我怀疑这根本不可能。无论如何,这就是让它变得有趣的原因。

0 投票
3 回答
1579 浏览

linux - 在 Linux 中检测文件移动或重命名的最佳方法是什么?

一些解决方案可能适用于 Windows,但是我不熟悉 Windows 操作系统,所以这将以 Linux 为重点。

据我了解,Unix文件系统都有inode的概念,就是存储文件系统元数据和“文件”的地方。因此,我想知道是否可以使用带有一些附加信息的 inode 编号来跟踪重命名或移动的文件?

我打算做的是进行初始扫描,该扫描将创建一个包含文件名/路径、它们所在的磁盘/驱动器、它们的 inode 编号以及最后某种校验和 (sha-1) 的数据库。

这将使系统能够使用 inode 编号快速检测文件是否被移动或重命名,然后它会跟进校验和以检查它是否实际上是同一个文件。

我可以看到这个方案的一些可能的问题:

  1. 文件可以被修改然后移动/重命名,这将无法检测到它,因为校验和不匹配。
  2. 一些(大多数?)应用程序在修改文件时会创建一个新的临时文件,然后用当前文件切换它,因此即使文件最终未修改,inode 也不会匹配....
  3. 需要存储它所在的设备/文件系统,因为每个文件系统上的 inode 对于该文件系统都是唯一的。
  4. 需要处理硬链接

我想知道是否还有其他我在这里忘记的问题?我希望能够使用 inode 快速追踪哪些文件被移动或重命名,然后跟进校验和以确认它实际上是同一个文件。

0 投票
3 回答
66006 浏览

filesystems - 每个 inode 有多少字节?

我需要创建大量不是很大的文件(如 4kb、8kb)。这在我的计算机上是不可能的,因为它占用了所有 inode 高达 100% 并且我无法创建更多文件:

(我开始删除文件,这就是为什么现在是 67%)

在我的文件系统(ext4)上,每个节点的字节数为 256

我想知道是否可以将此值设置得非常低,甚至低于 128(在重新格式化期间)。如果是,我应该使用什么值?谢谢

0 投票
1 回答
493 浏览

linux - 将页面插入大型 mmap() 文件而不复制数据

我想知道是否有一种方法可以在我用 mmap() 打开的大型(多 GB)文件的开头附近插入空白页。显然,可以在末尾添加一两页,然后使用 memcpy() 将所有内容向前移动,但这会弄脏每一页,并且在最终刷新到磁盘时需要很长时间。

我猜测解决方案需要在自定义文件系统和页表的手动操作之间进行一些复杂的协调:向 inode 添加一个块,以某种方式更新 VMM 中的缓存页以反映这一点,然后以某种方式将页表调整为匹配。这听起来很重要,这让我想知道是否有更好的方法。

这是一个关于 Linux 上的内存和文件操作的有点深奥的问题,尽管我很高兴听到如何在其他系统中做到这一点。我对涉及使复制更有效的解决方法不是特别感兴趣,尽管需要重新映射但避免磁盘 IO 的技术将是一个好的开始。