Linuxコマンド（基本）




# Linuxの基本コマンド

## ファイルとディレクトリの操作（ls、cd、cp、mv、rmなど）

- pwd - 現在の作業ディレクトリのパスを表示する。
    - オプション　不要
<br>

- ls -atl
    - -a　　隠しファイルも表示
    - -t　　更新日時の新しいものから表示
    - -r　　更新日時の古いものから表示
    - -l　　詳細なリスト表示
    - -h　　人間に読みやすいサイズ表示
    - -1 ファイル名だけ表示
<br>

- cd（ディレクトリの変更） 
    - cd 　　ディレクトリ名：指定したディレクトリに移動
    - cd ..　　1つ上のディレクトリに移動
    - cd ../..　　2つ上のディレクトリに移動
    - cd ~　　　ホームディレクトリに移動
<br>

- cp（ファイルおよびディレクトリのコピー）:
    - -r　　ディレクトリを再帰的にコピー
    - -i　　上書きの確認を行う
<br>

- mv（ファイルおよびディレクトリの移動/リネーム）:
    - -i　　上書きの確認を行う
<br>

- rm（ファイルおよびディレクトリの削除）:
    - -r　　ディレクトリを再帰的に削除
    - -i　　確認を行う
    - -f　　確認なしで強制削除
<br>

- mkdir - 新しいディレクトリを作成する。
    - -p　　 親ディレクトリも必要であれば自動的に作成。
<br>

- rmdir - 空のディレクトリを削除する。
    - よく使うオプション　なし
<br>


## ファイル内容の表示と編集（cat、grep、sed、viなど）

- cat:
    - catはファイルの内容を表示するためのコマンドです。
    - よく使うオプション:
        - -n　行番号を表示
        - -A　制御文字を表示
<br>

- grep:
    - grepはテキストファイル内でパターンを検索するためのコマンドです。
    - よく使うオプション:
        - -i　大文字小文字を無視
        - -r　ディレクトリ内のファイルを再帰的に検索
<br>

- sed:
    - sedはテキストのストリーム編集ツールです。
    - よく使うオプション:
        - -e　スクリプトを指定して編集操作を実行
        - -i　ファイルを直接編集
<br>

- vi:
    - viはテキストエディタで、ファイルを表示および編集できます。
    - よく使うコマンド (コマンドモード):
    - i　挿入モードに切り替え
    - :w　保存
    - :q　終了
    - :wqまたは:x　保存して終了
<br>


## ユーザーとグループの管理（useradd、passwd、groupaddなど）
- useradd　新しいユーザーを作成するコマンドです。
    - -m　ユーザーのホームディレクトリを作成します。
    - -g　初期のプライマリグループを指定します。
    - -G　追加の補助グループを指定します。
<br>

- passwd　ユーザーパスワードを変更するコマンドです。
    - パスワードの変更はオプションなしでコマンドを実行し、対話的に行います。
<br>

- usermod　既存のユーザーの属性を変更するコマンドです。
    - -aG　ユーザーを補助グループに追加します。
<br>

- userdel　ユーザーを削除するコマンドです。
    - -r　ユーザーのホームディレクトリとメールボックスを削除します。
<br>
- groupadd　新しいグループを作成するコマンドです。
<br>
- groupmod　既存のグループの属性を変更するコマンドです。
<br>
- groupdel　グループを削除するコマンド
<br>



## プロセスの管理（ps、top、killなど）

- s コマンド:
    - ps　現在のユーザーのプロセス一覧を表示。
    - ps aux　すべてのプロセスを詳細に表示。
    - ps -e　システム全体のプロセスを表示。
<br>
- top コマンド:
    - top　インタラクティブなプロセスモニタリングツール。リアルタイムでシステムリソース使用状況を表示。
    - top -p PID　特定のプロセスID（PID）の情報を表示。
<br>
- kill コマンド:
    - kill PID　指定したプロセスを終了。
    - kill -9 PID　強制的にプロセスを終了。
<br>
- pkill コマンド:
    - pkill process_name　プロセス名に基づいてプロセスを終了。
    - pkill -f pattern　コマンドライン引数に基づいてプロセスを終了。
<br>
- killall コマンド:
    - killall process_name　プロセス名に一致するすべてのプロセスを終了
<br>



## ファイルシステムとディスク管理:
- df - ディスク使用状況を表示する。
    - よく使うオプション:
    - -h　サイズを人間が読みやすい形式で表示。
<br>
- du - ディレクトリのディスク使用量を表示する。
    - よく使うオプション:
    - -h　サイズを人間が読みやすい形式で表示。
    - -s　合計のみ表示。
<br>

