Linux 시스템에서는 모든 것이 파일입니다. 이는 일반 텍스트 파일, 바이너리 파일 외에도 시스템 내 다양한 장치를 파일 형태로 표현하고 접근할 수 있다는 의미이다. 이러한 장치 파일은 일반적으로 /dev 디렉토리에 저장됩니다. 주요 장치 번호, 보조 장치 번호, 문자 장치, 블록 장치 등과 같은 몇 가지 특별한 속성과 기능이 있습니다. Linux 시스템의 일반적인 특수 장치 파일은 무엇입니까? 그 기능과 용도는 무엇입니까? 이 글에서는 Linux /dev 디렉터리에 있는 특수 장치 파일을 개념과 예제의 관점에서 자세히 소개합니다.
Linux는 파일 시스템이며 소프트웨어와 같은 모든 하드웨어는 해당 디렉터리 아래에 해당 파일 표현을 갖습니다. dev 디렉터리의 경우 그 아래의 파일이 Linux 장치를 나타낸다는 것을 알고 있습니다. Windows 시스템에서 장치는 하드 드라이브와 같이 누구나 쉽게 이해할 수 있으며 디스크는 실제 하드웨어를 나타냅니다. Linux 파일 시스템에는 이러한 장치와 관련된 파일이 있습니다. 이에 대한 액세스는 실제 하드웨어에 배치될 수 있습니다. Linux가 더 유연합니다. 파일로 변환하면 작업이 얼마나 간단할까요? 이전 com, prt 및 기타 인터페이스를 호출할 필요가 없습니다. 파일을 직접 읽고 파일을 써서 읽기 또는 쓰기 작업을 장치에 보냅니다. 데이터를 읽고 쓰고 저장하는 방식에 따라 장치를 문자 장치, 블록 장치, 의사 장치 등의 유형으로 나눌 수 있습니다.
1. 장비 분류
캐릭터 장치는 한번에 1개의 캐릭터를 시스템으로 전송하는 장치를 말합니다. 이러한 장치 노드는 일반적으로 팩스, 가상 터미널, 직렬 모뎀 및 키보드와 같은 장치에 스트리밍 통신 서비스를 제공합니다. 문자 장치를 구현할 때 대부분은 버퍼를 사용하지 않습니다. 시스템은 장치에서 직접 각 문자를 읽고 씁니다. 예를 들어 키보드와 같은 장치는 "cnblogs"라는 문자열을 입력하면 입력과 정확히 동일한 순서로 이 7자 데이터 스트림을 반환합니다. 순차적이며 c를 먼저 반환하고 s를 마지막으로 반환합니다.
블록 장치는 블록을 사용하여 시스템 간에 데이터를 이동하는 장치를 말합니다. 이러한 장치 노드는 일반적으로 하드 디스크, CD-ROM 및 메모리 영역과 같은 주소 지정이 가능한 장치를 나타냅니다.
블록 장치는 일반적으로 임의 액세스 및 주소 지정을 지원하고 캐시를 사용합니다. 운영 체제는 데이터 블록을 저장하기 위해 입력 및 출력용 버퍼를 할당합니다. 프로그램이 장치에 데이터를 읽거나 쓰라는 요청을 보내면 시스템은 데이터의 각 문자를 적절한 캐시에 저장합니다. 캐시가 가득 차면 적절한 조치가 취해지며(데이터가 다른 곳으로 전송됨) 시스템은 캐시를 지웁니다. 캐릭터 디바이스와 차이점은 랜덤 저장을 지원하는지 여부입니다. 문자형은 스트림 형태로 하나씩 저장됩니다.
Unix 계열 운영 체제에서는 장치 노드가 반드시 물리적 장치에 해당하는 것은 아닙니다. 이러한 대응이 없는 장치는 의사 장치입니다. 운영 체제는 제공되는 다양한 기능을 활용합니다. 일반적으로 사용되는 의사 장치로는 null, zero, full, loop, random, urandom
이 있습니다.2. 특수 장비 및 사용
여기서 언급하는 특수 장치는 하드디스크, 마더보드 등을 제외하고 리눅스 쉘 명령에 특별한 기능이 있어서 별도로 꺼냅니다. 이러한 장치는 다음과 같습니다:
/dev/stdin
/dev/stdout
/dev/stderr
/dev/null
/dev/zero
/dev/full
/dev/random,urandom
/dev/fd
/dev/tcp|upd
/dev/loop
1. 표준 출력 및 입력 장치
저번에 제가 말한 Linux 리디렉션을 기억하시나요? 읽을 수 있는 내용: Linux 셸 데이터 리디렉션(입력 리디렉션 및 출력 리디렉션) 세부 분석. 이는 여러 특수 파일 설명자 fd0, fd1, fd2(stdin, stdout, stderr)에 해당합니다
예:
으아악/dev/stdin은 키보드 장치를 나타냅니다
으아악/dev/null 장치
는 기록된 모든 데이터를 삭제하는 블랙홀 장치입니다. 빈 장치는 일반적으로 불필요한 출력 스트림을 삭제하는 데 사용됩니다. 제가 Windows를 사용할 때 비슷한 장치인 NUL이 있었던 것으로 기억하는데, 동일한 기능을 가지고 있었습니다. 장치에 기록된 모든 데이터는 삭제됩니다. 여기에서 데이터를 읽으면 비어 있는 결과가 반환됩니다. 사용하지 않는 일부 콘텐츠를 이 장치로 자주 보내고 불필요한 데이터를 삭제하세요.
예:
으아악/dev/zero 장치
UNIX 계열 운영 체제에서 /dev/zero는 읽을 때 무제한 널 문자(NULL, ASCII NUL, 0×00)를 제공하는 특수 파일입니다. 일반적인 용도 중 하나는 정보가 제공하는 문자 스트림으로 정보를 덮어쓰는 것입니다. 또 다른 일반적인 용도는 특정 크기의 빈 파일을 생성하는 것입니다.
예:
[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 중국어 웹사이트의 기타 관련 기사를 참조하세요!