Linux下的文件类型介绍

本篇文章给大家带来的内容是介绍linux下几种文件类型,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。【视频教程推荐:linux教程】

在Linux系统下,有七类文件类型:

普通文件(-)

目录(d)

软链接(字符链接L)

套接字文件(S)

字符设备(S)

块设备(B)

管道文件(命名管道P)

普通文件、目录、软链接无需多解释。下面带大家了解一下管道文件、套接字文件、字符设备、块设备类型。

管道文件

管道分为匿名管道和命名管道。管道都是一端写入、另一端读取,它们是单方向数据传输的,它们的数据都是直接在内存中传输的,管道是进程间通信的一种方式,例如父进程写,子进程读。

在shell中匿名管道就是一个管道符号”|”,例如ls | grep xxx,其中ls对应的进程是这个独立进程组中的父进程,grep对应的进程是子进程,父进程写子进程读。

在编程语言中,匿名管道是通过创建两个文件句柄或文件描述符(例如A、B)来实现的,一个文件句柄用于写数据(例如A写入端,数据写入A将自动推入B中),另一个文件句柄用于读数据(即B)。

对于命名管道,即有名称的管道,命名管道将文件保留在文件系统中,它也称为FIFO,也就是first in first out。虽然命名管道文件保留在文件系统中,但是这个文件只是使用命名管道的一个入口,在使用命名管道传输数据的时候,仍然是在内存中进行的,也就是说并不会因为保留在文件系统上命名管道的效率就低了。

在shell中,可以使用mknod命令或mkfifo命令创建命名管道,在写某些特殊需求的shell脚本时,命名管道非常有用。实际上,在Bash 4之后就支持协程(使用coproc命令)的功能了(ksh和zsh老早就支持协程),但是协程的需求都能通过命名管道来实现。

一般的管道都是单向通信的,无法实现双向通信的功能,也就是只能一边写一边读,不能两边都能读、写。如果要实现双向通信,可以创建两根管道(这样就有4个文件句柄,两个读端,两个写端),或者使用更方便的套接字。

套接字(Socket)

套接字用来实现两端通信,正如上面分析的,可以实现双向管道的进程间通信功能。不仅如此,套接字还能通过网络实现跨主机的进程间通信功能。

套接字需要成对才有意义,也就是分为两端,每一端都有用于读、写的文件描述符(或文件句柄),相当于两根双向通信的管道。

文心大模型 文心大模型

百度飞桨-文心大模型 ERNIE 3.0 文本理解与创作

文心大模型 56 查看详情 文心大模型

套接字根据协议族的方式分为两大类:网络套接字(AF_INET类型,根据ipv4和ipv6分为inet4和inet6)和Unix Domain套接字(AF_UNIX类型)。当然,从协议族往下,套接字可细分为很多种类型,例如INET套接字可以分为TCP套接字、UDP套接字、链路层套接字、Raw套接字等等。其中网络套接字是网络编程的基础和核心。

Unix Domain套接字

对于单机的进程间通信,使用Unix Domain套接字比Inet套接字更好,因为Unix Domain套接字没有网络通信组件,也就是少了很多网络功能,它更加轻量级。实际上,某些语言在某些操作系统平台上实现的管道功能就是通过Unix Domain来实现的,可想而知其高效率。

Unix Domain套接字有两个文件句柄(例如A、B),这两个文件句柄都是同时可读、可写的句柄。进程1向A写入数据,将自动推送到B上,进程2可从B上读取从A写入的数据,同理进程2向B中写入数据将自动推送到A上,进程1可从A上读取从B写入的数据。如下:

进程1            进程2------------------------A   ----------->  BB   ----------->  A

在编程语言中,创建Unix Domain Socket自然有对应的函数轻松创建(可man socketpair)。对于bash shell,可以通过nc命令(NetCat)来创建,或者干脆使用两个命名管道来实现对应的功能。如有需要,可自行了解如何在bash shell中使用Unix Domain套接字。

网络套接字

对于跨网络的进程间通信,需要使用网络套接字。每个网络套接字都由5部分组成,它们称为套接字的5元组。格式如下:

{protocol, src_addr, src_port, dest_addr, dest_port}

即协议、源地址、源端口、目标地址、目标端口。

每端套接字在内核空间都有两个buffer(即一对socket有4个buffer),每一端都有recv buffer和send buffer。进程1向自己的套接字的send buffer写入数据,将发送到对端的recv buffer中,然后对端的进程2就可以从recv buffer中读取数据,反之亦然。

