Linux文件的基础操作
Linux中的文件是指以计算机的存储设备为载体的信息集合,就是保存在内存、磁盘等设备上的一个个由各种数据组合在一起的实体,是Linux在物理上最基本的组成单元。
Linux文件
ls
命令查看目录下的文件
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系统的配置文件基本都属于这种
可以使用cat 命令直接查看 - 二进制文件
按信息在内存中的格式表示的文件
通常不能直接查看,必须使用相应的软件
通常来说,Linux中的可执行文件基本都属于这种类型,可以运行
- 目录文件
Linux中的目录也是以文件的形式存在,成为目录文件。
用户可以读取但是不能修改目录文件的内容,只允许系统修改
目录文件在文件名和索引节点之间的转换起到桥梁的作用,是文件系统树形文文件结构的关键。其由文件名和索引节点号构成。
每个目录文件的前2项是2个特定的文件 : .和…,. 对应于该目录文件本身的索引节点,…对应其父目录的索引节点 - 字符设备文件和块设备文件Linux把设备(硬盘、串口等)也看作文件,具有相同的操作方法。这种文件被称为设备文件,是用于操作系统与IO设备提供连接的一种文件,分为字符设备文件和块设备文件,分别对应字符设备和块设备,这些文件通常存放在dev目录中。
Linux中存在一个目录 /dev/null,所有放入这一文件的设备的数据都将不存在,可以把此放入操作看成是删除。
- 字符设备文件:是一个顺序的数据流设备文件,读写按字节进行,而且这些字符是连续地形成一个数据流。字符设备不具有缓冲区,所以对这种设备地读写是实时地,如串口终端、磁带机等。
- 块设备文件:具有一定结构地随机存取设备文件,读写按块进行,使用缓冲区来存放暂时的数据,待条件满足后,从缓冲区一次性写入设备,或一次性读出放到缓冲区中,如磁盘和文件系统等。
- 串口设备文件 /dev/tty
- 硬盘设备文件 /dev/hadl
- 命名管道文件
又称为先进先出文件,其主要用于在Linux的进程间传递数据,是Linux进程间的一种通信机制。
管道是进程间传递数据的"媒介",一个进程将数据写入管道的一端,另一个进程从管道另一端读取数据。
通常,管道是建立在高速缓冲中的。
先进先出的处理规定。
可以分为有名管道和无名管道。 - 套接字文件主要用于在不同计算机进程间的通信,是操作系统内核中的一个数据结构,是网络中的节点进行相互通信的门户。三种类型:流式套接字、数据报套接字和原始套接字
- 流式套接字就是TCP套接字
- 数据报套接字也就是UDP套接字
- 原始套接字用"SOCK_RAW"表示
原始套接字允许对低层协议,如IP或ICMP进行直接访问,主要用于对新的网络协议进行测试。
- 符号链接文件
又称链接文件,是一种特殊文件。
实际上是指向一个真实存在的文件链接。
链接文件提供了一种共享文件的方法,在链接文件中不是通过文件名实现文件共享,而是通过链接文件所包含的指向文件的指针来实现对文件的访问。
普通用户可以建立链接文件,并通过其指针访问它所指向的那个文件。
使用链接文件可以访问普通文件,也可以访问目录文件和不具有普通文件形态的其他文件。
链接文件可以在不通过文件系统之间建立一种链接关系。
根据链接对象的不同,可以分为硬链接文件和符号链接文件。
Linux的文件结构和文件描述符
Linux的文件是个简单的字节数据序列,所以在Linux下对于文本文件、二进制文件的结构和访问方法是相同的。
Linux的文件是由一系列的块组成,在同一个文件系统中块大小相同。
Linux使用文件描述符来标识一个进程正在访问的特定文件,当打开一个文件或者创建一个文件时,Linux将返回一个文件描述符,以供其他操作引用,通常来说文件描述符是一个小的非负整数。
文件描述符是对应进程的,每一个文件描述符都对应一个特定的文件,而每一个特定的文件可以对应不同的进程,存在多个不同的文件描述符。
在Linux中,每个进程都可以拥有最多1024个文件描述符,并且有自己的文件描述符表,其中前三项对于一般的进程是固定的,且是由系统自动打开的。说明如下:
- 文件描述符0:标准输入文件,通常对应键盘等输入设备
- 文件描述符1:标准输出文件,通常对应显示设备
- 文件描述符2:标准错误输出文件,通常也是对应显示设备。
对于以上三个文件描述符,用户程序不用执行文件打开操作就可以直接使用,其在头文件中的定义部分:
#define STDIN_FILENO 0 //标准输入 #define STDOUT_FINENO 1 //标准输出 #define STDERR_FILENO 2 //标准错误输出