平成 24 年度 情報リテラシー 担当 : 一色正晴 (4 号館 405) isshiki@cs.ehime-u.ac.jp http://ipr20.cs.ehime-u.ac.jp/~isshiki/literacy/
シェルの確認と準備 使用しているシェルの確認 % echo $SHELL /bin/bash 準備 % cd ~/literacy % mkdir shell % cd shell % tar -zxvf shell.tar.gz HP から shell.tar.gz をダウンロードして, ディレクトリ shell に保存してから実行 % ls exp1-1.c exp1-2.c namelist.txt report.txt sample.c 2
今日の内容 先週の復習 シェルとは シェル環境の調整 シェルのさまざまな機能 入力補完機能 ファイル名展開 ( ワイルドカード指定 ) 入出力路の切り替え ( パイプとリダイレクト ) 3
シェルとは シェルとは OS とユーザの仲介役 コマンドラインを解釈し,OS 本体 ( カーネル ) の機能を使って実行 OSとユーザとの対話インターフェース スクリプト言語 複数のコマンドラインをファイルに記述し, 一括実行 ( バッチ処理 ) シェルの種類 sh (Bournシェル;Bシェル) bash Bシェル系 csh (Cシェル) tcsh Cシェル系 ksh (Korn シェル ) zsh 4
今日の内容 先週の復習 シェルとは シェル環境の調整 シェルのさまざまな機能 入力補完機能 ファイル名展開 ( ワイルドカード指定 ) 入出力路の切り替え ( パイプとリダイレクト ) 5
シェル環境の調整 プロンプトの変更 プロンプト : コマンド入力が可能である事を示す記号 プロンプト記号をカスタマイズ bash-2.05b$ 現在のプロンプト bash-2.05b$ PS1= [ u@ h w] $ [e0632taro@csc41 ~ ]$ 新たなプロンプト 実際には, マークはバックスラッシュで表示される 6
シェル環境の調整 PS1: プロンプト記号の設定を保存する変数 u ユーザ名 h 最初の. までのホスト名 w 現在のディレクトリ ( ホームディレクトリは ~ で表示 ) $ UID が 0 なら #, そうでなければ $ を表示 プロンプトの変更 プロンプト : コマンド入力が可能である事を示す記号 プロンプト記号をカスタマイズ イコール = の両側に, スペースを入れてはいけない! bash-2.05b$ 現在のプロンプト bash-2.05b$ PS1= [ u@ h w] $ カレントディレクトリを移動すると, [e0632taro@csc41 ~ ]$ 新たなプロンプトここが変わる 別の計算機にログインすると, ここが変わる (SSH で遠隔ログインしても変わる ) ログインし直すと設定が元に戻る. その対策は後ほど. 7
シェル環境の調整 コマンドの別名定義 ( エイリアス ) 複雑なオプションを必要とするコマンド入力の簡略化 ファイルの移動やコピーの際の上書きや, ファイルの削除のときのうっかりミスを防止 $ touch sample1.txt sample2.txt 空のファイルを作成 $ ls sample1.txt sample2.txt $ mv sample1.txt sample2.txt ファイル名の変更 $ ls sample2.txt sample2.txt が上書きされてしまった 8
シェル環境の調整 コマンドの別名定義 ( エイリアス ) 複雑なオプションを必要とするコマンド入力の簡略化 ファイルの移動やコピーの際の上書きや, ファイルの削除のときのうっかりミスを防止 $ touch sample1.txt sample2.txt 空のファイルを作成 $ ls sample1.txt sample2.txt $ mv -i sample1.txt sample2.txt ファイル名の変更 mv: ファイルを上書きしますか?(yes/no) no ファイルが存在すれば, 確認メッセージを表示 $ ls sample1.txt sample2.txt mv コマンドは実行されなかった 9
シェル環境の調整 コマンドの別名定義 ( エイリアス ) 複雑なオプションを必要とするコマンド入力の簡略化 ファイルの移動やコピーの際の上書きや, ファイルの削除のときのうっかりミスを防止 $ touch sample1.txt sample2.txt 空のファイルを作成 $ alias mv= mv -i 別名定義 mv を mv -i と見なしなさい! $ mv sample1.txt sample2.txt オプションなし でファイル名の変更 mv: ファイルを上書きしますか?(yes/no) no 別名定義をしたので, 確認メッセージが表示 $ ls sample1.txt sample2.txt mv コマンドは実行されなかった ログインし直すと設定が元に戻る. その対策を次に. 10
シェル環境の調整 隠しファイルなので, 確認は % ls -a ~ で行う bash の設定ファイル.bashrc に環境設定を記述... # User specific aliases and functions alias rm= rm -i alias cp= cp -i alias mv= mv -i.bashrc はホームディレクトリにある エディタで.bashrc に設定を追加する = の両側は空白を入れない シングルクオートで囲む (Shift を押しながら 7 を押す ) # から行末まではコメント export PS1= [ u@ h w] $ 設定の反映方法 % source ~/.bashrc 設定ファイルを書き換えるときは, ファイル名に日付を付けたバックアップファイルを作成すると良い 11
今日の内容 先週の復習 シェルとは シェル環境の調整 シェルのさまざまな機能 入力補完機能 ファイル名展開 ( ワイルドカード指定 ) 入出力路の切り替え ( パイプとリダイレクト ) コマンド展開 12
入力補完機能 長いファイル名やコマンド名の入力は面倒! 入力補完機能 ファイル名やコマンド名の一部から, 完全な名前を補うことが可能 13
入力補完機能 補完候補が 1 つのとき % ls exp1-1.c exp1-2.c namelist.txt report.txt sample.c % emacs r [Tab] % emacs report.txt 該当するファイル名が補完される 14
入力補完機能 補完候補が複数のとき % ls exp1-1.c exp1-2.c namelist.txt report.txt sample.c % emacs e [Tab] % emacs exp1- [Tab] 一致するところまで補完 % emacs exp1- [Tab] ビープ音 exp1-1.c exp1-2.c 複数候補の表示 % emacs exp1-1 [Tab] % emacs exp1-1.c 該当するファイル名が補完 15
ファイル名展開 ( ワイルドカード指定 ) ある条件に当てはまるファイルをまとめて指定するには? 該当ファイルをまとめて移動 該当ファイルをまとめて削除 アーカイブを作成 ワイルドカード指定を使用 sample で始まるファイルをすべて削除 % rm sample* 16
ファイル名展開 ( ワイルドカード指定 ) 記号 意味 * 0 文字以上の任意の文字列? 任意の1 文字 [string] string に含まれるいずれか1 文字 [^string ] string に含まれない1 文字 {pattern1, pattern2, } pattern1, pattern2, のいずれか [string] の指定方法 : 個別指定 [a8m] ( a か 8 か M ) 範囲指定 [a-z] ( アルファベット小文字のうち1 文字 ) [a-z0-9] ( アルファベット小文字および数字のうち1 文字 ) [a-za-z] ( アルファベットのうち1 文字 ) アルファベットの小文字と大文字の指定に [a-z] は不可 17
ファイル名展開 ( ワイルドカード指定 ) *sample* sample を含む文字列?? sample?.c [a-za-z]* [^a-z]* sample{1,2} ワイルドカードの指定を誤ると大切なファイルを失う可能性があるので要注意 % rm * ~ のつもりが % rm * ~ ディレクトリ内の全てのファイルに一致 ~ はホームディレクトリ 18
入出力路 標準入力 (stdin) 通常, キーボード コマンドライン, データを入力 標準出力 (stdout) 通常, ディスプレイ コマンドの処理結果を表示 標準エラー出力 (stderr) 通常, ディスプレイ エラーメッセージ, 起動メッセージなどを表示 実行結果 エラーメッセージ コマンドライン データ 19
入出力路 実行結果 標準入力 (stdin) 通常, キーボード コマンドライン, データを入力 標準出力 (stdout) 通常, ディスプレイ コマンドの処理結果を表示 標準エラー出力 (stderr) コマンドライン 通常, ディスプレイ エラーメッセージ, 起動メッセージなどを表示 エラーメッセージ データ 入出力路をファイルやプリンタに変更 リダイレクト 20
リダイレクト ファイルの内容を標準入力にリダイレクト % cat < namelist.txt 1 Taro Iyo 2 Jiro Ehime 3 Aiko Matsuyama cat のマニュアルより cat は指定したファイルそれぞれの内容を標準出力へ書き出す. FILE が一つも与えられないと標準入力から読み込む. namelist.txt の内容を, 標準入力 ( キーボード ) で入力した ことと同じ 21
リダイレクト 標準出力をファイルにリダイレクト > file : 既にファイルが存在すると上書き >> file : 上書きせず末尾に追加 % echo 4 Hanako Shikoku >> namelist.txt % cat < namelist.txt 1 Taro Iyo 2 Jiro Ehime 3 Aiko Matsuyama 4 Hanako Shikoku 追加される % echo 5 Takeshi Nippon > namelist.txt % cat < namelist.txt 5 Takeshi Nippon 上書きされる 22
リダイレクト コマンドやスクリプトのログを取る時に使える 標準エラー出力をファイルにリダイレクト 2> file : 既にファイルが存在すると上書き 2>> file : 上書きせず末尾に追加 % mkdir tmp % chmod 044 tmp パーミッションの変更 (p. 62) % find. -name *.txt -print 検索コマンド (p. 32)./namelist.txt find:./tmp: 許可がありません エラーメッセージ % find. -name *.txt -print > file_list.txt 2> error_msg.txt % 23
リダイレクト 標準エラー出力をファイルにリダイレクト 2> file : 既にファイルが存在すると上書き同グループ (students) 2>> file : 上書きせず末尾に追加 % mkdir tmp % chmod 044 tmp パーミッションの変更 (p. 62) % find. -name *.txt -print 検索コマンド (p. 32)./namelist.txt find:./tmp: 許可がありません エラーメッセージ % find. -name *.txt -print > file_list.txt 2> error_msg.txt % ディレクトリに対するパーミッションの設定 % ls -l d --- r-- r-- e0601taro students tmp 所有者 (e0601taro) : 何もできない : 検索可その他 : 検索可.txt で終わるファイルのリストが格納される エラーメッセージが格納される 24
パイプ あるコマンドの標準出力を別のコマンドの標準入力に接続する機能 コマンドラインを で連結 リダイレクトやパイプを組み合わせて, 複雑な処理を実現 ls -l の結果が画面に収まらないとき % ls -l less ある条件に合ったプロセスの情報のみを表示したい %ps aux grep emacs %ps aux grep 0512aida 自分のアカウント名で実行 grep は文字列検索 (p. 66) 25
コマンド展開 あるコマンドの出力をコマンドラインの一部をして利用 バッククオート ` でコマンドを囲む 例えば日付のついたファイルの作成などで利用 % date +%Y%m%d 日付を出力するコマンド 20051115 %cp namelist.txt namelist`date +%Y%m%d`.txt %ls namelist.txt namelist20051115.txt バッククオートは Shift を押しながら @ を押す 26