web-dev-qa-db-ja.com

コマンドの使用方法を学ぶためにマニュアルページをどのように使用しますか?

別の問題を調査している間、私は コマンドに出くわしました

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 locateman freeと比較すると、文字通り意味不明のように見えます。

これまでのところ、角括弧はオプションを意味し、ネストされた角括弧はオプションのオプションを意味することを理解しています。しかし、それで有効なコマンドをどのように誘導するのですか?

ここではxargsのヘルプを求めていません。複雑なコマンドを理解するためにmanページを解釈するヘルプを探しています。 Linuxのコマンドを学ぶための最初のアプローチとして、Googleがインデックスに登録したウェブブログや他の人からの個人的な助けをやめたいと思います。

93
user1717828

まあ、これはマンページを読むための私の非常に個人的な方法です:

マンページャー

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環境変数を編集するだけの問題であり、検索やテキストハイライトなどの一部の機能が欠落している可能性があります。

moreless、および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をチェーンする必要がある場合、エコーを使用して印刷する必要がないという小さなヒントが得られます。
  • また、UNIXのファイル名には空白と改行が含まれる可能性があること、これが問題になる可能性があること、および引数_-0_は、ヌル文字区切り文字を使用して爆発を防ぐ方法であることも学びました。説明は、入力として使用されるコマンドもこの機能をサポートする必要があること、およびGNU findがそれをサポートすることを警告しています。すごい。 xargsで多くの検索を使用します。
  • xargsは、終了ステータス255に達すると停止します。

一部の説明は非常に短く、ソフトウェアが非常に単純な方法で機能することが一般的な理由です。 マンページのこの部分をスキップすることすら考えないでください;)

その他の注意点...

findを使用してファイルを検索できることはご存じでしょう。たくさんのオプションがあり、SYNOPSISだけを見ると、それらに圧倒されます。氷山の一角にすぎません。 NAMESYNOPSIS、および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_は、一部のソフトウェアの「非常に詳細」なバリエーションです。
  • POSIX標準に従って、通常、1つのダッシュ引数をスタックできます。例:_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構文はどうですか?

コマンドの実行に必要なすべての情報を取得したら、オプション、オプション引数、およびオペランドをインラインで組み合わせて、ジョブを完了できます。概念の概要:

  • オプションは、コマンドの動作を指示するスイッチです。 "Do this" "do n't do this"または "act this way "。多くの場合、スイッチと呼ばれます。
  • オプション引数は、オプションがマウントの_-t_のようにバイナリ(オン/オフ)でない場合にほとんどの場合に使用され、ファイルシステムのタイプを指定します(_-t iso9660_、_-t ext2_)。 「目を閉じてこれを行う」または「動物に餌をやるが、ライオンだけに餌を与える」。引数とも呼ばれます。
  • オペランドとは、そのコマンドに作用させたいものです。 _cat file.txt_を使用する場合、オペランドは現在のディレクトリ内のファイルであり、その内容はSTDOUTに表示されます。 lsは、オペランドがオプションのコマンドです。オペランドの後の3つのドットは、catが同時に複数のオペランド(ファイル)に作用できることを暗黙的に示しています。一部のコマンドでは、使用するオペランドのタイプが設定されていることに気付くでしょう。例:_cat [OPTION] [FILE]..._

関連するあらすじ:

この方法が機能しないのはいつですか?

  • 例のないマンページ
  • オプションの簡単な説明があるマンページ
  • マンページ内でandtoforなどの一般的なキーワードを使用する場合
  • インストールされていないマンページ。当たり前のようですが、lftp(およびそのマンページ)がインストールされていない場合、_man -k ftp_を実行しても、これがより洗練されたFTPクライアントとして適切なオプションであることを知ることはできません。

場合によっては、例がかなり単純で、テストするためにコマンドをいくつか実行する必要があります。最悪の場合はGoogleで実行する必要があります。

その他:プログラミング言語とそのモジュール:

プログラミングをしている、または単にスクリプトを作成している場合、一部の言語には、Perlperldocs)、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
_
103
user34720

これは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ページ自体を読んでください。

38
terdon

概要を理解するための基本事項

  • [foo]は、オプションの引数またはパラメーターを表します。
  • [foo [ bar ] ]構文を使用する場合、fooを使用して、barを追加できます。
  • 必須オプションパラメータはこのように使用されます[ -S size ]。これは、-S引数が必須サイズを待機していることを示します。

たとえば:foo [-S size ] filename ...

