Linux 的文件通常分为 7 大类

文件类型 缩写 英文名称
普通文件 - Regular file
目录文件 D Directory file
块设备文件 B Block special file
字符设备文件 C Character special file
命名管道文件 F FIFO 或 named pipe
套接字文件 S Socket
符号链接文件 l Symbolic link

普通文件

普通文件是 Linux 系统中最常见的一类文件,其特点是不包含文件系统的结构信息,可包括图形文件、数据文件、文档文件、声音文件等;按照内部结构又可分为文本文件和二进制文件两种。

  • 文本文件

  文本文件是字符(ASCII码)组成的文件,以行为基本结构的信息存储文件,它的内容是用户可以直接读到的数据,例如数字、字母等。通常来说,Linux 的系统配置文件基本上都属于这种文件类型,可以使用 cat 命令直接查看。

  • 二进制文件

  二进制文件是按信息在内存中的格式表示的文件,通常不能直接查看,而必须使用相应的软件来查看。通常来说,Linux 中的可执行文件(脚本、文本方式的批处理文件不算)基本都属于这种文件类型,可以运行。

目录文件

Linux 中的目录也是以文件存在的,称为目录文件,其是文件系统中一个目录所包含的目录项组成的文件,用户可以读取但是不能修改该目录文件的内容,只允许系统进行修改。

设备文件

Linux 把设备(例如硬盘、串口等)也看做文件,具有相同的操作方法,这种文件被成文设备文件,是用于操作系统与 I/O 设备提供连接的一种文件,分为字符设备文件和块设备文件,这些文件通常存放在 dev 目录中。

字符设备文件

这是一个顺序的数据流设备文件,对这种文件的读写是按字符进行的,而且这些字符是连续地形成一个数据流。字符设备不具备缓冲区,所以对这种设备的读写是实时的,如串口终端、磁带机等。

块设备文件

这是一种具有一定结构的随即存取设备文件,对这种设备的读写是按块进行的,它使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备,或从设备中一次性读出放入到缓冲区,如磁盘和文件系统等。

命名管道文件

命名管道文件又被称为先进先出文件,其主要用于在 Linux 的进程间传递数据,是 Linux 进程间的一种通信机制。管道是进程间传递数据的“媒介”,一个进程将数据写入管道的一端,另一个进程从管道另一端读取数据。通常情况下,管道是建立在高速缓存中的。采用先进先出的规定处理其中的数据。管道文件又可以分为有名管道和无名管道两种。

套接字文件

套接字(Socket)文件主要用于不同计算机进程间的通信,其是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户。套接字有三种类型:流式套接字、数据报套接字和原始套接字。流式套接字也就是 TCP 套接字(或称面向连接的套接字),数据报套接字也就是 UDP 套接字(或称无连接的套接字),原始套接字用 “SOCK_RAW” 表示。

  • 流式套接字定义了一种可靠的面向连接服务,实现了无差错、无重复的顺序数据传输
  • 数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的、并且不保证可靠、无差错
  • 原始套接字允许对低层协议,如 IP 或 ICMP 进行访问,主要用于对新的网络协议进行测试等

符号链接文件

又称链接文件,是一种特殊的文件,实际上是指向一个真实存在的文件链接。链接文件提供了共享文件的一种方法,在链接文件中不是通过文件名实现文件共享,而是通过链接文件所包含的指向文件的指针来实现对文件的访问。普通用户可以建立链接文件,并通过其指针访问它所指向的那个文件。使用链接文件可以访问普通文件,还可以访问目录文件和不具有普通文件形态的其它文件。也就是说,链接文件可以在不同的文件系统之间建立一种链接关系。根据链接对象的不同,可以分为硬链接文件和符号链接文件。

Linux 的文件是一个简单的字节数据序列,所以在 Linux 下对于文本文件、二进制文件的结构和访问方法都是相同的。Linux 的文件是由一系列块(block)组成,每个块可能含有 512、1024、2048 或 4096 个字节,具体由系统实现决定,在同一个文件系统中块大小是相同的。当使用较大块的时候,由于每次磁盘操作可以传输更多的数据,操作所花的事件较少,所以可以提高磁盘和内存间数据的传输率,但是相对的,由于块太大,存储的有效容量也会下降,也就是说会浪费一些存储空间。

Linux 使用文件描述符(File Descriptor)来标识一个进程正在访问的特定文件,当打开一个文件或创建一个文件时,Linux 将返回一个文件描述符,以供其它操作引用,通常来说文件描述符是一个小的非负整数。

Linux 中,每个进程都可以拥有最多 1024 个文件描述符,并且有自己的文件描述符表,其中前三项对于一般的进程是固定的,且是由系统自动打开的:

  • 文件描述符 0:标准输入文件,通常对应键盘灯输入设备
  • 文件描述符 1:标准输出文件,通常对应显示设备
  • 文件描述符 2:标准错误输出文件,通常也是对应显示设备

对于以上三个文件描述符,用户程序不用执行文件打开操作就可直接使用,其在头文件中的定义部分如下:

1 #define    STDIN_FILENO      0
2 #define STDOUT_FILENO 1
3 #define STDERR_FILENO 2

更多相关文章

  1. CENTOS 修改MYSQL文件到内存盘
  2. 用另外两个文件过滤一个文件
  3. Linux系统下 使用Lsof恢复误删除的文件
  4. C语言文件I/O 读取一个文件并输出出来 和 输出到另一个文件里面
  5. vs code远程编辑文件
  6. 从QQ浏览器缓存文件中提取出完整的视频
  7. Linux程序设计——文件操作(标准I/O库)
  8. Linux之profile、bash_profile、bashrc文件
  9. Linux网络设备驱动架構學習(三)

随机推荐

  1. Android Desigin Library
  2. android设置属性
  3. 【30篇突击 android】源码统计七
  4. BlueStacks将Android程序运行在Windows上
  5. android 逐帧动画
  6. Android开发学习之Gallery和GridView浅析
  7. 网络请求框架AsyncHttpclient的简单使用
  8. RadioGroup+RadioButton嵌套实现多行单选
  9. android TextToSpeech 源码分析
  10. Android 注解,注入框架