GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la commande Ls est-elle lente à s'interrompre sur le répertoire Nfs avec beaucoup de fichiers ?

J'ai remarqué dans les répertoires avec beaucoup de fichiers sur NFS si je le fais

ls *

puis appuyez sur Ctrl-C, cela peut prendre un certain temps (disons 20 secondes) avant que ls ne revienne.

Pourquoi? La commande ls peut-elle être corrigée pour être plus réactive ?

Réponse acceptée :

Lorsque vous exécutez ls * , la première chose qui se passe est que le shell obtient une liste du répertoire courant. Si le répertoire est énorme et que le serveur est lent, cela peut prendre un certain temps.

Une fois que le shell a obtenu la liste des noms de fichiers dans le répertoire courant, il trie cette liste (ce qui est très rapide par rapport à n'importe quelle interaction réseau), puis appelle ls . Le ls recherche tour à tour chaque fichier et récupère ses métadonnées (stat appel) pour vérifier s'il s'agit d'un répertoire ; si un fichier est un répertoire, ls répertorie son contenu plutôt que le répertoire lui-même.

Lorsque vous appuyez sur Ctrl +C , cela n'interrompra pas l'opération NFS en cours. Vous ne pouvez pas interrompre une opération de système de fichiers n'importe où, car cela pourrait laisser le système dans un état incohérent. Même la lecture d'un fichier peut mettre à jour son temps d'accès. La plupart du temps, une opération élémentaire de lecture ou d'écriture sur un fichier est instantanée selon les normes humaines, mais NFS est une exception, en particulier avec de grandes quantités de données sur un réseau lent.

Ainsi, en appuyant sur Ctrl +C ne prendra effet que :

  • si le shell génère actuellement la liste des noms de fichiers, lorsque cette liste est entièrement récupérée ;
  • si ls a été démarré et est en train d'obtenir des métadonnées sur un fichier, lorsque le serveur fournit les métadonnées ;
  • si ls a été démarré et répertorie actuellement un répertoire, lorsque la liste est entièrement récupérée, ou au moins après une partie de celle-ci.

Ce n'est pas la faute du ls commande (qui n'a peut-être même pas encore été démarrée). Ce n'est même pas la faute du shell :c'est la faute de NFS. NFS est assez lent.


Linux
  1. Pourquoi Rm peut-il supprimer les fichiers en lecture seule ?

  2. Fichiers Cat avec répertoire ?

  3. Vérification de la taille du répertoire avec la commande du sous Linux

  4. Impossible de supprimer les fichiers du répertoire avec l'erreur "Liste d'arguments trop longue"

  5. Compter le nombre de fichiers dans un répertoire avec une commande de terminal OSX

Comment lister les fichiers de manière récursive sous Linux

Comment compter les fichiers dans le répertoire sous Linux

Premiers pas avec la commande Tar

Principes de base de la ligne de commande Linux - Travailler avec des fichiers et des répertoires

Commande lsof sous Linux avec exemples

Commande comm Linux avec exemples