ホームページ >システムチュートリアル >Linux >Linux /dev ディレクトリ: 特別なデバイス ファイルの導入と適用

Linux /dev ディレクトリ: 特別なデバイス ファイルの導入と適用

PHPz
PHPz転載
2024-02-11 20:45:241283ブラウズ

Linux システムでは、すべてがファイルです。これは、通常のテキスト ファイルやバイナリ ファイルに加えて、システム内のさまざまなデバイスもファイルの形式で表現し、アクセスできることを意味します。これらのデバイス ファイルは通常 /dev ディレクトリに保存され、メジャー デバイス番号、マイナー デバイス番号、キャラクタ デバイス、ブロック デバイスなどの特別な属性と機能を持ちます。 Linux システムで一般的な特殊デバイス ファイルは何ですか?それらの機能と用途は何ですか?この記事では、Linux /dev ディレクトリにある特殊なデバイス ファイルについて、概念と例の観点から詳しく紹介します。

Linux /dev目录:特殊设备文件的介绍与应用

Linux はファイル システムであり、ソフトウェアなどのすべてのハードウェアは、対応するディレクトリの下に対応するファイル表現を持ちます。 dev ディレクトリについては、その下のファイルが Linux デバイスを表すことがわかっています。 Windows システムでは、デバイスはハード ドライブのように誰でもよく理解されており、ディスクは実際のハードウェアを指します。 Linux ファイル システムには、これらのデバイスに関連付けられたファイルがあります。実際のハードウェア上にアクセスすることができるので、Linux のほうが柔軟です。それをファイルにすれば、なんと簡単な操作でしょう。以前の com、prt、およびその他のインターフェイスを呼び出す必要はありません。ファイルを直接読み書きして、読み取りまたは書き込み操作をデバイスに送信します。データの読み取り、書き込み、保存の方法に応じて、デバイスはキャラクタ デバイス、ブロック デバイス、擬似デバイスのタイプに分類できます。

1. 機器の分類

  • キャラクターデバイス

キャラクターデバイスとは、一度に 1 つのキャラクターをシステムに送信するデバイスを指します。これらのデバイス ノードは通常、FAX、仮想端末、シリアル モデムやキーボードなどのデバイスにストリーミング通信サービスを提供しますが、通常はランダム アクセス データをサポートしません。キャラクタ デバイスが実装される場合、ほとんどはバッファを使用しません。システムは各文字をデバイスから直接読み取り/書き込みします。たとえば、キーボードなどのデバイスはデータ ストリームを提供し、「cnblogs」という文字列を入力すると、キーボード ドライバーはこの 7 文字のデータ ストリームを入力とまったく同じ順序で返します。これらはシーケンシャルであり、最初に c を返し、最後に s を返します。

  • デバイスをブロックする
#ブロック デバイスとは、ブロックを使用してシステム間でデータを移動するデバイスを指します。これらのデバイス ノードは通常、ハードディスク、CD-ROM、メモリ領域などのアドレス指定可能なデバイスを表します。

ブロック デバイスは通常、ランダム アクセスとアドレス指定をサポートし、バッファを使用します。オペレーティング システムは、データ ブロックを格納するために入力および出力用のバッファを割り当てます。プログラムがデータの読み取りまたは書き込みリクエストをデバイスに送信すると、システムはデータ内の各文字を適切なキャッシュに保存します。キャッシュがいっぱいになると、適切なアクションが実行され (データが転送され)、システムはキャッシュをクリアします。キャラクター デバイスとの違いは、ランダム ストレージをサポートしているかどうかです。文字種はストリーム形式で1文字ずつ格納されます。

    擬似デバイス
Unix 系オペレーティング システムでは、デバイス ノードは必ずしも物理デバイスに対応するとは限りません。この対応がないデバイスは擬似デバイスです。オペレーティングシステムは、それが提供するさまざまな機能を利用します。一般的に使用される疑似デバイスには、null、zero、full、loop、random、urandom

などがあります。

2.特別な機器と使用方法

ここで言う特殊なデバイスとは、ハードディスクやマザーボードなどを除いたものですが、Linux のシェルコマンドでは特殊な機能を持っているため、個別に取り出します。これらのデバイスは次のとおりです:

/dev/stdin

/dev/stdout

/dev/stderr

/dev/null

/dev/ゼロ

/dev/フル

/dev/ランダム,ランダム

/dev/fd

/dev/tcp|upd

/dev/ループ

1. 標準の出力および入力デバイス