## パーティションの管理と作成

- fdisk　ディスクのパーティショニングを管理するコマンド。
    - fdisk -l　　　　# パーティションの一覧を表示
    - fdisk /dev/sda　　　　# /dev/sdX ディスクのパーティショニングを管理（Xはディスクのラベル、例：/dev/sda）。
    - n　新しいパーティションを作成します。
<br>

- parted　パーティションの管理と調整を行うユーティリティ。
    - mklabel　新しいパーティションテーブルを作成します。
    - mkpart　新しいパーティションを作成します。
- 例：
    - parted /dev/sda mklabel gpt  # GPTパーティションテーブルを作成
    - parted /dev/sda mkpart primary ext4 0% 100%  # ext4 パーティションを作成
<br>

- mkfs　ファイルシステムを作成するためのコマンド。
    - -t　使用するファイルシステムの種類を指定します（例：ext4、xfs）。
    - /dev/sdXY　パーティションにファイルシステムを作成します（Xはディスク、Yはパーティション番号）。
    - 例：
        - mkfs -t ext4 /dev/sda1  # /dev/sda1 にext4ファイルシステムを作成
<br>

- mount　パーティションをマウントするためのコマンド。
    - /dev/sdXY　パーティションを指定してマウントします。
    -t　ファイルシステムの種類を指定します。
    - 例：
        - mount /dev/sda1 /mnt       # /dev/sda1 パーティションを /mnt マウント
<br>

- umount　パーティションのアンマウントを行うコマンド。
    - -l　強制的にアンマウントを試みます。
    - 例：
        - umount /mnt                # /mnt をアンマウント
<br>




## ファイルシステムの作成とマウント

主要なファイルシステムの種類にはext4、XFS、NTFSなどがあります。
- mkfs ファイルシステムの作成
    - 例　ext4ファイルシステムの作成
        - mkfs.ext4 /dev/sdX
<br>

- mount ディレクトリのマウント(ファイルシステムをディレクトリに接続する。)
    - 例　ファイルシステムを/mntにマウント
        - mount /dev/sdX /mnt
<br>

- fstab ファイルシステムを自動的にマウントするための設定を行う。
    - /etc/fstabファイルを編集し、エントリを追加する。
        - 例　/etc/fstabファイルのエントリ
            - /dev/sdX    /mnt    ext4    defaults    0    0
<br>

- マウントオプション:
    - マウント時に指定できる一般的なオプションには以下のものがあります。
    - -t　ファイルシステムの種類を指定。
    - -o　追加のオプションを指定 (例　rw - 読み書き可能)。
    - noatime　アクセス時刻の更新を無効にする。
    - defaults　標準のマウントオプションを使用。
<br>


## ディスク容量の監視と管理

- df (ディスクフリー)　ディスク容量と使用状況を表示するコマンドです。
    - よく使うオプション:
    - -h　人間に読みやすい形式で表示
    - -T　ファイルシステムの種類を表示
    - 例:
        - df -h
<br>

- du (ディスク使用量)　ディレクトリまたはファイルのディスク使用量を表示します。
    - よく使うオプション:
    - -h　人間に読みやすい形式で表示
    - -s　サブディレクトリの合計を表示
    - 例:
        - du -sh /path/to/directory
<br>

- ncdu (NCurses Disk Usage)　ディスク使用量を視覚的に調査するための対話型ユーティリティです。通常、- インストールが必要です。
    - インストール方法 (Debian/Ubuntu):
        - sudo apt-get install ncdu
    - 使用方法:
        - ncdu /path/to/directory
<br>

- duの結果のソート　duの結果をソートするために、sortコマンドを組み合わせて使用できます。たとえば、- 最もディスクを使用しているディレクトリを表示するには次のようにします：
    - du -h /path/to/directory | sort -rh | head -n 10

## システム設定:

- sudo　スーパーユーザー権限でコマンドを実行するためのコマンド。sudoの後にコマンドを追加して実行しま- す。一般的なオプションには、 -i（rootユーザーの環境でコマンドを実行）や -u（別のユーザーとしてコマン- ドを実行）などがあります。
    - 例:
    - sudo apt-get update
<br>

- apt (Debian/Ubuntu)　パッケージ管理とシステム更新に使用するコマンド。一般的なオプションには、- install（パッケージのインストール）、remove（パッケージの削除）、update（パッケージリストの更- 新）、upgrade（アップグレード可能なパッケージのアップグレード）などがあります。
    - 例:
    - sudo apt install package_name
<br>

