1. 主題1.01:Linuxのインストールと仮想マシン・コンテナの利用
1.1. 1.01.1 Linuxのインストール、起動、接続、切断と停止【★★★★】
1.1.1. セクション概要
1.1.1.1. Linux をDVDやISOイメージファイルを用いて物理マシンや仮想マシンにインストールできる。
1.1.1.2. 物理マシンや仮想マシンのLinux の起動と停止ができる。
1.1.2. セクション詳細
1.1.2.1. UEFI/BIOS の設定でブートメディアの優先順位を変更できる。
1.1.2.2. 仕様書に従って、Linux のインストールを完了できる。
1.1.2.2.1. package groupの選定, timezone, password, GUI/CUI
1.1.2.3. Linux システムの起動と停止ができる。
1.1.2.3.1. shutdown, reboot, halt
1.1.2.4. Linux システムに鍵を使って接続し、正常に切断できる。
1.1.2.4.1. ssh
1.1.2.4.2. ~/.ssh/authorized_keys, ~/.ssh/known_hosts
1.1.2.4.3. ~/.ssh/id_rsa と id_rsa.pub
1.1.2.4.4. logout, exit, ^D
1.1.3. インストールのために
1.1.3.1. DVDなどからインストールする場合、起動順序をSDDでなくドライブ優先にする必要がある
1.1.3.2. BIOS/UEFIセットアップ画面にて指定可能
1.1.4. 起動と停止
1.1.4.1. shutdownコマンド
1.1.4.1.1. `-h`オプション...停止(halt)
1.1.4.1.2. `-r`オプション...再起動、時間指定可能(reboot)
1.1.4.1.3. `-c`オプション...時間指定したshutdownをキャンセル(cancel)
1.1.4.2. rebootコマンド
1.1.4.2.1. 再起動
1.1.4.2.2. 時間指定は不可能
1.1.4.3. haltコマンド
1.1.4.3.1. 停止
1.1.5. リモートログイン
1.1.5.1. ssh-copy-idコマンド
1.1.5.1.1. 公開鍵をサーバに配置できる
1.1.6. 関連知識
1.1.6.1. ランレベル
1.1.6.1.1. 0...停止
1.1.6.1.2. 6...再起動
1.1.6.1.3. なんかあったら1のシングルユーザモード(s/S)。サーバなら3。GUIは5
1.1.6.1.4. `runlevel` で確認
1.1.6.1.5. `telinit` または `init` で変更
1.1.6.2. wallコマンド
1.1.6.2.1. Write ALL
1.1.6.2.2. マルチユーザなOSであるLinuxにおいて、ログイン中の全ユーザにメッセージを送信できる
1.1.6.3. ctrl + alt + delキー
1.1.6.3.1. inittabファイルに定義した処理を実行
1.2. 1.01.2 仮想マシン・コンテナの概念と利用【★★★★】
1.2.1. セクション概要
1.2.1.1. 仮想マシンとコンテナを実現する基本技術を理解している。
1.2.1.2. ハイパーバイザー、コンテナのそれぞれの特徴と違いを理解する。
1.2.1.3. 仮想マシン、コンテナの起動、停止ができる。
1.2.2. セクション詳細
1.2.2.1. カーネルとハイパーバイザーと仮想マシンの関係を理解している。
1.2.2.1.1. ハイパーバイザー、仮想化支援機能
1.2.2.1.2. 仮想マシンとコンテナの特徴を理解している。
1.2.2.2. ホストOSとコンテナの関係を理解している。
1.2.2.3. 仮想マシンの起動と停止ができる。
1.2.2.3.1. virsh
1.2.2.4. 仮想マシンにログインできる。
1.2.2.5. コンテナの起動と停止ができる。
1.2.2.5.1. docker
1.2.3. 仮想マシンとは
1.2.3.1. KVM
1.2.3.1.1. Kernel-based Virtual Machine
1.2.3.1.2. ハイパーバイザーの上で仮想マシンが稼働し、その中でゲストOSが稼働
1.2.3.1.3. ※OSがスーパーバイザーなので、OSを管理できる仮想化はハイパーバイザー
1.2.3.2. パフォーマンスの低下が起きないよう、仮想化支援機能を持つCPUが一般になりつつある
1.2.3.2.1. IntelのVT-x
1.2.3.2.2. AMDのAMD-V
1.2.3.3. CPUの情報はlscpuコマンドで確認できる
1.2.3.3.1. "Virtualization"があれば仮想化支援あり
1.2.3.4. CPUの情報は/proc/cpuinfoでも確認できる
1.2.3.4.1. vmxまたはsvmが載っていれば仮想化支援あり
1.2.4. コンテナとは
1.2.4.1. 仮想マシンではない
1.2.4.2. 独立した環境でアプリケーションを動かす技術
1.2.4.3. ゲストOSを動かす必要がないので仮想化よりも早くサービスを起動できる
1.2.4.4. Docker, Kubernates(K8s)など
1.2.5. 仮想マシンの操作
1.2.5.1. virshコマンド
1.2.5.1.1. list: 仮想マシンの一覧を表示
1.2.5.1.2. start: 指定した仮想マシンを起動
1.2.5.1.3. console: 指定した仮想マシン内のOSの、コンソールに接続
1.2.5.1.4. shutdown: 指定した仮想マシンを停止
1.2.6. コンテナの操作
1.2.6.1. Dockerの基本操作は割愛
1.2.6.2. コンテナに接続中、Ctrl+P, Ctrl+Qで一旦抜けられる
1.2.6.3. 再接続は`docker attach`
1.3. 1.01.3 ブートプロセスと systemd【★★★★】
1.3.1. セクション概要
1.3.1.1. UEFI/BIOSからブート完了までのブート手順について理解している。
1.3.1.2. システムにおけるsystemdのブートターゲットを管理できる。これには、シングルユーザモードへの変更と、システムのシャットダウンまたはリブート、デフォルトのsystemdのブートターゲットの設定も含まれる。
1.3.2. セクション詳細
1.3.2.1. デフォルトのブートターゲットを設定する。
1.3.2.1.1. systemd, systemctl
1.3.2.2. ブートターゲット(シングルユーザモードを含む)を変更する。
1.3.2.2.1. systemctl
1.3.2.3. コマンドラインからシャットダウンおよびリブートする。
1.3.2.3.1. shutdown, halt, reboot, poweroff
1.3.3. ブートプロセス
1.3.3.1. BIOS/UEFI、ブートローダ、カーネル、initの順にブートプロセスが進む
1.3.3.2. UEFI/BIOS
1.3.3.2.1. マザーボードに搭載されているプログラムのこと。
1.3.3.2.2. UEFIのほうが新しい
1.3.3.2.3. ハードウェア、HDD等のチェックをする
1.3.3.2.4. デバイスにあるブートローダーを読み出して、制御を移す
1.3.3.3. ブートローダ
1.3.3.3.1. OSを起動させるもの
1.3.3.3.2. カーネルをメモリ上へ読み込む
1.3.3.4. カーネル
1.3.3.4.1. メモリの初期化、システムクロックの設定を行う
1.3.3.4.2. 初期RAMディスクをマウントする
1.3.3.4.3. 初期RAMディスクには、HDDにアクセスできるドライバがある
1.3.3.4.4. (HDDにある)initプロセス、またはsystemdプロセスを実行
1.3.3.5. initまたはsystemd
1.3.3.5.1. 最初に起動されるプロセスで、すべてのプロセスの先祖。
1.3.3.5.2. PIDは1
1.3.3.5.3. 「/etc/inittab」の設定をもとに実行される
1.3.3.5.4. Upstart, Systemd
1.3.4. ブートターゲット
1.3.4.1. multi-user
1.3.4.1.1. CUIログイン
1.3.4.2. graphical
1.3.4.2.1. GUI
1.3.4.3. poweroff
1.3.4.3.1. システム終了
1.3.4.4. rescue
1.3.4.4.1. シングルユーザ
1.3.4.5. reboot
1.3.4.5.1. システム再起動
1.3.4.6. デフォルトをpoweroffまたはrebootにしないこと
1.3.5. systemctlコマンド
1.3.5.1. systemdを管理する
1.3.5.2. systemctl [OPTIONS...] COMMAND [NAME...]
1.3.5.3. set-default, get-defaultがブートターゲットの設定、確認
1.3.5.4. `isolate ターゲット`で、指定したターゲットで再起動
1.4. 1.01.4 プロセスの生成、監視、終了【★★★】
1.4.1. セクション概要
1.4.1.1. 基本的なプロセス管理を行える。
1.4.2. セクション詳細
1.4.2.1. ジョブをフォアグラウンドやバックグラウンドで実行する。
1.4.2.1.1. &, bg, fg, jobs
1.4.2.2. ログアウト後にも実行が継続されるようにプログラムにシグナルを送信する。
1.4.2.2.1. nohup, screen, tmux
1.4.2.3. 活動中のプロセスを監視する。
1.4.2.3.1. top, ps, pstree, uptime
1.4.2.4. プロセス群を選択し、並べ替えて表示する。
1.4.2.4.1. pgrep
1.4.2.5. プロセスにシグナルを送信する。
1.4.2.5.1. kill, pkill, killall
1.4.3. プロセスとは
1.4.3.1. 実行中/実行可能状態のプログラム
1.4.3.2. 難しくいえば「動作中のプログラムをOSが管理する基本単位」
1.4.3.3. `コマンドA | コマンドB`とあるとき、各コマンドがプロセス
1.4.3.3.1. まとめた単位がジョブ
1.4.3.4. ちなみに「スレッド」とは
1.4.3.4.1. 1つのプロセスから生成される実行単位です
1.4.3.4.2. 同じプロセスから並行でスレッドを起動できる(マルチスレッド)
1.4.4. プロセスの管理
1.4.4.1. psコマンド
1.4.4.1.1. オプション
1.4.4.1.2. 具体例
1.4.4.2. pstreeコマンド
1.4.4.2.1. プロセスの親子関係を確認する
1.4.4.3. pgrep
1.4.4.3.1. プロセスIDを検索する
1.4.4.4. killコマンド
1.4.4.4.1. シグナルをプロセスに送る。`-s`オプションで数値指定。
1.4.4.4.2. KILL...9、強制終了
1.4.4.4.3. TERM...15、終了(termination)
1.4.4.4.4. HUP...1、再起動(hungup)
1.4.4.4.5. INT...2、割り込み終了(interuption)
1.4.4.5. killallコマンド、pkillコマンド
1.4.4.5.1. pkill, killallはプロセス名を指定
1.4.4.5.2. pkillは(オプションで)実行ユーザ、グループを指定
1.4.4.5.3. killはプロセスIDを指定
1.4.4.6. topコマンド
1.4.4.6.1. 実行中のプロセスを監視したりできる
1.4.4.6.2. せっかくなのでもうすこし詳しく
1.4.4.6.3. (今度やりたいこと)メモリ、スワップの確認
1.4.5. ジョブの管理
1.4.5.1. ジョブはフォアグラウンドorバッググラウンドに分かれる
1.4.5.2. jobsコマンド...現在動いているジョブの確認
1.4.5.3. bgコマンド...ジョブのバックグラウンド実行
1.4.5.4. fgコマンド...ジョブのフォアグラウンド実行
1.4.5.5. コマンド末尾に"&"をつけると、バックグラウンドで実行される
1.4.5.6. nohupコマンド...ログアウト後も実行を続ける(no hungup)
1.4.6. tmux
1.4.6.1. Linuxにおけるターミナル
1.4.6.2. 端末エミュレータ
1.4.6.3. 仮想端末を増やしたり、デタッチ/アタッチしたりする
1.4.6.4. プレフィックスキー(Ctrl + B)とキー操作を組み合わせて操作する
1.4.6.5. 同様のコマンドにscreenがある
1.4.7. 関連情報
1.4.7.1. キーボードのコントロール
1.4.7.1.1. `Ctrl + C`...割り込み終了
1.4.7.1.2. `Ctrl + Z`...一時停止
1.5. 1.01.5 デスクトップ環境の利用【★】
1.5.1. セクション概要
1.5.1.1. X11のデスクトップ環境のシステムを利用できる。
1.5.2. セクション詳細
1.5.2.1. X Window System の構成要素についての基本的な理解と知識
1.5.2.1.1. startx, X サーバー, X クライアント, Display Manager, Window Manager, X Window System, 統合デスクトップ環境
1.5.2.2. X11 環境でのGUIをローカルおよびリモートで起動する。
1.5.2.2.1. xauth, DISPLAY, ターミナルプログラム
1.5.3. X Window System
1.5.3.1. 別名X11
1.5.3.2. LinuxにはGUIがないので、このシステムを利用する必要がある
1.5.4. XサーバとXクライアント
1.5.4.1. Xサーバ: ハードウェア。キーボードやモニターなど
1.5.4.2. Xクライアント: アプリケーション。ブラウザなど
1.5.4.3. XサーバとXクライアントは別々のコンピュータで動いていてもいい
1.5.4.4. つまりネットワーク経由でXを利用できる
1.5.5. ウィンドウマネージャ
1.5.5.1. Xのビジュアル面を制御するソフトウェア
1.5.6. ディスプレイマネージャ
1.5.6.1. ログイン画面を表示してユーザ認証を行うソフトウェア
1.5.7. 上記たちをまとめたものが統合デスクトップ環境
1.5.7.1. GNOME
1.5.7.2. KDE
1.5.8. GUIの起動方法
1.5.8.1. 1. graphical.targetを指定する
1.5.8.2. startxコマンド
1.5.9. X11フォワーディング
1.5.9.1. ネットワーク経由でXを利用するための方法
1.5.9.1.1. デスクトップそのものを利用するなら、リモートデスクトップ機能やVNCを使う
1.5.9.1.2. X11フォワーディングは、GUIアプリケーション単独を操作する?
1.5.9.2. 環境変数DISPLAYを操作する
1.5.9.2.1. DISPLAY...Xクライアントの表示先
1.5.9.3. `ssh -X`で接続することで、リモート上で実行されたコマンドがローカルのデスクトップに反映される
1.5.9.4. xauthコマンドで認証クッキーを表示できる
2. 主題1.02:ファイル・ディレクトリの操作と管理
2.1. 1.02.1 ファイルの所有者とパーミッション【★★★】
2.1.1. ファイルの属性情報
2.1.1.1. ファイルの種類とアクセス権(モード)
2.1.1.2. ハードリンク数
2.1.1.2.1. ディレクトリの場合は直下のサブディレクトリ数
2.1.1.3. 所有者
2.1.1.4. グループ
2.1.1.5. 大きさ
2.1.1.6. 更新日時
2.1.1.6.1. ctime...ファイルの作成時刻
2.1.1.6.2. atime...アクセス時刻
2.1.1.6.3. mtime...更新時刻
2.1.1.7. ファイル名
2.1.2. ディレクトリのアクセス権
2.1.2.1. 読み...ディレクトリ内の内容を参照できる(ls, findが実行できる)
2.1.2.2. 書き...ディレクトリ内にファイルを新規作成、名前変更、削除(touch, mv, rm)
2.1.2.3. 実行...ディレクトリ内へのファイルのアクセス、移動(cd)
2.1.3. 特殊なパーミッション
2.1.3.1. SUID
2.1.3.1.1. Set User ID
2.1.3.1.2. 4000
2.1.3.1.3. u+s, user set
2.1.3.1.4. コマンドが所有者の権限で実行される
2.1.3.1.5. ex.) 一般ユーザがpasswdコマンドを使ったとき
2.1.3.2. SGID
2.1.3.2.1. Set Group ID
2.1.3.2.2. 2000
2.1.3.2.3. g+s, group set
2.1.3.2.4. コマンドがグループの権限で実行される
2.1.3.2.5. ディレクトリの場合はグループ継承
2.1.3.3. スティッキービット
2.1.3.3.1. 1000
2.1.3.3.2. o+t
2.1.3.3.3. ディレクトリ中のファイルを削除(名前変更)できるのは所有者のみにする
2.1.3.3.4. ex. tmpディレクトリは全ユーザが書き込めるが、削除は所有者のみ。
2.1.4. chmodコマンド
2.1.4.1. r=4, w=2, x=1
2.1.4.2. `+`は権限追加。`=`は権限差し替え、`-`は権限剥奪
2.1.4.3. `u`は所有者、`g`はグループ、`o`はその他
2.1.4.4. `-v`で結果を確認可能
2.1.5. chownコマンド
2.1.5.1. chown user:group
2.1.5.2. `:`は`.`でもOK
2.1.6. umaskコマンド
2.1.6.1. デフォルトのパーミッションを決める
2.1.6.2. ファイルのパーミッションは666、ディレクトリは777
2.1.6.3. 上記から指定した値をマスクしてパーミッションが決まる
2.2. 1.02.2 基本的なファイル管理の実行【★★★】
2.2.1. セクション概要
2.2.1.1. ファイルおよびディレクトリを管理するための基本的なLinuxコマンドを使用できる
2.2.2. セクション詳細
2.2.2.1. 個々のファイルおよびディレクトリをコピー、移動、削除する。
2.2.2.1.1. ls, file, touch, cp, mv, rm, mkdir, rmdir, tar
2.2.2.2. 複数のファイルおよびディレクトリを再帰的にコピーする。
2.2.2.2.1. cp
2.2.2.3. ファイルおよびディレクトリを再帰的に削除する。
2.2.2.3.1. rm, find
2.2.2.4. 基本的なものから高度なものまで、ワイルドカード規則をコマンドで使用する。
2.2.2.4.1. ファイル名のパターンマッチ
2.2.2.5. 特定のパス以下をファイル名、種類、サイズ、時刻、所有者などを基にファイルを見つけて操作する。
2.2.2.5.1. find
2.2.2.6. ファイルをアーカイブしたり、圧縮・展開する。
2.2.2.6.1. tar, dd, gzip, gunzip, bzip2, xz
2.2.3. 確認、検索
2.2.3.1. lsコマンド
2.2.3.1.1. ファイル一覧を表示
2.2.3.1.2. `-d`オプション...指定したディレクトリ自体の情報を表示
2.2.3.1.3. `-F`オプション...ファイルの種類を表示
2.2.3.1.4. `-i`オプション...inode番号を表示
2.2.3.2. findコマンド
2.2.3.2.1. オプション
2.2.3.2.2. `-type`、`-user`、`-size`、`-mtime`、`-maxdepth`などで検索条件を指定。
2.2.3.2.3. `-exec コマンド {} \`
2.2.3.3. fileコマンド
2.2.3.3.1. ファイルの種別を表示
2.2.4. コピー、移動、削除
2.2.4.1. cpコマンド
2.2.4.1.1. ファイル/ディレクトリのコピー
2.2.4.1.2. `-r`オプション...ディレクトリを指定した場合は再帰
2.2.4.1.3. `-p`オプション...所有者、パーミッション、タイムスタンプもコピー
2.2.4.2. rmコマンド
2.2.4.2.1. ファイルの削除
2.2.4.2.2. `-i`オプション...確認つき
2.2.4.3. touchコマンド
2.2.4.3.1. `-m`オプション...ctimeのみ変更
2.2.4.4. mkdir/rmdirコマンド
2.2.4.4.1. 空のディレクトリの作成/削除
2.2.4.4.2. `-p`オプション...親階層も含める
2.2.4.4.3. `-m`オプション...パーミッション指定が可能(mkdir)
2.2.5. 圧縮
2.2.5.1. 単体のファイルを圧縮する
2.2.5.2. 圧縮形式
2.2.5.2.1. gzip形式
2.2.5.2.2. bzip2形式
2.2.5.2.3. xz形式
2.2.5.3. -dオプションで展開
2.2.5.4. -cオプションで標準出力に出力
2.2.5.4.1. 普通にやってると元ファイルが削除されてしまう
2.2.5.4.2. 残したい場合はこのオプションが必要
2.2.6. アーカイブ
2.2.6.1. tarコマンド
2.2.6.1.1. 複数ファイルを「アーカイブ」にできる
2.2.6.1.2. ハイフンをファイル名で指定したときは、パイプラインで受け取った標準入力を利用する
2.2.6.1.3. オプション
2.2.6.1.4. アーカイブしたファイルを圧縮することも可能
2.2.6.2. ddコマンド
2.2.6.2.1. デバイスを指定できるコピー操作
2.2.6.2.2. `bs`でブロックサイズを指定する
2.2.6.2.3. `count`でブロックをコピーする回数を指定する
2.2.6.3. (参考)cpioコマンド
2.2.6.3.1. ファイルを(アーカイブとして)コピーイン/コピーアウトするコマンド
2.2.6.3.2. 標準入力/出力およびパイプラインを利用して使う
2.2.6.3.3. コピーインであれば、`find`コマンドとセットで使う
2.3. 1.02.3 ハードリンクとシンボリックリンク【★★】
2.3.1. セクション概要
2.3.1.1. ファイルに対するハードリンクとシンボリックリンクを作成して管理できる
2.3.2. セクション詳細
2.3.2.1. リンクを作成する。
2.3.2.1.1. ln [-s]
2.3.2.2. ハードリンクとシンボリックリンクを識別する。
2.3.2.2.1. ls [-lFi]
2.3.2.3. ファイルのコピーとリンクの違いを知っている。
2.3.2.3.1. ファイル, ディレクトリ
2.3.2.4. システム管理業務をサポートするためにリンクを使用する。
2.3.2.4.1. バージョン管理
2.3.3. inode...ファイルの属性情報と実データの場所がわかるデータ
2.3.4. ディレクトリはファイル名とinode番号とが関連づけられた情報が入っている
2.3.5. ハードリンク
2.3.5.1. 実データに直接リンクする
2.3.5.2. そのためリンク元にしたファイルが消えても関係ない
2.3.5.2.1. すべてのハードリンクが削除されたとき、リンク先のファイルが消える
2.3.5.3. inode番号、パーミッションが同一
2.3.6. シンボリックリンク
2.3.6.1. リンク元にリンクして、リンク元経由で実データにアクセスする
2.3.6.2. そのためリンク元のファイルが消えるとアクセスできなくなる
2.3.6.3. ディレクトリ単位や別パーティションでも作成可能
2.3.7. リンクのコピー
2.3.7.1. シンボリックリンクに対してcpコマンドを使うと、リンク元のファイルをコピーする
2.3.7.2. シンボリックリンクとしてコピーしたい場合は、-dオプションをつけること
2.3.8. 【応用】ハードリンクとシンボリックリンクの違い、使い分け
2.3.8.1. デバイスやパーティションを越えてハードリンクを張ることができない
2.3.8.2. そのためシンボリックリンクが用いられることが多い
2.3.8.3. シンボリックリンクは読み取り専用で使うべき
2.3.8.4. つまり変更のある設定ファイルはハードリンクにすべき?
2.3.9. lnコマンド
2.3.9.1. `-s`オプションでシンボリックリンク。
2.4. 1.02.4 ファイルの配置と検索【★★】
2.4.1. セクション概要
2.4.1.1. 典型的なファイルの位置とディレクトリの分類を含む、FHS(Filesystem Hierarchy Standard:ファイルシステム階層標準)について熟知している。
2.4.2. セクション詳細
2.4.2.1. Linuxシステムで、ファイルやコマンドを見つける。
2.4.2.1.1. find, locate, updatedb, /etc/updatedb.conf, type, whereis, which
2.4.2.2. FHSで定義されている重要なファイルやディレクトリの正しい位置や目的を知っている。
2.4.3. FHS
2.4.3.1. Filesystem Hierarchy Standard
2.4.3.2. ディレクトリの標準仕様
2.4.3.3. 【リンク】FHS2.3の日本語訳(最新は2015年の3.0)
2.4.4. コマンドとディレクトリ
2.4.4.1. ルートファイルシステム
2.4.4.1.1. /bin
2.4.4.1.2. /sbin
2.4.4.1.3. /etc
2.4.4.1.4. /dev
2.4.4.1.5. /lib
2.4.4.2. それ以外
2.4.4.2.1. /usr/bin
2.4.4.2.2. /usr/sbin
2.4.4.2.3. /usr/local/bin
2.4.4.2.4. /usr/share/man
2.4.5. findとlocate
2.4.5.1. locateコマンド
2.4.5.1.1. データベースを使用して高速でファイル検索を行う
2.4.5.2. `find`と`locate`の使い分け
2.4.5.2.1. ボヤッとしているときは`locate`
2.4.5.2.2. ファイル名やディレクトリがわかっているときは`find`
2.4.5.3. updatedbコマンド
2.4.5.3.1. `locate`のためのデータベースを更新する
2.4.6. typeコマンド
2.4.6.1. コマンドの種類を確認する
2.4.6.2. たとえば`echo`や`break`がシェルの組み込みコマンドであることがわかる
2.4.6.3. ほかエイリアスや予約後(`if`とか`done`とか)もわかる
2.4.7. whichコマンド
2.4.7.1. 指定されたコマンドのあるディレクトリを、環境変数PATHで設定されているディレクトリから探す
2.4.8. whereisコマンド
2.4.8.1. `which`と似たようなものだが、こっちは標準仕様に則ったディレクトリから探し、マニュアルやソースコードも表示する
3. 主題1.03:GNUとUnixのコマンド
3.1. 1.03.1 コマンドラインの操作【★★★★】
3.1.1. セクション概要
3.1.1.1. コマンドラインを使用して、シェルおよびコマンドと対話できる
3.1.2. セクション詳細
3.1.2.1. 単一シェルコマンドおよび1行のコマンドシーケンスを使用する、コマンドラインでの基本的な作業の実行。
3.1.2.2. 定義することを含めたシェル変数の使用と変更、環境変数の参照とエクスポート。
3.1.2.2.1. set, unset, export, env, echo, 引用符
3.1.2.3. コマンド履歴の使用と編集。
3.1.2.3.1. history, .bash_history
3.1.2.4. 定義済みパス内に存在するコマンドおよび存在しないコマンドの呼び出し。
3.1.2.4.1. bash, pwd, ., 相対パス、絶対パス
3.1.2.5. マニュアルの参照。
3.1.2.5.1. man
3.1.3. シェルとは
3.1.3.1. ユーザからのコマンドを受け付け、プログラムを実行するプログラム
3.1.3.2. ログインした直後に起動される「ログインシェル」がある
3.1.4. 環境変数、シェル変数
3.1.4.1. シェル変数
3.1.4.1.1. 現在実行中のシェルだけで有効な変数
3.1.4.1.2. `環境変数名=値`で設定
3.1.4.2. 環境変数
3.1.4.2.1. シェルから実行したコマンドにも引き継がれる変数
3.1.4.3. exportコマンド
3.1.4.3.1. `export 環境変数名=値`
3.1.4.3.2. `export シェル変数名`
3.1.4.4. unsetコマンド
3.1.4.4.1. 環境変数やシェル変数を削除する
3.1.4.5. 代表的な環境変数
3.1.4.5.1. HISTFILE: コマンド履歴を保存するファイルのパス
3.1.4.5.2. HISTFILESIZE: 0にするとコマンド履歴を保存しなくなる
3.1.4.5.3. HISTSIZE: 現在のシェルでのコマンド履歴の保存数
3.1.4.5.4. HOME: ログイン中のユーザのホームディレクトリのパス
3.1.4.5.5. HOSTNAME: ホスト名
3.1.4.5.6. LANG: ロケール
3.1.4.5.7. PATH: パスを指定せずにコマンドを入力したとき、PATHで指定されたディレクトリから同名のプログラムを探す
3.1.4.5.8. PWD: カレントディレクトリ
3.1.4.5.9. USER: ログイン中のユーザ名
3.1.4.6. 変数の参照
3.1.4.6.1. set...環境変数、シェル変数どちらも参照
3.1.4.6.2. env, printenv...環境変数のみ参照
3.1.5. PATH
3.1.5.1. 外部コマンドを入力したとき、PATHで指定されたディレクトリから同名のプログラムを探す
3.1.5.1.1. 外部コマンド.../libにあるなど、ディレクトリ内にあるプログラウ
3.1.5.1.2. 内部コマンド...シェル内にあるプログラム
3.1.5.2. カレントディレクトリは対象外
3.1.5.2.1. 使用した場合は、`./command`のような記述が必要
3.1.6. cdコマンドとメタキャラクタ
3.1.6.1. `cd ~ユーザ名`で指定したユーザのホームディレクトリに
3.1.6.2. 引数を指定しない場合は`cd ~`と同じ
3.1.7. 引用符
3.1.7.1. ダブルクォーテーション...囲まれた中に変数があれば展開する
3.1.7.2. "今日の日付は$TODAYです"
3.1.7.3. バッククォーテーション...コマンドを囲むと実行結果を展開する
3.1.7.4. 今日の日付は`date`です
3.1.8. manコマンド
3.1.8.1. `-k`...キーワードに部分一致するコマンドやファイルを一覧表示する
3.1.8.1.1. aproposコマンドも似た機能
3.1.8.2. `-f`...完全一致
3.1.8.2.1. whatisコマンドも似た機能
3.1.8.3. セクション番号
3.1.8.3.1. 1. ユーザコマンド
3.1.8.3.2. 5. 設定ファイル
3.1.8.3.3. 他のセクション
3.1.8.3.4. すべてのセクションを見たい場合は`-a`オプションをつける
3.1.8.4. 内部コマンドのヘルプはhelpコマンドを利用
3.1.9. unameコマンド
3.1.9.1. 現在使用しているシステムの情報(OS名やバージョン)を表示
3.1.9.2. ちなみにMacだと"Darwin"と出た
3.2. 1.03.2 フィルタを使ったテキストストリームの処理【★★★】
3.2.1. セクション概要
3.2.1.1. テキストストリームにフィルタを適用できる。
3.2.2. セクション詳細
3.2.2.1. テキストファイルやストリームの出力をテキストユーティリティフィルタに送り込み出力を変更するためのGNU textutilsパッケージに含まれる標準的なUNIXコマンドを使用できる。
3.2.3. 改行コード
3.2.3.1. CR
3.2.3.1.1. \r
3.2.3.1.2. 「カーソルを先頭に戻す」という意味
3.2.3.2. LF
3.2.3.2.1. \n
3.2.3.2.2. 「次の行へいく」という意味。Linux系のOSの改行コード
3.2.3.3. CRLF
3.2.3.3.1. Windows系のOSの改行コード
3.2.4. catコマンド
3.2.4.1. (複数の)ファイルの内容を標準出力する
3.2.4.2. そのためファイルを連結できる(concatenate)
3.2.4.3. `-n`...行番号表示
3.2.4.3.1. --number
3.2.4.4. `-b`...空白行を除いて行番号表示
3.2.4.4.1. --number-nonblank
3.2.5. nlコマンド
3.2.5.1. 行番号をつけたcat
3.2.5.2. `-b`オプションでスタイルを指定できる
3.2.5.2.1. たとえば`-b a`は空白行ふくむすべての行に番号をつける(`cat -n`でも同効果)
3.2.6. odコマンド
3.2.6.1. (バイナリ)ファイルをn進数に変換する
3.2.6.2. デフォルトは8進数
3.2.6.3. オプション
3.2.6.3.1. 出力フォーマット
3.2.6.3.2. `-A`オプション
3.2.6.3.3. `-t`オプション...出力フォーマット
3.2.7. head/tailコマンド
3.2.7.1. ファイルを先頭/末尾表示
3.2.7.2. `-n`オプションを任意でつけて行数指定
3.2.8. cutコマンド
3.2.8.1. テキストファイルの各行から指定されたフィールドを取り出す
3.2.8.2. `-f`でフィールド指定(field)
3.2.8.3. `-d`で区切り文字(delimiter)指定
3.2.8.4. -cオプション: 文字位置を指定
3.2.8.4.1. n...n文字目を切り取る
3.2.8.4.2. a-b...aからb文字目までの切り取る
3.2.9. pasteコマンド
3.2.9.1. 複数のファイルを行単位で(水平方向に)結合する
3.2.9.2. `-d`オプションで区切り文字を指定
3.2.9.3. 関連するCSVファイルをくっつけたりとか、ぐらい?使うタイミングは浮かばないなあ
3.2.10. joinコマンド
3.2.10.1. 2つのテキストファイルにおいて、共通のフィールドを持つ行を連結
3.2.10.2. `INNER JOIN`みたいな感じ
3.2.10.3. `-j`オプションでフィールド(カラムみたいなもの)を指定可能
3.2.10.4. pasteコマンドよりこっちのほうが使いそう
3.2.11. expand/unexpandコマンド
3.2.11.1. タブを空白にする
3.2.11.2. `-t`で文字数を指定できる(デフォルトは8)
3.2.11.3. unexpandコマンドはその反対。
3.2.12. fmtコマンド
3.2.12.1. ファイルを(決められた文字数に)整形する
3.2.12.2. -wオプション: 1行の文字数を指定
3.2.13. prコマンド
3.2.13.1. ファイルを印刷用に整形する
3.2.13.2. +開始ページ[:終了ページ]...ページ数を指定
3.2.13.3. -lオプション...ページの行数を指定
3.2.14. trコマンド
3.2.14.1. 文字列の置換(translate)
3.2.14.2. tr "対象文字列" "置換する文字列"
3.2.14.3. `-d`オプション...削除のみ
3.2.14.4. 正規表現のように`[:digit:]`などを使うこともできる
3.2.14.4.1. [:alpha:]...英字
3.2.14.4.2. [:space:]...スペース
3.2.15. sortコマンド
3.2.15.1. テキストファイルを行単位で並び替える
3.2.15.2. -bオプション...先頭の空白を無視
3.2.15.3. -rオプション...逆にする(降順)
3.2.16. splitコマンド
3.2.16.1. 指定した行数でファイルを分割する
3.2.16.2. split -行数 ファイル 接頭語
3.2.16.3. 接頭語のデフォルトはx
3.2.17. uniqコマンド
3.2.17.1. あらかじめsortされていることが前提
3.2.17.2. 重複行を1行にまとめて出力
3.2.17.3. `uniq 入力ファイル [出力ファイル]`と指定
3.2.17.4. `-d`で重複行のみを出力
3.2.17.5. `-u`で重複していない行のみを出力
3.2.18. wcコマンド
3.2.18.1. ファイル内の文字数や行数を表示
3.2.18.2. `-l`は行数、`-w`は単語数、`-c`はバイト数
3.3. 1.03.3 ストリーム、パイプ、リダイレクトの使用【★★★★】
3.3.1. セクション概要
3.3.1.1. テキストデータを効果的に処理するためにストリームのリダイレクトや接続ができる。
3.3.1.2. この作業には標準入力、標準出力、標準エラー出力へのリダイレクト、あるコマンドの出力を別のコマンドの入力にパイプする、あるコマンドの出力を別のコマンドの引数として使用する、出力を標準出力とファイルの両方に送るといったことが含まれる。
3.3.2. セクション詳細
3.3.2.1. 標準入力、標準出力、標準エラー出力をリダイレクトする。
3.3.2.1.1. <, >, >>, 2>&1
3.3.2.2. あるコマンドの出力を別のコマンドの入力にパイプする。
3.3.2.2.1. | (縦線)
3.3.2.3. あるコマンドの出力を別のコマンドの引数として使用する。
3.3.2.3.1. xargs
3.3.2.4. 出力を標準出力とファイルの両方に送る。
3.3.2.4.1. tee
3.3.3. ストリームとは
3.3.3.1. データの入力・出力の流れ
3.3.3.2. 入力のデフォルトはキーボード
3.3.3.3. 出力のデフォルトは画面(端末)
3.3.4. パイプラインとは
3.3.4.1. `|`で表記
3.3.4.2. コマンドの標準出力を次のコマンドの標準入力として扱う
3.3.5. リダイレクト演算子
3.3.5.1. 画面の入出力にファイルを利用する
3.3.5.2. 記号
3.3.5.2.1. `>`: ファイルに出力。元の内容は空にして新規で出力しなおす
3.3.5.2.2. `>>`: ファイルに追記
3.3.5.2.3. `<`: ファイルから入力
3.3.5.2.4. `<<`: ヒアドキュメント。終了文字が現れるまで、コマンドの標準入力に入力を続ける。`<< 文字列`で、`文字列`を終了文字にできる
3.3.5.3. 数値, null
3.3.5.3.1. 1: STDOUT, 標準出力
3.3.5.3.2. 2: STDERR, 標準エラー
3.3.5.3.3. 0: STDIN, 標準入力
3.3.5.3.4. null: 出力先を指定したくないときに使う
3.3.5.4. 例: `ls > sample.txt 2>&1`
3.3.5.4.1. ファイルに標準出力と標準エラー出力を書き込む
3.3.5.4.2. `ls &> sample`でも同じ
3.3.6. xargsコマンド
3.3.6.1. 標準入力から渡された文字列を、指定のコマンドの引数として実行する
3.3.6.2. `コマンド | xargs コマンド` のように使う
3.3.7. teeコマンド
3.3.7.1. 標準出力とファイル出力のどちらも行う
3.3.7.2. `コマンド | tee ファイル名`と使うのが一般的
3.3.7.3. `-a`オプションで追記
3.4. 1.03.4 正規表現を使用したテキストファイルの検索【★★】
3.4.1. セクション概要
3.4.1.1. 正規表現を使用してファイルおよびテキストデータを操作できる。
3.4.1.2. これには、いくつかの表記要素を含む単純な正規表現の作成も含まれる。
3.4.1.3. また、正規表現ツールを使用して、ファイルシステムまたはファイルの内容からの検索を実行することも含まれる。
3.4.2. セクション詳細
3.4.2.1. いくつかの表記要素を含む単純な正規表現を作成する。
3.4.2.1.1. sed, regex(7)
3.4.2.2. 正規表現ツールを使用して、ファイルシステムまたはファイルの内容からの検索を実行する。
3.4.2.2.1. grep, egrep, fgrep
3.4.3. 通常正規表現と拡張正規表現
3.4.3.1. 拡張正規表現の例
3.4.3.1.1. +
3.4.3.1.2. ?
3.4.3.1.3. ^
3.4.3.1.4. | バーティカルバー
3.4.3.1.5. {n,m} 繰り返し
3.4.3.2. 通常のgrepは(基本の)正規表現
3.4.4. grepコマンド
3.4.4.1. global regular expression print
3.4.4.2. 文字列を検索する
3.4.4.3. 検索パターンのオプション
3.4.4.3.1. `-i`: ignore-case
3.4.4.3.2. `-G`: 基本正規表現の利用
3.4.4.3.3. `-E`: 拡張正規表現の利用
3.4.4.3.4. `-F`: 固定文字列で検索する。代わりに`"`や`$`はエスケープが必要。
3.4.4.3.5. `-f`: 検索条件をファイル経由で指定。fixed-string
3.4.4.4. 表示関連のオプション
3.4.4.4.1. `-l`: 一致するファイルのファイル名のみ表示。`-L`はその反対。
3.4.4.4.2. `-n`: 行番号をあわせて表示。numberかな
3.4.4.4.3. `-c`: マッチした行数を表示。countかな
3.4.4.4.4. `-v`: マッチしなかった行を表示。in**v**ert。
3.4.4.5. egrepコマンド
3.4.4.5.1. extended grep
3.4.4.5.2. `grep -E`とほぼ同じ
3.4.4.6. fgrepコマンド
3.4.4.6.1. `grep -F`とほぼ同じ
3.4.4.6.2. 変数は展開されるので注意
3.4.5. sedコマンド
3.4.5.1. Stream Editor
3.4.5.2. 指定された入力を置換して標準出力する
3.4.5.3. `sed コマンド`で指定。
3.4.5.4. コマンド例
3.4.5.4.1. `s/対象/置換/`: 行のうち最初にヒットした文字列だけを対象
3.4.5.4.2. `s/対象/置換/g`: ヒットした文字列すべてを対象
3.4.5.4.3. `/対象/d`: ヒットした行を削除
3.4.5.4.4. `y/ab/AB/`: aをA、bをBと、一文字ずつ置換
3.4.5.4.5. `1,3`: 1行目から3行目を指定。`1,3d`みたいにすると対象行を削除する
3.4.5.4.6. `1,3s/対象/置換/g`: 1から3行目のうちヒットした文字列すべてを対象
3.4.5.5. オプション
3.4.5.5.1. -eオプション: スクリプトを追加
3.4.5.5.2. -fオプション: スクリプトをファイル指定で利用
3.4.5.5.3. -iオプション: 対象としたファイルを直接上書き
3.4.5.5.4. -rオプション: 正規表現を利用
3.5. 1.03.5 エディタを使った基本的なファイル編集の実行【★★】
3.5.1. セクション概要
3.5.1.1. viを使ってテキストファイルを編集できる。これには、viのモード切り替え、テキストの検索、編集、保存、終了が含まれる。
3.5.1.2. エディタの変更ができる。
3.5.2. セクション詳細
3.5.2.1. viのモードを切り替えて、編集、保存、終了ができる。
3.5.2.1.1. i, o, a, ESC
3.5.2.1.2. h,j,k,l
3.5.2.1.3. ZZ, :w!, :q!, :e!
3.5.2.1.4. c, d, p, y, dd, yy
3.5.2.2. テキストを検索する。
3.5.2.2.1. /, ?
3.5.2.3. 標準のエディタを切り替える。
3.5.2.3.1. EDITOR, nano, emacs
3.5.3. ノーマルモード(コマンドモード)
3.5.3.1. `Ctrl+F`: PageDown。次の画面へ移動する。
3.5.3.1.1. `Ctrl+B`で前の画面へ
3.5.3.1.2. ForwardとBackか
3.5.3.2. `H`: 画面の最上行へ移動。
3.5.3.2.1. 反対は`L`、真ん中は`M`
3.5.3.3. `X`: カーソルの左にある1文字を削除
3.5.3.4. `Y`: `yy`と同じで、ヤンク
3.5.4. コマンドラインモード
3.5.4.1. `:x`: `:wq`と同じ
3.5.4.2. `ZZ`: 上書き保存してviを終了
3.5.4.3. `5G`: `:5`と同じ。カーソルをファイルの5行目へ移動する
3.5.4.4. :!コマンド
3.5.4.4.1. viを終了せずにコマンドを利用できる
3.5.4.4.2. たとえば`:!ls`で現在のディレクトリを確認できる
3.5.4.5. `:r ファイル名`: 指定したファイルの内容をカレント行の後に読み込んで挿入する
3.5.4.6. `:e ファイル名`
3.5.4.6.1. 現在編集しているファイルを閉じて、指定したファイルを開く
3.5.4.6.2. `:e!`だけだと、編集中のファイルを開きなおす(最後に保存した状態に戻す)
3.5.4.7. `:set number`
3.5.4.7.1. 行番号を付けてファイルを表示させる
3.5.4.7.2. `:set nu`でも同様
3.5.4.7.3. 取り消しは`nonumber`または`nonu`
3.5.4.8. `:set tabstop=10`
3.5.4.8.1. タブ幅を設定
3.5.4.8.2. `:set ts`も同様
3.5.4.9. `:%s/文字列1/文字列2/`
3.5.4.9.1. 文字列の置換
3.5.4.9.2. コマンドの詳細は`sed`を参照
3.5.5. viコマンドのオプション、その他
3.5.5.1. -Rオプション: 読み取り専用でファイルを開く
3.5.5.2. パラメータなしで起動したとき
3.5.5.2.1. あとでファイル名を指定する
3.5.5.2.2. `:w ファイル名`で指定
3.5.6. エディタの変更
3.5.6.1. 環境変数EDITORを変更
3.5.6.2. ex. EDITOR=/usr/bin/vim
4. 主題1.04:リポジトリとパッケージ管理
4.1. 1.04.1 apt コマンドによるパッケージ管理【★★★】
4.1.1. セクション概要
4.1.1.1. apt コマンドでリポジトリを利用したパッケージ管理ができる
4.1.2. セクション詳細
4.1.2.1. 特定のパッケージをインストール、アップデート、アンインストールができる。
4.1.2.1.1. apt, apt-get, apt-cache, apt-file
4.1.2.2. パッケージがインストールされているか否かにかかわらず、特定のファイルまたはライブラリを含むパッケージを見つけることができる。
4.1.2.3. バージョン、内容物、依存関係、パッケージの整合性、インストール状態などのパッケージ情報を取得できる。(パッケージがインストールされているか否かにかかわらず)
4.1.2.3.1. /etc/apt/sources.list
4.1.3. パッケージとは
4.1.3.1. 実行ファイル、ライブラリ、設定ファイル、マニュアルを、ひとつのファイルにまとめたもの
4.1.3.2. Debianにおいては拡張子debのファイル(.deb)を指す
4.1.4. APTツール
4.1.4.1. dpkgツールを拡張した、Debian系パッケージを管理するツール群
4.1.4.2. dpkgだと複雑で面倒なのでapt系のコマンドに集約して済ましてしまおう、みたいな感じ
4.1.5. aptコマンド
4.1.5.1. `apt-get`と`apt-cache`の統合
4.1.5.2. それぞれのコマンドの使い方を覚えれば大丈夫そう
4.1.6. apt-getコマンド
4.1.6.1. インターネット上ないしはメディア上のパッケージ情報のデータベースを使い、依存関係を調整しながら、パッケージのインストール・アンインストールなどを行う
4.1.6.2. `apt-get [オプション] サブコマンド`の順に記述
4.1.6.3. オプションの一例
4.1.6.3.1. update: パッケージのデータベースを最新版に更新
4.1.6.3.2. install: パッケージのインストール。なおパッケージの取得元は`/etc/apt/sources.list`で管理。
4.1.6.3.3. upgrade: インストール済のパッケージをアップグレードする
4.1.6.3.4. remove: パッケージのアンインストール
4.1.6.3.5. clean: 取得済パッケージファイルの削除。Dockerイメージの構築に使ったりしている。
4.1.6.3.6. dist-upgrade: ディストリビューションの最新化
4.1.7. apt-cacheコマンド
4.1.7.1. パッケージ情報の検索・参照などを行う
4.1.7.2. `apt-cache [スイッチ] [オプション] [パッケージ]`の順に記述
4.1.7.3. 主なスイッチ例
4.1.7.3.1. search: 指定したキーワードを含むパッケージを検索
4.1.7.3.2. show: パッケージの情報を表示
4.1.7.3.3. showpkg: パッケージの詳細情報を表示
4.1.7.3.4. depends: 依存関係を表示
4.1.8. apt-fileコマンド
4.1.8.1. ファイルがどのパッケージに収録されているかを検索する
4.1.8.2. ファイルはわかっているけれどパッケージがわからない、という場合に使う
4.1.9. /etc/apt/sources.list
4.1.9.1. リポジトリの情報をまとめたファイル
4.1.9.2. sources.list.dディレクトリ以下にもファイルがあるらしい
4.1.10. aptitudeコマンド
4.1.10.1. 対話的なパッケージ管理をする
4.2. 1.04.2 Debianパッケージ管理【★】
4.2.1. セクション概要
4.2.1.1. Debianパッケージツールを使用してパッケージ管理できる
4.2.2. セクション詳細
4.2.2.1. Debianパッケージをインストール、アップグレード、およびアンインストールする。
4.2.2.1.1. dpkg
4.2.2.2. インストール済みのDebianパッケージの一覧表示ができる。
4.2.2.2.1. dpkg
4.2.2.3. インストール済みパッケージを再設定する。
4.2.2.3.1. dpkg-reconfigure
4.2.3. dpkgコマンド
4.2.3.1. debianのパッケージである、拡張子"deb"ファイルを取り扱う
4.2.3.2. アクション
4.2.3.2.1. `-i`: インストール。パッケージ名でなくファイル名を指定する
4.2.3.2.2. `-r`: 削除。削除のときはパッケージ名を指定。
4.2.3.2.3. `-P`(または`--purge`): 完全削除。設定ファイルをふくむ。
4.2.3.2.4. `-S`(または`--search`): 指定したディレクトリにあるインストール元パッケージを表示
4.2.3.2.5. `-L`(または`--listfiles`): 指定したパッケージからインストールされたファイルを一覧表示
4.2.3.3. オプション
4.2.3.3.1. `-R`: `-Ri`として使う。ディレクトリ内を再帰してインストール。
4.2.3.3.2. `-G`: `-Gi`として使う。新しいパッケージをインストール済の場合は、指定されたファイルをインストールしない
4.2.3.3.3. `-E`: `-G`と似ていて、こっちは同バージョンかどうかを判断
4.2.4. dpkg-reconfigureコマンド
4.2.4.1. 対話的な設定をする
4.2.4.2. 再設定、設定の初期化ができる
4.2.5. dpkgツールの設定ファイルは、`/etc/dpkg/dpkg.cfg`に配置。
4.3. 1.04.3 yumコマンドによるパッケージ管理【★★★】
4.3.1. セクション概要
4.3.1.1. yum コマンドでリポジトリを利用したパッケージ管理ができる
4.3.2. セクション詳細
4.3.2.1. リポジトリの概念を理解している。
4.3.2.2. パッケージがインストールされているか否かにかかわらず、特定のファイルまたはライブラリを含むパッケージを見つける。
4.3.2.2.1. yum
4.3.2.3. バージョン、内容物、依存関係、パッケージの整合性、インストール状態などのパッケージ情報を取得できる(パッケージがインストールされているか否かにかかわらず)。
4.3.2.3.1. /etc/yum.repos.d/
4.3.2.3.2. /etc/yum.conf
4.3.2.3.3. yumdownloader
4.3.3. /etc/yum.conf:
4.3.3.1. yumの設定ファイル
4.3.4. /etc/yum.repos.d/
4.3.4.1. パッケージの取得元(リポジトリ)を設定するファイルが格納されているディレクトリ
4.3.4.2. apt updateみたいなコマンドがなく、このディテクトリに手動でリポジトリを追加しないといけない
4.3.4.2.1. 一応yum-config-managerがある
4.3.5. yumコマンド
4.3.5.1. RPMパッケージの管理を、`rpm`より簡単にやれるようにしたもの
4.3.5.2. 複数のパッケージをまとめたグループ単位でパッケージの管理もできる
4.3.5.2.1. yum group list: パッケージグループを一覧表示
4.3.5.2.2. yum group list パッケージグループ名: 指定したパッケージグループをインストール
4.4. 1.04.4 RPMパッケージ管理【★】
4.4.1. セクション概要
4.4.1.1. yum コマンドでリポジトリを利用したパッケージ管理ができる
4.4.2. セクション詳細
4.4.2.1. RPMパッケージツールを使用してパッケージ管理できる
4.4.3. RedHatのパッケージ
4.4.4. rpmコマンド
4.4.4.1. RPMパッケージの管理をする
4.4.4.2. インストール/アップグレードのオプション
4.4.4.2.1. -i: インストール
4.4.4.2.2. -U: アップグレードorインストール
4.4.4.2.3. -F: インストール済のパッケージのアップグレード
4.4.4.2.4. 併用オプション
4.4.4.3. アンインストールのオプション
4.4.4.3.1. -e: アンインストール
4.4.4.4. 照会のオプション
4.4.4.4.1. -q: インストールされているかをチェック
4.4.4.4.2. 併用するオプション
5. 主題1.05:ハードウェア、ディスク、パーティション、ファイルシステム
5.1. 1.05.1 ハードウェアの基礎知識と設定【★★★】
5.1.1. セクション概要
5.1.1.1. 基本的なシステムハードウェアの理解および構成や情報の取得ができる
5.1.2. セクション詳細
5.1.2.1. 組み込まれている周辺機器の有効/無効を切り替える。
5.1.2.1.1. modprobe, insmod, rmmod, lsmod
5.1.2.2. さまざまな大容量記憶装置の相違点を理解している。
5.1.2.2.1. HDD, SSD, 光学ストレージ
5.1.2.3. さまざまなハードウェア情報を取得できる。
5.1.2.3.1. lsusb, lspci, /sys/, /proc/, /dev/
5.1.2.4. USBデバイスを操作するツール
5.1.2.4.1. lsusb
5.1.2.5. sysfs、udev、dbusについて概念的に理解する。
5.1.3. BIOS/UEFIとは
5.1.3.1. マザーボードに搭載されている、もっとも基本的な制御プログラム
5.1.3.2. 用途
5.1.3.2.1. OS起動のためのプログラム(ブートローダー)をディスクから読み込んで実行する
5.1.3.2.2. デバイスの動作を設定する
5.1.3.2.3. 基本的な入出力を制御する
5.1.4. カーネルモジュールとは
5.1.4.1. この章では「デバイスドライバ」と同義
5.1.4.2. カーネルの機能を拡張するためのバイナリファイル
5.1.5. デバイスファイルとは
5.1.5.1. ハードウェアへのアクセスを抽象化するもの
5.1.5.2. デバイスファイルの読み書きを通じて、ハードウェアにアクセスできる
5.1.5.3. udevによってデバイスファイルは/dev以下に自動作成される
5.1.6. modprobeコマンド
5.1.6.1. デバイスドライバを手動でロードする
5.1.6.2. 通常は自動でロードされるので気にしなくてもいいみたい
5.1.7. /procディレクトリ
5.1.7.1. カーネル内部の情報にアクセスするための仮想的なファイルシステム
5.1.7.2. Linuxカーネルが認識しているデバイスの情報を格納している
5.1.7.3. lscpuなど、コマンドを使っても見れる物が多い
5.1.7.4. 例
5.1.7.4.1. /proc/cpuinfo: CPUに関する情報を確認
5.1.7.4.2. /proc/interrupts: IRQに関する情報が格納されているファイル
5.1.7.4.3. /proc/ioports: I/Oポートアドレスの情報が格納されているファイル
5.1.7.4.4. /proc/meminfo: メモリの使用状況を確認する
5.1.7.4.5. /proc/bus/
5.1.7.4.6. /proc/swaps: スワップ領域情報
5.1.7.4.7. /proc/scsi/scsi: SCSIデバイスに関する情報が格納されているファイル。
5.1.7.4.8. /proc/modules: ロードされているカーネルモジュールの情報が格納されているファイル。`lsmod`も同様の機能
5.1.7.4.9. /proc/dma: DMAチャネルの情報を確認する
5.1.8. /sysディレクトリ
5.1.8.1. システム情報にアクセスできる
5.1.8.2. procディレクトリと同様、仮想的なファイルシステム
5.1.8.3. 例
5.1.8.3.1. /sys/block/sda/sda1/size: /dev/sda1のサイズを確認する
5.1.9. USBモジュール
5.1.9.1. 歴史
5.1.9.1.1. USB1.1はkernel2.4から採用
5.1.9.1.2. USB2.0はkernel2.6から採用
5.1.9.1.3. USB3.0はkernel2.6.31で採用
5.1.9.2. デバイスクラス
5.1.9.2.1. USB通信のテンプレートみたいなもの
5.1.9.2.2. たとえばHDDなどは「Mass Storage Class」というデバイスクラスに属する
5.1.9.3. lsusbコマンドでデバイス情報を確認可能
5.1.9.4. 関連情報
5.1.9.4.1. kernel2.4=USB1.1でサポートされているのはUHCIとOHCI
5.1.9.4.2. EHCIはkernel2.6=USB2.0からサポート
5.1.10. 関連情報
5.1.10.1. PCIデバイス: 拡張するときに使うデバイス。基本的にはLANカードをつなぐ?
5.1.10.2. SCSIデバイス: コンピュータと周辺機器を接続するためのインターフェイス。
5.1.10.3. DMAチャネル: Direct Memory Acccess。Programmed I/O方式(PIO方式)の反対で、CPUを介さずに直接メモリにアクセスするインターフェイスのこと
5.1.10.4. IRQ: パソコンのキーボードやマウスなどの入出力デバイスが、CPUを呼び出すときに生ずる割り込み要求の信号のこと。
5.1.10.5. D-Bus: Desktop Bus。Linuxのプログラム同士が情報を伝達するプロセス間通信機構のひとつ
5.1.10.6. modprobeコマンド: 依存関係を考慮してカーネルモジュールをロードまたはアンロードする
5.1.10.7. udev: Linuxカーネル用のデバイス管理ツール。/devディレクトリ以下のデバイスノードを管理するために利用する。設定情報ファイルは「/etc/udev/rules.d」に配置される
5.2. 1.05.2 ハードディスクのレイアウトとパーティション【★★★★】
5.2.1. ファイルシステムとは
5.2.1.1. ディスクに保存されるデータをファイルとして管理する仕組み
5.2.2. ルートファイルシステムとは
5.2.2.1. /ディレクトリ(ルートディレクトリ)を含むファイルシステム
5.2.2.2. ex. /homeはルートファイルシステムでなく、別のパーティション(ファイルシステム)に割り当てたほうがいい
5.2.2.2.1. そうでないとhomeが溢れた途端にルートも壊れる
5.2.3. LVMとは
5.2.3.1. 論理ボリューム管理、Logical Volume Manager
5.2.3.2. 物理ボリューム(1つのHDD)たちを束ねてボリュームグループをつくり、ボリュームグループから論理ボリュームを切り出せる
5.2.3.3. 通常の(物理的な)パーティション操作
5.2.3.3.1. 一度作成するとサイズ変更が難しい
5.2.3.3.2. 他のディスクにパーティションを移動させられない
5.2.3.3.3. ディスクサイズの制約がある
5.2.3.4. LVMの特徴
5.2.3.4.1. サイズ変更、他ディスクへの移動ができる
5.2.3.4.2. スナップショットを使ったバックアップが簡単
5.2.4. パーティションとは
5.2.4.1. ディスク内の区切りみたいなもの
5.2.4.2. パーティションごとにファイルシステムを作成、マウントする
5.2.4.3. パーティションテーブルは、ストレージを区切るパーティションの構成情報
5.2.4.4. パーティションタイプはFATとか、そういうものを指しているはず
5.2.5. fdiskコマンド
5.2.5.1. パーティションの作成、削除をする
5.2.5.2. 従来の管理方式MBR(Master Boot Record)に対応
5.2.5.2.1. MBRはパーティションの最大容量が2TB
5.2.5.2.2. パーティションは最大4つ
5.2.5.3. オプション例
5.2.5.3.1. コマンドだけ打ってオプションをサブコマンドとして対話的に操作もできる
5.2.5.3.2. -l: パーティションタイプを一覧表示
5.2.5.3.3. -p: パーティションテーブルを一覧表示
5.2.5.3.4. -n: パーティションを作成
5.2.5.3.5. -d: パーティションを削除
5.2.6. gdiskコマンド
5.2.6.1. 最新のパーティション管理方式であるGPT(GUID Partition Table)に対応したfdiskコマンド
5.2.7. partedコマンド
5.2.7.1. MBRとGPTの両方に対応しているfdiskコマンド
5.2.7.2. サブコマンドはfdiskと異なるので、別途覚えること
5.2.7.3. サブコマンド例
5.2.7.3.1. mklabel: 新しいパーティションテーブルを作成
5.2.7.3.2. rm: 指定したパーティションを削除
5.3. 1.05.3 ファイルシステムの作成と管理、マウント【★★★★】
5.3.1. セクション概要
5.3.1.1. 各種ファイルシステムの特徴を理解している。
5.3.1.2. ファイルシステムを作成できる。スワップスペースも含む。
5.3.1.3. ファイルシステムをマウントするための設定ができる。
5.3.2. セクション詳細
5.3.2.1. MBRパーティションテーブルの管理。
5.3.2.2. 各種のmkfsコマンドを使用して、以下のようなさまざまなファイルシステムを作成または管理する。
5.3.2.2.1. ext3/ext4, XFS, VFAT, Btrfs, tmpfs
5.3.2.3. スワップスペースを作成する。
5.3.2.3.1. mkswap, swapon, swapoff
5.3.2.4. ファイルシステムを手作業でマウントおよびアンマウントする。
5.3.2.4.1. mount, umount, マウントポイント
5.3.2.5. ブート時にファイルシステムをマウントするよう設定する。
5.3.2.5.1. /etc/fstab
5.3.2.6. UUIDとラベルを使ってファイルシステムの識別とマウントができる。
5.3.2.7. リムーバブルなファイルシステムをユーザがマウントできるように設定する。
5.3.2.7.1. /media
5.3.3. ファイルシステムの種類
5.3.3.1. ext2: Linux標準
5.3.3.2. ext3: ext2にジャーナリング機能が追加
5.3.3.3. ext4: ext3の拡張版。現在のLinuxのデファクトスタンダード
5.3.3.4. XFS: CentOS標準
5.3.3.5. Btrfs: 開発中の新しいファイルシステム
5.3.3.5.1. 物理ボリュームをまとめて仮想ボリュームをつくれる
5.3.3.6. tmpfs: メモリ上に作成される仮想的なファイルシステム。RAMディスク
5.3.4. mkfsコマンド
5.3.4.1. パーティション上にファイルシステムを作成する
5.3.4.2. `-t`オプションで、ファイルシステムの種類を指定
5.3.4.2.1. デフォルトはext2
5.3.4.3. mke2fsコマンドもほぼ同様
5.3.4.3.1. ext2,3,4で使える
5.3.5. /etc/fstab
5.3.5.1. ファイルシステムのマウント設定が記載されているファイル
5.3.6. スワップ領域とは
5.3.6.1. システムの物理メモリが足りなくなったときに使われる
5.3.6.2. メモリの一部を書き出して強制的にメモリを空ける
5.3.6.3. Linuxインストール時に作成されるが、手動でも作成可能
5.3.7. mkswapコマンド
5.3.7.1. スワップ領域を作成する
5.3.8. swapon/swapoffコマンド
5.3.8.1. スワップ領域を有効/無効にする
5.3.9. マウントとは
5.3.9.1. あるファイルシステムに別のファイルシステムを組み込んで、ひとつのファイルシステムとして扱えるようにすること
5.3.9.2. ファイルシステムが結合されるディレクトリを「マウントポイント」という
5.3.9.3. マウントポイント例
5.3.9.3.1. /media
5.3.9.3.2. /mnt
5.3.9.4. マウントするとデバイス(やネットワーク)を意識せずにファイルにアクセスできる
5.3.9.5. ex. DVDの中にあるdataディレクトリにアクセスしたい
5.3.9.5.1. /media/dvdromをマウントポイントに指定してDVDをマウント
5.3.9.5.2. /media/dvdrom/dataが対象ディレクトリになる
5.3.10. mount/unmountコマンド
5.3.10.1. マウントする/マウントを解除する
5.3.10.2. ex.) mount -t ext4 /dev/sda3 /data
5.3.10.2.1. sda3のext4ファイルシステムを/dataディレクトリにマウント
5.3.11. 関連情報
5.3.11.1. /etc/mtab: マウントされているファイルsystemの情報が記載されているファイル
6. 主題1.06:シェルおよびスクリプト
6.1. 1.06.1 シェル環境のカスタマイズ【★★★★】
6.1.1. セクション概要
6.1.1.1. ユーザの要求に応じてシェル環境をカスタマイズできる
6.1.1.2. 全体のプロファイルおよびユーザのプロファイルを変更する
6.1.2. セクション詳細
6.1.2.1. ログイン時または新しいシェルを生成したときに、環境変数(PATHなど)を設定する。
6.1.2.1.1. /etc/bash.bashrc, /etc/profile
6.1.2.1.2. ~/.bash_profile, ~/.bash_login, ~/.profile, ~/.bashrc, ~/.bash_logout
6.1.2.1.3. ., source, lists(;, &&, ||)
6.1.2.2. コマンド置換を使用する。
6.1.2.2.1. alias
6.1.2.3. コマンドサーチパスを適切なディレクトリに設定する。
6.1.2.3.1. PATH
6.1.3. bashの環境設定ファイル
6.1.3.1. 全ユーザは/etc以下
6.1.3.1.1. bash.bashrc: Debian系の起動時処理
6.1.3.1.2. bashrc: Redhat系の起動時処理
6.1.3.1.3. profile: 環境変数
6.1.3.2. ユーザ個別はホームディレクトリ以下
6.1.3.2.1. .bash_profile: 環境変数
6.1.3.2.2. .bash_rc: 起動時処理
6.1.3.2.3. .bash_logout: ログアウト時(直前)処理
6.1.3.3. 実行順
6.1.3.3.1. 1. /etc/profile
6.1.3.3.2. 2. ~/bash_profile
6.1.3.3.3. 3. ~/.bashrc
6.1.3.3.4. 4: /etc/bashrc
6.1.4. bashの起動のされ方
6.1.4.1. ログインシェル
6.1.4.1.1. /etc/passwdに設定され、ユーザのログイン時に最初に起動されるシェル
6.1.4.1.2. シェルが終了するとログアウトされる
6.1.4.2. 対話型シェル
6.1.4.2.1. ログインシェルから別のプロセスとして(/bin/bashを実行するなどして)起動するシェル
6.1.4.3. 対話型シェルではrc系の設定ファイルのみ読み込む
6.1.5. setコマンド
6.1.5.1. シェルのオプション機能を設定する
6.1.5.2. `-o`で有効化、`+o`で無効化
6.1.5.3. オプションを指定しないと環境変数、シェル変数を表示する
6.1.6. 関数
6.1.6.1. 定義方法
6.1.6.1.1. function 関数の名前 () { 処理 }
6.1.6.2. 呼び出し方法
6.1.6.2.1. 関数の名前 [引数]
6.1.7. コマンド置換
6.1.7.1. alias [名前[=コマンド]]
6.1.7.1.1. コマンドはシングルクォーテーションで囲むこと
6.1.7.1.2. 指定せずに実行すると、すべてのエイリアスを表示
6.1.7.2. unalias [オプション] 名前
6.1.7.2.1. -a: すべて削除
6.1.7.3. 一時的なエイリアスの無効化
6.1.7.3.1. エイリアスコマンドの前にバックスラッシュ
6.1.8. sourceコマンド
6.1.8.1. ファイルに書かれたコマンドを現在のシェルで実行する
6.1.8.2. コマンドを1行ずつ評価するのでコメントなどの無駄な文字列があると失敗する
6.1.8.3. 評価するだけなので実行権限でなく読み込み権限が必要
6.2. 1.06.2 シェルスクリプト【★★★★★★】
6.2.1. セクション概要
6.2.1.1. 簡単なBashスクリプトを新規作成できる。
6.2.1.2. 作成したBashスクリプトをシステムの利用者に適用できる。
6.2.1.3. 処理結果により動作を分岐できるスクリプトを作成できる。
6.2.1.4. Linux スキルの無いユーザに規定のコマンドを実行できる環境を提供できる。
6.2.1.5. シェルスクリプトの引数を処理できる。
6.2.2. セクション詳細
6.2.2.1. よく使用する一連のコマンド用にBashの関数を作成する。
6.2.2.1.1. function
6.2.2.2. 先頭行(#!)を利用して、適切なスクリプトインタプリタを選択する。
6.2.2.3. スクリプトの位置、所有権、実行権を管理する。
6.2.2.3.1. chown, chmod
6.2.2.4. 標準的なshの構文(ループ)を使用する。
6.2.2.4.1. for, while
6.2.2.5. コマンドの成功または失敗を示す戻り値を使用する。または、つぎに渡すコマンドのために戻り値を指定して終了する。
6.2.2.5.1. $?, exit
6.2.2.6. 条件に応じて処理を変更する。
6.2.2.6.1. if, case
6.2.2.7. 引数に応じて処理を変更する。
6.2.2.7.1. $#, $*, $@, $0, $1..$n, shift
6.2.2.8. 使用するユーザに依存しないスクリプトを作成する。
6.2.2.8.1. PATH
6.2.2.9. シェルスクリプトをデバッグする。
6.2.2.9.1. bash -v, bash -x
6.2.3. シェルスクリプトの基本
6.2.3.1. スクリプトに実行権を与えると、コマンドのように利用できる
6.2.3.2. 実行結果
6.2.3.2.1. 正常終了: 0
6.2.3.2.2. エラー: 2
6.2.3.2.3. 結果は$?に格納される
6.2.3.2.4. exitコマンドをスクリプト内に使うことで数値は指定可能
6.2.4. 条件分岐
6.2.4.1. testコマンドを使って式評価できる
6.2.4.1.1. `[ 式 ]`でも同様の結果が得られる
6.2.4.2. 文字列比較
6.2.4.2.1. =または!=
6.2.4.3. 数値比較
6.2.4.3.1. `-eq`は数値の比較で、equal
6.2.4.3.2. -geは数値の比較で、greater than or equal
6.2.4.3.3. -leは数値の比較で、less than or equal
6.2.4.3.4. -ltはless than
6.2.4.3.5. -gtはgreater than
6.2.4.3.6. -neはnot equal
6.2.4.4. ファイルの更新日付比較(testコマンド)
6.2.4.4.1. -nt: newer than
6.2.4.4.2. -ot: older than
6.2.4.5. ファイル形式の検査(testコマンド)
6.2.4.5.1. -e: パスが存在するか
6.2.4.5.2. ※以下はどれもパスが存在することが前提
6.2.4.5.3. -d: ディレクトリである
6.2.4.5.4. -f: ファイルである
6.2.4.5.5. -r: 読み込み可能
6.2.4.5.6. -w: 書き込み可能
6.2.4.5.7. -x: 実行可能
6.2.4.6. 論理演算子
6.2.4.6.1. -aはand
6.2.4.6.2. -oはor
6.2.4.7. case文
6.2.4.7.1. case 値 in 1) 実行文 ;; 2) 実行文 ;; esac
6.2.5. for, while
6.2.5.1. 連続した数値
6.2.5.1.1. `seq 開始する数値 [増加幅] 数量する数値`
6.2.5.1.2. `seq 終了する数値`
6.2.5.1.3. for num in `seq 1 5`のように記載する
6.2.5.2. while
6.2.5.2.1. while - do - done
6.2.6. 特殊変数
6.2.6.1. $?: 直前に実行されたコマンドの終了ステータス
6.2.6.2. $n: シェルスクリプトに渡されたn番目の引数
6.2.6.2.1. $0はシェルスクリプト名
6.2.6.2.2. 二桁以降は、${10}のように書く
6.2.6.3. $$: 現在のシェルのPID
6.2.6.4. $#: 実行時の引数の数
6.2.7. readコマンド
6.2.7.1. 標準入力またはリダイレクションからデータを読み込み変数に代入
6.2.7.1.1. 変数の数が一致しない場合は、最後の変数に残りの値が代入される
6.2.8. execコマンド
6.2.8.1. コマンドを実行中のジョブ(シェルのプロセス)と置き換えて実行する
6.2.8.2. シェルのプロセスが終了したときは強制ログアウト
6.2.9. コマンド置換
6.2.9.1. コマンドの実行結果を文字列として扱う
6.2.9.2. `実行コマンド`または$(実行コマンド)
6.2.10. #!/bin/bash
6.2.10.1. どのシェル(=インタープリタ)で実行するかを記述
7. 主題1.07:ネットワークの基礎
7.1. 1.07.1 インターネットプロトコルの基礎【★★★★】
7.1.1. セクション概要
7.1.1.1. TCP/IPネットワークの基礎を適切に理解していることを示すことができる
7.1.2. セクション詳細
7.1.2.1. ネットワークマスクとCIDR表記法。
7.1.2.1.1. サブネット化
7.1.2.2. プライベートとパブリックのドット区切り形式のIPアドレスの違い。
7.1.2.3. 一般的なTCPおよびUDPのポート
7.1.2.3.1. 22/SSH
7.1.2.3.2. 25/SMTP
7.1.2.3.3. 53/DNS
7.1.2.3.4. 80/HTTP
7.1.2.3.5. 123/NTP
7.1.2.3.6. 443/HTTPS
7.1.2.4. UDP、TCP、およびICMPの違いや主な機能
7.1.2.5. IPv4とIPv6の主な違い
7.1.2.6. IPv6の基本的な機能
7.1.3. プロトコルの種類
7.1.3.1. IP
7.1.3.1.1. アドレス付与
7.1.3.1.2. パケットの分割・統合
7.1.3.2. TCP
7.1.3.3. UDP
7.1.3.3.1. コネクションレス型
7.1.3.3.2. コネクションレス...一方的な通信で、到達確認や再送はしない
7.1.3.3.3. だからいつでもデータを送信できるし、TCPより高速
7.1.3.3.4. マルチメディア通信に利用される
7.1.3.3.5. DNSで利用される
7.1.3.4. ICMP
7.1.3.5. ARP
7.1.3.5.1. IPアドレスからMACアドレスを求める
7.1.4. IPアドレス
7.1.4.1. 基本情報
7.1.4.1.1. ネットワーク部とホスト部に分かれる
7.1.4.1.2. サブネットマスクによって分かれる
7.1.4.2. IPアドレスのクラス
7.1.4.2.1. クラスAからCまでは、サブネットマスクが決まっている
7.1.4.2.2. A
7.1.4.2.3. B
7.1.4.2.4. C
7.1.4.2.5. D
7.1.4.2.6. E
7.1.4.3. ネットワークアドレス
7.1.4.3.1. ネットワークそのものを表すアドレス
7.1.4.3.2. ホスト部のbitがすべて0
7.1.4.4. ブロードキャストアドレス
7.1.4.4.1. ネットワーク上のすべての端末にデータを送る
7.1.4.4.2. ホスト部のbitがすべて1
7.1.4.5. CIDR
7.1.4.5.1. クラスで決められたサブネットマスクを使わず、任意の長さのサブネットマスクを使うこと
7.1.5. ポート番号
7.1.5.1. ウェルノウンポート
7.1.5.1.1. 0-1023
7.1.5.1.2. systemやroot権限のプロセス
7.1.5.1.3. Webサーバやファイル共有サービス
7.1.5.2. レジスタードボード
7.1.5.2.1. 1024-49151
7.1.5.2.2. よく使われるプログラム
7.1.5.2.3. SQLサーバなど
7.1.5.3. ダイナミックポート
7.1.5.3.1. 49152-65535
7.1.5.3.2. 好きに使える
7.1.5.4. 一般的なポート
7.1.5.4.1. 20: FTP(データ用)
7.1.5.4.2. 21: FTP(制御用)
7.1.5.4.3. 22: SSH
7.1.5.4.4. 23: TELNET
7.1.5.4.5. 25: SMTP
7.1.5.4.6. 53: DNS
7.1.5.4.7. 80: HTTP
7.1.5.4.8. 110: POP3
7.1.5.4.9. 443:HTTPS
7.1.6. IPv6
7.1.6.1. 特徴
7.1.6.1.1. 128ビット表記、事実上の無限
7.1.6.1.2. アドレスの自動割当機能
7.1.6.1.3. IPSec(暗号化通信)
7.1.6.1.4. IPv4との互換性はない
7.1.6.1.5. ブロードキャストを廃止
7.1.6.2. ユニキャストアドレス
7.1.6.2.1. サブネットプレフィクス
7.1.6.2.2. インターフェース識別子
7.1.6.3. マルチキャストアドレス
7.1.6.3.1. FF00から始まるアドレス
7.1.6.4. 表記ルール
7.1.6.4.1. 16進数で表記
7.1.6.4.2. 0000は0に省略可能
7.1.6.4.3. 連続した0000は::に省略可能
7.2. 1.07.2 基本的なネットワーク構成【★★★★】
7.2.1. セクション概要
7.2.1.1. ホスト上の設定を参照、変更、確認できる
7.2.2. セクション詳細
7.2.2.1. ネットワークインターフェイスの設定を手作業および自動で行う。
7.2.2.1.1. /etc/hostname
7.2.2.1.2. ifconfig, ifup, ifdown, nmcli
7.2.2.1.3. ip addr
7.2.2.2. ホストの基本的なTCP/IP設定
7.2.2.2.1. /etc/hosts, /etc/nsswitch.conf, ping
7.2.2.3. デフォルトルートの設定
7.2.2.3.1. ip route, route
7.2.3. ネットワーク関連の設定ファイル
7.2.3.1. どれも/etc以下
7.2.3.2. hostname
7.2.3.2.1. ホスト名を設定(Debian)
7.2.3.2.2. Redhatはsysyconfig/network
7.2.3.3. hosts
7.2.3.3.1. IPアドレスとホスト名の関連付け
7.2.3.4. nsswitch.conf
7.2.3.4.1. 以下の解決の際の問い合わせ順序を指定
7.2.3.4.2. 名前解決
7.2.3.4.3. サービス名解決
7.2.3.4.4. ex
7.2.3.5. 関連情報
7.2.3.5.1. resolv.conf
7.2.3.5.2. services
7.2.4. デフォルトルート
7.2.4.1. 他に宛先がない場合に参照されるルートである
7.2.4.2. Linuxのルーティングテーブルでは「default」と表示される
7.2.5. パケットの転送許可
7.2.5.1. IPフォワードを有効にする
7.2.5.1.1. IPフォワード...あるネットワーク・インターフェイスから受信したIPパケットを、別のネットワーク・インターフェイスへ転送・送出する動作
7.2.5.2. echo 1 > /proc/sys/net/ipv4/ip_forward
7.2.6. nmcliコマンド
7.2.6.1. ネットワークの設定、接続の管理、状態の確認を行える
7.2.7. ipコマンド
7.2.7.1. ifconfig、route、arp、netstatなどの旧来のネットワーク関連コマンドを置き換える
7.2.7.2. ip addr
7.2.7.2.1. インターフェースとアドレスの関係を操作
7.2.7.2.2. ex.) ip addr add 宛先ネットワークアドレス/サブネットマスク dev インターフェース
7.2.7.3. ip link
7.2.7.4. ip neighbour
7.2.7.4.1. IPv4のARPキャッシュ
7.2.7.4.2. IPv6のNDキャッシュ
7.2.7.5. ip route
7.2.7.5.1. ルーティングテーブルの操作
7.2.7.5.2. ex.) ip route add 宛先ネットワークアドレス/サブネットマスク via ゲートウェイアドレス
7.3. 1.07.3 基本的なネットワークの問題解決【★★★★】
7.3.1. セクション概要
7.3.1.1. ホスト上のネットワークに関する問題解決ができる。
7.3.2. セクション詳細
7.3.2.1. ネットワークに関する問題の原因を調査する。
7.3.2.1.1. host, dig, ping, ping6, netcat(nc, ncat), netstat, ss
7.3.2.1.2. traceroute, traceroute6, tracepath, tracepath6
7.3.2.2. 必要に応じてネットワークインターフェイスの追加、起動、停止、再起動、削除、および再設定する。
7.3.2.2.1. ifconfig, ifup, ifdown, hostname
7.3.2.3. ルーティングテーブルを変更、参照、設定し、不適切なデフォルトルート設定を手作業で訂正する。
7.3.2.3.1. ip route, route
7.3.3. インターフェースの有効化
7.3.3.1. ifup インターフェース名
7.3.3.2. ifconfig インターフェース名 up
7.3.3.3. ip link set up
7.3.3.3.1. ifupとは異なる挙動らしい
7.3.4. ルーティングテーブルの表示
7.3.4.1. route
7.3.4.2. netstat -r
7.3.4.3. ip route show
7.3.5. 通信経路の調査
7.3.5.1. traceroute
7.3.5.2. -nオプションで名前解決を省略。だから時間が早くなる
7.3.6. digコマンド
7.3.6.1. dig [@DNSサーバ] ホスト名 [検索タイプ]
7.3.6.1.1. 検索タイプ
7.3.6.2. 指定したホスト名に対するDNSサーバへの登録情報を表示
7.3.6.3. DNSサーバからデバッグのための詳細な情報を取得できる
7.3.7. whoisコマンド
7.3.7.1. whoisサーバに問い合わせてドメインの登録情報などを取得
7.3.8. netstatコマンド
7.3.8.1. オプションなし: 有効なネットワーク接続、ソケットの情報を表示
7.3.8.2. -iオプション: インターフェースの統計情報
7.3.8.3. -rオプション: ルーティングテーブル
7.3.8.4. -nオプション: 名前解決しないでアドレスやポートを表示
7.3.8.5. 最近はssコマンドが使われることが多い
7.3.9. netcatコマンド
7.3.9.1. TCP/UDPを使ったネットワーク上のストリームを出力する
7.3.9.2. nc オプション 接続先アドレス 宛先ポート番号
7.3.9.2.1. -pオプション: 接続元のポート番号を指定
7.3.9.2.2. -l オプション: 指定したアドレス、ポートで接続を待ち受ける
7.3.9.2.3. -uオプション: UDPで転送(デフォルトがTCP)
7.3.9.2.4. -oオプション: 指定したファイルに出力
7.3.10. tracepath
7.3.10.1. 宛先アドレスまでの経路だけでなく、PathMTUを確認
7.3.10.1.1. PathMTU: 経路上の最大転送単位
7.3.10.1.2. Maximum Transmission Unit
7.3.11. FTP
7.4. 1.07.4 クライアント側のDNS設定【★★】
8. 主題1.08:システム管理
8.1. 1.08.1 アカウント管理【★★★★★】
8.1.1. useraddコマンド
8.1.1.1. ユーザを新規作成。ホームディレクトリも作成する。
8.1.1.2. -mオプション: /etc/skelディレクトリを雛形(skelton)としてホームディレクトリにコピーする
8.1.1.3. -dオプション: ホームディレクトリの位置を指定
8.1.1.4. -Dオプション:デフォルトで使用される値を確認
8.1.1.4.1. /etc/default/useraddファイルに保存されている
8.1.1.5. -sオプション: ログインシェルを指定
8.1.1.5.1. /bin/falseまたは/sbin/nologinを指定するとシェルを禁止
8.1.2. usermodコマンド
8.1.2.1. ユーザのアカウント情報を変更する
8.1.2.2. -gオプション: プライマリグループを指定
8.1.2.3. -Gオプション: プライマリグループ以外のグループを指定
8.1.2.4. -pオプション: パスワードを設定・変更
8.1.2.5. -Lオプション: パスワードをロックする
8.1.2.6. -Uオプション: パスワードをアンロックする
8.1.3. userdelコマンド
8.1.3.1. ユーザアカウントを削除
8.1.3.2. -rオプション: ホームディレクトリも削除
8.1.3.3. -fオプション: 強制
8.1.4. groupaddコマンド
8.1.4.1. グループアカウントを新規作成する
8.1.5. groupmodコマンド
8.1.5.1. グループ情報を変更する
8.1.5.1.1. -nオプション: 名前を変更
8.1.5.1.2. -gオプション: GIDを変更
8.1.6. groupdelコマンド
8.1.6.1. グループアカウントを削除する
8.1.6.2. どれかのユーザのプライマリグループになっていると削除できない
8.1.7. passwdコマンド
8.1.7.1. パスワードを変更
8.1.7.1.1. -lオプション: パスワードをロックする
8.1.7.1.2. -uオプション: パスワードをアンロックする
8.1.8. gpasswdコマンド
8.1.8.1. グループのパスワードやメンバーを設定
8.1.9. groupsコマンド
8.1.9.1. ユーザの所属するグループの名前を確認
8.1.10. idコマンド
8.1.10.1. 識別情報を表示する
8.1.10.2. -uオプション: UIDを表示
8.1.10.2.1. UID...ユーザID
8.1.10.3. -gオプション: プライマリグループのGIDを表示
8.1.10.3.1. GID...グループID
8.1.10.4. -Gオプション: 所属するすべてのグループのGIDを表示
8.1.11. chshコマンド
8.1.11.1. シェルを変更する
8.1.12. /etc/passwd
8.1.12.1. ユーザのアカウント情報
8.1.12.2. ユーザの属するプライマリグループなども
8.1.12.3. 一般ユーザは読み取り権限だけ持つ
8.1.12.3.1. パーミッションを644にする
8.1.13. /etc/shadow
8.1.13.1. シャドウパスワード
8.1.13.1.1. シャドウパスワード...暗号化されているパスワード
8.1.13.2. パスワードの有効期限
8.1.13.3. パスワードの最終更新日
8.1.13.4. ルートユーザのみ読み書きを可能にする
8.1.13.4.1. 読み書きできないといけない訳ではない
8.1.13.4.2. パーミッションは000, 400, 600にしておく
8.1.14. /etc/group
8.1.14.1. グループに関する情報
8.1.15. ハウツー
8.1.15.1. ユーザのアカウントを一時的に使用不可にする方法
8.1.15.1.1. 1. /etc/shadowの1文字目に"!"または"*を追加
8.1.15.1.2. 2. /etc/passwdの1文字目に"!"または"*を追加
8.1.15.1.3. 3. `passwd -l`
8.1.15.1.4. 4. `usermod -L`
8.2. 1.08.2 ジョブスケジューリング【★★★★】
8.2.1. crontab
8.2.1.1. 分 時 日 月 曜日 [実行ユーザ名] コマンド
8.2.1.2. 最初の2つで時刻(分と時)
8.2.1.3. つぎの2つで日程(日と月)
8.2.1.4. 最後は曜日
8.2.1.4.1. 0が日曜日
8.2.1.5. ex. 1-7/2
8.2.1.5.1. 1時から7時の間
8.2.1.5.2. 2時間おき
8.2.1.6. オプション
8.2.1.6.1. -e: 編集(edit)
8.2.1.6.2. -l: 表示(list)
8.2.1.6.3. -r: 削除(remove)
8.2.1.7. /etc/crontab
8.2.1.7.1. system用の設定ファイル
8.2.1.8. /var/spool/cron/ユーザ名
8.2.1.8.1. ユーザ用の設定ファイル
8.2.1.9. /etc/cron.d/
8.2.1.9.1. サービス個別のジョブ実行を定義した設定ファイルのディレクトリ
8.2.2. anacron
8.2.2.1. 非常駐
8.2.2.2. 正確なジョブ実行時刻を指定できない
8.2.2.2.1. cronはcrondが1分ごとに起動されるから指定できる
8.2.2.3. 1日1回まで実行可、実行間隔は日数で指定
8.2.2.4. システム管理者のみ利用可
8.2.2.5. 実行履歴を管理しており、未実行のジョブを検出できる
8.2.2.5.1. 実行もできる
8.2.2.6. /etc/anacrontab
8.2.3. at
8.2.3.1. 1回だけスケジュール実行
8.2.3.1.1. -d: 予約ジョブを削除
8.2.3.1.2. -l: 一覧で表示する
8.2.4. batch
8.2.4.1. 低負荷のときに1回だけ実行される
8.2.5. allowとdeny
8.2.5.1. allowが優先
8.2.5.2. cron.allow, at.allowがある
8.2.5.2.1. batch.denyみたいなのはない
8.3. 1.08.3 ローカライゼーションと国際化【★★★】
8.3.1. i18nとl10n
8.3.1.1. 国際化...i18n
8.3.1.2. さまざまな言語に対応できるようにすること
8.3.1.2.1. 文字だけでなくロケール情報すべてが対象になる
8.3.1.3. 地域化...l10n
8.3.1.4. i18nで組み込んだ機能で、各言語に対応すること
8.3.2. 時間
8.3.2.1. Linuxではエポック時間で時間を管理する
8.3.2.1.1. エポック時間...UTCからの経過秒数。UNIX時間とも呼ばれる
8.3.2.2. ローカルの時間を出すときは、エポック時間とタイムゾーンを使って算出している
8.3.2.2.1. タイムゾーン...国、地域ごとの標準時間帯
8.3.2.2.2. UTCからの時差が決まっている
8.3.2.2.3. タイムゾーンは手動で設定する(環境変数)
8.3.3. ロケール
8.3.3.1. 利用者の地域情報
8.3.3.2. 環境変数を使用して、文字、数値、日付などのカテゴリ別に設定可能
8.3.3.2.1. LC_CTYPE
8.3.3.2.2. LC_NUMERIC
8.3.3.2.3. LC_TIME
8.3.3.2.4. LC_MESSAGES
8.3.3.2.5. LC_MONETARY
8.3.3.3. 基本的にはLANGまたはLC_ALLでまとめて設定してしまう
8.3.3.3.1. LANGを使ったときは、ほかのカテゴリを別の地域に設定可能
8.3.3.3.2. LC_ALLは設定不可
8.3.4. 文字コード
8.3.4.1. 主な文字コード
8.3.4.1.1. ASCII
8.3.4.1.2. ISO-8859
8.3.4.1.3. Unicode
8.3.4.1.4. UTF-8
8.3.4.1.5. EUC-JP
8.3.4.1.6. Shift-JIS
8.3.5. tzselectコマンド
8.3.5.1. タイムゾーンの値を確認できる対話式コマンド
8.3.6. tzconfigコマンド
8.3.6.1. 現在は非推奨。
8.3.6.1.1. dpkg-reconfigure tzdataを使うようにする
8.3.6.2. タイムゾーンを設定
8.3.6.3. Debian系のコマンド
8.3.7. localeコマンド
8.3.7.1. 現在のロケールの設定を確認する
8.3.7.2. -aオプション: システムで利用可能なロケールを表示
8.3.8. iconvコマンド
8.3.8.1. 文字コードを変換する
8.3.8.2. iconv -f UTF-8 -t EUC-JP example.txt > example-EUC.txt
8.3.8.2.1. -fオプション: 変換前の文字コード(from)
8.3.8.2.2. -tオプション: 変換後の文字コード(to)
9. 主題1.09:重要なシステムサービス
9.1. 1.09.1 システム時刻の管理【★★】
9.1.1. システムで扱う時刻
9.1.1.1. ハードウェアクロック
9.1.1.1.1. コンピュータ内蔵
9.1.1.1.2. 電源OFFでも動く
9.1.1.2. システムクロック
9.1.1.2.1. Linuxカーネルが持つ時刻
9.1.1.2.2. システム起動時にハードウェアクロックの値が設定される
9.1.2. NTP
9.1.2.1. Network Time Protocol
9.1.2.1.1. ネットワークに接続されたコンピュータや各種機器の時刻同期に用いられるプロトコル
9.1.2.2. ntpdデーモンによって動く
9.1.3. /etc/ntp.conf
9.1.3.1. ntpdの設定ファイル
9.1.3.2. server: NTPサーバを指定
9.1.3.2.1. 自身のマシンをNTPサーバとして動かすことも可能
9.1.4. ntpqコマンド
9.1.4.1. NTP サーバーに照会して時刻同期状況を確認する
9.1.4.1.1. 結果例
9.1.4.1.2. -pオプション: 指定したサーバたちとの時刻同期状況を確認する
9.1.5. ntpdateコマンド
9.1.5.1. NTPクライアント
9.1.5.2. 手動でNTPサーバから正確な時刻を取得してシステムクロックへ反映
9.1.6. 標準NTPサーバ
9.1.6.1. pool.ntp.org
9.1.6.1.1. 複数のNTPサーバをDNSラウンドロビン方式で運用して、時刻を提供している
9.1.7. dateコマンド
9.1.7.1. システムクロックを操作
9.1.7.1.1. MMDDhhmmCCYY.ssで設定
9.1.8. hwclockコマンド
9.1.8.1. ハードウェアクロックを操作
9.1.8.1.1. -rオプション: 表示
9.1.8.1.2. -s: システムクロックに上書き
9.1.8.1.3. -w: システムクロックで上書き
9.2. 1.09.2 システムのログ【★★★★★】
9.2.1. ログ
9.2.1.1. アプリケーションが独立して出力するログ
9.2.1.1.1. ApacheやSambaなど
9.2.1.2. syslogdを利用して出力するログ
9.2.1.2.1. syslogd...ログを指定したファイルやコンソール、外部サーバに出力するデーモン
9.2.1.3. /var/logディレクトリに出力される
9.2.2. klogd
9.2.2.1. カーネルからのログメッセージを受け取るデーモン
9.2.2.2. これをsyslogdへ送信する
9.2.3. /etc/syslog.conf
9.2.3.1. セレクタ(selector)とアクション(action)の2つのフィールドで指定
9.2.3.1.1. selector
9.2.3.1.2. action
9.2.4. systemd-journald
9.2.4.1. systemdの動作するシステムで、ユニットが出力するログを一元管理する
9.2.4.2. systemdから起動したプロセスの標準出力を記録
9.2.4.3. syslogへのログメッセージも記録
9.2.4.4. バイナリ形式のログのため、catはできない。journalctlで見る
9.2.4.5. 設定ファイルは/etc/systemd/journald.conf
9.2.5. 次世代のsyslog
9.2.5.1. syslogの問題点
9.2.5.1.1. UDP(512番ポート)を使用しているので、通信の保証ができない
9.2.5.1.2. 平文でログが送受信されるので覗かれるとマズい
9.2.5.2. rsyslog
9.2.5.3. syslog-ng
9.2.6. dmesgコマンド
9.2.6.1. カーネルからのメッセージを表示
9.2.7. journalctlコマンド
9.2.7.1. systemd-journaldのログを表示
9.2.7.1.1. -aオプション: 画面表示できない文字もふくめてすべて表示(all)
9.2.7.1.2. -bオプション: 特定のシステム起動時のログを表示
9.2.7.1.3. -kオプション: dmesgと同じ効果
9.2.7.1.4. -lオプション: 表示可能なログをすべて表示
9.2.7.1.5. -nオプション: 行数を指定
9.2.7.1.6. -r: 最新のログから表示(reverse)
9.2.7.1.7. -fオプション: 新規ログをリアルタイム表示
9.2.7.1.8. -uオプション: 特定のユニットからのログを表示
9.2.7.1.9. -oオプション: 出力形式を指定
9.2.7.1.10. --until, --since: 指定した日付時刻のログを表示
9.2.7.1.11. _PID= : プロセスIDを指定
9.2.8. logrotateコマンド
9.2.8.1. ログのローテーションを実行
9.2.8.2. 設定ファイルは/etc/logrotate.conf
9.2.9. loggerコマンド
9.2.9.1. 手動でメッセージをsyslogdに送る
9.3. 1.09.3 メール配送エージェント(MTA)の基本【★★】
9.3.1. MTAとは
9.3.1.1. MTA...Mail Transfer Agent、メール転送エージェント
9.3.1.2. ネットワーク上でメールを転送・配送するソフトウェア
9.3.1.3. いわゆるメールサーバの中心的な役割の一つ
9.3.1.4. 利用者がメールソフト(MUA:Mail User Agent)などで送信したメールを受け取り、宛先に基づいて振り分け、相手方のMTAなどに転送する
9.3.2. 代表的なMTA
9.3.2.1. sendmail
9.3.2.1.1. 古い
9.3.2.1.2. セキュリティ面に難あり
9.3.2.1.3. 処理速度が遅い
9.3.2.2. qmail
9.3.2.2.1. sendmailを反面教師に、一新
9.3.2.3. Postfix
9.3.2.3.1. sendmailと互換性をもたせつつ、処理を高速化
9.3.2.3.2. 設定が簡単
9.3.2.3.3. 一部のLinuxディストリで標準採用
9.3.2.4. exim
9.3.2.4.1. Debian系の標準
9.3.3. メール転送
9.3.3.1. 転送設定
9.3.3.1.1. /etc/aliases: システム全体
9.3.3.1.2. ~/.forward: ユーザ個別
9.3.4. mailコマンド
9.3.4.1. メールの送信や受信メールを表示
9.3.5. mailqコマンド
9.3.5.1. メールキューを一覧表示する
9.3.5.1.1. メールが転送できないときに溜まる
10. 主題1.10:セキュリティ
10.1. 1.10.1 セキュリティ管理業務の実施【★★★】
10.1.1. lsofコマンド
10.1.1.1. プロセス情報を表示
10.1.1.1.1. `-i:ポート番号`でポート番号を指定
10.1.2. nmapコマンド
10.1.2.1. 指定したホストの開いているポートを一覧表示
10.1.3. lastコマンド
10.1.3.1. 最近ログインしたユーザ一覧を表示
10.1.3.2. /var/log/wtmpファイルを参照
10.1.4. ulimitコマンド
10.1.4.1. ユーザ、シェルが利用できるリソースを制限する
10.1.4.1.1. リソース...ファイルサイズ、プロセス数、仮想メモリサイズ
10.1.4.1.2. -v: シェルが利用できる仮想メモリを制限
10.1.4.1.3. -fオプション: 出力ファイルのサイズを制限
10.1.5. chageコマンド
10.1.5.1. CHange password AGE
10.1.5.2. パスワードの有効期限を設定する
10.1.5.3. -lオプション: 情報を表示
10.1.5.4. -mオプション: パスワード変更の間隔の最短日数
10.1.5.4.1. 0に指定するといつでもパスワード変更可能
10.1.5.4.2. これがデフォルト
10.1.5.5. -Mオプション: パスワードの有効日数を指定(Max)
10.1.5.6. -Wオプション: 有効期限切れの警告を表示する日数を指定(Warning)
10.1.5.7. -Eオプション: アカウントの有効期限を指定(Expire)
10.1.5.8. -I(大文字のアイ)オプション: パスワード有効期限切れ後からアカウントからロックされるまでの日数(Inactive)
10.1.6. fuserコマンド
10.1.6.1. システムの特定のリソールを使用しているプロセスを検索できる
10.1.6.1.1. -mオプション: マウントされたファイルシステムを指定
10.1.6.1.2. -u: 検索結果にユーザ名を表示
10.1.6.1.3. -nオプション: namespaceを指定
10.1.7. (セキュリティ面の)findコマンド
10.1.7.1. -permオプション
10.1.7.1.1. -[モード]: 指定された許可属性ビットのすべてがファイルで立っているか
10.1.7.1.2. +モード: 指定された許可属性ビットのどれか一つがファイルで立っているか
10.1.7.2. -uid, -gidオプション
10.1.7.2.1. ユーザID、グループIDを指定
10.1.7.2.2. rootユーザのユーザID、グループIDはどちらも0
10.1.7.3. -typeオプション
10.1.7.3.1. ファイルの種類
10.1.7.3.2. 不正なシンボリックリンクがないか検索するときに使う(-type l)
10.1.8. whoコマンド
10.1.8.1. システムにログイン中のユーザを表示
10.1.8.2. wコマンドでも同様
10.1.8.3. /var/run/utmpファイルを参照
10.1.9. sudoコマンド
10.1.9.1. 一般ユーザが管理者から実行権限を委譲されたコマンドを実行する
10.1.9.2. -lオプション: 委譲されているコマンドを表示
10.1.10. /etc/sudoers
10.1.10.1. 権限移譲の設定ファイル
10.1.10.2. ex. 権限を移譲したいユーザ名 ホスト名=(実行ユーザ) 以上するコマンド
10.1.10.3. ex. user1 ALL=(ALL) /sbin/reboot
10.1.10.4. visudoコマンドで編集可能
10.2. 1.10.2 ホストのセキュリティ設定【★★★】
10.2.1. inetd
10.2.1.1. インターネットデーモンの略
10.2.1.2. スーパーデーモン
10.2.1.2.1. 各デーモンがそれぞれ待機しなくてもいいようにする、ポート監視専用のデーモン
10.2.1.3. メモリの浪費を解消できる
10.2.1.4. 中継をはさむので動作レスポンスが遅くなる
10.2.1.4.1. なのでhttpdなどはinetdを経由しないらしい
10.2.1.5. 後継はxinetd
10.2.2. /etc/inetd.conf
10.2.2.1. inetdを介して起動させるサービスを記述する
10.2.2.2. 全体的な設定ファイル
10.2.2.3. ex. ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
10.2.2.4. 記述順は以下の通り。スペースで区切る
10.2.2.4.1. 1. サービス
10.2.2.4.2. 2. ソケットタイプ
10.2.2.4.3. 3. プロトコル
10.2.2.4.4. 4. ウエイト
10.2.2.4.5. 5. ユーザ名
10.2.2.4.6. 6. プログラム(デーモン)のパス
10.2.2.4.7. 7. プログラム(デーモン)の名前と引数
10.2.2.5. `/etc/init.d/inetd restart`で反映
10.2.2.5.1. killやkillallでももちろんOK
10.2.3. /etc/inetd.d/
10.2.3.1. 各サービスの個別設定ファイル
10.2.4. /etc/init.d/
10.2.4.1. 各種サービスの起動スクリプトを置くディレクトリ
10.2.5. /etc/nologin
10.2.5.1. rootユーザのみログインを許可するファイル
10.2.5.2. `touch /etc/nologin`で空ファイルを作成するだけ
10.3. 1.10.3 暗号化によるデータの保護【★★★】
10.3.1. 共通鍵暗号方式
10.3.1.1. 暗号/復号化に同じ鍵(パスフレーズ)を使う
10.3.1.2. データを送信する相手ごとに鍵を作成しないといけない
10.3.1.2.1. 同じ鍵だと、AさんがBさん宛のメッセージを見れる
10.3.2. 公開鍵暗号方式
10.3.2.1. 公開鍵を使って暗号化
10.3.2.2. 秘密鍵をつかって復号化
10.3.2.3. 公開鍵は渡していい
10.3.2.4. 秘密鍵は漏洩NG
10.3.3. ホスト認証とユーザ認証
10.3.3.1. ホスト認証: サーバの公開鍵をクライアントが持って接続する
10.3.3.1.1. known_hostsに公開鍵を保存
10.3.3.2. ユーザ認証: クライアントの公開鍵をサーバに配置する
10.3.3.2.1. 公開鍵はauthorized_keyに保存
10.3.4. GnuPG
10.3.4.1. GNU Privacy Gurad
10.3.4.2. ファイルの暗号/復号化を行うプログラム
10.3.4.3. 共通鍵暗号方式と公開鍵暗号方式のどちらも使える
10.3.5. ポートフォワーディング
10.3.5.1. あるポートで受け取った通信を別のポートに転送する処理
10.3.5.2. SSHは、ポートフォワーディングを利用して、他の通信を自身の作成する暗号化コネクション内に流す機能がある
10.3.5.3. SSHポートフォワーディング例
10.3.5.3.1. ping-tより
10.3.6. sshコマンド
10.3.6.1. -pオプション: ポート番号を指定
10.3.6.2. -oオプション: ssh_configで設定できるオプションを指定
10.3.6.2.1. ポート番号も指定可能
10.3.6.3. -lオプション: ログインユーザ名を指定
10.3.6.4. -Xオプション: DISPLAY環境変数が自動で設定される
10.3.6.4.1. SSHサーバ上のXクライアントが、SSHクライアントのXサーバ画面上に表示される
10.3.6.4.2. X11フォワーディングのため
10.3.6.4.3. ポートフォワーディングを利用して、ネットワークを介したXサーバ・クライアントの通信を暗号化する
10.3.6.4.4. 接続を簡略化できる
10.3.6.4.5. ポートフォワーディング...あるポートで受け取った通信を別のポートに転送
10.3.6.5. -Lオプション: ポートフォワーディング
10.3.6.5.1. Local port forwarding
10.3.6.6. -Rオプション: SSHサーバ(リモート)側に転送用のポートを用意する
10.3.7. ssh-agentコマンド
10.3.7.1. パスフレーズの入力を省く
10.3.7.2. あらかじめssh-addコマンドでパスフレーズを入力しておく必要はある
10.3.8. gpgコマンド
10.3.8.1. GnuPGを使う
10.3.8.2. オプションなしでファイルの復号
10.3.8.3. ~/.gnupg/にファイルが置かれる
10.3.8.4. --gen-keyオプション: キーペアを作成
10.3.8.5. --exportオプション: 公開鍵をエクスポート
10.3.8.6. --importオプション: 公開鍵をインポート
10.3.8.7. --list-keys: 公開鍵を一覧表示
10.3.9. /etc/ssh/sshd_config
10.3.9.1. SSHサーバのデーモン(sshd)の設定ファイル
10.3.10. /etc/ssh/ssh_config
10.3.10.1. SSHクライアント側の設定ファイル