GNU/Linux >> Linux の 問題 >  >> Linux

コマンドの使用方法を学ぶためにマニュアルページを使用する方法?

別の問題を調査しているときに、コマンドに出くわしました。

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も学習しました。 ヌル文字区切り文字を使用して、物事が爆発するのを防ぐ方法です。説明では、入力として使用されているコマンドもこの機能をサポートする必要があること、およびGNU find それをサポートします。素晴らしい。 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

Linux
  1. Bash履歴コマンドの使用方法

  2. Linux でマニュアルページを効果的に使用する方法

  3. xargs でエイリアス化されたコマンドを使用するにはどうすればよいですか?

  1. LinuxまたはFreeBSDでGrepコマンドを使用する方法

  2. Linux では、bash コマンドではなく C 関数のマニュアル ページを取得するにはどうすればよいですか?

  3. Linux の man ページの読み方は?

  1. SFTPコマンドとオプションの使用方法

  2. Linuxxargsコマンドの使用方法

  3. Linuxでカラーのマニュアルページを表示する方法