[Linux]Linuxをなんとなく使っている人が捗るコマンド集(超基礎編)

はじめに

Linuxで仕事が捗る便利なコマンドを紹介します。

あらかじめ言っておきますが、あまりにも基礎的すぎて、ちゃんと勉強した人にとっては「当たり前やろ…」という内容です。

ただ、業務で必要な部分だけつまみ食いしてきたような人(私です)にとっては、
目からウロコ、知ることにより仕事が倍に捗ったコマンドばかりです。
Linuxを触り始めたばかりのときに知りたかったものたちです。

同じような人の役に立つことがあれば幸いです。

※「何ができるか?」を簡易に説明しているので厳密な説明や定義は割愛しています。

本記事の主な対象者

  • 「Linuxはなんとなく使える人」
    • ls, mv, cp, scp, sshあたりまではなんとか使える。
    • やりたいことはググって解決してきたが、コマンドやオプションの意味を実はよくわかっていない。
  • 「なんとなく使える人」と一緒に仕事をしている「ちゃんと使える」人
    • 「なんとなく使える人」、仕事が遅い気がするけど何が遅いのか良くわからない。
    • あなたの同僚は、あなたにとっては知ってて当たり前なことを知らない可能性があります。記事を共有してあげてください。

TL;DR

  • 「>」(リダイレクト)と「|」(パイプ)を組み合わせると色々できます。
  • 「;」「&&」「\」を使って時間のかかるコマンドを効率よく実行できます。

リダイレクトとパイプ

この2つの存在を知るだけでも、知らなかった人にとっては価値があると思います。

> : リダイレクト

標準出力(コマンドを打ったあとにコンソールに表示される内容)を、ファイルに書き込むことができます。

| : パイプ

コマンドの出力結果を、次のコマンドに渡すことができます。

使えるコマンド集

標準出力の内容をファイルに書き込む

$ some_cmd > file1.txt

some_cmdした結果をfile1.txtに書き込みます。(some_cmdは適当なコマンド)

具体的例は以降で紹介します。
ド基礎ですが、知らないことによる弊害がすごいです。
知らないと、コンソール画面をコピーしてviしてペースト、、、なんてことをしだします。

ファイルの内容を表示する

$ cat file1.txt

ファイルの中身をすべて出力します。
行数少なめのファイルをさくっと確認したいとき、ファイルの中身を見て何かしら処理したいときなどに使います。

※行数が多いと、表示に時間がかかり時間の無駄になりうるので、後出のheadやtailを使う方が良いと思います。

複数のファイルの中身を結合して新しいファイルに書き込む

$ cat file1.txt file2.txt > new_file.txt

catは複数指定できます。
その結果を「>」でファイルに書き込むことで、複数ファイルの中身を表示→ファイルに書き込みという処理をします。

先頭/末尾の数行のみ表示する

ログファイルや大量のテキストデータなど、エディタで開くと時間が掛かってしまうものの中身を少しだけ確認したい、といったときに重宝する2つのコマンドです。

$ head file1

file1の冒頭10行を表示します。末尾10行は、

$ tail file1

で表示できます。

どちらも-n [数字]オプションを入れることで、10行ではなく指定した行数表示することができます。

ファイルの特定の文字列を含む行を表示する

$ cat file1.txt | grep hogehoge

grepで文字列を検索できることはなんとなく知っている方多いかもしれません。
「|」で渡された内容に対してもgrepできます。

行数を数える

$ wc -l file.txt

ファイルの行数を数えます。

特定の文字列を含む行数を数える

$ cat file1.txt | grep hogehoge | wc -l

catでfile1の中身を表示。
grepでその中でhogehogeを含む文字列を抽出
その行数をwc -lで数える。
という順番です。

「;」「&&」「\」でまとめて実行

「;」でコマンドの結果に関わらず次のコマンドを実行する

完了に時間がかかるとあるコマンドを実行し、次に別のコマンドを実行したいとき。
1つ目のコマンドが終わるのを待っていられないときに使います。

# 例
$ touch file1; touch file2 

file1というファイルを作成し、(コマンドの結果に関わらず)file2というファイルを作成します。

「&&」でコマンドが正常終了したら次のコマンドを実行する

単純に連続実行したい場合は「;」でつなげれば良いですが、1つ目のコマンドがうまくいったらはじめて2つ目のコマンドを実行したい、というときもあります。
そんなときは「&&」を使います。

# 例
$ cd dir1 && mkdir dir2

dir1に移動し、dir2というディレクトリを作成します。

カレントディレクトリにdir1というディレクトリが存在しない場合、cdはエラーになります。
エラーになるとその次のmkdir dir2は実行されません。

便利ですね。

「\」でコマンドを改行する

「;」や「&&」でつなぎまくると、コマンドの見通しが悪くなってしまいます。
そんなときは、「\」を入力することで、コマンドを実行せずに改行できます。

$ touch file1;\
> touch file2

2行目のEnterを押して初めてコマンドの実行が開始されます。

まとめ

業務でなんとなく使っている人も、一度体系的に学ぶことで得るものは大きいと思います。
勉強しましょう。

参考