2.

Linux 入門 — カーネル / ディストリビューション・ファイルシステム・シェル・基本コマンド

編集
この記事の要点
  • Linux は 1991 年に Linus Torvalds が開発したオープンソースの Unix 系 OS カーネル。GPL ライセンス
  • ディストリビューション: Ubuntu / Debian / CentOS / RHEL / Rocky / Alma / Arch / Alpine 等。カーネル + ツール群 + パッケージマネージャをまとめたもの
  • ファイルシステム階層: /etc(設定)/ /var(可変データ・ログ)/ /home(ユーザー)/ /usr(ユーザープログラム)/ /tmp(一時)
  • シェル: bash(デフォルト)/ zsh(macOS デフォルト)/ fish(モダン)。SSH でリモート接続
  • パッケージマネージャ: apt(Debian/Ubuntu)/ dnf / yum(RHEL系)/ pacman(Arch)/ zypper(SUSE)

Linux とは

Linux は、1991 年にフィンランドの大学生 Linus Torvalds が個人プロジェクトとして開発を始めた、Unix 系のオープンソース OS カーネルです。GPL ライセンスのもと世界中の開発者が貢献し、現在は最もよく使われるサーバー OS となっています。

厳密には「Linux」はカーネル(OS の中核部分)の名前で、利用者が触る OS はLinux カーネル + GNU ツール + 各種ソフトウェアをまとめたディストリビューションです。GNU/Linux と呼ばれることもあります。

主要ディストリビューション

系統ディストリビューション特徴・用途
Debian 系Debian / Ubuntu / Linux Mintapt パッケージ、デスクトップ・サーバー両方で普及
RHEL 系RHEL / CentOS / Rocky Linux / Alma Linux / Fedoradnf/yum、エンタープライズサーバー定番
Arch 系Arch Linux / Manjaropacman、ローリングリリース、上級者向け
SUSE 系openSUSE / SLESzypper、ドイツ・欧州で多い
軽量AlpineDocker イメージで定番、apk、5MB 程度
その他Gentoo、Slackware、NixOS特殊用途・思想的なもの

ファイルシステム階層 (FHS)

ディレクトリ意味
/ルートディレクトリ全ての起点
/bin基本コマンド(ls、cp 等)/usr/bin に統合される傾向
/sbin管理者用コマンドfdisk、mkfs
/etcシステム設定ファイル/etc/passwd、/etc/nginx/
/var可変データ(ログ、メール、DB)/var/log、/var/lib
/homeユーザーのホームディレクトリ/home/alice
/rootroot のホーム
/usrユーザープログラム・ライブラリ/usr/local/bin
/tmp一時ファイル(再起動で消える)
/procカーネル情報(仮想 FS)/proc/cpuinfo
/sysカーネル・デバイス情報/sys/class/
/devデバイスファイル/dev/sda、/dev/null
/optサードパーティアプリ/opt/google

基本コマンド

# 移動・閲覧
pwd                    # 現在地表示
ls                     # 一覧
ls -la                 # 詳細・隠しファイル含む
cd /var/log            # 移動
cd ~                   # ホームへ
cd -                   # 直前のディレクトリへ

# ファイル操作
cp file.txt copy.txt              # コピー
cp -r dir1 dir2                   # ディレクトリコピー
mv old.txt new.txt                # 名前変更・移動
rm file.txt                       # 削除
rm -rf dir                        # ディレクトリ削除(注意!)
touch newfile.txt                 # 空ファイル作成
mkdir -p path/to/dir              # ディレクトリ作成

# 表示
cat file.txt                      # 全内容
less file.txt                     # ページ送りで閲覧
head -n 20 file.txt               # 先頭 20 行
tail -n 50 file.txt               # 末尾 50 行
tail -f /var/log/syslog           # リアルタイム監視

# 検索
grep "error" /var/log/syslog      # 文字列検索
grep -r "TODO" .                  # ディレクトリ再帰検索
find / -name "*.conf" 2>/dev/null # ファイル名検索
find . -mtime -7                  # 7 日以内更新

# パイプとリダイレクト
ls -la | grep "^d"                # ディレクトリだけ
ps aux | grep nginx               # nginx プロセス
cat file.txt | wc -l              # 行数
echo "hello" > out.txt            # 上書き
echo "world" >> out.txt           # 追記

ファイル権限と所有者

