the-art-of-command-line - コマンドラインを1ページでマスター

(Master the command line, in one page)

Created at: 2015-05-20 23:11:03
Language:

🌍チェシュティナドイツ語Ελληνικά英語スペイン語フランス語インドネシアイタリア語日本語한국어polskiポルトガル語RomânăРусскийSlovenščinaУкраїнська简体中文∙繁體中文

コマンドラインの芸術

注:私はこれを改訂することを計画しており、これをより包括的なガイドに拡張するのに役立つ新しい共著者を探しています。それは非常に人気がありますが、それはより広く、もう少し深くなる可能性があります。あなたが書くのが好きで、この資料の専門家であり、助けることをいとわないなら、私にメモを送ってください josh (0x40) holloway.com.–ジェレビーホロウェイ。ありがとうございました!

カール -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' |egrep -o '\w+' |tr -d ''' |カウセイ-W50

コマンドラインでの流暢さは、しばしば無視されたり、難解と見なされるスキルですが、エンジニアとしての柔軟性と生産性を明白な方法と微妙な方法の両方で向上させます。これは、Linuxで作業するときに役立つコマンドラインの使用に関するメモとヒントの選択です。いくつかのヒントは初歩的なものであり、いくつかはかなり具体的、洗練されている、またはあいまいです。このページは長くはありませんが、ここにあるすべてのアイテムを使用して思い出すことができれば、多くのことがわかります。

この作品は多くの著者と翻訳者の結果です。 これのいくつかはもともとQuoraに登場しました、 しかし、その後GitHubに移行し、元の作成者よりも才能のある人々が多くの改善を行いました。コマンドラインに関する質問がある場合は、質問を送信してください。エラーやもっと良いものを見つけたら貢献してください!

メタ

スコープ:

  • このガイドは、初心者と経験豊富なユーザーの両方を対象としています。目標は、(重要なものすべて)、特異性(最も一般的なケースの具体例を挙げる)、簡潔(本質的でないものや、他の場所で簡単に調べることができる余談を避ける)です。すべてのヒントは、状況によっては不可欠であるか、代替手段よりも時間を大幅に節約します。
  • これは Linux 用に書かれていますが、"macOS のみ" と "Windows のみ" のセクションは例外です。他のアイテムの多くは、他のUnicesやmacOS(またはCygwin)に適用されるか、インストールできます。
  • 焦点はインタラクティブなBashにありますが、多くのヒントは他のシェルや一般的なBashスクリプトにも当てはまります。
  • これには、「標準」のUnixコマンドと、特別なパッケージインストールを必要とするコマンドの両方が含まれています。

筆記:

  • これを 1 ページにまとめるために、コンテンツは参照によって暗黙的に含まれます。あなたは、Googleへのアイデアやコマンドを知ったら、他の場所で詳細を調べるのに十分賢いです。,,,,または(必要に応じて)新しいプログラムをインストールします。
    apt
    yum
    dnf
    pacman
    pip
    brew
  • Explainshellを使用して、コマンド、オプション、パイプなどの機能の有用な内訳を取得します。

