O problema aqui é que você está usando um curinga, junto com o que o comando grep esconde de você.
O shell expande o curinga para você, portanto, o ls
vê o comando como ls /dev/autofs /dev/block /dev/bsg
e assim por diante para cada arquivo e diretório que você tem em /dev/
. Você pode demonstrar o que o ls
vê fazendo echo /dev/*
para ver apenas como o shell expande o curinga.
Como um efeito colateral disso, todos os arquivos em todas as pastas em /dev/
também são listados. Como o comando ls
(após o shell ter expandido o curinga) contém vários diretórios, cada diretório terá seu próprio título. Então a saída real parece algo como:
brw-rw---- 1 root disk 8, 16 Feb 4 14:43 /dev/sdb
brw-rw---- 1 root disk 8, 17 Feb 4 14:43 /dev/sdb1
brw-rw---- 1 root disk 8, 0 Feb 4 14:43 /dev/sda
brw-rw---- 1 root disk 8, 2 Feb 4 14:43 /dev/sda2
brw-rw---- 1 root disk 8, 1 Feb 4 14:43 /dev/sda1
...
/dev/block:
total 0
lrwxrwxrwx 1 root root 6 Feb 4 14:43 8:16 -> ../sdb
lrwxrwxrwx 1 root root 7 Feb 4 14:43 8:17 -> ../sdb1
lrwxrwxrwx 1 root root 6 Feb 4 14:43 8:0 -> ../sda
lrwxrwxrwx 1 root root 7 Feb 4 14:43 8:2 -> ../sda2
lrwxrwxrwx 1 root root 7 Feb 4 14:43 8:1 -> ../sda1
No entanto, a linha /dev/block
está oculta pelo comando grep
, portanto você não a vê. Experimente sem o grep
e talvez usando less
para ver claramente o que o ls
está produzindo.
Para confundir mais, o 8:16
in 8:16 -> ../sdb
é um nome de arquivo e não um timestamp ou qualquer outra coisa. /dev/block/8:16
é o nome de um dispositivo de bloco, que é vinculado a ../sdb
ou /dev/sdb
, por assim dizer.
Você pode parar ls
dos subdiretórios de expansão especificando o d
flag.
ls -altrhd /dev/* | grep sd
Ou, claro, por não colocar um curinga após /dev/
:
ls -altrh /dev/ | grep sd