いますぐ実践! Linuxシステム管理

いますぐ実践! Linux システム管理 / Vol.273 / 読者数:2834名

超おひさしぶりです、うすだです。

ちょっと気を抜くと、半年単位で時が過ぎていることに気づかされます。

それはさておき、我が家ではオカメインコという素敵な鳥を飼っていますが、 先日、もう1羽をお迎えすることになりました。

家に来た当初はヒナでしたが、まもなく羽ばたく練習を自主的にはじめ、 ぶつかったり落ちたりする失敗を繰り返して、 いまでは立派に部屋の中を飛び回っています。

オカメインコは小心者で、すでにいる1羽は、よほどのことがない限り、 冒険めいたことをしません。見慣れないものが部屋にあったら、 ぜったい近づかず、関わらないようにしようとします。

ですが、新たに加わったオカメさんは、くちばしで突っついてみたりと、 能動的にアクションをおこします。そこでもし失敗したとしても、 それがよい経験になる、と思っているかのようです。

われわれ人間も、歳をとると冒険をしなくなりがちです。ですが、何歳になっても、 自らの手を動かし、失敗して経験することで、学習し、成長をするのだと思います。

元気あふれる、つやつやしたオカメインコとそのしぐさを見ながら、 私も新しいことに挑戦し、自分の手を動かしていかねば、と思いました。

自分の年齢と、新しいことをぜんぜんしていないことにあらためて驚愕と絶望を感じつつ、 半年ぶりにはりきってまいりたいと思います。

今回のお題 - ネットワークに関するコマンドを覚える (レベル:初級)

ネットワークに関するコマンドといえば、「ifconfig」や「netstat」、 「route」などですが、いつの間にやら、 これらは古いコマンドになってしまっているようです。

そこで今回は、これらに代わる新しいコマンドを紹介したいと思います。

新しいというか、今では当たり前のコマンドかもしれませんが、 これらのコマンドをもしご存じなければ、 今後はオールドタイプの人だと思われることが少なくなる…と思います。

非常に前向きに捉えますと、オールドタイプの人から(いえ、 オールドタイプじゃない人からも)、こいつはちゃんと知っているんだ、 と思ってもらえることがあるかもしれません。

ifconfig ではなく ip

ifconfig といえば、 ネットワークインタフェースの状態の確認や設定を行うコマンドです。以下のように、 引数なしで実行することが多々あるのではないかと思います。

  $ ifconfig
  wlp2s0    Link encap:Ethernet  HWaddr 12:34:56:78:9a:bc  
            inet addr:192.168.1.18  Bcast:192.168.1.255  Mask:255.255.255.0
            inet6 addr: fe80::1034:56ff:fe78:9abc/64 Scope:Link
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:11933989 errors:0 dropped:297 overruns:0 frame:0
            TX packets:9384761 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:1000 
            RX bytes:12284602142 (12.2 GB)  TX bytes:3990932842 (3.9 GB)
  ...後略...

ifconfig に代わるコマンドは、「ip」です。
ip コマンドには様々な機能があり、種類(OBJECT)を引数に指定して使い分けます。 ifconfig と同等のことをするには「address」を指定します。
状態を確認するには、address と show を引数に指定します。
(address は addr などと省略できます。ちなみにTABで補完できます。)

  $ ip addr show
  0: wlp2s0:  mtu 1500 qdisc mq  state UP group default qlen 1000
      link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
      inet 192.168.1.1/24 brd 192.168.1.255 scope global wlp2s0
         valid_lft forever preferred_lft forever
      inet6 fe80::1034:56ff:fe78:9abc/64 scope link 
         valid_lft forever preferred_lft forever
  ...後略...

インタフェースに新たなIPアドレスを設定するには「add」を使います。
主な書式は以下の通りです。

  ip address add IPアドレス dev インタフェース