但是在真正可以读、写网络套接字之前,网路套接字还需要一些设置。服务端套接字创建(socket()函数,创建后就会有一个文件句柄或文件描述符供读、写操作)后,还要绑定地址(通过bind()函数)和监听端口(通过listen()函数),客户端则只需要创建套接字后,直接使用connect()函数向服务端套接字发起连接请求即可。

对于TCP套接字,客户端发起连接请求即表示要和服务端进行三次握手(内核完成,和用户空间进程无关)。将这三次握手的每一次进行细分,第一次客户端发送SYN请求,服务端接收到SYN后,内核将这个连接放进syn queue中并设置状态为syn-recv,然后发送ack+syn给客户端,当接收到客户端回复ack后,内核将连接从syn queue移到established queue(或accept queue)中并将连接的状态标记为established。最后等待用户空间的进程发起accept()系统调用让内核将其从accept queue中移除。被accept()后的连接表示已经建立好的连接,可以真正实现两端进程间的数据传输。

更多关于TCP套接字的原理,参见我的另一篇文章:不可不知的socket和TCP连接过程。

块设备和字符设备

块设备是硬件设备,通过随机(不一定是顺序)访问固定大小的数据块(chunk)来区分。固定大小的chunk称为块(block)。最常见的块设备是硬盘,但也存在许多其他块设备,如软盘驱动器、蓝光阅读器和闪存。注意,这些都是挂载文件系统的设备,文件系统就像是块设备的通用语言。

字符设备通过连续的流数据访问,一个字节接着一个字节。典型的字符设备是终端(终端分多种,由物理的也有虚拟的)和键盘。

区分块设备和字符设备最简单的方法是看数据访问的方式。能随机访问获取数据的是块设备,必须按字节顺序访问的是字符设备。

如果可以这里读一点数据,那里读一点数据,最后串成一整段连续的数据,那么这个就是块设备,就像硬盘上的数据是不连续的,有可能需要通过随机访问的方式获取一段数据。比如磁盘上一个稍大一点的文件,可能前10k数据是连续的数据块或在连续的扇区内,之后的10k数据在离它很远甚至在不同的柱面上。

如果一段数据中的每个字节都跟访问时的字节顺序是一样的,即字节先后顺序从访问获取时到最后处理数据的过程中都是完全一致的,那么这个就是字符设备。换句话说,字符设备可以看作是流设备。就像键盘输入数据一样,连续敲两个字键,这两个键对应的字节数据在被接收的时候一定是先敲的在前面,后敲的在后面。同理终端设备也是以一样的,程序将数据输出到终端时,程序先输出字母a再输出数字3,那么显示在终端上时一定是a在前,3在后。

以上就是Linux下的文件类型介绍的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/340571.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
修改mysql root密码
上一篇 2026年11月8日 14:52:37
在python中remove什么意思
下一篇 2025年12月13日 11:31:09

