Bei der Suche nach einem anderen Problem bin ich auf einen Befehl gestoßen,
locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"
über die ich mehr erfahren wollte. Also habe ich man xargs
ausgeführt und erhalte die folgende Ausgabe:
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...
Ich versuche, besser darin zu werden, die Dokumentation zu verwenden, um etwas über Linux-Programme zu lernen, aber dieser Abschnitt „Zusammenfassung“ ist für neue Benutzer einschüchternd. Es sieht im Vergleich zu man locate
buchstäblich wie Kauderwelsch aus oder man free
.
Bisher verstehe ich, dass eckige Klammern optionale und verschachtelte Klammern optionale Optionen bedeuten. Aber wie soll ich damit einen gültigen Befehl herbeiführen?
Ich bitte hier nicht um Hilfe mit xargs. Ich suche Hilfe bei der Interpretation einer Manpage, um komplizierte Befehle zu verstehen. Ich möchte aufhören, von Google indizierte Webblogs und persönliche Hilfe von anderen zu meinem ersten Ansatz zum Erlernen von Linux-Befehlen zu machen.
Akzeptierte Antwort:
Nun, das ist meine ganz persönliche Art, Manpages zu lesen:
Der Manpager
Wenn Sie eine Manpage mit man
öffnen Befehl wird die Ausgabe durch less
angezeigt/gerendert oder more
Befehle oder andere Befehle, die als Ihr Pager (Manpager) festgelegt werden.
Wenn Sie Linux verwenden, werden Sie wahrscheinlich mit Ihrer Man-Infrastruktur bedient, die bereits für die Verwendung von /usr/bin/less -is
konfiguriert ist (es sei denn, Sie haben eine minimale Distribution installiert) als man(1)
, erklären Sie im Abschnitt „Optionen“:
-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.
Unter FreeBSD und OpenBSD muss lediglich der MANPAGER
bearbeitet werden Umgebungsvariable, da sie meistens more
verwenden , und einige Funktionen wie Suche und Texthervorhebung könnten fehlen.
Auf die Frage, welche Unterschiede more
bestehen, gibt es eine gute Antwort , less
und most
habe hier(habe nie most
verwendet ). Die Möglichkeit, mit Space seitenweise rückwärts und vorwärts zu scrollen oder in beide Richtungen per Zeile mit ↓ oder ↑ (auch mit vi
Bindungen j und k ) ist beim Durchsuchen von Manpages unerlässlich. Drücken Sie h bei Verwendung von less
um die Zusammenfassung der verfügbaren Befehle anzuzeigen.
Und deshalb empfehle ich Ihnen, less
zu verwenden als Ihr Manpager. less
haben einige wesentliche Funktionen, die während dieser Antwort verwendet werden.
Wie wird ein Befehl formatiert?
Utility-Konventionen:The Open Group Base Specifications Issue 7 – IEEE Std 1003.1, 2013 Edition. Sie sollten diesen Link besuchen, bevor Sie versuchen, eine Manpage zu verstehen. Diese Online-Referenz beschreibt die Argumentsyntax der Standarddienstprogramme und führt die Terminologie ein, die in POSIX.1-2017 verwendet wird, um die von den Dienstprogrammen verarbeiteten Argumente zu beschreiben. Dies wird Sie auch indirekt über die wahre Bedeutung von Wörtern wie Parameter, Argumente, Argumentoption … auf dem Laufenden halten.
Der Kopf jeder Manpage wird Ihnen weniger kryptisch erscheinen, nachdem Sie die Notation der Dienstprogrammkonventionen verstanden haben:
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
Denken Sie daran, was Sie tun möchten.
Bei Ihren Recherchen zu xargs
du hast es mit Absicht gemacht, oder? Sie hatten ein spezielles Bedürfnis, nämlich das Lesen der Standardausgabe und das Ausführen von Befehlen basierend auf dieser Ausgabe.
Aber wenn ich nicht weiß, welchen Befehl ich will?
Verwenden Sie man -k
oder apropos
(Sie sind gleichwertig). Wenn ich nicht weiß, wie ich eine Datei finden soll:man -k file | grep search
. Lesen Sie die Beschreibungen und finden Sie eine, die Ihren Anforderungen besser entspricht. Beispiel:
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 arbeitet standardmäßig mit regulären Ausdrücken (man apropos
, lesen Sie die Beschreibung und finden Sie heraus, was -r
ist tut), und in diesem Beispiel suche ich nach jeder Manpage, deren Beschreibung mit „report“ beginnt.
Um nach Informationen zu suchen, die sich auf das Lesen der Standard-Eingabe-/Ausgabeverarbeitung und das Erreichen von xargs
beziehen als mögliche Option:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
Lesen Sie immer die DESCRIPTION
vor dem Start
Nehmen Sie sich Zeit und lesen Sie die Beschreibung. Indem Sie einfach die Beschreibung der xargs
lesen Befehl werden wir das lernen:
xargs
liest von STDIN und führt den erforderlichen Befehl aus. Das bedeutet auch, dass Sie etwas wissen müssen, wie die Standardeingabe funktioniert und wie man sie durch Pipes manipuliert, um Befehle zu verketten- Das Standardverhalten ist, sich wie
/bin/echo
zu verhalten . Dies gibt Ihnen einen kleinen Tipp, wenn Sie mehr als einxargs
verketten müssen , müssen Sie Echo nicht zum Drucken verwenden. - Wir haben auch erfahren, dass Unix-Dateinamen Leerzeichen und Zeilenumbrüche enthalten können, dass dies ein Problem sein könnte und das Argument
-0
ist eine Möglichkeit, zu verhindern, dass Dinge explodieren, indem Nullzeichen-Trennzeichen verwendet werden. Die Beschreibung warnt Sie, dass der als Eingabe verwendete Befehl diese Funktion ebenfalls unterstützen muss und dass GNUfind
unterstütze es. Toll. Wir verwenden viel find mitxargs
. xargs
stoppt, wenn Exit-Status 255 erreicht ist.
Einige Beschreibungen sind sehr kurz und das liegt im Allgemeinen daran, dass die Software auf sehr einfache Weise funktioniert. Denken Sie nicht einmal daran, diesen Teil der Manpage zu überspringen 😉
Andere Dinge, auf die Sie achten sollten…
Sie wissen, dass Sie mit find
nach Dateien suchen können . Es gibt eine Menge Optionen und wenn Sie sich nur die SYNOPSIS
ansehen , Sie werden von denen überwältigt werden. Es ist nur die Spitze des Eisbergs. Ausgenommen NAME
, SYNOPSIS
, und DESCRIPTION
, haben Sie die folgenden Abschnitte:
-
AUTHORS
:die Personen, die den
Befehl erstellt oder bei der Erstellung unterstützt haben. -
BUGS
:listet alle bekannten Defekte auf. Könnten nur Implementierungseinschränkungen sein. -
ENVIRONMENT
:Aspekte Ihrer Shell, die von dem Befehl beeinflusst werden könnten, oder Variablen, die verwendet werden. -
EXAMPLES
oderNOTES
:Selbsterklärend. -
REPORTING BUGS
:An wen Sie sich wenden müssen, wenn Sie Fehler in diesem Tool oder in seiner Dokumentation finden. -
COPYRIGHT
:Person, die die Software erstellt hat, und Haftungsausschlüsse. Alles im Zusammenhang mit der Lizenz der Software selbst. -
SEE ALSO
:Andere Befehle, Werkzeuge oder Arbeitsaspekte, die sich auf diesen Befehl beziehen und in keinen der anderen Abschnitte passen könnten.
Sie werden höchstwahrscheinlich interessante Informationen über die gewünschten Aspekte eines Tools im Bereich Beispiele/Anmerkungen finden.
Beispiel
Bei den folgenden Schritten nehme ich find
als Beispiel, da seine Konzepte „einfacher“ sind als xargs
zu erklären (ein Befehl findet Dateien und der andere befasst sich mit stdin und der Pipeline-Ausführung anderer Befehlsausgaben). Tun wir einfach so, als wüssten wir nichts (oder sehr wenig) über diesen Befehl.
Ich habe ein spezielles Problem, nämlich:Ich muss nach jeder Datei mit dem .jpg
suchen Erweiterung und mit einer Größe von 500 KiB (KiB =1024 Byte, allgemein als Kibibyte bezeichnet) oder mehr in einem FTP-Serverordner.
Öffnen Sie zuerst das Handbuch:man find
. Die SYNOPSIS
ist schlank. Lassen Sie uns im Handbuch nach Dingen suchen:Geben Sie / ein plus das gewünschte Wort (size
). Es wird viele Einträge -size
indizieren das zählt bestimmte Größen. Stecken geblieben. Ich weiß nicht, wie ich mit „mehr als“ oder „weniger als“ einer bestimmten Größe suchen soll, und der Mann zeigt mir das nicht an.
Probieren Sie es aus und suchen Sie nach dem nächsten gefundenen Eintrag, indem Sie n drücken . OK. Etwas Interessantes gefunden:find
( -size +100M -fprintf /root/big.txt %-10s %pn )
. Vielleicht zeigt uns dieses Beispiel das mit -size +100M
Es findet Dateien mit 100 MB oder mehr. Wie könnte ich das bestätigen? Zum Anfang der Manpage gehen und nach anderen Wörtern suchen.
Versuchen wir es noch einmal mit dem Wort greater
. Drücken Sie g führt uns zum Anfang der Manpage. / greater
, und der erste Eintrag ist:
Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
Klingt gut. Es scheint, dass dieser Block des Handbuchs bestätigt hat, was wir vermutet haben. Dies gilt jedoch nicht nur für Dateigrößen. Es gilt für jeden n
die auf dieser Manpage zu finden sind (wie der Ausdruck schon sagte:„Numerische Argumente können angegeben werden als“).
Gut. Lassen Sie uns einen Weg finden, nach Namen zu filtern:g / insensitive
. Wieso den? Unempfindlich? Was? Wir haben einen hypothetischen FTP-Server, auf dem die Leute „dieses anderen Betriebssystems“ einen Dateinamen mit Erweiterungen wie .jpg
angeben könnten , .JpG
, .JpG
. Dies führt uns zu:
-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.
Nachdem Sie jedoch nach lname
gesucht haben Sie werden sehen, dass nur nach symbolischen Links gesucht wird. Wir wollen echte Dateien. Der nächste Eintrag:
-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.
Toll. Ich brauche nicht einmal etwas über -name
zu lesen um diesen -iname
zu sehen ist die Groß-/Kleinschreibung-unabhängige Version dieses Arguments. Lassen Sie uns den Befehl zusammenbauen:
Befehl: find /ftp/dir/ -size +500k -iname "*.jpg"
Was ist hier implizit:Das Wissen, dass der Platzhalter ?
steht für „jedes Zeichen an einer einzigen Position“ und *
steht für „Null oder mehr eines beliebigen Zeichens“. Der -name
Parameter gibt Ihnen eine Zusammenfassung dieses Wissens.
Tipps, die für alle Befehle gelten
Einige Optionen, Mnemonik und „Syntaxstil“ reisen durch alle Befehle, sodass Sie etwas Zeit gewinnen, indem Sie die Manpage überhaupt nicht öffnen müssen. Diese werden durch Übung erlernt und die häufigsten sind:
- Im Allgemeinen
-v
bedeutet ausführlich.-vvv
ist eine Variante „sehr sehr ausführlich“ bei manchen Softwareprogrammen. - Nach dem POSIX-Standard können im Allgemeinen Argumente mit einem Bindestrich gestapelt werden. Beispiel:
tar -xzvf
,cp -Rv
. - Im Allgemeinen
-R
und/oder-r
bedeutet rekursiv. - Fast alle Befehle haben eine kurze Hilfe mit
--help
Möglichkeit. --version
zeigt die Version einer Software an.-p
, auf Dienstprogramme zum Kopieren oder Verschieben bedeutet „Berechtigungen beibehalten“.-y
bedeutet in den meisten Fällen JA oder „ohne Bestätigung fortfahren“.
Beachten Sie, dass die oben genannten Punkte jedoch nicht immer zutreffen. Zum Beispiel das -r
switch kann für unterschiedliche Software sehr unterschiedliche Bedeutungen haben. Es ist immer eine gute Idee, zu überprüfen und sicherzustellen, wann ein Befehl gefährlich sein könnte, aber dies sind übliche Standardeinstellungen.
Standardwerte von Befehlen.
Im Pager-Teil dieser Antwort haben wir gesehen, dass less -is
ist der Pager von man
. Das Standardverhalten von Befehlen wird nicht immer in einem separaten Abschnitt auf Manpages oder im Abschnitt angezeigt, der am weitesten oben platziert ist.
Sie müssen die Optionen lesen, um die Standardeinstellungen herauszufinden, oder, wenn Sie Glück haben, / eingeben pager
führt Sie zu diesen Informationen. Dazu müssen Sie auch das Konzept des Pagers kennen (Software, die durch die Manpages scrollt), und das werden Sie erst lernen, wenn Sie viele Manpages gelesen haben.
Warum ist das wichtig? Dies wird Ihre Wahrnehmung öffnen, wenn Sie beim Lesen von man(1)
Unterschiede im Scroll- und Farbverhalten feststellen unter Linux (less -is
Pager) oder FreeBSD man(1)
zum Beispiel.
Und was ist mit der SYNOPSIS
Syntax?
Nachdem Sie alle für die Ausführung des Befehls erforderlichen Informationen erhalten haben, können Sie Optionen, Optionsargumente und Operanden inline kombinieren, um Ihre Arbeit zu erledigen. Übersicht der Konzepte:
- Optionen sind die Schalter, die ein Befehlsverhalten diktieren. „Tu dies ”
“tu das nicht “ oder „so handeln “. Wird oft als Schalter bezeichnet. - Optionsargumente werden in den meisten Fällen verwendet, wenn eine Option nicht
binär(ein/aus) ist wie-t
on mount, das den Typ eines
Dateisystems angibt (-t iso9660
,-t ext2
). „Mach das mit geschlossenen Augen “ oder
„Füttere die Tiere, aber nur die Löwen “. Auch Argumente genannt. - Operanden sind Dinge, auf die dieser Befehl reagieren soll. Wenn Sie
cat file.txt
verwenden , der Operand ist eine Datei in Ihrem aktuellen
Verzeichnis, und ihr Inhalt wird aufSTDOUT
angezeigt .ls
ist ein
Befehl, bei dem ein Operand optional ist. Die drei Punkte nach dem Operanden
sagen Ihnen implizit, dasscat
kann gleichzeitig auf mehrere Operanden(Dateien)
wirken. Sie werden vielleicht feststellen, dass einige Befehle festgelegt haben, welche Art von
Operanden verwendet werden. Beispiel:cat [OPTION] [FILE]...
Verwandte Inhaltsangabe:
- Zusammenfassung in der Manpage verstehen
Wann funktioniert diese Methode nicht?
- Manpages ohne Beispiele
- Manpages, auf denen Optionen eine kurze Erklärung haben
- Wenn Sie generische Schlüsselwörter wie
and
verwenden ,to
,for
innerhalb der Manpages - Manpages, die nicht installiert sind. Es scheint aber offensichtlich zu sein, wenn man
lftp
nicht hat (und seine Manpages) installiert haben, können Sie nicht wissen, ob dies eine geeignete Option als ein anspruchsvollerer FTP-Client ist, indem Sieman -k ftp
ausführen
In einigen Fällen sind die Beispiele ziemlich einfach, und Sie müssen einige Ausführungen Ihres Befehls zum Testen oder im schlimmsten Fall zum Googlen durchführen.
Sonstiges:Programmiersprachen und ihre Module:
Wenn Sie programmieren oder nur Skripte erstellen, denken Sie daran, dass einige Sprachen ihre eigenen Manpage-Systeme haben, wie perl
(perldocs
), python(pydocs
) usw. enthalten, die spezifische Informationen über Methoden/Funktionen, Variablen, Verhalten und andere wichtige Informationen über das Modul enthalten, das Sie verwenden und lernen möchten. Das war nützlich für mich, als ich ein Skript erstellte, um ungelesene IMAP-E-Mails mit dem perl Mail::IMAPClient
herunterzuladen Modul.
Sie müssen diese spezifischen Manpages herausfinden, indem Sie man -k
verwenden oder online suchen. Beispiele:
[[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,
);
… Tonnen von anderem Zeug hier, mit Abschnitten wie einer normalen Manpage …
Mit 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...
Oder die help()
Funktion innerhalb der Python-Shell, wenn Sie weitere Details zu einem Objekt lesen möchten:
[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: Das wtf
Der Befehl kann Ihnen bei Akronymen helfen und funktioniert als whatis
wenn kein Akronym in der Datenbank gefunden wird, aber das, was Sie suchen, Teil der Man-Datenbank ist. Unter Debian ist dieser Befehl Teil der bsdgames
Paket. Beispiele:
[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