前置き
ネットワークの体験前にまとめたやることリストの消化、第1章としてはLinuxコマンドの理解になります。
とりあえず、不要そうなオプション的知識まで言及はしないですが、今後の活動内で使用した実績があれば、この記事へ追記するようにします。
前提
参考書籍
前の記事より、参考にしている書籍は上記のものになります。
TCP/IPの基礎からじっくり学びたい方は、この本を読みながらLinuxバシバシやったほうが有意義かもしれません。(ある程度の知識レベルを要求されますが)
環境
環境構築の記事の通りに構築した環境になっています。
- 仮想マシン:vagrant + VirtualBox:ubuntu/trusty64(14.04)
- コンテナ:docker:ubuntu 20.04(focal)
パッケージ・コマンドについて
基本
whoami
whoami
現在ログインしているユーザ名を表示します。
vagrantだと【vagrant】というユーザ名でログインしています。
dockerだと【root】というユーザ名でログインしています。
rootユーザは、後述のスーパユーザに該当する特権アカウントになります。
sudo
sudo [OPTION] [COMMAND]
スーパーユーザ(以下root)、つまり管理者の権限を持ちながらコマンドを実行したい時に付ける接頭辞みたいなものです。
権限的にはrootですが、必要な認証情報はログインユーザのものとなります。
vagrantの場合、特に変わったことをしていなければパスワード要求無くroot権限が使えると思います。
セキュリティ的には、sudoで与えられる権限を細かく設定も可能なようなので問題は無さそうです。
後述のコマンド達の中には、sudoを付けないと実行できないコマンドも出てきます。なお、dockerの初期ユーザのようにroot権限でログインしている場合はsudoを付けなくても実行可能と思われます。(少なくともapt updateは検証しました)
apt
ubuntu系のLinuxでパッケージを管理するためのコマンドです。
過去のバージョンではapt-getが主流だったみたいですが、14.04以降はaptが推奨されています。
aptは、apt-getの欠点が解消された新しいパッケージ管理コマンドとのことです。
update
sudo apt update
インストール可能なパッケージのリストを最新のものにアップデートします。
パッケージインストール前に癖づけるべきコマンドですね。
list
apt list [NAME]
パッケージ名を完全一致で検索します。
NAMEを指定しなければapt可能な全リストを表示できますが、ターミナルがもの凄いことになるので下記のようにinstalledオプションをつける用途が多いと思います。
apt list --installed
search
apt search [NAME]
パッケージ名を部分一致で検索します。
こちらもNAME無しだと全パッケージが出ます。
installedのオプションは無いので、通常の検索用途が主になるかと思います。
show
apt show [NAME]
指定したパッケージの詳細を表示します。
install
apt install [NAME]
指定したパッケージをインストールします。yオプションを付けるとBashからの問い合わせに全てYESで答えてくれるので、複数パッケージのインストールに便利です。
upgrade
apt upgrade [NAME]
指定したパッケージを更新します。
remove
apt remove [NAME]
指定したパッケージをアンインストールします。
複数行のコマンド
sudo apt -y install \
bash \
coreutils \
grep \
iproute2 \
iputils-ping \
traceroute \
tcpdump \
bind9 \
bind9utils \
dnsmasq-base \
netcat-openbsd \
python3 \
curl \
wget \
iptables \
procps \
isc-dhcp-client
バックスラッシュを加えることで、コマンドの見た目を複数行に分けた状態でも1コマンドとして実行できます。
ターミナルに打ち込む分としては特にメリットがありませんが、知っておくとバックススラッシュで見やすくしたコマンドを参考に載っけてるWebサイトからコピペ出来たりします。
さて、上記の例にあるのは[前提]の項で紹介した書籍でインストールするパッケージ群になります。
次の項からは、このパッケージ群に含まれているコマンドを中心に基本的に使用しそうなものとネットワークに関係しそうなものを解説していきます。
パッケージとしては含まれているが、コマンドが直接含まれていないもの(bash等)は、特に解説しません。
前のコマンドの結果を渡して実行(パイプ)
cat [FILE] | grep 'STRING'
単純な連続実行(;)や同時実行(&)ではなく、前に書いたコマンドの結果を続くコマンドに渡すことが可能です。
上記の例では、[FILE]のファイルから’STRING’の文字が含まれる行を出力します。
ファイル・ディレクトリ操作
ファイル操作系のコマンド挙動としては基本的に以下のように動作する場合が多い。
- [/]から始まる場合は、ルートディレクトリからの指定となる
- [./]から始まる場合は、カレント(現在の)ディレクトリからの指定となる
- ディレクトリ・ファイル名から開始する場合もカレントディレクトリからの指定と同じ結果になる
- [../]から始まる場合は、一つ上の階層のディレクトリを指定したことになる
- [../../../]と続けることも可能
- [~/]から始まる場合は、ホームディレクトリからの指定となる
pwd
【coreutils】パッケージにある。
カレントディレクトリを表示する。
vagrantだと[/home/vagrant]で、dockerだと[/]が初期ディレクトリとなる。
ls
【coreutils】パッケージにある。
指定ディレクトリ内にあるディレクトリ・ファイル一覧を表示する。
通常は名前を羅列するのみで、オプションにより表示をカスタム可能。オプションは多く存在するが、今回は以下のものだけ把握すればよいだろう。
-a
[.]から始まる隠しファイルも含めて全てを表示。
-R
サブディレクトリ内のファイル群も全て表示。再帰的に動くので、内部のファイルを全て羅列することになる。
mkdir
【coreutils】パッケージにある。
ディレクトリを作成する。
rmdir
【coreutils】パッケージにある。
空のディレクトリを削除する。
cd
ディレクトリ階層を移動する。
touch
【coreutils】パッケージにある。
本来はファイルのアクセス時刻や変更時刻を変更するためのものだが、空ファイルを新規に作成する場合にも利用する。
cp
【coreutils】パッケージにある。
ファイルやディレクトリをコピーする。
mv
【coreutils】パッケージにある。
ファイルを移動する。
rm
【coreutils】パッケージにある。
ファイルを削除する。
テキスト操作
cat
【coreutils】パッケージにある。
ファイルの中身を閲覧することに最もよく使用する。
ファイルの連結機能などもある。
stat
【coreutils】パッケージにある。
ファイルの詳細情報を表示する。
cut
【coreutils】パッケージにある。
ファイル内から指定部分を出力する。
指定方法がビット単位なので、後述のgrepのほうが使用頻度が多いと思います。
パイプによるgrepとの連携も可能なようです。
grep
【grep】パッケージにある。
ファイル内から指定部分を出力します。
cutと違い、正規表現の文字列による指定になります。
ネットワーク操作
ネットワーク操作系の中ではiproute2というパッケージに含まれるコマンド群を多く紹介するが、過去にはnet-toolsというパッケージにある同等機能のコマンドがよく使われていた。
net-toolsは廃止していく流れだが、従来のコマンド知識としては頻出するので、旧コマンドとして併記する。
ip addr (ifconfig)
【iproute2】パッケージにある。
IPアドレスやMACアドレスを表示する。
省略形で書くなら[ip a]でOK。
ip neighbor (arp)
【iproute2】パッケージにある。
ARPテーブルを表示する。
フルで書くなら[ip neighbor]でも表示される。
省略形で書くなら[ip n]でOK。
ip route (route)
【iproute2】パッケージにある。
ルーティングテーブルを表示する。
省略形で書くなら[ip r]でOK。
ip netns
【iproute2】パッケージにある。
Network Namespaceを操作する。
ss (netstat)
【iproute2】パッケージにある。
ネットワークの統計情報を表示する。
ping
【iputils-ping】パッケージにある。
ICMPパケットを使って、宛先IPの応答を確認する。
-c
エコーを送る回数を指定する。Linuxにおいては、回数を指定しないと[ctrl + C]で抜けるまで送り続けることになる。
ping -c 4 8.8.8.8
Google社のDNSサーバのIPアドレス[8.8.8.8]にエコーリクエストを4回出します。
traceroute
【traceroute】パッケージにある。
ICMPパケットを使って、宛先IPへの経路を確認する。
内部的にはTTLを利用しています。
tcpdump
【tcpdump】パッケージにある。
パケットをキャプチャする機能です。
dig
【bind9utils】パッケージにある。
DNSサーバに問い合わせを行って結果を表示するコマンド。
dnsmasq
【dnsmasq-base】パッケージにある。
簡易的なDNS機能の提供とDHCP機能の提供が行えます。
netcat
【netcat-openbsd】パッケージにある。
【nmap】というパッケージにも付属している。Nmap版は高機能版とも言えるので、そちらを使うのも有りです。
指定の宛先にTCPかUDPにて接続し、CLIからテキストデータを送受信する機能です。
python3
【python3】パッケージにある。
厳密にはLinuxコマンドではないですが、HTTPサーバを立てるのに使用するので、紹介しておきます。
curl
【curl】パッケージにある。
通信プロトコルを用いてデータ転送を行う。
wget
【wget】パッケージにある。
指定したURLのファイルをダウンロードする。
iptables
【iptables】パッケージにある。
パケットフィルタリングとNAT機能を有するコマンド。
top
【procps】パッケージにある。
CPUのプロセスを負荷が高い順に表示する。
最後に
現状で把握しているコマンドはこんなところです。
2022/10/25現在は、コマンド名と概要1行程度の情報量ですが、
後発の記事で色々試していくにつれて充実させていきたいですね。