面接

Linuxの面接質問:24問と回答例

更新日: · Skillaria.Top

Linuxの面接で最もよく聞かれるのは、ファイルシステムの構造とinode、ハードリンクとシンボリックリンク、権限とsudo、プロセスとシグナル、起動の仕組み、そしてネットワークです。開いているポートの確認方法、DNS解決の仕組み、サーバーに接続できないときの対応などが含まれます。

Linuxに関する質問は、DevOpsエンジニア、システム管理者、SRE、バックエンド開発者の面接でよく出ます。面接官がコマンドのオプションを暗記しているかを問うことは少なく、システムの仕組みを理解しているか、問題の原因を見つけられるかを重視します。ここでは、基礎から障害調査まで、よく出る質問を回答例とコマンド付きでまとめました。

コツ:回答するときは、自分の説明を確かめるために使うコマンドを挙げましょう。「ss -tlnp で確認します」と言うと、一般論だけを述べるより説得力があります。

ファイルシステム

1. FHSとは何か。主要なディレクトリにはどんなものがありますか?

FHS(Filesystem Hierarchy Standard)は、ディレクトリの配置を定めた標準です。ディレクトリツリーはすべてルート / から始まり、ドライブ文字で区別された独立したディスクはありません。他のファイルシステムはツリーのディレクトリにマウントされます。

  • /etc:システムとサービスの設定。
  • /var:変化するデータ。ログ(/var/log)、キャッシュ、キュー、データベース。
  • /home:ユーザーのホームディレクトリ。/root はrootのホームディレクトリ。
  • /usr:プログラムとライブラリ。現代のディストリビューションでは /bin と /sbin は通常 /usr/bin と /usr/sbin へのリンク。
  • /tmp:一時ファイル。/boot:カーネルとブートローダー。
  • /proc と /sys:プロセスやカーネルの情報を持つ仮想ファイルシステム。/dev:デバイスファイル。

2. inodeとは何ですか?

inodeは、ファイルのメタデータを保持するファイルシステムの構造です。種類、権限、所有者、サイズ、タイムスタンプ、ハードリンク数、データブロックへのポインタが含まれます。inodeにはファイル名がありません。名前はディレクトリに「名前 → inode番号」の形で保存されています。

inode番号は ls -i で、詳細は stat file で確認できます。ファイルシステムのinode数には上限があり、df -i で使用状況を確認できます。よくある状況として、「ディスクに空きがあるのにファイルを作れない」というものがあります。これは小さなファイルが大量にあってinodeが尽きたことが原因です。

3. ハードリンクとシンボリックリンクの違いは何ですか?

ハードリンク(ln file link)は、同じinodeに付けたもう1つの名前です。どちらの名前も対等で、データは参照カウントがゼロになったときにだけ削除されます。制限として、ディレクトリにはハードリンクを作れず、ファイルシステムの境界をまたげません。

シンボリックリンク(ln -s target link)は、独自のinodeを持つ別のファイルで、中身はターゲットのパスです。ディレクトリや別のファイルシステムを指せますが、ターゲットを削除したり移動したりすると、リンクは壊れます。

4. ディスクが一杯なのに、duの値がdfより小さいのはなぜですか?

最もよくある原因は、ファイルが削除されたものの、まだプロセスがそれを開いている場合です。たとえば、動作中のサービスが使っている大きなログを削除したケースです。ファイル名は消えているので du からは見えませんが、ブロックは使用中のままで、df にはカウントされます。

こうしたファイルは lsof +L1 または lsof | grep deleted で探せます。解決法は、プロセスを再起動するか、ファイルディスクリプタを通じて切り詰めることです:: > /proc/PID/fd/N。今後ログを整理するときは、rm ではなく truncate またはlogrotateによるローテーションを使いましょう。

5. Linuxの起動はどのように進みますか?

ファームウェア(BIOSまたはUEFI)がハードウェアを初期化し、ブートローダー、通常はGRUBに制御を渡します。ブートローダーは設定を読み、カーネルとinitramfsをメモリに読み込みます。initramfsは、本物のルートファイルシステムにアクセスするために必要なドライバを含む一時的なルートファイルシステムです。

