別の問題を調査している間、私は コマンドに出くわしました 、
locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"
もっと知りたかった。したがって、man xargs
を実行して次の出力を取得します。
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...
ドキュメンテーションを使用してLinuxプログラムについて学ぶことをより上手にしようとしていますが、その「あらすじ」のセクションは新しいユーザーを脅かしています。 man locate
やman free
と比較すると、文字通り意味不明のように見えます。
これまでのところ、角括弧はオプションを意味し、ネストされた角括弧はオプションのオプションを意味することを理解しています。しかし、それで有効なコマンドをどのように誘導するのですか?
ここではxargsのヘルプを求めていません。複雑なコマンドを理解するためにmanページを解釈するヘルプを探しています。 Linuxのコマンドを学ぶための最初のアプローチとして、Googleがインデックスに登録したウェブブログや他の人からの個人的な助けをやめたいと思います。
まあ、これはマンページを読むための私の非常に個人的な方法です:
man
コマンドを使用してマンページを開くと、出力はless
またはmore
コマンド、またはポケットベルとして設定されるその他のコマンドによって表示/レンダリングされます(マンページャー)。
Linuxを使用している場合は、おそらく_/usr/bin/less -is
_(最小限のディストリビューションをインストールしていない限り)を man(1)
として使用するように設定されたmanインフラストラクチャが提供されていると思われます。オプションセクション:
_-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.
_
FreeBSDとOpenBSDでは、ほとんどがMANPAGER
を使用するため、more
環境変数を編集するだけの問題であり、検索やテキストハイライトなどの一部の機能が欠落している可能性があります。
more
、less
、およびmost
には here (使用されていない)の違いについての質問に対する良い答えがありますmost
)。で後方にスクロールし、ページごとに前方にスクロールする機能 Space または両方の方法で ↓ または ↑(また、vi
バインディングを使用する j そして k)は、マンページの閲覧中に不可欠です。押す h less
を使用して、使用可能なコマンドの概要を確認します。
そして、それが私がless
をあなたのman pagerとして使うことを勧める理由です。 less
には、この回答で使用されるいくつかの重要な機能があります。
Utility Conventions :Open Group Base Specifications Issue 7-IEEE Std 1003.1、2013 Edition。マンページを理解する前に、そのリンクにアクセスしてください。このオンラインリファレンスでは、標準ユーティリティの引数の構文について説明し、ユーティリティで処理される引数を説明するためにPOSIX.1-2017全体で使用される用語を紹介します。これにより、パラメーター、引数、引数オプションなどの単語の本当の意味について間接的に更新されます...
ユーティリティ規約の表記法を理解すると、どのマンページの頭もわかりにくくなります。
_utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
_
xargs
について調査するとき、あなたは目的のためにそれをしましたよね?標準出力を読み取り、その出力に基づいてコマンドを実行するという特定のニーズがありました。
_man -k
_またはapropos
を使用します(これらは同等です)。ファイルの検索方法がわからない場合:_man -k file | grep search
_。説明を読んで、ニーズに合うものを見つけてください。例:
_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はデフォルトで正規表現で機能します(_man apropos
_、説明を読んで_-r
_の動作を確認してください)。この例では、説明が「report」で始まるすべてのマンページを探しています。
標準入出力処理の読み取りと可能なオプションとしてのxargs
への到達に関連する情報を探すには、次のようにします。
_man -k command| grep input
xargs (1) - build and execute command lines from standard input
_
DESCRIPTION
を読んでください時間をかけて説明を読んでください。 xargs
コマンドの説明を読むだけで、次のことがわかります。
xargs
はSTDINから読み取り、必要なコマンドを実行します。これは、標準入力がどのように機能するか、およびパイプを介してコマンドをチェーンするためにそれを操作する方法について、ある程度の知識が必要であることも意味します/bin/echo
_のように動作することです。これにより、複数のxargs
をチェーンする必要がある場合、エコーを使用して印刷する必要がないという小さなヒントが得られます。-0
_は、ヌル文字区切り文字を使用して爆発を防ぐ方法であることも学びました。説明は、入力として使用されるコマンドもこの機能をサポートする必要があること、およびGNU find
がそれをサポートすることを警告しています。すごい。 xargs
で多くの検索を使用します。xargs
は、終了ステータス255に達すると停止します。一部の説明は非常に短く、ソフトウェアが非常に単純な方法で機能することが一般的な理由です。 マンページのこの部分をスキップすることすら考えないでください;)
find
を使用してファイルを検索できることはご存じでしょう。たくさんのオプションがあり、SYNOPSIS
だけを見ると、それらに圧倒されます。氷山の一角にすぎません。 NAME
、SYNOPSIS
、およびDESCRIPTION
を除いて、次のセクションがあります。
AUTHORS
:コマンドの作成または作成を支援した人。
BUGS
:既知の欠陥をリストします。実装の制限のみである可能性があります。
ENVIRONMENT
:コマンドによって影響を受ける可能性のあるシェルの側面、または使用される変数。
EXAMPLES
またはNOTES
:自明です。
_REPORTING BUGS
_:このツールまたはドキュメントにバグを見つけた場合の連絡先。
COPYRIGHT
:ソフトウェアの作成者および免責事項。ソフトウェア自体のライセンスに関連するすべて。
_SEE ALSO
_:このコマンドに関連する他のコマンド、ツール、または動作の側面であり、他のセクションのいずれにも適合しなかった。
ほとんどの場合、ツールの必要な側面に関する興味深い情報は、例/メモのセクションにあります。
次の手順では、find
を例として取り上げます。これは、概念がxargs
よりも「より単純」であるためです(1つのコマンドはファイルを検索し、もう1つはstdinのパイプライン実行を処理します他のコマンド出力)。このコマンドについて、私たちが 何も知らない (または非常に少ない)と仮定します。
特定の問題があります。_.jpg
_拡張子があり、500KiB(KiB = 1024バイト、一般にキビバイトと呼ばれます)、またはFTPサーバーフォルダー内のサイズ以上のすべてのファイルを探す必要があります。
まず、マニュアルを開きます:_man find
_。 SYNOPSIS
はスリムです。マニュアル内を検索してみましょう:タイプ / 加えて、あなたが欲しい単語(size
)。特定のサイズをカウントする多くのエントリ_-size
_にインデックスを付けます。捕まってしまった。特定のサイズで「以上」または「以下」で検索する方法がわからず、男性はそれを私に示しません。
試してみましょう。次に、を押して見つかった次のエントリを検索します n。 OK。興味深いものを見つけました:find
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
。多分この例は、_-size +100M
_で100MB以上のファイルを見つけることを示しています。どうすれば確認できますか?マンページの先頭に移動して、他の単語を検索します。
もう一度、Word greater
を試してみましょう。押す g マンページの先頭に移動します。 /greater
、最初のエントリは次のとおりです。
_ Numeric arguments can be specified as
+n for **greater** than n,
-n for less than n,
n for exactly n.
_
いいね。マニュアルのこのブロックは、私たちが疑っていたことを確認したようです。ただし、これはファイルサイズだけに適用されるわけではありません。これは、このマンページにあるすべてのn
に適用されます(「数値引数は次のように指定できる」とあります)。
良い。名前でフィルタリングする方法を見つけましょう: g/insensitive
。どうして?鈍感? WTF?私たちは架空のftpサーバーを持っています。「そのほかのOS」の人々は、_.jpg
_、_.JPG
_、_.JpG
_などの拡張子を持つファイル名を付けることができます。これは私たちを導くでしょう:
_-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.
_
ただし、lname
を検索すると、シンボリックリンクのみが検索されることがわかります。実際のファイルが必要です。次のエントリー:
_ -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.
_
すごい。 _-name
_がこの引数の大文字と小文字を区別しないバージョンであることを確認するために、_-iname
_について読む必要さえありません。コマンドを組み立てましょう:
コマンド:_find /ftp/dir/ -size +500k -iname "*.jpg"
_
ここで暗黙的なこと:ワイルドカード_?
_は「単一の位置にある任意の文字」を表し、_*
_は「任意の文字の0個以上」を表すという知識。 _-name
_パラメータは、この知識の要約を提供します。
一部のオプション、ニーモニック、および「構文スタイル」は、すべてのコマンドを移動するため、マンページを開かなくても済むため、時間を節約できます。それらは実践によって学習され、最も一般的なものは次のとおりです。
-v
_は冗長を意味します。 _-vvv
_は、一部のソフトウェアの「非常に詳細」なバリエーションです。tar -xzvf
_、_cp -Rv
_。-R
_または_-r
_は再帰を意味します。--help
_オプションに関する簡単なヘルプがあります。--version
_は、ソフトウェアのバージョンを示します。-p
_は、「権限を保持する」ことを意味します。-y
_はYESを意味し、ほとんどの場合「確認なしで続行」します。ただし、上記は常に正しいとは限りません。たとえば、_-r
_スイッチは、ソフトウェアごとに 非常に異なるもの を意味します。コマンドが危険である可能性がある場合は常に確認して確認することをお勧めしますが、これらは一般的なデフォルトです。
この回答のポケットベルで、_less -is
_がman
のポケットベルであることがわかりました。コマンドのデフォルトの動作は、マンページの別々のセクション、または最も上位にあるセクションに常に表示されるとは限りません。
オプションを読んでデフォルトを見つけるか、運が良ければ、次のように入力する必要があります。 /pager
はその情報に導きます。これには、ページャー(マンページをスクロールするソフトウェア)の概念も知っておく必要があります。これは、たくさんのマンページを読んだ後にのみ取得できるものです。
なぜそれが重要なのですか? Linux(_less -is
_ページャー)またはFreeBSDで man(1)
またはFreeBSD man(1)
など。
SYNOPSIS
構文はどうですか?コマンドの実行に必要なすべての情報を取得したら、オプション、オプション引数、およびオペランドをインラインで組み合わせて、ジョブを完了できます。概念の概要:
-t
_のようにバイナリ(オン/オフ)でない場合にほとんどの場合に使用され、ファイルシステムのタイプを指定します(_-t iso9660
_、_-t ext2
_)。 「目を閉じてこれを行う」または「動物に餌をやるが、ライオンだけに餌を与える」。引数とも呼ばれます。cat file.txt
_を使用する場合、オペランドは現在のディレクトリ内のファイルであり、その内容はSTDOUT
に表示されます。 ls
は、オペランドがオプションのコマンドです。オペランドの後の3つのドットは、cat
が同時に複数のオペランド(ファイル)に作用できることを暗黙的に示しています。一部のコマンドでは、使用するオペランドのタイプが設定されていることに気付くでしょう。例:_cat [OPTION] [FILE]...
_関連するあらすじ:
and
、to
、for
などの一般的なキーワードを使用する場合lftp
(およびそのマンページ)がインストールされていない場合、_man -k ftp
_を実行しても、これがより洗練されたFTPクライアントとして適切なオプションであることを知ることはできません。場合によっては、例がかなり単純で、テストするためにコマンドをいくつか実行する必要があります。最悪の場合はGoogleで実行する必要があります。
プログラミングをしている、または単にスクリプトを作成している場合、一部の言語には、Perl
(perldocs
)、python(pydocs
)などの独自のマンページシステムがあることに注意してください。メソッド/関数、変数、動作に関する特定の情報、および使用および学習しようとしているモジュールに関するその他の重要な情報。これは、 _Perl Mail::IMAPClient
_ モジュールを使用して未読のIMAPメールをダウンロードするスクリプトを作成しているときに私に役立ちました。
_man -k
_を使用するか、オンラインで検索して、これらの特定のマンページを理解する必要があります。例:
_[root@Host ~]# man -k doc | grep Perl
perldoc (1) - Look up Perl documentation in Pod format
[root@Host ~]# 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,
);
_
...ここには他のものがたくさんあり、通常のマンページのようなセクションがあります...
Pythonの場合:
_[root@Host ~]# 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...
_
または、オブジェクトの詳細を読みたい場合は、pythonシェル内のhelp()
関数:
_nwildner@Host:~$ 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.
_
ボーナス:wtf
コマンドは頭字語を支援し、データベースに頭字語がない場合はwhatis
として機能しますが見つかりましたが、検索しているのはmanデータベースの一部です。 Debianでは、このコマンドは bsdgames
パッケージの一部です。例:
_nwildner@Host:~$ wtf rtfm
RTFM: read the fine/fucking manual
nwildner@Host:~$ wtf afaik
AFAIK: as far as I know
nwildner@Host:~$ wtf afak
Gee... I don't know what afak means...
nwildner@Host:~$ wtf tcp
tcp: tcp (7) - TCP protocol.
nwildner@Host:~$ wtf systemd
systemd: systemd (1) - systemd system and service manager
_
これはman man
:
The following conventions apply to the SYNOPSIS section and can be used
as a guide in other sections.
bold text type exactly as shown.
italic text replace with appropriate argument.
[-abc] any or all arguments within [ ] are optional.
-a|-b options delimited by | cannot be used together.
argument ... argument is repeatable.
[expression] ... entire expression within [ ] is repeatable.
そこから有効なコマンドをどのように作成することになっているのかについては、そうではありません。概要は、コマンドがどのように機能するかを知っていると便利です。それはあなたの記憶をリフレッシュするのに役立ちます。コマンドがどのように機能するかを理解するには、manページを読む必要があります。特にオプションと例のセクションの説明。
時にはあらすじで十分です。たとえば、man ls
:
SYNOPSIS
ls [OPTION]... [FILE]...
それ以外の場合は、問題のコマンドの使用方法をすでに知っている場合を除き、役に立ちません。例えば、 man dd
:
dd [OPERAND]...
dd OPTION
だから、結論として、あらすじがわからなくても心配しないでください。それは正常です。 manページ自体を読んでください。
概要を理解するための基本事項
[foo]
は、オプションの引数またはパラメーターを表します。[foo [ bar ] ]
構文を使用する場合、fooを使用して、barを追加できます。[ -S size ]
。これは、-S引数が必須サイズを待機していることを示します。たとえば:foo [-S size ] filename ...
手段
foo
です-S
を使用できます。size
を指定する必要があります(名前からヒントが得られます)filename
です(これによりヒントも得られます。man mkdir
を参照してください)...
は、複数のファイルを使用できることを示します。オプションを理解するには、manページを深く掘り下げる必要があります(上記の私のサンプルケースでは、-S size
について)
man
ページは通常less
で表示されます。それはそれらを通して検索することを可能にします。私は概要を気にしません、特にあなたがあなたが理解したい特定のコマンドラインを持っているからではありません。
ヒット / と入力し始めます-I
その後 Enter。最初のヒットは概要に、2番目のヒットは(使用 n 次へ)は、-I
。
覚えておくべき重要なことの1つは、他のコマンドを実行するコマンドの場合、1つのコマンドのマニュアルだけを見ることはできないということです。
コマンド例
locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"
xargs
だけでなく、bash
および[
に関する情報も必要です(これはtest
のマンページにある場合があります)。コマンドには複雑な引用文字列が含まれているため、引用ルールにはシェル(おそらくbashも)に関する情報が必要になる場合があります。引用符で囲まれた引数が間違っている(そして、名前にスペースが含まれているファイルに遭遇した場合にのみ表示される方法で間違っている)ことはすでに述べています。内側の"{}"
は、おそらく'{}'
になるはずです。
したがって、最初にxargsのマンページを参照して、[-I replace-str]
の意味については-I {}
を、bash
の意味については[command [initial-arguments]]
と、その後のすべてを参照してください。次に、-c
の機能などについて、bash
のマンページを参照します。
すでに与えられた素晴らしい答えに加えて:
1)gnuユーティリティ、特にsed
やgrep
などのユーティリティに興味がある場合、info
コマンドを使用すると、コマンドのバージョンが大幅に拡張されます情報。たとえば、sed
には、正規表現の記述方法に関する詳細なセクションと、非常に複雑な使用例を含む別のセクションがあります。
2)「マニュアル」です。マニュアルは主に、すでに理解していることの詳細を思い出すのに役立つように設計されています。必要な詳細情報をすばやく取得して取得できるように設計されています。 (そして、あまりにも多くは、使用例がないか、ささいなものしかありません。)
新しいことを理解する必要がある場合、コマンドの小さな機能でもわかりにくい場合は、Webにアクセスして、考えられる最高のキーワードを使用して検索します(例:Linux
xargs
)、Word howto
、examples
、またはtutorial
を追加します。多くの場合、これは非常に生産的です。
私は通常、プライバシーを維持するためにduckduckgoを使用しますが、検索をより詳細に制御する必要がある場合は、1つのWebサイト内で検索するか、昨年の結果のみを返すように指示できるため、Googleを使用します。 (他にも多くの高度な検索オプションがあります。Googleで検索できます。;))
別のヒント:
頻繁に参照するコマンドについては、manページをテキストファイルに保存します
man bash > bashman.txt
そして、そのファイルをテキストエディタの別のウィンドウにロードして、前後に反転したり、コピーして貼り付けたりできるようにします。通常はファイルを読み取り専用にするので、誤ってファイルを変更することはありませんが、個人的なコピー、好きなように編集したり、タグを追加してセクションを見つけやすくしたり、独自のメモや例を追加したりすることもできます。
これの唯一の欠点は、元のmanページが更新され、コピーが静的になることです。
私は、包括的な人に似たツールとして tldr
をお勧めします。簡素化され、コミュニティ主導のmanページ。 Ubuntuでは、スナップ経由でインストールできますが、他のディストリビューション用のバージョンもあります。また、いくつかの一般的な使用例も示します。 100%推奨。
>複雑なコマンドを理解するためにmanページを解釈する助けを探しています。
それがここでの誤解だと思います。 Linux/UNIXを非常に強力なものにしているのは、非常に長く効果的なコマンドを、たとえば1つのコマンドのstdout(ここでは、locate
)を別のコマンドの標準入力(ここでは、xargs
)にパイプ(|
)。したがって、Random832が正しく言ったように、コマンド例の機能を説明するマンページは1つもありません。
Linux Shellスクリプティングガイドを読むことをお勧めします。 Advanced Bash-Scripting Guide は優れたドキュメントです。それを恐れないでください。 Linuxを習得するには何年もかかり、終わりのないプロセスですが、基本を妥当な時間で学ぶことができます。
次に、特定のコマンドの詳細を知る必要がある場合は、マンページを参照してください。
要点を理解したら、 Commandlinef と Bash One-Liners も参考になるでしょう。