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

(Master the command line, in one page)

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

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

コマンドラインの芸術

注:私はこれを改訂することを計画しており、これをより包括的なガイドに拡張するのに役立つ新しい共著者を探しています。それは非常に人気がありますが、それはより広く、もう少し深くなる可能性があります。あなたが書くのが好きで、この資料の専門家であり、助けることをいとわないなら、私にメモを送ってください 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つのテキストベースのエディタをよく学びましょう。エディターは、基本的な編集(開く、編集する、保存する、検索する)に最も簡単なエディターの1つです。ただし、テキスト端末のパワーユーザーにとって、習得は難しいが由緒ある、高速でフル機能のエディターであるVim()に代わるものはありません。多くの人々は、特に大規模な編集タスクのために、古典的なEmacsも使用しています。(もちろん、大規模なプロジェクトに取り組んでいる現代のソフトウェア開発者は、純粋なテキストベースのエディタのみを使用する可能性は低く、最新のグラフィカルIDEとツールにも精通している必要があります。

    nano
    vi

  • ドキュメントの検索:

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

    >
    <
    |
    >
    >>

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

    *
    ?
    [
    ]
    "
    '

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

    &
    jobs
    fg
    bg
    kill

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

    ssh
    ssh-agent
    ssh-add

  • 基本的なファイル管理:および(特に、すべての列の意味を学ぶ)、、、および(またはさらに良いことに)、および(ハードリンクとソフトリンクの違いと利点を学ぶ)、、、(ディスク使用量の簡単な要約:)。ファイル・システム管理の場合、、。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-balt-f を、カーソルを行の先頭に移動するには ctrl-a を、行末に移動するには ctrl-e を、行末まで強制終了するには ctrl-k を、画面をクリアするには ctrl-l を使用します。 Bashのすべてのデフォルトのキーバインドについては、を参照してください。たくさんあります。たとえば、alt-. は前の引数を循環し、alt-* は glob を展開します。

    man readline

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

    set -o vi
    set -o emacs

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

    export EDITOR=vim

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

    history
    !n
    n
    !$
    !!

  • でホームディレクトリに移動します。ホームディレクトリに関連するプレフィックス(例:)の付いたファイルにアクセスします。スクリプトでは、ホームディレクトリを として参照します。

    cd
    ~
    ~/.bashrc
    sh
    $HOME

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

    cd -

  • コマンドの入力の途中で気が変わった場合は、alt-#を押して最初にaを追加し、コメントとして入力します(または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

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

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

  • 開いているソケットとファイルについては、および「」も参照してください。

    lsof
    fuser

  • システムの実行時間を確認するかを確認します。

    uptime
    w

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

    alias
    alias ll='ls -latr'
    ll

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

    ~/.bashrc

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

    ~/.bash_profile
    cron

  • 設定ファイルを同期します(例: と)Gitを搭載したさまざまなコンピューター間で。

    .bashrc
    .bash_profile

  • 変数とファイル名に空白が含まれている場合は注意が必要です。Bash変数を引用符で囲みます。ファイル名を区切るためにヌル文字を有効にするための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 スクリプトで 1 つの引数が必要な場合は、 と記述するだけです。変数が空の場合にデフォルト値を使用する: .前の例に追加の(オプションの)パラメータを追加する場合は、 のようなものを使用できます。が省略されて空の場合、 に設定されます。算術展開: .シーケンス:。文字列のトリミング: と .たとえば、 の場合、 は を出力します。

    ${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

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

    <(some command)
    /etc/hosts

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

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

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

    man ascii
    man unicode
    man utf-8
    man latin1

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

    screen
    byobu

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

    -L
    -D
    -R

  • ssh構成にいくつかの最適化を行うと便利な場合があります。たとえば、これには、特定のネットワーク環境での接続の切断を回避するための設定、圧縮の使用(低帯域幅接続での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 を使用します。

  • 別のコマンド( など)の出力に基づいてファイルを操作するには、(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 の場合は、シャムルを使用します。

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

    in2csv
    csvcut
    csvjoin
    csvgrep

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

  • uniqとオプションを含むと知っている - 以下のワンライナーを参照してください。も参照してください。

    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
  • ファイル処理時の進行状況を監視するには、pvpycppmonitor進行状況、、またはブロックレベルのコピーの場合は.

    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

  • バイナリ ファイルの場合は、、または単純な hex ダンプの場合は 、バイナリ編集の場合は を使用します。

    hd
    hexdump
    xxd
    bvi
    hexedit
    biew

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

    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 形式で取得するには、 (他のオプションには問題があります)。日付と時刻の式を操作するには、、 などを使用します。日付ユーティリティから

    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

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

    netstat
    ss

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

    dstat

  • メモリの状態を知るには、 と を実行して出力を理解します。特に、「キャッシュされた」値は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"

ワンライナー

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

  • /を介してテキストファイルの交差、和集合、および差分を設定できることは非常に役立つ場合があります。と が既に一意になっているテキスト ファイルがあるとします。これは高速で、最大数ギガバイトの任意のサイズのファイルで機能します。(ソートはメモリによって制限されませんが、小さなルートパーティションにある場合はオプションを使用する必要があるかもしれません。上記とのオプションに関する注記も参照してください(以下では明確にするために省略しています)。
    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

  • 登録済みのアプリケーションから任意のファイルを開くために実行します。

    cygstart

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

    regtool

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

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

その他の資料

免責事項

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

ライセンス

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

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