前回、Linux リダイレクトについて述べたことを覚えていますか? Linux シェル データ リダイレクト (入力リダイレクトと出力リダイレクト) の詳細な分析を読むことができます。これらは、いくつかの特殊なファイル記述子、fd0、fd1、fd2 (stdin、stdout、stderr)

に対応します。 ###のように:### リーリー

/dev/stdin はキーボードデバイスを指します

リーリー

/dev/null デバイス

は、書き込まれたすべてのデータを破棄するブラック ホール デバイスです。通常、空のデバイスは、不要な出力ストリームを破棄するために使用されます。 Windows を使っていた頃には、同様の機能を持つ NUL というデバイスがあったと記憶しています。デバイスに書き込まれたデータはすべて破棄されます。ここからデータを読み取ると空が返されます。未使用のコンテンツを頻繁にこのデバイスに送信し、不要なデータを破棄します。

###のように:### リーリー

/dev/ゼロデバイス

UNIX 系オペレーティング システムでは、/dev/zero は、読み取り時に無制限の NULL 文字 (NULL、ASCII NUL、0x00) を提供する特別なファイルです。一般的な用途の 1 つは、提供される文字ストリームで情報を上書きすることです。もう 1 つの一般的な用途は、特定のサイズの空のファイルを生成することです。

###のように:###

[chengmo@centos5 shell]$ dd if=/dev/zero of=testzero count=1024 bs=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0107194 seconds, 97.8 MB/s
#创建一个大小为1M文件,该文件一个块是1024字节,一共是1024块(刚好1M),用/dev/zero文件内容填充它。输出创建到:testzero文件
  
  
[chengmo@centos5 shell]$dd if=/dev/zero of=/dev/磁盘分区
#这个命令一定不要随便用,有点象windows里面的粉碎文件工具。不过它是用x00填充整个分区。这样做数据是不可以恢复的了。
  
[chengmo@centos5 shell]$cat /dev/zero>testinputzero
#这个命令也不能随便使用咯,/dev/zero设备一个特效是,如果你读取的话,是一个死循环会输出无穷的\x00,这样你将创建一个用\x00填充的文件。如果你没有限制该用户磁盘配额。它将耗尽整个磁盘空间。

在linux资源配额限制里面,如果没有现在普通用户的磁盘空间利用,或内存使用。一个普通用户就可以通过上面方法一会就塞满整个磁盘。也可以通过while(true) {fork……}类程序,启动无限线程,耗尽整个系统内存。

/dev/full设备

类Unix系统中,/dev/full(常满设备)是一个特殊设备文件,总是在向其写入时返回设备无剩余空间(错误码为ENOSPC),读取时则与/dev/zero相似,返回无限的空字符(NULL, ASCII NUL, 0×00)。这个设备通常被用来测试程序在遇到磁盘无剩余空间错误时的行为。

如:

[chengmo@centos5 shell]$ echo 'chengmo' >/dev/full
-bash: echo: write error: 设备上没有空间
[chengmo@centos5 shell]$ echo $?
1
#命令执行返回错误

/dev/random[urandom]

在类UNIX操作系统中,/dev/random是一个特殊的设备文件,可以用作随机数发生器或伪随机数发生器。它允许程序访问来自设备驱动程序或其它来源的背景噪声。常用作随机数发生器。具体参考:linux shell实现随机数多种方法(date,random,uuid)

/dev/fd

记录用户打开的文件描述符

[chengmo@centos5 shell]$ ls /dev/fd/
0 1 2 3

详细参考:

linux shell数据重定向(输入重定向与输出重定向)详细分析 文件描述符介绍。

/dev/tcp[udp]/host/port

读取该类形式设备,将会创建一个连接host主机port端口的tcp[upd]连接。打开一个socket通讯接口。

详细使用可以参考:

linux shell 脚本实现tcp/upd协议通讯(重定向应用)

/dev/loop

在类UNIX操作系统中,Loop设备 可以把loop 文件,作为块设备挂载使用。

如:

[chengmo@centos5 shell]$mount -o loop example.img /home/chengmo/img

#将img镜像文件挂载到/home/chengmo/img目录下面,有了这个设备,我们不需要通过虚拟光驱就可以读虚拟磁盘格式的文件。

本文介绍了Linux /dev目录下的特殊设备文件,包括它们的分类、属性、命名规则等。我们还了解了一些常见的特殊设备文件,如/dev/null、/dev/zero、/dev/random、/dev/tty、/dev/sda等,以及它们的作用和用法。通过本文,我们可以更清楚地了解Linux系统中的设备管理和访问机制。

以上がLinux /dev ディレクトリ: 特別なデバイス ファイルの導入と適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlxlinux.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。