GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser les pages de manuel pour apprendre à utiliser les commandes ?

En recherchant un autre problème, je suis tombé sur une commande,

locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"

dont je voulais en savoir plus. J'ai donc lancé man xargs et obtenez le résultat suivant :

XARGS(1)                    General Commands Manual                   XARGS(1)

NAME
       xargs - build and execute command lines from standard input

SYNOPSIS
       xargs  [-0prtx]  [-E  eof-str] [-e[eof-str]] [--eof[=eof-str]] [--null]
       [-d delimiter] [--delimiter delimiter]  [-I  replace-str]  [-i[replace-
       str]]    [--replace[=replace-str]]   [-l[max-lines]]   [-L   max-lines]
       [--max-lines[=max-lines]] [-n max-args] [--max-args=max-args] [-s  max-
       chars]  [--max-chars=max-chars]  [-P max-procs] [--max-procs=max-procs]
       [--interactive]      [--verbose]      [--exit]      [--no-run-if-empty]
       [--arg-file=file]   [--show-limits]   [--version]   [--help]   [command
       [initial-arguments]]

DESCRIPTION
       This manual page documents the GNU version of xargs...

J'essaie de m'améliorer dans l'utilisation de la documentation pour en savoir plus sur les programmes Linux, mais cette section "Synopsis" est intimidante pour les nouveaux utilisateurs. Cela ressemble littéralement à du charabia par rapport à man locate ou man free .

Jusqu'à présent, je comprends que les crochets signifient facultatifs et les crochets imbriqués signifient des options en option. Mais comment suis-je censé induire une commande valide avec ça ?

Je ne demande pas d'aide avec xargs ici. Je cherche de l'aide pour interpréter une page de manuel afin de comprendre des commandes compliquées. Je veux arrêter de faire des blogs Web indexés par Google et de l'aide personnelle des autres ma première approche pour apprendre les commandes Linux.

Réponse acceptée :

Eh bien, voici ma façon très personnelle de lire les pages de manuel :

La page de manuel

Lorsque vous ouvrez une page de manuel à l'aide de man commande, la sortie sera affichée/rendue par la commande less ou more commandes, ou toute autre commande qui sera définie comme votre pager (manpager).

Si vous utilisez Linux, vous êtes probablement servi avec votre infrastructure man déjà configurée pour utiliser /usr/bin/less -is (sauf si vous avez installé une distribution minimale) en tant que man(1) , expliquez dans sa section Options :

-P pager
Specify which pager to use. This option overrides the MANPAGER environment variable, 
which in turn overrides the PAGER variable. By default, man uses /usr/bin/less -is.

Sur FreeBSD et OpenBSD, il suffit d'éditer le MANPAGER variable d'environnement car ils utiliseront principalement more , et certaines fonctionnalités telles que la recherche et la surbrillance de texte peuvent être manquantes.

Il y a une bonne réponse à la question de savoir quelles différences more , less et most ont ici (jamais utilisé most ). La possibilité de faire défiler vers l'arrière et vers l'avant par page avec Espace ou dans les deux sens par ligne avec ou (aussi, en utilisant vi liaisons j et k ) est essentiel lors de la navigation dans les pages de manuel. Appuyez sur h en utilisant less pour voir le récapitulatif des commandes disponibles.

Et c'est pourquoi je vous suggère d'utiliser less comme votre téléavertisseur. less ont quelques fonctionnalités essentielles qui seront utilisées lors de cette réponse.

Comment une commande est-elle formatée ?

Conventions utilitaires :Spécifications de base du groupe ouvert, numéro 7 – IEEE Std 1003.1, édition 2013. Vous devriez visiter ce lien avant d'essayer de comprendre une page de manuel. Cette référence en ligne décrit la syntaxe des arguments des utilitaires standard et introduit la terminologie utilisée dans POSIX.1-2017 pour décrire les arguments traités par les utilitaires. Cela vous informera également indirectement de la véritable signification de mots tels que paramètres, arguments, option d'argument…

