2025/1/5　学習記録

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

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

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

当面の目標：LPIC101,102合格


## Shell Script

### `select`文
- 指定した複数の文字列の中からどれを選ぶのかを数値で選択することができる。
- `break` が無い限りループを繰り返す。
例
```
#!/bin/bash

select var in apple banana lemon exit
do
  if [ -z $var ];
  then
    continue
  fi
  echo $var 
  if [ $var = 'exit' ];
  then
    break
  fi
done
echo 'select end'

```

### 関数　" `function 関数名()` "
- 変数宣言の前に `local` をつけると変数を関数の中だけで使える。
例
```
#!/bin/bash

function print_hello()  {
  echo 'Hello World'
  echo $1
}

function set_name() {
  local name=$1
  echo function: $name
}

print_hello 'I am Taro'
name='Taro'
echo before: $name
set_name 'Hanako'
echo after: $name

```

### `readonly`
- 値を変更しないように（固定）する
- 変数や関数に対して設定できる。
例
```
#!/bin/bash

VAR=12
echo $VAR
readonly VAR
VAR=20
echo $VAR

function print_hello() {
  echo 'A Hello'
}
print_hello

readonly -f print_hello

function print_hello() {
  echo 'B hello'
}
print_hello


```

### `trap`
- `trap` コマンドでプログラム終了時の挙動を設定できる。
- プロセスID
- `pid is $$ #自分のプロセスID`
trapコマンド プログラム終了時の挙動を設定
例
```
#!/bin/bash

# echo PID is $$
# sleep 100

function cleanup() {
  echo '割り込みコマンドが発生しました'
  rm ./tmp_*.txt
  exit 1
}

function stop_15() {
  echo 'kill 15 でストップ'
  exit 1
}

echo $$ > tmp_$$.txt

trap "cleanup" 2
trap "stop_15" 15

for i in `seq 1 100`;
do
  echo $i
  sleep 1
done


```



## `less`コマンド

Linuxシステムで使用されるテキストファイル閲覧ツール。
`less`は`cat`と比較して、柔軟で効率的なファイル閲覧が可能であり、特に大きなファイルを扱う際に適している。

### 特徴

1. ファイル内容の表示: 指定したテキストファイルを1画面ずつ表示します[1][4]。
2. スクロール機能: ファイル内を上下にスクロールできます。「j」キーで下に、「k」キーで上に移動します[1][4]。
3. 検索機能: 「/」キーを使ってファイル内の単語を検索できます[1][4]。
4. ジャンプ機能: 「g」キーでファイルの先頭に、「G」キーで末尾にジャンプできます[1][4]。
5. 終了方法: 「q」キーを押すとlessコマンドを終了し、元のコマンドラインに戻ります[1][2]。
6. パイプラインでの使用: コマンドの出力結果を閲覧する際にも便利です[3]。

### `cat`と`less`の違い

1. **表示方法**:
    - cat: ファイルの内容を一度にすべて表示
    - less: ファイルの内容を一部のみ表示し、残りはスクロールして閲覧できる
2. **ファイルサイズへの対応**:
    - cat: 大きなファイルの場合、ターミナルのログを埋め尽くしてしまう
    - less: 大きなファイルでも効率的に閲覧でき、必要な部分だけを読み込んで表示
3. **操作性**:
    - cat: 表示後はすぐにプロンプトに戻る
    - less: 閲覧中は様々なキー操作（検索、スクロール、ページ移動など）が可能
4. **終了方法**:
    - cat: 表示後自動的に終了
    - less: 「q」キーを押して終了
5. **用途**:
    - cat: 小さなファイルの内容確認や、ファイルの結合に適している
    - less: 大きなファイルの閲覧やログファイルの確認に適している

### Citations:

