Open5

【学習】『Linux入門 (LFS101-JP)』

AoToAoTo

01. コースのご案内 / Course Introduction

このコースの修了には、約50〜60時間かかります。

とのこと。10時間くらいで要点を抑えたい。

このコースの各章は、互いに連携して学習できるように設計されています。順番に学習していくのがベストでしょう。いくつかの章を飛ばしたり、さっと読んだりすると、まだ触れていないトピックがあることに気づくかもしれません。

飛ばしすぎると抜けてる知識が確認できないので、一旦全部目を通したい。

講師は Jerry Cooperstein さん。もう退職されているみたい。
https://www.linkedin.com/in/jerry-cooperstein-6504014/

02. The Linux Foundation

これは飛ばしていいやつ。一応、コースは Debian, RHEL, SUSE に対応しているらしい。

各ディストリビューション間の関係は目を通しておくといいかも。R.I.P. CentOS 🫰

RHEL

  • RPM ベースのパッケージマネージャ dnf
  • RHEL - Fedora - CentOS

SUSE

  • SUSE - SLES - OpenSUSE
  • SLES は OpenSUSE のアップストリーム
  • RPM ベースのパッケージマネージャ zypper
  • システム管理用の YaST(Yet Another Setup Tool)アプリケーション

Debian

  • Debian - Ubuntu - Mint
  • Debian ファミリは Ubuntu のアップストリーム
  • DPKG ベースのパッケージマネージャ APT(apt, apt-get, apt-cache)

03. Linuxの理念とコンセプト / Linux Philosophy and Concepts

Linux の歴史・理念は学び直すいい機会。
学習環境に Linux を生で用意することを推奨しているが、簡便のために GCE or Cloud Console で代替する。(Cloud Console は Ubuntu 24.04.2 LTS)
GNOME, KDE は一度は使ってみてもいいかも。R.I.P. VMware Workstation 🫰

1991年、フィンランドのヘルシンキで学生だった Linus Torvalds は、あるプロジェクトを開始しました。自分のオペレーティング システムのカーネルを書き始めました。

Linus Torvalds の話から Linux の歴史が始まる。生きてる世界が違う。

1992年、Linux は GNU(自由に利用できるソフトウェアを推進する Free Software Foundation(FSF)のプロジェクト)の General Public License(GPL)を使用して再ライセンスされました。

ここから Linux ディストリビューションが生まれたんだなぁ(自分はまだ生まれていない)

Linux は、確立された UNIX オペレーティングシステム ファミリーから多くを借用しており、フリーでオープンな代替オペレーティングシステムとして開発されました。
(中略)
Linux は可能な限り、ファイルまたはファイルのようなオブジェクトを使ってコンポーネントを利用できるようにしています。プロセス、デバイス、ネットワーク ソケットはすべてファイルのようなオブジェクトで表現され、多くの場合、通常のファイルと同じユーティリティを使用した操作が可能です。

これは頭に入れておくと、合点がいく説明。

動物園でのちょっとした出来事の後、そのマスコットとしてペンギンを披露しました。

「ちょっとした出来事」とは。

Linux の用語

  • カーネル
  • ディストリビューション(distros)
  • ブートローダー(ex. GRUM, ISOLINUX)
  • サービス(ex. httpd, nfsd, ntpd, ftpd, named)
  • ファイルシステム(ex. ext3, ext4, FAT, XFS, Btrfs)
  • X Window システム
  • デスクトップ環境(ex. GNOME, KDE, Xfce, Fluxbox)
  • コマンドライン(ex. bash, tcsh, zsh)

ディストリビューションは特定のカーネルをベースとしている、多くのソフトウェアツールの集合体。
商用サポートがあるディストリビューションが人気だよね。CentOS がお亡くなりになったので、Alma Linux, Rocky Linux の存在は認知しておいた方がいいかも。

AoToAoTo

04. Linuxの基礎とシステムの起動 / Linux Basics and System Startup

ブートプロセス

ブートローダーは MBR が HDD/SDD の最初のセレクターからブート可能なパーティションを見つけ、GRUB などを RAM にロードする。次に /boot 配下のブートローダーが OS/カーネルを RAM にロードし、カーネルに制御を渡す。

初期 RAM ディスク(initramfsファイル)はルートファイルシステムのマウントに必要な全情報を含む。デバイスの把握・ドライバの選択・それらのロードを行う。マウントプログラムは、OS に FS が使用可能と指示し、マウントポイントを関連づける。initramfs が RAM から消去されると、init プログラム(/sbin/init)が実行される。init がマウント・ルート FS への移行を処理。

init はテキストモードのログインプロンプトを開始する。ID/PW で sh を開ける。

ブートローダーはカーネルと initramfs の両方を RAM にロードする。カーネルはメモリの初期化・ハードウェアの設定・ユーザー空間アプリケーションのロードを行う。

init プロセスはカーネルプロセスを除いてプロセスツリーの頂点となる。プロセス管理の役割としてシステムの実行維持やシャットダウンも担う。