L'en-tête de n'importe quelle page de manuel vous semblera moins énigmatique après avoir compris la notation des conventions d'utilité :

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

Gardez à l'esprit ce que vous voulez faire.

Lorsque vous faites vos recherches sur xargs vous l'avez fait dans un but, n'est-ce pas ? Vous aviez un besoin spécifique qui était de lire la sortie standard et d'exécuter des commandes basées sur cette sortie.

Mais, quand je ne sais pas quelle commande je veux ?

Utilisez man -k ou apropos (ils sont équivalents). Si je ne sais pas comment trouver un fichier :man -k file | grep search . Lisez les descriptions et trouvez celle qui répondra le mieux à vos besoins. Exemple :

apropos -r '^report'
bashbug (1)          - report a bug in bash
df (1)               - report file system disk space usage
e2freefrag (8)       - report free space fragmentation information
filefrag (8)         - report on file fragmentation
iwgetid (8)          - Report ESSID, NWID or AP/Cell Address of wireless network
kbd_mode (1)         - report or set the keyboard mode
lastlog (8)          - reports the most recent login of all users or of a given user
pmap (1)             - report memory map of a process
ps (1)               - report a snapshot of the current processes.
pwdx (1)             - report current working directory of a process
uniq (1)             - report or omit repeated lines
vmstat (8)           - Report virtual memory statistics

Apropos fonctionne avec des expressions régulières par défaut, (man apropos , lisez la description et découvrez ce que -r fait), et dans cet exemple, je recherche toutes les pages de manuel dont la description commence par "rapport".

Pour rechercher des informations liées à la lecture du traitement d'entrée/sortie standard et à l'atteinte de xargs comme option possible :

man -k command| grep input
xargs (1)            - build and execute command lines from standard input

Lisez toujours la DESCRIPTION avant de commencer

Prenez le temps de lire la description. En lisant simplement la description du xargs commande nous apprendrons que :

  • xargs lit à partir de STDIN et exécute la commande nécessaire. Cela signifie également que vous devrez avoir une certaine connaissance du fonctionnement de l'entrée standard et de la manière de la manipuler via des canaux pour chaîner des commandes
  • Le comportement par défaut est d'agir comme /bin/echo . Cela vous donne une petite astuce si vous avez besoin d'enchaîner plus d'un xargs , vous n'avez pas besoin d'utiliser echo pour imprimer.
  • Nous avons également appris que les noms de fichiers Unix peuvent contenir des blancs et des retours à la ligne, que cela pourrait être un problème et que l'argument -0 est un moyen d'empêcher les choses d'exploser en utilisant des séparateurs de caractères nuls. La description vous avertit que la commande utilisée comme entrée doit également prendre en charge cette fonctionnalité et que GNU find soutiens le. Génial. On utilise beaucoup find avec xargs .
  • xargs s'arrêtera si l'état de sortie 255 est atteint.
Connexes :Apprendre l'anglais - La signification de laisser quelqu'un en arrière [en anglais américain] ?

Certaines descriptions sont très courtes et c'est généralement parce que le logiciel fonctionne de manière très simple. Ne pensez même pas à sauter cette partie de la page de manuel 😉

Autres choses auxquelles prêter attention…

Vous savez que vous pouvez rechercher des fichiers en utilisant find . Il y a une tonne d'options et si vous ne regardez que le SYNOPSIS , vous serez submergé par ceux-ci. Ce n'est que la pointe de l'iceberg. Hors NAME , SYNOPSIS , et DESCRIPTION , vous aurez les sections suivantes :

  • AUTHORS :les personnes qui ont créé ou aidé à la création de la
    commande.

  • BUGS :répertorie tous les défauts connus. Il ne peut s'agir que de limitations de mise en œuvre.

  • ENVIRONMENT :Aspects de votre shell qui pourraient être affectés par la commande, ou variables qui seront utilisées.

  • EXAMPLES ou NOTES :S'explique.

  • REPORTING BUGS :Qui vous devrez contacter si vous trouvez des bogues sur cet outil ou dans sa documentation.

  • COPYRIGHT :Personne qui a créé et avis de non-responsabilité concernant le logiciel. Tous liés à la licence du logiciel lui-même.

  • SEE ALSO  :Autres commandes, outils ou aspects de travail liés à cette commande et qui ne peuvent tenir dans aucune des autres sections.

