今天,某同事向我反应,我写的程序有问题。出问题的大致功能是这样的,我需要在不修改原文件的情况下,备份一个新的文件出来(新文件最后一小部分内容还保存在内存)。实现方法的方法很简单,读取旧文件,然后将内容写到新文件,读取完旧文件后,再将内存部分内容写到新文件。现在问题出来了,备份的新文件比旧文件小很多,只看到一小部分内容(我猜是原先保存在内存的那部分)。在同事的电脑上测试,每次都可以重现,但我在我的电脑上测试总是无法重现。没办法,只能在单元测试工具上添加一个unit test case来跟踪测试。重现了,可以重现了,仔细跟踪,原因是这样的...
首先,为了不让其他线程修改新文件,我以mode为0的模式打开新文件(假设名叫file1,如果文件不存在,就创建一个),然后往里面写内容,直到写完内容(还有一小部分保存在内存)。当需要备份file2文件打开file1时,打开文件失败(因为mode为0,无可读不可写),导致无法备份file1文件里的内容,只保存了内存部分。那为什么同事电脑上每次都可以重现,而我的电脑上却不能重现呢。这就是超级用户的超级权限,我的电脑上使用的是root用户测试,而同事使用的是普通用户。看个例子就知道了(使用普通用户和root用户分别创建一个文件,改mode为0,再读取该文件,结果root可以读,而普通用户不可以读)
//测试普通用户
[welkin@dev91 ~]$ cd /tmp/
[welkin@dev91 /tmp]$ touch welkin
[welkin@dev91 /tmp]$ chmod 000 welkin
[welkin@dev91 /tmp]$ cat welkin
cat: welkin: 权限不够
[welkin@dev91 /tmp]$
//测试root用户
[root@dev91 tmp]# touch root
[root@dev91 tmp]# chmod 000 root
[root@dev91 tmp]# cat root
[root@dev91 tmp]#
看两个文件的mode全部是0
[welkin@dev91 /tmp]$ ll root welkin
---------- 1 root root 0 4月 22 19:03 root
---------- 1 welkin welkin 0 4月 22 19:02 welkin
[welkin@dev91 /tmp]$
这就是超级用户的超级权限,通过这个例子看出,即使改mode为0,当用root运行程序,其他线程也可以读的。如果不想让其他线程读,应该对文件加个线程锁,而不是把mode改为0。
总之,把文件的mode改为0是不安全的,可能会出现想让其他进程读的却读不了,而不想让其他线程读的,却可以读取到了
分享到:
相关推荐
“Root”源自Unix/Linux系统,代表着系统中拥有最高权限的超级用户账户。在Android系统中,Root权限赋予用户对设备底层文件系统的完全控制权,包括但不限于安装自定义应用程序、更改或删除系统预装应用、调整系统...
需求分析阶段,主要确定系统需具备的功能,如宿舍信息管理(录入、查询、修改、删除)、用户权限管理(普通员工、系统管理员、超级管理员)、报表统计等。这些功能的实现将满足不同层次用户的使用需求,确保系统功能...
它的设计理念是模块化和可移植性,这使得Linux可以在各种硬件平台上运行,从智能手机到超级计算机。Linux的发展历程见证了开源社区的力量,它通过全球各地的开发者贡献代码,不断进化和完善。 01.Linux安装_...
8. **安全与权限**:Linux内核通过用户空间和内核空间的分离、权限控制(如Unix权限模型、SELinux等)来保障系统的安全性。 通过对Linux内核源码的学习,开发者不仅可以掌握操作系统的基本原理,还能了解到如何实现...
我们见证了 xAE(GAE/BAE/SAE/etc)的兴起与没落。2009 年选择了 GAE 作为服务器,并开始实现 Latke 框架来解决跨云平台,直到告别 GAE,不得不感叹技术更迭之快 感受到了自造轮子的优缺点,并且可以肯定一点:...
在发展历程中,IBM AIX5L见证了多项技术创新,如“深蓝”超级计算机的诞生,支持大规模数据访问和密集计算。S80和x80的发布分别代表了UNIX服务器的新纪元和RS/6000系列的革新。 AIX系统的管理涵盖多个方面,包括: ...