Que sont les directorys ./ et ../?

Question simple, mais je ne sais pas où regarder et google ne répond pas aux périodes et des barres obliques.

J'essaie juste de countr le nombre de files et de directorys dans le directory courant (sans inclure les sous-dossiers / files) et essayais de différencier ls -1 | wc -l ls -1 | wc -l et ls | wc -l ls | wc -l puisqu'ils paraissent identiques. Un site que je regardais dit "Gardez à l'esprit que cela count aussi les directorys ./ et ../". en ce qui concerne celui avec ls -1 , et je ne suis pas sûr si cela signifie qu'il comprend les directorys avant ou quelque chose (que je ne veux pas), mais il ne semble pas faire cela à partir de tests.

Quelqu'un pourrait-il confirmer lequel d'entre eux serait le plus adéquat pour countr le nombre de files et de directorys dans le directory courant seulement (pas sous) et ce qu'ils signifient par ./ ​​et ../ directorys?

    Chaque directory d'un système Unix (et probablement tous les autres systèmes) contient au less deux inputs de directory. Ce sont . (directory actuel) et .. (directory parent). Dans le cas du directory racine, ceux-ci pointent au même endroit, mais avec n'importe quel autre directory, ils sont différents. Vous pouvez le voir par vous-même en utilisant les commands stat , pwd et cd (sous Linux):

     $ cd / $ stat . .. bin sbin | grep Inode Device: 802h/2050d Inode: 2 Links: 27 Device: 802h/2050d Inode: 2 Links: 27 Device: 802h/2050d Inode: 548865 Links: 2 Device: 802h/2050d Inode: 2670593 Links: 2 $ pwd / $ cd .. $ pwd / $ 

    Notez que bin et sbin chacun deux liens vers celui-ci. L'un est l'input de directory dans le directory racine et l'autre est le . input dans ce directory.

    L'utilisation de ls avec une pipe à wc -l est une astuce simple pour countr le nombre de lignes dans la sortie de ls. L'hypothèse est que chaque file ou directory occupera exactement une ligne dans la sortie. GNU ls, lorsque la sortie est non-terminale, le fait automatiquement; d'autres peuvent avoir besoin de l'option -1 pour activer explicitement le comportement. wc -l count simplement et sort le nombre de lignes ( -l ) dans son input.

    Le problème avec cette approche est que dans Linux et sur les filesystems traditionnellement utilisés sur Linux, les noms de files et de directorys (ils sont vraiment les mêmes à cet égard) sont autorisés à contenir des caractères newline . En présence de ceux-ci, l'une ou l'autre méthode s'effondre – ces inputs seront comptabilisées comme deux inputs ou plus, alors qu'en réalité elles sont une.

    Tant que vous utilisez GNU ls, que vous n'avez pas d'inputs de directory avec des noms contenant des caractères de nouvelle ligne et que vous n'avez pas d'alias impairs pour ls (par exemple, ls -a ), les deux afficheront le nombre de files et de directorys ) directory. Pour la plupart des gens, c'est assez bien, mais ce n'est pas valable dans le cas général .

    Si vous avez besoin de gérer correctement des caractères inhabituels (principalement des returns à la ligne) dans les noms d'input de directory, je suggère d'utiliser l'option -b de ls pour les échapper. ls -1bA imprimera chaque nom d'input de directory sur sa propre ligne, ls -1bA les caractères inhabituels (ainsi chaque input de directory sera considérée comme une seule), y compris tous les files dot et les directorys. Tack sur wc -l pour une command line complète de ls -1bA | wc -l ls -1bA | wc -l qui indiquera le nombre de files et de directorys dans le directory en cours (mais ignorez et .. ; c'est la différence entre -a et -A ), mais ne descendez pas dans les sous-directorys. Si vous ne souhaitez pas que des files dot soient comptés dans le total, omettez simplement le paramètre -A à ls .

    Pour répondre à la question dans le sujet:

    Lorsqu'un directory B est créé sous Unix, il est ajouté comme nouvelle input à un autre directory A (son directory parent), et dans B, deux inputs sont ajoutées: l'une appelée . comme un lien dur à lui-même, et un appelé .. comme un lien dur à A.

    Ce sont les seuls liens durs vers les directorys autorisés (bien que certaines versions plus anciennes de certains Unices aient également permis des liens arbitraires).

    c'est pourquoi avec la plupart des filesystems ( btrfs étant une exception notable), le nombre de links d'un directory est une indication du nombre de sous-directorys qu'il possède (en tenant count de leurs .. inputs).

    Lorsque vous renommez / déplacez un directory, si c'est le même directory (sous un nom différent), seule l'input du nom dans A est modifiée. B's . et .. n'est pas affecté. Mais si vous le déplacez faites un directory différent, alors .. dans B changera. Cela explique pourquoi vous pouvez renommer un directory sur lequel vous n'avez pas access en écriture (en supposant que vous avez un access en écriture au directory parent) tant que vous ne le déplacez pas vers un autre directory .. l'input vous empêche de le déplacer).

    Attention cependant: /a/b/../c pourrait ne pas être la même chose que /a/c car /a/b pourrait être un lien symbolique vers un autre directory.

    Une exception à cela est quand ce path est donné à la command cd à certains shells. Ces cd s traitent .. ignorant logiquement les .. inputs dans les directorys. Une raison pour laquelle vous voyez souvent cd -P dans des scripts correctement écrits, pour désactiver cette fonctionnalité qui pourrait causer de la confusion et des incohérences.

    Compter le nombre d'inputs dans le directory actuel à l'exclusion de . et .. avec bash , vous pouvez faire:

     shopt -s nullglob dotglob set -- * echo "$#" 

    Avec zsh:

     f=(*(ND)) echo $#f 

    Portablement:

     find . ! -name . -prune -print | grep -c / 

    Je ne suis pas un grand expert Linux, mais je connais Linux (il y a 16 ans, il était administrateur sur Slackware 🙂 bon vieux time

    les directorys ./ et ../ c'est simple:. est le directory courant, .. est le directory précédent (dans l'arborescence de pwd -local directory command-

    Si ça count, je pense qu'ils ajoutent 2 au total de la list, ne vont pas vraiment récursivement et countnt le directory sous celui en cours, et countnt de nouveau le directory courant (.) :))

    Donc, fondamentalement, je pense qu'il ajoute la valeur 2 à countr déjà (files) dans le directory en cours.

    Tout le monde me corrige si je me trompe.

    Je post juste pour aider et vu que personne n'a répondu à cette question ici, ils pourraient être occupés. Mais juste expérimenter et voir si vous avez 10 files et countz 12, alors c'est tout.