2 votes

Comment connaître le chemin de recherche exact et complet de la commande whereis de Linux ?

En lisant les pages de manuel de la commande "whereis" sur mon linux Debian 'wheezy', il est indiqué que les fichiers intéressés sont :

FILES
   /{bin,sbin,etc}

   /usr/{lib,bin,old,new,local,games,include,etc,src,man,sbin,
                           X386,TeX,g++-include}

       /usr/local/{X386,TeX,X11,include,lib,man,etc,bin,games,emacs}

Je suppose que ce sont les chemins de recherche codés en dur, mais pourquoi j'obtiens ceci ?

root@kali:/bin# whereis gnome
gnome: /usr/share/gnome
root@kali:/bin#

Pourquoi l'affiche-t-il ? Puisque ce n'est pas sur le chemin supposé ?

... et de plus c'est un répertoire, pas un binaire, une source ou un manuel.

1voto

Darth Android Points 36975

Eh bien, c'est parce qu'il cherche dans le... euh... hmmm. On dirait que quelqu'un a modifié le code source mais a oublié de mettre à jour la documentation. Voici la liste complète des dossiers qui sont recherchés, directement à partir du code source :

static const char *bindirs[] = {
    "/usr/bin",
    "/usr/sbin",
    "/usr/lib",
    "/usr/lib64",
    "/bin",
    "/sbin",
    "/etc",
    "/usr/etc",
    "/lib",
    "/lib64",
    "/usr/games",
    "/usr/games/bin",
    "/usr/games/lib",
    "/usr/emacs/etc",
    "/usr/lib/emacs/*/etc",
    "/usr/TeX/bin",
    "/usr/tex/bin",
    "/usr/interviews/bin/LINUX",

    "/usr/X11R6/bin",
    "/usr/X386/bin",
    "/usr/bin/X11",
    "/usr/X11/bin",
    "/usr/X11R5/bin",

    "/usr/local/bin",
    "/usr/local/sbin",
    "/usr/local/etc",
    "/usr/local/lib",
    "/usr/local/games",
    "/usr/local/games/bin",
    "/usr/local/emacs/etc",
    "/usr/local/TeX/bin",
    "/usr/local/tex/bin",
    "/usr/local/bin/X11",

    "/usr/contrib",
    "/usr/hosts",
    "/usr/include",

    "/usr/g++-include",

    "/usr/ucb",
    "/usr/old",
    "/usr/new",
    "/usr/local",
    "/usr/libexec",
    "/usr/share",

    "/opt/*/bin",
    NULL
};

static const char *mandirs[] = {
    "/usr/man/*",
    "/usr/share/man/*",
    "/usr/X386/man/*",
    "/usr/X11/man/*",
    "/usr/TeX/man/*",
    "/usr/interviews/man/mann",
    NULL
};

static const char *srcdirs[] = {
    "/usr/src/*",
    "/usr/src/lib/libc/*",
    "/usr/src/lib/libc/net/*",
    "/usr/src/ucb/pascal",
    "/usr/src/ucb/pascal/utilities",
    "/usr/src/undoc",
    NULL
};

ソース

0voto

mpy Points 24817

La meilleure idée que j'ai, c'est de regarder dans la section code source .

Il y a trois tableaux statiques définis, un pour le chemin de recherche binaire, un pour les pages de manuel et un pour les sources. Ils comprennent les répertoires suivants (codés en dur comme mentionné dans la section BUGS section de la page de manuel, ou réglable avec les options de la ligne de commande -B , -M , -S ) - extrait de la version 2.23 :

  • chemin de recherche binaire

    "/usr/bin",
    "/usr/sbin",
    "/usr/lib",
    "/usr/lib64",
    "/bin",
    "/sbin",
    "/etc",
    "/usr/etc",
    "/lib",
    "/lib64",
    "/usr/games",
    "/usr/games/bin",
    "/usr/games/lib",
    "/usr/emacs/etc",
    "/usr/lib/emacs/*/etc",
    "/usr/TeX/bin",
    "/usr/tex/bin",
    "/usr/interviews/bin/LINUX",
    "/usr/X11R6/bin",
    "/usr/X386/bin",
    "/usr/bin/X11",
    "/usr/X11/bin",
    "/usr/X11R5/bin",
    "/usr/local/bin",
    "/usr/local/sbin",
    "/usr/local/etc",
    "/usr/local/lib",
    "/usr/local/games",
    "/usr/local/games/bin",
    "/usr/local/emacs/etc",
    "/usr/local/TeX/bin",
    "/usr/local/tex/bin",
    "/usr/local/bin/X11",
    "/usr/contrib",
    "/usr/hosts",
    "/usr/include",
    "/usr/g++-include",
    "/usr/ucb",
    "/usr/old",
    "/usr/new",
    "/usr/local",
    "/usr/libexec",
    "/usr/share",
    "/opt/*/bin"
  • chemin de recherche des pages de manuel

    "/usr/man/*",
    "/usr/share/man/*",
    "/usr/X386/man/*",
    "/usr/X11/man/*",
    "/usr/TeX/man/*",
    "/usr/interviews/man/mann"
  • chemin de recherche de la source

    "/usr/src/*",
    "/usr/src/lib/libc/*",
    "/usr/src/lib/libc/net/*",
    "/usr/src/ucb/pascal",
    "/usr/src/ucb/pascal/utilities",
    "/usr/src/undoc"

En outre $PATH et $MANPATH sont également pris en compte.

Pour la dernière partie de votre question, pourquoi les dossiers sont trouvés en tant que binaires, je suppose que whereis trouve tout en tant que binaire dans les dossiers spécifiés, même les fichiers _non_exécutables (vides) :

$ touch /usr/share/foo
$ whereis foo
foo: /usr/share/foo

Quelle est l'intention de ce Je ne sais pas. Mais dans l'ensemble, je pense whereis est un peu dépassé. Pour trouver des exécutables le Shell builtin where -a [command] est beaucoup plus approprié.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X