相关推荐

  • 如何在Linux中查找包含字符串的所有文件

    如何在Linux中查找包含字符串的所有文件如何在Linux中查找包含字符串的所有文件如何在Linux中查找包含字符串的所有文件如何在Linux中查找包含字符串的所有文件

    如何在linux中查找包含字符串的所有文件?本篇文章将介绍关于递归搜索包含特定文本字符串的所有文件。文章中使用“find”命令搜索文件中的字符串。或者,也可以使用grep命令搜索文本。下面我们来看具体的内容。 首先我们来看一下命令 #find / -exec grep -l“string-to-se…

    2026年11月8日 • 用户投稿
    200
  • 【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写

    【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写【linux学习指南】VSCode部署Ubantu云服务器,与Xshell进行本地通信文件编写

    ?前言 本文目的是讲使用vscode连接ubantu,与本地xshell建立通信同步文件编写。 查看本机系统相关信息: 代码语言:javascript代码运行次数:0运行复制 cat /etc/lsb* DISTRIB_ID=Ubuntu: 表示这是 Ubuntu 发行版。 DISTRIB_RELE…

    2026年11月8日 • 用户投稿
    000
  • 人生苦短,我用PyCharm

    人生苦短,我用PyCharm人生苦短,我用PyCharm人生苦短,我用PyCharm人生苦短,我用PyCharm

    选自RealPython 作者:jahongir rahmonov 来源:机器之心 本文将介绍: PyCharm 安装在 PyCharm 中写代码在 PyCharm 中运行代码在 PyCharm 中进行代码 debug 和测试在 PyCharm 中编辑已有项目在 PyCharm 中搜索和导航在 Py…

    2026年11月8日 • 用户投稿
    600
  • Fedora系统版本如何查看_Fedora版本信息查询教程

    Fedora系统版本如何查看_Fedora版本信息查询教程Fedora系统版本如何查看_Fedora版本信息查询教程Fedora系统版本如何查看_Fedora版本信息查询教程Fedora系统版本如何查看_Fedora版本信息查询教程

    使用cat /etc/fedora-release可直接显示Fedora版本,如“Fedora release 38 (Thirty Eight)”。2. hostnamectl命令输出包含操作系统版本、主机名和内核信息,适用于全面查看系统状态。3. 若安装redhat-lsb-core包,可用ls…

    2026年11月8日 • 用户投稿
    000
  • 什么是LVM分区_Linux安装时使用逻辑卷管理器分区的好处

    什么是LVM分区_Linux安装时使用逻辑卷管理器分区的好处什么是LVM分区_Linux安装时使用逻辑卷管理器分区的好处什么是LVM分区_Linux安装时使用逻辑卷管理器分区的好处什么是LVM分区_Linux安装时使用逻辑卷管理器分区的好处

    LVM通过PV→VG→LV层级结构实现灵活磁盘管理,支持动态调整逻辑卷大小、整合多硬盘资源、在线扩容缩容及快照备份,便于系统扩展与维护,特别适合生产环境和存储需求变化较大的场景。 在Linux系统中安装时使用LVM(Logical Volume Manager,逻辑卷管理器)分区,相比传统分区方式有…

    2026年11月8日 • 用户投稿
    100
  • google浏览器提示“由您的单位管理”是什么意思_google浏览器“由单位管理”提示说明

    Chrome显示“由您的单位管理”表明浏览器受外部策略控制,常见于企业或学校环境;2. 通过chrome://policy可查看生效策略及来源;3. 使用systeminfo命令检查设备是否加入域;4. 在Windows中删除HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER下…

    2026年11月8日
    000
  • linux中误删了文件怎么恢复

    linux中误删了文件怎么恢复linux中误删了文件怎么恢复linux中误删了文件怎么恢复linux中误删了文件怎么恢复

    linux中误删了文件怎么恢复     作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可…

    2026年11月8日 • 用户投稿
    100
  • linux怎么看系统版本

    linux怎么看系统版本linux怎么看系统版本linux怎么看系统版本linux怎么看系统版本

    linux怎么看系统版本 通用方法查看: 1、uname -a   (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 athlon i386 GNU/Linu…

    2026年11月8日 • 用户投稿
    100
  • linux怎么下载文件

    linux怎么下载文件linux怎么下载文件linux怎么下载文件linux怎么下载文件

    linux怎么下载文件 linux下载文件一般使用wget命令,可以通过包管理工具进行安装 yum install wget -yapt install wget -y wget是linux下一个从网络上自动下载文件的常用自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。一般的…

    2026年11月8日 • 用户投稿
    300
  • linux安装oracle出现界面乱码

    linux安装oracle出现界面乱码linux安装oracle出现界面乱码linux安装oracle出现界面乱码linux安装oracle出现界面乱码

    方法一:临时指定语言环境 LANG=en_US ./runInstaller 执行以上命令即可显示出正常的英文界面,如下图: 方法二:安装oracle中jre字体库的中文字体 1、下载字体文件 2、进入 database/stage/Components/oracle.jdk/1.6.0.75.0/…

    2026年11月8日 • 用户投稿
    000
  • linux与windows文件显示乱码

    linux与windows文件显示乱码linux与windows文件显示乱码linux与windows文件显示乱码linux与windows文件显示乱码

    问题: 在Windows下用matlab写的代码(.m)文件复制到Linux(Ubuntu)下,注释的中文全是乱码。 原因: Windows下默认使用的是GB2312编码,Linux默认使用的是UTF-8。 所以在Windows下产生的代码是GB2312编码,在Linux下当然识别为乱码 ; 反之,…

    2026年11月8日 • 用户投稿
    100
  • linux的端口不通怎么解决

    linux的端口不通怎么解决linux的端口不通怎么解决linux的端口不通怎么解决linux的端口不通怎么解决

    linux的端口不通怎么解决 linux系统都会有网络防火墙设置,如果防火墙关闭,那么只要linux上某个端口起了某个服务,那这个端口就能telnet的通,telnet某个端口能通的前提是这个端口起了服务,并且防火墙允许该端口的访问。 下面来说说怎样解决端口不通的问题。 将需要的端口设置能通过防火墙…

    2026年11月8日 • 用户投稿
    000
  • 如何关闭linux

    如何关闭linux如何关闭linux如何关闭linux如何关闭linux

    linux关闭系统的几种方法: shutdown -h now 立即关机        (推荐学习:linux运维) shutdown -r now 立即重启 Linux命令:shutdown 功能说明:系统关机指令。 语  法:shutdown [-efFhknr][-t 秒数][时间][警告信息…

    2026年11月8日 • 用户投稿
    100
  • linux默认不显示当前路径

    linux默认不显示当前路径linux默认不显示当前路径linux默认不显示当前路径linux默认不显示当前路径

    解决方法: 1、进入到etc目录,修改profile文件 2、在最后一行加上:export PS1='[u@h $PWD]$’ 3、保存之后执行 :source /etc/profile 麦当秀MindShow AiPPT 麦当秀|MINDSHOW是一款百万用户正在使用的三分钟生成一份PPT的AI应…

    2026年11月8日 • 用户投稿
    100
  • Linux如何解压文件

    Linux如何解压文件Linux如何解压文件Linux如何解压文件Linux如何解压文件

    Linux下如何解压.zip和.rar文件,对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们:                (推荐学习:linux运维)  1)对于zip linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的…

    2026年11月8日 • 用户投稿
    300
  • 如何让linux上网

    如何让linux上网如何让linux上网如何让linux上网如何让linux上网

    linux虚拟机环境安装后,需要配置网络环境。 查看初始网络状态             (推荐学习:linux运维) 找到网络配置文件(ifcfg-etho) 修改网络配置文件 注: IP地址,子网掩码,网关等需要按照自己的环境配置。 知网AI智能写作 知网AI智能写作,写文档、写报告如此简单 3…

    2026年11月8日 • 用户投稿
    000
  • 远程办公软件免费版功能对比_远程办公十大实用工具使用心得

    远程办公软件免费版功能对比_远程办公十大实用工具使用心得远程办公软件免费版功能对比_远程办公十大实用工具使用心得远程办公软件免费版功能对比_远程办公十大实用工具使用心得远程办公软件免费版功能对比_远程办公十大实用工具使用心得

    UU远程在免费版中支持4K 144帧、真彩模式、不限速文件传输和虚拟屏幕等功能,性能远超ToDesk、向日葵、RustDesk和Microsoft远程桌面,是高性价比首选。 如果您在选择远程办公软件时,希望在不增加预算的情况下获得最佳功能体验,那么了解各款工具免费版本的实际能力至关重要。市面上的远程…

    2026年11月8日 • 用户投稿
    100
  • linux系统多大

    linux系统多大linux系统多大linux系统多大linux系统多大

    linux系统多大 Linux具有很多发行版,从桌面到服务器版本,各个系统的大小也是不同的。总的来说范围是十几兆到4G以上。 桌面版多则达到4个G,涵盖了日常学习办公的大部分软件及漂亮的UI界面。少则只需要几百兆,甚至十几兆,当然只有普通的终端界面。 下面介绍几款非常小的Linux发行版: 1、Ti…

    2026年11月8日 • 用户投稿
    700
  • 如何远程连接linux

    如何远程连接linux如何远程连接linux如何远程连接linux如何远程连接linux

    linux大多应用于服务器,而服务器不可能像pc一样放在办公室,它们是放在idc机房的,所以我平时登录linux系统都是通过远程登录的。 Linux系统中是通过ssh服务实现的远程登录功能。默认ssh服务开启了22端口,而且当我们安装完系统时,这个服务已经安装,并且是开机启动的。所以不需要我们额外配…

    2026年11月8日 • 用户投稿
    000
  • 什么是linux命令

    什么是linux命令什么是linux命令什么是linux命令什么是linux命令

    linux命令是对linux系统进行管理的命令。对于linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,linux系统管理的命令是它正常运行的核心,与之前的dos命令类似。 linux命令在系统中有两种类型:内置Shell命令和Linux命令。        (推…

    2026年11月8日 • 用户投稿
    1100

发表回复

登录后才能评论
关注微信