[Linux][command] ファイル検索_find, locate, updatedb, which, whereis, type

# 一覧
| コマンド    | 検索対象         | 参照先     |
|-------------|----------------|-------------|
| **`find`**  | ファイル                | 指定したディレクトリ     |
| **`locate`** | ファイル                              | 事前に作成されたデータベース（通常 `/var/lib/mlocate/mlocate.db`） |
| **`which`**  | 実行ファイル（コマンド（バイナリ））            | `$PATH` 環境変数内のディレクトリ|
| **`whereis`** | 実行ファイル（コマンド（バイナリ））<br>関連ファイル（マニュアル、ソースコード） | 特定のディレクトリ（`/bin`, `/usr/bin`, `/usr/share/man`, `/usr/src` など） |
| **`type`**   | コマンドの種類（シェル組み込み、関数、エイリアス、外部コマンド） | `$PATH` 環境変数内のディレクトリ|

# findコマンド
~~~terminal:
# find [検索ディレクトリ] [検索式] [アクション]
~~~

| 検索式 | 英語の由来 | 説明 |
|:--|:--|:--|
|  | デフォルト | `find` はカレントディレクトリ以下でファイルを検索           |
| `-name `  | name                 | ファイル名が指定したパターンに一致するファイルを検索           |
| `-atime`         | access time | 最終アクセス時刻でファイルを検索                     |
| `-mtime`         | modification time    | 最終更新時刻で変更されたファイルを検索       |
| `-perm`          | permission  | 指定したパーミッションを持つファイルを検索        |
| `-size`          | size| ファイルサイズを指定して検索（`+` = より大きい, `-` = より小さい） |
| `-type`          | type| ファイルタイプを指定して検索（`f` = 通常ファイル, `d` = ディレクトリ, `l` = シンボリックリンク） |
| `-uid`          | user ID| 所有者の`ユーザID`で検索                     |
| `-user`          | user| 所有者の`ユーザ名`または`ユーザID`で検索                     |
| `-exec`          | execute| 検索したファイルに対して指定したコマンドを実行                |
| `-maxdepth`      | maximum depth| 指定した階層まで検索を制限（例：`-maxdepth 2` で2階層まで検索） |
| `-mindepth`      | minimum depth        | 指定した階層以上の深さから検索（例：`-mindepth 2` で2階層目から検索） |