[1] https://envader.plus/article/292
[2] https://wa3.i-3-i.info/word11189.html
[3] https://uxmilk.jp/12235
[4] https://qiita.com/Tri_Engi/items/fc3e725c5280eb0d1d9d
[5] [https://e-words.jp/w/lessコマンド.html](https://e-words.jp/w/less%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89.html)
[6] https://image.itmedia.co.jp/ait/articles/1702/09/command_84-01.png?sa=X&ved=2ahUKEwig9pj_tN2KAxVuHjQIHQwLIKIQ_B16BAgHEAI



## `tail` コマンド

テキストファイルの末尾を表示するツール。
常に更新されるファイルの監視や、長いファイルの末尾だけを確認したい場合に使用される。

### 特徴

1. ファイル末尾の表示: デフォルトでは、指定されたファイルの末尾10行を表示します[1][2]。
2. 行数指定: `n`オプションを使用して、表示する行数を指定できます[2]。
3. バイト単位での指定: `c`オプションを使用して、バイト単位で表示する量を指定できます[2]。
4. リアルタイム監視: `f`オプションを使用すると、ファイルの追記をリアルタイムに監視し、新しく追加された内容を即座に表示します[1][2][3]。
5. 複数ファイル対応: 複数のファイルを同時に指定して、それぞれの末尾を表示できます[2]。
6. ログ監視: サーバーの不具合調査やアプリケーションの動作確認など、ログファイルのリアルタイム監視に特に有用です[3][4]。

### `less`コマンドと`tail`コマンドの違い

1. 表示方法:
    - tail: デフォルトでファイルの末尾10行を表示
    - less: ファイル全体を1ページずつ表示し、スクロールして閲覧
2. リアルタイム監視:
    - tail -f: ファイルの末尾に追加された行をリアルタイムで表示
    - less +F: tailと同様の機能を提供しますが、通常のlessモードに切り替えられる
3. 操作性:
    - tail: 基本的に表示のみで、操作性は限られている
    - less: 上下スクロール、検索、ページ移動など、より多くの操作が可能
4. 用途:
    - tail: ログファイルの最新部分の確認や、リアルタイム監視に適している
    - less: ファイル全体の閲覧や、大きなファイルの効率的な表示に適している
5. 終了方法:
    - tail: Ctrl+Cで終了
    - less: 'q'キーで終了

### Citations:

[1] [https://e-words.jp/w/tailコマンド.html](https://e-words.jp/w/tail%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89.html)
[2] https://hydrocul.github.io/wiki/commands/tail.html
[3] https://minamachi.jp/command-tail/
[4] https://www.aura-office.co.jp/blog/tail/
[5] https://wa3.i-3-i.info/word11187.html



## GRUB（Grand Unified Bootloader） 

- コンピュータの起動時に最初に読み込まれるブートローダーの一つ。

### 主な特徴と機能

1. オペレーティングシステム（OS）の起動：
GRUBは、ストレージからOSを読み込んで起動する役割を担います[1]。
2. マルチブート対応：
複数のOS（LinuxやWindows等）がインストールされている場合、起動するOSを選択できます[2][3]。
3. 設定ファイル：
GRUB2では `/boot/grub/grub.cfg` という設定ファイルを読み込み、起動オプションやデフォルトOSなどを管理します[3]。
4. カーネルのロード：
選択されたOSのカーネルをメモリに読み込み、制御を渡します[3]。
5. ファイルシステム対応：
GRUBは独自のファイルシステムドライバーを持ち、OSが起動する前でもファイルにアクセスできます[3]。
- `grub.cfg`  は update-gurb(update-grub2) コマンドで自動生成されます。

### `grub-install`

GRUBブートローダをシステムにインストールするためのコマンド。

### 主な機能

1. **ブートローダのインストール**:
    - grub-installコマンドは、指定されたデバイス（通常はハードディスク）にGRUBをインストールします。これにより、システムが起動時にGRUBが実行され、OSの選択や起動が可能になります。
2. **UEFIおよびMBRサポート**:
    - grub-installは、UEFI（Unified Extensible Firmware Interface）システムとMBR（Master Boot Record）システムの両方で使用できます。UEFIの場合、特定のパーティションにGRUBをインストールし、設定ファイルを適切な場所に配置する必要があります。
3. **オプションの指定**:
    - コマンドにはさまざまなオプションがあり、ブートパーティションや設定ファイルの場所を指定することができます。例えば、`-boot-directory`オプションを使用して、特定のブートディレクトリを指定できます。

### 使用例

以下は、grub-installコマンドの一般的な使用例です：

```bash
# MBRシステムへのインストール
sudo grub-install /dev/sda

# UEFIシステムへのインストール
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

```

[【初心者向け】GRUBとは何か？その特徴と仕組みを分かりやすく解説](https://hatarakitakunai-hito.com/grub/)








### 今日はここまで！