たとえば、IPアドレス 192.168.1.123 をインタフェース wlp2s0 に追加するには、 以下を実行します。

  $ sudo ip addr add 192.168.1.123 dev wlp2s0

show を実行すると、増えていることを確認できます。

  $ ip addr show dev wlp2s0
  0: wlp2s0:  mtu 1500 qdisc mq state UP group default qlen 1000
      link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
      inet 192.168.1.18/24 brd 192.168.1.255 scope global wlp2s0
         valid_lft forever preferred_lft forever
      inet 192.168.1.123/32 scope global wlp2s0
         valid_lft forever preferred_lft forever
      inet6 fe80::1034:56ff:fe78:9abc/64 scope link 
         valid_lft forever preferred_lft forever

IPアドレスを削除するには「del」を使います。
主な書式は add と同じです。
たとえば、先ほど追加したアドレスを削除するには、以下を実行します。

  $ sudo ip addr del 192.168.1.123 dev wlp2s0

なお、以降も同様ですが、「help」で簡単なヘルプが出力されます。

  $ ip addr help
  Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
                                                        [ CONFFLAG-LIST ]
         ip address del IFADDR dev IFNAME [mngtmpaddr]
         ip address {show|save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
                              [ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
         ip address {showdump|restore}
  ...後略...

route ではなく ip

route は、ルーティングテーブルの設定や確認を行うコマンドです。
引数なしで実行すると、ルーティングテーブルの内容を出力します。

$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default fgw 0.0.0.0 UG 600 0 0 wlp2s0 link-local * 255.255.0.0 U 1000 0 0 docker0 172.17.0.0 * 255.255.0.0 U 0 0 0 docker0 192.168.1.0 * 255.255.255.0 U 600 0 0 wlp2s0

route に代わるコマンドは、ip です。引数に「route」を指定します。
ルーティングテーブルの内容を出力するには、route と show を指定して実行します。

  $ ip route show
  default via 192.168.1.254 dev wlp2s0  proto static  metric 600 
  169.254.0.0/16 dev docker0  scope link  metric 1000 linkdown 
  172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1 linkdown 
  192.168.1.0/24 dev wlp2s0  proto kernel  scope link  src 192.168.1.18  metric 600

経路を追加するには「add」を使います。
書式は複雑なため、詳細についてはオンラインマニュアル(man ip-route) を見ていただきたいですが、たとえば、 「192.168.2.0」宛のパケットを「192.168.1.254」経由で送る経路を追加するには、 以下を実行します。

  $ sudo ip route add 192.168.2.0 via 192.168.1.254

  $ ip route show
  ...前略...
  192.168.2.0 via 192.168.1.254 dev wlp2s0 

経路を削除するには「del」を使います。
先ほど追加した経路を削除するには、add を del に変えて実行します。

  $ sudo ip route del 192.168.2.0 via 192.168.1.254

arp ではなく ip

arp は、 IPアドレスとMACアドレスを対応づけているARPテーブルの確認や管理を行うためのコマンドです。

  $ arp -a
  fgw (192.168.1.254) at 00:11:22:33:44:55 [ether] on wlp2s0
  tamao (192.168.1.128) at 66:77:88:99:aa:bb [ether] on wlp2s0
  ...後略...

arp の代わりとなるコマンドは…やはり ip です。引数に「neighbour」を指定します。 (ちなみに、neighbor や neigh などでも構いません。)
ARPテーブルの内容を出力するには、neighbor と show を引数に指定して実行します。

  $ ip neigh show
  192.168.1.254 dev wlp2s0 lladdr 00:11:22:33:44:55 REACHABLE
  192.168.1.128 dev wlp2s0 lladdr 66:77:88:99:aa:bb STALE
  ...後略...

なお、「REACHABLE」はARPによりアドレス解決された直後、 「STALE」は解決してから一定時間経過した状態を示します。
(あと、「PERMANENT」は永久保存、「FAILED」は解決に失敗、です。)

ARPテーブルのエントリを追加するには「add」を使います。
主な書式は以下の通りです。

  ip neighbour add IPアドレス lladdr MACアドレス dev インタフェース

たとえば、「192.168.1.124」のMACアドレスが「99:88:77:66:55:44」のエントリを wlp2s0 に対して追加するには、以下のように実行します。

  $ ip neigh add 192.168.1.124 lladdr 99:88:77:66:55:44 dev wlp2s0

  $ ip neigh show
  ...前略...
  192.168.1.124 dev wlp2s0 lladdr 99:88:77:66:55:44 PERMANENT
  ...後略...

ARPテーブルのエントリを削除するには「del」を使います。
主な書式は add と同じです。
先ほど追加したエントリを削除するには、add を del に変えます。

  $ ip neigh del 192.168.1.124 lladdr 99:88:77:66:55:44 dev wlp2s0

  $ ip neigh show
  ...前略...
  192.168.1.124 dev wlp2s0  FAILED
  ...後略...

netstat ではなく ss

netstat は、ネットワークに関する様々な情報を確認するコマンドです。
たとえば、「-a」オプションを指定して実行するとsocketの状態、 「-t」オプションでTCPのみ、を出力します。

  $ netstat -at
  Active Internet connections (servers and established)
  Proto Recv-Q Send-Q Local Address     Foreign Address    State      
  tcp        0      0 oreore:domain     *:*                LISTEN     
  tcp        0      0 *:postgresql      *:*                LISTEN     
  tcp        0      0 localhost:8888    *:*                LISTEN     
  tcp        0      0 *:smtp            *:*                LISTEN     
  ...後略...

netstat の代わりとなるコマンドは、「ss」です。
ss は、socket の状態を確認するためのコマンドです。 多くのオプションが netstat と同様ですので、netstat をすでにご存じであれば、 違和感なく使用できます。

たとえば、先ほどと同じオプションを指定して ss を実行してみますと、 以下のような出力が得られます。

  $ ss -at
  State    Recv-Q Send-Q Local Address:Port         Peer Address:Port
  LISTEN   0      5      127.0.1.1:domain           *:*                    
  LISTEN   0      128        *:postgresql       *:*                    
  LISTEN   0      128    127.0.0.1:8888             *:*                    
  LISTEN   0      100        *:smtp             *:*                    
  ...後略...

出力結果の書式は異なりますが、得られる情報は同等です。
他にもいろいろオプションがあります。いろいろ試してみてください。

おわりに

以上、新しいネットワーク関連のコマンドを、淡々とご紹介しました。

とはいえ、「ip」と「ss」だけで、かつ使い方の説明だけでしたが。
半年ぶりですので、生暖かい目で見守っていただけますと幸いです。

1つのコマンドに様々な機能がつめ込まれているため、 引数に指定できるコマンドやオプションがいっぱいあります。 もっと詳しく知りたいという貴兄は、オンラインマニュアルなどを参考にしてください。

宿題の答え

前回の宿題は、

  sshpass と autossh を組み合わせて使ってみましょう。

でした。

autossh では、環境変数「AUTOSSH_PATH」を設定すると、 ssh コマンドの代わりに AUTOSSH_PATH で指定したコマンドが実行されます。
ですので、AUTOSSH_PATH に sshpass を指定すればめでたしめでたし… と言いたいところですが、なにやら叱られてしまいます。

  $ AUTOSSH_PATH=sshpass autossh -p パスワード ingw
  sshpass: invalid option -- 'L'
  Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
  ...後略...

autossh は -L オプションと -R オプションを指定して AUTOSSH_PATH のコマンドを実行しますが、 sshpass にはそのオプションがないためエラーとなるようです。

そこで、以下のシェルスクリプトを作成し、 これを AUTOSSH_PATH に指定してみたいと思います。

#!/bin/sh
sshpass -e ssh $*

sshpass で明示的に ssh コマンドを指定し、 autossh から渡される引数をそのまま渡しているので、無事に実行されるようになります。

たとえば、このスクリプトを「sshpass.sh」というファイル名で保存し、 chmod コマンドで以下のように実行可能な状態にしておきます。

  $ chmod +x sshpass.sh

あとは、以下のように実行するだけです。

  $ SSHPASS=パスワード AUTOSSH_PATH=./sshpass.sh autossh ホスト名

SSHPASS の設定が面倒という貴兄は、 シェルスクリプト内に設定を入れてしまってもよいかもしれません。
ただ、パスワードを他人に見られないようにする(chmodで読み込みを自分のみ許可する) など、取り扱いには十分注意してくださいませ。

今回の宿題

今回の宿題は、

  ipコマンドのaddress、route、neighbour以外の機能を調べましょう。

です。

man や ip help で確認すると、他に link や rule、 netns などたくさんのOBJECTがあることがわかります。

全部調べるのは難しいですが、 名前を見て気になるものをいくつか選んで調べてみてはいかがでしょうか。

あとがき

いま、本業で自動運転に関わっており、「ROS」という、 ロボットを制御することを目的とするメタ・オペレーティングシステム (フレームワークのようなものだと思ってください)にどっぷり浸かっております。

ja/ROS/introduction - ROS WiKi
http://wiki.ros.org/ja/ROS/Introduction

最近、ROS の本がいろいろ出ていますので、ROS のことを知りたければ、 それらを読んで理解を深めることができます。

ですが、本を読むだけでなく実際に手を動かすことで理解が進む、 ということも多々あります。
わたしも、テストコースや公道で日々実験を繰り返すことで、 ROS の理解が深まったと、実際に体験してそう感じています。

そういえば、最初にパソコンの存在を知り、 ゲームを作りたいなと思って BASIC を学び始めたときよく耳にした言葉が、 理解よりもまずプログラムを打ち込んで動かせ、でした。

最近あまり耳にしなくなりましたが、 「習うより慣れろ」で検索してみるとたくさんヒットするので、 一般化したということでしょうか。

などと思っていたところ、タイミングよく以下の本をいただく機会がありましたので、 意気揚々?と紹介させていただきます。

Raspberry Piで学ぶ ROSロボット入門
http://www.amazon.co.jp/exec/obidos/ASIN/4822239292/usupiorg-22

ラズパイのロボットを ROS で制御するのに必要なことが、 一からすべて網羅されているという、お得な本です。
正直、この内容でよく一冊におさめられたなあ、と驚愕しました。
(Ubuntu、Git、GitHub、Travis CI、OpenCV、Julius…てんこ盛りです。)

逆に、ROS やデバイスドライバなどの概要的な説明は、比較的スルーされています。 後から別の書籍で補えばよい、ということだと思います。

ロボットでないと試せない内容もありますが、 ラズパイだけで試せるものも多々あります。あれこれ考えず、 まずは手を動かしてみる、というのがよろしいのではないかと思います。

 

あ、ラズパイと言えば、いま、某日経Linuxで、 ラズパイサーバの連載が掲載されています。興味がありましたら、 立ち読んでみてください。
初心者向けで、難しいことは一切書いていません(書けていません)ので、 安心してお読みいただけます。
なお、6月8日発売の7月号では、Webサーバを取り上げています。

 

…よし、可能な限り宣伝しまくりました。もう悔いはありません。

 

今回も、ここまで読んでいただき、誠にありがとうございました。
次回は、お盆休みを目標に発行したいと思います! (あくまでも目標!!)

 

「いますぐ実践! Linux システム管理」はこちらです。
メルマガの解除、バックナンバーなども、以下からどうぞ。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

その他、作者に関するページは、概ね以下にございます。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://twitter.com/kuriking/ (twitter)
http://facebook.com/kuriking3 (facebook)
https://jp.pinterest.com/kuriking/ (pinterest)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本