2025/1/22 学習記録

## 現状：
エンジニアへの未経験転職。
就職先も決まり、2月からひよこエンジニアに。

2025年は頑張ろうということで、2025年学習記録16日目。

内容は常に書き散らしのメモです、あしからず。

当面の目標：LPIC101,102合格


# Linux

## `~/.bash_history`

bashシェルで実行されたコマンドの履歴を保存するファイル。

### 特徴

1. 場所: ユーザーのホームディレクトリ（~/.bash_history）に保存されます。
2. 内容: bashセッション中に実行されたコマンドの履歴が記録されます。
3. 更新タイミング:
    - bashセッションを終了したとき
    - 'history -a'コマンドを実行したとき[1]
4. 隠しファイル: ドット（.）で始まるため、通常のlsコマンドでは表示されません。'ls -a'で確認できます[1]。
5. 利用方法: 'history'コマンドを使用して、保存された履歴を表示できます[3]。
6. セキュリティ: センシティブな情報（パスワードなど）も記録されるため、適切な管理が必要です。
7. カスタマイズ: HISTSIZE環境変数で保存するコマンド数を制限できます。

### Citations:

[1] https://wa3.i-3-i.info/word13656.html
[2] https://www.beex-inc.com/blog/linuxbashhistory
[3] https://raspi.taneyats.com/entry/command-history
[4] https://news.mynavi.jp/techplus/article/techp5472/
[5] https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/532chnhistfile.html
[6] https://blog.k-bushi.com/post/tech/tips/do-not-leave-history-in-bash/
[7] https://envader.plus/course/11/scenario/1112
[8] https://qiita.com/misohagi/items/3ab0abc3bce2c11719c8


## `history` コマンド

bashシェルで実行されたコマンドの履歴を表示および管理するためのツール。

### 主な特徴と機能

1. コマンド履歴の表示: オプションなしで実行すると、過去に実行したコマンドの一覧を表示します[1][5]。
2. 履歴の保存場所: 通常、コマンド履歴は `~/.bash_history` ファイルに保存されます[1]。
3. 履歴の検索: `history | grep <キーワード>` のように使用することで、特定のコマンドを履歴から検索できます[1]。
4. 履歴の表示カスタマイズ: `HISTTIMEFORMAT` 環境変数を設定することで、コマンドの実行日時も表示できます[1]。
5. 履歴の再利用: `!<番号>` を使用して、履歴にある特定のコマンドを再実行できます[3]。

### オプション

オプション一覧

| オプション | 説明 |
| --- | --- |
| -c | 現在のセッションの履歴をすべて削除します。 |
| -d <番号> | 指定した番号の履歴項目を削除します。 |
| -a | 現在のセッションの履歴を履歴ファイルに追加します。 |
| -n | 履歴ファイルからまだ読み込まれていない行をすべて読み込みます。 |
| -r [ファイル] | 指定した履歴ファイルを読み込み、内容を履歴一覧に追加します。 |
| -w [ファイル] | 現在の履歴を指定した履歴ファイルに上書きします。 |
| <整数値> | 履歴の末尾から指定した行数分を表示します。 |

### Citations:

[1] https://qiita.com/Tri_Engi/items/1437f18a7776f0955d89
[2] https://qiita.com/quwa/items/3a23c9dbe510e3e0f58e
[3] https://atmarkit.itmedia.co.jp/ait/articles/1710/20/news015.html
[4] https://linuc.org/study/samples/323/
[5] https://eng-entrance.com/linux-command-history
[6] https://wa3.i-3-i.info/word13656.html
[7] https://atmarkit.itmedia.co.jp/flinux/rensai/linuxtips/011bashbistory.html
[8] https://news.mynavi.jp/techplus/article/techp5472/


## `!` コマンド

Bashシェルの履歴展開機能の一部で、過去に実行したコマンドを再利用するためのツール。

### 主な特徴と使用方法

1. 基本的な使い方: !の後に文字列や数字を付けて使用します。
2. 直前のコマンド実行: !!を使用すると、直前に実行したコマンドを再実行できます。
3. 特定の履歴番号のコマンド実行: !nとすると、履歴のn番目のコマンドを実行します。
4. 文字列で始まるコマンド実行: !stringとすると、"string"で始まる最後に実行したコマンドを再実行します。
5. 最後に実行した特定のコマンド: !commandとすると、"command"という名前の最後に実行したコマンドを再実行します。
6. 引数の再利用: !$は直前のコマンドの最後の引数を、!*は直前のコマンドの全ての引数を表します。
7. コマンド置換: ^old^newとすると、直前のコマンドの"old"を"new"に置換して実行します。

## `!!` コマンド

 Bashシェルにおいて直前に実行したコマンドを再度実行するためのコマンド。
「バン・バン」（bang bang）と呼ばれることもある。

### 特徴

1. 簡便性: キーボードで2回「!」を入力するだけで、直前のコマンドを再実行できます。
2. 時間節約: 長いコマンドや複雑なコマンドを再入力する手間を省けます。
3. エラー修正: 直前のコマンドでエラーが発生した場合、修正して再実行する際に便利です。
4. 履歴展開: これは履歴展開機能の一部で、Bashの履歴機能を活用しています。
5. スーパーユーザー権限: 直前のコマンドをsudoで実行し直したい場合に特に有用です。例：
    
    ```bash
    $ some_command
    Permission denied
    $ sudo !!
    ```
    

### ## `!` と `!!` の違い（比較）

1. ! (単一の感嘆符):
    - 特定の履歴コマンドを呼び出すために使用されます。
    - 例: !10 は履歴の10番目のコマンドを実行します。
    - !string は "string" で始まる最後のコマンドを実行します。
