他の問題を解決している間、命令に出会った、
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の助けを探していません。 複雑なコマンドを理解するためにマニュアルページを解釈するのに役立ちます。私はもはやLinuxコマンドを学ぶための最初の選択肢として、Googleがインデックス付けされたWebブログや他の人の個人的な助けに頼りたくありません。
答え1
まあ、これは私が個人的にマニュアルページを読む方法です。
マニュアルページ
このコマンドを使用してマンページを開くと、出力はコマンドまたはポケットベル(マンページジャー)で設定される他のコマンドman
によって表示/レンダリングされます。less
more
Linuxを使用している場合は、すでに使用するように構成されているmanインフラストラクチャを使用しています/usr/bin/less -is
(最小のディストリビューションをインストールしていない場合)。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.
MANPAGER
FreeBSDとOpenBSDでは、主に使用される環境変数を編集すると、more
検索やテキストの強調表示などの一部の機能が欠落している可能性があります。
more
違いが何であるか、違いが何であるかにless
良い答えがあります。most
ここ(使用されていませんmost
)。マンページをナビゲートするとき、または(バインディングも使用可能)をSpace使用して1行ずつ前後にスクロールする機能は必須です。使用可能なコマンドの概要を表示するには、使用中にクリックします。↓↑vi
jkhless
そのため、less
マンページとして使用することをお勧めします。less
この回答にはいくつかの基本機能が使用されます。
コマンドの形式は何ですか?
実用的な習慣:オープングループ基本仕様7号 - IEEE Std 1003.1、2013エディション。マンページを理解する前に、このリンクにアクセスする必要があります。このオンラインリファレンスは、標準ユーティリティのパラメータ構文を説明し、ユーティリティが処理するパラメータを説明するために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
にechoを使用する必要はありません。 - また、Unixファイル名には問題になる可能性のある空白や改行文字を含めることができ、このパラメータは
-0
NULL文字区切り文字を使用して内容が増えるのを防ぐ方法であることも学びました。説明では、入力として使用するコマンドはこの機能もサポートする必要があり、GNUがfind
それをサポートしていることを警告します。途方もない。私たちは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
特定の問題があります。 ftpサーバーフォルダ内で、拡張子が500KiB(KiB = 1024バイト、しばしばkibibyteと呼ばれる)以上のすべてのファイルを見つける必要があります。
まず、マニュアルを開きますman find
。細身にしてくださいSYNOPSIS
。マニュアルで検索してみましょう:/希望の単語(size
)を入力してください。-size
特定のサイズで計算された多数の項目を索引付けします。閉じ込められた。与えられたサイズより「より大きい」または「より小さい」を使用して検索する方法がわかりませんが、その人は私にこれを示していません。
それを試して、それをクリックして見つかった次の項目を検索してみましょうn。さて、いくつかの興味深い点が見つかりました。 。おそらく、この例では100 MB以上のファイルが見つかることfind
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
がわかります。-size +100M
どうやって確認できますか?マンページの頭に移動して別の単語を検索してください。
単語をもう一度やりましょう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
。なぜ?敏感ではないですか?くそー?我々は、"他のオペレーティングシステム"を使用している人々が拡張子、.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 標準によれば、ダッシュ引数は通常積み重ねられます。例:
tar -xzvf
、cp -Rv
。 - 一般的に言えば、および
-R
/または-r
再帰を意味します。 - ほとんどすべてのコマンドには、このオプションの簡単なヒントがあります
--help
。 --version
ソフトウェアのバージョンを表示します。-p
、コピーまたは移動ユーティリティで「権限を保持」を意味します。-y
ほとんどの場合、「はい」または「確認なしで続行」を意味します。
上記は必ずしも真実ではありません。たとえば、-r
スイッチは次のことを示します。非常に他のもの他のソフトウェアについて。コマンドが危険にさらされる可能性があることを常に確認して確認することをお勧めしますが、これは一般的なデフォルトです。
コマンドのデフォルト値です。
この回答のポケットベルセクションでは、これがポケットベルであることがless -is
わかりますman
。コマンドのデフォルトの動作が必ずしも別のセクションやマンページの上部に表示されるわけではありません。
デフォルト値を見つけるにはオプションを読む必要があります。幸運な場合は、/pager
その情報を見つけることができます。これを行うには、多くのマンページを読んだ後にのみ取得できるページャ(マンページをスクロールするソフトウェア)の概念も理解する必要があります。
これはなぜ重要ですか?読み込み中にスクロールと色の動きの違いが見つかると、これは認識を可能にします。man(1)
Linux(less -is
ポケットベル)またはFreeBSDの場合man(1)
例えば。
文法はどうですかSYNOPSIS
?
コマンドの実行に必要なすべての情報を取得したら、オプション、オプション・パラメーター、およびオペランドをインラインで結合して操作を完了できます。概念の概要:
- オプションはコマンドの動作を指示するスイッチです。 」これを行う" "これをしないでください。「または」この方法「。しばしばスイッチと呼ばれます。
- ほとんどの場合、オプションがバイナリ(on / off)でない場合(
-t
マウントするときなど)、ファイルシステムタイプ(-t iso9660
、-t ext2
)を指定するオプションパラメータが使用されます。 」目を閉じてこれをやってみてください「または」動物に餌を与えますが、ライオンだけに餌を与えます。」。引数とも呼ばれます。 - オペランドは、コマンドが実行するアクションです。を使用すると、
cat file.txt
オペランドは現在のディレクトリのファイルであり、その内容は上に表示されますSTDOUT
。ls
オペランドがオプションのコマンドです。オペランドの後ろの3つの点は、cat
同時に複数のオペランド(ファイル)に対して操作を実行できることを暗黙的に示します。一部のコマンドでは、使用するオペランドのタイプがすでに設定されていることがわかります。例:cat [OPTION] [FILE]...
関連コンテンツの紹介:
このアプローチがうまくいかないのはいつですか?
- 例のないマンページ
- オプションはマニュアルページに簡単な説明があります。
- マンページで一般的なキーワード(例えば、、、
and
)to
を使用する場合for
- マンページがインストールされていません。これは明らかですが、
lftp
インストール(およびマニュアルページ)がないと、このオプションがより複雑なFTPクライアントに適したオプションかどうかはわかりません。man -k ftp
場合によっては、サンプルが単純すぎてテストするためにいくつかのコマンドを実行する必要があり、最悪の場合はGoogleで検索する必要があります。
その他:プログラミング言語とそのモジュール:
perl
プログラミングまたはスクリプトを書く場合は、一部の言語に(perldocs
)、Python()などの独自のマニュアルページシステムがあることに注意してくださいpydocs
。これには、メソッド/関数、変数、アクション、およびモジュールに関するその他の重要な情報に関する特定の情報が含まれています。使用して学習する情報が保持されます。以下を使用して未読のIMAP Eメールをダウンロードするスクリプトを作成するときに、この方法が役立ちました。perl Mail::IMAPClient
基準寸法。
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...
あるいは、help()
オブジェクトの詳細を読むには、Pythonシェル内で関数を使用できます。
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
答え2
これは以下でよく説明されています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 ls
。
SYNOPSIS
ls [OPTION]... [FILE]...
それ以外の場合は、問題のコマンドの使用方法を既に知っていない限り役に立ちません。たとえば、man dd
:
dd [OPERAND]...
dd OPTION
だから要約すると、シノプシスを見られなくても心配しないでください。これは正常です。マニュアルページ自体をお読みください。
答え3
シノプシスを理解するためのいくつかの基本
- それぞれは
[foo]
オプションの引数または引数を表します。 - 構文を使用するときは、
[foo [ bar ] ]
fooを使用するかバーを追加できます。 - forceオプション引数はこの方法で使用されます。
[ -S size ]
これは、-Sパラメーターが強制サイズを待っていることを示します。
たとえば、foo [-S size ] filename ...
方法
- コマンドは
foo
- オプションのパラメータを使用できます
-S
。これを教えてくださいsize
(名前からヒントを得ることができます)。 - 必須パラメータは次のとおりです
filename
(ヒントも提供されています。参照man mkdir
)。 - 省略記号は、
...
複数のファイルが使用可能であることを示します。
オプションを理解するには、マニュアルページをよく見てください(上記の例ではオプションは-S size
何ですか)。
答え4
覚えておくべき1つの重要な点は、他のコマンドのコマンドを実行する文脈で特定のコマンドのマニュアルを見ることができないことです。
例コマンドの場合
locate something | xargs -I {} bash -c "if [ -d "{}" ]; then echo {}; fi"
andに関する情報だけが必要ではありませんxargs
(おそらくマンページにありますbash
)。コマンドには複雑な引用文字列が含まれているため、引用規則を取得するにはシェル(およびbash)に関する情報が必要な場合があります。引用されたパラメータが間違っていることをすでに伝えることができます(そして間違った方法は、名前に空白があるファイルに遭遇したときにのみ表示されます)。[
test
"{}"
'{}'
したがって、まずxargsのマンページを参照して、その意味[-I replace-str]
と-I {}
それに関連するすべての内容を理解します。その後、マンページを参照して内容などを知ることができます。[command [initial-arguments]]
bash
bash
-c