Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ロボットシステム学2015年第9回

5,259 views

Published on

コマンドとGitについて

Published in: Technology
  • Be the first to comment

ロボットシステム学2015年第9回

  1. 1. ロボットシステム学 第9回 上田隆一
  2. 2. 本日の内容 • その他Raspberry Pi, Linuxの使い方 Oct. 7, 2015 ロボットシステム学 2
  3. 3. Linuxの設定ファイル等 • ほぼ全てテキスト – ユーザアカウント – httpdやsshd等のサービスの設定や起動のスクリプト – /etcの下にあるので見てみましょう • どうやって見るのか? – エディタ – コマンド Oct. 7, 2015 ロボットシステム学 3 使えないとかなり ストレスが溜まる
  4. 4. エディタ • CUIでテキストファイルを読み書きするもの – EmacsとVimがメジャー • 特にここでは説明しません 練習コマンドがあるのでそれで練習を – Vimにはvimtutorというコマンドがあり、 最初はこれをやるのが一番良い Oct. 7, 2015 ロボットシステム学 4
  5. 5. コマンド • CUIからプログラムを起動する場合は字をシェルに 打ち込むが、その字のこと – プログラム自身のことも指し、このスライドでは プログラム自身のこと • だいたいこの二種類 – システム操作のためのコマンド • サービスを立ち上げたり止めたり • これはマニュアルを見たら覚えられる – フィルタコマンド • 標準入力から文字を受けて標準出力に加工した字を出すもの • 組み合わせて使う(マニュアルがあまりない) Oct. 7, 2015 ロボットシステム学 5
  6. 6. フィルタコマンド • 多数: grep, find, wc, ... – /bin/下等 • grep – ファイルの中の語句を検索するコマンド • find – ファイルを列挙するコマンド – findはファイルをたくさん列挙する • 使いにくくないか? Oct. 7, 2015 ロボットシステム学 6 ueda@remote:~$ grep ueda /etc/passwd ueda:x:1000:1000:Ryuichi UEDA,,,:/home/ueda:/bin/bash ueda@remote:~$ find /etc/ /etc/ /etc/insserv /etc/insserv/overrides ...
  7. 7. コマンドの組み合わせ • 標準入出力をパイプでつなぐ • 特定のファイルを探すには? – 例: passwdファイルってどこにあったけ? – grepと組み合わせる Oct. 7, 2015 ロボットシステム学 7 ueda@remote:~$ sudo find | grep passwd [sudo] password for ueda: ./var/lib/dpkg/info/passwd.postinst ./var/lib/dpkg/info/base-passwd.postinst ./var/lib/dpkg/info/passwd.preinst ...
  8. 8. • 正規表現でさらに絞り込む – 下の例: 「passwd」で終わっている行の抽出 • $: 行末を表す • 他に^[].*等特殊な記号 Oct. 7, 2015 ロボットシステム学 8 ueda@remote:~$ sudo find / | grep '/passwd$' /var/tmp/etc/init.d/passwd /var/tmp/etc/cron.daily/passwd /var/tmp/etc/passwd /var/tmp/etc/pam.d/passwd /etc/cron.daily/passwd /etc/passwd /etc/pam.d/passwd /usr/share/bash-completion/completions/passwd /usr/share/doc/passwd /usr/share/lintian/overrides/passwd /usr/bin/passwd
  9. 9. • 正規表現の例 – /etc/servicesの調査 • 上級者向け – AWKとgrepで10000番ポート以上のレコードを 抽出のこと Oct. 7, 2015 ロボットシステム学 9 ###80を検索### $ cat /etc/services | grep 80 ###80番ポートのレコードだけ検索### $ cat /etc/services | grep '[^0-9]80/' ###ftpという語句を検索### $ cat /etc/services | grep ftp ###最初がftpで始まる行を検索### $ cat /etc/services | grep ^ftp
  10. 10. 他の組み合わせ • 抽出、重複除去、計数等を役割分担 – 例1: /var/log/auth.logからsudoに関する記録の行数を求める – 例2: 誰がどのシェルを使っているか調べる Oct. 7, 2015 ロボットシステム学 10 $ cat /var/log/auth.log | grep sudo | wc -l 68 ###これでも良い### $ cat /var/log/auth.log | grep sudo -c 68 ueda@remote:~$ cat /etc/passwd | awk -F: '{print $NF}' | sort | uniq -c 1 6 /bin/bash 4 /bin/false 1 /bin/sync 17 /usr/sbin/nologin
  11. 11. – 例3: 日本語の文字数を数える • 改行コードも数えてしまう Oct. 7, 2015 ロボットシステム学 11 ueda@remote:~$ echo あいうえお > a ueda@remote:~$ wc -m a 6 a ###改行コードを削除して数える### ueda@remote:~$ cat a | tr -d 'n' | wc -m 5
  12. 12. GitHubやGitサーバとの連携 • 自分で作ったプログラムの管理をどうするか? – 別にファイルやディレクトリのコピーでも良い • ファイルをhoge.c, hoge.c.org, hoge.c.orgorg...とコピーして保存 • あるいはディレクトリに日付をつけて管理 – さらに便利にならないか? • 変更の日付等を自動で管理したい • 別のPCで使う。別の人が使えるようにしておく。 Oct. 7, 2015 ロボットシステム学 12
  13. 13. Git • 版管理(バージョン管理)システム – ファイルの変更履歴を管理するためのシステム • Linus Torvalds が作成 – Linux の共同開発のため • 単にバージョン管理のためだけでなく、 コード公開のプラットフォームになっている – リポジトリの公開 – GitHub Oct. 7, 2015 ロボットシステム学 13
  14. 14. ueda@ubuntu:~$ sudo apt-get install git ###自身の名前とe-mail アドレスを記録しておく### ueda@ubuntu:~$ git config --global user.name "Ryuichi Ueda" ueda@ubuntu:~$ git config --global user.email "ueda@hogehoge.com" ueda@ubuntu:~$ git config --global core.editor vim ###確認### ueda@ubuntu:~$ cat .gitconfig [user] name = Ryuichi Ueda email = ueda@hogehoge.com [core] editor = vim Gitのインストール • インストール • 自身の名前(ハンドルネーム)、メールアドレスを登録 • 使用するエディタの登録 • 確認 Oct. 7, 2015 ロボットシステム学 14
  15. 15. リポジトリを作る • リポジトリ(repository) – 貯蔵庫、倉庫、納骨堂、埋葬所 – 要はバージョン管理するディレクトリ • 2種類 – リモートリポジトリ – ローカルリポジトリ • Git の基本的な使い方(あくまで基本) – リモートリポジトリをどこかに置き、そこから自分のマシンに それをクローンしてローカルリポジトリを作成 – ローカルリポジトリで何かファイルを更新したら リモートリポジトリに反映 Oct. 7, 2015 ロボットシステム学 15
  16. 16. リモートリポジトリの作成 • リポジトリ: ただのディレクトリ – gitコマンドでディレクトリの中にバージョン管理の ためのファイルとディレクトリが作られる Oct. 7, 2015 ロボットシステム学 16 stu@lecture:~$ mkdir TestRepo.git stu@lecture:~$ cd TestRepo.git/ ###共同作業用の基本的なリモートリポジトリの作り方### stu@lecture:~/TestRepo.git$ git init --bare --shared Initialized empty shared Git repository in /home/stu/TestRepo.git/ ###中にバージョン管理用のファイルやディレクトリが作成される### stu@lecture:~/TestRepo.git$ l HEAD branches/ config description hooks/ info/ objects/ refs/
  17. 17. リポジトリをローカルにクローン • 下に.gitというディレクトリが作成される – ここでバージョン管理 – まだ空 Oct. 7, 2015 ロボットシステム学 17 pi@raspberrypi ~ $ git clone ssh://stu@lecture.ueda.asia:443/home/stu/TestRepo pi@raspberrypi ~/TestRepo $ ls -a . .. .git
  18. 18. リポジトリにコードを追加 • (なんでもいいが)右の ようなファイルを一つ、 ローカルに置く • 「addしてstatus見てpush」 – git add: これからリポジトリに登録するファイルをステージング • 複数のファイルの更新や削除があるときは「git add -A .」 – git status: ステージングされたファイルの一覧の確認 – git push: リポジトリに反映 Oct. 7, 2015 ロボットシステム学 18 pi@raspberrypi ~/TestRepo $ ls hoge.bash pi@raspberrypi ~/TestRepo $ cat hoge.bash #!/bin/bash echo hoge pi@raspberrypi ~/TestRepo $ git add hoge.bash pi@raspberrypi ~/TestRepo $ git status ... pi@raspberrypi ~/TestRepo $ git commit -m "Add a file"
  19. 19. リモートのリポジトリへの反映 • git push – ローカルのリポジトリの内容をリモートへ • うまくいったら、一度、ローカルのリポジトリを消して、 もう一度クローンしてみましょう Oct. 7, 2015 ロボットシステム学 19 pi@raspberrypi ~/TestRepo $ git push origin master #次回からはgit pushだけで良い stu@lecture.ueda.asia's password: Counting objects: 3, done. Writing objects: 100% (3/3), 235 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://stu@lecture.ueda.asia:443/home/stu/TestRepo * [new branch] master -> master
  20. 20. GitHub • Gitを利用したサービス – リポジトリのホスティングと公開 – 公開しないリポジトリも作成可能(有料) • 学校のメールアドレスだと無料で作れるかもしれません • 利用方法 – ウェブサイト – コマンドライン Oct. 7, 2015 ロボットシステム学 20
  21. 21. アカウント作成 • GitHubにアクセス – https://github.com/ – ユーザ名、email アドレス、パスワードを決めて "Sign up for GitHub" – 右のような画面が出るので、 "Free"が選択されているのを 確認して"Finish sign up" Oct. 7, 2015 ロボットシステム学 21
  22. 22. • メールアドレスの確認作業を行う – 登録したメールアドレスに確認メールが届くので インストラクションに従う – メール中のURL をクリックするとemail アドレスの存在を確認 する画面が表示されるので"confirm" • 公開鍵の登録 – GitHub のサイトの右上にあるセットアップボタンを押す Oct. 7, 2015 ロボットシステム学 22
  23. 23. – 左のコラムにある"SSH Keys""を押し、右上の "Add SSH key"を押す – 公開鍵を貼付けるテキストボックスが 出現するのでそこに公開鍵を張りつけて"Add key" Oct. 7, 2015 ロボットシステム学 23
  24. 24. リポジトリの作成 • 基本はウェブサイトで • まだリポジトリがない場合、トップページ右下に リポジトリを作れと表示される(下図) • "New repository"をクリック • 必要事項を入れて "Create repository" Oct. 7, 2015 ロボットシステム学 24
  25. 25. • リポジトリのセットアップ方法のページが表示される • "Quick setup"に従う – httpsを押す • 学内だとsshが使えない – 表示される文字列をURL欄右のクリップボードにコピーして、 git cloneしてローカルリポジトリを作る – 自分でリポジトリを作ってローカルにクローンして、 何か変更を加えてpushしてみましょう Oct. 7, 2015 ロボットシステム学 25
  26. 26. 他人のコードの利用 • GitHub 上で他のアカウントのリポジトリをfork – ryuichiueda/testtestをフォークしてみてください – 手順 1. 自分のアカウントにログインした状態で ryuichiueda/testtestを探す 2. リポジトリのページ右上のfork ボタンを押す 3. ローカルのリポジトリを作る – ウェブ画面でhttpsを選んでURIをコピーしてclone Oct. 7, 2015 ロボットシステム学 26
  27. 27. 他人のコードの改善 • 自身で修正したコードを元の リモートリポジトリの持ち主に反映してもらう • 手順 (注意: 本来はブランチを切る等、色々マナーがあります。参考) 1. ローカルリポジトリを変更 2. GitHubの自分のリポジトリにpush 3. pullリクエストを送る • ファイル一覧表のヘッダに"Pull Request"とあるので押す • 差分を確認の上"Create Pull Request"を押す • コメントを書いて"Send pull request" を押す Oct. 7, 2015 ロボットシステム学 27
  28. 28. pullリクエストを受け取る • pullリクエストが来るとメールや ページ等で通知が来る – リンクを押して作業開始 Oct. 7, 2015 ロボットシステム学 28
  29. 29. • 内容を調べ、リクエスト送信者と議論 – 場合によっては修正してもらう – 納得したら"Merge pull request, Confirm merge"でマージ Oct. 7, 2015 ロボットシステム学 29

×