- yum (Red Hat/CentOS)　パッケージ管理とシステム更新に使用するコマンド。一般的なオプションには、- install（パッケージのインストール）、remove（パッケージの削除）、update（パッケージリストの更- 新）、upgrade（アップグレード可能なパッケージのアップグレード）などがあります。
    - 例:
    - sudo yum install package_name
<br>

- systemctl　システムのサービス（systemdユニット）の管理に使用するコマンド。一般的なオプションには、- start（サービスの開始）、stop（サービスの停止）、enable（ブート時に自動起動）、disable（ブート時- に自動起動しない）などがあります。
    - 例:
    - sudo systemctl start service_name
<br>

- これらのコマンドとオプションを使用することで、Linuxシステムの設定、アップデート、およびサービスの管理が行えます。
- システム設定に応じて、ディストリビューションごとに異なるコマンドが使用されることに注意してください。



## ネットワーク設定と管理

- ifconfig　ネットワークインターフェイスの設定と情報を表示するコマンド。よく使うオプションは以下です。
    - -a　　すべてのインターフェイスを表示。
    - [interface]　　特定のネットワークインターフェイスに関する情報を表示。
<br>

- ip　新しいネットワークツールで、より高度なネットワーク設定と情報取得を提供します。一般的なオプション- には次のものがあります。
    - addr　IPアドレス情報を表示。
    - link　ネットワークインターフェースのリンク状態を表示。
<br>

- netstat　ネットワーク接続とルーティングテーブルの情報を表示するコマンド。よく使うオプションは以下で- す。
    - -tuln：TCPとUDPポートのリスニング状態を表示。
    - -r：ルーティングテーブルを表示。
<br>

- route　ルーティングテーブルを設定または表示するコマンド。よく使うオプションは以下です。
    - add：新しいルートを追加。
    - del：既存のルートを削除。
<br>

- ping　ネットワークホストへの応答時間を確認するために使用されるコマンド。
    - 一般的にはping <hostname or IP>で使用。
<br>

- traceroute　パケットがネットワークを通過する経路を表示するコマンド。よく使うオプションは以下です。
    - -n：ホスト名の逆引きを行わず、IPアドレスのみを表示。
<br>


- ifup および ifdown　ネットワークインターフェイスをアップまたはダウンにするためのコマンド。
    - ifup <interface>：指定したインターフェイスをアクティブにする。
    - ifdown <interface>：指定したインターフェイスを非アクティブにする。
<br>


- ssh　セキュアなリモートシェル接続を確立するためのコマンド。一般的な使用法はssh user@hostname。
<br>


## システムログとログファイルの確認

- tail　ログファイルの末尾を表示するために使用します。一般的なオプションには次のものがあります。
    - -f：ログファイルをリアルタイムで監視し、新しいログエントリが追加されるたびに表示します。
    - -n：表示する行数を指定します。例　tail -n 20 /var/log/syslog（最後の20行を表示）。
<br>

- cat　ファイル全体を表示するために使用します。ただし、大きなログファイルの場合には適していません。
    - 例　- cat /var/log/syslog。
<br>

- grep　ログファイル内から特定のキーワードを検索するために使用します。一般的なオプションには次のものが- あります。
    - -i：大文字と小文字を区別せずに検索します。
    - -C：検索結果の前後に指定した行数のコンテキストを表示します。
        - 例　grep -i error /var/log/syslog- （"error"というキーワードを含む行を表示）。
<br>

- less　ページ単位で長いログファイルを閲覧するために使用します。スクロールと検索が可能です。ファイルを- 開くには、ターミナルで less /var/log/syslog などと入力します。
<br>

- dmesg　カーネルメッセージを表示します。特にシステムの起動時の詳細なログ情報を確認するのに便利です。
    - オプションなしで使用します。
<br>



## サービスとデーモンの管理（systemdなど）

- systemctl　systemdを使用してサービスの管理を行うコマンド。
    - start <service>　サービスを開始します。
    - stop <service>　サービスを停止します。
    - restart <service>　サービスを再起動します。
    - enable <service>　システム起動時にサービスを有効にします。
    - disable <service>　システム起動時にサービスを無効にします。
    - status <service>　サービスの状態を表示します。
<br>



## ユーザーとセキュリティ:
- useradd　新しいユーザーアカウントを作成します。
    - -m　ホームディレクトリを作成します。
    - -G <group>　ユーザーを指定したグループに追加します。
<br>

- passwd <user>　ユーザーのパスワードを変更します。
<br>

- userdel <user>　ユーザーアカウントを削除します。
<br>

- groupadd　新しいグループを作成します。
<br>

- usermod　ユーザーの属性を変更します。
<br>



## パスワードポリシーとセキュリティ設定
- passwd　ユーザーのパスワードを変更します。
<br>

