環境プラクティス ネットワーク 「pythonかんたんプログラム」 を通して学ぶシェルの基本操作 2016.10.4 小川猛志.

Slides:



Advertisements
Similar presentations
1 ログイン ユーザ名: root パスワード: hosei (初期設定). 2 はじめに 対象 学部 1 年生 日時 毎週木曜 6 限 18 : 30 ~ 19:30 ( 初回のみ ~ 20 : 00) 開催場所 W211 各自持参するもの ノート PC LAN ケーブル.
Advertisements

情報処理基礎演習Ⅱ 地球環境学科 伊藤,小黒 TA 川野,馬場. 講義の内容 UNIX 系の OS の使い方( Linux の使い方) (始めのうちは慣れないため扱いづらいか も・・・) 起動・終了 ディレクトリ(フォルダ)の構造 基本的なコマンドの使い方 エディタ( vi ) ファイルの操作,管理.
Faculty of Computer and Information Sciences, Hosei University Resource Administration Team CIS RAT 1 Linux リテラシ 2006 第 3 回 エディタ、シェル.
ICT Foundation 1 Copyright © 2010 、 IT Gatekeeper Project – Ohiwa Lab. All rights reserved. ファイルとディレクトリ の操作.
P HI T S スクリプト言語を用いた PHITS の連続 実行 Multi-Purpose Particle and Heavy Ion Transport code System title 年 2 月改訂.
実習1:コマンドシェルの使い方.
情報処理概論Ⅰ 2007 第3回 2007/5/2 情報処理概論Ⅰ 第3回.
UNIX利用法.
UNIX利用法 情報ネットワーク特論資料.
JXTA Shell (3) P2P特論 (ソフトウェア特論) 第6回 /
山下 達也 (北大理・宇宙理学専攻) 2010/05/07 (金)
Unix の ファイルシステム(File System)
知能機械工学科 担当:長谷川晶一 TA:新・後藤・ナンバ
ファイルとディレクトリ.
シェル シェルスクリプト 最低限vi 山下 達也 (北大理・宇宙理学専攻) INEX 第4回/最低限 UNIX(Linux) その3
2014年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
Unix生活 Vol.1
シェル シェルスクリプト 最低限vi 山下 達也 (北大理・宇宙理学専攻) INEX 第4回/最低限 UNIX(Linux) その3
2015年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
東京工科大学 コンピュータサイエンス学部 亀田弘之
Java I 第2回 (4/18)
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
物理学情報処理演習 2. UNIX 補足自習用テキスト.
コンピュータリテラシー 第3回授業の復習 基本的なUNIXコマンド
第1回プログラミング入門 (教科書1~3章).
2013年度 プログラミングⅡ ~ Cプログラミングやってみよう ~.
Linux リテラシ 2006 第2回 基本コマンド2.
Advanced Unix Commands
シミュレーション物理3 プログラミングの基本 その2
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
山田 由貴子 (北大理・地球惑星科学専攻) 2004年10月29日
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
ファイルシステムとコマンド.
xxxxxx . yyy xxxxxx Linuxにおける情報管理 一般的なファイル UNIX における情報管理の単位 ファイルの種類を表す
実習1:コマンドシェルの使い方.
初年次セミナー 第2回 文字の出力.
Cygwin の install.
UNIXについて 松野秀平.
スクリプト言語を用いたPHITSの連続実行
基幹理工学研究科 情報理工学専攻 後藤研究室 修士1年 魏 元
インターネット技術特論 B:コマンドライン, shell 山口 実靖
鯖管のすヽめ.
EGS5のWindows PC へのインストール
経営工学基礎演習a PowerPointの利用.
第1回プログラミング入門.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
情報処理概論Ⅰ 2007 第4回 2018/11/30 情報処理概論Ⅰ 第4回.
オープンソフトウェア利用促進事業 第3回OSSモデルカリキュラム導入実証
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
キャンパスクラウドによる 実験環境の構築 情報ネットワーク特論 講義資料.
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
JXTA Shell (1) P2P特論 (ソフトウェア特論) 第4回 /
UNIX演習 情報ネットワーク特論.
JXTA Shell (2) P2P特論 (ソフトウェア特論) 第5回 /
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
Linux の世界に 触れてみよう! 情報実験 第 3 回 (2005/10/21)
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
UNIX演習 情報ネットワーク特論資料.
プログラミング演習I 2003年7月2日(第11回) 木村巌.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
第4回 プログラム作成,情報検索 伊藤 高廣 計算機リテラシーM 第4回 プログラム作成,情報検索 伊藤 高廣
ネットワーク・プログラミング Linuxシステムとソフトウェア開発.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
ワークショップ シェルの基礎(2) 「pythonかんたんプログラム」 を通して学ぶシェルの基本操作 小川猛志.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります.
Presentation transcript:

