ロボットシステム学2016第2回

Tue Sep 6 11:00:07 JST 2016 (modified: Fri Nov 29 17:28:47 JST 2019)
views: 861, keywords:

  このエントリーをはてなブックマークに追加 
   

ロボットシステム学

第2回

上田 隆一

2016年9月?日@千葉工業大学

今日の内容

  • ノートPCとラズパイを接続

やること

  • 下の写真のようにノートPCとラズパイを有線LANで直接接続
  • 次のような接続を構成
    • ラズパイ -> 有線LAN -> ノートPC -> ノートPCのWiFi -> インターネット
    • つまりノートPCをルータにする

ノートPCのOS別設定方法

Linuxの世界

  • ほぼ全てテキストファイルでできている
    • 設定ファイル等
      • /etc下のファイルを見てみましょう
      • $ cat /etc/passwd
  • どうやって見る?編集する?
    • エディタ
    • コマンド
    • 使えないとかなりストレス
      • 自転車と一緒で使えると自然に使えるようになるので 我慢して慣れられるかどうかで今後が変わる

エディタ

  • (CLI, command line interface)でテキストファイルを読み書きするもの
    • EmacsとVimがメジャー
  • 特にここでは説明しません
    • 練習コマンドがあるのでそれで練習を
    • Vimにはvimtutorというコマンドがあり、 最初はこれをやるのが一番良い

コマンド

  • CUIからプログラムを起動する場合は字をシェルに 打ち込むが、 その字のこと
    • プログラム自身のことも指し、このスライドでは プログラム自身のこと
  • だいたいこの二種類
    • システム操作のためのコマンド
      • サービスを立ち上げたり止めたり
      • これはマニュアルを見たら覚えられる
    • フィルタコマンド
      • 標準入力から文字を受けて標準出力に加工した字を出すもの
      • 組み合わせて使う(マニュアルがあまりない)

フィルタコマンド

  • 多数: grep, find, wc, ...
    • /bin/下に存在
  • とりあえず最初に覚えるもの
    • cat: 表示
    • sudo: root権限でコマンドを実行
      1. $ sudo cat /etc/shadow
    • grep: 検索
      1. $ grep ueda /etc/passwd
      2. ueda:x:1000:1000:Ryuichi UEDA,,,:/home/ueda:/bin/bash
    • find: ファイルの列挙
      • 使い方の例
        1. $ find /
      • 出力がザーッと出て使いにくくないか?

コマンドの組み合わせ

  • 特定のファイルを探すには?
    • 例: passwdファイルってどこにあったけ?
    • grepと組み合わせる
      1. sudo find / | grep passwd
      2. [sudo] password for ueda:
      3. ./var/lib/dpkg/info/passwd.postinst
      4. ./var/lib/dpkg/info/base-passwd.postinst
      5. ./var/lib/dpkg/info/passwd.preinst
    • さらに絞り込む(grepで正規表現を使う)
      1. $ sudo find / | grep '/passwd$'
      2. /var/tmp/etc/init.d/passwd
      3. /var/tmp/etc/cron.daily/passwd
      4. ...
    • lessで見る
      1. sudo find / | less

正規表現の例

  • 正規表現の例
    •  /etc/servicesの調査
      1. $ cat /etc/services | grep 80           #80を検索
      2. $ cat /etc/services | grep '[^0-9]80/'  #80番ポートのレコードだけ検索
      3. $ cat /etc/services | grep ftp                #ftpという語句を検索
      4. $ cat /etc/services | grep ^ftp       #最初がftpで始まる行を検索
  • 上級者向け
    • AWKとgrepで10000番ポート以上のレコードを抽出のこと

ファイルの操作

  • ls, mv, rm, cp, mkdir, rmdir
    • 口頭で説明します

man

  • マニュアルコマンド
    1. $ man grep
  • 章がある
    1. $ man 1 printf      #1章(コマンド)のprintf
    2. $ man 3 printf      #3章(C言語の関数)のprintf
  • 詳しくは $ man man で。

apt, apt-get

  • ソフトウェアのインストール
    • API (Advanced Packaging Tool): Debian系Linuxの パッケージシステム
    • 使用例
      • $ sudo apt-get install nmap   #旧
      • $ sudo apt install nmap         #新