カーネルはデバイスを初期化し、ルートファイルシステムをマウントして、PID 1のユーザー空間プロセスを起動します。ほとんどのディストリビューションではこれがsystemdです。systemdは既定のターゲット、たとえば multi-user.target までのサービスを起動します。各段階の時間は systemd-analyze で確認できます。

6. mountコマンドは何をしますか?自動マウントはどこで設定しますか?

mount は、デバイス上のファイルシステムをディレクトリ(マウントポイント)に接続します。例:mount /dev/sdb1 /mnt/data。現在のマウント状況は findmnt または引数なしの mount で確認できます。

起動時の自動マウントは /etc/fstab に設定します。fstabでは、/dev/sdb1 のようなデバイス名ではなく、UUIDを使うことが推奨されます。UUIDは blkid で確認できます。デバイス名は変わることがあるためです。再起動の前に mount -a で変更を確認してください。fstabの誤りは起動を妨げることがあります。

ユーザーと権限

7. Linuxの権限はどのように仕組まれていますか?

すべてのファイルには所有者、グループ、そして所有者・グループ・その他のユーザーの3組の権限があります。各組は r(読み取り)、w(書き込み)、x(実行)からなります。数値では r=4、w=2、x=1 です。したがって chmod 640 file は、所有者に読み書き、グループに読み取り、その他には何も許可するという意味です。

$ ls -l app.conf
-rw-r----- 1 deploy www-data 512 Oct 12 10:03 app.conf

所有者は chown user:group file で、権限は chmod で変更します。

8. ディレクトリに対するr、w、xの意味は何ですか?

ディレクトリでは意味が異なります。r はファイル名の一覧を取得できること、w はディレクトリ内でファイルを作成、削除、名前変更できること、x はディレクトリに入り、名前でファイルにアクセスできることを意味します。

重要な帰結として、ディレクトリに書き込み権限があれば、ファイルが自分の所有物でなくても削除できます。ディレクトリに x がなければ、r があっても役に立ちません。名前は見えますが、ファイルを開けないからです。

9. SUID、SGID、sticky bitとは何ですか?

実行ファイルのSUIDビットは、プログラムを実行者ではなく所有者の権限で起動させます。典型例は /usr/bin/passwd です。これはrootの所有で、/etc/shadow を変更できます。ファイルのSGIDも同様にグループに対して働きます。ディレクトリのSGIDは、新しく作られるファイルがディレクトリのグループを継承するようにし、共有フォルダに便利です。

ディレクトリのsticky bitは、ディレクトリが全員に書き込み可能でも、ファイルの所有者だけが削除できるようにします。/tmp がこの仕組みで、ls -ld /tmp は drwxrwxrwt と表示されます。監査のためにすべてのSUIDファイルを見つけるには、find / -perm -4000 -type f 2>/dev/null を使います。

10. umaskとは何ですか?

umaskは、新しく作られるファイルやディレクトリから一部の権限を取り除くマスクです。ファイルの基本権限は666、ディレクトリは777で、umaskはそこからビットを減算します。一般的なumask 022 では、ファイルは644、ディレクトリは755で作成されます。現在の値は umask コマンドで確認できます。

11. ユーザーとパスワードはどこに保存されていますか?

アカウント情報は /etc/passwd にあります。ユーザー名、UID、主グループのGID、ホームディレクトリ、シェルが記録されています。パスワードのハッシュは /etc/shadow に分けて保存され、読めるのはrootだけです。そのため、一般ユーザーがハッシュを取り出して総当たりすることはできません。グループ情報は /etc/group にあります。

ユーザー情報は id user と getent passwd user で確認できます。後者はLDAPなどの外部ソースも参照します。

12. sudoはどのように動作しますか? rootでログインするより優れている点は何ですか?

sudo は、/etc/sudoers と /etc/sudoers.d/ のルールに従って、別のユーザー(既定ではroot)としてコマンドを実行します。ユーザーが入力するのはrootのパスワードではなく自分のパスワードで、すべての操作は誰が実行したかとともにログに記録されます。

ルールはすべての操作を許可することも(alena ALL=(ALL:ALL) ALL)、特定のコマンドだけを許可することもできます。sudoersの編集には必ず visudo を使います。保存前に構文をチェックするので、誤りでsudoが使えなくなることを防げます。Ubuntuでは sudo グループ、RHEL系では wheel グループに所属させることで管理者権限を与えます。

