相关疑难解决方法(0)

如何查找挂载/分区目录或文件?(Linux服务器)

是否有Linux命令可以轻松找出目录或文件所在的分区/挂载?

(这可能是一个RTM问题,我对此问题感到内疚,但不知何故,我还没有在Google上找到一个好的答案..)

linux directory mount file disk-partitioning

161
推荐指数
1
解决办法
9万
查看次数

文件安装在哪里?

给定文件或目录的路径,如何确定该文件的安装点?例如,如果/tmp作为tmpfs文件系统挂载,那么给定文件名/tmp/foo/bar我想知道它存储在以tmpfsroot为中/tmp.

这将是在C++中,我想避免通过调用外部命令system().代码应该是健壮的 - 不一定是针对故意篡改,但绝对面对嵌套的挂载点,符号链接等.

我无法找到一个简单的系统调用来执行此操作.看起来我必须自己写支票.这是我正在计划的大致轮廓.

  1. 将文件名规范化为readlinkshell命令.怎么样?
  2. 阅读/etc/mtabgetmntent()&CO.
  3. 确定文件的相应安装条目.怎么样?

对于#1是一个简单的系统调用还是我需要读取路径的每个目录组件并解决它们,readlink(2)如果它们是符号链接?处理...我自己?好像很痛苦.

对于#3,我对如何做到这一点有各种各样的想法.不确定哪个最好.

  1. open()文件,其父级,父级的父级等使用,openat(fd, "..")直到我到达其中一个/etc/mtab条目.(我怎么知道我什么时候做?fstat()并比较inode数字?)
  2. 在mount表中找到最长的目录名,它是我文件名的子字符串.

我倾向于第一个选项,但在我编码之前,我想确保我不会忽略任何东西 - 理想情况下,内置函数已经完成了!

c++ linux mount

22
推荐指数
1
解决办法
5451
查看次数

获取Python中的硬盘大小

我正在尝试使用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 hard-drive

17
推荐指数
3
解决办法
2万
查看次数

如何获取目录或驱动器的文件系统?

如何在Python中确定给定路径或驱动器是否格式化为EXT4,EXT3,EXT2,FAT32,NTFS或其他类型?

python filesystems

3
推荐指数
1
解决办法
1249
查看次数

numpy.memmap:虚假的内存分配

我有一个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)

python linux numpy memory-mapped-files sparse-file

1
推荐指数
1
解决办法
1184
查看次数