我可以df .获取当前目录所在的挂载上的一些信息,并且可以从中获取所需的所有信息mount,但是可以获取很多信息(有关其他挂载的信息)。我可以将其保留下来,但想知道是否有更好的方法。
是否有一些命令mountinfo可以mountinfo .提供我想要的信息(例如df .,但提供了所需的信息mount。)
我正在使用Debian Gnu + Linux。
stat "--printf=%m\n" .获取当前目录所在的文件系统的挂载点。因此,我们可以简化一些答案。谢谢。
我可以df .获取当前目录所在的挂载上的一些信息,并且可以从中获取所需的所有信息mount,但是可以获取很多信息(有关其他挂载的信息)。我可以将其保留下来,但想知道是否有更好的方法。
是否有一些命令mountinfo可以mountinfo .提供我想要的信息(例如df .,但提供了所需的信息mount。)
我正在使用Debian Gnu + Linux。
stat "--printf=%m\n" .获取当前目录所在的文件系统的挂载点。因此,我们可以简化一些答案。谢谢。
Answers:
我想你想要这样的东西:
findmnt -T .
使用选件时
-T,-目标路径如果路径不是安装点文件或目录,则以
findmnt相反的顺序检查路径元素以获取安装点。您只能通过来打印某些字段-o, --output [list]。findmnt --help以获取可用字段列表。
或者,您可以运行:
(until findmnt . ; do cd .. ; done)
您遇到的问题是,所有路径都相对于某物或其他路径,因此您只需走树即可。每次。
findmnt是util-linux软件包的成员,并且已经存在了几年。到目前为止,无论您使用的是哪个发行版,如果您也拥有该mount工具,都应该已经在Linux机器上安装了该工具。
man mount | grep findmnt -B1 -m1
For more robust and customizable output use
findmnt(8), especially in your scripts.
findmnt会打印出所有不带挂载点参数的挂载信息,而只显示带挂载点参数的信息。该-D是效仿df选项。没有-D它的输出类似于mount的-但可配置得多。尝试findmnt --help并亲自看看。
我将其粘贴在子shell中,因此当前shell的当前目录不会更改。
所以:
mkdir -p /tmp/1/2/3/4/5/6 && cd $_
(until findmnt . ; do cd .. ; done && findmnt -D .) && pwd
TARGET SOURCE FSTYPE OPTIONS
/tmp tmpfs tmpfs rw
SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
tmpfs tmpfs 11.8G 839.7M 11G 7% /tmp
/tmp/1/2/3/4/5/6
如果您没有-D可用的选项(在util-linux的较早版本中不是),则不必担心-在任何情况下,它都只是一个便利开关。请注意,它为每个调用生成的列标题-您可以使用-output开关包含或排除每次调用的列标题。我可以得到与-D可能提供的相同的输出:
findmnt /tmp -o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET
SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
tmpfs tmpfs 11.8G 1.1G 10.6G 10% /tmp
-D,我没有其他选择。(我使用的是Debian7,util-linux 2.20.1-5.3)
df-我愿意打赌它确实会循环,您不必告诉它这样做。
findmnt $(stat "--printf=%m\n" .)
findmnt具有-T可以绕过cd ..循环的选项。可能对其他人有用。
Linux / Unix的方式是拥有一个小型实用工具箱,这些实用工具组合在一起后,可以为您提供想要的结果。
他们往往没有在每种情况下都有用。取而代之的是,您有许多小的有用的实用程序,它们与管道等组合在一起。这样做的好处是,如果没有可用的程序,则可以很容易地编写自己的实用程序。
例如,要获取您想要的信息,可以使用:
mount | grep $(df --output=source . | tail -1)
如果要在不同目录中重复使用以上内容,请创建一个脚本:
#!/bin/bash
mount | grep $(df --output=source $1 | tail -1)
将其另存为mountinfo并使其可执行(chmod +x mountinfo)。然后可以将其用作:
mountinfo .
如果您想要一个对所有事物都互不影响的实用程序的系统,那么盖茨先生一定可以为您提供帮助;-)
--output仅存在于最新版本的GNU coreutils(≥8.22)中。
mount没有选项似乎有些事后思考:使用选项创建挂载点时,如果没有列出它们,我希望有一个更好的列表工具。如我们所见,@ mikeserv已显示给我们findmnt。
如果安装点包含空格,可能会有些混乱,但这应该可以工作,除非安装点包含换行符:
#!/bin/sh
mountpoint="$(df -P "$1" | awk '{
if (NR==1)
i=index($0,"Mounted on");
else
print substr($0,i);
}')"
mount|grep " on ${mountpoint} type "
df -P为文件系统输出一行;如果没有该选项,df则如果安装点很长,则可能会输出两行。安装点名称与标题行中的“ Mounted on”标签位于同一列中。
得到挂载点后,我们在中输出grep mount。
我不知道命令,但是您可以创建一个函数。您可以将以下内容添加到您的.bashrc:
mountinfo () {
mount | grep $(df -P "$1" | tail -n 1 | awk '{print $1}')
}
这将执行mount命令并将输出传递给grep。grep将寻找的输出df -P "$1" | tail -n 1 | awk '{print $1}',并将其分解:
df -P "$1"将df在传递给函数的参数上运行,tail -n 1只会输出第二行,其中包含partition信息。awk '{print $1}'将打印该行的第一部分,例如磁盘/分区号/dev/sda5。这就是grep在mount命令中寻找并输出的内容。获取.bashrc文件以应用更改,或注销并重新登录。
现在,如果您运行mountinfo .,您将获得所需的输出。
mount没有选择似乎有点事后的想法:有了创建挂载点的选项,但没有列出挂载点,我希望有一个更好的列表工具。如我们所见,@ mikeserv已显示给我们findmnt。
如果您使用的不是GNU coreutils df的较旧版本,则echo $(df . --output=target | tail -n 1)可以使用。与相似stat -c '%m' .,尽管我注意到https://linux.die.net/man/1/stat缺少%mformat选项的文档。
可移植地进行此操作很烦人:以上两种方法均不适用于stat或df的BSD或Cygwin版本。如果不是要在挂载点的路径中留出空格,那df -P . | tail -1 | awk '{ print $NF}'会很好,但是USB闪存驱动器通常在卷名中留有空格,这很可能会出现在挂载路径中并破坏了它。为了实现可移植性,Perl几乎可以在任何地方安装,并且CPAN具有Sys :: Filesystem :: MountPoint模块,该模块提供了所需的功能。
echo $()该命令增加了什么吗?
stat命令也可以使用。但是,我不确定%m您的系统版本是否支持提供安装点的选项。我检查了系统,似乎没有返回安装点。