【Linux】便利だけど意外と知らないコマンド独自セレクション一覧

# はじめに
Linuxコマンドを使う機会が増えてきましたが、知らないコマンドの中に便利そうなコマンドがありそうだったので調べて記事にしました。
たまに使うけど、ちゃんと覚えていないコマンドも紹介しています。備忘録的サムシングです。

頻繁に使うコマンド（cd,mkdir,cpなど）は独断と偏見で紹介しておりません。
一部よく使いそうなコマンドも入っているかもしれませんが、ご了承ください。
個人的にあまり使ってなかったけど使っていきたいなあと思っているコマンドリストです。

# コマンド一覧  
## clear
ターミナル内でそれまで書いていた内容を上に上げて、綺麗にしてくれます。
削除はされないので過去の内容はスクロールすれば見れます。

```
$ clear
```

※追記
ctrl+lとすると、clearと同じ動きをしてくれます。


## find
ファイルやディレクトリを検索するコマンドです。

~/html/以下のどこかにindex.htmlがあるかどうかを探す場合は以下になります。

```
$ find ~/html -name index.html
/home/myuser/html/section2/index.html
/home/myuser/html/section1/index.html
/home/myuser/html/index.html
```

10分以内にデスクトップより下のどこかの階層で作業していたファイル名を調べたいときは
以下のコマンドで調べられます。

```
$ find ~/MyDesktop/ -amin -10
```

## ln
ファイルのリンクを作成するためのコマンドです。

```
ln -s ファイル名 リンク名
```

-sオプションはハードリンクの代わりにシンボリックリンクを作成します。
特に指定がないとハードリンクを作成します。
※ハードリンクは元ファイルを消去してもアクセスできます。

実用例

```
$ ln -s available/ファイル名　enable/リンク名
=> enable/リンク名のシンボリックリンクを作成
```
こうすることで有効化したenableフォルダ内のシンボリックリンクだけ使い、使わなくなったら消したりします。

## id
登録ユーザーの情報を表示するコマンドです。ユーザー番号（UID）、主登録グループ名とその番号（GID）、副登録グループ名とその番号（GID）を確認できます。
ユーザー名無しだと現在の実行ユーザーの情報が返ってきます。

```
$ id ユーザー名
```
自分ってだれだっけ？という哲学チックな疑問にもサラッと答えてくれます。

## whoami
現在の登録ユーザーの名前を返してくれます。idと違って名前だけです。

```
$ whoami
```

自分の名前すらも忘れてしまったときに使ってください。

## top
現在実行中のプロセスをCPU利用率や指定した項目でがソート表示ができます。

```
$ top
```

重い処理動いているかもしれないけど、アクティブモニタをみるのは面倒なときには便利かもしれません。
以下topコマンドの記事になります。参考となるかと思いますので、記載させtいただきました。
https://qiita.com/Kernel_OGSun/items/55afb7e93b445f1be019

※追記(20201011)
topよりも詳細な情報を確認できる`htop`というコマンドもあります。


## du
ディスクの使用量をディレクトリごとに集計して表示するコマンドです。ファイルを指定した場合は指定したファイルのサイズのみ、ディレクトリを指定した場合はそのディレクトリおよび全てのサブディレクトリの使用量を集計します。対象を指定しなかった場合は、カレントディレクトリの使用量が表示されます。

```
$ du ファイル名orディレクトリ名
```

※追記(20201011)
duの弱点を補いインタラクティブなディスク使用量調査ができる`ncdu`というコマンドもあります。
https://www.softantenna.com/wp/review/ncdu/

## which
指定されたコマンドを、環境変数PATHに設定されているディレクトリを順番に調べて、最初に見つかった実行ファイルを表示するコマンドです。

```
$ which ssh
/usr/bin/ssh
```

## ping
pingコマンドは指定したホストとの間でネットワークが疎通しているかどうかを調べるコマンドです。

```
$ ping www.google.co.jp
PING www.google.co.jp (172.217.31.163): 56 data bytes
64 bytes from 172.217.31.163: icmp_seq=0 ttl=115 time=2.523 ms
64 bytes from 172.217.31.163: icmp_seq=1 ttl=115 time=3.583 ms
64 bytes from 172.217.31.163: icmp_seq=2 ttl=115 time=3.560 ms
64 bytes from 172.217.31.163: icmp_seq=3 ttl=115 time=5.939 ms
...
```

デフォルトでは1秒間隔で相手にパケットを送り、応答を表示します。


## nslookup
nslookupの後ろにドメイン名を書くと対応するIPアドレスなどの情報がかえってきます。
nslookupの後ろにIPアドレスを書いた場合はサーバの設定によりますが、ドメイン名がかえってきます。

