Sous Ubuntu, j'ouvre un terminal et fais
sudo bash
cd /
ls | head -n 1000
Et de manière prévisible, environ 20 répertoires sont renvoyés.
Cependant, si je fais un ls et que je ne le relie à rien, le ls se bloque jusqu'à ce que je le tue depuis un autre terminal. Que pourrait-il se passer?
ÉDITER:
> type ls
ls is aliased to `ls --color=auto`
ÉDITER:
> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>
Pourquoi la coloration de la sortie de ls provoque-t-elle le blocage de cette commande?
shell
command-line
files
ls
Snitse
la source
la source
type ls
pour vérifier tous les alias possibles, etc.strace ls
peut potentiellement vous aider à identifier le problème.strace
affiche tous les appels système effectués par le programme qu'il appelle./bin/ls
(ou plutôt,command ls
) d'exécuterls
sans les options aliasées, pour confirmer si c'est l'option couleur qui fait la différence. FWIW,ls
désactive la coloration lorsque sa sortie est un tuyau ou un autre périphérique non terminal.\ls
Réponses:
Si vous exécutez ls normalement, il affichera simplement la liste des fichiers sans avoir à exécuter stat (2) sur aucun d'entre eux. En d'autres termes, il n'accède pas aux FICHIERS eux-mêmes, mais uniquement au répertoire qui contient les fichiers.
Si vous ajoutez l'option --color ou utilisez d'autres options ls qui doivent examiner les fichiers eux-mêmes, alors ls devra stat (2) ces fichiers.
Il est fort probable qu'au moins un des fichiers de votre répertoire soit réellement monté à partir d'un système distant, via NFS ou similaire. Et le serveur à partir duquel vous avez monté cette partition ne fonctionne pas ou ne répond pas. Ainsi, lorsque ls essaie d'obtenir les informations sur ce répertoire, il se bloque dans le noyau en attendant que le serveur réponde.
Comme d'autres l'ont mentionné, si vous utilisez strace, vous découvrirez à quel répertoire ls tente d'accéder lorsqu'il se bloque. Ensuite, vous pouvez démonter cette partition montée ou autre chose.
la source
sshfs
montures, et la seule façon de les démonter était de tuer les éléments liésssh
et lessshfs
processus.