| アクション | 英語の由来 | 説明 |
|:--|:--|:--|
| `-print`         | print                | 検索結果を改行(¥n, \n)で区切って表示（デフォルトで有効）            |
| `-print0`        | print null-terminated | 検索結果をNULL文字(¥0)で区切って表示（空白や改行を含むファイル名も対応） |
| `-exec コマンド {} \;`        | execute | 検索結果に対して指定したコマンドを実行<br>- `{}`: 検索で見つかった各ファイル名が`{}`に置き換えられる<br>- `;`: コマンドの終了を意味する<br>- `\`: エスケープ |

# locate

# updatedbコマンド

```terminal
$ updatedb [オプション]
```

| オプション                | 英語の由来                | 説明                                   |
| -------------------- | -------------------- | ------------------------------------ |
|     default         | update Datebase                |ファイルデータベース（locateコマンドが使用）を更新<br>- `/etc/updatedb.conf`: updatedbコマンドの設定ファイル       |





# whichコマンド
~~~terminal:
# which コマンド名
~~~

# whereisコマンド
~~~terminal
$ whereis [オプション] コマンド
~~~

| オプション | 英語の由来 | 説明 |
|-----------|----------------------|------------------------------------------------------|
|           | デフォルト | すべてのカテゴリ（バイナリ → ライブラリ → マニュアル → ソースコード）を検索 |
| `-b` | binary | バイナリファイル（実行可能ファイル）のみを検索 |
| `-m` | manual | マニュアルファイル（`man` ページ）のみを検索 |
| `-s` | source | ソースコードファイルのみを検索 |

# typeコマンド
~~~terminal
$ type コマンド
~~~

# 補足
## バイナリファイル、ライブラリディレクトリ、マニュアルファイル、ソースコードファイルの違い
| 種類 | 内容 | 格納場所の例 | コマンド例 |
|------|-----------------|-----------------|----------------|
| バイナリファイル | 実行可能な機械語のプログラム | `/bin`, `/usr/bin`, `/sbin` | `whereis -b ls` |
| ライブラリディレクトリ | プログラムが利用するライブラリやモジュール | `/usr/lib/`, `/lib/`, `/usr/local/lib/` | - |
| マニュアルファイル | `man` で参照できる説明文書 | `/usr/share/man/` | `whereis -m ls` / `man ls` |
| ソースコードファイル | 人間が読めるプログラムコード | `/usr/src/` | `whereis -s ls` |


## whichとwhereisの違い
~~~terminal
# which python
// 出力結果
/usr/bin/python  （実行可能ファイルの場所）

# whereis python
// 出力結果
python: /usr/bin/python /usr/lib/python3.8 /usr/share/man/man1/python.1.gz  （バイナリ + ライブラリ + マニュアル）
~~~



# Ping-t
All
- [37121_find, locate, whereis](https://mondai.ping-t.com/question_subjects/31/question_sessions/30553580/progressing_questions/468115701)
- [3238_which, type](https://mondai.ping-t.com/question_subjects/31/question_sessions/30552498/progressing_questions/468099723)
- [3239_which, whereis](https://mondai.ping-t.com/question_subjects/31/question_sessions/31509922/progressing_questions/482817768)



find
- [3151_find [ディレクトリ] -type -perm ](https://mondai.ping-t.com/question_subjects/31/question_sessions/30553580/progressing_questions/468115709)
- [3152_find [ディレクトリ] -name](https://mondai.ping-t.com/question_subjects/31/question_sessions/32581786/progressing_questions/499228208?result=true)
- [3153_find [ディレクトリ] -atime](https://mondai.ping-t.com/question_subjects/31/question_sessions/30205245/progressing_questions/462752077)
- [3157_find [ディレクトリ] -maxdepth, -mindepth](https://mondai.ping-t.com/question_subjects/31/question_sessions/30870646/progressing_questions/472924564)
- [3302_find [ディレクトリ] -print](https://mondai.ping-t.com/question_subjects/31/question_sessions/32448701/progressing_questions/497231328)
- [3303_find [ディレクトリ] -exec](https://mondai.ping-t.com/question_subjects/31/question_sessions/31511309/progressing_questions/482837158)
- [3328_find [ディレクトリ] -type l](https://mondai.ping-t.com/question_subjects/31/question_sessions/32581786/progressing_questions/499228224?result=true)
- [3335_find [ディレクトリ] -user](https://mondai.ping-t.com/question_subjects/31/question_sessions/32448701/progressing_questions/497231329)
- [34597_find [ディレクトリ] -print0](https://mondai.ping-t.com/question_subjects/31/question_sessions/31602419/progressing_questions/484263616)
- [35566_find [ディレクトリ] -type f -exec wc -w {} \;](https://mondai.ping-t.com/question_subjects/31/question_sessions/31763145/progressing_questions/486763764)
- [29281_find [ディレクトリ] -user, find [ディレクトリ] -uid]()

locate 

updatedb
- [3237_/etc/updatedb.conf](https://mondai.ping-t.com/question_subjects/31/question_sessions/32631050/progressing_questions/499948712)

whereis
- [3240_whereis](https://mondai.ping-t.com/question_subjects/31/question_sessions/30205245/progressing_questions/462752076)

type
- [3241_type](https://mondai.ping-t.com/question_subjects/31/question_sessions/30552498/progressing_questions/468099722)
- [35654_type](https://mondai.ping-t.com/question_subjects/31/question_sessions/31551465/progressing_questions/483453571)