別の問題を調査しているときに、コマンドに出くわしました。
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プログラムについて学ぶことを上手にしようとしていますが、その「概要」セクションは新しいユーザーを怖がらせます。 manlocate
と比較すると、文字通りぎこちないように見えます またはmanfree
。
これまでのところ、角括弧はオプションを意味し、ネストされた括弧はオプションのオプションを意味することを理解しています。しかし、それを使ってどのように有効なコマンドを誘導するのでしょうか?
ここではxargsのサポートを求めていません。 複雑なコマンドを理解するためのマニュアルページの解釈の助けを探しています。 Linuxコマンドを学ぶための最初のアプローチとして、Googleのインデックスに登録されたウェブブログや他の人からの個人的な支援をやめたいと思います。
承認された回答:
まあ、これはマンページを読むための私の非常に個人的な方法です:
マンページャー
man
を使用してマンページを開くとき コマンドを実行すると、出力は less
によって表示/レンダリングされます またはmore
コマンド、またはポケットベル(manpager)として設定されるその他のコマンド。
Linuxを使用している場合は、おそらく / usr / bin / less -is
を使用するように構成済みのmanインフラストラクチャが提供されます。 (最小限のディストリビューションをインストールした場合を除く)as man(1)
、[オプション]セクションで説明します:
-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
ここにあります(ほとんど
を使用したことはありません )。 スペースを使用してページごとに後方にスクロールおよび前方にスクロールする機能 または↓の行で双方向 または↑ (また、 vi
を使用します バインディングj およびk )は、マンページを閲覧する際に不可欠です。 hを押します less
を使用している間 使用可能なコマンドの概要を確認します。
そのため、 less
を使用することをお勧めします あなたのマンページャーとして。 少ないコード> この回答中に使用されるいくつかの重要な機能があります。
コマンドはどのようにフォーマットされますか?
ユーティリティ規約:Open Group Base Specification Issue 7 – IEEE Std 1003.1、2013Edition。マンページを理解する前に、そのリンクにアクセスする必要があります。このオンラインリファレンスでは、標準ユーティリティの引数構文について説明し、ユーティリティによって処理される引数を説明するためにPOSIX.1-2017全体で使用される用語を紹介します。これにより、パラメータ、引数、引数オプションなどの単語の本当の意味について間接的に更新されます…
ユーティリティの規則の表記法を理解すると、マンページの先頭はわかりにくくなります。
utility_name[-a][-b][-c option_argument]
[-d|-e][-f[option_argument]][operand...]
やりたいことを覚えておいてください。
xargs
について調査する場合 あなたは目的のためにそれをしましたね?標準出力を読み取り、その出力に基づいてコマンドを実行するという特定のニーズがありました。
でも、どのコマンドが欲しいのかわからないときは?
man -k
を使用します またはapropos
(それらは同等です)。ファイルの検索方法がわからない場合: man -k file | grep検索
。説明を読んで、ニーズにより適したものを見つけてください。例:
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
が何であるかを調べます )、この例では、説明が「レポート」で始まるすべてのマンページを探しています。
標準の入出力処理の読み取りとxargs
への到達に関連する情報を探すため 可能なオプションとして:
man -k command| grep input
xargs (1) - build and execute command lines from standard input
常にDESCRIPTION
をお読みください 始める前に
時間をかけて説明を読んでください。 xargs
の説明を読むだけで コマンド私たちはそれを学びます:
-
xargs
STDINから読み取り、必要なコマンドを実行します。これは、標準入力がどのように機能するか、およびパイプを介してコマンドをチェーンするためにそれを操作する方法についての知識が必要になることも意味します - デフォルトの動作は、
/ bin / echo
のように動作します。 。これにより、複数のxargs
をチェーンする必要がある場合のヒントが得られます。 、印刷にエコーを使用する必要はありません。 - UNIXファイル名には空白行と改行が含まれる可能性があること、これが問題になる可能性があること、および引数
-0
も学習しました。 ヌル文字区切り文字を使用して、物事が爆発するのを防ぐ方法です。説明では、入力として使用されているコマンドもこの機能をサポートする必要があること、およびGNUfind
それをサポートします。素晴らしい。xargs
で多くの検索を使用します 。 -
xargs
終了ステータス255に達すると停止します。
いくつかの説明は非常に短く、それは一般的にソフトウェアが非常に単純な方法で動作するためです。 マンページのこの部分をスキップすることさえ考えないでください 😉
その他の注意事項…
find
を使用してファイルを検索できることを知っています 。たくさんのオプションがあり、 SYNOPSIS
だけを見ると 、あなたはそれらに圧倒されるでしょう。氷山の一角にすぎません。 NAME
を除く 、 SYNOPSIS
、および DESCRIPTION
、次のセクションがあります:
-
作者
:
コマンドの作成または作成を支援した人々。 -
バグ
:既知の欠陥を一覧表示します。実装上の制限にすぎない可能性があります。 -
ENVIRONMENT
:コマンドまたは使用される変数の影響を受ける可能性のあるシェルの側面。 -
例
またはNOTES
:自明。 -
バグの報告
:このツールまたはそのドキュメントにバグを見つけた場合は、誰に連絡する必要がありますか。 -
著作権
:ソフトウェアを作成した人と免責事項。すべてソフトウェア自体のライセンスに関連しています。 -
関連項目
:このコマンドに関連し、他のどのセクションにも適合しなかった他のコマンド、ツール、または作業面。
例/メモのセクションで、ツールに必要な側面に関する興味深い情報を見つけることができるでしょう。
例
次の手順では、 find
を実行します 例として、その概念は xargs
よりも「単純」であるため 説明する(1つのコマンドはファイルを検索し、もう1つのコマンドはstdinと他のコマンド出力のパイプライン実行を処理します)。このコマンドについて何も知らない(またはほとんど知らない)ふりをしてみましょう。
特定の問題があります。.jpg
を持つすべてのファイルを検索する必要があります。 拡張機能で、500KiB(KiB =1024バイト、一般にキビバイトと呼ばれます)、またはftpサーバーフォルダ内のサイズ以上。
まず、マニュアルを開きます: man find
。 SYNOPSIS
スリムです。マニュアル内のものを検索してみましょう: /と入力します 加えて、必要な単語( size
)。多くのエントリにインデックスを付けます-size
特定のサイズをカウントします。捕まってしまった。特定のサイズで「以上」または「未満」で検索する方法がわからない場合、男性はそれを表示しません。
試してみて、 nを押して見つかった次のエントリを検索してみましょう 。わかった。何か面白いものを見つけました: find
(-size + 100M -fprintf /root/big.txt%-10s%pn)
。たぶん、この例は、 -size + 100M
でそれを示しています 100MB以上のファイルが検索されます。どうすれば確認できますか?マンページの先頭に移動して、他の単語を検索します。
繰り返しになりますが、 great
という単語を試してみましょう 。 gを押す マンページの先頭に移動します。 / great
、および最初のエントリは次のとおりです:
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
一部のソフトウェアでは「非常に冗長」なバリエーションです。 - POSIX標準に従って、通常、1つのダッシュ引数を積み重ねることができます。例:
tar -xzvf
、cp -Rv
。 - 一般的に
-R
および/または-r
再帰を意味します。 - ほとんどすべてのコマンドには、
-help
に関する簡単なヘルプがあります。 オプション。 -バージョン
ソフトウェアのバージョンを表示します。-
-p
、コピーまたは移動ユーティリティでは、「権限を保持する」ことを意味します。 -
-y
はい、またはほとんどの場合「確認なしで続行」を意味します。
ただし、上記が常に当てはまるとは限らないことに注意してください。たとえば、 -r
スイッチは、ソフトウェアごとに非常に異なる意味を持つ可能性があります。コマンドが危険である可能性がある場合は常にチェックして確認することをお勧めしますが、これらは一般的なデフォルトです。
コマンドのデフォルト値。
この回答のポケットベルのチャンクで、 less -is
であることがわかりました。 man
のポケットベルです 。コマンドのデフォルトの動作は、マンページの別のセクション、または最も上位に配置されているセクションに常に表示されるとは限りません。
デフォルトを見つけるにはオプションを読む必要があります。運が良ければ、 /と入力する必要があります。 ポケットベルコード> その情報にあなたを導きます。これには、ポケットベル(マンページをスクロールするソフトウェア)の概念も知っておく必要があります。これは、多くのマンページを読んだ後で初めて習得できるものです。
なぜそれが重要なのですか?これにより、 man(1)
を読んでいるときにスクロールと色の動作に違いが見られる場合に、認識が広がります。 Linuxの場合( less -is
ポケットベル)またはFreeBSD man(1)
たとえば。
そしてSYNOPSIS
はどうですか 構文?
コマンドの実行に必要なすべての情報を取得したら、オプション、オプション引数、およびオペランドをインラインで組み合わせて、作業を完了することができます。概念の概要:
- オプションは、コマンドの動作を指示するスイッチです。 「これを行う 」
「これを行わないでください 」または「このように行動する 「。しばしばスイッチと呼ばれます。 - オプション引数は、オプションが
-t
のように
バイナリ(オン/オフ)でない場合にほとんどの場合に使用されます マウント時に、
ファイルシステムのタイプを指定します(-t iso9660
、-t ext2
)。 「目を閉じてこれを行う 」または
「動物に餌をやるが、ライオンだけに餌をやる 「。引数とも呼ばれます。 - オペランドは、そのコマンドに作用させたいものです。
cat file.txt
を使用する場合 、オペランドは現在の
ディレクトリ内のファイルであり、その内容はSTDOUT
に表示されます。 。ls
オペランドがオプションの
コマンドです。オペランドの後の3つのドットは、
暗黙的にcat
であることを示しています。
同時に複数のオペランド(ファイル)に作用することができます。一部のコマンドでは、使用するオペランドのタイプが
設定されていることに気付くかもしれません。例:cat [OPTION] [FILE] ...
関連する概要:
- マンページの概要を理解する
この方法が機能しないのはいつですか?
- 例のないマンページ
- オプションに簡単な説明があるマンページ
や
などの一般的なキーワードを使用する場合 、to
、for
マンページ内- インストールされていないマンページ。当たり前のようですが、
lftp
がない場合 (およびそのマンページ)がインストールされていると、man -k ftp
を実行することで、より高度なftpクライアントとして適切なオプションであることがわかりません。
場合によっては、例が非常に単純であり、テストするためにコマンドを実行する必要があります。最悪の場合は、Googleで実行する必要があります。
その他:プログラミング言語とそのモジュール:
プログラミングをしている場合やスクリプトを作成しているだけの場合は、 perl
などの独自のマンページシステムがある言語があることに注意してください。 ( perldocs
)、python( pydocs
)など、メソッド/関数、変数、動作に関する特定の情報、および使用および学習しようとしているモジュールに関するその他の重要な情報を保持します。これは、 perl Mail ::IMAPClient
を使用して未読のIMAPメールをダウンロードするスクリプトを作成するときに役立ちました。 モジュール。
man -k
を使用して、これらの特定のマンページを把握する必要があります。 またはオンラインで検索します。例:
[[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,
);
…ここには他にもたくさんのものがあり、通常のマンページのようなセクションがあります…
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...
または、 help()
オブジェクトの詳細を読みたい場合は、Pythonシェル内の関数:
[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.
ボーナス: wtf
コマンドは頭字語で役立ち、 whatis
として機能します データベースに頭字語が見つからないが、検索しているのはmanデータベースの一部である場合。 Debianでは、このコマンドは bsdgames
の一部です パッケージ。例:
[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