2006年05月19日 コンピュータリテラシ 筑波大学 電子・情報工学系 コンピュータサイエンス専攻 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2006/2006-05-19
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
% calMay 2006 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 % cal > cal-2006-05
% ls -l cal-2006-05
-rw-r--r-- 1 yas prof 133 May 18 22:23 cal-2006-05 %
![]()
> cal-2006-05
は、標準出力をファイル
cal-2006-05
に切り替える意味。
% cat cal-2006-05ファイルの内容の確認。May 2006 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 %
![]()
% bcbc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 10+20
30 ^D %
![]()
^D
(Control+D) は、入力の終わり(end of file) を表す
キー。
ファイルから数式を与えてみる。まず、cat コマンドで作る。cat コマンドは、 引数が与えられない場合、標準入力(キーボード)を、標準出力にコピーする。 引数が与えられると、その引数をファイル名と解釈し、その内容を標準出力に コピーする。
% cat > expressionsキーボードの代わりにファイルからデータを読み込ませる。10+20
2^40
^D % cat expressions
10+20 2^40 %
![]()
% bc < expressions30 1099511627776 %
![]()
< expressions
は、標準入力をファイル
expressions
に切り替える。
% ps aux > ps-resultパイプ機能を使うと、直接2つのプログラムが結びつけられる。% head -3 < ps-result
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND security 10739 0.4 -0.7 245876 14896 ?? S 7:11PM 0:34.21 /System/Li windowse 10733 0.3 -0.5 203572 11084 ?? Ss 7:11PM 0:28.25 /System/Li % rm ps-result
%
![]()
% ps aux | head -3複数段、接続できる。USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND security 10739 0.3 -0.7 245876 14860 ?? S 7:11PM 0:34.31 /System/Li windowse 10733 0.2 -0.5 203572 11084 ?? Ss 7:11PM 0:28.33 /System/Li %
![]()
% ps aux | head -10 | tail -3root 93 0.0 -0.1 27276 1128 ?? Ss Fri09AM 0:05.57 /usr/sbin/ root 95 0.0 -0.1 27372 1712 ?? Ss Fri09AM 0:00.02 xinetd -do root 96 0.0 -0.2 29912 4240 ?? Ss Fri09AM 53:41.81 /usr/sbin/ %
![]()
% ps AUX > ps-resultAUX は、間違い。ps コマンドは、エラー・メッセージを標準出力で はなく標準エラー出力に書き出す。ps: X: no such user % cat ps-result
%
![]()
>&
をつかうと、エラー・メッセージも含めてファイルに出
力することもできる。
% ps AUX >& ps-result% cat ps-result
ps: X: no such user %
![]()
|&
を使うと、エラー・メッセージも含めてパイプに出力す
ることもできる。
% ps AUX |& head![]()
% ls cal-2006-567ls: cal-2006-567: No such file or directory % cal 5 2006 > cal-2006-567
% cal 6 2006 >> cal-2006-567
% cal 7 2006 >> cal-2006-567
% cat cal-2006-567
May 2006 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 June 2006 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 July 2006 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 %
![]()
操作 | シェル変数 | 環境変数 |
代入 | set name=value | setenv name value |
参照 | $name | $name |
削除 | unset name | unsetenv name |
一覧表示 | set | printenv |
単独表示 | echo $name | echo $name |
printenv name |
% set s=/Applications/Utilities% echo $s
/Applications/Utilities % ls $s
Activity Monitor.app Java AirPort Admin Utility.app Keychain Access.app AirPort Setup Assistant.app NetInfo Manager.app Audio MIDI Setup.app Network Utility.app Bluetooth File Exchange.app ODBC Administrator.app ColorSync Utility.app Print Center.app Console.app Printer Setup Utility.app DigitalColor Meter.app System Profiler.app Directory Access.app Terminal.app Disk Utility.app VoiceOver Utility.app Grab.app X11.app Grapher.app iPod Software Updater.localized Installer.app % unset s
% ls $s
tcsh: s: Undefined variable. %
![]()
% setenv e /Applications/Utilities% printenv e
/Applications/Utilities % echo $e
/Applications/Utilities % ls $e
Activity Monitor.app Java AirPort Admin Utility.app Keychain Access.app AirPort Setup Assistant.app NetInfo Manager.app Audio MIDI Setup.app Network Utility.app Bluetooth File Exchange.app ODBC Administrator.app ColorSync Utility.app Print Center.app Console.app Printer Setup Utility.app DigitalColor Meter.app System Profiler.app Directory Access.app Terminal.app Disk Utility.app VoiceOver Utility.app Grab.app X11.app Grapher.app iPod Software Updater.localized Installer.app % unsetenv e
% echo $e
tcsh: e: Undefined variable. %
![]()
環境変数は、子プロセスへ引き渡される。 環境変数は、子プロセスの動作を変更するために用いる。
% dateマニュアルの ENVIRONMENT VARIABLES に記述されている。Fri May 19 04:53:45 JST 2006 % echo $TZ
tcsh: TZ: Undefined variable. % setenv TZ EST
% date
Thu May 18 14:54:01 EST 2006 % unsetenv TZ
% date
Fri May 19 04:54:10 JST 2006 %
![]()
% man dateDATE(1) BSD General Commands Manual DATE(1) NAME date -- display or set date and time SYNOPSIS ... ENVIRONMENT VARIABLES The following environment variables affect the execution of date : TZ The timezone to use when displaying dates. See environ(7) for more information. ...
% set... path (/home1/prof/yas/bin /usr/local/bin /usr/local3/bin /bin /usr/X11R6/bin /sbin /usr/bin /usr/sbin /usr/local3/ImageMagick/bin) ... % echo $path[1]
/home1/prof/yas/bin % echo $path[2]
/usr/local/bin %
![]()
シェル変数 | 環境変数 |
path | PATH |
home | HOME |
term | TERM |
user | USER |
< > | $ { } ( ) [ ] & ; ^ " * ? ~ ' ` 空白
など。
コマンドの引数として渡したい時には、解釈を避ける(エスケープ(escape))た めの特殊な形式を使う。
形式 | エスケープ対象 | エスケープしないメタキャラクタ |
\x | 「\ 」の直後の一文字 | なし |
'str' | 「'」でくくられた文字列 | ! |
"str" | 「"」でくくられた文字列 | !, $ |
\
は、\か¥。
補完(completion)では、人間が目で確認するが、置き換えでは人間が確認する ことはない(見つからなければエラーになる)。
例:/usr/bin にある a で始まるファイルをすべて ls コマンドに引き渡したい。
% cd /usr/bin% ls a*
a2p ant as atq automake-1.6 aclocal appleping asa atrm automator aclocal-1.6 appletviewer at atstatus autoreconf addftinfo apply at_cho_prn autoconf autoscan afmtodit apropos atlookup autoheader autoupdate alias ar atos autom4te auval amlint arch atprint automake awk %
![]()
パタン | 意味 |
* | 任意の文字列(空でもよい)(.で始まるものを除く) |
? | 任意の1文字 |
[str] | strのなかの1文字。たとえば [aA] は、a か A とマッチする。「-」があると、ASCIIでその間の文字を意味する。たとえば「0-9」(数字)や「a-zA-Z」(アルファベット)がよく使われる。 |
{str1,str2,...} | 「,」で区切られたパタン str1, str2, ... を順にファイル名置換した結果を並べたもの |
~username | ユーザusernameのホーム・ディレクトリの絶対パス。 |
~/ | 自分自身のホーム・ディレクトリ |
~ | 自分自身のホーム・ディレクトリ |
例: 大量のファイルを削除する
% rm -rf dir &コマンドの末尾に 「&」を付けると、バックグランドで実行され る。ジョブ番号とプロセス番号が表示され、すぐにプロンプトが洗われる。 終了すると次のような表示がなされる。[1] 7433 %
![]()
[1] Done rm -rf dir
% date ; sleep 10 ; date; whoFri May 19 06:00:52 JST 2006 Fri May 19 06:01:02 JST 2006 yas ttyp0 May 18 22:42 (sharon.hlla.is.t) %
![]()
例: /bin と /usr/bin にあるファイルをしらべてホーム・ディレクトリにある commands というファイルに保存する。
% cd% (cd /bin; ls; cd /usr/bin; ls ) > commands
![]()
% ls -ld /コマンドが成功したか失敗したかを調べ、その結果に応じて次のコマンドを実 行するかしないかを決めたい。drwxrwxr-t 34 root wheel 1190 May 12 09:34 / % echo $status
0 % ls -ld /aaaa
ls: /aaaa: No such file or directory % echo $status
1 %
![]()
command1 が成功したら、command2 を実行する。 (できれば、両方とも実行したい。)
command1 && command2command1 が失敗したら、command2 を実行する。 (どちらか一方が実行できればよい)
command1 || command2
% historyシェル変数 history の個数だけ記憶している。% history
2 22:43 cd public_html/coins/literacy-2006/2006-05-19 3 22:43 ps 4 22:43 ps x ... 100 6:20 ls 101 6:20 history %
![]()
^P
/ ^N
で、ヒストリを
さかのぼれる。
その他に、次のような方法もある。tcsh では、ほとんど使われない。編集機能 がない csh では有効であった。
more, less, lv のように、1ページごとに止まって表示するプログラムをペー ジャ(pager)という。man コマンドは、長いページを表示するために環境変数 PAGER で指定されたプログラムを実行する。
キー | 説明 |
スペース | 次のページ |
f | 1ページ進める(forward) |
b | 1ページもどる(back) |
q | 終了 |
j | 1行進める |
k | 1行もどす |
g | 先頭にもどる |
G | 末尾にもどる |
/str | 文字列 str をファイルの末尾に向かって探す |
?str | 文字列 str をファイルの先頭に向かって探す |
n | 直前の検索をファイルの末尾に向かって繰り返す(next) |
N | 直前の検索をファイルの先頭に向かって繰り返す(next) |
% ls /ここまで打ったら、行末で^Dを押してみる。![]()
% ls /^Dすると、ls と同じような表示がなされる。![]()
% ls / Applications/ Network/ bin/ home2/ sbin/ Desktop DB System/ cores/ mach.sym tmp@ Desktop DF Users/ dev/ mach@ usr/ Developer/ Volumes/ etc@ mach_kernel var@ Library/ automount/ home1/ private/ % ls /uから始まるものは、1個しかないので 「u」とうち、タブ・キーを打つ。タブ キーの代わりに (^I)でもよい。![]()
% ls /u^Iすると、sr/ が補完される。![]()
% ls /usr/^D を打つ![]()
% ls /usr/^Dすると、/usr の内容が表示される。![]()
% ls /usr/ X11R6/ epkg@ info/ libexec/ local@ share/ bin/ include/ lib/ local3@ sbin/ standalone/ % ls /usr/「lo タブ」とうつと、![]()
% ls /usr/lo^I次のように「cal/」が補完される。![]()
% ls /usr/local同様に、^D と打つと、一覧が表示される。![]()
% ls /usr/local^D/b タブとうつ。local3@ local@ % ls /usr/local
% ls /usr/local/b^Iin/「in/」が補完される。![]()
% ls /usr/local/bin/ここで ^D を押しても数が多いので参考にならない。emくらいを入れ てタブを押す。![]()
% ls /usr/local/bin/em^Iビープ音がなり、補完されない。 ^Dで様子をみる。![]()
% ls /usr/local/bin/em emacs* emacsclient* emcws-22.0.50* % ls /usr/local/bin/ema タブとうつ。![]()
% ls /usr/local/bin/ema^I「cs」が補完される。![]()
% ls /usr/local/bin/emacs
% ps aux | lv![]()
% grep root /etc/passwdps aux, ps auxw の結果を grep で検索し、特定の文字列 (たとえば sh や自分のログイン名)が現れるものを表示しなさい。root:*:0:0:System Administrator:/var/root:/bin/sh daemon:*:1:1:System Services:/var/root:/usr/bin/false % cat /etc/passwd | grep root
root:*:0:0:System Administrator:/var/root:/bin/sh daemon:*:1:1:System Services:/var/root:/usr/bin/false %
![]()
grep コマンドでよく使うオプション
1行に1つ、なにかの名前(人名、果物の名前)を含むファイルを作成しなさい。 sort コマンドを使って、並べ替えなさい。
ls -l の結果は、ファイル名の順番でソートされている。これをファイルの大 きさでソートしなさい。
sort コマンドでよく使うオプション
% set![]()
% printenv![]()
% echo $path利用可能なコマンドの一覧を表示しなさい。% echo $PATH
% ls -ld $path
![]()
% ls $path > commands% lv commands
![]()
% ls $path | lv存在しないディレクトリについてのエラー・メッセージは、標準エラー出力に 出力され、ファイルやパイプには現れない。![]()
% history次の方法で再実行してみないさい。![]()
^P
/^N
で選択して % ps uxwUSER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND yas 12144 0.0 -0.0 27396 520 p0 S 8:38AM 0:00.17 grotty yas 10897 0.0 -0.1 31872 1148 p0 Ss 10:42PM 0:02.05 -tcsh yas 11759 0.0 -0.1 31896 1200 p1 Ss+ 6:22AM 0:00.50 -csh yas 12137 0.0 -0.0 27292 436 p0 S 8:38AM 0:00.04 man tcsh yas 12138 0.0 -0.0 27804 556 p0 S 8:38AM 0:00.01 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh. yas 12139 0.0 -0.0 27804 388 p0 S 8:38AM 0:00.01 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh. yas 12140 0.0 -0.0 27360 392 p0 S 8:38AM 0:00.02 /usr/bin/tbl /usr/share/man/man1/tcsh.1 yas 12141 0.0 -0.0 27320 388 p0 S 8:38AM 0:00.01 /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c yas 12142 0.0 -0.0 27344 612 p0 S 8:38AM 0:00.10 /usr/bin/less -is yas 12143 0.0 -0.1 27800 1388 p0 S 8:38AM 0:00.38 troff -Wall -mtty-char -mandoc -c -Tascii yas 10895 0.0 -0.0 30716 600 ?? S 10:42PM 0:01.79 /usr/sbin/sshd -i % ps uxw | cut -c 1-10,65-
USER PID COMMAND yas 108976 -tcsh yas 108959 /usr/sbin/sshd -i yas 121374 man tcsh yas 121381 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh. yas 121391 sh -c (cd /usr/share/man && /usr/bin/tbl /usr/share/man/man1/tcsh. yas 121402 /usr/bin/tbl /usr/share/man/man1/tcsh.1 yas 121411 /usr/bin/groff -Wall -mtty-char -Tascii -mandoc -c yas 121420 /usr/bin/less -is yas 121438 troff -Wall -mtty-char -mandoc -c -Tascii yas 121447 grotty yas 122116 cut -c 1-10 yas 117590 -csh %
![]()
以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。 端末の表示(コマンドの実行結果)は、コピー&ペースト等の機能を使って提出 するファイルに含めなさい。
テキスト・ファイルで、右揃えをするには、パラグラフの区切りを、空行にし た上で、M-q (Esc q, M-x fill-paragraph) の機 能を利用するとよい。
(1) /usr/bin にある次のようなファイルを探しなさい
(2) echo コマンドを使って、次の文字列を画面に表示しなさい。
(6) /usr/bin にあるファイルのうち、ファイルファイルのサイズが大きいもの 5 個を表示する方法を示しなさい(加点課題)。
次のような結果が得られるはずである。
% コマンドライン30703212 emacs-21.2.1 30703212 emacs 4017096 php 2455700 jikes 1850988 emacs-undumped %
![]()