2. !! (二重の感嘆符):
    - 直前に実行したコマンドを再実行します。
    - これは "バン・バン" (bang bang) とも呼ばれます。
    - 例: sudo !! は直前のコマンドをsudo権限で再実行します。

主な違い:

- !は特定の履歴コマンドや文字列で始まるコマンドを呼び出せますが、!!は常に直前のコマンドのみを再実行します。
- !はより柔軟な履歴の利用が可能ですが、!!はシンプルで素早い再実行に適しています。

これらのコマンドは、コマンドラインでの作業効率を向上させる強力なツールです[1][5]。

### Citations:

[1] https://qiita.com/takech111/items/19ca012d8d09216e7d56
[2] https://qiita.com/arene-calix/items/41d8d4ba572f1d652727
[3] https://wa3.i-3-i.info/word11158.html
[4] https://proengineer.internous.co.jp/content/columnfeature/5007
[5] https://qiita.com/ko1nksm/items/d67b0f8978557294c4ec
[6] https://www.sejuku.net/blog/124527
[7] https://www.anken-navi.jp/news/work-freelance/powershell-cmd/
[8] https://www.akkodis.co.jp/careers/media/skillup001


## `!?` コマンド

Bashシェルの履歴展開機能の一つ。

`!?`の後に続く文字列を含む最後に実行されたコマンドを検索し、再実行する。

### 特徴

1. `!?`コマンドにおける`?`は、履歴内のコマンドを検索する際のワイルドカードとして機能します。具体的には以下の役割があります：
    1. 部分一致検索: `?`は任意の1文字にマッチします。
    2. 柔軟な検索: コマンドの一部しか覚えていない場合に便利です。
    3. 最新の一致: `?`を含む最後に実行されたコマンドを見つけます。
2. 使用方法: `!?str`の形式で使用します。（`str`は検索したい文字列）
3. 機能: 履歴内で`str`を含む最後に実行されたコマンドを検索し、再実行します。
4. 検索範囲: コマンド全体ではなく、一部に指定した文字列が含まれていれば一致します。
5. 最新の一致: 複数のコマンドが条件に合致する場合、最後に実行されたものが選択されます。
6. 柔軟性: コマンドの一部しか覚えていない場合に便利です。

例えば、`!?art`とすると、"`art`"という文字列を含む最後に実行されたコマンド（例：php artisan migrate）が再実行されます[5]。

注意点として、意図しないコマンドが実行される可能性があるため、使用前に展開されるコマンドを確認することが重要です。

### Citations:

[1] https://qiita.com/arene-calix/items/41d8d4ba572f1d652727
[2] https://proengineer.internous.co.jp/content/columnfeature/5007
[3] https://www.sejuku.net/blog/54333
[4] https://rat.cis.k.hosei.ac.jp/article/linux/command.html
[5] https://mseeeen.msen.jp/bash-history-expansion/
[6] https://techmania.jp/blog/cmd0002/
[7] https://manpages.ubuntu.com/manpages/focal/ja/man1/bash.1.html
[8] https://www.sejuku.net/blog/5465
[9] https://qiita.com/tanimoto-hikari/items/e505b24c5d074b97c3c7

## `uname`コマンド

現在のシステムに関する情報を表示するためのLinuxおよびUNIX系オペレーティングシステムのコマンドラインユーティリティ。

### 特徴

1. 基本機能: オプションなしで実行すると、システム名（通常は"Linux"）を表示します[1][3]。
2. 詳細情報: さまざまなオプションを使用することで、以下のような詳細情報を取得できます[1][3]:
    - カーネルのバージョンとリリース情報
    - ハードウェアのアーキテクチャ
    - ホスト名
    - プロセッサの種類
    - オペレーティングシステムの詳細
3. システム管理: 管理者がハードウェアやOSの要件を確認する際に役立ちます[3]。
4. 互換性確認: ソフトウェアやコンパイラの動作要件を満たしているか確認する際に使用されます[3]。

### オプション一覧

| オプション | 説明 |
| --- | --- |
| -a, --all | すべてのシステム情報を表示する |
| -s, --kernel-name | カーネル名を表示する |
| -n, --nodename | ネットワークノードのホスト名を表示する |
| -r, --kernel-release | カーネルのリリース情報を表示する |
| -v, --kernel-version | カーネルのバージョンを表示する |
| -m, --machine | マシン（ハードウェア）のタイプを表示する |
| -p, --processor | プロセッサのタイプを表示する |
| -i, --hardware-platform | ハードウェアプラットフォームを表示する |
| -o, --operating-system | オペレーティングシステム名を表示する |
| --help | 使用方法のメッセージを表示して終了する |
| --version | バージョン情報を表示して終了する |
- aオプションを使用すると、利用可能なすべての情報を一度に表示できます。これは特に、システム管理者やトラブルシューティングを行う際に有用です。

各オプションは特定の情報を表示するために使用され、必要に応じて組み合わせることができます。例えば、-rと-mを組み合わせると、カーネルのリリース情報とマシンのハードウェアタイプの両方を表示できます。

### Citations:

[1] https://www.ibm.com/docs/ja/aix/7.1?topic=u-uname-command
[2] https://linuc.org/study/knowledge/554/
[3] https://eng-entrance.com/linux-command-uname
[4] https://docs.oracle.com/cd/E56342_01/html/E54074/uname-1.html
[5] https://itpfdoc.hitachi.co.jp/manuals/3020/30203s3530/JPAS0263.HTM
[6] https://atmarkit.itmedia.co.jp/ait/articles/1901/24/news026.html
[7] https://blog.future.ad.jp/cmd_uname
[8] https://wa3.i-3-i.info/word12540.html

















### 今日はここまで！