- chage　パスワードの有効期限を設定します。
<br>

- pam_tally2　ログイン試行回数を追跡し、アカウントのロックを制御します。
<br>

- fail2ban　不正なアクセスをブロックするための侵入防止システムを設定します。
<br>




## ファイアウォールの設定
- iptables　パケットフィルタリングファイアウォールを設定します。
<br>

- ufw　Uncomplicated Firewallを使用して簡単にファイアウォールルールを設定します。
<br>

- enable　ファイアウォールを有効にします。
<br>

- disable　ファイアウォールを無効にします。
<br>

- allow <port>　指定したポートの通信を許可します。
<br>

- deny <port>　指定したポートの通信を拒否します。
<br>




## SELinuxやAppArmorなどのセキュリティフレームワーク

- sestatus　SELinuxのステータスを表示します。
<br>

- setenforce　SELinuxを有効または無効にします。
    - 0　無効
    - 1　強制
<br>

- apparmor_status　AppArmorのステータスを表示します。
<br>

- apparmor_parser　AppArmorポリシーを更新または管理します。
<br>




## シェルスクリプトとは

- シェルスクリプトは、LinuxやUnix系オペレーティングシステムでの自動化やタスクの自動実行のために使用されるテキストファイルです。
- 一般的なシェルスクリプトの拡張子は ".sh" です。


## Bashスクリプトの基本的な文法

- 変数　変数を宣言するには、変数名を指定して "=" を使います。例　my_var="Hello"  
- コマンド実行　コマンドをバッククォート `` または $() で囲んで実行します。例　result=$(ls)
- 条件文　if 文を使って条件分岐を行います。
- 例:
```bash
if [ "$var" = "value" ]; then
    echo "Match"
else
    echo "No match"
fi
```

- ループ　for ループや while ループを使って反復処理ができます。
- 関数　関数を定義してコードを再利用できます。
- 例:
```bash
my_function() {
    echo "Function called"
}
```


## シェルスクリプトの作成と実行

- シェルスクリプトを作成するには、テキストエディタを使用してスクリプトファイルを作成し、適切な権限を与える必要があります。
- シェルスクリプトファイルを実行するには、ターミナルで以下のコマンドを使用します:
```bash
chmod +x script.sh  # 実行権限を与える
./script.sh         # スクリプトを実行
```
- または、bash コマンドを使用しても実行できます
```bash
bash script.sh
```

## パッケージ管理システム（例：apt、yum）の使用
- パッケージ管理システムを使ってソフトウェアのインストール、更新、削除が可能。
- パッケージ管理システムとしてAPTとYumを例に挙げます。
- 管理者権限が必要です。

### APT (Debian/Ubuntu系) コマンド:
パッケージの検索:
```bash
apt search <パッケージ名>
```
<br>

パッケージのインストール:

```bash
apt install <パッケージ名>
```
<br>

パッケージのアップグレード:
```bash
apt upgrade
```  
<br>


パッケージの削除:
```bash
apt remove <パッケージ名>
```
<br>

パッケージ情報の表示:
```bash
apt show <パッケージ名>
```
<br>

アップデート可能なパッケージのリスト表示:
```bash
apt list --upgradable
```

### Yum (Red Hat/CentOS/Fedora系) コマンド:
パッケージの検索:
```bash
yum search <パッケージ名>
```
<br>

パッケージのインストール:
```bash
yum install <パッケージ名>
```
<br>

パッケージのアップグレード:
```bash
yum update
```
<br>

パッケージの削除:
```bash
yum remove <パッケージ名>
```
<br>

インストール済みパッケージのリスト表示:
```bash
yum list installed
```


## ネットワーキング:

- ping　ホストへのネットワーク接続を確認する。
- よく使うオプション　-c（指定回数の送信）、-i（送信間隔）。
<br>

- ifconfig（またはipコマンド）　ネットワークインターフェース情報を表示。
- よく使うオプション　なし（情報を表示するだけ）。
<br>

- ifconfig（またはipコマンド）　ネットワークインターフェースの設定を変更。
    - up（インターフェースを有効にする）、
    - down（インターフェースを無効にする）。

- netstat　ネットワーク統計情報を表示。
    - よく使うオプション　
    - -t（TCP接続）、
    - -u（UDP接続）。
<br>


- route　ルーティング情報を表示および設定。
- よく使うオプション　
    - add（ルートを追加）、
    - del（ルートを削除）。
<br>

- nslookup（またはdigやhostなどのDNSツール）　ドメイン名をIPアドレスに解決する。
- よく使うオプション　なし。
<br>

- dig


## SSHとリモートアクセスのセキュリティ

