FreeBSDはデバイスファイルについて読んでいますが、わかりません。練習のために次のシナリオを思い出しました。デバイスファイルを使用すると、問題を解決できると考えられます。
私が時間制スパイで使い捨てパッドを作らなければならないと想像してください。安全なFreeBSDボックスに行き、/dev/urandom
パッドファイルに何かを書くことができます。なぜなら、このソースのランダム性が十分であることがわかっているからです(tm)。パッドファイルを含むフラッシュドライブが将来の連絡先に転送されます。
ただし、ドライブには任意のバイトでいっぱいの単一のファイルしか含まれていないため、ファイルシステム全体をディスクに書き込むのは無駄に見えます。 USBを任意のデータで埋めるのはどうですか?
私の質問:ディスクから生データを読み取り、ディスクに生データを書き込む目標を達成する方法は?dd
ディスクのデバイスファイルを指す必要がありますか?
答え1
はい、デバイスファイルをネイティブデバイスファイルとして処理し、通常のファイルにアクセスするのと同じAPIを使用して、デバイスファイルからデータを読み書きできます。ほとんどの場合、dd
デバイスファイルからデータを使用したり、簡単にインポートしたりできます。
生のデバイスとファイルシステムの実際のファイルの間にはいくつかの実質的な違いがあることに注意してください。
- デバイスのサイズは固定されています。少量のデータを書き込むと、残りのスペースは同じままです。その情報を転送する他の方法がない場合、実際にどれだけのデータが記録されたかを確認する方法はありません。
- デバイスに権限がありません。デバイスファイルデバイスに特権があることを示しますが、これらの特権はデバイス自体に伝播されず、単にデバイスが接続されているシステムによって割り当てられます。 USBドライブを表すデバイスファイルを使用している場合は、
chmod
そのファイルを取り外して別の(または同じ)システムに接続しても、権限の変更は保持されません。 - デバイスに名前がないか、少なくともユーザーが変更できる名前がありません。オペレーティングシステムは、適切であると判断されるデバイスノード名をデバイスに割り当てる。ボリューム名のようなものはファイルシステムまたはパーティションテーブルに保存されますが、デバイス全体をネイティブストレージとしてアクセスするときはそうではありません。
- ほとんどのオペレーティングシステムは、root以外の任意のユーザーがデバイスファイルにアクセスすることを許可しませんが、一部のオペレーティングシステムでは、root以外のローカルユーザーがUSBドライブなどのものをマウントすることを許可できます。
(注:私はLinuxの背景知識を持っていますが、これらの概念はすべてのUNIXシリーズシステムでほぼ同じです。)