コース一覧
LinuC レベル1(LPIC-1対応)対策
ロケールと文字コード

LinuC レベル1(LPIC-1対応)対策

ブートとsystemd、パッケージ管理(APT/RPM両系統)、コマンドとviの操作、ファイルシステム、シェルスクリプト、ユーザー管理とセキュリティ、ネットワークまで、LinuC レベル1(LPIC-1対応)の全出題範囲を、毎レッスン実際にコマンドを打って確かめながら学べる対策コースです。ブラウザの中で本物の Debian 12 が動いていて、62レッスンのうち36本は読むだけで終わらず、自分の手でコマンドを打った結果で採点されます。Linux入門を修了した方を対象としています。101・102それぞれの模試60問で分野別の弱点を洗い出し、直前チェックで暗記事項を固めてから本番に臨めます。

1
試験ガイダンス
01. LinuC/LPICとは15分
02. LinuCとLPICの選び方15分
03. 学習計画15分
04. 出題形式を体験15分
2
101 ブートとアーキテクチャ
01. ブートの流れ18分
02. GRUB15分
03. systemdとターゲット18分
04. ハードウェア情報18分
05. カーネルモジュール18分
06. 過去問 アーキテクチャ15分
3
101 パッケージ管理
01. Debian系パッケージ18分
02. RPM系パッケージ15分
03. 両系統の対応表15分
04. リポジトリ管理18分
05. 共有ライブラリ18分
06. 過去問 パッケージ管理15分
4
101 GNU/Unixコマンド
01. ファイル操作の試験オプション18分
02. テキスト処理18分
03. ストリームとリダイレクト18分
04. プロセス監視18分
05. 優先度18分
06. grepと正規表現18分
07. viの操作15分
08. 過去問 コマンド15分
5
101 ファイルシステム
01. パーティション15分
02. 作成とマウント18分
03. fstabとUUID18分
04. パーミッションとリンク18分
05. 容量とクォータ18分
06. findとlocate18分
07. 過去問 ファイルシステム15分
6
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
7
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
8
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
9
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分
10
模試と直前対策
01. 模試 10190分
02. 101弱点復習15分
03. 模試 10290分
04. 102弱点復習15分
05. 直前チェック15分
06. 受験と次のステップ15分

ロケールと文字コード

同じコマンドなのにメッセージが英語になったり日本語になったり、sort の並び順が環境によって変わったり。その裏にあるのがロケールです。優先順位は選択肢を作りやすいので繰り返し問われます。なお、この学習環境で使えるロケールは C と C.UTF-8 と POSIX の3つだけです。

LC_ALL が最強、LANG が最弱

LC_ALL は個別の LC_* をまとめて上書きし、その個別指定が無い分野に LANG の値が使われます。

ターミナル

LANG=C.UTF-8 LC_TIME=C # 時刻表示だけが C ロケール、それ以外は C.UTF-8 LC_ALL=C # この一行で上の2つは両方とも無視され、すべて C ロケールになる

スクリプトの中で出力を安定させたいときに LC_ALL=C を付ける習慣があるのは、この全部を強制的に上書きする性質を使っているからです。

変数制御するもの
LANGすべての LC_* の既定値。個別指定が無ければこれ
LC_ALLすべての LC_* を強制的に上書きする
LC_CTYPE文字の分類と大文字小文字の変換
LC_COLLATE文字列の照合順序。sort の並び順を決める
LC_TIME日付と時刻の表示形式。曜日や月の名前
LC_MESSAGESコマンドが出すメッセージの言語
LC_NUMERIC数値の書式。小数点や桁区切り。LC_MONETARY は通貨

locale は現在有効なロケール変数の一覧、locale -a は利用できるロケールの一覧、locale -k LC_TIME は指定した分類の詳細です。systemd 環境なら localectl status で全体の設定を見て、localectl set-locale で設定します。

sort の順序を決めるのは LC_COLLATE

