本稿ではLinux認定試験のLPICで必要とされる知識のうち見直すべきポイントをまとめます。
システムアーキテクチャ
systemdの特徴を述べよ
- initよりも高速でUnit単位の設定管理が可能(initはシェルスクリプトでモノリシックだった)
- cgroupsでプロセスのリソースを管理(コンテナもcgroupsを利用する)
graphical.targetの例は以下。nginx.confのディレクティブと同じノリ。
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
After=multi-user.target
Conflicts=rescue.target
[Install]
Alias=default.target
pgrepの意義を説明せよ
プロセス名からプロセスIDを逆引きできる点
sleep 120 &
pgrep sleep
149
killallとpkillの意義を説明せよ
- killall:指定したプロセス名に完全一致するプロセスを一括でkillする
- pkill:指定したプロセス名が含まれるプロセスを一括でkillする
killall sleep # sleepと完全一致するプロセスのkill
pkill slee # sleeが含まれるプロセスのkill
umask値とは何か
ファイルやディレクトリ作成時のデフォルトアクセス権で利用される値。デフォルトアクセス権は8進数で各桁ごとにumaskを引いた値になる。ファイルは666,ディレクトリは777がumask値を引く前のデフォルト値であり,たとえばumask値が032の場合は各桁ごとにumaskを引いた634と745がデフォルトアクセス権となる。
umaskを引いて負の値になる桁はゼロとなります。
SUID・SGIDを説明せよ
- SUID:実行権を持つユーザがファイルの所有者の権限で実行することができるようになる仕組み
- SGID:実行権を持つユーザがグループの所有者の権限で実行することができるようになる仕組み
# SUID (chmod 4755 sample.txtのように4を一番左に加えてもOK)
chmod u+s sample.txt
# SGID (chmod 2755 sample.txtのように2を一番左に加えてもOK)
chmod g+s sample.txt
スティッキービットを説明せよ
ディレクトリに書き込み権限はあっても(自分以外が作成した)ファイルを削除できないようにするための策
# スティッキービット (chmod 1777 sampledirのように1を一番左に加えてもOK)
chmod o+t sampledir
SUID→SGID→スティッキービットで4→2→1となっているため,8進数として覚えてしまうと早いです。
シェル変数$TEST
に文字列が設定された状態で`$TEST`
を実行すると何が起きるか
文字列が存在しないコマンドであればcommand not foundとなる。``
は$()
と同じようにコマンドを実行しようとするため。
PCIデバイスとは
Peripheral Component Interconnectの略称で,マザーボードに差し込んで特定の機能を追加する拡張カードの一つ。
デバイスドライバとは
ハードウェアデバイスの入出力操作を管理するカーネルモジュールの一つ
カーネルモジュールの一覧はlsmodで確認できます。
udevの仕組みを説明せよ
- デバイスを接続する
- カーネルが仮想ファイルシステム(/sys)にデバイス情報を作成する
- カーベルがudevd(udevのデーモン)に通知
- udevdが/sysのデバイス情報を確認して/devにデバイスファイルを作成
/sysは/procや/devと同様の仮想ファイルシステムで,カーネルオブジェクトやデバイスの設定を管理します。コントロールパネルのイメージ。
D-Busとは何か
アプリケーション間でやりとりを行うためのプロセス間通信実装の一つ。
modprobeのprobeはどのような意味か
カーネルモジュールをロード・アンロードするために,モジュールの依存関係を調べて(probe)適切に処理をするという意味。
dmesgのdの意味は何か
display。カーネルが起動時に残したバッファ上のメッセージを表示するコマンド。
journalctlのkオプションとbオプションを説明せよ
- kオプション:カーネル起動時のメッセージの表示(--dmesgと同一)
- bオプション:ブート時のメッセージを表示(--bootと同一)
kオプションはブート時の中でもカーネル起動だけのメッセージを表示します。
systemdでメッセージを送るコマンドは何か
wall
write allの省略形と覚えましょう。
ACPIとは何か
Advanced Configuration and Power Interfaceの略称で,周辺機器の電力管理を行う標準規格
PCを開けたり閉じたりするとacpiデーモンがacpiイベントを検知して処理を行います。
ランレベルとは何か
SysVinitを採用しているシステムの動作モード。ディストリビューションによって多少の差異はあるが,
- 0:停止
- 1 or s:シングルモード
- 2〜5:マルチモード
- 6:再起動
となる。
SysVinitの起動処理を説明せよ
- カーネルが最初にinitというプロセスを実行する
- initが/etc/inittabを読み込む(システムの初期設定やランレベルの定義)
- initが/etc/rc.sysinitを読み込む(ファイルシステムのチェックやカーネルモジュールのロード)
- initが/etc/rcを実行する
- /etc/rcが/etc/rc{ランレベル}.dディレクトリ以下のスクリプトを実行する
/etc/inittabの例を述べよ
# Default runlevel (デフォルトのランレベルを指定)
id:3:initdefault:
# System initialization (システムの初期化)
si:SysV:init:/etc/init.d/rcS
# Getty processes (コンソールにgettyプロセスを起動)
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
# Run getty on the serial port (シリアルポートでgettyプロセスを起動)
T0:23:respawn:/sbin/mingetty ttyS0
SysVinitと起動スクリプトの関係を説明せよ
/etc/rc{ランレベル}.dディレクトリには起動スクリプトのシンボリックリンクが格納されている。
lrwxrwxrwx 1 root root 14 Jan 31 10:00 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 Jan 31 10:00 S20cron -> ../init.d/cron
lrwxrwxrwx 1 root root 15 Jan 31 10:00 S30sshd -> ../init.d/sshd
lrwxrwxrwx 1 root root 18 Jan 31 10:00 K10apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 18 Jan 31 10:00 K20mysql -> ../init.d/mysql
Sはランレベルに入る際にStartされるスクリプトで,Kはランレベルを抜ける際にKillされるスクリプトです。実際の起動スクリプトは/etc/init.dディレクトリに格納されていることが分かります。
ランレベルの移行方法を説明せよ
rootユーザでinitやtelinitコマンドを利用する
init 1
telはtele(遠距離)と捉え,もともとinitを遠隔操作するために作られたコマンドと覚えましょう。オプションにqを指定すると/etc/inittabを再読み込みします。
systemdとdefault.targetの関係を説明せよ
- systemdはターゲット(*.target)を使用してシステムの状態を管理する
- default.targetはシステム起動時に読み込まれるデフォルトのターゲットを決定する
- default.targetは他のターゲットへのシンボリックリンクとなっている
という背景から,下記のコマンドを利用することでシンボリックリンクを作成してデフォルトのターゲットを指定できる。
# sudo ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target と同じ
sudo systemctl set-default graphical.target
1時間後にシャットダウンするコマンドを述べよ
shutdown -h +60
hはhalt(停止)を意味します。
1時間後に再起動するコマンドを述べよ
shutdown -r +60
shutdown -r 60は「現在から60分後」を表せず無効です。
/etc/systemd/systemと/lib/systemd/systemの違いを説明せよ
- /etc/systemd/system:管理者が手動設定するユニットファイルを置く場所で優先度は相対的に高い
- /lib/systemd/system:OSが管理するユニットファイルを置く場所で優先度は相対的に低い
Linuxのインストールとパッケージ管理
ESPとは
UEFIシステムパーティションの略称で,UEFIを使ったシステムのOSブートローダやデバイスドライバが格納される。
swap領域のサイズ目安は
物理メモリの1〜2倍
ブートローダのインストール方法を述べよ
grub-install /dev/sda
GRUBはGRand Unified Bootloaderの略称で,Linuxの代表的なブートローダです。ブートローダはハードディスクの先頭にあるセクタに格納されますので,/dev/sdaのMBR(Master Boot Record)領域にインストールしています。
GRUB LegacyとGRUB 2の違いを説明せよ
下記のように設定ファイルに差分がある
- GRUB Legacy:/boot/grub/menu.listもしくは/boot/grub/grub.conf
- GRUB 2:/etc/default/grubに設定を記述してgrub-mkconfigコマンドを実行して/boot/grub/grub.cfgを生成する
GRUB Legacyでは/bootに直書きし,GRUB 2では/etcをもとに/boot以下に設定ファイルを生成します。
共有ライブラリを説明せよ
ダイナミックリンクによって呼び出されるライブラリで,SharedObjectを意味する.soを用いた命名がなされる。たとえば,C言語の標準ライブラリはlibc.so.6という命名。
実行ファイルが依存する共有ライブラリを調べるコマンドを述べよ
ldd(list dynamic dependencies)
ld.soリンカの動きをまとめよ
ld.soはプログラムの実行時に共有ライブラリをロードする動的リンカの実行ファイルであり,次のように動作する。
- LD_LIBRARY_PATH
- /etc/ld.so.cache(/etc/ld.so.confに任意のディレクトリを記述してldconfigコマンドにより生成)
- /lib・/use/lib
dpkgオプションの-Eと-Gの覚え方を述べよ
- -E(Existing):同バージョンがインストールされていればスキップ
- -G(Greater):新バージョンがインストールされていればスキップ
dpkgオプションの-Lと-Sの違いを説明せよ
- -L(listfiles):パッケージに含まれるファイルを表示
- -S(search):指定したファイルがインストールされたパッケージを表示
-Lが正引き,-Sが逆引きのイメージです。-sのように小文字にするとstatusと解釈されてパッケージの情報を表示するオプションになるため注意です。
apt-getのupdate・upgrade・dist-upgradeの違いを説明せよ
- update:パッケージローカルデータベースの更新(git fetchのイメージ)
- upgrade:全パッケージのうち他のパッケージを削除しないものだけをアップグレード
- dist-upgrade:全パッケージをアップグレード(=システムを最新にアップグレード)
yum updateは実際にパッケージをアップグレードするため注意してください。ちなみにyumにはapt-getのupdate的な機能はなさそうです。
apt-cacheコマンドをざっくり説明せよ
apt-get(主にインストールが責務)コマンドとapt-cache(主に情報表示が責務)コマンドを統合したもの
apt系はupdateでgit fetch的な動作となるためcacheという語がたしかにしっくりきます。
aptの設定ファイルはどこに置かれるか
/etc/apt/source.list
rpmコマンドオプションの-vと-hを説明せよ
- -v(verbose):詳細な情報の出力
- -h(hash marks):進行状況を#(hash mark)で表示する
rpmコマンドオプションの-Uと-Fを説明せよ
- -U(upgrade):パッケージがあればアップグレードし,なければインストールする
- -F(freshen):パッケージがあればアップグレードする
rpmコマンドオプションの-qpと-qlpと-qfを説明せよ
- -qp:.rpmファイルのパッケージ情報を表示する(インストール前)
- -qlp:.rpmファイルがインストールするファイルを表示する(インストール前)
- -qf:指定したファイルがインストールされたパッケージを表示する(インストール後)
# このrmpファイルをinstallするとどのような種類になるの?
rpm -qp example-package.rpm
example-package-1.0-1.x86_64
# このrmpファイルにはどのようなファイルが含まれているの?
rpm -qlp example-package.rpm
/usr/bin/example
/etc/example.conf
/usr/share/doc/example-package-1.0/
# このファイルはどのパッケージに含まれているの?
rpm -qf /usr/bin/example
example-package-1.0-1.x86_64
example-package.rpmはインストールされる前のパッケージ名であり,example-package-1.0-1.x86_64はインストールされた後のパッケージ名です。パッケージ管理システムが環境に合わせてパッケージの種類を選んでくれるからです。
rpmコマンドオプションの-qRを説明せよ
依存しているパッケージを表示する
rpmコマンドオプションの-qcを説明せよ
指定されたパッケージからインストールされた設定ファイルを表示する
ドキュメントファイルだけ表示する場合は-qdとなります。
rpmコマンドオプションの-Kを説明せよ
署名を検証する
CPIOを説明せよ
Copy In/Outの略称で,ストリーム形式のアーカイブフォーマット
rpm2cpio package.rpm | cpio -id
-iは展開,-dはディレクトリ作成を意味します。
yumの設定ファイルはどこに置かれるか
- /etc/yum.conf(ファイル)
- /etc/yum.repos.d(ディレクトリ)
yumでGNOME Desktop関連のパッケージをまとめてインストールするコマンドを述べよ
yum groups install "GNOME Desktop"
openSUSEとは何か
Linuxディストリビューションの一つ。パッケージ管理にはzypperを利用する。
Cloud-initでインスタンスを識別するためのidは何と呼ばれ,どこに格納されているか
D-BUSマシンIDと呼ばれ,/etc/machine-idファイルに格納されている
ルートパーティションはディスクの大部分を割り当てるべきか
最小限でよい。大部分を割り当てるべきパーティションはルートパーティションとは分割しているため。
aptとyumの使い分けを説明せよ
- apt:Ubuntuなど(Debian系)
- yum:CentOSなど(Red Hat系)
「lddコマンドで表示されないライブラリでした」の意図は何か
静的ライブラリということ。つまり更新時はライブラリ側を更新するだけではダメで,ソースコードをコンパイルし直さないと古いライブラリのバイナリが使われ続けてしまう。
GNUとUnixコマンド
Unix/GNU/Linuxの関係を説明せよ
Unixは研究・教育目的で利用されていたOSで,後に商用化された。GNUはUnixと互換性があり自由なソフトウェアを構築することを目的として開発されたソフトウェア群であり,カーネルを含まない。LinuxはUnix互換のOSを実現するために開発されたオープンソースのカーネルであり,GNUのツール群と組み合わせることで実用的なOSとして発展した。
~{ユーザ名}を説明せよ
{ユーザ名}のホームディレクトリである/home/{ユーザ名}
環境変数TERMを説明せよ
端末(ターミナル)の種類。xterm・linux・tmuxなど。
カレントディレクトリに作成したtest.shを実行するコマンドを述べよ
# test.shとして実行できないのは$PATHにカレントディレクトリ「.」が含まれていないから
./test.sh
whatisコマンドと同じ動きを行うコマンドを述べよ
# whatis crontab
man -f crontab
man -kを説明せよ
-fは完全一致,-kは部分一致でマニュアルを検索する。-fはwtatisと同一,-kはaproposと同一。
aproposは「〜について」というフランス語由来の語が由来になっていそうです。
manで調べられないマニュアルはあるか
組み込みコマンドのマニュアル。これはhelpを利用すればよい。
help cd
属性を変えずにcpする際のオプションは何か
-pオプション
mkdirでは-pは深い階層まで作成するオプションを表すため注意です。
メタキャラクタ・正規表現・拡張正規表現をまとめよ
キャラクタ | メタキャラクタ | 正規表現 | 拡張正規表現 |
---|---|---|---|
* | 任意の0文字以上 | 直前の文字の0回以上の繰り返し | 直前の文字の0回以上の繰り返し |
? | 任意の1文字 | ※ エスケープが必要 | 直前の文字が0回または1回 |
. | - | 任意の1文字 | 任意の1文字 |
+ | - | ※ エスケープが必要 | 直前の文字の1回以上の繰り返し |
[] | いずれか1文字 | いずれか1文字 | いずれか1文字 |
{} | いずれかの文字列 | ※ エスケープが必要 | 直前の文字の{}内の回数繰り返し |
メタキャラクタはシェルにより展開されるものです。正規表現の{}は\{\}のようにエスケープが必要です。
ヒアドキュメントの仕組みを説明せよ
指定した特定の文字列が現れるまで入力を待ち続けるリダイレクト<<
を利用する。
# cat > sample.txtで標準入力を待ち、aaaaaを上書きする
cat > sample.txt << EOF
heredoc> aaaaa
heredoc> EOF
sample.txtに追記したい場合はcat >>を利用します。
2>&1を説明せよ
標準エラー出力を標準出力にリダイレクトしている
2>1としないのは1がファイルとしてみなされてしまうためです。
odコマンドのオプションをまとめよ
- -t c:バイナリファイルをASCII文字で表示
- -t o:バイナリファイルを8進数で表示(デフォルト)
- -t x:バイナリファイルを16進数で表示
cutコマンドの動き方を説明せよ
各行ごとに抽出する。 例えば,-c 5
であれば各行ごとに5文字目を抽出し,-d: -f 5
であれば各行ごとに:
をデリミタとして5つ目を抽出する。
pasteコマンドの動き方を説明せよ
各行ごとに連結する
catはファイル全体を1つの塊として連結します。
sortで大文字と小文字を区別しないためのオプションは何か
-f(fold)
grepでは-i(ignore case)となるため注意してください。
findコマンドの後ろにつける{}と\;の意味を述べよ
# finxが見つけたファイル名を{}に格納し,;というコマンドの終わりを示すキャラクタをエスケープする
# find . -type f | xargs echo と同じ
find . -type f -exec echo {} \;
sed y/abc/123 sample.txtの挙動を説明せよ
aを1に,bを2に,cを3に置き換える
manのセクション番号で1,5,8をそれぞれ説明せよ
- 1:ユーザコマンド
- 5:ファイルフォーマット
- 8:システム管理コマンド
ファイルとプロセスの管理
gzip -rでディレクトリを指定した際の挙動を述べよ
ディレクトリ内の全てのファイルをgzip化する
元のファイルは消えます。残したい場合は-cオプションで標準出力に指定してからリダイレクトを利用します。
gzip・bzip2・xzを解凍するコマンドを述べよ
- gupzip・gzip -d
- bunzip2・bzip2 -d
- unxz・xz -d
xzunとならずunxzである点に注意してください。
tarコマンドのオプションの覚え方を述べよ
基本操作として-cは作成,-xは展開,-tは表示と覚える。その上で,圧縮方式は
- -z:gzip
- -j:bzip2
- -J:xz
と覚える。残りはおまけで-vは詳細表示,-fはファイル指定などを覚える。
tarコマンドの引数の順番を述べよ
# tar {オプション} {出力先} {対象ファイル名}
tar cvf /dev/st0 /home
tar x archive.tar var/log/file.txtを説明せよ
archive.tarからvar/log/file.txtを取り出して展開する
umaskが027のときtouch testするとどうなるか
桁ごとに考える。ファイルのデフォルトは666(ディレクトリは777)である。uは変わらず,gはwがなくなり,oは全てなくなる。したがって640となる。
シンプルな引き算ではないため注意する。
ハードリンクがファイルシステムをまたげない理由は何か
iノード番号はファイルシステムごとに管理されるため
cpコマンドを用いてシンボリックリンクをコピーすると何が起きるか
リンク元がコピーされる。シンボリックリンク自体をcpしたい場合は-dオプションを付ける。
killコマンドでデフォルトのシグナルと強制終了のシグナルを述べよ
- デフォルト:TERM (15)
- 強制終了:KILL (9)
imagesディレクトリ配下のファイル全ての所有者をuser1に変えるコマンド
chown -R user1 images
nice値の定義域を述べよ
-19〜20
ハードリンクとシンボリックリンクの違いを説明せよ
- 見た目上のファイルは別だが,iノード番号は共通している
- 見た目上のファイルは別で,iノード番号もリンク元に対して新しい番号を発行して紐付ける
ハードリンクとシンボリックリンクはls -laでの違いはあるか
- ハードリンク:リンク元と同じになる
- シンボリックリンク:lとなる
ハードリンクとシンボリックリンクで参照先ファイル削除時の挙動差異を説明せよ
- ハードリンク:iノード番号は残るためデータ実体は変わらずアクセス可能
- シンボリックリンク:参照先のiノード番号は残らないためデータ実体にはアクセス不能
デバイスとLinuxファイルシステム
ファイルシステム作成の流れを説明せよ
- ディスクを分割してパーティション作成
- パーティションにファイルシステムを作成(=ディスクフォーマット)
- ファイルシステムをディレクトリにマウント
パーティションテーブルの種類を説明せよ
- MBR(マスタブートレコード):BIOSで用いられる。容量は2TBまで,基本パーティションは4個まで。
- GPT(GUIDパーティションテーブル):UEFIで用いられる。基本パーティションは128個まで。
partedコマンドの注意点を述べよ
fdiskやgdiskとは異なり,確認を挟まず変更が即時反映されること
パーティションとファイルシステムの関係を述べよ
パーティションごとにファイルシステムが構築され,ファイルシステム内でiノード番号は一意になる
Btrfsを作成するコマンドを述べよ
# /dev/sdb1と/dev/sdb2をまとめてBtrfsを作成
mkfs.btrfs /dev/sdb1 /dev/sdb2
スワップを一言で説明せよ
HDDやSSDのパーティションをメモリの代わりとして利用すること
df -Tで表示されるMountedの説明をせよ
Mounted onの略称で,マウント先(マウントポイント)を表している
fsckで行われることをざっくり説明せよ
iノードブロックとデータブロックの整合性を確認すること
fsckはmountされているファイルには適用できないがtune2fsではfsckの間隔を設定できる理由は何か
「次回fsckするよ」というメタデータを更新するだけであるため
命名にe2を付ける位置がmke2fs・tune2fs・e2fsckとそれぞれ異なるため注意してください。
ファイルシステムにボリューム名を付けるコマンドは何か
tune2fs -L {ボリューム名}
where is・whatis・whichの違いを説明せよ
- whereis:コマンドだけでなくソースやマニュアルも探索
- whatis:コマンドのマニュアルを探索
- which:PATHの中からコマンドを探索(組み込みコマンドは不明)
typeであるコマンドが組み込みコマンドであることを調べる方法を説明せよ
type type
type is a shell builtin
mount時に参照される設定ファイルとumount時に参照される設定ファイルを述べよ
- mount時:/etc/fstab
- umount時:/etc/mtab
mount時はfsでumount時はmtabであることに注意してください。またumountはunmountではありません。
findのtime系に指定する数字で-7と7と+7はどのように違うか
# 過去7日以内に変更されたファイルを検索
find /path/to/dir -mtime -7
# ちょうど7日前に変更されたファイルを検索
find /path/to/dir -mtime 7
# 7日より前に変更されたファイルを検索
find /path/to/dir -mtime +7
/dev/sr0として認識されているDVD-ROMを/media/dvromにmountするコマンドを述べよ
mount -t udf /dev/sr0 /media/dvdrom
udf(Universal Disk Format)は,DVDやBlu-rayなどの光学メディアで一般的に使用されるファイルシステムです。sr0のsrはSCSI ROMの頭文字です。これはDVDドライブは歴史的にSCSIデバイスの一種として扱われていたからです。
UUIDを調べる方法を述べよ
blkid
UUIDはUniversally Unique Identifierの略称で,デバイスの識別子のことを指します。
演習問題の引っかかりポイント
ターミナルとシェルの違いを説明せよ
ターミナルはPCへの入出力専用のハードウェアであり,通常は個々人のPC上でエミュレータとして起動する。ターミナル上ではLinuxのシェルが動作するという関係。
locateコマンドの注意点を述べよ
findコマンドとは異なり専用のデータベースを構築して検索するため,高速ではあるが最新性が担保されないこと。なお,データベースの更新するupdatedbの頻度はデフォルトで1日1回で設定されていることが多い。
エイリアスを一時的に無効化する方法を3つ述べよ
- フルパスで指定する
- 実行したいコマンドの前に
command
を追加する(commandの後ろには半角スペースを入れる) - 実行したいコマンドの前に
\
を追加する(\の後ろには半角スペースを入れない)
/etc/profile
・~/.bash_profile
・~/.bashrc
の違いを説明せよ
/etc/profile
:システム全体で共通する設定ファイル~/.bash_profile
:各ユーザ個別の設定ファイル~/.bashrc
:非ログインシェルにも対応した設定ファイル
通常は~/.bash_profile
の中で~/.bashrc
が読み込まれるため,下記の流れとなる。
- ログインシェルとして起動した場合:
/etc/profile
→~/.bash_profile
→~/.bashrc
- 非ログインシェルとして起動した場合;
~/.bashrc
したがって,環境変数のような全てのシェルに引き継がれる情報は~/.bash_profile
に記述し,それ以外の情報は~/.bashrc
に記述するようにするとよい。
rcはrun commandsの略称でLinuxの祖先で利用されていたシェルスクリプトが由来となっています。
ls -l
で出力される情報を説明せよ
{タイプ}{モード} {ハードリンク数} {オーナ} {グループ} {サイズ} {タイムスタンプ} {ファイル名}
ファイルタイプは-は通常ファイル,dはディレクトリ,lはシンボリックリンクを表す。ファイルモードの9桁は左からオーナ・グループ・その他に対する権限であり,rが読み取り権限,wは書き込み権限,xは実行権限を表す。ファイルタイプとファイルモードの間には空白がないため注意する。例としては下記。
-rwxr-xr-x. 1 root root 28000 5月 6 2024 sample.txt
-rwxr-xr-x.の「.」は,SELinux(Security-Enhanced Linux)のセキュリティコンテキストが設定されていることを示します。
ファイル作成・削除権限の注意点について述べよ
ファイル自体の実行権限ではなく,ディレクトリの実行権限で作成・削除できるかが定まる点。
chmodコマンドのシンボルモードにおけるユーザ指定を説明せよ
u
はオーナ,g
はグループ,o
はその他ユーザ,a
はugo
全てを表す
chmodコマンドの演算子を説明せよ
+は権限追加,-は権限削除,=は指定した権限と等しくする操作を表す
chmodコマンドでシンボルモードを利用する例を挙げよ
# オーナに読み取り権限追加
chmod u+w sample.txt
# グループとその他ユーザに読み取り権限と書き込み権限を付与
chmod go=rw sample.txt
sudoersファイルを編集する方法を述べよ
visudo
コマンドを使えばsudoerwファイルをvimで開いてくれる
sudoersファイルの記法を述べよ
# ユーザの場合
<ユーザ> <マシン名>=(<権限>) <コマンド>
# グループの場合
%<グループ> <マシン名>=(<権限>) <コマンド>
# 例えば
%wheel ALL=(ALL) ALL
psコマンドのTTYで?となっているのはどのようなプロセスか
「端末に紐づいていないプロセス」である。デーモンプロセスやバックグラウンドジョブが該当する。
killコマンドの本質的な動作を説明せよ
TERMシグナルをプロセスやジョブに送る動作
シグナルには他にも停止を表すTSTP,終了を表すINTなどがあります。TSTPはterminal stopの略称,INTはinterruptの略称です。シグナル名はシグナルに「SIG」という接頭を付けて表されることもあります。例えばSGINTはINTのシグナルのことを指します。
標準出力に関するよくある誤解を述べよ
標準出力と標準エラー出力が同一のチャネルであると誤解しやすい。コマンドの実行が成功しても失敗してもシェル上に結果が出力されるが,これは標準出力と標準エラー出力のデフォルトが端末ディスプレイになっているからである。リダイレクトを利用すれば,それぞれ別々の出力先を設定することができる。
# 標準出力をテキストファイルに変更
ls /xxxxx > stdout.txt
# 標準エラー出力をテキストファイルに変更
ls /xxxxx 2> stderr.txt
# 標準出力と標準エラー出力をテキストファイルに変更
ls /xxxxx > all.txt 2>&1
2>&1の2は標準エラー出力,>はリダイレクト,&1は標準出力のリダイレクト先を表しています。
リダイレクトで誤った上書きを防止する方法を2つ述べよ
- リダイレクトで
>>
を利用して末尾に追記する - シェルのsetで
noclobber
オプションを指定する
clobberは上書きするという意味の単語です。
パイプラインを説明せよ
コマンドの標準出力を別のコマンドの標準入力に送る機能のこと。|
単体は標準出力のみを送るが|&
は標準エラー出力も引き継ぐ。
|&
は2>&1|
の略法です。
パイプラインで処理が接続される原理を説明せよ
多くのコマンドでは出力が明示されなかった場合には標準入力を受け付ける実装となっているため,パイプラインで前の標準出力を次の標準入力として送れば処理が接続されるという原理
シェルスクリプトの実行方法とその特徴を3つ述べよ
方法 | 例 | 特徴 |
---|---|---|
ファイル名を指定 | ./sample.sh | ファイル名の先頭でshebangを指定する方法。シェルから実行命令を受けたLinuxカーネルは#!の後ろに書かれたコマンドを実行命令の前に付け加えて実行するため,例えば#!/bin/bashと書けばシェルスクリプトがbashのサブシェルで実行されるようになる。サブシェルを新しく立ち上げるため,現在の設定は引き継がれず,シェルスクリプトで実行した新しい設定も影響を及ぼさない。 |
シェルの引数を指定 | bash sample.sh | 本質的に上記方法と同一 |
sourceコマンド | source ./sample.sh | sourceの後ろで指定されたファイルを一行ずつ読み込んで実行していく方式。対象ファイルを直接実行する訳ではないため,ファイルに実行権限は不要である点に注意。現在のシェルでそのまま実行するため,現在の設定は引き継がれ,シェルスクリプトで実行した新しい設定も影響を及ぼす。 |
シェルスクリプト中の''
と""
の違いを説明せよ
''
:$
を使っても変数は展開されない""
:$
を使うと変数が展開される
アーカイブと圧縮の違いを説明せよ
- アーカイブ:複数のファイルやディレクトリをまとめること。tarなど。
- 圧縮:データサイズを小さくすること。gzipなど。
Linuxではアーカイブと圧縮を組み合わせたtar.gzがよく利用される。WindowsやMacでは両者を同時に実現するzipがよく利用される。
/proc/usbは存在するか
存在しない
カーネルのロードとinitはどちらが先か
カーネルのロード
shutdown 30とshutdown +30には違いはあるか
ある。shutdownコマンドの第一引数は絶対時刻(HH:MM)か相対時間(+minutes)である必要があり,単に30だけ指定するとshutdownコマンドはそれを理解できずエラーになる。
grub-install /dev/sdaとgrub-install -t /dev/sdaのどちらが正しいか
grub-install /dev/sda
GRUB2の設定ファイルを生成するコマンドを述べよ
grub-mkconfig
dpkg-reconfigureとdpkg --reconfigのどちらが正しいか
dpkg-reconfigure
apt-cacheで指定したパッケージが依存するパッケージを表示するコマンド
apt-cache depends
apt-cacheで指定したパッケージに依存するパッケージを表示するコマンド
apt-cache rdepends
rpmでインストール済みのパッケージが依存しているパッケージを表示するコマンド
rpm -qR lv
コマンド履歴の保存先はHISTFILEとHISTORYFILEのどちらか
HISTFILE
man -8 mountとman 8 mountのどちらが正しいか
man 8 mount
findのオプションとしては-nameと-filenameのどちらが正しいか
-name
killにプロセスIDを指定する-pオプションはあるか
ない。シンプルにkill -s HUP 12345のように引数として渡せばよい
killは-s HUPではなく-HUPのように指定できるか
できる
chownとchgrpの包含関係を述べよ
chownで所有者も所有グループも変更できる。chgrpは所有グループのみ。
SysVinit・Upstart・systemdの違いは何か
- SysVinit:直列処理で依存関係は手動管理
- Upstart:ptraceによるプロセス監視を用いたイベント駆動処理(Ubuntuが当時採用)
- systemd:ユニットごとの並列処理(Red Hat系が採用した現在のデファクタスタンダード)
initramfsをざっくり説明せよ
Initial RAM Filesystemの略称で,Linuxの起動時に使用される軽量なルートファイルシステムのことを指す。initramfsにはカーネルが本来のルートファイルシステムをマウントするために必要なドライバやスクリプトが入っている。ルートファイルシステムのマウントが完了するとinitramfs は破棄される。「本格的にOSを起動する前の準備をするためのミニOS」と理解する。
unameコマンドとは何か
OSの名前やバージョン,カーネルシステム名を出力する
ddコマンドの代表的な用例を述べよ
dd if=/dev/コピー元デバイスファイル of=/dev/コピー先デバイスファイル
setコマンドのoオプションを説明せよ
- set -o noclobber:noclobberを有効にする(リダイレクトによるファイルの上書き禁止)
- set +o noclobber:noclobberを無効にする(リダイレクトによるファイルの上書き禁止の解除)
他にも例えばviやemacsをset -oで指定すればキーストロークのタイプを設定できます。
sudo su - rootを説明せよ
rootになり~rootに移動する。これは「環境変数は引き継がず全部rootのものを使う」という意味。
cpio -it a.cpioは正しいか
正しくない。cpioは標準入力から入力を受け取る仕様。cpio -it < a.cpioが正しい。
tr -d "my"の挙動を説明せよ
mとyの文字を削除する。myという文字列を削除したい場合はsedを利用する。
echo "my hello world" | sed "s/my//g"
sedのnオプションを説明せよ
出力を抑制する。通常pオプション(明示的な表示)と同時に利用する。
# bananaを含む行だけを表示
sed -n "/banana/p" file.txt
正規表現の先頭で*や+を使うと何が起きるか
直前の文字がないため無効である。ワイルドカードと混同しないように注意。
viで:wqとZZは同じか
変更がない場合は異なる。:wqは変更がなくてもタイムスタンプを更新するが,ZZは更新がなければタイムスタンプを更新しない。
viから抜けずにlsなどのコマンドを利用する方法
:!の後にコマンドを続ける
リダイレクトとパイプの違いを一言で説明せよ
- リダイレクト:コマンドの「入出力」を「ファイル」に切り替える機能
- パイプ:コマンドの「出力」を別のコマンドの「標準入力」に渡す機能
nice値のデフォルトは何か
10
nice値とPRI値の違いを説明せよ
いずれもカーネル内部の優先度を表していて,静的優先度とも言われる。
- nice値:低い方が優先度が高い。-20〜19の範囲。
- PRI値(ps -l):低い方が優先度が高い。-40〜99の範囲。
- PRI値(ps -c pri・ps -o pri):高い方が優先度が高い。0〜139の範囲。
これらの定義域は「優先度が低い側」を揃えて,優先度が高い側は動的優先度の割り当てのために確保しておく。具体的には下記の表のような対応関係になる。
値 | 種類 | 優先度高 | 優先度低 | |||
---|---|---|---|---|---|---|
nice値 | - | - | - | -20 | … | 19 |
PRI値 | ps -l | -40 | … | 60 | … | 99 |
ps -c pri/ps -o pri | 139 | … | 39 | … | 0 |
例えばps -lしたときのPRIとNIの値には関係性があって,PRIが80であればNIは0となり,逆にNIが0であればPRIは80となります。手動設定できるのはnice値だけですので,PRI値として手動で最高に設定できるのは60もしくは39,最低に設定できるのは99もしくは0となります。-cや-oが出てきた場合は優先度が逆転するという点に十分注意してください。
fg/bgコマンドでPIDを指定する方法
fg % 1
のように%
を利用する
ルートパーティションに含めるディレクトリを挙げよ
/etc・/bin・/sbin・/lib・/dev
LVMで利用する代表的なコマンドをいくつか挙げよ
# 物理ボリュームを作成
pvcreate /dev/sdb
# 物理ボリューム /dev/sdb を使ってボリュームグループ vg_name を作成
vgcreate vg_name /dev/sdb
# ボリュームグループ vg_name 内に 10GB の論理ボリューム lv_name を作成
lvcreate -L 10G -n lv_name vg_name
# 論理ボリューム /dev/vg_name/lv_name に ext4 ファイルシステムを作成
mkfs.ext4 /dev/vg_name/lv_name
# 論理ボリューム /dev/vg_name/lv_name の 1GB のスナップショット lv_snap を作成
lvcreate -L 1G -s -n lv_snap /dev/vg_name/lv_name
デバイスの識別子におけるアルファベットと数字の違いを述べよ
- アルファベット:デバイスの種類(sda/sdb...)
- 数字:パーティションの連番(sda1/sda2...)
パーティションテーブルとは何か
パーティションのメタデータのこと。MBRの中にパーティションテーブルが格納されているという関係性。
iノードの個数が固定であるファイルシステムの種類をいくつか挙げよ
ext2/ext3/ext4
swap領域を利用する手順を説明せよ
# スワップ領域の作成&初期化
mkswap /dev/sdb2
# スワップ領域の有効化
swapon /dev/sdb2
ファイルシステムの利用率を調べるためのコマンドは何か
dfかdu
mountの--bindオプションを説明せよ
既存のディレクトリやファイルシステムを新しい場所に再マウントする。元のマウントは保持される。
fstabのマウントオプションでuserとusersの違いを述べよ
いずれも一般ユーザにマウントを許可するが,usersではアンマウントも許可する。
ディレクトリのアクセス許可でr/w/xをざっくり説明せよ
- r:lsが可能
- w:touchとrmが可能
- x:cdが可能
空白が含むファイル名をfindしてrmするコマンドを述べよ
find . -type f -ptint0 | xargs -0 rm
yumでinstall済みのパッケージ一覧を表示するコマンド
yum list installed
yumのremoveとeraseに違いはあるか
ない
zypperではremoveが存在しますが,eraseは存在しません。
yumでrpmをダウンロードするコマンド
yumdownloader {パッケージ名}
debian_pkgに含まれるファイルを全て表示するコマンド
# dpkg --listfiles debian_pkgと同じ
dpkg -L debian_pkg
dpkgでエラーにより部分的にしかインストールされていないパッケージを調べるオプション
-C(--audit)
「準仮想化環境はゲストOSをカスタマイズする必要がないので高性能」は正しいか
正しくない。ゲストOSをカスタマイズすることにより高性能を発揮する。
コンテナは仮想環境をエミュレートするか
しない。ハイパーバイザによる仮想化が仮想環境をエミュレートする。
「GPTでパーティション情報はディスクの先頭セクタに格納される」は正しいか
正しくない。2番目のセクタに格納される。GPTの先頭セクタはProtective MBR。
MBRではパーティション情報は先頭セクタに格納されます。
「GPTでパーティションの開始と終了位置はCHS(Cylinder/Header/Sector)で指定される」は正しいか
正しくない。LBA(Logical Block Address)で指定される。
CHSで指定されるのはMBRです。
ブート時にカーネルに渡された引数を確認する方法
cat /proc/cmdline
UEFIのブートローダはどこに格納されているか
EFIシステムパーティション。BIOSではMBRの中にブートローダが格納されていたが,EFIでは別のパーティションへの参照だけが入っているイメージ。
vmlinuzを説明せよ
Linuxの圧縮カーネルイメージ。ブートローダーによってロードされ,システムの起動プロセスを開始する
vmlinuzとinitramfsの違いは何か
ブートローダーがカーネルであるvmlinuzをロードし,initramfsはカーネルがルートファイルシステムをマウントできるようにする補助的な環境
BIOSはvmlinuzを読み込むか
読み込まない。BIOSが実行したブートローダがカーネルとしてロードする。
who -rを説明せよ
現在のランレベルを表示する
デフォルトターゲットはカーネルオプションのsystemd.target=で設定できるか
できない。systemd.unit=で設定する。
wコマンドを一言で説明せよ
whoコマンド(ログイン情報)+uptimeコマンド(システムの稼働時間と負荷)
. script.shを説明せよ
.はsourceと同じ意味で「現在のシェル環境で実行」を表す
>&は何を意味するか
標準出力と標準エラー出力のリダイレクト。これは次のコマンドの省略記法であると覚える。
ls > data 2>&1
statコマンドとは何か
ls -l
よりも詳細な情報を確認できるls
のようなコマンド
代表的なパーティションタイプを挙げよ
- MBRで0x82・GPTで8200:スワップパーティション
- MBRで0x83・GPTで8300:ファイルシステム
- MBRで0x8E・GPTで8E00:LVM
- MBRで0xFD・GPTでFD00:RAID
インストール済みのrpmパッケージを表示するコマンド
rpm --query --all
コメント