ping

  • 通信先にパケットが届くか確認する時によく使う
    1. $ ping 8.8.8.8
      • GoogleのDNSにパケットが届くか確認
      • インターネットに出られるか確認する時によく使用
    2. $ ping www.yahoo.co.jp
      • ドメイン名をIPに変換できるか(名前解決)を確認する時に使用
    3. $ ping 192.168.1.254
      • 192.168.1.254に届くか確認
        • (192.168.1.254はルーターっぽいIPアドレス)
    • たまにセキュリティーのために先方がふさがっていることがある

ip, ifconfig

  • ネットワークの設定の確認
    • ifconfig: 古い確認方法
      1. $ ifconfig
    • ip: 新しい方法
      1. $ ip addr show    #IPアドレス等の確認

その他通信関係のコマンド

  • nmap: ネットワークのスキャン
    • インターネットに向けてやると最悪裁判になるので注意
    • 使用例
      1. $ nmap -sP 192.168.3.0/24   #自分のネットワークのマシンのIPアドレスを調査
      2. $ nmap 192.168.3.2 #開いているポートの調査
  • traceroute
    •  パケットの運ばれる経路を調査
      1. $ traceroute 8.8.8.8

scp, rsync

  • マシン間でファイルをコピー
    1. $ scp hoge 192.168.3.1~/     #hogeファイルを192..1のホームへ
    2. $ scp 192.168.3.1:~/hoge2 ./  #逆向き
    3. $ rsync -av hoge/ 192.168.3.1:~/hoge/ #hogeディレクトリを192..1のホームへ
    4. $ rsync -av192.168.3.1:~/hoge/ hoge/   #逆向き
  • TeraTermにもscp機能がある

 

停止・再起動

  • 停止
    • 次の2通り
      • $ sudo shutdown -h now
      • $ sudo poweroff
    • Linuxはデータをストレージに後から書き込むので 、ラズパイの場合は緑のランプが点滅しなくなるまでよく待つ
      • ストレージ: HDD, SSD, microSD, ...
    • 一方、ラズパイはプログラムやデータ等を別のマシンで管理する 場合が多いのでブチ切りする人が多く、特に問題にならない
  • 再起動
    • $ sudo reboot

プログラムのコンパイル

  • 次のようなC言語のファイルhoge.cを作ってみましょう
    • 端末のエディタがまだ使えない人はこの資料のコピペやscp等を駆使のこと
#include <stdio.h>
   int main(int argc, char const* argv[]){
       puts("あばばばば");
       return 0;
   }
  • gccを使ってコンパイルし、a.outを実行
    1. $ gcc hoge.c
    2. $ ./a.out
  • もしa.outが実行できなかったら $ chmod +x a.out 

スクリプトの実行

  • 次のようなPyhonのファイルhoge.pyを作ってみましょう
#!/usr/bin/python
   print "Java"
   
  • 以下を実行
    1. $ chmod +x hoge.py

    2. $ ./hoge.py

  • #!: シバン(shebang)
    • どのプログラムでこのスクリプトを実行するか指定

Raspbianのメンテナンス

  • rpi-update: カーネル等のアップデート
    • pi\@raspberrypi:~ $ sudo rpi-update
  • apt update: パッケージリストの更新
    • pi\@raspberrypi:~ $ sudo apt update
  • apt upgrade: パッケージのアップグレード
    • pi\@raspberrypi:~ $ sudo apt upgrade
  • raspi-config: Raspberry Piの機能設定
    • pi\@raspberrypi:~ $ sudo raspi-config
    • ロケールの設定
    • 言語環境の設定
    • 起動時にGUIの抑制
    • SPI等の機能をON/OFF

次回までの宿題

  • エディタが苦手な人はvimtutorをやっておく
    • $ vimtutor
  • 得意な人はVimやEmacsにプラグインを仕込む

補足

  • SSH接続でこういうのが出た時
\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@
   \@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! \@
   \@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@\@
  • ~/.ssh/known_hosts から接続先のIPアドレスを見つけてレコードを削除