環境プラクティス ネットワーク 「pythonかんたんプログラム」 を通して学ぶシェルの基本操作 2016.10.4 小川猛志

レジュメ 1. 本演習の目的 2. シェルってなに? 3. Pythonってなに? 4. 演習内容 ファイル名を控える 作業用ディレクトリを作る "Hello world!" の作成 "数当てゲーム" の作成 ゲームの改良

1. 本演習の目的 python による"数当てゲーム"の作成を例題として、シェルの基本的なコマンドの使い方を習得する。 コマンド 書式例 書式例の意味 set set n=1 シェルの設定値を全て表示 シェルの変数nを定義して、1を代入 echo echo $n 変数nの値を表示 pwd shellが表示しているディレクトリ(カレントディレクトリ)名を表示 ls ls -l カレントディレクトリ内のファイル名を表示 -l で各ファイルの属性(読込、書込、実行の権利など)も表示 cd cd .. など 1つ上位のディレクトリに移動 > ls > log.txt コマンド(ls)の実施結果をファイルに出力(上書き) (">"はリダイレクト、と読む) >> ls >> log.txt コマンド(ls)の実施結果をファイルに出力(追記) | ls | grep log コマンドの実施結果を次のコマンドの入力に接続 (" | "はパイプ、と読む) tee ls |tee –a log.txt コマンド(ls)の実施結果を標準出力(画面)に出力するとともにファイルに出力(-a があると追記、無いと上書き) date その時の日時を出力

1. 本演習の目的(続き) コマンド 書式例 書式例の意味 cat cat log.txt ファイル(log.txt)の内容を画面に出力 more more log.txt ファイル(log.txt)の内容を1画面に入る分ずつ出力 tail tail -4 log.txt ファイル(log.txt)の末尾から指定した行数だけ画面に出力 mkdir mkdir py ディレクトリを作成 diff diff log1.txt log2.txt 2つのファイルの差分を表示 grep grep ogawa log.txt キーワードを含む行をファイルから抽出して表示 cp cp log.txt tmp/log.bak ファイルを指定したディレクトリにコピー mv mv log.txt tmp/log.bak ファイルを指定したディレクトリに移動 rm rm log.txt, rm -R tmp 指定したファイルやディレクトリを削除 chmod chmod 755 py.py 3桁の数字でファイルへのアクセス権を設定(先頭から1桁づつ、ユーザ、グループ、その他について、以下のアクセス権を意味)。 bit 1 実行権、bit2 書込権、bit3読込権(0:権利なし、1:権利あり) 例 5 = 4+1 =101b→実行と読込は可能、書込は不可 man man cd コマンド(cd) の使い方、オプションを表示 history コマンド履歴を表示 !12 など,!の後に行番号を投入すると,そのコマンドを実行

2. シェルってなに? ユーザがOSのカーネル機能を操作するために使う コマンドライン型のインタフェース ユーザから見るとカーネルを包み込んでいるように見える   ので、shell(貝殻)と呼ばれる windowsではコマンドプロンプト、 MacOS(BSDの一種) ではTerminal. シェル コマンド 出力

2. シェルってなに? $ echo $SHELL 色んな種類がある。RaspbianではBashが一般的。 複数言語対応や、ライン補完(後ほどトライ)などが得意 確認しよう $ echo $SHELL linux やMacOSでもBashが一般的.BSDではtcshが主流. 最近,windowsでも使用できるようになった. ogawa@pi:~ $ echo $SHELL /bin/bash ogawa@pi:~ $

