学習トピック一覧(253)
基礎から組込みまで、Linux の学習トピックをトラック別にまとめました。各ページで要点・用語・関連コマンドを確認できます。
1. Linuxをはじめる
Linuxとは何か・どこで動いているのか
Linuxは無料で使えるOS(オペレーティングシステム)の一種です。実はスマホの中身から世界のスーパーコンピュータまで、身の回…
ディストリビューションの選び方Linuxには「ディストリビューション」と呼ばれる無数の配布版があり、どれを選べばいいか最初は迷います。この章では主要な系譜と…
WindowsでLinux——WSL2実はWindowsを使ったまま、その中で本物のLinuxを動かす方法があります。それがWSL2です。仮想マシンを別に用意する手…
仮想マシンで安全に試す「壊すのが怖いから触れない」という不安には、仮想マシンという答えがあります。パソコンの中にもう1台分の仮想的なパソコンを作り、…
ラズパイという入口——安くて壊しにくい実機WSLや仮想マシンはパソコンの中に作る仮のLinuxですが、Raspberry Pi(ラズパイ)は数千円で買える本物のLinu…
ライブUSBとデュアルブートUSBメモリからLinuxを起動すれば、インストールせずにその場で試せます。これをライブUSBと呼びます。気に入れば、同じUS…
クラウド・VPSで自分のサーバを持つ自分のパソコンに手を加えずにLinuxを持つ方法として、VPS(仮想専用サーバー)があります。月額数百円ほどからインターネット…
インストール直後にやることラズパイでもVPSでも、新しいLinuxマシンを手にしたら最初にやることはほぼ共通しています。パッケージの更新、タイムゾーンと…
2. 基本操作・コマンド
現在地とディレクトリ移動
Linuxの操作はまず「いま自分がどのフォルダにいるか」を意識することから始まります。pwd で現在地を表示し、ls で中身を…
ファイルとディレクトリの操作ファイルやフォルダは作る・コピーする・移動(名前変更)する・消す、の4操作が基本です。mkdir でフォルダを作り、touch…
困ったら聞く:ヘルプの引き方コマンドの使い方が分からないときは、ネットを探す前に手元で聞ける。man コマンドでマニュアルを開き、多くのコマンドは --h…
ファイルの中身を見るテキストファイルの内容を確認する方法はいくつかあります。短いファイルは cat で一気に表示、長いファイルは less でスク…
入力と出力をつなぐ:リダイレクトとパイプコマンドの結果は普通は画面に出るが、その流れ先は付け替えられる。> でファイルへ保存、>> で追記、| (パイプ)で次のコマン…
まとめて指す:ワイルドカード(グロブ)ファイルを1つずつ打たなくても、* や ? を使えば「条件に合うものすべて」をまとめて指せる。*.txt は「.txtで終わる…
パーミッション(アクセス権)Linuxの各ファイルには「誰が・何をできるか」の権限が設定されています。読み(r)・書き(w)・実行(x)の3種類を、所有者…
別名をつける:シンボリックリンク実体は1つのまま、別の場所から呼べる「近道」を作れるのがリンクだ。ln -s で作るシンボリックリンクは、Windowsのショ…
ファイルを探す:find と locateどこに置いたか分からないファイルは、名前・大きさ・更新日時などの条件で探せる。find は今この場で階層をたどって厳密に探し、…
プロセスを確認するいま動いているプログラムは「プロセス」として管理され、それぞれにPID(プロセス番号)が付きます。ps で一覧を取得し、top…
まとめて圧縮:tar と gzip大量のファイルは、1つの箱にまとめて小さく圧縮すると扱いやすい。tar で複数ファイルを1つのアーカイブ(.tar)に束ね、g…
ターミナルで編集:nano と vim設定ファイルを直すには、画面の中で動くエディタが要る。やさしいのは nano(下に操作が出る)。速くて強力だが癖があるのが v…
パッケージ管理の基本ソフトの導入や更新は、ディストリビューションごとのパッケージマネージャ経由で行います。Debian/Ubuntu系は apt、…
ユーザと権限昇格:sudo で管理者になるLinuxは複数人で使う前提で、普段は一般ユーザとして安全に作業する。システム全体を変える操作だけ sudo で一時的に管理者…
ディレクトリの地図:ファイルシステム階層Linuxのファイルはすべて / を頂点とする1本の木にぶら下がる。/etc は設定、/home は各ユーザの住所、/bin …
文字を整えるフィルタ:sort・uniq・cut・tr・wcテキストを受け取り、加工して吐き出す小さな道具たち。並べ替える sort、重複を畳む uniq、列を抜く cut、文字を置換す…
環境変数とPATH:シェルの設定値シェルは名前つきの値をいくつも覚えている。中でも PATH は「コマンドを探しに行く場所のリスト」で、これのおかげで ls と…
ジョブ制御:Ctrl+Z・&・jobs・fg・bg1つの端末で複数の仕事を切り替えて回す仕組み。末尾に & を付ければ裏で走らせ、Ctrl+Z で今の仕事を一時停止、jobs …
ディスクとマウント:df・du・lsblk・mountストレージは / の木のどこかに「接ぎ木」されて初めて使える。これがマウント。lsblk でディスクの地図を見て、df で残り…
ユーザとグループを作る:useradd・groupadd・usermod誰がいて、どのグループに属し、何を触れるか。それを決めるのがユーザ管理だ。useradd で人を追加、groupadd でグル…
3. シェルスクリプト
シェルスクリプトと実行権限
シェルスクリプトは、いつも端末に打っているコマンドをファイルにまとめて一気に実行する仕組みです。1行目に #!/bin/bas…
変数とクオート変数は name="値" の形で代入します。= の前後にスペースを入れない点が要注意です。値を取り出すときは $name また…
変数展開でしなやかに書く変数はそのまま呼ぶだけでなく、既定値やパターン切り出しを一手で書ける。${VAR:-既定} は未設定なら既定値、${file%…
コマンド置換コマンドの実行結果を、そのまま変数や別のコマンドの一部として使う仕組みがコマンド置換です。$(コマンド) と書くと、中のコマン…
計算と配列シェルでも足し算やループ回数の計算ができる。$(( )) の中で i=$((i+1)) のように書く。複数の値は配列 arr=…
条件分岐(if / test)条件によって処理を分けるには if 文を使います。if 条件; then ... fi の形が基本で、必要に応じて elif …
終了ステータスと && ||すべてのコマンドは終了ステータス(0=成功/0以外=失敗)を返す。直前の結果は $? で読める。A && B は成功したときだ…
case文で分岐を整理する選択肢が多い分岐は、if の連続より case が読みやすい。case "$1" in start) …;; stop) …;…
繰り返し(for / while)同じ処理を何度も行うには繰り返し(ループ)を使います。for は決まったリストを1つずつ処理するのに向き、for f in *…
関数と引数よく使うひとまとまりの処理は関数にして名前を付けられます。name() { ... } と定義し、name 引数 と呼び出しま…
リダイレクトとパイプコマンドの入出力は自由につなぎ替えられます。> は標準出力をファイルへ上書き保存、>> は末尾へ追記、< はファイルを標準入力…
堅牢なスクリプトにする事故を防ぐ定番の作法がある。冒頭に set -euo pipefail を置くと、エラー・未定義変数・パイプ途中の失敗で即停止…
4. 正規表現・テキスト処理
正規表現とは・基本のメタ文字
正規表現は「文字列のパターン」を表す書き方で、検索や置換を一気に行えます。多くの文字はそのままの意味ですが、特別な働きを持つ文…
文字クラスで候補を絞る角かっこ [ ] で囲むと、その中のどれか1文字にマッチする「文字クラス」になります。[abc] は a か b か c のい…
量指定子で繰り返しを表す直前のパターンが何回繰り返されるかを表すのが「量指定子」です。* は0回以上、+ は1回以上、? は0回または1回(あってもな…
grep で行を検索するgrep はファイルや標準入力から、パターンに一致する行を取り出すコマンドです。grep "パターン" ファイル の形で使い、…
拡張正規表現(grep -E / egrep)正規表現には基本(BRE)と拡張(ERE)の2つの方言があります。基本では + ? { } ( ) | を使うのに \ が必要…
sed で置換・行加工するsed は1行ずつ読み込んでテキストを加工するストリームエディタです。最もよく使うのが置換で、sed 's/古い/新しい/' …
awk でフィールド処理するawk は行を空白で区切られた「フィールド」に分けて扱える、表形式テキスト向けのツールです。各列は $1 $2 … で参照でき…
パイプでつなぐ定番テキスト加工テキスト処理の力は、小さなコマンドをパイプ | でつなぐと一気に高まります。cut で列を切り出し、tr で文字を置換・削除し…
グループ化と後方参照正規表現には、複数の文字をひとまとめにして扱う「グループ化」という機能があります。かっこでくくった部分は量指定子をまとめて効か…
sed実践レシピここまでで置換とアドレス指定という sed の基本部品はそろいました。ここからは、それらを現場でどう組み合わせるかという「実践…
awkで集計レポートawkはパターン{アクション}という構造で行を処理する道具でしたが、ここに連想配列とENDブロックを組み合わせると、集計レポー…
実務パターン集——IP・日付・ログ実務でよく出てくる正規表現には、ある程度決まった「型」があります。IPアドレス風・日付・時刻・エラー行の抽出といった定番パター…
5. ネットワーク基礎
IPアドレスとサブネット
IPアドレスはネットワーク上の機器を識別する番号です。IPv4では192.168.1.10のように4つの数字で表します。アドレ…
ルーティングとゲートウェイ自分のネットワークの外(別のネットワークやインターネット)へ届けるには、パケットの中継役が必要です。その出口になるのがデフォル…
ポートとプロトコル(TCP/UDP)1台の機器では複数のサービスが同時に動くため、IPアドレスだけでなく「ポート番号」で通信相手のサービスを区別します。Webは8…
DNSの仕組み(名前解決)私たちは example.com のような名前でアクセスしますが、通信に使われるのはIPアドレスです。この名前をIPアドレスへ…
ネットワークインターフェースの確認Linuxでは有線・無線・仮想などの接続口を「インターフェース」として扱い、それぞれに名前(例: eth0、ens33、lo)…
ソケットの状態を読むss で見える LISTEN・ESTABLISHED・TIME_WAIT は、通信の「今」を表す状態だ。LISTEN は待ち受…
疎通確認の方法「相手とつながっているか」を確かめる基本が疎通確認です。ping は相手へ小さなパケットを送って応答時間を測り、到達できるかを…
名前解決の確認つながらない原因が「経路」なのか「名前解決」なのかを切り分けることは重要です。IPアドレス直打ちでは届くのに名前ではダメな場合…
HTTPとcurlでやり取りするWebの通信はHTTPで、要求に対しステータスコード(200 OK・404 Not Found・500 …)が返る。curl …
SSHでリモート操作する手元から遠くのサーバへ安全に入り、コマンドを打てるのがSSHだ。ssh user@host でログイン、scp file us…
設定と恒久化名前とIPの対応は /etc/hosts に直接書け、問い合わせ先DNSは /etc/resolv.conf が指す。恒久的な…
つながらない時の切り分け「ネットが繋がらない」は層で切り分ける。①ip a でIPが付いているか ②ping で足元(ゲートウェイ)③ping 8.8…
OSI参照モデルとTCP/IP 4階層通信を役割ごとの層に分けて考える地図。OSIの7層と、実際のインターネットで使うTCP/IPの4階層の対応を、身近なたとえでつ…
カプセル化とヘッダデータが各層を通るたびに宛先などの付箋(ヘッダ)が足されていく。この「入れ子」の仕組みがカプセル化で、受け取る側は逆順にほどい…
MACアドレスとARP同じLANの中では、機器に焼き付いたMACアドレスで相手を特定する。IPアドレスからMACアドレスを調べる仕組みがARPで、そ…
DHCPによるIPアドレスの自動割り当てつなぐだけでIPアドレスやゲートウェイが自動で決まるのはDHCPのおかげ。Discover・Offer・Request・ACK…
主要プロトコルと代表ポート番号1台のサーバで複数のサービスを見分けるための番号がポート。HTTP=80、HTTPS=443、SSH=22、DNS=53など、…
プライベートIP・グローバルIPとNAT家や社内で使う私用の住所がプライベートIP、インターネット側の住所がグローバルIP。両者を橋渡しして共有するのがNAT/NAP…
6. サーバ構築
サービス管理の基本(systemd)
サーバ上で常時動き続けるプログラムは「サービス(デーモン)」と呼ばれ、RHEL/MiracleLinux系では systemd…
SELinux とサービス(拒否の犯人を見抜く)RHEL系サーバでは SELinux が既定で有効だ。設定は正しいのにサービスがファイルを読めない・繋げない、の多くはこれが原…
Webサーバの導入(nginx / Apache httpd)代表的なWebサーバは nginx と Apache httpd の2つです。どちらも dnf install で導入でき、s…
ドキュメントルートと設定ファイルWebサーバが公開するファイルを置く場所を「ドキュメントルート」と呼びます。nginx の既定は /usr/share/ngi…
1台で複数サイト(バーチャルホスト)1台のWebサーバで複数のサイトを公開できるのがバーチャルホストだ。ServerName(ドメイン名)ごとに Document…
ファイアウォールでポートを開放するRHEL/MiracleLinux系では firewalld が既定のファイアウォールで、外部からの通信を初期状態で多くしゃ断…
ポートと待ち受け状態の確認サービスが正しく起動しても、想定したポートで待ち受けていなければ通信できません。ss コマンドで「いまどのポートが開いて待ち受…
ログでサービスの状態を調べるサービスが起動しない・応答しないときは、まずログを読むのが鉄則です。systemd 管理下のサービスは journalctl …
SSHサーバの基本サーバはディスプレイを繋がず、手元のPCからネットワーク越しに操作するのが普通です。その入口が SSH で、サーバ側では ss…
DNSサーバを立てる(BIND)名前からIPを「答える側」に回るのがDNSサーバだ。BIND(named)では named.conf に基本設定、ゾーンファイ…
Windowsとファイル共有(Samba)LinuxのフォルダをWindowsから「ネットワークドライブ」として見せるのがSambaだ。smb.conf に共有設定を書…
FTPサーバ(vsftpd)ファイル転送に特化したサーバが vsftpd だ。/etc/vsftpd/vsftpd.conf で匿名接続やアップロードの可…
HTTPSにする(TLS・証明書)通信を暗号化して盗み見・改ざんを防ぐのがHTTPSだ。サーバに証明書と秘密鍵を置き、443番を開ける。自前検証なら opens…
7. Git バージョン管理
リポジトリを作る(init / clone)
Gitはファイルの変更履歴を記録するバージョン管理ツールです。記録の入れ物を「リポジトリ」と呼び、新規に作るときは git i…
ステージングとコミットGitでは変更をいきなり記録せず、まず「ステージング(インデックス)」という準備エリアに載せてから記録します。git add …
状態と履歴を確認する(status / log)いまどのファイルが変更され、何がステージに載っているかは git status で確認します。これは作業中に最もよく使うコマン…
ブランチとマージブランチは履歴を枝分かれさせる仕組みで、本流に影響を与えずに新機能や修正を試せます。git branch で一覧や作成を行い、…
リモートと同期(remote / push / pull)手元のリポジトリと、GitHubなどサーバー上のリポジトリ(リモート)をやり取りすると、他の人と変更を共有できます。リモートの…
.gitignore で除外する.gitignore は「履歴に含めたくないファイル」を指定するテキストファイルです。ビルド生成物・ログ・パスワードを含む設定…
取り消し操作の基本(restore / reset)Gitでは操作を取り消す方法が状況ごとに分かれています。作業ツリーの編集を捨てて元に戻すには git restore、ステージ…
作業を一時退避する(stash)作業の途中でも、コミットするほどまとまっていない変更を抱えたままブランチを切り替えたい場面は多くあります。そんなときに使うのが…
タグとリリース(tag)「このコミットが v1.0.0 として世に出したバージョンだ」という目印を付けたいとき、Gitではタグを使います。軽量タグと注…
履歴を整える(amend・rebase)コミットメッセージを直したい、枝分かれした履歴をまっすぐに整えたい。そんなときに使うのが commit --amend と r…
差分と経緯を調べる(diff・blame)「何が変わったのか」「なぜこう変えたのか」を調べる力は、コードを書く力と同じくらい大事です。git diffで作業ツリー・ステ…
チーム開発の流れ——Pull RequestGitHubなどのホスティングサービスを使うと、Gitの履歴管理にレビューという工程が加わります。clone→ブランチ→pus…
8. コンテナ Docker/Podman
コンテナとイメージの違い
コンテナを学ぶ最初の関門が「イメージ」と「コンテナ」の区別です。イメージはアプリと実行に必要なファイル一式を固めた読み取り専用…
コンテナの起動と管理コンテナの基本操作は、起動する・一覧する・止める、の3つです。docker run でイメージからコンテナを起動し、-d を付…
イメージの取得とビルドイメージは2通りで手に入ります。1つは docker pull でレジストリ(Docker Hub など)から既成のイメージを…
ボリュームによる永続化コンテナは消すと中のデータも一緒に消えます。データベースのファイルなど残したいものは、ボリュームを使ってコンテナの外に保存しま…
ポート公開でアクセスするコンテナ内で動くWebサーバなどに外からアクセスするには、ポートを公開する必要があります。docker run の -p オプ…
ログ確認とコンテナ内操作動いているコンテナの様子を知る基本が docker logs です。コンテナが標準出力に書いた内容を表示し、-f を付ければロ…
Podman との関係Podman は Docker とよく似たコンテナ管理ツールで、RHEL系(MiracleLinux など)で標準的に使われま…
Dockerfileの実践——軽く・速くDockerfileはただ書けば動くというものではありません。書き方ひとつでビルド時間もイメージの容量も大きく変わります。ここ…
Docker Composeで複数コンテナ実務のアプリはコンテナ1つでは完結せず、アプリ本体とデータベースのように複数のコンテナが組んで動くのが普通です。Docker …
コンテナのネットワーク複数のコンテナを連携させるとき、コンテナ同士はどうやって相手を見つけて通信するのでしょうか。Dockerは既定でbridgeと…
イメージの配布——レジストリとタグ自分でビルドしたイメージを他のマシンやチームに届けるには、レジストリと呼ばれる保管庫にアップロードします。ここではDocker…
コンテナ運用の基本——再起動・資源・掃除コンテナを本番に近い形で動かし続けるには、落ちたときにどう復帰させるか、暴走したときにホストをどう守るか、そして不要になったも…
9. Raspberry Pi セットアップ
Raspberry Pi OS の書き込み(Imager)
Raspberry Pi は本体にストレージを内蔵せず、microSDカードにOSを書き込んで起動します。書き込みには公式ツー…
初回設定(raspi-config)初めて起動したあとの各種設定は、付属の設定ツール raspi-config でまとめて行えます。sudo raspi-conf…
SSH と VNC の有効化ラズパイはモニターやキーボードをつながず、別のPCから遠隔操作するのが一般的です。文字ベースで操作するならSSH、デスクトップ…
ネットワーク設定とIPアドレスの確認遠隔操作するには、ラズパイが今どのIPアドレスを持っているかを知る必要があります。最も手軽なのは hostname -I で、…
パッケージの更新OSを書き込んだ直後は、まずソフトウェアを最新の状態にするのが基本です。Raspberry Pi OS は Debian 系な…
GPIOピンの概要ラズパイの大きな特徴は、基板上に並ぶ40本のピン(GPIOヘッダ)です。GPIOは汎用入出力の意味で、LEDを光らせたりセンサ…
温度や状態の確認ラズパイは小型のため、高負荷が続くとCPU温度が上がり、性能を自動で落とす(サーマルスロットリング)ことがあります。状態の確認…
必要なハードと初回起動の流れ本体・電源・microSD・放熱・ケーブルなど、ラズパイを動かすのに最低限そろえる物と、電源を入れてから最初のデスクトップが出…
ヘッドレスセットアップ(画面なしで初期設定)モニターやキーボードをつながず、Imagerの詳細設定でSSH有効化・Wi-Fi・ユーザー名を先に書き込んでおき、電源を入れる…
固定IPアドレスの設定遠隔操作するたびにIPが変わると困るので、有線eth0などに固定IP・サブネットマスク・ゲートウェイ・DNSを割り当てる考え方…
周辺機器を使う(raspi-configでI2C・カメラを有効化)センサーやカメラをつなぐ前に、raspi-configのInterface Optionsから必要なインタフェース(I2C・S…
SDカードのバックアップとOSの復旧microSDは壊れやすいので、動いている環境をイメージとして丸ごと保存しておき、破損したら書き戻して復旧する考え方を学ぶ。I…
安全なシャットダウンと電源断ラズパイはコンセントをいきなり抜くとファイルが壊れることがある。shutdownやrebootでOSを正しく止めてから電源を切…
10. システムコール
システムコールとは(ユーザ空間とカーネル空間の境界)
プログラムが画面表示・ファイル読み書き・通信などを行うとき、ハードウェアを直接触ることはできません。これらはカーネルだけが持つ…
主要なシステムコール(open/read/write/close)ファイル操作の土台は open・read・write・close の4つのシステムコールです。open はファイルを開き、成功…
プロセス生成(fork/exec/wait)Linuxで新しいプログラムを動かす基本は fork と exec の組み合わせです。fork は呼び出したプロセスをほぼ丸ご…
strace でシステムコールを観察するstrace は、あるコマンドが内部でどのシステムコールを、どんな引数で呼び、何を返したかを順番に表示するツールです。プログラ…
man 2 でシステムコールを調べるLinuxのマニュアルはセクション番号で分かれており、セクション2がシステムコール、セクション3がライブラリ関数です。同じ名前…
errno とエラー処理の考え方多くのシステムコールは、成功すると 0 以上の値を、失敗すると -1 を返します。「なぜ失敗したか」は戻り値そのものではなく、…
ライブラリ関数とシステムコールの違いprintf や fopen はC標準ライブラリ(libc)の関数で、システムコールそのものではありません。これらは内部でバッ…
システムコールの呼び出し機構(番号・トラップ・ラッパ)read や write を呼ぶと何が起きるのか。番号付けされたシステムコールが、CPUのトラップ(ソフト割込み)でカーネルへ…
メモリマッピング(mmap / munmap)ファイルをメモリの一部として直接読み書きする mmap の考え方。read/write を繰り返さずポインタでアクセスできる仕…
シグナル(sigaction / kill / raise)Ctrl+Cや異常終了の正体であるシグナル。sigactionでハンドラを登録し、killやraiseで送る流れと、捕まえられ…
パイプによるプロセス間通信(pipe / dup2)シェルの | の裏側にあるpipe。片方向のデータ管を作り、forkした親子でファイルディスクリプタを引き継いで通信する。du…
デバイス制御(ioctl)read/writeでは表しきれないデバイス固有の操作を担うioctl。ファイルディスクリプタとコマンド番号を渡して、時計やシ…
11. デバイスドライバ実装
カーネルモジュールとは
Linuxカーネルは、機能をあとから追加・取り外しできる「カーネルモジュール」という仕組みを持っています。デバイスドライバの多…
モジュールの確認と操作モジュールはコマンドで一覧・調査・着脱ができます。lsmod でいま組み込まれているモジュールの一覧を見て、modinfo で…
デバイスファイルと /devLinuxでは「すべてはファイル」という思想のもと、ハードウェアもファイルとして扱います。その入口が /dev ディレクトリに…
キャラクタ型デバイスの概要デバイスファイルは大きく「キャラクタ型」と「ブロック型」に分かれます。キャラクタ型は1バイトずつ順番にやり取りする機器で、キー…
メジャー番号とマイナー番号デバイスファイルは名前ではなく、2つの番号でカーネル内のドライバと結びつきます。メジャー番号は「どのドライバが担当するか」を、…
dmesg でカーネルログを確認するドライバ開発では「カーネルが何を言っているか」を読むことが何より大切です。カーネルやモジュールが出力するメッセージはカーネルリ…
Hello World モジュールの流れ(概念)最初のドライバ学習は、メッセージを出すだけの「Hello World モジュール」を作る流れで全体像をつかみます。C言語で初期…
モジュールのMakefileとビルド(kbuild)モジュールのソースは普通の gcc ではビルドできない。動作中のカーネルに付属するビルド環境(kbuild)を使い、専用の M…
printk とログレベルprintk はカーネル空間からログを出す関数で、メッセージの先頭に KERN_INFO や KERN_ERR といったログレ…
file_operations とハンドラ登録アプリの open・read・write・close は、ドライバ側のどの関数に届くのか。その対応表が file_operat…
キャラクタ型デバイスの登録(alloc_chrdev_region と cdev)自作のキャラクタ型ドライバをカーネルに認識させるには、まず alloc_chrdev_region で空きメジャー番号を動的に…
ユーザ空間とのデータ受け渡し(copy_to_user / copy_from_user)ドライバの read/write に渡されるバッファはユーザ空間のアドレスで、カーネルから直接読み書きしてはいけない。1バイト…
12. セキュリティ/権限強化
最小権限の考え方
セキュリティの土台は「必要な人に、必要な分だけ、必要な間だけ権限を与える」という最小権限の原則です。常に管理者(root)で作…
ユーザ権限とsudosudo は「この1コマンドだけ管理者として実行する」ための仕組みです。root に直接ログインする代わりに、許可された一般ユ…
SSH鍵認証と堅牢化SSH はリモートのサーバへ安全に接続する仕組みです。パスワード認証は総当たり攻撃に弱いため、公開鍵認証への切り替えが推奨され…
ファイアウォール(firewalld / nftables)ファイアウォールは、どの通信を通し、どれを遮断するかを決める「関所」です。必要なポートだけを開け、それ以外を閉じることで攻撃の…
SELinux / AppArmor の概要通常のパーミッションに加えて、より強力にプロセスの行動を縛る仕組みが MAC(強制アクセス制御)です。RHEL/Miracle…
パスワードとアカウント管理アカウントの安全はパスワードの管理から始まります。passwd で自分や他ユーザのパスワードを変更し、推測されにくい長く複雑な…
fail2ban で不正アクセスを防ぐインターネットに公開したサーバには、ログイン試行を繰り返す自動攻撃が日常的に届きます。fail2ban はログ(例: SSHの…
sudoersの安全な設計(visudo)sudoは強力なぶん、設定を誤ると管理者権限が漏れたり、逆にsudoが誰も使えなくなったりします。設定ファイル /etc/su…
umaskと特殊権限(suid・sgid・sticky)ファイルの権限は作られた瞬間から始まっています。その初期値を決めるのがumaskです。さらにLinuxには通常のrwxとは別に…
セキュリティ更新の運用サーバーは一度立てたら終わりではありません。日々新しい脆弱性が見つかり、CVE番号で管理・公開されます。この記事では、CVEの…
ログで異変に気づく(last・lastb・journalctl)不正アクセスは、多くの場合ログに痕跡を残します。ログイン履歴を見るlast、ログイン失敗を見るlastb、いま誰が使っているか…
暗号化とハッシュの基礎(gpg・sha256sum)「ハッシュ」と「暗号化」は似ているようで役割がまったく違います。ハッシュは改ざん検知の指紋、暗号化は鍵がないと読めなくする仕組…
13. ストレージ/ファイルシステム
ブロックデバイスとパーティション
ハードディスクやSSD、USBメモリは「ブロックデバイス」として扱われ、/dev/sda や /dev/nvme0n1 のよう…
ファイルシステムの作成(mkfs)パーティションはそのままでは使えず、ファイルを置けるようにする「ファイルシステム」を作成(フォーマット)する必要があります。L…
マウントとアンマウントLinuxではファイルシステムを使う前に、ディレクトリツリーのどこかに接続する「マウント」が必要です。接続先のディレクトリを「…
/etc/fstab による永続マウントmount コマンドでの接続は再起動すると消えます。起動時に自動でマウントするには、設定ファイル /etc/fstab に1行…
ディスク使用量の確認容量不足はトラブルの定番原因です。df はファイルシステム単位の空き容量と使用率を一覧し、-h を付けると人が読みやすい単位(…
LVM(PV/VG/LV)の概要LVM(論理ボリュームマネージャ)は、物理ディスクを抽象化して柔軟に容量を扱う仕組みです。物理ディスクやパーティションを「物理…
RAIDの概要RAIDは複数のディスクを束ねて、速度や耐障害性を高める技術です。RAID0は分散書き込みで高速ですが冗長性がなく、RAID1…
rsyncでバックアップrsyncは、変更があった部分だけを送るバックアップ専用のコピーツールです。cpのように毎回全部を丸ごと運ぶ必要がないので、2…
スナップショット——巻き戻せる保険スナップショットは、ある瞬間のディスクの状態をまるごと凍結する仕組みです。フルコピーを作るわけではなく変更点だけを追跡するので…
スワップの作成と調整スワップは、メインメモリが足りなくなったときにディスクの一部を臨時のメモリとして使う仕組みです。ディスクはメモリよりずっと遅い…
ディスクの健康診断と修復(smartctl・fsck)ディスクにも人間ドックのような自己診断があり、それがS.M.A.R.T.です。smartctlコマンドで代替セクタ数や残り寿命…
14. プロセス監視/障害対応
障害対応の手順の考え方
障害対応はやみくもに触るのではなく、決まった順序で切り分けると速く確実です。まず「いつ・何が・どう変わったか」を現象として正確…
リソース監視(CPU・メモリ・負荷)サーバが重いと感じたら、まずCPU・メモリ・負荷の3点を見ます。uptime や top でロードアベレージを確認し、CPUコ…
プロセスの調査リソースを食っている犯人を特定するには、プロセス単位で見ます。top や htop はCPU・メモリ順に並べ替えられるので、上…
ログの調査(journalctl・dmesg)障害の原因はログに残っていることが多く、現象を把握したら真っ先に確認します。systemd環境では journalctl で各…
ディスク満杯の調査と対処「書き込めない」「サービスが起動しない」障害の典型原因がディスク満杯です。まず df -h で各マウントポイントの使用率を見て…
ネットワーク疎通の切り分け「つながらない」障害は、どの層で止まっているかを順に切り分けます。まず ping で相手まで届くかを確認し、応答がなければ経路…
開いているファイル・ポートの確認Linuxではファイルもソケットも「ファイルディスクリプタ」として扱われ、lsof で誰が何を開いているかを一覧できます。ls…
メモリ不足とOOM Killerメモリが足りなくなると、Linuxはまずスワップに逃げて延命し、それでも足りなければカーネルがプロセスを強制終了して全滅を防ぎ…
ディスクI/Oが遅いとき(iostat・iotop)「CPUは暇なのにやけに重い」と感じたら、犯人はディスクの読み書き待ち、つまりI/Oかもしれません。top の wa やロード…
サービスが起動しない・落ちるときsystemdサービスが起動に失敗したり、動いていたはずが落ちていたりするときは、systemctl status で状態と直…
起動しないときの立て直しシステムが起動しないのはもっとも緊張する障害ですが、GRUB→カーネル→initramfs→systemdという起動段階のどこ…
平常値を知る——ベースラインという武器「いつもと違う」と言うには「いつも」の値を知っている必要があります。vmstatやsar(sysstat)で負荷・メモリ・I/…
15. 自動化/定期実行
cron による定期実行のしくみ
決まった時刻や間隔でコマンドを自動実行したいときは cron を使います。cron は常駐しているデーモン(crond)が一定…
crontab の書式(5フィールド)crontab の1行は「分 時 日 月 曜日 コマンド」の順で書きます。先頭の5つが実行タイミングを表すフィールドで、それぞ…
systemd timer による定期実行近年のディストリビューションでは cron の代わりに systemd の timer ユニットで定期実行を組む方法が広く使わ…
at による単発予約「繰り返しではなく、一度だけ後で実行したい」処理には at を使います。at に時刻を渡すと専用のプロンプトが開き、入力したコ…
シェルスクリプトと組み合わせた自動化定期実行では、1行のコマンドではなく複数の処理をまとめたシェルスクリプトを呼び出すのが定石です。スクリプト先頭に #!/bin…
環境変数と PATH の注意点cron で動かしたスクリプトが「手で打つと動くのに失敗する」最大の原因は環境変数の違いです。cron はログインシェルを通さ…
Ansible の概要(ad-hoc と playbook)複数台のサーバへ同じ設定を一斉に適用したいときは Ansible が便利です。Ansible は管理対象にエージェントを常駐さ…
Ansible playbookを書くAnsible の ad-hoc コマンドは単発の作業には便利ですが、手順が増えると1行では収まりません。そこで登場するのが …
ログローテーション(logrotate)サーバーは動いている限りログを吐き続けます。放っておくとログファイルはどこまでも太り、いつかディスクを食い潰してサービスを止め…
自動処理の結果を通知する自動化でいちばん怖いのは、失敗したことに誰も気づかないことです。動いているつもりのバックアップが3週間前から止まっていた、とい…
変化を見張って動かす(inotifywait・systemd path)定期実行は「時間が来たら動く」仕組みですが、世の中には「置かれた瞬間に処理したい」場面があります。1分ごとに見に行く cron…
16. C・ビルドツール
gccでCソースをコンパイルする
Cのソースコードは、そのままでは実行できません。コンパイラ gcc に渡して、CPUが解釈できる機械語の実行ファイルへ変換しま…
コンパイルの4段階gcc は内部で4つの工程を順に実行しています。まず前処理(プリプロセス)で #include や #define を展開し、…
ヘッダとライブラリのリンク標準入出力の printf などは、ヘッダファイル(.h)で関数の宣言を取り込み、実体はライブラリ側にあります。コンパイラは …
Makefileの基本ソースが増えると毎回長い gcc コマンドを打つのは大変です。Makefile にビルド手順を書いておけば、make と打つだ…
警告とデバッグ情報(-Wall -g)コンパイルが通っても、潜在的なバグが残っていることはよくあります。-Wall を付けると未使用変数や型の取り違えなど、多くの警…
gdbによるデバッグプログラムが期待通り動かないとき、gdb を使うと実行を一時停止させて内部状態を調べられます。-g 付きでビルドした実行ファイ…
共有ライブラリの確認Linuxの実行ファイルの多くは、共有ライブラリ(.so)を実行時に読み込む形でビルドされています。ldd ./prog と打…
Makefile実践——変数・パターンルール前回のMakefile基本では、決め打ちのターゲットを並べるだけでした。しかし複数のソースファイルを扱う実際のプロジェクトでは…
ライブラリを作る(ar・-fPIC・soname)自分のコードを他のプログラムから使い回したくなったら、ライブラリという形にまとめます。作り方には静的ライブラリ(.a)と共有ラ…
configure・CMakeの世界地図インターネットで拾ってきたソースコード一式を自分でビルドしようとすると、多くの場合「./configure && make &…
17. OS内部/起動の仕組み
起動シーケンスの全体像
電源投入からログインプロンプトまでには、いくつもの段階が順に実行されます。まずファームウェア(BIOSまたはUEFI)がハード…
ブートローダ GRUB の役割GRUB(GRand Unified Bootloader)は、ファームウェアとカーネルの橋渡しを担うプログラムです。起動時に…
systemd と unit / targetsystemd は現代の多くのディストリビューションで採用されている、最初のユーザ空間プロセス(PID 1)です。管理対象を「…
/proc 疑似ファイルシステム/proc はディスク上に実体を持たない疑似ファイルシステムで、カーネルが保持する情報をファイルのように見せてくれます。/pr…
/sys 疑似ファイルシステム/sys はカーネルが認識しているデバイスやドライバ、バスの構造を階層的に公開する疑似ファイルシステムです。/proc が主に…
起動時間の分析起動が遅いと感じたら、原因を勘で探す前に計測します。systemd-analyze は、ファームウェア・ブートローダ・カーネル…
カーネルとバージョン確認OSの中核であるカーネルは、ハードウェアとソフトウェアの間に立ち、メモリ・プロセス・デバイスを管理します。動作中のカーネルの情…
カーネルモジュールの管理(lsmod・modprobe)カーネルはすべての機能を最初から一枚岩で抱え込んでいるわけではなく、ドライバなどの部品を後から差し込める仕組みを持っています。…
仮想メモリの仕組み——ページとキャッシュ動いているプロセスはそれぞれ、自分専用の広大なメモリ空間を見ているつもりでいますが、これは仮想アドレスというカーネルが見せてい…
namespaceとcgroups——コンテナの土台コンテナは特別な仮想化技術ではなく、カーネルが元から持つ2つの機能の組み合わせで実現されています。namespace はプロセ…
18. クロスコンパイル
クロスコンパイルとは
クロスコンパイルとは、プログラムを動かす機械(ターゲット)とは別の機械(ホスト)の上でビルドする手法です。組込みLinuxでは…
クロスツールチェーンの構成クロスツールチェーンは、ターゲット向けのバイナリを作るために必要な道具一式です。中心となるのはコンパイラ(gcc)ですが、それ…
トリプレットとABIトリプレットは、ターゲットの素性を表す識別子で、おおむね「アーキテクチャ-ベンダ-OS-ABI」の形をとります。たとえば ar…
ターゲット向けgccでビルドする実際のビルドは、ネイティブの gcc の代わりにトリプレット付きのクロスコンパイラを呼ぶだけです。たとえば arm-linux…
生成バイナリのアーキを確認するクロスコンパイルで一番やりがちな失敗は、うっかりネイティブの gcc を呼んでホスト向けのバイナリを作ってしまうことです。これ…
sysrootとライブラリターゲット用のプログラムが外部ライブラリ(たとえば libssl や zlib)を使う場合、リンク時にはホスト用ではなくターゲ…
MakeとconfigureでのCROSS_COMPILE1ファイルなら手でクロスgccを呼べば済みますが、実際のプロジェクトは Makefile や configure 経由でビルド…
19. 組込みビルド Yocto/Buildroot
組込みLinuxイメージを自作するとは
PCのLinuxはディストリビューションをインストーラで導入しますが、組込み機器ではターゲットのCPUやストレージに合わせてO…
Buildrootの概要と使い方BuildrootはMakefileとKconfigだけで構成された、軽量で理解しやすいビルドシステムです。make menu…
Yoctoの概要(レイヤ・レシピ・BitBake)Yocto Projectは、レシピ(recipe)・レイヤ(layer)・BitBakeという3つの仕組みで成り立つ大規模な…
カーネル・rootfs・ブートローダの一括生成ビルドシステムが「OSを組み立てる」とは、別々に開発されている部品をまとめて作ることを指します。具体的には、ハードを制御するL…
生成物を確認するビルドが終わったら、書き込む前に成果物を点検します。ls -lh で出力ディレクトリを眺め、カーネルイメージ・rootfsアー…
BuildrootとYoctoの使い分け両者は同じ「イメージ自作」を担いますが、設計思想が異なります。Buildrootは構成が単純で初回ビルドが速く、小規模で固定的…
BuildrootをカスタマイズするBuildrootで最小イメージを作れるようになったら、次は「自分の欲しい形」に仕立てる番です。ここでは make menuc…
Yoctoレシピを書く(.bb・レイヤ)Yoctoの本当の力は「自分のソフトを組込みイメージに組み込む」ところで発揮されます。その設計図がレシピ(.bb ファイル)で…
イメージの書き込みと起動確認ビルドが通っても、実機で起動して初めて完成です。ここでは出来上がったイメージ(sdcard.img や .wic)を micr…
20. ブートローダ U-Boot
ブートローダの役割
電源投入直後のSoCはROM内の小さなコードしか実行できず、Linuxカーネルをいきなり起動することはできません。ブートローダ…
U-BootとはU-Boot(Das U-Boot)は、組込みLinuxで広く使われるオープンソースの二次ブートローダです。多数のSoC・ボー…
U-Bootの環境変数U-Bootの挙動は「環境変数」で制御します。printenv で一覧や個別の値を確認し、setenv で変数を作成・変更・削…
起動の流れとbootcmdU-Bootは起動時、まず bootdelay 秒だけコンソール入力を待ちます。この間にキー入力がなければ、環境変数 boot…
カーネルとデバイスツリーのロードLinuxを起動するには、カーネルイメージ(uImage / zImage / Image など)と、ハードウェア構成を記述し…
ネットワーク経由起動(TFTP)の概要開発中はカーネルを書き換えるたびにストレージへ焼き直すのは手間です。U-Bootはネットワークから直接イメージを取得でき、tf…
デバイスツリー(DTB)の役割ARMなどの組込み環境では、接続されている周辺機器をカーネル自身が自動検出できないため、ハードウェア構成を外部データとして与え…
21. 実機制御 GPIO/I2C/SPI・RT
GPIOの基本と制御(libgpiod)
GPIOは基板上のピンを汎用の入出力として使う仕組みで、LEDの点灯やボタンの読み取りといった実機制御の土台になります。現在の…
sysfs方式の概要(/sys/class/gpio・非推奨)かつてGPIOは /sys/class/gpio 以下に echo でピン番号を書き込み、export して directio…
I2Cデバイスの検出と読み取りI2CはSDA(データ)とSCL(クロック)の2本でセンサやEEPROMなど複数のデバイスを数珠つなぎにできる通信方式で、各デ…
SPIの概要SPIはMOSI・MISO・SCLK・CSの4線を使う高速なシリアル通信で、I2Cよりも速度が出る反面、デバイスごとにCS(チ…
PWMの概要PWM(パルス幅変調)は一定周期の中でHIGHの時間(デューティ比)を変えることで、LEDの明るさやモータの速度、サーボの角度…
リアルタイムLinux(PREEMPT_RT)の概要通常のLinuxは「平均的に速い」ことを目指す汎用OSで、ある処理が必ず期限内に終わる保証(リアルタイム性)はありません。PR…
ピン配置の確認実機制御の事故の多くは「どのピンが何か」の取り違えから起きます。物理ピン番号(基板上の1〜40)とBCM番号(SoC内部の論理…
UART/シリアル通信UARTは、たった2本の線で文字をやり取りする、いちばん素朴で頼れる通信です。組込みでは画面もネットワークも無い状態が普通にあ…
ミニ工作——I2C温度センサを記録するここまで学んだ部品を1本の線でつなぎ、小さな作品を完成させます。作るのは「温度をずっと記録し続ける装置」。センサをI2Cで4本…
カメラを使う(libcamera・V4L2)最後の入出力はカメラです。Linuxでは映像入力を V4L2 という共通の口(/dev/video0)で扱い、USBカメラの多…
22. AI時代のLinux
AIの土台は今日もLinux
ChatGPTやClaudeに質問すると一瞬で答えが返ってきますが、その裏側では膨大な数のサーバーが休みなく働いています。そし…
AIとCLIはなぜ相性がいいのかAIエージェントがパソコンを操作するとき、実はマウスよりもキーボードのコマンドのほうが得意です。CLI(コマンドライン)は文字…
ローカルLLMを動かす——OllamaクラウドのAIサービスを使うだけでなく、自分のLinuxマシンの中でAIモデルそのものを動かす方法を学びます。Ollamaとい…
Claude Code——ターミナルで動くAIエージェントClaude Codeは、ターミナルの中で動くAIコーディングエージェントです。チャット画面で会話するだけのAIとは違い、実際…
AIエージェントと権限——安全に走らせる設計Claude CodeのようなAIエージェントは、指示を受けてコマンドを実際に実行できる強力な存在です。しかしAIは間違えるこ…
AIを学習の相棒にするLinuxを学ぶとき、いまやAIチャットは辞書であり先生でもあります。エラーメッセージの読み方やコマンドの意味を聞けば、その場…
MCP——AIがツールにつながる共通規格AIチャットは会話するだけでは、ファイルを読んだりコマンドを実行したりできません。AIに「手足」を与える共通規格がMCP(Mo…
エッジAI×組込みLinuxAIの推論をクラウドに送らず、手元の機器そのもので行う考え方をエッジAIと呼びます。ラズパイとカメラを組み合わせた画像認識は定…
AIインフラを支えるLinux技術世界のAIを動かしているのは、GPUをたくさん積んだLinuxサーバの群れです。この回では、そのAIインフラを支える技術——G…
これからのLinuxスキル戦略AIはとても強力な道具ですが、だからこそLinuxを学ぶ意味はむしろ大きくなっています。この最終回では、AIによって「変わるこ…