/homeディレクトリを別のパーティションに変更しましたが、そのパーティションのファイルにアクセスできませんでした。これがこの質問で解決できたのです。別のパーティションに切り替えた後、以前にインストールしたコンテンツにどのようにアクセスしますか?。
以前にディレクトリのinodeを書き留めた場合は、単独でディレクトリ名を変更できますか?
答え1
inodeに関する情報のみを使用してファイル(ディレクトリなど)の名前を変更できますが、find
(a)ファイルを含むファイルシステムがマウントされていないか、(b)ファイルシステムを含む空でないディレクトリに他のファイルをマウントする場合、関心のあるファイルはシステムからアクセスできません。 (a)の場合は、コンテンツ(名前の変更を含む)を操作する前にファイルシステムをマウントする必要があり、(b)の場合はファイルシステムを含むディレクトリの上部にインストールされているファイルシステムを削除する必要があります。名前を変更するファイル。状況(b)について尋ねているようです。
/home
私が正しく理解したら、あなたはマウントされた新しいパーティションを使い続けながら古いディレクトリ(ルートパーティションにあります)にアクセスできるようにしようとしています/home
。これが必要な場合は、次のようにします。
すべてのファイルを閉じてログアウトします。次に、次にログインしroot
(仮想端末を使用する - Ctrl-Alt-F2を押す)、次のコマンドを実行します。
umount /home
mv /home /home-old
mkdir /home
mount -a
ls /home
ls /home-old
すべてが順調に進むと、ログアウトして再度ログインすると、すべてがうまくいきます。
ところで、inode情報のみを使用してファイル名を変更するコマンドは次のとおりです(ファイルが現在ディレクトリにあるとします)。
find . -maxdepth 1 -inum 123456789 -exec mv {} mynewname \;
123456789
もちろん、inode番号はどこにありますか? (find
ファイル名とパスを決定し、この情報をに渡しますmv
。この情報がないと、ファイル名をまったく変更できません。関連何らかの方法で既存のファイル名を使用しますが、そうしない場合知るファイル名はとても簡単です。 )
答え2
一般的なUnixファイルシステムでは、通常、inodeに基づいてファイルを移動することは構造的に不可能です。その理由は、ファイル名を変更することは、ファイルが含まれているディレクトリからそのディレクトリエントリを削除し、別の場所にディレクトリを作成することを意味するためです。ただし、inodeにはディレクトリエントリへのポインタは含まれておらず、ファイルメタデータ(タイムスタンプ、権限など)とファイルの内容のみが含まれています(ポイント)。
複数のハードリンクを持つファイルの場合、そのうちどのリンクの名前を変更しますか? inode情報が不足しています。
一部のファイルシステムにあるディレクトリでは、inodeのみに基づいて動作することが可能です。
- ディレクトリの内容を読むには、inodeからアクセス可能でなければなりません。
- ディレクトリエントリが見つかりました
..
。これは親ディレクトリを指します。 - 親ディレクトリで正しいinode番号を持つディレクトリエントリを見つけます。
ただし、これには次のようないくつかの仮定があります。
- 同じinodeに複数の項目がある場合はどうなりますか?実際、これは問題ではありません。ほとんどのUNIXバリアントはディレクトリへの明示的なハードリンクを禁止するため、実際にはほとんど発生しません。
..
そもそも存在するのでしょうか?これはファイルシステムの種類によって異なります。一部のファイルシステムには明示的なエントリがあり、..
他のファイルシステムにはファイルシステムドライバによってエントリが偽造されます。..
存在しない場合、このアプローチは基本的に不可能です。- ファイルシステムにリンクが含まれていても、
..
明確ではない別の障害があります。つまり、ステップ1はカーネル内で可能ですが、そのためのインターフェースはありません。多くのUNIXバリアントには、inodeを介してファイルを開くことができるインタフェースがありません。これは権限をバイパスできるからです。たとえば、権限のある(つまり所有者のみがアクセスできるrwxr-xr-x
)ディレクトリにある権限(つまり誰でも読むことができる)を持つファイルには、rwx------
ディレクトリ所有者以外の誰もアクセスできません。これはinodeだけでは決定できません。ファイルは実際に別のハードリンクを介してアクセスできます!
その結果、インデックスノードのみが指定されたファイルでは、名前の変更を含む任意の操作を実行できません。ファイルパスが必要です。
特定のinodeでファイルを操作する唯一の実用的な方法は、まずを使用してパスを見つけてから、そのパスを使用してfind -inum
作業することです。あなたの場合は役に立ちません。ファイルはマウントポイントによって隠されています。マウントポイントによって隠されたファイルにアクセスするための移植可能な方法はありません。 Linuxでは、バインドマウントを使用できます。
答え3
ありがとうございます。これは非常に役立ちます。これにより、YouTubeからダウンロードしたビデオファイルのコピーの面倒な名前を、より簡潔で意味のある名前に変更することができました。たとえば、
you-get -O 20191129_tucker https://www.youtube.com/watch?v=cyCpkwX9Wvs
...ファイルをください。
20191129_tucker.webm;と「11/29/19フルエディション今夜Tucker Carlsonを入手 - Fox News 11/29/2019.en.srt」
私はこれが非常に便利なことの欠点だと思います。
2番目のファイル名は次のように変更できます。
$ls -il "今夜ターカーカールソンを入手 11/29/19 フルエディション - Fox News 11/29/2019.en.srt"
...これは始めにinode番号を持つファイルのリストを提供します。
13902671 -rw-r--r-- 1 james james 55793998 11月30日 18:44 Saving Tucker Carlson Tonight 19-11-29 Full - Breaking Fox News 2019年11月29日 srt
...その後、次を実行します。
mvi 13902671 20191129_tucker.srt
私のmvi bashシェルスクリプトは次のとおりです。
#!/bin/bash
inodeNumber=$1
newFileName=$2
find . -maxdepth 1 -inum $inodeNumber -exec mv {} $newFileName \;