Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Linux下的文件类型介绍_创想鸟

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密码
上一篇 2025年11月5日 18:03:52
win10激活密钥在哪里看_win10激活密钥查看位置
下一篇 2025年11月5日 18:03:57

相关推荐

  • VSCode编写Java代码方法_VSCode搭建Java开发环境实战教程

    答案:在VSCode中配置Java开发环境需安装JDK并设置环境变量,再安装VSCode及Java扩展包,即可实现Java项目的创建、编写、运行与调试。它轻量、启动快,支持多语言和丰富扩展,集成Maven/Gradle,适合日常开发。 在VSCode里编写Java代码,说白了,就是把这个轻量级的代码…

    2026年9月21日
    000
  • Linux interfaces 虚拟网络类型了解01

    Linux interfaces 虚拟网络类型了解01Linux interfaces 虚拟网络类型了解01Linux interfaces 虚拟网络类型了解01Linux interfaces 虚拟网络类型了解01

    在osi模型的定义中,数据链路层和物理层,以及传输层和网络层执行的任务在概念上相似:它们都提供了数据传输的方式,即沿着特定路径将数据从源点传输到目的地的方法。然而,数据链路层和物理层负责跨物理路径的通信服务,而传输层和网络层则提供由多个数据链路组成的逻辑路径或虚拟路径的通信服务。 Bridge操作指…

    2026年9月21日 用户投稿
    000
  • VSCode侧边栏怎么去掉_VSCode侧边栏隐藏教程

    隐藏VSCode侧边栏可通过Ctrl + B(Windows/Linux)或Cmd + B(macOS)快捷键快速切换,也可通过菜单栏“视图 > 外观 > 切换侧边栏可见性”或命令面板执行“View: Toggle Sidebar Visibility”实现。推荐使用快捷键操作,效率最高…

    2026年9月21日
    100
  • 如何限制Linux用户cron任务 /etc/cron.deny使用技巧

    如何限制Linux用户cron任务 /etc/cron.deny使用技巧如何限制Linux用户cron任务 /etc/cron.deny使用技巧如何限制Linux用户cron任务 /etc/cron.deny使用技巧如何限制Linux用户cron任务 /etc/cron.deny使用技巧

    要限制linux用户执行cron任务,可编辑/etc/cron.deny文件,每行添加一个需禁止的用户名,保存后立即生效;若需更细粒度控制,可使用pam_time模块;此外,还可通过sudoers文件、chroot环境、linux capabilities、apparmor或selinux等方法限制…

    2026年9月21日 用户投稿
    200
  • MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    最小权限原则是mysql用户权限配置的核心,确保每个用户仅拥有必要权限以提升安全性与可维护性。1.明确需求:根据用户角色分配如只读、增删改查或结构修改权限;2.创建用户并编写sql脚本进行权限管理,替代手动输入命令,提高效率与一致性;3.使用sublime text等编辑器提升脚本编写效率,利用语法…

    2026年9月21日 用户投稿
    000
  • Linux目录结构学习常见问题汇总

    Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总

    Linux只有一个根目录,所有设备挂载于此,形成统一树状结构。根目录下各路径分工明确:/bin和/sbin分别存放用户与管理员命令;/etc集中配置文件;/home为用户家目录;/var存储日志等动态数据;/tmp用于临时文件;/usr存放系统程序,/usr/local供手动安装软件;/dev包含设…

    2026年9月21日 用户投稿
    100
  • 如何备份VSCode的全部设置和扩展?

    备份VSCode全部设置和扩展需保存配置文件与扩展目录;2. 配置文件位于各系统指定路径的User文件夹内,包含settings.json和keybindings.json;3. 通过code –list-extensions导出扩展列表并用xargs批量重装可恢复扩展;4. 推荐直接复…

    2026年9月21日
    000
  • 有趣的操作系统:文件IO和网络IO

    一、从i/o开始 在学习和使用计算机的过程中,i/o(输入/输出)是不可避免的一个概念,指的是操作、程序或设备与计算机之间发生的数据传输过程。 对于计算机来说,I/O操作和计算处理是其两大核心任务,其中大部分时间都用于执行I/O操作。I/O操作包括硬件和软件两部分,即I/O设备和I/O子系统。 I/…

    2026年9月21日
    100
  • Linux中如何查看进程状态_Linux进程状态查看的详细方法

    掌握Linux进程查看方法可高效管理程序,常用ps aux或ps -ef查看进程快照,top和htop实时监控,/proc/PID/目录下获取详细状态,pgrep和pidof快速定位PID。 在Linux系统中,查看进程状态是系统管理和故障排查中的基本操作。掌握多种方法可以更高效地监控和管理运行中的…

    2026年9月21日
    1200
  • Linux如何恢复被删除的用户数据

    恢复Linux被删数据需立即停用磁盘并使用photorec或extundelete等工具,结合快照或备份可提高恢复成功率。 恢复Linux中被删除的用户数据,并非易事,但并非完全不可能。可能性取决于数据被删除的方式、删除后系统是否被继续使用,以及是否采取了合适的预防措施。核心在于理解数据删除的机制,…

    2026年9月21日
    200
  • mysql安装后如何优化配置文件

    答案:优化MySQL配置需先定位配置文件,再根据硬件和业务调整内存、InnoDB、连接等核心参数。具体包括设置innodb_buffer_pool_size为物理内存50%~70%,合理配置日志参数与连接数,启用慢查询日志,并使用工具辅助调优,避免过度配置,确保稳定高效。 MySQL 安装后,优化配…

    2026年9月21日
    000
  • Linux怎么列出系统中已安装的deb包

    使用dpkg -l或apt list –installed可列出已安装的.deb包,前者结合grep ^ii过滤已安装项,后者输出更清晰,两者均支持重定向保存到文件。 在Linux系统中,特别是基于Debian的发行版(如Ubuntu),可以使用命令行工具列出已安装的.deb包。最常用的…

    2026年9月21日
    000
  • VSCode的括号匹配功能如何自定义?

    可通过 settings.json 自定义括号高亮的边框和背景色;2. 用 editor.matchBrackets 控制是否启用高亮;3. 启用 bracketPairColorization 可为嵌套括号着色;4. 使用 Ctrl/Cmd + Shift + 快速跳转配对括号。 VSCode 的…

    2026年9月21日
    000
  • Linux如何使用dnf安装软件包

    dnf是Fedora、CentOS Stream和RHEL 8+的默认包管理工具,用于安装、更新、删除软件包。1. 安装单个包:sudo dnf install package_name,如htop;2. 安装多个包:sudo dnf install vim curl;3. 从本地.rpm文件安装:…

    2026年9月21日
    000
  • Linux文件和目录管理常见命令

    Linux文件和目录管理依赖于ls、cd、mkdir、rm、cp、mv等核心命令,用于浏览、创建、删除、复制和移动文件与目录;通过find、du、grep等命令可查找文件、定位大文件并清理磁盘空间;使用rename、mmv或脚本可实现批量重命名;为安全起见,应谨慎使用rm命令,推荐结合-i选项或使用…

    2026年9月21日
    000
  • VSCode的代码格式化快捷键是什么?

    VSCode代码格式化快捷键为Shift+Alt+F(Windows/Linux)或Shift+Option+F(macOS),需安装对应语言的格式化工具;若无效,可能是未安装扩展、文件类型不支持或快捷键冲突;可右键选择“格式化文档”或通过命令面板执行,也可在键盘快捷方式中自定义。 VSCode的代…

    2026年9月21日
    000
  • Linux怎么踢出指定的登录用户

    要踢出指定登录用户,首先使用w或who命令识别其TTY或会话ID,再通过pkill -KILL -t 强制终止会话,或用loginctl terminate-session 优雅结束;若需防止重新登录,可临时锁定账户(passwd -l)或将用户shell改为/sbin/nologin。 在Linu…

    2026年9月21日
    100
  • 如何配置mysql初始用户和密码

    答案:MySQL安装后默认用户为root,密码为空或自动生成。需先确认服务运行,再登录并设置密码;若为空密码则直接登录后用ALTER USER修改,若为临时密码需从日志获取并强制修改;可创建远程用户并授权;推荐运行mysql_secure_installation进行安全加固,包括设密码、删匿名用户…

    2026年9月21日
    000
  • Linux如何查看默认网关

    使用ip route命令可查看默认网关,如ip route | grep default显示default via 192.168.1.1 dev eth0,其中192.168.1.1为网关地址。 在Linux系统中,查看默认网关是网络排查中的常见操作。可以通过命令行工具快速获取当前系统的默认路由信…

    2026年9月21日
    200
  • Linux如何设置虚拟网卡并分配IP

    Linux如何设置虚拟网卡并分配IPLinux如何设置虚拟网卡并分配IPLinux如何设置虚拟网卡并分配IPLinux如何设置虚拟网卡并分配IP

    可通过创建虚拟网卡为同一物理网卡绑定多个IP,临时使用ip addr add加label方式,永久配置则需修改对应系统网络配置文件,CentOS修改ifcfg-eth0:0,Ubuntu在interfaces文件中添加iface eth0:0,最后重启网络服务并验证接口状态。 在Linux系统中,可…

    2026年9月21日 用户投稿
    000

发表回复

登录后才能评论
关注微信