LC_COLLATE=C ではバイト値そのままの順で並ぶため、大文字がすべて小文字より前に来ます。ASCII では A が 0x41、a が 0x61 だからです。一方 en_US.UTF-8 のような言語ロケールでは辞書順の規則が働き、大文字小文字を区別せずに並べたり記号を無視したりします。同じファイルを並べ替えても結果が違うので、スクリプトで並び順に依存するときはロケールを明示します。順序を決めるのは LC_CTYPE ではなく LC_COLLATE だ、という取り違えが定番の出題です。

Unicode は文字集合、UTF-8 は符号化方式

名前説明
ASCII7ビット。英数字と記号のみ。128文字
ISO-8859-18ビット。西欧言語用に ASCII を拡張したもの
EUC-JPUNIX 系で使われてきた日本語コード
Shift_JISWindows 系の日本語コード。2バイト目が ASCII と重なる範囲がある
Unicode世界中の文字に番号を振った文字集合そのもの
UTF-8Unicode の符号化方式。ASCII 互換で、日本語は1文字3バイトが基本
UTF-16Unicode の符号化方式。基本的に1文字2バイト。ASCII 互換ではない

UTF-8 では ASCII の範囲が1バイトのまま変わらないので、英数字だけのファイルはそのまま UTF-8 として読めます。

文字コードの変換は iconv

ターミナル

iconv -f EUC-JP -t UTF-8 old.txt > new.txt iconv -l

-f が変換元、-t が変換先、-l が使える文字コードの一覧、-o が出力先ファイル、-c が変換できない文字を捨てて続行する指定です。

日本語向けには nkf もよく使われます。-w で UTF-8 へ、-e で EUC-JP へ、-s で Shift_JIS へ、-g で文字コードの判別です。改行コードも変えられ、-Lu で LF、-Lw で CRLF になります。

ロケールの設定ファイル

Debian 系はシステム全体の既定を /etc/default/locale に、Red Hat 系と systemd は /etc/locale.conf に書きます。生成するロケールの一覧は /etc/locale.gen にあり、使う行のコメントを外してから locale-gen を実行すると、そのロケールのデータが生成されて locale -a に現れます。この2段構えが試験で問われます。

試験で狙われるところ

LC_ALL は最強で、設定されていると LANG も個別の LC_* も無視されます。LANG は最弱の既定値で、上書きする力を持ちません。sort の順序を決めるのは LC_COLLATE です。メッセージの言語は LC_MESSAGES、時刻の書式は LC_TIME です。そして locale -a は利用できるロケールの一覧、locale だけなら現在の設定値です。

ヒント

①方針 記録用のファイルを1つ作り、見出しを echo で書いてから、その下にコマンドの結果を >> で追記していく、という繰り返しです。上書きの > と追記の >> を取り違えないでください

②使うコマンド 一覧は locale -a、曜日は date +%A、並び替えは sort、バイト数は wc -c です。1コマンドだけロケールを変えたいときは LC_ALL=C コマンド のように前に置きます

③部分解 echo LOCALES > /root/locale-report.txt のあと locale -a >> /root/locale-report.txt。続けて echo WEEKDAY_C >> ... と LC_ALL=C date +%A >> ...。並び替えは printf 'banana\nApple\ncherry\nBanana\n' | LC_ALL=C sort >> ... です

  • 1. /root/locale-report.txt を新しく作り、そこに結果を追記していく
  • 2. locale -a の出力を LOCALES という見出しに続けて記録する
  • 3. LC_ALL=C date +%A の結果を WEEKDAY_C という見出しに続けて記録する
  • 4. printf 'banana\nApple\ncherry\nBanana\n' を LC_ALL=C sort に通した結果を SORT_C という見出しに続けて記録する
  • 5. 日本語1文字が UTF-8 で何バイトになるかを wc -c で数え、BYTES という見出しに続けて記録する
  • 6. 最後に cat /root/locale-report.txt で全体を読み返す

5 項目で採点します