2. シェルってなに? シェルだけでもちょっとしたプログラムが書ける 例: n<m なら、ある文章を表示 $ n=3 $ echo $n $ m=4 $ echo $m $ if(test $n -lt $m);then echo "n is 'smaller' than m";fi $ $ if(test $n -lt $m);then echo "n is 'smaller' than m $> and 'poor' $> and ‘gray’ ";fi 変数nの値を表示 " で囲んだ文章を表示 複数行の 表示も可能 改行 改行 ">"は行が続いている,の意味 注:引用符( “ や ‘ )の使い方や、改行の仕方はシェルの種類により大きく異なる

実行結果の例 ogawa@pi:~ $ n=3 ogawa@pi:~ $ echo $n 3 ogawa@pi:~ $ m=4 ogawa@pi:~ $ echo $m 4 ogawa@pi:~ $ ogawa@pi:~ $ if(test $n -lt $m);then echo "n is 'smaller' than m";fi n is "smaller" than m ogawa@pi:~ $ if(test $n -lt $m);then echo "n is 'smaller' than m > and 'poor' > and 'gray' ";fi n is 'smaller' than m and 'poor' and 'gray'

3. Pythonってなに? Raspberrypiでの推奨言語の一つ. 動的プログラミング言語.コンパイルせずに実行可能 (インタープリタ型とも言う) JavaScript,Perl,PHP, Rubyなども仲間 プログラムの構造が目で見て分かりやすい インデントでブロックを識別 初心者でも書きやすい、読みやすい 対話モードで1行づつ動作確認もできる 名前の由来はイギリスのTVコメディ     "空飛ぶモンティ・パイソン" 今回は時間の都合のため、   プログラムの手段として使うだけ。   Pythonに詳しくなることは目指しません。 http://ja.wikipedia.org/wiki/wiki/空飛ぶモンティ・パイソン

レジュメ 1. 本演習の目的 2. シェルってなに? 3. Pythonってなに? 4. 演習内容 ファイル名を控える 作業用ディレクトリを作る "Hello world!" の作成 "数当てゲーム" の作成 ゲームの改良

(1) ファイル名を控える ユーザでのlogin直後は、/home/userディレクトリ内がshellで見える。 今見えているディレクトリ(カレントディレクトリ)の名前を調べよう $ pwd shellでの操作は、カレントディレクトリの内部が基本 ディレクトリを最上位のディレクトリ(ルートディレクトリ) に移動しよう $cd / ディレクトリ内のファイル名を見よう $ ls -alt ホームに戻ろう $ cd ogawa@pi:~ $ pwd /home/ogawa ogawa@pi:~ $ ls ogawa@pi:~ $ cd / ogawa@pi:/ $ ls -al total 92 drwxr-xr-x 21 root root 4096 Sep 17 11:46 . drwxr-xr-x 21 root root 4096 Sep 17 11:46 .. drwxr-xr-x 2 root root 4096 May 27 11:22 bin drwxr-xr-x 4 root root 16384 Jan 1 1970 boot 略 ogawa@pi:/ $ cd ogawa@pi:~ $

<参考> プロンプトでのディレクトリ表示 <参考> プロンプトでのディレクトリ表示 bashでは、プロンプトでカレントディレクトリが表示される。 ~ は、ユーザのホームディレクトリ(ログイン時に最初に見えるディレクトリ。アカウント作成時にユーザ毎に作成される) root(管理者)でログインすると、/rootが該当する。 /は、最上位のディレクトリの意味。これもルート、と呼ぶ。 プロンプト ogawa@pi:~ $ cd / ogawa@pi:/ $ ls bin dev home lost+found mnt proc run srv tmp var boot etc lib media opt root sbin sys usr ogawa@pi:/ $ cd bin ogawa@pi:/bin $ カレントディレクトリ

(1) ファイル名を控える ~ 内のファイル名を控えよう shellのコマンドの実行結果は通常画面に出てくる(標準出力) ~ 内のファイル名を控えよう shellのコマンドの実行結果は通常画面に出てくる(標準出力) 実行結果をファイルに出力することができる 方法1: リダイレクト 記号 を使う ファイルへの、上書き " >", 追記 ">>"  方法2: パイプとtee を使う ファイルへの、上書き " |tee", 追記 "|tee -a" ホームに戻ろう   $cd 現時刻を画面に出力しよう。 $ date 出力先をファイルにしよう  $ date > tmp.txt ファイルの中身を見よう   $ cat tmp.txt パイプ

