?甲状ština∙deutsch∙ελληνικ最初の英語∙español∙français∙インドネシア∙イタリアーノ∙polski
注:これを修正し、これをより包括的なガイドに拡大するのを支援する新しい共著者を探しています。非常に人気がありますが、より広く、少し深くなる可能性があります。あなたが書きたいと思っていて、この資料の専門家であり、支援を検討することをいとわない場合は、Josh(0x40)Holloway.comに私にメモを渡してください。 –Jlevy、Holloway。ありがとう!

コマンドラインの流encyさは、しばしば無視されたり、不可解と見なされているスキルですが、明白で微妙な方法でエンジニアとしての柔軟性と生産性を向上させます。これは、Linuxで作業するときに役立つと感じたコマンドラインを使用するためのメモとヒントの選択です。いくつかのヒントは小学校であり、いくつかはかなり具体的、洗練された、またはあいまいなものもあります。このページは長くはありませんが、ここですべてのアイテムを使用して思い出すことができれば、あなたはたくさん知っています。
この作業は、多くの著者と翻訳者の結果です。これのいくつかはもともとQuoraに登場しましたが、それ以来Githubに移動しました。そこでは、元の著者よりも才能のある人々が多くの改善を行っています。コマンドラインに関連する質問がある場合は、質問を送信してください。エラーなどが見られる場合は、貢献してください!
範囲:
注:
apt 、 yum 、 dnf 、 pacman 、 pipまたはbrew (必要に応じて)を使用して、新しいプログラムをインストールします。基本的なバッシュを学びます。実際、タイプman bashと少なくともすべてをスキムします。フォローするのはとても簡単で、それほど長くはありません。代替シェルはいいことですが、バッシュは強力で常に利用可能です(ZSH、魚などのみを学習しながら、自分のラップトップで誘惑しながら、既存のサーバーの使用など、多くの状況で制限されます)。
少なくとも1つのテキストベースのエディターをよく学びます。 nanoエディターは、基本的な編集(開口部、編集、保存、検索)の最も簡単なエディターの1つです。ただし、テキストターミナルのパワーユーザーの場合、VIM( vi )、学習が難しいが由緒ある、高速で、フル機能のエディターに代わるものはありません。多くの人々は、特により大きな編集タスクのために、古典的なエマックを使用しています。 (もちろん、広範なプロジェクトに取り組んでいる最新のソフトウェア開発者は、純粋なテキストベースのエディターのみを使用する可能性は低いため、最新のグラフィカルなIDやツールにも精通している必要があります。)
ドキュメントの検索:
manで読む方法を知っています(好奇心itive盛な人の場合、 man manセクション番号をリストし、例えば1は「通常の」コマンド、5はファイル/慣習、8は管理用です)。 apropos人のページを見つけてください。helpとhelp -dを使用して助けを得ることができることを知ってください。 Commandは、 type commandを使用して、コマンドが実行可能ファイル、シェルビルトイン、またはエイリアスであるかどうかを確認できます。curl cheat.sh/commandシェルコマンドの使用方法の一般的な例を備えた短い「チートシート」を提供します。 >および<および<およびパイプを使用して出力と入力のリダイレクトについて学びます| 。 now >出力ファイルと>> appendsを上書きします。 stdoutとstderrについて学びます。
* (そしておそらく?と[ ... ] )を使用したファイルグローブの拡張について学び、引用符と単一の"引用」と単一の'引用」の違い(以下の可変拡張の詳細を参照してください。)
Bash Job Management: & 、 Ctrl-Z 、 Ctrl-C 、 jobs 、 fg 、 bg 、 killなどに精通してください。
ssh-agent 、 ssh-addなどを介して、 sshとパスワードレス認証の基本を知ってください。
基本的なファイル管理: 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オプションは知る価値があります。
apt-get 、 yum 、 dnf 、またはpacman (ディストリビューションに応じて)を使用して、パッケージを見つけてインストールすることを学びます。また、Pythonベースのコマンドラインツールをインストールするpipがあることを確認してください(以下のいくつかは、 pipを介してインストールするのが最も簡単です)。
BASHでは、タブを使用して引数を完了するか、利用可能なすべてのコマンドとCTRL-Rをリストしてコマンド履歴を検索します(押し、入力して検索した後、 CTRL-Rを繰り返し押してより多くの一致をサイクリングするか、 Enterを押して見つかったコマンドを実行するか、右矢印を押して現在のラインに編集を許可します)。
Bashでは、 Ctrl-Wを使用して最後の単語を削除し、 Ctrl-Uは現在のカーソルからラインの開始までコンテンツを削除します。 alt-bとalt-fを使用して単語で移動し、 ctrl-aを使用してカーソルをラインの開始に移動し、 ctrl-eを移動してカーソルを行の端に移動し、 ctrl- kはラインの端まで殺し、画面をクリアします。 Bashのすべてのデフォルトのキーバインディングについては、 man readline参照してください。たくさんあります。たとえば、 alt-。以前の引数を循環し、 alt- *をglobを拡張します。
または、VIスタイルのキービンディングが好きな場合は、 set -o vi (およびset -o emacsを元に戻す)を使用します。
長いコマンドを編集するために、エディターを設定した後( export EDITOR=vim )、 Ctrl-X Ctrl-Eは、マルチライン編集のためにエディターで現在のコマンドを開きます。またはVIスタイルで、 Escape-V 。
最近のコマンドを確認するには、 historyを使用してください。 !n ( nはコマンド番号)に従って、再び実行します。あなたが使用できる多くの略語もあります。おそらく最も便利なのは、最後の引数のために!$です!!最後のコマンドについて(Man Pageの「履歴拡張」を参照)。ただし、これらは多くの場合、 Ctrl-RおよびAlt-に簡単に置き換えられます。 。
cdを使用してホームディレクトリに移動します。 ~ (eg〜 ~/.bashrc )を使用して、ホームディレクトリに関連するファイルにアクセスします。 shスクリプトでは、Home Directoryを$HOMEと呼びます。
以前の作業ディレクトリに戻るには: cd - 。
コマンドの入力の途中であるが考えを変更している場合は、 alt-#を押して最初に#を追加してコメントとして入力します(またはctrl-a 、 # 、 enterを使用してください)。その後、コマンド履歴を介して後で戻ることができます。
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 。
netstat -lntpまたはss -plat (TCP; add -u for UDPの場合)またはlsof -iTCP -sTCP:LISTEN -P -n (MACOSでも動作)を介してリスニングされているプロセスを確認してください。
オープンソケットとファイルについては、 lsofとfuserも参照してください。
システムが実行されている期間を知るには、 uptimeまたはw参照してください。
aliasを使用して、一般的に使用されるコマンドのショートカットを作成します。たとえば、 alias ll='ls -latr'新しいエイリアスllを作成します。
~/.bashrcで一般的に使用するエイリアス、シェル設定、および機能を保存し、ログインシェルを調達するよう手配します。これにより、すべてのシェルセッションでセットアップを利用できるようになります。
環境変数の設定と、 ~/.bash_profileでログインするときに実行する必要があるコマンドを配置します。グラフィカルな環境ログインとcronジョブから起動するシェルには、個別の構成が必要になります。
gitを使用して、さまざまなコンピューターの間で構成ファイル( .bashrcおよび.bash_profileなど)を同期します。
変数とファイル名にホワイトスペースが含まれる場合は、注意が必要であることを理解してください。 "$FOO"などの引用でバッシュ変数を囲みます。 -0または-print0オプションを好み、null文字がファイル名を区切るようにしますlocate -0 pattern | xargs -0 ls -alまたはfind / -print0 -type d | xargs -0 ls -al 。 for loopに空白を含むファイル名を反復するには、ifsのみを使用してIFS=$'n'を使用して新しいラインに設定します。
BASHスクリプトでは、出力をデバッグするために、 set -x (または未履行変数やコメントを含む生の入力を記録するバリアントset -v )を使用します。正当な理由がない限り、厳格なモードを使用します。Set set -eを使用してエラーを中止します(ゼロExitコード以外)。 set -uを使用して、Unsetの可変使用法を検出します。 set -o pipefailも検討して、パイプ内のエラーを中止します(ただし、このトピックは少し微妙なので、もっと読み上げてください)。より複雑なスクリプトについては、ExitまたはERRでtrapも使用します。有用な習慣は、このようなスクリプトを起動することです。これにより、一般的なエラーを検出して中止し、メッセージを印刷することです。
set -euo pipefail
trap " echo 'error: Script failed: see failed command above' " ERR # do something in current dir
(cd /some/other/dir && other-command)
# continue in original dir Bashでは、多くの種類の可変拡張があることに注意してください。変数のチェックが存在します: ${name:?error message} 。たとえば、BASHスクリプトに単一の引数が必要な場合は、 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 prints 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,2,3}(1,2,3}(ブレースの拡張は、他の拡張の前に実行されます。
拡張の順序は次のとおりです。ブレース拡張。チルドの拡張、パラメーターと可変拡張、算術拡張、およびコマンド代替(左から右への方法で行われます)。単語分割;およびファイル名拡張。 (たとえば、 {1..20}のような範囲は、{ seq $a $b {$a..$b}を使用しfor((i=a; i<=b; i++)); do ... ; done変数for seqできません。
コマンドの出力は<(some command) (プロセス代替として知られている)を介してファイルのように扱うことができます。たとえば、ローカル/etc/hostsリモートのホストと比較します。
diff /etc/hosts <( ssh somehost cat /etc/hosts ){
# Your code here
} cat <<EOF
input
on multiple lines
EOF
BASHでは、標準出力と標準誤差の両方を介してリダイレクトします: some-command >logfile 2>&1またはsome-command &>logfile 。多くの場合、コマンドが標準の入力に開いたファイルハンドルを残さないようにするために、それをあなたがいる端末に結び付けないようにするために、 </dev/nullを追加することも良い習慣です。
HEXと10進値を持つ優れたASCIIテーブルには、 man ascii使用します。一般的なエンコーディング情報の場合、 man unicode 、 man utf-8 、およびman latin1が役立ちます。
screenまたはtmuxを使用して画面を多重化します。特にリモートSSHセッションで便利になり、セッションに剥離して再攻撃します。 byobu 、より多くの情報とより簡単な管理を提供することにより、画面またはTMUXを強化できます。セッションの持続性のためのより最小限の代替品のみがdtachです。
SSHでは、リモートサーバーからWebサイトにアクセスするために、 -Lまたは-D (および時々 -R )でトンネルをポートする方法を知ることが便利です。
SSH構成にいくつかの最適化を行うと便利です。たとえば、この~/.ssh/configには、特定のネットワーク環境での接続の削除を避け、圧縮(低帯域幅接続を介したSCPに役立つ)、およびローカルコントロールファイルを使用して同じサーバーにマルチプレックスチャネルを使用しないように設定が含まれています。
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
Compression=yes
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
SSHに関連する他のいくつかのオプションはセキュリティに敏感であり、たとえばサブネットまたはホストまたは信頼できるネットワークで注意して有効にする必要があります: StrictHostKeyChecking=no 、 ForwardAgent=yes
mosh 、UDPを使用するSSHの代替手段と考えてください。接続の削除を避け、道路に利便性を追加します(サーバー側のセットアップが必要です)。
システム構成に役立ちますが、 lsでは利用できず、簡単にぶら下がっている場合は、Octal形式のファイルの権限を取得するには、次のようなものを使用してください
stat -c ' %A %a %n ' /etc/timezone別のコマンドの出力からの値のインタラクティブな選択には、 percolまたはfzf使用します。
別のコマンド( gitなど)の出力に基づいてファイルとの相互作用については、 fpp (Pathpicker)を使用します。
現在のディレクトリ内のすべてのファイルのシンプルなWebサーバー(およびサブディル)の場合、ネットワーク上の誰でも使用できます。Python python -m SimpleHTTPServer 7777 (ポート7777およびPython 2の場合)およびpython -m http.server 7777 (ポート7777およびPython 3の場合)。
別のユーザーとしてコマンドを実行するには、 sudoを使用してください。デフォルトはルートとして実行されます。 -uを使用して別のユーザーを指定します。 -iを使用してそのユーザーとしてログインします(パスワードを求められます)。
シェルを別のユーザーに切り替えるには、 su usernameまたはsu - usernameを使用します。後者は、「 - 」を使用して、別のユーザーがログインしたかのように環境を取得します。ユーザー名のデフォルトをルートに省略します。あなたが切り替えているユーザーのパスワードを求められます。
コマンドラインの128K制限を知っています。ワイルドカードが多数のファイルに一致する場合、この「引数リストが長すぎる」エラーが一般的です。 (これが発生した場合、 findやxargsなどの代替が役立つ場合があります。)
基本的な計算機(そしてもちろんPython全般へのアクセス)については、 pythonインタープリターを使用します。例えば、
>>> 2+3
5
現在のディレクトリに名前でファイルを見つけるには、 find . -iname '*something*' (または類似)。名前でどこにでもファイルを見つけるには、 locate something使用します(ただし、最近作成されupdatedbファイルがインデックス作成されていない可能性があります)。
ソースファイルまたはデータファイルを一般的に検索するには、(古い順序から新しい順序で) ack 、 ag (「The Silver Searcher」)、 rg (Ripgrep)など、 grep -rよりも高度または高速にいくつかのオプションがあります。
HTMLをテキストに変換するには: lynx -dump -stdin
Markdown、HTML、およびあらゆる種類のドキュメント変換については、 pandocお試しください。たとえば、MarkdownドキュメントをWord形式に変換するには: pandoc README.md --from markdown --to docx -o temp.docx
XMLを処理する必要がある場合、 xmlstarlet古いですが良いです。
JSONの場合、 jq使用してください。インタラクティブな使用については、 jidとjiqも参照してください。
Yamlには、 shyamlを使用してください。
ExcelまたはCSVファイルの場合、CSVKITはin2csv 、 csvcut 、 csvjoin 、 csvgrepなどを提供します。
Amazon S3の場合、 s3cmdは便利で、 s4cmdは高速です。 Amazonのawsと改良されたsaws 、他のAWS関連のタスクに不可欠です。
Uniqの-uおよび-dオプションを含むsortとuniqについて知ってください - 以下の1ライナーを参照してください。 commも参照してください。
cut 、 paste 、 joinについて知って、テキストファイルを操作します。多くの人がcutを使用しますが、 joinを忘れてください。
Newlines( -l )、文字( -m )、単語( -w )、バイト( -c )をカウントするwcについて知ってください。
ls -al | tee file.txtのように、stdinからファイルへ、またstdoutにコピーするためのteeについて知ってくださいls -al | tee file.txt 。
グループ化、逆フィールド、統計計算など、より複雑な計算については、 datamashを検討してください。
ロケールは、ソートオーダー(照合)やパフォーマンスなど、微妙な方法で多くのコマンドラインツールに影響を与えることを知ってください。ほとんどのLinuxインストールでは、 LANGまたはその他のロケール変数を英語のようなローカル設定に設定します。ただし、ロケールを変更すると、ソートが変更されることに注意してください。そして、i18nルーチンがソートまたは他のコマンドを何度もゆっくりとすることができることを知っています。状況によっては(以下の設定操作や一意性操作など)、遅いI18Nルーチンを完全に無視し、 export LC_ALL=Cを使用して従来のバイトベースのソート順序を使用できます。
TZ=Pacific/Fiji dateのように、環境変数設定で呼び出しをプレミックスすることにより、特定のコマンドの環境を設定できます。
単純なデータのマンギングについては、基本的なawkとsed知っています。例については、ワンライナーを参照してください。
1つまたは複数のファイルで、所定の場所にある文字列のすべての発生を置き換えるには:
perl -pi.bak -e ' s/old-string/new-string/g ' my-files- * .txtreprenを試してください。 (場合によっては、 renameコマンドも複数の名前を変更しますが、すべてのLinux分布で機能が同じではないため、注意してください。) # 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$// ' * .bakrsync本当に高速で非常に用途の広いファイルコピーツールです。マシン間で同期することで知られていますが、ローカルでも同様に有用です。セキュリティ制限が許可されている場合、 scpの代わりにrsyncを使用すると、ゼロから再起動せずに転送を回復できます。また、多数のファイルを削除する最速の方法の1つです。 mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dirファイルを処理するときに進行状況を監視するには、 pv 、 pycp 、 pmonitor 、 progress 、 rsync --progress 、または、ブロックレベルのコピーの場合、 dd status=progress使用します。
shufを使用して、ファイルからランダムな行をシャッフルまたは選択します。
sortのオプションを知っています。数値の場合、人間の読み取り可能な数値を処理するために-n 、または-hを使用します(例: du -hから)。キーの仕組みを知っています( -tおよび-k )。特に、最初のフィールドのみでソートするには、 -k1,1を書く必要があることに注意してください。 -k1 、行全体に応じてソートを意味します。安定したソート( sort -s )が役立ちます。たとえば、最初にフィールド2で並べ替え、次にフィールド1で次に並べ替えるには、 sort -k1,1 | sort -s -k2,2を使用できます。 sort -k1,1 | sort -s -k2,2 。
Bashのコマンドラインでタブを作成する必要がある場合(たとえば、-t引数がソートするため)、 Ctrl -V [TAB]を押すか、 $'t'を書きます(後者はコピー/貼り付けます)。
ソースコードをパッチするための標準ツールは、 diffとpatchです。 diffstatについては、diffとsdiffの統計統計についても参照してください。メモdiff -rディレクトリ全体で動作します。 diff -r tree1 tree2 | diffstatを使用します変更の概要についてはdiff -r tree1 tree2 | diffstat 。 vimdiffを使用して、ファイルを比較および編集します。
バイナリファイルには、単純なヘックスダンプとBVIにhd 、 hexdumpまたはxxdを使用して、バイナリ編集にはbvi 、 hexedit 、またはbiew使用します。
また、バイナリファイルの場合、 strings (プラスgrepなど)を使用すると、テキストのビットを見つけることができます。
バイナリdiff(デルタ圧縮)の場合、 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などをdateutilsから使用します。
zless 、 zmore 、 zcat 、およびzgrepを使用して、圧縮ファイルを操作します。
ファイル属性はchattrから設定され、ファイルアクセス許可に代わる低レベルの代替品を提供します。たとえば、偶発的なファイルの削除から保護するために、不変のフラグ: sudo chattr +i /critical/directory/or/file
getfaclとsetfaclを使用して、ファイル許可を保存および復元します。例えば:
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txttruncate (スパースファイルを作成)、 fallocate (Ext4、XFS、BTRFS、OCFS2ファイルシステム)、 xfs_mkfile (ほとんどすべてのファイルシステム(XFSPROGSパッケージ)、 mkfile (Solaris、Mac OSのようなUnixリークシステム用)を使用します。 Webデバッグの場合、 curlとcurl -Iは便利な、またはwgetの同等物、またはより近代的なhttpie 。
現在のCPU/ディスクのステータスを知るために、クラシックツールはtop (またはより良いhtop )、 iostat 、およびiotopです。基本的なCPUおよび詳細なパーティションごとのディスク統計とパフォーマンスの洞察には、 iostat -mxz 15使用します。
ネットワーク接続の詳細については、 netstatとss使用します。
システムで何が起こっているのかを簡単に説明するために、 dstat特に便利です。詳細を使用した最も広い概要については、 glancesを使用してください。
メモリステータスを知るには、 freeとvmstatの出力を実行して理解します。特に、「キャッシュされた」値は、Linuxカーネルがファイルキャッシュとして保持するメモリであることに注意してください。したがって、「無料」値に効果的にカウントされます。
Java System Debuggingは異なる魚のやかんですが、Oracleやその他のJVMに関する簡単なトリックは、 kill -3 <pid>を実行できることです。 JDKのjps 、 jstat 、 jstack 、 jmapは便利です。 SJKツールはより高度です。
ネットワークの問題を特定するには、より優れたトレーサーとしてmtrを使用します。
ディスクがいっぱいである理由を見るために、 ncdu du -sh *のような通常のコマンドよりも時間を節約します。
どのソケットまたはプロセスが帯域幅を使用しているかを見つけるには、 iftopまたはnethogs試してください。
abツール(Apacheが付属)は、Webサーバーのパフォーマンスの迅速なチェックに役立ちます。より複雑な負荷テストについては、 siegeを試してみてください。
より深刻なネットワークデバッグ、 wireshark 、 tshark 、またはngrep 。
straceとltraceについて知っています。これらは、プログラムが失敗したり、吊り下げられたり、クラッシュしたりしている場合に役立つ可能性があり、理由がわからない場合、またはパフォーマンスの一般的なアイデアを取得したい場合はわかります。プロファイリングオプション( -c )と、実行プロセス( -p )に接続する機能に注意してください。 Trace Childオプション( -f )を使用して、重要な呼び出しの欠落を避けます。
共有ライブラリなどを確認するためにlddについて知っていますが、信頼されていないファイルで実行しないでください。
gdbを使用して実行プロセスに接続し、スタックトレースを取得する方法を知っています。
使用/proc 。ライブの問題をデバッグするとき、それは時々驚くほど役に立ちます。例: /proc/cpuinfo 、 /proc/meminfo 、 /proc/cmdline 、 /proc/xxx/cwd 、 /proc/xxx/exe 、 /proc/xxx/fd/ 、 /proc/xxx/smaps ( xxxはプロセスIDまたはPID)。
過去に何かがうまくいかなかった理由をデバッグするとき、 sar非常に役立ちます。 CPU、メモリ、ネットワークなどに関する歴史的な統計を示しています。
より深いシステムとパフォーマンス分析については、 stap (SystemTap)、 perf 、およびsysdigをご覧ください。
unameまたはuname -a (General Unix/Kernel Info)またはlsb_release -a (Linuxディストリビューション情報)でどのOSを使用しているかを確認してください。
何かが本当に面白い行動をしているときはいつでもdmesg使用します(ハードウェアやドライバーの問題かもしれません)。
ファイルを削除すると、 duが報告したように予想されるディスクスペースが解放されない場合は、プロセスでファイルが使用されているかどうかを確認してください。LSOF lsof | grep deleted | grep "filename-of-my-big-file"
コマンドをつなぎ合わせるいくつかの例:
sort / uniqを介してテキストファイルの交差点、結合、および違いを設定できることは非常に役立ちます。 aとbすでにユニークされているテキストファイルであると仮定します。これは高速であり、多くのギガバイトまでの任意のサイズのファイルで機能します。 (ソートはメモリに限定されませんが、 /tmp小さなルートパーティションにある場合、 -Tオプションを使用する必要がある場合があります。)上記のLC_ALLについてのメモも参照して、 sortのs -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 diff <(jq --sort-keys . < file1.json) <(jq --sort-keys . < file2.json) | colordiff | less -R
grep . *ディレクトリ内のすべてのファイルの内容をすばやく調べるには、各行はファイル名とペアになります)、またはhead -100 * (各ファイルに見出しがあります)。これは/sys 、 /proc 、 /etcのような構成設定で満たされたディレクトリに役立ちます。
テキストファイルの3番目の列のすべての数値を合計します(これはおそらく、同等のPythonよりも3倍高速で、コードが3倍少ない):
awk ' { x += $3 } END { print x } ' myfilels -lのようなものですが、 ls -lRよりも読みやすいです。 find . -type f -lsacct_idパラメーターなど、いくつかの行に表示される特定の値があるとします。各acct_idのリクエスト数の集計が必要な場合: egrep -o ' acct_id=[0-9]+ ' access.log | cut -d= -f2 | sort | uniq -c | sort -rn変更を継続的に監視するには、 watchを使用して、 watch -d -n 2 'ls -rtlh | tail'またはwatch -d -n 2 ifconfigでWiFi設定のトラブルシューティング中のネットワーク設定。
この関数を実行して、このドキュメントからランダムなヒントを取得します(マークダウンを解析し、アイテムを抽出します):
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
}expr :算術またはブール操作を実行するか、正規表現を評価します
m4 :シンプルなマクロプロセッサ
yes :文字列をたくさん印刷します
cal :素敵なカレンダー
env :コマンドを実行する(スクリプトで役立つ)
printenv :環境変数を印刷します(デバッグとスクリプトに役立ちます)
look :文字列で始まる英語の単語(またはファイル内の行)を見つける
cut 、 paste 、 join :データ操作
fmt :フォーマットテキスト段落
pr :ページ/列にテキストをフォーマットします
fold :テキストのラップラップ
column :テキストフィールドを調整された、固定幅の列または表にフォーマットします
expandとunexpand :タブとスペースの間で変換します
nl :行番号を追加します
seq :印刷番号
bc :電卓
factor :係数係数
gpg :ファイルを暗号化および署名します
toe :Terminfoエントリのテーブル
nc :ネットワークデバッグとデータ転送
socat :ソケットリレーとTCPポートフォワーダー( netcatに似ています)
slurm :ネットワークトラフィックの視覚化
dd :ファイルまたはデバイス間でデータを移動します
file :ファイルのタイプを識別します
tree :巣の木としてディレクトリとサブディレクトリを表示します。 lsのようですが、再帰的です
stat :ファイル情報
time :コマンドを実行して時間を実行します
timeout :指定された時間のコマンドを実行し、指定された時間が完了したらプロセスを停止します。
lockfile : rm -fでのみ削除できるセマフォファイルを作成します
logrotate :ログを回転、圧縮、メールログ。
watch :コマンドを繰り返し実行し、結果を表示したり、変更を強調したりする
when-changed 、ファイルが変更されたときはいつでも指定するコマンドを実行します。 inotifywaitとentrも参照してください。
tac :ファイルを逆に印刷します
comm :並べ替えられたファイルを行ごとに比較します
strings :バイナリファイルからテキストを抽出します
tr :文字翻訳または操作
iconvまたはuconv :テキストエンコーディングの変換
splitとcsplit :ファイルの分割
sponge :それを書く前にすべての入力を読み取ります。その後から同じファイルに書き込むのに役立ちますgrep -v something some-file | sponge some-file
units :ユニットの変換と計算。 2週間あたりのファーロングをまばたきあたりのTwipsに変換します( /usr/share/units/definitions.unitsも参照)
apg :ランダムなパスワードを生成します
xz :高位ファイル圧縮
ldd :ダイナミックライブラリ情報
nm :オブジェクトファイルからのシンボル
abまたはwrk :ベンチマークWebサーバー
strace :システムコールデバッグ
mtr :ネットワークデバッグのためのより良いトレーサー
cssh :視覚的な同時シェル
rsync :SSHまたはローカルファイルシステム上のファイルとフォルダーを同期
wiresharkとtshark :パケットキャプチャとネットワークデバッグ
ngrep :ネットワークレイヤーのグレップ
hostとdig :DNSルックアップ
lsof :プロセスファイル記述子とソケット情報
dstat :有用なシステム統計
glances :高レベル、マルチサブシステムの概要
iostat :ディスク使用統計
mpstat :CPU使用統計
vmstat :メモリ使用統計
htop :TOPの改良バージョン
last :ログイン履歴
w :ログインしている人
id :ユーザー/グループID情報
sar :歴史的なシステムの統計
iftopまたはnethogs :ソケットまたはプロセスによるネットワーク利用
ss :ソケット統計
dmesg :ブートおよびシステムエラーメッセージ
sysctl :実行時にLinuxカーネルパラメーターを表示および構成します
hdparm :SATA/ATAディスク操作/パフォーマンス
lsblk :リストブロックデバイス:ディスクとディスクパーティションのツリービュー
lshw 、 lscpu 、 lspci 、 lsusb 、 dmidecode :CPU、BIOS、RAID、グラフィックス、デバイスなどのハードウェア情報。
lsmodおよびmodinfo :カーネルモジュールの詳細をリストおよび表示します。
fortune 、 ddate 、およびsl :ええと、まあ、それはあなたが蒸気機関車とジッピーの引用を「有用」と考えるかどうかによって異なります
これらは、macosにのみ関連するアイテムです。
brew (HomeBrew)および/またはport (MacPorts)を使用したパッケージ管理。これらを使用して、上記のコマンドの多くをMacOSにインストールすることができます。
任意のコマンドの出力をpbcopyを使用してデスクトップアプリにコピーし、 pbpasteを使用したものから入力を貼り付けます。
MACOS端子のオプションキーをALTキー( ALT -B 、 ALT -Fなどの上記のコマンドで使用するなど)として有効にするには、Open Prefence-> Profiles-> Keyboardを選択し、「メタキキとしてオプションを使用」を選択します。
デスクトップアプリを使用してファイルを開くには、 openまたはopen -a /Applications/Whatever.appを使用します。
スポットライト: mdfindでファイルを検索し、 mdlsを使用したメタデータ(写真exif情報など)をリストします。
MacOSはBSD Unixに基づいていることに注意してください。多くのコマンド( ps 、 ls 、 tail 、 awk 、 sedなど)にはLinuxから多くの微妙なバリエーションがあります。これは、システムVスタイルUNIXおよびGNUツールの影響を主に影響します。多くの場合、Manページに「BSD General Commands Manual」という見出しがあることに注意することで、違いを伝えることができます。場合によっては、GNUバージョンもインストールすることができます(GNU awkおよびSEDのgawkやgsedなど)。クロスプラットフォームBASHスクリプトを作成する場合は、そのようなコマンド(たとえば、Pythonやperlを検討)を避けたり、慎重にテストしたりします。
MacOS情報を取得するには、 sw_versを使用します。
これらのアイテムは、Windowsでのみ関連しています。
Cygwinをインストールして、Microsoft Windowsの下にあるUnixシェルの電力にアクセスします。このドキュメントに記載されているもののほとんどは、箱から出しています。
Windows 10では、Linux(WSL)にWindowsサブシステムを使用できます。これは、UNIXコマンドラインユーティリティを使用しておなじみのBASH環境を提供します。
主にWindowsでGNU開発者ツール(GCCなど)を使用したい場合は、MINGWとそのMSYSパッケージを検討してください。これは、Bash、Gawk、Make、Grepなどのユーティリティを提供します。 MSYSには、Cygwinと比較してすべての機能がありません。 MINGWは、UNIXツールのネイティブWindowsポートを作成するのに特に役立ちます。
Windowsの下でUnixの外観と感触を取得する別のオプションは現金です。この環境では、非常に少数のUNIXコマンドとコマンドラインオプションのみが利用可能であることに注意してください。
wmic学習および使用することにより、コマンドラインからほとんどのWindowsシステム管理タスクを実行およびスクリプト化できます。
Native Command-Line Windowsネットワークツールは、 ping 、 ipconfig 、 tracert 、 netstatなど、便利なものです。
Rundll32コマンドを呼び出すことで、多くの有用なWindowsタスクを実行できます。
Cygwinのパッケージマネージャーに追加のUNIXプログラムをインストールします。
コマンドラインウィンドウとしてminttyを使用します。
/dev/clipboardを介してWindowsクリップボードにアクセスします。
Run cygstart to open an arbitrary file through its registered application.
Access the Windows registry with regtool .
Note that a C: Windows drive path becomes /cygdrive/c under Cygwin, and that Cygwin's / appears under C:cygwin on Windows. Convert between Cygwin and Windows-style file paths with cygpath . This is most useful in scripts that invoke Windows programs.
With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you can do something in Bash doesn't necessarily mean you should! ;)
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.