systemd は並列処理やシャットダウン・再起動のオーバーヘッド削減のために生まれた。init より高速に起動するために、起動 sh がシンプルな設定ファイルとなっている。systemd は /lib/systemd/systemd を指すようになる。systemd startstop|restart|enable|disable|status <SYSTEM_NAME> で操作できる。

ファイルシステム

  • 従来ディスク:ext3, ext4, XFS, Btrfs, JFS, NTFS, Vfat, exfat
  • フラッシュ:ubifs, jffs2, yaffs
  • データベース
  • 特殊用途:procfs, sysfs, tmpfs, squashfs, debugfs, fuse

ファイルシステム自体は、単なるファイルの保存のアクセス方法を決定するもの。
パーティションは物理的な記憶領域から現在は論理的な領域。

Linux ファイルシステムは 標準レイアウト=FHS(Filesystem Hierarchy Standard) に従う。/ でパス区切り、近年の Linux システムでは外部メディアは /run/media/yourusername/disklabel にマウントする。ほとんどはケースセンシティブで、コアユーティリティとその他のプログラムは //usr 以下のディレクトリで区別する。

05. グラフィカル インタフェース / Graphical Interface

あまり使うことはないが、一応確認する。

GUI を表示するためのディスプレイマネージャーサービスはブートプロセスに最後のステップの一つ。歴史的には X Window System=X として知られている。現在は Wayland が徐々にとって変わっている。

デスクトップ環境ではセッションマネージャーとウィンドウマネージャーで構成されている。これに加えて各種のユーティリティーがある。
GNOME ディスプレイマネージャは gdm、KDE は kdm がデフォルトで使用される。

背景・テーマ・ユーザの変更方法も解説されているが割愛…一般的な設定変更は許可されておらず、gnome-tweaks 標準ユーティリティを利用して変更できる。

その他基本的な操作は Windows と似ている。Home ディレクトリは /home となる。デフォルトのテキストエディタは gedit。

06. グラフィカル インターフェースからのシステム設定 / System Configuration from the Graphical Interface

完全に割愛

07. 一般的なアプリケーション / Common Applications

完全に割愛

AoToAoTo

08. コマンドライン操作 / Command Line Operations

GUI 上からコマンドラインを操作する前提なので、説明が多いが割愛。

続いての説明、スーパーユーザー

  • sudo: root(スーパーユーザー)での操作。/etc/sydiers.d/<USER_NAME> に設定ファイルが入る。
    • GUI のオフは sudo systemctl stop gdm など

基本操作系のコマンド

  • login: ssh でも同様にユーザー名指定後、パスワード
  • shutdown: シャットダウン・再起動。shutdown -h で停止、shutdown -r で再起動
  • which: プログラムファイルのディレクトリを表示
  • whereis: システムディレクトリからパッケージを探索
  • pwd: print working directory
  • cd: change directory, cd - で前の作業ディレクトリ
  • pushd: 元にいたディレクトリをリストにプッシュして変更
  • popd: ディレクトリストを逆順に辿る
  • tree: tree -d でフィルシステムのツリーをディレクトリのみ表示する
  • ln: ハードリンク・ソフト(シンボリック)リンク

実行可能なプログラムやスクリプトは /bin, /usr/bin, '/sbin', '/usr/sbin', '/opt' などに置かれる。
絶対パスと相対パス。場合によって使い分けようね。

ファイル操作コマンド

  • cat: ファイルの出力・結合。スクロール不可
  • tac: ファイルを遡って表示
  • head: 最初の10行表示
  • tail: 最後の10行表示
  • touch: ファイルのアクセス・変更・修正時刻の設定や更新
  • man: ドキュメント
  • mkdir: make directory
  • rmdir: remove directory, 中身ごと削除する場合はかの rm - rf
  • mv: move
  • rm: remove, rm -f force, rm -i interactive

ファイル検索コマンド

ファイルストリーム。それぞれデフォルトでファイルディスクリプタの次の値を持つ。続いて開くファイルは3から始まる。これらをリダイレクトし、入出力をファイルやコンソースから変更する。

  • 標準入力 = stdin: 値0 → キーボード、< ファイル入力
  • 標準出力 = stdout: 値1 → 端末・コンソール、> ファイル出力
  • 標準エラー = stderr: 値2 → ログファイル、2> ディスクリプタに準じた出力、2>&1同じ出力を使う
  • パイプ = |: 一時出力を割愛できる
  • locate: 指定された文字列と一致する全てのエントリを表示。システム上のデータベースを用いて検索する。
    • ワイルドカード = *, ?, [set], [!set]
  • find: 特定のディレクトリから再起的に検索。-name で検索条件、-type でディレクトリ・ファイルを指定、-exec/-ok 対象のファイルにコマンド実行でファイル名のプレースホルダ = {} とコマンドの終わり = ';'-ctime 時間指定、-size` サイズ指定

パッケージ管理

AoToAoTo

09. Linuxドキュメントの検索 / Finding Linux Documentation

地味に使ってないから困った時に便利。

  • man ページ(マニュアルページの略)
    • man -f = whatis
    • man -k = apropos
  • GNU Info = info: [n] next, [p] previous, [u] up
  • help コマンドと --help オプション
  • Gentooハンドブック、Ubuntuドキュメンテーション、Fedoraドキュメンテーション