(1) ファイル名を控える 演習 /tmp 内のファイル名を、新しいファイルから順に並べて,logtmp1.txt に出力しよう :/tmp $ ls –alt >logtmp1.txt ogawa@pi:~ $ ls -alt total 32 drwxr-xr-x 2 ogawa ogawa 4096 Sep 23 08:55 . -rw-r--r-- 1 ogawa ogawa 29 Sep 23 08:53 tmp.txt 略 ogawa@pi:~ $ ls -alt >logtmp1.txt ogawa@pi:~ $ cat logtmp1.txt total 28 -rw-r--r-- 1 ogawa ogawa 0 Sep 23 08:56 logtmp1.txt 略ogawa@pi:~ $

(1) ファイル名を控える 演習 /tmp 内のファイル名を、新しいファイルから順に並べて,logtmp1.txt に出力しよう :/tmp $ ls –alt >logtmp1.txt ogawa@pi:~ $ ls -alt total 32 drwxr-xr-x 2 ogawa ogawa 4096 Sep 23 08:55 . -rw-r--r-- 1 ogawa ogawa 29 Sep 23 08:53 tmp.txt 略 ogawa@pi:~ $ ls -alt >logtmp1.txt ogawa@pi:~ $ cat logtmp1.txt total 28 -rw-r--r-- 1 ogawa ogawa 0 Sep 23 08:56 logtmp1.txt 略ogawa@pi:~ $

"l"(エル)だけ入力してtabを押すと補完してくれる (1) ファイル名を控える logtmp1.txtにファイル名が記入できたことを確認する 先頭から少しづつ見る $ more logtmp1.txt 末尾から指定した行数見る $ tail -2 logtmp1.txt "l"(エル)だけ入力してtabを押すと補完してくれる

レジュメ 1. 本演習の目的 2. シェルってなに? 3. Pythonってなに? 4. 演習内容 ファイル名を控える 作業用ディレクトリを作る "Hello world!" の作成 "数当てゲーム" の作成 ゲームの改良

(2) 作業用ディレクトリを作る ~(ホーム) 内に作業用ディレクトリ py を作ろう ディレクトリを新たに作る $ mkdir py 念のため、できたか確認 $ ls 一旦消してみる $ rm -R py もう一度作る $ mkdir py /root 内のファイル名を、今度は logtmp2.txt に出力しよう  $ ls -alt >logtmp2.txt

(2) 作業用ディレクトリを作る ファイルの変化を確認しよう 2つのファイルの違いを、diff で見ることができる    $ diff logtmp1.txt logtmp2.txt grepを組み合わせると、diffの出力の中で特定のキーワードを含む行のみを見ることもできる。   $ diff logtmp1.txt logtmp2.txt | grep "py"

ogawa@pi:~ $ mkdir py ogawa@pi:~ $ ls -alt >logtmp2.txt ogawa@pi:~ $ diff logtmp1.txt logtmp2.txt 1,3c1,5 < total 28 < -rw-r--r-- 1 ogawa ogawa 0 Sep 23 08:56 logtmp1.txt < drwxr-xr-x 2 ogawa ogawa 4096 Sep 23 08:55 . --- > total 36 > drwxr-xr-x 3 ogawa ogawa 4096 Sep 23 09:01 . > -rw-r--r-- 1 ogawa ogawa 0 Sep 23 09:01 logtmp2.txt > drwxr-xr-x 2 ogawa ogawa 4096 Sep 23 09:01 py > -rw-r--r-- 1 ogawa ogawa 422 Sep 23 08:56 logtmp1.txt ogawa@pi:~ $ diff logtmp1.txt logtmp2.txt |grep "py" ogawa@pi:~ $ ← logtmp1の1〜3行目がlogtmp2の1〜5行に入れ替わった

レジュメ 1. 本演習の目的 2. シェルってなに? 3. Pythonってなに? 4. 演習内容 ファイル名を控える 作業用ディレクトリを作る "Hello world!" の作成 "数当てゲーム" の作成 ゲームの改良

