P378〜の練習問題01-1、01-2のWriteupです。
問題01-1
(1)
uname -a は「全部盛り」オプションで、出力は左から順に次の意味を持ちます。
出力 意味
Linux カーネル名
serv ホスト名
5.4.0-42-generic カーネルリリース番号
#46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 カーネルのビルド番号とビルド日時
x86_64(3回) マシンのハードウェア名/プロセッサ種別/ハードウェアプラットフォーム
GNU/Linux OS名
(2)
/proc は実ファイルではなく、カーネルが実行時に生成する仮想的なファイルシステム(procfs)です。/proc/cpuinfo を読むと、そのマシンが認識しているCPUの情報がリアルタイムに得られます。
(3)
net-toolsってのは、昔ながらのネットワーク管理コマンド群をまとめたパッケージ名です(Ubuntu 18.04以降は標準では入っておらず、代わりに iproute2 パッケージの ip コマンドが使われます)。「パッケージそのものがインストールされているか」を調べる方法はいくつかあります。
方法1:dpkgでパッケージの状態を直接確認する(最も確実)
dpkg -l | grep net-tools
dpkg -s net-tools
ヒットしなければ未インストールです。
方法2:apt(APTのパッケージDBから調べる)
apt list --installed 2>/dev/null | grep net-tools
方法3:net-toolsが提供するコマンド自体が使えるか調べる
パッケージ名を直接調べる代わりに、net-toolsが提供する実行ファイル(ifconfig、netstat など)がPATH上に存在するかで間接的に判断する方法です。後ろの解説にもありますな。
which ifconfig
command -v ifconfig
コマンドが見つかればフルパスが返り、見つからなければ何も返りません。
補足:方法1・2は「パッケージ管理システム上インストール済みか」を確認するもので、方法3は「そのコマンドが実際に実行可能か」を確認するものです。まれに手動でバイナリだけ配置されているケースもあるため、両方の視点を持っておくと確実です。
(4)
ip a(ip address show の省略形):ネットワークインターフェースとIPアドレスの一覧
ip route show:ルーティングテーブル
ip neigh(旧arp -a相当):ARPキャッシュ(近隣のMAC-IPマッピング)
(5)
ss は netstat の後継コマンドで、カーネル内のソケット情報を直接読むため高速に動作します。オプションの意味は次の通りです。
| オプション | 意味 |
|---|---|
-n |
ポート番号やアドレスを名前解決せず数値のまま表示(--numeric) |
-l |
LISTEN状態(待受中)のソケットのみ表示 |
-t |
TCPソケットを対象にする |
-u |
UDPソケットを対象にする |
-p |
そのソケットを使っているプロセス名/PIDを表示(要root権限、webadminのような一般ユーザーだと自分のプロセス以外はusers:(("...",...))の情報が見えないことがある) |
つまり ss -nltup は「このマシンが待ち受けているTCP/UDPのポートと、それを掴んでいるプロセスを、名前解決せず数値のまま一覧表示する」コマンドです。
列挙フェーズで「このホストは何のサービスを動かしているか」をSSHの中から直接確認できる、という点がこの設問の狙いのようですね
問題01-2
(1), (2)
実行前に考えるポイント
find の基本構文は find <検索開始パス> <条件...> です。それぞれの要素を分解すると、
| 要素 | 意味 |
|---|---|
/ |
検索開始パス。ルートディレクトリ、つまりマウントされている全ファイルシステムを対象に検索することを意味します。 |
-iname '*password*' |
ファイル名(パス名ではなくベース名)が *password* というワイルドカードパターンに一致するかを調べる条件。-name の大文字小文字を無視する版が -iname なので、Password・PASSWORD・password などすべてヒットします。 |
-type f |
種別が「通常ファイル」であるものだけに絞り込む条件。ディレクトリ(d)やシンボリックリンク(l)、デバイスファイルなどは除外されます。 |
つまり実行前に予想すべき挙動は「システム全体から、ファイル名に大文字小文字問わずpasswordを含む通常ファイルを、見つかり次第どんどん標準出力に流していく」というものです。
(1)と(2)違いは末尾の 2> /dev/null だけです。これはシェルのリダイレクト構文で、
2 … ファイルディスクリプタ番号2番、つまり標準エラー出力を指す
… 出力を指定した先へ書き込む(リダイレクトする)
/dev/null … Linuxの「ヌルデバイス」。書き込まれたデータをすべて破棄する特殊ファイル
という意味になります。合わせると「標準エラー出力だけを/dev/nullに捨てる」、つまり「Permission deniedのようなエラーメッセージは表示せず、見つかったファイルパス(標準出力)だけを画面に残す」という指定です。標準出力(1>、省略時は単に>)には触れていないので、そちらは通常通りターミナルに表示され続けます。
(3)
P1160参照。