- ssh　SSHセッションを開始し、リモートホストに接続する。
    - -p（ポート指定）、
    - -i（秘密鍵の指定）。
<br>

- fail2ban　失敗したログイン試行に対するセキュリティ対策を設定。SSHブルートフォース攻撃から保護する。
    - よく使うオプション　なし（設定ファイルでカスタマイズ）。


## システムモニタリング:
- top　システムのリソース使用状況をリアルタイムで表示。
    - よく使うオプション　なし（対話的な監視）。
<br>

- ps　実行中のプロセスを表示。
    - よく使うオプション　aux（詳細な情報を含む全プロセスを表示）。
<br>

- htop　topのようなシステムモニタリングツールで、より詳細な情報とインタラクティブな操作が可能。
    - よく使うオプション　なし（対話的な監視）。
<br>



## リソース使用率の監視（CPU、メモリ、ディスク）

- top　リアルタイムでシステムのリソース使用率を監視します。
    - -c　コマンド名を表示
    - -p <PID>　特定のプロセスの情報を表示
    - 1　CPUコアごとの使用率を表示
<br>

- htop　topの洗練された代替コマンド。インタラクティブで使いやすく、CPU、メモリ、およびプロセスの情報- を表示します。
<br>

- free　メモリ使用状況を表示します。
    - -m　メガバイト単位で表示
    - -g　ギガバイト単位で表示
<br>

- df　ディスク使用状況を表示します。
    - -h　人間が読みやすい形式で表示
    - -T　ファイルシステムの種類を表示
<br>

- du　ディスク使用量を特定のディレクトリで調べます。
    - -h　人間が読みやすい形式で表示
    - -s　サブディレクトリの合計を表示
<br>


## ログ分析とトラブルシューティング

- tail　ログファイルの末尾を表示するコマンドです。便利なオプションには以下があります：
    - -f：リアルタイムでログファイルをモニタリングします。
    - -n：表示する行数を指定します。
    - 例　tail -f /var/log/syslog でシステムログをリアルタイムでモニタリングできます。
<br>

- grep　テキスト内でパターンを検索するためのコマンドです。一般的なオプションには以下があります：
    - -i：大文字と小文字を区別しないで検索します。
    - -r：ディレクトリ内のすべてのファイルを再帰的に検索します。
    - 例　grep -i "error" /var/log/syslog でシステムログ内で"error"という単語を検索します。
<br>

- journalctl　systemdジャーナルからログ情報を表示するためのコマンドです。便利なオプションには以下が- あります：
    - -u：特定のサービスのログを表示します。
    - -n：表示する行数を指定します。
    - 例　journalctl -u apache2 -n 50 でApache2の最新50行のログを表示します。
<br>

- dmesg　カーネルメッセージを表示するコマンドです。特にブート時のトラブルシューティングに役立ちます。
    - 例　dmesg | grep -i "error" でエラーメッセージを検索します。
<br>

- strace　プロセスのシステムコールとシグナルをトレースするためのコマンドです。詳細な情報を提供します。
    - 例　strace -p <PID> で特定のプロセスをトレースします。


## シンボリックリンク、ハードリンク

- シンボリックリンク:
    - ln -s <target> <link_name>　シンボリックリンクを作成します。<target> はリンク先のファイルやデ- ィレクトリのパスで、<link_name> はリンクの名前です。
    - ls -l <link_name>　シンボリックリンクの詳細情報を表示します。
    - unlink <link_name>　シンボリックリンクを削除します。
<br>

- ハードリンク:
    - ln <source> <link_name>　ハードリンクを作成します。<source> はリンク元のファイルのパスで、- <link_name> はリンクの名前です。
    - ls -i <source>　ファイルのinode番号を確認し、同じinode番号を持つファイルがハードリンクです。
    - ハードリンクはデータを共有し、元のファイルが変更されるとすべてのリンクから変更が反映されます。




## 圧縮・解凍

- ファイルの圧縮:
    - tar -czvf <archive_name.tar.gz> <files>　ファイルやディレクトリをtarとgzipを使用して圧縮します。
    - zip <archive_name.zip> <files>　ファイルをZIPアーカイブに圧縮します。
<br>


- ファイルの解凍:
    - tar -xzvf <archive_name.tar.gz>　tar.gzアーカイブを解凍します。
    - unzip <archive_name.zip>　ZIPアーカイブを解凍します。
<br>

- 圧縮と解凍のオプション:
    - -c　アーカイブを作成
    - -x　アーカイブを抽出
    - -z　gzipを使用してアーカイブを圧縮または解凍
    - -v　詳細情報を表示
    - -f　アーカイブ名を指定