GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi *pas* analyser `ls` (et que faire à la place) ?

Je vois systématiquement des réponses citant ce lien indiquant définitivement "Ne pas analyser ls !" Cela me dérange pour plusieurs raisons :

  1. Il semble que les informations contenues dans ce lien aient été acceptées en gros sans poser de questions, bien que je puisse relever au moins quelques erreurs de lecture occasionnelle.

  2. Il semble également que les problèmes mentionnés dans ce lien n'aient suscité aucun désir de trouver une solution.

Dès le premier paragraphe :

…lorsque vous demandez [ls] pour une liste
de fichiers, il y a un énorme problème :Unix autorise presque tous les caractères dans
un nom de fichier, y compris les espaces, les retours à la ligne, les virgules, les symboles pipe et
à peu près tout ce que vous voulez jamais essayer d'utiliser comme délimiteur sauf
NUL. … ls sépare les noms de fichiers par des retours à la ligne. C'est très bien
jusqu'à ce que vous ayez un fichier avec une nouvelle ligne dans son nom. Et comme je ne connais
aucune implémentation de ls qui vous permet de terminer
les noms de fichiers avec des caractères NUL au lieu de retours à la ligne, cela nous empêche
d'obtenir une liste de noms de fichiers en toute sécurité avec ls .

Merde, non ? Comment jamais pouvons-nous gérer un ensemble de données listé terminé par une nouvelle ligne pour les données susceptibles de contenir des nouvelles lignes ? Eh bien, si les personnes qui répondent aux questions sur ce site Web ne faisaient pas ce genre de choses quotidiennement, je pourrais penser que nous avions des problèmes.

La vérité est que la plupart des ls Les implémentations fournissent en fait une API très simple pour analyser leur sortie et nous l'avons tous fait sans même nous en rendre compte. Non seulement vous pouvez terminer un nom de fichier avec null, mais vous pouvez également en commencer un avec null ou avec toute autre chaîne arbitraire que vous pourriez souhaiter. De plus, vous pouvez attribuer ces chaînes arbitraires par type de fichier . Veuillez considérer :

LS_COLORS='lc=
Linux
  1. Qu'est-ce qu'un serveur Linux et pourquoi votre entreprise en a-t-elle besoin ?

  2. Hachage de mot de passe et pourquoi nous en avons besoin

  3. Qu'est-ce qu'un TAM et pourquoi voudriez-vous en être un ?

  4. Que fait Env X=() { :;}; Command' Bash Do et pourquoi n'est-il pas sécurisé ?

  5. Qu'est-ce qui a tué mon processus et pourquoi ?

Qu'est-ce que la prison chroot et comment l'utiliser ?

Qu'est-ce qu'une machine virtuelle et pourquoi l'utiliser ?

Qu'est-ce que les conteneurs multi-comptes Firefox ? Pourquoi et comment l'utiliser ?

Qu'est-ce que la commande Grep sous Linux ? Pourquoi est-il utilisé et comment fonctionne-t-il ?

Qu'est-ce qu'un Homelab et pourquoi devriez-vous en avoir un ?

Qu'est-ce que la fonctionnalité de la communauté ONLYOFFICE et pourquoi devriez-vous l'utiliser ?