(3) "Hello World" py 内にプログラムファイル を作ろう 作業用ディレクトリに移動する $ cd py (注: $ cd /home/user/pyでも良い.次スライド参照) 次の一行だけのファイルを作りたい。ファイル名は "hello.py" print "Hello Takeshi" シェルでこのファイルを実行すれば、画面にprint の引数が出力される $ python hello.py 演習 hello.py を作って実行してみよう!    $ echo "print 'Hello Takeshi'" > hello.py ogawa@pi:~ $ cd py ogawa@pi:~/py $ pwd /home/ogawa/py ogawa@pi:~/py $ echo "print 'Hello Takeshi'" > hello.py ogawa@pi:~/py $ python hello.py Hello Takeshi ogawa@pi:~/py $

<参考> cd ディレクトリ間を移動するには「cd」コマンドを使用。cdの後ろに,移動先のディレクトリを記述。記述方法には2種類ある。 相対パス:カレント・ディレクトリ(root)から目的のディレクトリに至るパスを指定 $ cd tmp ←ディレクトリをそのまま指定 $ pwd /root/tmp 絶対パス:ルート(ディレクトリ構造の最も上)を表す「/」からのパスを指定。 $ cd /root/tmp ←「/」からのパスを指定 ショートカット 1つ上のディレクトリに移動 $ cd .. ホーム・ディレクトリに移動(管理者の場合は/root) $ cd

レジュメ 1. 本演習の目的 2. シェルってなに? 3. Pythonってなに? 4. 演習内容 ファイル名を控える 作業用ディレクトリを作る "Hello world!" の作成 "数当てゲーム" の作成 ゲームの改良

(3) "数当てゲーム" の作成 次のファイルを作りたい。ファイル名は "pygame.py" echo "import random 以下のテキストをコピーして,シェルのプロンプトにペーストしよう. echo "import random n=random.randint(1,4) m=0 while(n!=m): print 'Guess n, 1 to 4' m=input() if n == m: print 'Right'" > pygame.py 1,2,3,4のいずれかをランダムにnに代入 mがnに一致するまでループ インデント (半角スペース) に注意 mがnに一致すると、Rightと出力

レジュメ 1. 本演習の目的 2. シェルってなに? 3. Pythonってなに? 4. 演習内容 ファイル名を控える 作業用ディレクトリを作る "Hello world!" の作成 "数当てゲーム" の作成 ゲームの改良

(3) ゲームの改良 ソースを直す前にbackupディレクトリを作って控えを取ろう backupディレクトリを作る。 $ mkdir backup コピーする $ cp pygame.py backup/pygame.bak 属性を見てみよう $ cd backup $ ls -l pygame.bak (注:小文字の L ) 書き換えられないようにしよう $chmod 444 pygame.bak ogawa@pi:~/py $ mkdir backup ogawa@pi:~/py $ ls backup hello.py pygane.py ogawa@pi:~/py $ cp pygane.py backup/pygame.bak ogawa@pi:~/py $ cd backup/ ogawa@pi:~/py/backup $ ls -l total 4 -rw-r--r-- 1 ogawa ogawa 118 Sep 23 10:00 pygame.bak ogawa@pi:~/py/backup $ chmod 444 pygame.bak -r--r--r-- 1 ogawa ogawa 118 Sep 23 10:00 pygame.bak 444

演習 pygame.bak をrmして、何が起こるか確認しよう ogawa@pi:~/py/backup $ rm pygame.bak rm: remove write-protected regular file ‘pygame.bak’? yes

応用1 テキストのコピペをせずに. 当たらなかった場合のメッセージを追加しよう import random n=random.randint(1,4) m=0 while(n!=m): print 'Guess n, 1 to 4' m=input() if n == m: print 'Right' else: print 'Wrong' この部分を再度コピペ,は禁止! ヒント:echo と リダイレクトを活用!

応用2 テキストのコピペをせずに. 起動時のメッセージを追加しよう print 'Hello Takeshi' import random n=random.randint(1,4) m=0 while(n!=m): print 'Guess n, 1 to 4' m=input() if n == m: print 'Right' else: print 'Wrong' この部分を再度コピペ,は禁止! ヒント:cat と リダイレクトを活用!

解答の例 応用1 $ echo " else:print 'Wrong'">>pygame.py 応用2 $ cat pygame.py >> hello.py $ cat hello.py pygame.py > new_pygame.py

受講者による解答例