13. ユーザーをグループに追加したのに、変更が反映されないのはなぜですか?

usermod -aG docker alena は、ユーザーを追加グループに加えます。-a オプションは必須です。付けないと、-G が既存のグループ一覧を置き換えてしまいます。

変更は次回のログイン時に反映されます。現在のセッションは古いグループ一覧を保持しているからです。再ログインするか、newgrp docker で新しいグループを持つシェルを開いてください。確認には id を使います。

プロセス

14. プロセスとPIDとは何ですか? プロセスはどのように確認しますか?

プロセスとは、実行中のプログラムのことです。独自のアドレス空間、開いているファイル、PIDという識別子を持ちます。各プロセスには親(PPID)があり、すべてのプロセスの共通の祖先はPID 1です。プロセス一覧は ps aux や ps -ef で、ツリーは pstree や ps -ef --forest で、リアルタイムの状況は top や htop で確認します。

15. SIGTERMとSIGKILLの違いは何ですか?

kill PID は既定でSIGTERM(15)を送ります。これは丁寧な終了要求です。プロセスはそれを捕捉して、接続を閉じ、データを保存してから終了できます。SIGKILL(9、kill -9)は捕捉できません。カーネルは即座にプロセスを終了させ、後片付けは行われません。

正しい順序は、まずSIGTERMを送り、プロセスが応答しない場合にだけSIGKILLを使うことです。もう1つよく使うシグナルはSIGHUPです。多くのデーモンはこれを受け取ると設定を再読み込みします。

16. ゾンビプロセスとは何ですか?

ゾンビプロセスは、すでに終了しているが、親プロセスがその終了コードを wait() で読み取っていないプロセスです。ほとんどリソースを消費しませんが、プロセステーブルにエントリが残ります。ps では状態が Z と表示されます。

ゾンビプロセスを直接殺すことはできません。すでに死んでいるからです。親プロセスに回収させる必要があります。親のプログラムを修正するか、親を終了させれば、ゾンビはPID 1に引き取られ、PID 1が回収します。

17. load averageは何を示しますか?

uptime と top に表示される3つの数値は、直近1分、5分、15分における、実行可能なプロセスの平均数です。Linuxでは、割り込み不可能な待機状態(状態 D)のプロセス、通常はディスク待ちのプロセスも含まれます。

値はCPUコア数(nproc)と比べて評価します。4コアの機械で負荷が4なら全負荷、16コアの機械では4分の1です。CPU使用率が低いのに負荷が高い場合は、I/Oに問題がある可能性が高く、iostat や top の wa 欄で確認します。

ネットワーク

18. IPアドレス、ルート、開いているポートはどのように確認しますか?

インターフェースのアドレスは ip a、ルーティングテーブルは ip r で確認します。古い ifconfig やnet-toolsパッケージの netstat は、多くのディストリビューションで標準ではインストールされていません。

待ち受けているポートとそれを開いているプロセスは ss -tlnp で確認します。t はTCP、l は待ち受け中のソケットのみ、n は名前解決をしない、p はプロセスを表示する、という意味です。UDPは ss -ulnp を使います。

$ sudo ss -tlnp
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0      511          0.0.0.0:80        0.0.0.0:*     users:(("nginx",pid=812,fd=6))
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*     users:(("sshd",pid=640,fd=3))

19. サービスが127.0.0.1:8080で待ち受けている場合、外部から接続できますか?

できません。127.0.0.1はループバックインターフェースで、同じマシンからのみアクセスできます。外部からの接続を受け付けるには、サービスが外部インターフェースのアドレス、または 0.0.0.0(すべてのIPv4アドレス)で待ち受ける必要があります。「ポートは開いているのに外部から使えない」というのは、ファイアウォールと並んでよくある原因です。

20. Linuxはホスト名をどのようにIPアドレスに変換しますか?

参照順序は /etc/nsswitch.conf の hosts: の行で決まります。通常は最初に /etc/hosts を読み、次にDNSを問い合わせます。DNSサーバーのアドレスは /etc/resolv.conf から取得されます。systemd-resolvedを使うシステムでは、そこにはローカルアドレス 127.0.0.53 が書かれていて、実際のサーバーは resolvectl status で確認できます。

