問題タブ [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.
security - UNIX アクセス制御は、どのようにして侵害の問題を引き起こす可能性がありますか?
システム管理者から、ファイルやディレクトリへのアクセス制御を設定するときは注意するようにアドバイスされています。彼は私に例を示し、私は混乱しました。これは、保護モード 730 のディレクトリに含まれる保護モード 644 (8 進数) のファイルです。つまり、次のことを意味します。
- ファイル: 110 100 100 (所有者、グループ、その他: rw- r-- r--)
- ディレクトリ: 111 011 000 (所有者、グループ、その他: rwx -wx ---)
この場合、どのようにファイルが危険にさらされる可能性がありますか?
file - ファイル記述子と開いているファイル
簡単な質問が 2 つあります。
2 つのファイル記述子が開いている同じファイルを指すのはいつですか?
開いている 2 つのファイルが同じ inode を指すのはいつですか?
また、これを説明するグラフ付きの優れたドキュメントがあれば、そのリンクを教えていただければ幸いです:)
ありがとう!
c - ファイルがシンボリック リンクかどうかを stat() を使用してどのように判断しますか?
基本的に、クラス用の UNIX ls コマンドのクローンを作成する必要があり、ほとんどすべてが機能しています。ファイルがシンボリック リンクかどうかを確認する方法がわかりません。のマニュアルページから、値が定義されstat()
ていることがわかります。mode_t
S_IFLNK
これは、ファイルがシンボリックリンクであるかどうかを確認しようとしている方法ですが、運が悪いです(注意、stbufはstat()
inodeデータを返すバッファです):
私のコードは常に印刷this is not a link
されますが、実際の ls コマンドがそう言っているので、上記のファイルがシンボリックリンクであることを知っています。さらに、シンボリックリンクを作成しました...
誰かが私が間違っているかもしれないことを見つけることができますか? 助けてくれてありがとう!
c++ - クアッドツリーのアウトオブコア実装
セカンダリ メモリ (ハードディスク) にクアッドツリー データ構造 (または単にツリーと言いましょう) を構築しようとしています。
そのための C++ プログラムがあり、fopen を使用してファイルを作成します。また、テッセラルコーディングを使用して、各セルを対応するコードで名前が付けられたファイルに保存し、ディスク上の1つのディレクトリに保存しています。
問題は、約 1,100 個のファイルを作成した後、fopen が NULL を返すだけで、新しいファイルの作成を停止することです。そのディレクトリに追加のファイルを手動で作成できますが、C++ を使用すると、それ以上のファイルを作成できません。
(ウィキペディアから) 32,000 である ext3 ファイルシステムの inode の最大制限については知っていますが、私のものはそれよりもはるかに少なく、ディスク上に手動でファイルを作成できることにも注意してください。fopenを介していないだけです。
また、非常に動的な四分木をディスクに保存する最良の方法に関するアイデアを本当に感謝しています(ノードを別々のファイルに配置する必要があり、四分木の深さは50である可能性があります)。
ネストされたディレクトリを使用することも 1 つのアイデアですが、ファイル システム上のリンクをたどってファイルにアクセスするため、パフォーマンスが低下すると思います。
ありがとう、ニマ
unix - Maximum file size given a particular inode structure?
Suppose a UNIX file system has some constraints--say, 2 KB blocks and 8B disk addresses. What is the maximum file size if inodes contain 13 direct entries, and one single, double, and triple indirect entry each?
unix - Iノードの概念を理解する
Inodesの概念に関するリンクを参照しています
私は部分的に混乱しています:
- 12 個のダイレクト ブロック ポインタ
- 1 つの間接ブロック ポインタ
- 1 つの double 間接ブロック ポインター
- 1 つのトリプル間接ブロック ポインター
この図では、各ポインターが 32/64 ビットであることが示されています。
- [クエリ]: これらの値はなぜ、どのように推測されるのですか? つまり、具体的に 32 ビットまたは 64 ビットのポインターしかないのはなぜですか?
図には、各ポインター {4 バイト/8 バイト} に対して 1 つのデータ ブロック {8 KB} が示されています。
- [クエリ]: これは実際にどのように機能しますか? つまり、8*1024 バイト / 8 バイト = 1024 バイトですか? 8KB ブロックの 8 バイト ポインターを持つ背後にあるロジックは何ですか?
macos - iノードを維持しながらシンボリックリンクターゲットを変更する方法
通常、シンボリックリンクターゲットを変更するには、最初にファイルのリンクを解除してから、新しいターゲットパスでシンボリックリンクを再作成します。ただし、新しいiノード番号が割り当てられます。
update_target_for_symlink()
たぶん、関数を備えたプライベートMac APIがあるので、iノードは同じままでいられますか?
あなたが私がそれを何のために必要とするのか疑問に思う場合に備えて..ファイルマネージャ。私はこれがまったく可能であるとは思えません。とにかくそれが面白いのです。
linux - Linuxでファイルへの移動または名前変更を検出するための最良のアプローチは?
いくつかの解決策はおそらく Windows に適用できる可能性がありますが、私は Windows OS に詳しくないため、これは Linux に焦点を当てたものになります。
私の知る限り、Unix ファイル システムにはすべて、ファイル システムのメタデータと「ファイル」が格納される inode の概念があります。したがって、名前が変更されたり移動されたりしたファイルを追跡するために、iノード番号と追加情報を使用できるかどうか疑問に思っていますか?
私が提案していたのは、ファイル名/パスのデータベース、それが配置されているディスク/ドライブ、i ノード番号、そして最後にある種のチェックサム (sha-1) を作成する初期スキャンを行うことでした。
これにより、システムは inode 番号を使用して、ファイルが移動または名前変更されたかどうかをすばやく検出できるようになり、チェックサムを追跡して、実際に同じファイルであるかどうかを確認できます。
このスキームにはいくつかの問題がある可能性があります。
- ファイルが変更されてから移動/名前変更される可能性がありますが、チェックサムが一致しないため、ファイルを検出できませんでした。
- 一部の (ほとんどの?) アプリケーションは、ファイルを変更するときに新しい一時ファイルを作成し、それを現在のファイルに切り替えるため、ファイルが最後に変更されていない場合でも inode は一致しません。
- 各ファイル システムの inode はそのファイル システムに固有であるため、どのデバイス/ファイル システム上にあるかを保存する必要があります。
- ハードリンクに対処する必要がある
ここで忘れている他の問題があるかどうか疑問に思っていますか? iノードを使用して、移動または名前変更されたファイルをすばやく追跡し、チェックサムを追跡して、実際に同じファイルであることを確認できるようにしたいと考えていました。
filesystems - i ノードあたりのバイト数は?
あまり大きくない (4kb、8kb など) 非常に多数のファイルを作成する必要があります。私のコンピューターでは、すべての inode を最大 100% 使用するため、これ以上ファイルを作成できません。
(ファイルを削除し始めたので、現在 67% です)
ノードあたりのバイト数は、私のファイルシステム (ext4) では 256 です。
この値を 128 未満でも非常に低く設定することは可能でしょうか (再フォーマット中)。はいの場合、どの値を使用すればよいですか? どうも
linux - データをコピーせずに大きな mmap() ファイルにページを挿入する
mmap() で開いた大きな (マルチ GB) ファイルの先頭近くに空白ページを挿入する方法があるかどうか疑問に思っています。最後に 1 つか 2 つのページを追加し、memcpy() を使用してすべてを前に進めることは明らかに可能ですが、これはすべてのページを汚し、最終的にディスクにフラッシュするときに非常に長い時間を必要とします。
ソリューションには、カスタマイズされたファイルシステムとページテーブルの手動操作との間の複雑な調整が必要になると思います.inodeにブロックを追加し、これを反映するためにVMM内のキャッシュされたページを何らかの方法で更新し、ページテーブルを何らかの方法でスウィズルしますマッチ。これは自明ではないように聞こえるので、もっと良い方法があるのではないかと思います。
これは、Linux でのメモリとファイル操作に関するやや深い質問を意図したものですが、他のシステムでこれがどのように行われるかを聞いてうれしいです。コピーをより効率的にする回避策には特に興味はありませんが、再マッピングが必要でディスク IO を回避する手法は良い出発点になるでしょう。