手段

  • コマンドはfooです
  • オプションのパラメータ-Sを使用できます。sizeを指定する必要があります(名前からヒントが得られます)
  • 必須の引数はfilenameです(これによりヒントも得られます。man mkdirを参照してください)
  • 省略記号...は、複数のファイルを使用できることを示します。

オプションを理解するには、manページを深く掘り下げる必要があります(上記の私のサンプルケースでは、-S sizeについて)

21
Archemar

manページは通常lessで表示されます。それはそれらを通して検索することを可能にします。私は概要を気にしません、特にあなたがあなたが理解したい特定のコマンドラインを持っているからではありません。

ヒット / と入力し始めます-I その後 Enter。最初のヒットは概要に、2番目のヒットは(使用 n 次へ)は、-I

14
Anthon

覚えておくべき重要なことの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のマンページを参照します。

11
Random832

すでに与えられた素晴らしい答えに加えて:

1)gnuユーティリティ、特にsedgrepなどのユーティリティに興味がある場合、infoコマンドを使用すると、コマンドのバージョンが大幅に拡張されます情報。たとえば、sedには、正規表現の記述方法に関する詳細なセクションと、非常に複雑な使用例を含む別のセクションがあります。

2)「マニュアル」です。マニュアルは主に、すでに理解していることの詳細を思い出すのに役立つように設計されています。必要な詳細情報をすばやく取得して取得できるように設計されています。 (そして、あまりにも多くは、使用例がないか、ささいなものしかありません。)

新しいことを理解する必要がある場合、コマンドの小さな機能でもわかりにくい場合は、Webにアクセスして、考えられる最高のキーワードを使用して検索します(例:Linuxxargs)、Word howtoexamples、またはtutorialを追加します。多くの場合、これは非常に生産的です。

私は通常、プライバシーを維持するためにduckduckgoを使用しますが、検索をより詳細に制御する必要がある場合は、1つのWebサイト内で検索するか、昨年の結果のみを返すように指示できるため、Googleを使用します。 (他にも多くの高度な検索オプションがあります。Googleで検索できます。;))

別のヒント:

頻繁に参照するコマンドについては、manページをテキストファイルに保存します

man bash > bashman.txt

そして、そのファイルをテキストエディタの別のウィンドウにロードして、前後に反転したり、コピーして貼り付けたりできるようにします。通常はファイルを読み取り専用にするので、誤ってファイルを変更することはありませんが、個人的なコピー、好きなように編集したり、タグを追加してセクションを見つけやすくしたり、独自のメモや例を追加したりすることもできます。

これの唯一の欠点は、元のmanページが更新され、コピーが静的になることです。

6
Joe

特定のコマンドに関する簡単なヘルプを取得するには、 シェルの説明 を使用できます。例えば。 コマンド 。これがどのように機能するかを最初に高レベルで理解した後、他の回答が推奨するように、マンページに進む必要があります。

4
AvImd

Linuxコマンドについてさらに学ぶための便利なツールが2つあります。

  1. cheat コマンドラインで頻繁に使用されるオプションを表示します。また、独自のcommand + optionを追加して、特定のコマンドのcheatを介して表示することもできます。
  2. bropages ツールはコマンドラインのいくつかの例を提供します。独自の例を追加したり、bro thanksから確認コードを取得した後、特定の例に賛成/反対票を投じたりすることができます。投票が必要なコマンドがbroページの上部に表示されます。
2
GAD3R

私は、包括的な人に似たツールとして tldr をお勧めします。簡素化され、コミュニティ主導のmanページ。 Ubuntuでは、スナップ経由でインストールできますが、他のディストリビューション用のバージョンもあります。また、いくつかの一般的な使用例も示します。 100%推奨。

1

>複雑なコマンドを理解するためにmanページを解釈する助けを探しています。

それがここでの誤解だと思います。 Linux/UNIXを非常に強力なものにしているのは、非常に長く効果的なコマンドを、たとえば1つのコマンドのstdout(ここでは、locate)を別のコマンドの標準入力(ここでは、xargs)にパイプ(|)。したがって、Random832が正しく言ったように、コマンド例の機能を説明するマンページは1つもありません。

Linux Shellスクリプティングガイドを読むことをお勧めします。 Advanced Bash-Scripting Guide は優れたドキュメントです。それを恐れないでください。 Linuxを習得するには何年もかかり、終わりのないプロセスですが、基本を妥当な時間で学ぶことができます。

次に、特定のコマンドの詳細を知る必要がある場合は、マンページを参照してください。

要点を理解したら、 CommandlinefBash One-Liners も参考になるでしょう。

0
dr_