O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

5.350 visualizações

Publicada em

コマンドとGitについて

Publicada em: Tecnologia
  • Seja o primeiro a comentar

ロボットシステム学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

×