详解Linux系统中的tempfs与/dev/shm
发布时间 - 2026-01-10 23:07:35 点击率:次tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,即 tmpfs 使用内存或 swap 分区来存储文件。

Linux 内核中的 VM 子系统负责在后台管理虚拟内存资源 Virtual Memory,即 RAM 和 swap 资源,透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页,tmpfs 文件系统需要 VM 子系统的页面来存储文件。tmpfs 自己并不知道这些页面是在交换分区还是在 RAM 中;做这种决定是 VM 子系统的工作。tmpfs 文件系统所知道的就是它正在使用某种形式的虚拟内存。
由于 tmpfs 是基于内存的,因此速度是相当快的。另外 tmpfs 使用的 VM 资源是动态的,当删除 tmpfs 中文件,tmpfs 文件系统驱动程序会动态地减小文件系统并释放 VM 资源,当然在其中创建文件时也会动态的分配VM资源。另外,tmpfs 不具备持久性,重启后数据不保留。
/dev/shm 就是一个基于 tmpfs 的设备,在有些 Linux 发行版中 /dev/shm 是 /run/shm/ 目录的一个软链接。实际上在很多系统上的 /run 是被挂载为 tmpsf 的。用 df -T 可以查看系统中的磁盘挂载情况:
文件系统 1K-块 已用 可用 已用% 挂载点 udev 1859684 4 1859680 1% /dev tmpfs 374096 1524 372572 1% /run /dev/sda8 76561456 36029540 36619724 50% / none 4 0 4 0% /sys/fs/cgroup none 5120 0 5120 0% /run/lock none 1870460 27688 1842772 2% /run/shm none 102400 56 102344 1% /run/user
那么,我们就先来说说 /run 目录。现在我们知道,该目录是基于内存的,实际上它的前身是 /var/run 目录,后来被 /run 替换。这是因为 /var/run 文件系统并不是在系统一启动就是就绪的,而在此之前已经启动的进程就先将自己的运行信息存放在 /dev 中,/dev 同样是一种 tmpfs,而且是在系统一启动就可用的。但是 /dev 设计的本意是为了存放设备文件的,而不是为了保存进程运行时信息的,所以为了不引起混淆,/dev 中存放进程信息的文件都以 "." 开始命名,也就是都是隐藏文件夹。但是即便是这样,随着文件夹的数量越来越多,/dev 里面也就越来越混乱,于是就引入了替代方案,也就是 /run。实际上在很多系统上 /var/run 目录仍然存在,但其是 /run 目录的一个软链接。
/var/run 目录中主要存放的是自系统启动以来描述系统信息的文件。比较常见的用途是 daemon 进程将自己的 pid 保存到这个目录。
/dev/shm/ 是 Linux 下一个非常有用的目录,它的意思是 Shared memory,也就是共享内存。由于它在内存上,所以所有系统进程都能共享该目录。默认情况下它的大小是内存的一半。如果希望改变它的大小,可以用 mount 来管理:
mount -o size=4000M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
如果希望永久生效,可以修改 /etc/fstab 文件:
tmpfs /dev/shm tmpfs defaults,size=4G 0 0
利用 /dev/shm 可以做很多事情,这里说一个 Python 的应用。用 Python 做数据处理时,可能会用到 numpy,通常做数据处理时的数据量都是很大的,如果有多个进程都需要用到同样的数据,那么 /dev/shm 就派上了用场,也就是用共享内存技术。Python 有一个第三方库可以用来在多个进程间共享 numpy 数组,即 SharedArray。SharedArray 便是基于 /dev/shm 的,并且采用 POSIX 标准,能够兼容多个平台。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# linux
# dev
# shm
# tempfs
# linux下查看swap分区被哪些进程占用实现脚本
# linux vps服务器进程kswapd0与events/0消耗大量CPU的问题
# linux添加和增大交换分区(swap)的方法
# 文件系统
# 是在
# 多个
# 自己的
# 都是
# 数据处理
# 虚拟内存
# 的是
# 是为了
# 已用
# 是一种
# 放在
# 也会
# 也就
# 在此
# 上了
# 是这样
# 是基于
# 都能
# 可以用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
html5的keygen标签为什么废弃_替代方案说明【解答】
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
微信公众帐号开发教程之图文消息全攻略
如何在宝塔面板中修改默认建站目录?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
使用C语言编写圣诞表白程序
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
如何在橙子建站上传落地页?操作指南详解
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel中的withCount方法怎么高效统计关联模型数量
Android实现代码画虚线边框背景效果
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
个人摄影网站制作流程,摄影爱好者都去什么网站?
新三国志曹操传主线渭水交兵攻略
实例解析angularjs的filter过滤器
再谈Python中的字符串与字符编码(推荐)
如何在建站主机中优化服务器配置?
Laravel如何升级到最新版本?(升级指南和步骤)
在线制作视频网站免费,都有哪些好的动漫网站?
如何快速查询网址的建站时间与历史轨迹?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何快速使用云服务器搭建个人网站?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
如何挑选优质建站一级代理提升网站排名?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
浅谈Javascript中的Label语句
英语简历制作免费网站推荐,如何将简历翻译成英文?
javascript中对象的定义、使用以及对象和原型链操作小结
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
如何确保FTP站点访问权限与数据传输安全?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
lovemo网页版地址 lovemo官网手机登录
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
打造顶配客厅影院,这份100寸电视推荐名单请查收
详解vue.js组件化开发实践
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
PHP正则匹配日期和时间(时间戳转换)的实例代码
图册素材网站设计制作软件,图册的导出方式有几种?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】

