22 votes

Erreurs de la commande whatis. Impossible de reconstruire la base de données avec makewhatis ?

Comment puis-je mettre à jour le whatis base de données ?

$ sudo /usr/libexec/makewhatis
Password:
makewhatis: /usr/share/man/whatis.tmp: Read-only file system

Je pense que le fait de pouvoir mettre à jour cette base de données résoudra un autre problème que j'ai. Mon chemin vers la découverte est le suivant...

J'ai récemment commencé à remarquer que les complétions des coquilles de poisson étaient fâcheusement lentes sur ma machine, peut-être peu après la mise à niveau vers Catalina.

J'ai fait un peu de profilage avec fish -d5 et a remarqué que la majorité du temps était consacré à la apropos commande. J'ai fait quelques lectures et j'ai appris que les outils apropos , whatis y makewhatis sont tous liés. Ils indexent les pages de manuel et les rendent consultables. Fish shell les utilise (correctement) pour proposer des compléments utiles.

Quand je cours whatis o apropos standalone, j'obtiens le résultat suivant :

$ whatis man
hugo-gen-man(1)          - Generate man pages for the Hugo CLI
groff_man(7)             - groff `man' macros to support generation of man pages
groffer(1)               - display groff files and man~pages on X and tty
man(1)                   - format and display the on-line manual pages
man.conf(5)              - configuration data for man
zshall(1)                - the Z shell meta-man page
xml2man(1)               - MPGL to mdoc (man page) translator
makewhatis: /usr/lib/./libgutenprint.2.dylib: No such file or directory
makewhatis: /usr/lib/libsasl2.2.0.1.dylib: Not a directory
makewhatis: /usr/lib/libldap.dylib: Not a directory
makewhatis: /usr/lib/libsqlite3.0.dylib: Not a directory
makewhatis: /usr/lib/libcom_err.dylib: Not a directory
...

Suivi par au moins 100 lignes supplémentaires des messages "Not a directory". Je crois que ce sont toutes ces lignes inutiles qui ralentissent les choses.

Alors j'ai pensé que peut-être je devais juste reconstruire le whatis (peut-être après la mise à jour de Catalina ?). Cependant, cela ne semble pas fonctionner :

$ sudo /usr/libexec/makewhatis
Password:
makewhatis: /usr/share/man/whatis.tmp: Read-only file system

Donc cette partie est un peu troublante. Comment puis-je reconstruire la base de données whatis ? J'ai l'impression que cela résoudra mes problèmes si j'arrive à le faire.

1voto

GDP2 Points 1238

Ma propre solution à ce problème a consisté à créer un lien symbolique à l'adresse suivante /usr/share/man/whatis . Comme j'utilise Emacs, je m'appuie souvent sur la fonction M-x man qui, à son tour, utilise la commande apropos pour les entrées d'autocomplétion. Avec un whatis je ne peux pas obtenir de résultats d'autocomplétion corrects, ce qui est très gênant.

J'ai également utilisé jusqu'à présent un Root cronjob script pour garder mon whatis à jour, comme suit :

*/5 * * * * /usr/libexec/makewhatis -o /usr/share/man/whatis /usr/share/man /Applications/Xcode.app/Contents/Developer/usr/share/man [etc. ...]

Cependant, cela ne fonctionne plus depuis que /usr/share/man/whatis n'est plus directement accessible en écriture. Pour moi, il n'était même plus présent dans le chemin du système de fichiers.

Donc, pour résoudre ce problème, après de nombreuses recherches et réflexions, j'ai décidé de créer un lien symbolique à l'adresse suivante /usr/share/man/whatis au lieu d'un fichier réel, pointant vers un fichier accessible en écriture dans mon dossier personnel : /Users/user/.emacs.d/whatis

J'ai créé ce lien symbolique en utilisant cet utilitaire : https://github.com/fxgst/writeable_root

Plus précisément, j'ai couru :

$ ./writeable_root
$ cd usr/share/man
$ ln -s /Users/user/.emacs.d/whatis whatis

Et puis le système a redémarré, avec mon nouveau lien symbolique en place.

Je pourrais pas utiliser synthetic.conf pour créer ce lien symbolique, comme synthetic.conf ne crée que des liens symboliques directement sous / . Il ne les créera pas dans les répertoires inférieurs de la hiérarchie du système de fichiers.

De cette façon, je peux avoir ce fichier modifiable et j'ai simplement changé le cronjob pour qu'il soit exécuté par mon propre utilisateur au lieu de Root, avec le simple changement qu'il modifie le fichier dans mon dossier personnel au lieu de l'endroit où il se trouve. /usr/share/man/whatis :

*/5 * * * * /usr/libexec/makewhatis -o ~/.emacs.d/whatis /usr/share/man /Applications/Xcode.app/Contents/Developer/usr/share/man [etc. ...]

0voto

user62627 Points 1

Catalina a rompu le commandement de l'homme.

Pour ignorer les messages d'erreur sous /bin/bash créer un alias pour l'homme :

alias man='/usr/bin/man 2>/dev/null'

0voto

Austin Riba Points 321

Je pense que cela est corrigé dans MacOS 10.15.4. Merci à @minopret de l'avoir signalé dans les commentaires de la question originale. En exécutant le programme non modifié whatis o apropos n'entraînent pas d'erreurs.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X