```
$ nslookup www.google.co.jp
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
Name:	www.google.co.jp
Address: 216.58.197.195
```

## tail -f
ファイル末尾だけを表示してくれます。
ログ表示によく使われます。
-fオプションをつけることが一般的で、逐次表示ができます。

```
$ tail -f access.log
```

## less
ファイルの中身を閲覧できます。
スクリプトや設定ファイルなどを閲覧のみしたい場合に誤って上書きするリスクがないlessコマンドが便利です。

```
$ less ファイル名
```


## ls -lt
「-t」オプションをつけることによって、ファイルの更新時間順に表示することができます。

```
$ ls -lt
```

何か問題が起きた時に原因調査するために更新順にさかのぼっていきたい時などに役に立ちます。


## ls -1
lsの後ろに-1をつけることで結果を縦に表示してくれて見やすいです。

```
$ ls -1
```

# パイプ " | " を使った便利コマンド
パイプと呼ばれる" | "を使うことでコマンドを組み合わせて使うことができます。１行でスマートにコマンドを打てます。
`$ コマンドA | コマンドB`を実行すると、２つのコマンドA,Bが同時に実行されます。
別々に実行されるのではなく、コマンドAの標準出力をさらにコマンドBが処理して1つの標準出力として結果が返ってきます。

パイプの概念に関して以下参考にさせていただきました。
https://qiita.com/angel_p_57/items/03582181e9f7a69f8168#%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%E3%82%AF%E3%83%88%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3


## ls | grep
lsとgrepを組み合わせて、lsで表示できるものの中からgrepで絞り込んだファイルのみを１行ずつ表示してくれます。
`ls -1`と書かなくてもgrepにより1行ずつ表示してくれます。

```
$ ls | grep apple
apple.txt
```

appleという名前が入ったファイルのみを１行ずつ表示してくれます。

## ls | grep -e
-eオプションで複数のキーワードで絞り込みができます。



```
$ ls | grep -e apple -e orange
apple.txt
orange.txt
```

## ls | grep -v
-vオプションで指定した文字列に一致しない結果を表示してくれます。

```
$ ls | grep -v apple
banana.txt
lemon.txt
melon.txt
orange.txt
```

## cat | grep
文字列を検索・ファイルを表示する場合はcatを使います。lessと似てますが、catはターミナルにファイルの中身をそのまま出して埋め尽くすので長いファイルだと作業しづらくなります。
そのため、catはよくgrepと一緒に使います。



```
$ cat ファイル名 | grep キーワード
```
ファイル内のキーワードと一致する行のみを表示してくれます。

# パイプの連続使用
パイプは連結して3つ以上のコマンドでも実行が可能です。
`コマンドA | コマンドB | コマンドC`といった書き方をします。
コマンドA→コマンドB→コマンドCの処理順で処理した結果が標準出力として返ってきます。

## cat | grep | less
`cat | grep`で絞り込んで表示はしていますがターミナル内に表示するため、やや見づらいです。
そこでlessコマンドをパイプでつなげると、絞り込んだ内容だけをみることができてとても見やすいです。


```
$ cat ファイル名 | grep キーワード | less
```

# 追記(20201011)
## find ./ -name | xargs du -hc


```
$ find ./ -name '*.png' | xargs du -hc
```

カレントディレクトリ以下でpng拡張子を持ったファイルのみのディスク使用量を表示します。
`du`の`h`オプションによってサイズに応じて読みやすい単位で表示し、`c`オプションによって全体の合計も表示します。

## grep -rl
ディレクトリの内部も全部検索して、ファイルのみを表示してくれます。
見つけたいファイルがどこかにあるはずだけど、断片の名前しかわからずどこのフォルダの中にもあるのかわからない時に役立ちます。
コメントでいただいたコマンドですが、かなり実用的かと感じています。

```
$ grep hoge -rl ./*

=>現在のディクレトリ以下でhogeとついたファイルのみ表示します。
```

`r`オプションによってディレクトリ内も検索対象とし、`l`オプションによってファイルのみを表示してくれます。
見つけた後に`vi`などを使ってファイルを処理するといった流れになるかと思います。


# おわりに
エンジニアとして働き始めて2ヶ月ほど経ちましたが、よりLinuxコマンドやベーシックなことに慣れていきたいと思いまして、この記事を書きました。

あまりによく使うコマンドはここに記載してはおりませんが、もしこんなのもあるよと便利なコマンドをご存知でしたらぜひコメントで教えていただけますと幸いです。
自分の独断で書いておりますので、その意図を察するのは無理があると思いますがどんなコマンドでも構いません。

また、おかしな説明等があった際に教えていただけますと幸いです。