基本

  • 基本的なバッシュを学びます。実際には、タイプし、少なくともすべてをざっと読みます。フォローするのはとても簡単で、それほど長くはありません。代替シェルは素晴らしいかもしれませんが、Bashは強力で常に利用可能です(自分のラップトップで誘惑しながら、zsh、fishなどのみを学習すると、既存のサーバーを使用するなど、多くの状況で制限されます)。

    man bash

  • 少なくとも1つのテキストベースのエディタをよく学びましょう。Theエディターは、基本的な編集(開く、編集する、保存する、検索する)で最も簡単なものの1つです。ただし、テキスト端末のパワーユーザーにとって、習得は難しいが由緒ある、高速でフル機能のエディターであるVim()に代わるものはありません。多くの人々は、特に大規模な編集タスクのために、古典的なEmacsも使用しています。(もちろん、大規模なプロジェクトに取り組んでいる現代のソフトウェア開発者は、純粋なテキストベースのエディタのみを使用する可能性は低く、最新のグラフィカルIDEとツールにも精通している必要があります。

    nano
    vi

  • ドキュメントの検索:

    • 公式ドキュメントの読み方を知っている(好奇心旺盛な人のために、セクション番号をリストします、例えば、1は「通常の」コマンド、5はファイル/規約、8は管理用です)。でマニュアルページを検索します。
      man
      man man
      apropos
    • 一部のコマンドは実行可能ファイルではなく、Bashの組み込みであり、それらに関するヘルプを得ることができることを知ってくださいそして。コマンドを使用して、コマンドが実行可能ファイル、シェル組み込み、またはエイリアスであるかどうかを確認できます。
      help
      help -d
      type command
    • curl cheat.sh/command
      シェルコマンドの使用方法の一般的な例を含む簡単な「チートシート」を提供します。
  • を使用して出力と入力のリダイレクトについて学びますandおよびパイプを使用します。知っている出力ファイルを上書きして追加します。標準出力と標準エラーについて学習します。

    >
    <
    |
    >
    >>

  • ファイルグロブの拡張(そしておそらく...)と引用、および二重引用符と一重引用符の違いについて学びます。(変数展開の詳細については、以下を参照してください。

    *
    ?
    [
    ]
    "
    '

  • Bashジョブ管理に精通している:、ctrl-z、ctrl-cなど,,,,,

    &
    jobs
    fg
    bg
    kill

  • 知っている、およびパスワードレス認証の基本、経由など。

    ssh
    ssh-agent
    ssh-add

  • 基本的なファイル管理:and(特に、すべての列の意味を学ぶ),,,and(またはさらに良い)、および(ハードリンクとソフトリンクの違いと利点を学ぶ),,,(ディスク使用量の簡単な要約:)。ファイルシステム管理の場合,,,,,.iノードとは何か(または)を学びます。

    ls
    ls -l
    ls -l
    less
    head
    tail
    tail -f
    less +F
    ln
    ln -s
    chown
    chmod
    du
    du -hs *
    df
    mount
    fdisk
    mkfs
    lsblk
    ls -i
    df -i

  • 基本的なネットワーク管理:または,,,.

    ip
    ifconfig
    dig
    traceroute
    route

  • などのバージョン管理システムを学習して使用します。

    git

  • 正規表現をよく知っていて、/にさまざまなフラグがあります。,,,,,とオプションは知っておく価値があります。

    grep
    egrep
    -i
    -o
    -v
    -A
    -B
    -C

  • パッケージを見つけてインストールするための使用方法、、または(ディストリビューションによって異なります)を学びます。そして、あなたが持っていることを確認してくださいPythonベースのコマンドラインツールをインストールする必要があります(以下のいくつかは、インストールするのが最も簡単です)。

    apt-get
    yum
    dnf
    pacman
    pip
    pip

日常的に使用

  • Bashでは、Tabを使用して引数を入力するか、使用可能なすべてのコマンドを一覧表示し、ctrl-rを使用してコマンド履歴を検索します(押した後、入力して検索し、ctrl-rを繰り返し押してさらに一致するものを循環させるか、Enterキーを押して見つかったコマンドを実行するか、右矢印を押して結果を現在の行に配置して編集を許可します)。

  • Bash では、ctrl-w を使用して最後の単語を削除し、ctrl-uを使用して現在のカーソルから行の先頭に戻るコンテンツを削除します。単語で移動するにはalt-bとalt-fを使用し、カーソルを行の先頭に移動するにはctrl-aを使用し、カーソルを行末に移動するにはctrl-e、行末に移動するにはctrl-k、画面をクリアするにはctrl-lを使用します。Bashのすべてのデフォルトのキーバインディングを参照してください。たくさんあります。たとえば、alt- などです。前の引数を循環し、alt-* は glob を展開します。

    man readline

  • あるいは、viスタイルのキーバインディングが好きなら、(そしてそれを元に戻す)を使用してください。

    set -o vi
    set -o emacs

  • 長いコマンドを編集する場合は、エディターを設定した後(たとえば)、ctrl-xctrl-eは、複数行の編集のためにエディターで現在のコマンドを開きます。またはviスタイルで、エスケープ-v

    export EDITOR=vim

  • 最近のコマンドを表示するには、 を使用します。(ここで、はコマンド番号)に従って、再度実行します。使用できる略語もたくさんありますが、おそらく最も便利なのは最後の引数と最後のコマンドです(マニュアルページの「履歴の拡張」を参照)。ただし、これらは多くの場合、ctrl-rおよびalt-に簡単に置き換えられます。

    history
    !n
    n
    !$
    !!

  • でホームディレクトリに移動します。ホームディレクトリに関連するファイルにアクセスします接頭辞(例)。碑文はホームディレクトリを次のように参照します。

    cd
    ~
    ~/.bashrc
    sh
    $HOME

  • 前の作業ディレクトリに戻るには:。

    cd -

  • コマンドの入力の途中で気が変わった場合は、alt-#を押して先頭に追加し、コメントとして入力します(またはctrl-a#enterを使用します)。その後、コマンド履歴を使用して戻ることができます。

    #

  • 使用(または)。それは非常に強力です。1 行ごとに実行する項目の数 () と並列処理 () を制御できます。それが正しいことをするかどうかわからない場合は、 最初.また、便利です。例:

    xargs
    parallel
    -L
    -P
    xargs echo
    -I{}

      find . -name '*.py' | xargs grep some_function
      cat hosts | xargs -I{} ssh root@{} hostname
  • pstree -p
    は、プロセスツリーの便利な表示です。

  • 使用および名前でプロセスを検索または通知します(役立ちます)。

    pgrep
    pkill
    -f

  • プロセスを送信できるさまざまなシグナルを把握します。たとえば、プロセスを中断するには、 を使用します。完全なリストについては、

    kill -STOP [pid]
    man 7 signal

  • 使用するまたはバックグラウンドプロセスを永久に実行し続ける場合。

    nohup
    disown

  • どのプロセスがリッスンしているかを確認しますまたは(TCPの場合、UDPの場合は追加)または(macOSでも機能します)。

    netstat -lntp
    ss -plat
    -u
    lsof -iTCP -sTCP:LISTEN -P -n

  • 関連項目および開いているソケットとファイルの場合。

    lsof
    fuser

  • Seeorシステムが実行されている時間を知るため。

    uptime
    w

  • 一般的に使用されるコマンドのショートカットを作成するために使用します。たとえば、新しいエイリアスを作成します。

    alias
    alias ll='ls -latr'
    ll

  • エイリアス、シェル設定、およびよく使用する関数を保存し、ログインシェルがそれをソースするように手配します。これにより、すべてのシェルセッションでセットアップを使用できるようになります。

    ~/.bashrc

  • 環境変数の設定と、ログイン時に実行するコマンドを入れます。グラフィカル環境のログインとジョブから起動するシェルには、個別の設定が必要になります。

    ~/.bash_profile
    cron

  • Git を使用して、さまざまなコンピューター間で構成ファイル (and.and.など) を同期します。

    .bashrc
    .bash_profile

  • 変数とファイル名に空白が含まれている場合は注意が必要です。Bash変数を引用符で囲みます。好むorファイル名を区切るためにヌル文字を有効にするオプション、例えばor。forループで空白を含むファイル名を反復処理するには、IFSを改行のみに設定します。

    "$FOO"
    -0
    -print0
    locate -0 pattern | xargs -0 ls -al
    find / -print0 -type d | xargs -0 ls -al
    IFS=$'\n'

  • Bashスクリプトでは、デバッグ出力に使用します(または、展開されていない変数やコメントを含む生の入力をログに記録するバリアント)。次のことを行わない正当な理由がない限り、厳密モードを使用します: エラー(ゼロ以外の終了コード)で中止します。未設定の変数の使用法を検出するために使用します。パイプ内のエラーで中止することを検討してください(ただし、このトピックは少し微妙であるため、そうする場合はもっと読んでください)。より複雑なスクリプトについては、EXITまたはERRでも使用します。便利な習慣は、次のようなスクリプトを開始すると、一般的なエラーを検出して中止し、メッセージを出力することです。

    set -x
    set -v
    set -e
    set -u
    set -o pipefail
    trap

      set -euo pipefail
      trap "echo 'error: Script failed: see failed command above'" ERR
  • Bashスクリプトでは、サブシェル(括弧で記述)はコマンドをグループ化する便利な方法です。一般的な例は、一時的に別の作業ディレクトリに移動することです。
      # do something in current dir
      (cd /some/other/dir && other-command)
      # continue in original dir
  • Bashでは、変数展開には多くの種類があることに注意してください。変数が存在することを確認しています:。たとえば、Bashスクリプトが単一の引数を必要とする場合は、次のように記述します。変数が空の場合にデフォルト値を使用する:。前の例に追加の(オプションの)パラメーターを追加する場合は、次のようなものを使用できます。ifis が省略され、したがって空に設定されます。算術展開:。シーケンス:。文字列のトリミング:と。たとえば、印刷します。

    ${name:?error message}
    input_file=${1:?usage: $0 input_file}
    ${name:-default}
    output_file=${2:-logfile}
    $2
    output_file
    logfile
    i=$(( (i + 1) % 5 ))
    {1..10}
    ${var%suffix}
    ${var#prefix}
    var=foo.pdf
    echo ${var%.pdf}.txt
    foo.txt

  • ブレース拡張使用...類似したテキストを再入力する必要を減らし、項目の組み合わせを自動化できます。これは、(両方のファイルを移動する)、(展開する)、または(可能なすべての組み合わせを展開してディレクトリツリーを作成する)などの例に役立ちます。中括弧の拡張は、他の拡張の前に実行されます。

    {
    }
    mv foo.{txt,pdf} some-dir
    cp somefile{,.bak}
    cp somefile somefile.bak
    mkdir -p test-{a,b,c}/subtest-{1,2,3}

  • 展開の順序は次のとおりです。チルダ展開、パラメータと変数の展開、算術展開、およびコマンド置換(左から右への方法で行われます)。単語分割とファイル名の展開。(例えば、 のような範囲は、を使用して変数で表現することはできません。代わりに、またはループを使用してください。

    {1..20}
    {$a..$b}
    seq
    for
    seq $a $b
    for((i=a; i<=b; i++)); do ... ; done

  • コマンドの出力は、ファイルのように扱うことができます(プロセス置換と呼ばれます)。たとえば、ローカルとリモートを比較します。

    <(some command)
    /etc/hosts

      diff /etc/hosts <(ssh somehost cat /etc/hosts)
  • スクリプトを書くときは、すべてのコードを中括弧で囲むことができます。閉じ中括弧がない場合、構文エラーのためにスクリプトを実行できません。これは、スクリプトがWebからダウンロードされるときに、部分的にダウンロードされたスクリプトが実行されないようにするため、理にかなっています。
{
      # Your code here
}
cat <<EOF
input
on multiple lines
EOF
  • Bashでは、標準出力と標準エラーの両方をリダイレクトします:or。多くの場合、コマンドが開いているファイルハンドルを標準入力に残さないようにするために、それを現在の端末に結び付けることも良い習慣です。

    some-command >logfile 2>&1
    some-command &>logfile
    </dev/null

  • 16進数と10進数の値を持つ優れたASCIIテーブルに使用します。一般的なエンコード情報については,,,および役立ちます。

    man ascii
    man unicode
    man utf-8
    man latin1

  • Useor tmuxを使用して画面を多重化し、特にリモートsshセッションで使用し、セッションにデタッチして再アタッチします。より多くの情報と簡単な管理を提供することで、画面またはtmuxを強化できます。セッション永続性のみのより最小限の代替手段はdtachです。

    screen
    byobu

  • sshでは、リモートサーバーからWebサイトにアクセスするなど、トンネルを移植する方法を知っていると便利です。

    -L
    -D
    -R

  • ssh構成にいくつかの最適化を行うと便利な場合があります。たとえば、Thisには、特定のネットワーク環境での接続の切断を回避するための設定が含まれ、圧縮を使用し(低帯域幅接続でのSCPに役立ちます)、ローカル制御ファイルを使用して同じサーバーへのチャネルを多重化します。

    ~/.ssh/config

      TCPKeepAlive=yes
      ServerAliveInterval=15
      ServerAliveCountMax=6
      Compression=yes
      ControlMaster auto
      ControlPath /tmp/%r@%h:%p
      ControlPersist yes
  • sshに関連する他のいくつかのオプションはセキュリティに敏感であり、サブネットやホストごと、または信頼できるネットワークなどで注意して有効にする必要があります。

    StrictHostKeyChecking=no
    ForwardAgent=yes

  • UDPを使用するsshの代替としてmoshを検討し、接続の切断を回避し、外出先での利便性を高めます(サーバー側のセットアップが必要です)。

  • 8進形式でファイルのアクセス許可を取得するには、システム構成には便利ですが、バングルが簡単では利用できません。

    ls

      stat -c '%A %a %n' /etc/timezone
  • 別のコマンドの出力から値を対話形式で選択するには、percolまたはfzf を使用します。

  • 別のコマンド(like)の出力に基づいてファイルと対話するには、(PathPicker)を使用します。

    git
    fpp

  • ネットワーク上のすべての人が利用できる、現在のディレクトリ(およびサブディレクトリ)内のすべてのファイル用の単純なWebサーバーの場合は、(ポート7777とPython 2の場合)および(ポート7777とPython 3の場合)を使用します。

    python -m SimpleHTTPServer 7777
    python -m http.server 7777

  • 別のユーザーとしてコマンドを実行するには、デフォルトでは root として実行されます。別のユーザーを指定します。使用するそのユーザーとしてログインします(パスワードの入力を求められます)。

    sudo
    -u
    -i

  • シェルを別のユーザーに切り替えるには、「-」が付いた後者は、別のユーザーがログインしたばかりのかのように環境を取得します。ユーザー名を省略すると、デフォルトで root になります。切り替え先のユーザーのパスワードの入力を求められます。

    su username
    su - username

  • コマンドラインの128Kの制限について知っています。この「引数リストが長すぎます」というエラーは、ワイルドカードが多数のファイルに一致する場合によく発生します。(これが起こるときのような代替案と助けるかもしれません。

    find
    xargs

  • 基本的な電卓(そしてもちろん一般的なPythonへのアクセス)には、インタプリタ。例えば

    python

>>> 2+3
5

ファイルとデータの処理

  • 現在のディレクトリ(または同様のもの)で名前でファイルを検索します。名前でどこでもファイルを検索するには、(ただし、最近作成されたファイルのインデックスが作成されていない可能性があることに注意してください)。

    find . -iname '*something*'
    locate something
    updatedb

  • ソースファイルやデータファイルの一般的な検索には、ackag(「シルバーサーチャー」)、rg(ripgrep)など、より高度または高速なオプションがいくつかあります。

    grep -r

  • HTML をテキストに変換するには:

    lynx -dump -stdin

  • マークダウン、HTML、およびあらゆる種類のドキュメント変換については、pandocを試してください。たとえば、マークダウン文書を Word 形式に変換するには、次のようにします。

    pandoc README.md --from markdown --to docx -o temp.docx

  • XMLを処理する必要がある場合は、古いですが良いです。

    xmlstarlet

  • JSON の場合は、jq を使用します。インタラクティブな使用については、jidjiq も参照してください。

  • YAML の場合は、シャムルを使用します。

  • エクセルまたはCSVファイルの場合、csvkitは,,,,などを提供します。

    in2csv
    csvcut
    csvjoin
    csvgrep

  • Amazon S3の場合、s3cmdは便利で、s4cmdの方が高速です。アマゾンのAWSと改良されたのこぎりは、他のAWS関連のタスクに不可欠です。

  • について知っていて、ユニクを含む 'サンドオプション -- 以下のワンライナーを参照してください。も参照してください。

    sort
    uniq
    -u
    -d
    comm

  • について知って、、テキストファイルを操作します。多くの人が使用しますしかし忘れてください。

    cut
    paste
    join
    cut
    join

  • 知っている改行()、文字()、単語()、バイト()を数えます。

    wc
    -l
    -m
    -w
    -c

  • 知っている のように、stdinからファイルおよびstdoutにコピーすること。

    tee
    ls -al | tee file.txt

  • グループ化、フィールドの反転、統計計算など、より複雑な計算の場合は、データマッシュを検討してください。

  • ロケールは、並べ替え順序 (照合順序) やパフォーマンスなど、多くのコマンド ライン ツールに微妙な影響を与えることを知っておいてください。ほとんどのLinuxインストールでは、他のロケール変数を米国英語などのローカル設定に設定します。ただし、ロケールを変更すると並べ替えが変更されることに注意してください。また、i18nルーチンはソートやその他のコマンドの実行を何倍も遅くする可能性があることを知っておいてください。状況によっては (以下の設定演算や一意性演算など)、低速の i18n ルーチンを完全に無視して、従来のバイトベースのソート順を使用することができます。

    LANG
    export LC_ALL=C

  • 特定のコマンドの環境を設定するには、次のように、その呼び出しの前に環境変数設定を付けます。

    TZ=Pacific/Fiji date

  • 基本を知っていて、簡単なデータマンジングのために。例については、ワンライナーを参照してください。

    awk
    sed

  • 1 つ以上のファイル内のすべての文字列を置換するには、次のようにします。

      perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
  • 複数のファイルの名前を変更したり、ファイル内で検索して置換したりするには、reprenを試してください。(場合によっては、コマンドで複数の名前を変更することもできますが、その機能はすべてのLinuxディストリビューションで同じではないため注意してください。
    rename
      # Full rename of filenames, directories, and contents foo -> bar:
      repren --full --preserve-case --from foo --to bar .
      # Recover backup files whatever.bak -> whatever:
      repren --renames --from '(.*)\.bak' --to '\1' *.bak
      # Same as above, using rename, if available:
      rename 's/\.bak$//' *.bak
  • マニュアルページにあるように、実際には高速で非常に用途の広いファイルコピーツールです。マシン間の同期で知られていますが、ローカルでも同様に役立ちます。セキュリティ制限が許す場合、使用する代わりに最初から再起動せずに転送の回復を許可します。また、多数のファイルを削除する最速の方法の一つです。
    rsync
    rsync
    scp
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
  • ファイル処理時の進行状況を監視するには、pv,pycp,pmonitor,progress,、またはブロックレベルのコピーを使用します。

    rsync --progress
    dd status=progress

  • ファイルからランダムな行をシャッフルまたは選択するために使用します。

    shuf

  • 知っているの選択肢。数字の場合は、 または、人間が読める数字(fromなど)を処理するため。キーがどのように機能するか(および)を知っています。特に、あなたが書く必要があることに注意してください最初のフィールドのみで並べ替える;行全体に従って並べ替えることを意味します。安定したソート()が便利です。たとえば、最初にフィールド 2 で並べ替え、次に次にフィールド 1 で並べ替えるには、使用できます。

    sort
    -n
    -h
    du -h
    -t
    -k
    -k1,1
    -k1
    sort -s
    sort -k1,1 | sort -s -k2,2

  • Bashのコマンドラインにタブリテラルを書き込む必要がある場合(たとえば、-t引数をソートするには)、ctrl-v [Tab]を押すか、書き込みます(コピー/貼り付けできるので後者の方が良いです)。

    $'\t'

  • ソースコードにパッチを適用するための標準ツールは次のとおりです。差分の要約統計量および横並びの差分については、こちらも参照してください。メモはディレクトリ全体に対して機能します。変更の概要に使用します。ファイルを比較および編集するために使用します。

    diff
    patch
    diffstat
    sdiff
    diff -r
    diff -r tree1 tree2 | diffstat
    vimdiff

  • バイナリファイルの場合は、または単純な16進ダンプの場合、またはバイナリ編集の場合。

    hd
    hexdump
    xxd
    bvi
    hexedit
    biew

  • また、バイナリファイルの場合、(プラスなど)テキストのビットを見つけることができます。

    strings
    grep

  • バイナリ差分 (デルタ圧縮) の場合は、 を使用します。

    xdelta3

  • テキストエンコーディングを変換するには、試してください。またはより高度な使用のために;それはいくつかの高度なユニコードのものをサポートしています。例えば:

    iconv
    uconv

      # Displays hex codes or actual names of characters (useful for debugging):
      uconv -f utf-8 -t utf-8 -x '::Any-Hex;' < input.txt
      uconv -f utf-8 -t utf-8 -x '::Any-Name;' < input.txt
      # Lowercase and removes all accents (by expanding and dropping them):
      uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC;' < input.txt > output.txt
  • ファイルを分割するには、(サイズで分割する)および(パターンで分割する)を参照してください。

    split
    csplit

  • 日付と時刻: 現在の日付と時刻を便利なISO 8601形式で取得するには、 (他のオプションには問題があります)。日付と時刻の式を操作するには、dateutils から etc. を使用します。

    date -u +"%Y-%m-%dT%H:%M:%SZ"
    dateadd
    datediff
    strptime

  • 圧縮ファイルを操作します,,, とを使用します。

    zless
    zmore
    zcat
    zgrep

  • ファイル属性は、ファイル権限の下位レベルの代替手段を提供します。たとえば、誤ってファイルが削除されないように保護するために、不変フラグは次のようになります。

    chattr
    sudo chattr +i /critical/directory/or/file

  • 使用およびファイルのアクセス許可を保存および復元します。例えば:

    getfacl
    setfacl

   getfacl -R /some/path > permissions.txt
   setfacl --restore=permissions.txt
  • 空のファイルをすばやく作成するには、(スパースファイルを作成します)、(ext4、xfs、btrfs、ocfs2ファイルシステム)、(ほとんどすべてのファイルシステム、xfsprogsパッケージで提供されます)、(Solaris、Mac OSなどのUnixライクなシステムの場合)。
    truncate
    fallocate
    xfs_mkfile
    mkfile

システムデバッグ

  • Webデバッグの場合、便利、または同等のもの、またはより現代的なhttpieです。

    curl
    curl -I
    wget

  • 現在のCPU /ディスクのステータスを知るために、古典的なツールは(またはより良い)です。基本的なCPUとパーティションごとの詳細なディスク統計とパフォーマンスの洞察に使用します。

    top
    htop
    iostat
    iotop
    iostat -mxz 15

  • ネットワーク接続の詳細については、andを使用します。

    netstat
    ss

  • システムで何が起こっているかを簡単に概観するには、特に便利です。詳細を含む最も広い概要については、glanceを使用します。

    dstat

  • メモリの状態を知るには、andを実行して出力を理解します。特に、「キャッシュされた」値はLinuxカーネルによってファイルキャッシュとして保持されているメモリであるため、「空き」値に効果的にカウントされることに注意してください。

    free
    vmstat

  • Javaシステムのデバッグは別の魚のやかんですが、Oracleや他のJVMの簡単なトリックは、フルスタックトレースとヒープサマリー(非常に有益な世代別ガベージコレクションの詳細を含む)をstderr / logsにダンプすることです。JDK,,,は便利です。SJKツールはより高度です。

    kill -3 <pid>
    jps
    jstat
    jstack
    jmap

  • mtrをより良いトレースルートとして使用して、ネットワークの問題を特定します。

  • ディスクがいっぱいになっている理由を調べるために、ncduは次のような通常のコマンドよりも時間を節約します。

    du -sh *

  • 帯域幅を使用しているソケットまたはプロセスを見つけるには、iftopまたはnethogsを試してください。

  • ツール(Apacheに付属)は、Webサーバーのパフォーマンスをすばやくチェックするのに役立ちます。より複雑なロード テストについては、試してください。

    ab
    siege

  • より深刻なネットワークデバッグの場合は、ワイヤシャークtshark、またはngrep

  • について知っていると。これらは、プログラムが失敗したり、ハングしたり、クラッシュしたりしていて、その理由がわからない場合や、パフォーマンスの一般的なアイデアを把握したい場合に役立ちます。プロファイルオプション () と、実行中のプロセスにアタッチする機能 () に注意してください。子オプションのトレース () を使用して、重要な呼び出しを見逃さないようにします。

    strace
    ltrace
    -c
    -p
    -f

  • 共有ライブラリなどをチェックすることを知っているが、信頼できないファイルでは絶対に実行しないでください

    ldd

  • 実行中のプロセスに接続する方法を知っていて、そのスタックトレースを取得します。

    gdb

  • 使う。ライブの問題をデバッグするときに驚くほど役立つことがあります。例:,,,,,,(ここで、はプロセスIDまたはpidです)。

    /proc
    /proc/cpuinfo
    /proc/meminfo
    /proc/cmdline
    /proc/xxx/cwd
    /proc/xxx/exe
    /proc/xxx/fd/
    /proc/xxx/smaps
    xxx

  • 過去に何かがうまくいかなかった理由をデバッグするとき、sarは非常に役に立ちます。CPU、メモリ、ネットワークなどの履歴統計が表示されます。

  • より詳細なシステムとパフォーマンスの分析については、(SystemTap)、perfおよびsysdigを参照してください。

    stap

  • 使用しているOSを確認してくださいまたは(一般的なUnix /カーネル情報)または(Linuxディストリビューション情報)。

    uname
    uname -a
    lsb_release -a

  • 何かが本当に面白い動作をしているときはいつでも(ハードウェアまたはドライバーの問題である可能性があります)。

    dmesg

  • ファイルを削除しても、報告された予想されるディスク領域が解放されない場合は、ファイルがプロセスによって使用されているかどうかを確認します。

    du
    lsof | grep deleted | grep "filename-of-my-big-file"

ワンライナー

コマンドをつなぎ合わせるいくつかの例:

  • テキストファイルの交差、和集合、および違いを設定できることは非常に便利です。すでに一意になっているテキスト ファイルがあると想定されます。これは高速で、最大数ギガバイトの任意のサイズのファイルで機能します。(ソートはメモリによって制限されませんが、小さなルートパーティションでオプションifisを使用する必要がある場合があります。についてのメモも参照してください上記と'オプション(以下では明確にするために省略されています)。
    sort
    uniq
    a
    b
    -T
    /tmp
    LC_ALL
    sort
    -u
      sort a b | uniq > c   # c is a union b
      sort a b | uniq -d > c   # c is a intersect b
      sort a b b | uniq -u > c   # c is set difference a - b
  • Pretty-print two JSON files, normalizing their syntax, then coloring and paginating the result:
      diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
  • Use to quickly examine the contents of all files in a directory (so each line is paired with the filename), or (so each file has a heading). This can be useful for directories filled with config settings like those in , , .

    grep . *
    head -100 *
    /sys
    /proc
    /etc

  • Summing all numbers in the third column of a text file (this is probably 3X faster and 3X less code than equivalent Python):

      awk '{ x += $3 } END { print x }' myfile
  • To see sizes/dates on a tree of files, this is like a recursive but is easier to read than :
    ls -l
    ls -lR
      find . -type f -ls
  • Say you have a text file, like a web server log, and a certain value that appears on some lines, such as an parameter that is present in the URL. If you want a tally of how many requests for each :
    acct_id
    acct_id
      egrep -o 'acct_id=[0-9]+' access.log | cut -d= -f2 | sort | uniq -c | sort -rn
  • To continuously monitor changes, use , e.g. check changes to files in a directory with or to network settings while troubleshooting your wifi settings with .

    watch
    watch -d -n 2 'ls -rtlh | tail'
    watch -d -n 2 ifconfig

  • Run this function to get a random tip from this document (parses Markdown and extracts an item):

      function taocl() {
        curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
          sed '/cowsay[.]png/d' |
          pandoc -f markdown -t html |
          xmlstarlet fo --html --dropdtd |
          xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
          xmlstarlet unesc | fmt -80 | iconv -t US
      }

Obscure but useful

  • expr
    : perform arithmetic or boolean operations or evaluate regular expressions

  • m4
    : simple macro processor

  • yes
    : print a string a lot

  • cal
    : nice calendar

  • env
    : run a command (useful in scripts)

  • printenv
    : print out environment variables (useful in debugging and scripts)

  • look
    : find English words (or lines in a file) beginning with a string

  • cut
    , and : data manipulation
    paste
    join

  • fmt
    : format text paragraphs

  • pr
    : format text into pages/columns

  • fold
    : wrap lines of text

  • column
    : format text fields into aligned, fixed-width columns or tables

  • expand
    and : convert between tabs and spaces
    unexpand

  • nl
    : add line numbers

  • seq
    : print numbers

  • bc
    : calculator

  • factor
    : factor integers

  • gpg
    : encrypt and sign files

  • toe
    : table of terminfo entries

  • nc
    : network debugging and data transfer

  • socat
    : socket relay and tcp port forwarder (similar to
    netcat
    )

  • slurm
    : network traffic visualization

  • dd
    : moving data between files or devices

  • file
    : identify type of a file

  • tree
    : display directories and subdirectories as a nesting tree; like but recursive
    ls

  • stat
    : file info

  • time
    : execute and time a command

  • timeout
    : execute a command for specified amount of time and stop the process when the specified amount of time completes.

  • lockfile
    : create semaphore file that can only be removed by
    rm -f

  • logrotate
    : rotate, compress and mail logs.

  • watch
    : run a command repeatedly, showing results and/or highlighting changes

  • when-changed
    : runs any command you specify whenever it sees file changed. See and as well.
    inotifywait
    entr

  • tac
    : print files in reverse

  • comm
    : compare sorted files line by line

  • strings
    : extract text from binary files

  • tr
    : character translation or manipulation

  • iconv
    or : conversion for text encodings
    uconv

  • split
    and : splitting files
    csplit

  • sponge
    : read all input before writing it, useful for reading from then writing to the same file, e.g.,
    grep -v something some-file | sponge some-file

  • units
    : unit conversions and calculations; converts furlongs per fortnight to twips per blink (see also
    /usr/share/units/definitions.units
    )

  • apg
    : generates random passwords

  • xz
    : high-ratio file compression

  • ldd
    : dynamic library info

  • nm
    : symbols from object files

  • ab
    or
    wrk
    : benchmarking web servers

  • strace
    : system call debugging

  • mtr
    : better traceroute for network debugging

  • cssh
    : visual concurrent shell

  • rsync
    : sync files and folders over SSH or in local file system

  • wireshark
    and
    tshark
    : packet capture and network debugging

  • ngrep
    : grep for the network layer

  • host
    and : DNS lookups
    dig

  • lsof
    : process file descriptor and socket info

  • dstat
    : useful system stats

  • glances
    : high level, multi-subsystem overview

  • iostat
    : Disk usage stats

  • mpstat
    : CPU usage stats

  • vmstat
    : Memory usage stats

  • htop
    : improved version of top

  • last
    : login history

  • w
    : who's logged on

  • id
    : user/group identity info

  • sar
    : historic system stats

  • iftop
    or
    nethogs
    : network utilization by socket or process

  • ss
    : socket statistics

  • dmesg
    : boot and system error messages

  • sysctl
    : view and configure Linux kernel parameters at run time

  • hdparm
    : SATA/ATA disk manipulation/performance

  • lsblk
    : list block devices: a tree view of your disks and disk partitions

  • lshw
    , , , , : hardware information, including CPU, BIOS, RAID, graphics, devices, etc.
    lscpu
    lspci
    lsusb
    dmidecode

  • lsmod
    and : List and show details of kernel modules.
    modinfo

  • fortune
    , , and : um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful"
    ddate
    sl

macOS only

These are items relevant only on macOS.

  • Package management with (Homebrew) and/or (MacPorts). These can be used to install on macOS many of the above commands.

    brew
    port

  • Copy output of any command to a desktop app with and paste input from one with .

    pbcopy
    pbpaste

  • To enable the Option key in macOS Terminal as an alt key (such as used in the commands above like alt-b, alt-f, etc.), open Preferences -> Profiles -> Keyboard and select "Use Option as Meta key".

  • To open a file with a desktop app, use or .

    open
    open -a /Applications/Whatever.app

  • Spotlight: Search files with and list metadata (such as photo EXIF info) with .

    mdfind
    mdls

  • Be aware macOS is based on BSD Unix, and many commands (for example , , , , ) have many subtle variations from Linux, which is largely influenced by System V-style Unix and GNU tools. You can often tell the difference by noting a man page has the heading "BSD General Commands Manual." In some cases GNU versions can be installed, too (such as and for GNU awk and sed). If writing cross-platform Bash scripts, avoid such commands (for example, consider Python or ) or test carefully.

    ps
    ls
    tail
    awk
    sed
    gawk
    gsed
    perl

  • To get macOS release information, use .

    sw_vers

Windows only

These items are relevant only on Windows.

Ways to obtain Unix tools under Windows

  • Access the power of the Unix shell under Microsoft Windows by installing Cygwin. Most of the things described in this document will work out of the box.

  • On Windows 10, you can use Windows Subsystem for Linux (WSL), which provides a familiar Bash environment with Unix command line utilities.

  • If you mainly want to use GNU developer tools (such as GCC) on Windows, consider MinGW and its MSYS package, which provides utilities such as bash, gawk, make and grep. MSYS doesn't have all the features compared to Cygwin. MinGW is particularly useful for creating native Windows ports of Unix tools.

  • Another option to get Unix look and feel under Windows is Cash. Note that only very few Unix commands and command-line options are available in this environment.

Useful Windows command-line tools

  • You can perform and script most Windows system administration tasks from the command line by learning and using .

    wmic

  • Native command-line Windows networking tools you may find useful include , , , and .

    ping
    ipconfig
    tracert
    netstat

  • You can perform many useful Windows tasks by invoking the command.

    Rundll32

Cygwin tips and tricks

  • Install additional Unix programs with the Cygwin's package manager.

  • Use as your command-line window.

    mintty

  • Access the Windows clipboard through .

    /dev/clipboard

  • Run登録済みのアプリケーションを介して任意のファイルを開くこと。

    cygstart

  • を使用して Windows レジストリにアクセスします。

    regtool

  • 注意してくださいWindowsドライブパスはシグウィンの下、そしてシグウィンの下に表示されますWindows上。を使用してCygwinとWindowsスタイルのファイルパスを変換します。これは、Windows プログラムを呼び出すスクリプトで最も役立ちます。

    C:\
    /cygdrive/c
    /
    C:\cygwin
    cygpath

その他の資料

免責事項

非常に小さなタスクを除いて、コードは他の人が読むことができるように書かれています。力には責任が伴います。Bashで何かをできるという事実は、必ずしもあなたがすべきだという意味ではありません!;)

ライセンス

クリエイティブ・コモンズ・ライセンス

この 作品は クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。