是否有Linux命令可以轻松找出目录或文件所在的分区/挂载?
(这可能是一个RTM问题,我对此问题感到内疚,但不知何故,我还没有在Google上找到一个好的答案..)
给定文件或目录的路径,如何确定该文件的安装点?例如,如果/tmp作为tmpfs文件系统挂载,那么给定文件名/tmp/foo/bar我想知道它存储在以tmpfsroot为中/tmp.
这将是在C++中,我想避免通过调用外部命令system().代码应该是健壮的 - 不一定是针对故意篡改,但绝对面对嵌套的挂载点,符号链接等.
我无法找到一个简单的系统调用来执行此操作.看起来我必须自己写支票.这是我正在计划的大致轮廓.
readlinkshell命令.怎么样?/etc/mtab与getmntent()&CO.对于#1是一个简单的系统调用还是我需要读取路径的每个目录组件并解决它们,readlink(2)如果它们是符号链接?处理.和..我自己?好像很痛苦.
对于#3,我对如何做到这一点有各种各样的想法.不确定哪个最好.
open()文件,其父级,父级的父级等使用,openat(fd, "..")直到我到达其中一个/etc/mtab条目.(我怎么知道我什么时候做?fstat()并比较inode数字?)我倾向于第一个选项,但在我编码之前,我想确保我不会忽略任何东西 - 理想情况下,内置函数已经完成了!
我正在尝试使用Python获取硬盘大小和可用空间(我使用带有macOS的Python 2.7).
我正在尝试os.statvfs('/'),尤其是以下代码.我正在做的事情是否正确?giga我应该使用哪个变量定义?
import os
def get_machine_storage():
result=os.statvfs('/')
block_size=result.f_frsize
total_blocks=result.f_blocks
free_blocks=result.f_bfree
# giga=1024*1024*1024
giga=1000*1000*1000
total_size=total_blocks*block_size/giga
free_size=free_blocks*block_size/giga
print('total_size = %s' % total_size)
print('free_size = %s' % free_size)
get_machine_storage()
Run Code Online (Sandbox Code Playgroud)
编辑:
statvfs在Python 3中已弃用,您知道其他选择吗?
如何在Python中确定给定路径或驱动器是否格式化为EXT4,EXT3,EXT2,FAT32,NTFS或其他类型?
我有一个python3使用numpy.memmap数组操作的脚本.它将数组写入新生成的临时文件,该文件位于/tmp:
import numpy, tempfile
size = 2 ** 37 * 10
tmp = tempfile.NamedTemporaryFile('w+')
array = numpy.memmap(tmp.name, dtype = 'i8', mode = 'w+', shape = size)
array[0] = 666
array[size-1] = 777
del array
array2 = numpy.memmap(tmp.name, dtype = 'i8', mode = 'r+', shape = size)
print('File: {}. Array size: {}. First cell value: {}. Last cell value: {}'.\
format(tmp.name, len(array2), array2[0], array2[size-1]))
while True:
pass
Run Code Online (Sandbox Code Playgroud)
硬盘的大小只有250G.尽管如此,它可以以某种方式生成10T大文件/tmp,并且相应的数组似乎仍然可以访问.脚本的输出如下:
File: /tmp/tmptjfwy8nr. Array size: 1374389534720. …Run Code Online (Sandbox Code Playgroud) linux ×3
python ×3
mount ×2
c++ ×1
directory ×1
file ×1
filesystems ×1
hard-drive ×1
numpy ×1
sparse-file ×1