Este post é um pouco antigo, mas não sinto que o comportamento que o OP está vendo tenha sido explicado. Como outros afirmaram, /etc/init.d
é um link simbólico para /etc/rc.d/init.d
. A parte ausente é a razão pela qual ambos os caminhos usados acima retornam o mesmo inode, que é devido ao uso da barra de avanço. Quando um caminho termina em uma barra, ele informa ao kernel e outras ferramentas que um diretório é destinado. Ele pode proteger um comando mv / cp de renomear um arquivo quando o destino pretendido deveria ser um diretório que realmente não existe. Ele também faz com que a chamada de sistema lstat (2) usada por ls desrefere o link simbólico e, em vez disso, retorna o diretório para o qual ele aponta (ou lança um erro se não apontar para um diretório existente). Experimente este exemplo para ver a diferença:
$ ls -id .
927578 .
$ ls -id ./parent
927641 ./parent
$ ls -id ./parent/
927641 ./parent/
$ ls -id ./parent/child
927643 ./parent/child
$ ls -id ./parent/child/
927643 ./parent/child/
$ ls -id ./child
927645 ./child
$ ls -id ./child/
927643 ./child/
$ ls -idL ./child
927643 ./child
$ ls -id ./child/..
927641 ./child/..
$ ls -id ./child/../..
927578 ./child/../..
Você pode ver que a presença da barra final é importante apenas para o caso de link simbólico, mas oculta o inode do link. Além disso, a opção -L para ls faz algo semelhante, embora para qualquer tipo de arquivo.