# 権限表示の意味
# -rwxr-xr-- 1 alice users 1234 May 17 10:00 file.txt
#  ↑↑↑↑↑↑↑↑↑     所有者:alice グループ:users
# タイプ(-/d/l)
#  所有者: rwx (読/書/実行)
#     グループ: r-x
#        その他: r--

# 権限変更
chmod 755 script.sh               # 数値指定 (rwx=7, rx=5)
chmod +x script.sh                # 実行権限追加
chmod -R 644 *.txt                # 再帰

# 所有者変更
chown alice:users file.txt
chown -R alice:users /home/alice

# 数値の意味
# 4 = r (読)
# 2 = w (書)
# 1 = x (実行)
# 7 = rwx, 6 = rw-, 5 = r-x, 4 = r--

# 特殊権限
# 4xxx = SUID(実行時に所有者権限)
# 2xxx = SGID(実行時にグループ権限)
# 1xxx = Sticky bit(/tmp 等)

パッケージ管理

# Debian / Ubuntu (apt)
sudo apt update                   # パッケージリスト更新
sudo apt upgrade                  # 全パッケージ更新
sudo apt install nginx            # インストール
sudo apt remove nginx             # アンインストール
sudo apt search keyword           # 検索
apt list --installed              # インストール済一覧

# RHEL / CentOS / Rocky (dnf, 旧 yum)
sudo dnf update
sudo dnf install nginx
sudo dnf remove nginx
sudo dnf search keyword
sudo dnf info nginx

# Arch (pacman)
sudo pacman -Syu                  # 更新
sudo pacman -S nginx              # インストール
sudo pacman -R nginx              # 削除
sudo pacman -Ss keyword           # 検索

# Alpine (apk)
sudo apk update
sudo apk add nginx
sudo apk del nginx

systemd(サービス管理)

# サービス操作
sudo systemctl start nginx        # 起動
sudo systemctl stop nginx         # 停止
sudo systemctl restart nginx      # 再起動
sudo systemctl reload nginx       # 設定再読込
sudo systemctl status nginx       # 状態確認

# 自動起動
sudo systemctl enable nginx       # 起動時に自動起動 ON
sudo systemctl disable nginx      # OFF
systemctl is-enabled nginx        # 確認

# 一覧
systemctl list-units --type=service
systemctl list-unit-files

# ログ (journald)
sudo journalctl -u nginx          # nginx のログ
sudo journalctl -u nginx -f       # リアルタイム
sudo journalctl --since "1 hour ago"

SSH(リモート接続)

# 接続
ssh user@server.example.com
ssh -p 2222 user@server           # ポート指定
ssh -i ~/.ssh/key.pem user@host   # 鍵指定

# 公開鍵認証セットアップ
ssh-keygen -t ed25519              # 鍵ペア生成
ssh-copy-id user@server            # 公開鍵を送る

# ~/.ssh/config に登録すると楽
cat >> ~/.ssh/config <

シェル比較

シェル特徴
bashLinux 標準、POSIX 互換、最も普及
zshmacOS 標準、補完強力、Oh My Zsh で拡張
fishシンタックスハイライト・補完がデフォルトで強力
sh / dash軽量、POSIX 純正、スクリプト用

FAQ

Q: Linux と Unix の違いは?
A: Unix は 1969 年 AT&T で開発された OS(商用、System V、BSD 系)。Linux は Unix の動作を真似た無料のクローン。macOS は BSD 系 Unix の派生。

Q: どのディストリビューションを学ぶべき?
A: 初心者は Ubuntu(情報量多い)。サーバー実務は Rocky / RHEL。Docker 内では Alpine。最初の 1 つに慣れれば他もすぐ移行できます。

Q: WSL とは?
A: Windows Subsystem for Linux。Windows 上で Linux カーネルを動かす仕組み。WSL2 は実 Linux カーネルを軽量 VM で動かすので、ほぼ実機と同じ。

Q: vi / vim が分からない
A: i で挿入モード、Esc でコマンドモード、:wq で保存終了、:q! で破棄終了。これだけ覚えれば最低限なんとかなります。

編集
Post Share
子ページ
  1. ディストリビューション
  2. コマンド一覧
  3. ユーザー一覧の確認
  4. リポジトリの一覧の確認
  5. エラー一覧
  6. ショートカットキー一覧
  7. ログを確認する便利なコマンド
  8. cronの導入と実行方法 (CentOS 7編)
  9. ディレクトリ内のファイル数を確認
  10. 複数ファイル内の文字列を一括置換する方法
同階層のページ
  1. Windows
  2. Linux
  3. macOS