Vous trouverez très probablement des informations intéressantes sur les aspects que vous souhaitez d'un outil dans la section exemples/notes.

Exemple

Dans les étapes suivantes, je vais prendre find par exemple, puisque ses concepts sont "plus simples" que xargs pour expliquer (une commande trouve des fichiers et l'autre traite de stdin et de l'exécution en pipeline d'autres sorties de commande). Imaginons simplement que nous ne savons rien (ou très peu) de cette commande.

J'ai un problème spécifique qui est :je dois chercher chaque fichier avec le .jpg extension, et avec 500KiB (KiB =1024 byte, communément appelé kibibyte), ou plus en taille à l'intérieur d'un dossier de serveur ftp.

D'abord, ouvrez le manuel :man find . Le SYNOPSIS est mince. Cherchons des choses dans le manuel :Tapez / plus le mot que vous voulez (size ). Il indexera beaucoup d'entrées -size qui comptera des tailles spécifiques. Est resté coincé. Je ne sais pas comment rechercher avec "plus que" ou "moins que" une taille donnée, et l'homme ne me le montre pas.

Essayons et recherchons la prochaine entrée trouvée en appuyant sur n . D'ACCORD. Trouvé quelque chose d'intéressant :find ( -size +100M -fprintf /root/big.txt %-10s %pn ) . Peut-être que cet exemple nous montre qu'avec -size +100M il trouvera des fichiers de 100 Mo ou plus. Comment pourrais-je confirmer ? Aller à l'en-tête de la page de manuel et rechercher d'autres mots.

Encore une fois, essayons le mot greater . En appuyant sur g nous mènera à la tête de la page de manuel. / greater , et la première entrée est :

 Numeric arguments can be specified as

    +n     for **greater** than n,

    -n     for less than n,

     n      for exactly n.

Super. Il semble que ce bloc du manuel ait confirmé ce que nous soupçonnions. Cependant, cela ne s'appliquera pas seulement aux tailles de fichiers. Il s'appliquera à n'importe quel n que l'on peut trouver sur cette page de manuel (comme le dit la phrase :"Les arguments numériques peuvent être spécifiés comme").

Bon. Trouvons un moyen de filtrer par nom :g / insensitive . Pourquoi? Insensible? Wtf ? Nous avons un serveur ftp hypothétique, où "cet autre système d'exploitation" pourrait donner un nom de fichier avec des extensions comme .jpg , .JPG , .JpG . Cela nous mènera à :

-ilname pattern
              Like  -lname,  but  the  match  is  case insensitive.  If the -L
              option or the -follow option is in  effect,  this  test  returns
              false unless the symbolic link is broken.

Cependant, après avoir recherché lname vous verrez que cela ne recherchera que des liens symboliques. Nous voulons de vrais fichiers. L'entrée suivante :

   -iname pattern
          Like -name, but the match is case insensitive.  For example, the
          patterns `fo*' and `F??' match  the  file  names  `Foo',  `FOO',
          `foo',  `fOo',  etc.   In these patterns, unlike filename expan‐
          sion by the shell, an initial '.' can be matched by  `*'.   That
          is, find -name *bar will match the file `.foobar'.   Please note
          that you should quote patterns as a matter of course,  otherwise
          the shell will expand any wildcard characters in them.

Génial. Je n'ai même pas besoin de lire à propos de -name pour voir que -iname est la version insensible à la casse de cet argument. Assemblons la commande :

Commande : find /ftp/dir/ -size +500k -iname "*.jpg"

Qu'est-ce qui est implicite ici :la connaissance que le caractère générique ? représente "n'importe quel caractère à une seule position" et * représente "zéro ou plus de n'importe quel caractère". Le -name paramètre vous donnera un résumé de ces connaissances.

Conseils qui s'appliquent à toutes les commandes

Certaines options, mnémoniques et "style de syntaxe" parcourent toutes les commandes, ce qui vous fait gagner du temps en n'ayant pas du tout à ouvrir la page de manuel. Ceux-ci sont appris par la pratique et les plus courants sont :

  • Généralement, -v signifie verbeux. -vvv est une variante "très très verbeux" sur certains logiciels.
  • Conformément à la norme POSIX, les arguments à un tiret peuvent généralement être empilés. Exemple :tar -xzvf , cp -Rv .
  • Généralement -R et/ou -r signifie récursif.
  • Presque toutes les commandes ont une brève aide avec le --help option.
  • --version affiche la version d'un logiciel.
  • -p , les utilitaires de copie ou de déplacement signifient "préserver les autorisations".
  • -y signifie OUI, ou "continuer sans confirmation" dans la plupart des cas.

Notez que ce qui précède n'est pas toujours vrai. Par exemple, le -r switch peut signifier des choses très différentes pour différents logiciels. C'est toujours une bonne idée de vérifier et de s'assurer qu'une commande pourrait être dangereuse, mais ce sont des valeurs par défaut courantes.

Connexe :Apprendre l'anglais – Est-ce que « votre temps est fait » est-il souvent utilisé ?

Valeurs par défaut des commandes.

Au niveau du téléavertisseur de cette réponse, nous avons vu que less -is est le téléavertisseur de man . Le comportement par défaut des commandes n'est pas toujours affiché dans une section séparée des pages de manuel ou dans la section la plus placée en haut.

Vous devrez lire les options pour connaître les valeurs par défaut, ou si vous avez de la chance, taper / pager vous mènera à cette information. Cela nécessite également que vous connaissiez le concept du pager (logiciel qui fait défiler la page de manuel), et c'est une chose que vous n'acquérirez qu'après avoir lu de nombreuses pages de manuel.

Pourquoi est-ce important ? Cela ouvrira votre perception si vous trouvez des différences sur le comportement de défilement et de couleur lors de la lecture de man(1) sous Linux(less -is téléavertisseur) ou FreeBSD man(1) par exemple.

Et qu'en est-il du SYNOPSIS syntaxe ?

Après avoir obtenu toutes les informations nécessaires pour exécuter la commande, vous pouvez combiner des options, des arguments d'option et des opérandes en ligne pour faire votre travail. Présentation des concepts :

  • Les options sont les commutateurs qui dictent le comportement d'une commande. "Fais ça
    ne fais pas ça " ou " agir de cette façon “. Souvent appelés commutateurs.
  • Les arguments d'option sont utilisés dans la plupart des cas lorsqu'une option n'est pas
    binaire (on/off) comme -t au montage, qui spécifie le type d'un
    système de fichiers (-t iso9660 , -t ext2 ). "Fais ça les yeux fermés " ou
    "nourrir les animaux, mais seulement les lions “. Aussi appelés arguments.
  • Les opérandes sont des choses sur lesquelles vous voulez que cette commande agisse. Si vous utilisez cat file.txt , l'opérande est un fichier dans votre répertoire courant
    , et son contenu sera affiché sur STDOUT . ls est une commande
    où un opérande est facultatif. Les trois points après l'opérande
    vous indiquent implicitement que cat peut agir sur plusieurs opérandes (fichiers) à
    en même temps. Vous remarquerez peut-être que certaines commandes ont défini le type d'opérande
    qu'elles utiliseront. Exemple :cat [OPTION] [FILE]...

Synopsis connexe :

  • Comprendre le synopsis dans la page de manuel

Quand cette méthode ne fonctionnera-t-elle pas ?

  • Pages de manuel sans exemples
  • Pages de manuel où les options ont une courte explication
  • Lorsque vous utilisez des mots clés génériques tels que and , to , for dans les pages de manuel
  • Pages de manuel non installées. Cela semble évident mais, si vous n'avez pas lftp (et ses pages de manuel) installé, vous ne pouvez pas savoir qu'il s'agit d'une option appropriée en tant que client ftp plus sophistiqué en exécutant man -k ftp

Dans certains cas, les exemples seront assez simples, et vous devrez faire quelques exécutions de votre commande pour tester, ou dans le pire des cas, la chercher sur Google.

Autre :Langages de programmation et ses modules :

Si vous programmez ou créez simplement des scripts, gardez à l'esprit que certains langages ont leurs propres systèmes de pages de manuel, comme perl (perldocs ), python(pydocs ), etc., contenant des informations spécifiques sur les méthodes/fonctions, les variables, le comportement et d'autres informations importantes sur le module que vous essayez d'utiliser et d'apprendre. Cela m'a été utile lorsque je créais un script pour télécharger des e-mails IMAP non lus en utilisant le perl Mail::IMAPClient module.

Vous devrez comprendre ces pages de manuel spécifiques en utilisant man -k ou effectuer une recherche en ligne. Exemples :

[[email protected] ~]# man -k doc | grep perl
perldoc              (1)  - Look up Perl documentation in Pod format


[[email protected] ~]# perldoc Mail::IMAPClient
IMAPCLIENT(1)         User Contributed Perl Documentation        IMAPCLIENT(1)

NAME
       Mail::IMAPClient - An IMAP Client API

SYNOPSIS
         use Mail::IMAPClient;

         my $imap = Mail::IMAPClient->new(
           Server   => ’localhost’,
           User     => ’username’,
           Password => ’password’,
           Ssl      => 1,
           Uid      => 1,
         );

…des tonnes d'autres choses ici, avec des sections comme une page de manuel normale…

Avec python :

[[email protected] ~]# pydoc sys
Help on built-in module sys:

NAME
    sys

FILE
    (built-in)

MODULE DOCS
    http://www.python.org/doc/current/lib/module-sys.html

DESCRIPTION
    This module provides access to some objects used or maintained by the
    interpreter and to functions that interact strongly with the interpreter.
...again, another full-featured manpage with interesting info...

Ou, le help() fonction à l'intérieur du shell python si vous souhaitez lire plus de détails sur un objet :

[email protected]:~$ python3.6
Python 3.6.7 (default, Oct 21 2018, 08:08:16)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> help(round)

Help on built-in function round in module builtins:

round(...)
    round(number[, ndigits]) -> number

    Round a number to a given precision in decimal digits (default 0 digits).
    This returns an int when called with one argument, otherwise the
    same type as the number. ndigits may be negative.

Bonus : Le wtf La commande peut vous aider avec les acronymes et fonctionne comme whatis si aucun acronyme n'est trouvé dans sa base de données, mais ce que vous recherchez fait partie de la base de données man. Sur Debian cette commande fait partie de bsdgames emballer. Exemples :

[email protected]:~$ wtf rtfm
RTFM: read the fine/fucking manual
[email protected]:~$ wtf afaik
AFAIK: as far as I know
[email protected]:~$ wtf afak
Gee...  I don't know what afak means...
[email protected]:~$ wtf tcp
tcp: tcp (7)              - TCP protocol.
[email protected]:~$ wtf systemd
systemd: systemd (1)          - systemd system and service manager

Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Comment utiliser les commandes Grep sous Linux ou FreeBSD

  3. Comment utiliser efficacement les pages de manuel sous Linux

  4. Comment puis-je utiliser des commandes aliasées avec xargs ?

  5. Sous Linux, comment puis-je obtenir des pages de manuel pour les fonctions C plutôt que pour les commandes bash ?

Comment installer les pages de manuel manquantes des commandes sur Ubuntu

Apprenez à utiliser efficacement les pages de manuel sous Linux

Comment afficher une section spécifique dans les pages de manuel sous Linux

Comment installer des pages de manuel dans Alpine Linux

Comment utiliser les commandes FTP de Linux

Comment utiliser la commande xargs sous Linux ?