如果我在 / 下有 8 个目录,其中 5 个目录位于不同的安装点上,则 /
/dev/md/dsk/d0 49G 32G 17G 66% /
/dev/md/dsk/d65 76G 77M 75G 1% /u03
/dev/md/dsk/d64 345G 76G 266G 23% /u02
/dev/md/dsk/d5 76G 77M 75G 1% /u01
/dev/dsk/emcpower0g 591G 288G 297G 50% /db
/dev/dsk/emcpower1g 591G 116G 469G 20% /db2
执行 ls -l
bash-3.2# pwd
/
bash-3.2# ls -l
drwxr-xr-x 3 root sys 512 Jun 24 2014 boot
**drwxr-xr-x 5 root root 512 Sep 16 2014 db
drwxr-xr-x 6 root root 512 Sep 16 2014 db2
drwxr-xr-x 19 root sys 5120 Jul 11 22:57 dev
drwxr-xr-x 2 root sys 512 Jul 11 16:17 devices
drwxr-xr-x 3 root root 512 Jun 25 2014 u01
drwxr-xr-x 4 root root 512 Jul 11 17:08 u02
drwxr-xr-x 3 root root 512 Sep 3 2014 u03
我如何过滤/列表显示
a) 仅那些文件以及在 / mountpoint 下创建的其他 3 个目录(/boot、/dev、/devices..)
b) / 下但挂载在不同点的 5 个目录(例如 /db、/db2、/u01..)
答案1
在 Linux 系统上你可以使用findmnt
:
set ''
for r in /*
do findmnt "$r" ||
! set '' "$r$@" &&
ls "$r"
done
该命令将执行ls
以下操作:其他挂载,并且当您准备好时,所有/
根挂载文件名都可用。$@
所以列出你会做的:
ls "$@"
答案2
对于问题b(挂载目录与根目录不同):
{
stat --printf='%d\n' /
find / -mount -maxdepth 1 -type d -printf '%D%p\n'
} | awk -F/ 'NR==1{root=$1}; $2!=""&&$1!=root{print "/"$2}'
stat
吐出根设备的十进制设备号。然后该find
命令列出 直接位于 下的目录/
以及十进制设备号。这两个命令的输出都发送到awk
.awk
如果设备号不等于根设备,则打印出目录。在回答第一个问题时,它$2!=""&&
是用来过滤掉实际的根目录的。
将程序中!=
的最后一个更改为第一个问题的查找目录部分。==
awk