確認には dig example.com や、特定のサーバーへ問い合わせる dig @1.1.1.1 example.com を使います。注意点として、dig と nslookup はDNSに直接問い合わせ、/etc/hosts を読みません。アプリケーションと同じ経路をたどるのは getent hosts example.com です。

21. TCPとUDPの違いは何ですか?

TCPは接続を確立し(3ウェイハンドシェイク:SYN、SYN-ACK、ACK)、データの確実な配送と順序を保証し、失われたパケットを再送します。HTTP、SSH、ほとんどのデータベースはTCPを使います。UDPは接続を確立せず、保証のないデータグラムを送ります。そのかわり遅延が小さく、DNSの問い合わせ、ビデオ通話、ゲームで使われます。

22. サイトが開かないとき、どのように原因を探しますか?

名前から、アプリケーションに向かって層ごとに確認します。

  1. 名前が解決されるか:dig site.example で、アドレスが期待どおりか確認します。
  2. ホストに到達できるか:ping(禁止されている場合もあります)、traceroute または mtr。
  3. ポートが開いているか:nc -zv host 443 または curl -v https://site.example。
  4. サーバー側:サービスが動いているか(systemctl status nginx)、ポートを待ち受けているか(ss -tlnp)、ファイアウォールが遮断していないか(sudo nft list ruleset、sudo ufw status)。
  5. アプリケーションのログと、サービスの journalctl -u。

面接官が重視するのは、特定のツールの組み合わせを知っていることよりも、システマティックな確認の順序です。

23. TIME_WAITとは何ですか?

TCP接続が閉じられた後、先に閉じた側は、古い接続の遅れて届いたパケットが、同じアドレスとポートを使う新しい接続に紛れ込まないように、しばらくのあいだソケットをTIME_WAIT状態に保ちます。負荷の高いサーバーや、短い接続を大量に行うクライアントでTIME_WAITが多いのは正常です。数を数えるには ss -tan state time-wait | wc -l を使います。

24. /etc/hostsとDNSの違いは何ですか? /etc/hostsはいつ必要になりますか?

/etc/hosts は、特定のマシン上にある静的な「アドレス—名前」の表です。標準のnsswitch設定ではDNSより先に参照されます。テストに便利で、たとえばDNSレコードを変更する前に、ドメインを新しいサーバーに向けることができます。DNSは分散システムで、その応答はすべてのクライアントから同じに見えます。/etc/hosts の誤りは、「自分の環境ではサイトが開くのに、他の人には開かない」という状況の典型的な原因です。

まとめ

Linuxの面接質問は、3つの点を確認します。システムのモデル(inode、権限、プロセス、起動)を理解しているか、診断ツール(ss、dig、journalctl、lsof)を知っているか、そして手順を踏んで原因を探せるか。回答には、コマンドと実務での例を添えてください。ファイルシステム、権限、ネットワークは、Linuxコースで実践を通して詳しく扱います。

よくある質問

ジュニアDevOpsの面接では、Linuxについて何を聞かれますか?

通常は基礎です。ナビゲーションと権限、プロセスとsystemctl、ログの確認、ip、ss、dig、curlなどのネットワークコマンド、Bashスクリプトの基本などです。「ディスクを埋めているものを見つけてください」といった実務的な課題が出ることもよくあります。

コマンドのオプションをすべて暗記する必要がありますか?

いいえ。具体的なオプションはmanで確認すると答えても問題ありません。それよりも、どのツールがどの問題を解決するのか、その出力が何を意味するのかを理解していることが重要です。

面接対策にはどのディストリビューションを学ぶべきですか?

一般的なサーバー向けのディストリビューションなら何でも構いません。Ubuntu、Debian、あるいはRHEL互換のRocky Linuxなどです。基礎知識は共通で、違うのは主にパッケージマネージャとサービス名の一部です。

面接の実技部分にはどう備えればよいですか?

仮想マシンを立ち上げて、実際の課題に取り組みましょう。Webサーバーをsystemdサービスとして設定する、SSH鍵でログインできるようにする、ファイアウォールを設定する、ポートからプロセスを見つける、などです。作業を声に出して説明する練習も、準備の一部です。

動画でこのテーマを学ぶ

このテーマはコース「Linux: с нуля до уверенного администрирования」で実践とともに詳しく解説しています。

コースへ