Q&AサイトQuoraのユーザーから、"Linuxユーザーが知っておくべき時間節約のヒントは何ですか?"という質問がありました。 普段からLinuxプラットフォームを扱い、便利なコマンドラインのTipsをかなり蓄積しているJoshua Levy氏が、その中からいくつかを選んで回答しています。これらのTipsは、技術的なユーザーにとってはかなり重要だったり便利だったりするのですが、あまり知られていません。以下の記事は少し長いので、一般的にこれらすべてを知る必要はありませんが、時間節約と利便性のために、Joshua Levy氏は、あなたがLinuxのヘビーユーザーであることを前提に、記載されているすべてが読むに値するものであることを確認するために、わざわざ校正しています。
この記事で紹介されているコマンドの詳細については、"man <コマンド名>"を試してみてください。場合によっては、このコマンドを動作させるために、aptitudeやyumなどのパッケージをインストールする必要があります。
ベーシック
1.Bashの基本を学びましょう。実際、bashのヘルプマニュアルを全部読んでください。他のオプションのシェルの方が見栄えがいいかもしれませんが、bashは強力で常に動作します。
2、vimを学ぶ、Linuxの下でランダムな編集のために、ほとんどすべてのツールは、その権利から外れることはできません。
3、ssh-agent、ssh-addおよび他のコマンドを介して、sshを理解するだけでなく、各ログイン時にパスワードの検証をスキップするための基本的なアプローチ、。
4、&、Ctrl-Z、Ctrl-C、ジョブズ、fg、bg、killなどの作業管理の下でbashに精通しています。
6.基本的なネットワーク管理コマンド:ipまたはifconfig、dig。
7、正規表現を理解し、grep、egrepの異なるコマンドオプション、-0、-A、-Bは知っておく価値があります。
8.apt-getまたはyum(ディストリビューションによる)を使って、必要なパッケージを見つけてインストールする方法を学びます。
デイリーユース
- bashを使用する場合、コマンドの履歴を検索するにはCtrl-Rを使用します。
- bashを使用する場合、Ctrl-Wで最後の単語をクリアし、Ctrl-Uで行全体をクリアします。man readlineでbashのデフォルトのキーバインド設定を確認できます。たくさんのコンテンツがあります。例えばAlt-。コマンドで使用されている引数を反復処理し、Alt-*は引数のマッチングパターンを拡張します。
- 戻る作業ディレクトリ: cd -.
- xargsを使ってください。各行で実行されるアイテムの数や、同時実行数をコントロールできることに注意してください。また、-l{}は便利です。例えば
find . -name \*.py | xargs grep some_function
cat hosts | xargs -l{} ssh root@{} hostname
- pstree -pを使うと、プロセスツリー全体を簡単に表示できます。
- pgrepとpkillを使用して、名前によってプロセスを発見したり、シグナルを送ったりしてください。
- バックグラウンドプロセスを実行し続けたい場合は、 nohup または disown を使用します。
- netstat -lntpでリッスンしているプロセスを検出します。lsof でも同じことができます。
- bashスクリプトでは、set -xでデバッグ出力を行います。エラー時に実行を終了するには、set -eを使用します。エラーを厳密に出力するには、set -o pipefailの使用を検討してください。より複雑なスクリプトでは、trapを使用することもできます。
- サブシェルはbashスクリプトのコマンドを整理する便利な方法です。非常に一般的な例としては、一時的に別の作業ディレクトリに移動する場合などがあります:
1 2 3 | # カレントディレクトリで何かをする # 元のディレクトリでの実行を継続 |
- bashにはさまざまな変数式があることに注意してください。変数が存在するかどうかを調べるには ${name:?エラーメッセージ}。例えば、bashスクリプトが1つの変数を必要とする場合、input_file=${1:?使用法: $0 inpute_file}と書くだけです。数値展開: i=$%5}).シーケンス:{1..10}。文字列の照合順序: ${var%suffix}と${var#prefix}。例
- < を使うと、コマンドの出力をファイルの内容のように扱うことができます。 例えば、ローカルとリモートの /etc/hosts ファイルを比較するには、 diff /etc/hosts < を使用します。
- 例えば、cat <<EOF ....
- bash では、標準エラーだけでなく標準出力も他のディレクティブ > ログファイル 2>&1 によってリダイレクトされます。また、ディレクティブが標準入力用のオープンファイルディスクリプターを現在使っているターミナルに残さないようにするために、"</dev/null" を追加するのも良い習慣です。
- man asciiを使えば、16進数と10進数に対応する完全なASCII表を得ることができます。
- ssh 経由でリモート端末に接続する場合は、screen または dtach を使用してセッションを維持し、中断を防ぎます。ssh では、リモートサーバからウェブページにアクセスする場合などに、 -L オプションや -D オプションの使い方を知っておくと便利です。
- SSH オプションを最適化することも有効です。例えば、以下の .ssh/config の内容は、ネットワーク環境によっては接続の切断を防ぎ、 新しいホストに接続するときに再確認を必要とせず、認証にジャンプし、 圧縮も使用します。
TCPKeepAlive=yes
ServerAliveInterval=15
ServerAliveCountMax=6
StrictHostKeyChecking=no
Compression=yes
ForwardAgent=yes
データ処理
- HTMLをテキストに変換: lynx -dump 標準入力
- XML処理にはxmlstarletが最適です。
- Amazon S3では、s3cmdが便利です。
- Amazon S3については、s3cmdが便利です。
- sortとuniqについて学びましょう。
- Sort/uniqは、ファイル間のセットを加算、減算、差分したい場合に非常に便利です。a,bが重複排除された2つのテキストファイルの場合、操作は高速で、最大ギガバイトまでのあらゆるサイズのファイル間で実行することができます。
cat a b | sort | uniq > c # c is a union b
cat a b | sort | uniq -d > c # c is a intersect b
cat a b b | sort | uniq -u > c # c is set difference a - b
- ローカライゼーションを理解することは、ソート順やパフォーマンスなど、多くのコマンドライン作業に影響します。ほとんどのlinuxインストーラは、LANGやその他の地域化変数をUS英語に似たローカル設定にします。このため、ソートや他のコマンドの実行が非常に遅くなります。国際化によって日々の作業が遅くなるのを避けるには、export LC_ALL=C を使って、伝統的なバイトベースのソート順にしてください。
- 簡単なデータ操作を行うための基本的な AWK と sed コマンドを理解してください。例えば、テキストファイルの3列目の数値を合計するには、 awk '{x += $3} END {print x}' とします。 これは同等の python コードよりもおよそ 3 倍速く、3 倍短いです。
- すべてのファイル内の文字列を置換します。
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
- ファイルの行をランダムにスクランブルしたり、ランダムな行を選択するには shuf を使用します。
- ソートの様々なオプションを理解します。キーと値がどのように作用するかを知ってください。特に、-k1 を使いたいときには注意しましょう。 1 は最初のフィールドのみをソートし、-k1 は行全体をソートすることを意味します。
- 安定したソートは便利です。例えば、まず2番目のフィールドでソートし、次に1番目のフィールドでソートするには、 sort -k1,1 | sort -s -k2,2 を使います。
- bashでコマンドラインにタブキーリテラルを書く必要がある場合は、Ctrl+V、<tab>、または$' \t' です。
- バイナリファイルの場合、16進表現への単純なエクスポートにはhdを、バイナリ編集にはbviを使用します。
- バイナリファイルの場合、stringsを使えばファイルのバイトビットを知ることができます。ファイルをエンコードするにはiconvを、より高度な使い方をするには、高度なUnicodeをサポートするuconvを試してください。例えば、このコマンドはすべてのアクセント記号を小文字にし、:を削除します。
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
- ファイルをスライスするには、splitまたはcsplitを試してください。
システムデバッグ
- ウェブのデバッグには、wgetと同じ機能を持つcurlとcurl -lが便利です。
- ディスク/CPU/ネットワークの状態を知りたければ、iostat、netstat、top(もっといいのはhtop)、dstatが使えます。現在のメモリの状態を知りたい場合は、vmstatと同様にfreeを使うことができます。特に、"cached "の値はLinuxカーネルがファイルキャッシュのために確保している容量であり、実際に利用可能な有効メモリは "free "の値であることを知っておく必要があります。
- Javaでのシステム・デバッグは全く別の問題ですが、Sunや他のJVMでの簡単なトリックは、kill -3 <pid>を実行することで、スタック・コールやヒープ使用全般の完全なトレースを得ることができ、標準エラーやログに送られます。
- ネットワークの問題を特定するために、より良いネットワークトレースとしてmtrを使用してください。
- ディスクがいっぱいかどうかを確認するには、通常の "du -sk *" よりも ncdu の方が速いです。
- 帯域幅を圧迫しているソケットやプロセスを確認するには、iftopやnetlogsを試してください。
- abツールはウェブサーバーのパフォーマンスをテストするのに便利です。もっと複雑なストレステストには、siegeを試してみてください。もっと深刻なネットワークの問題をデバッグするには、wiresharkやtsharkを試してみてください。プログラムの全体的なパフォーマンスを知ることができます。cオプションと-pオプションに注意してください。
- 共有ライブラリ関数をチェックするために ldd を使用する際の問題点などを理解してください。
- gdbを使って実行中のプログラムに接続し、そのコールスタックを取得する方法を学びます。
- proc.の使用は、現場での問題のデバッグに非常に役立ちます。例:/proc/cpuinfo、/proc/xxx/cwd、/proc/xxx/exe、/proc/xxx/fd/、/proc/xxx/smaps。
- 過去に発生した問題をデバッグする場合、過去一定期間のCPU、メモリ、ネットワークの統計情報を表示するsarが便利です。
- より深いシステム性能の最適化については、STAPまたはPERFに注目してください。
- 何か本当に変なことが起きたら、dmesgを試してみてください。





