porque é que 'find -xdev' mostra dirs em todas as partições?

1

Enquanto pesquisava outro problema, notei (anotações adicionadas)

me@it: ~ $ date ; sudo find / -maxdepth 1 -xdev -type d | grep -ve '/$' | sort
Thu Aug 31 14:58:25 MST 2017
/bin
/boot         [*]
/.config
/dev
/etc
/home         [*]
/lib
/lib64
/lost+found
/media
/mnt
/opt
/proc
/root
/run
/sbin
/srv
/sys
/tmp
/usr
/var

No entanto, eu também sei

me@it: ~ $ date ; lsblk
Thu Aug 31 14:52:58 MST 2017
NAME                  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                     8:0    0 465.8G  0 disk
├─sda1                  8:1    0  16.6G  0 part
├─sda2                  8:2    0  97.7G  0 part
├─sda3                  8:3    0   500M  0 part  /boot  [*]
├─sda4                  8:4    0     1K  0 part
└─sda5                  8:5    0   351G  0 part
  └─LVM2_crypt        254:0    0   351G  0 crypt
    ├─LVM2_crypt-swap 254:1    0   3.9G  0 lvm   [SWAP]
    ├─LVM2_crypt-root 254:2    0    20G  0 lvm   /
    └─LVM2_crypt-home 254:3    0 327.1G  0 lvm   /home  [*]
sr0                    11:0    1  1024M  0 rom

Então, por que find / -xdev está exibindo /boot e /home ? FWIW, a ordem de -maxdepth 1 e -xdev não parece estar causando o problema:

me@it: ~ $ sudo su -
it ~ # date ; diff -wB <(find / -maxdepth 1 -xdev -type d | sort) <(find / -xdev -maxdepth 1 -type d | sort)
Thu Aug 31 15:09:53 MST 2017
it ~ # logout

Estou faltando alguma coisa? Se não, por que estou vendo /boot e /home no 1º spew acima?

    
por TomRoche 01.09.2017 / 00:32

2 respostas

2

find -xdev não desce em diretórios que são pontos de montagem, mas ainda os lista. Experimente find / -xdev -maxdepth 2 , você verá que /dev , /proc , /sys e qualquer outro ponto de montagem estão listados, mas seu conteúdo não é.

Acho que a lógica é que o ponto de montagem esteja presente no sistema de arquivos pai - mesmo que find liste seja a raiz do sistema de arquivos montado e não o diretório que serve como ponto de montagem.

Não há maneira conveniente de omitir os pontos de montagem. Se você fizer o pós-processamento, poderá verificar se eles estão no mesmo dispositivo que a raiz da travessia comparando a saída de df -P ou stat -c %d (no Linux). Mas isso é bastante sobrecarga para uma situação rara.

    
por 01.09.2017 / 01:26
0

Existe um diretório boot no sistema de arquivos raiz.

find [...] -maxdepth 2

não deve mostrar o conteúdo de /boot .

    
por 01.09.2017 / 01:21