2008年05月02日 情報科学類 コンピュータリテラシ 筑波大学 システム情報工学研究科 コンピュータサイエンス専攻, 電子・情報工学系 新城 靖 <yas@is.tsukuba.ac.jp>
このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2008/2008-05-02
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/
*scratch*
」バッファを使わないこと。
先に C-x C-f でファイル名を指定すること。
;; This buffer is for notes you don't want to save, and for Lisp evaluation. ;; If you want to create a file, visit that file with C-x C-f, ;; then enter the text in that file's own buffer. (+ 10 20)^J 30
% ls -l > file1
シェルは、記号> があると、標準入力をキーボードから指定され
たファイルに切り替える。
% cat < file1
シェルは、記号|
があると、次の動作を行う (パイプ(pipe)機能)。
% ls -l | head -4
total 92
drwx------ 4 syspro lecture 136 Jun 27 2006 Desktop
drwx------ 3 syspro lecture 102 Feb 24 2006 Documents
drwx------ 23 syspro lecture 782 Jun 27 2006 Library
%
ファイルを介しても可能だけれども、作成した
不要なファイルを消さなければならない。
% ls -l > file
% head -4 < file
total 92
drwx------ 4 syspro lecture 136 Jun 27 2006 Desktop
drwx------ 3 syspro lecture 102 Feb 24 2006 Documents
drwx------ 23 syspro lecture 782 Jun 27 2006 Library
% rm file
パイプは、3つ以上のプロセスを結びつけることもできる。
% ls Document > file
ls: Document: No such file or directory
% cat file
%
Document は、Documentsの打ち間違い(sがない)。ls コマ
ンドは、エラー・メッセージを標準出力ではなく標準エラー出力に書き出す。
>&
をつかうと、エラー・メッセージも含めてファイルに出
力することもできる。
% ls Document >& file
% cat file
ls: Document: No such file or directory
%
|&
を使うと、エラー・メッセージも含めてパイプに出力す
ることもできる。
% ls Document |& head -4
ls: Document: No such file or directory
%
操作 | シェル変数 | 環境変数 |
代入 | set name=value | setenv name value |
参照 | $name | $name |
削除 | unset name | unsetenv name |
一覧表示 | set | printenv |
単独表示 | echo $name | echo $name |
printenv name |
シェル変数は、子プロセスへ引き渡されないが、環境変数は、子プロセスへ引 き渡される。環境変数は、子プロセスの動作を変更するために用いる。
% date
Thu May 1 16:55:18 JST 2008
% echo $TZ
tcsh: TZ: Undefined variable.
% setenv TZ EST
% date
Thu May 1 02:55:38 EST 2008
% unsetenv TZ
% date
Thu May 1 16:55:51 JST 2008
%
マニュアルの ENVIRONMENT VARIABLES に記述されている。
% man date
DATE(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 |
""
で括ると1単語として扱われる。
% set as="Application Support"
% ls -ld ~/Library/$as
ls: /home1/prof/yas/Library/Application: No such file or directory
ls: Support: No such file or directory
% ls -ld ~/Library/"$as"
drwx------ 11 yas prof 374 May 9 00:27 /home1/prof/yas/Library/Application Support
%
< > | $ { } ( ) [ ] & ; ^ " * ? ~ ' ` 空白
など。
コマンドの引数として渡したい時には、解釈を避ける(エスケープ(escape))た めの特殊な形式を使う。
形式 | エスケープ対象 | エスケープしないメタキャラクタ |
\x | 「\ 」の直後の一文字 | なし |
'str' | 「'」でくくられた文字列 | ! |
"str" | 「"」でくくられた文字列 | !, $ |
\
は、ASCII 5c(16進)の文字。表示は、「\」か「¥」。
ダブルクォート ""
の内部では、$
は解釈され、シェル変数や
環境変数の置き換えられる。シングルクォート
''
では、$
は解釈さない。
% echo "$home"
/home1/prof/yas
% echo '$home'
$home
%
補完(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のホーム・ディレクトリの絶対パス。 |
~/ | 自分自身のホーム・ディレクトリ |
~ | 自分自身のホーム・ディレクトリ |
よく使われる形式
% history
2 22:43 cd public_html/coins/literacy-2008/2008-05-02
3 22:43 ps
4 22:43 ps x
...
100 6:20 ls
101 6:20 history
%
シェル変数 history の個数だけ記憶している。
^P
/ ^N
で、ヒストリを
さかのぼれる。
その他に、次のような方法もある。tcsh では、ほとんど使われない。編集機能 がない csh では有効であった。
% cal
May 2008
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-2008-05.txt
% ls -l cal-2008-05.txt
-rw-r--r-- 1 yas prof 142 May 1 16:57 cal-2008-05.txt
% cat cal-2008-05.txt
May 2008
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
%
動作例:
% bc
bc 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
%
bc コマンドは、プロンプトを表示しないが、ユーザが打ち込んだ数式を行単位
で計算して表示する。終了するには、入力の終わり(end of file) を意味する
^D
(Control+D) を押す。コントロール・キーを押しながら、
D キーを押す。
次のような機能が利用できる。
% cat > expressions
10+20
2^40
^D
% cat expressions
10+20
2^40
%
次に作成した数式を、
キーボードの代わりにファイルからデータを読み込ませる。
% bc < expressions
30
1099511627776
%
% ls cal-2008-567.txt
ls: cal-2008-567.txt: No such file or directory
% cal 5 2008 > cal-2008-567.txt
% cal 6 2008 >> cal-2008-567.txt
% cal 7 2008 >> cal-2008-567.txt
% cat cal-2008-567.txt
May 2008
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 2008
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 2008
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
%
% 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^I「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
lv については、手引き 2.2.10 参照。
% head /etc/services
#
# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
#
# The latest IANA port assignments can be gotten from
#
# http://www.iana.org/assignments/port-numbers
% tail /etc/services
nimhub 48002/tcp # Nimbus Hub
nimgtw 48003/udp # Nimbus Gateway
nimgtw 48003/tcp # Nimbus Gateway
# Carstein Seeberg
# 48004-48555 Unassigned
com-bardac-dw 48556/udp # com-bardac-dw
com-bardac-dw 48556/tcp # com-bardac-dw
# Nicholas J Howes
# 48557-49150 Unassigned
# 49151 IANA Reserved
%
% grep root /etc/passwd
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
%
ps aux, ps auxw の結果を grep で検索し、特定の文字列
(たとえば sh や自分のログイン名)が現れるものを表示しなさい。
grep コマンドでよく使うオプション
1行に1つ、なにかの名前(人名、果物の名前)を含むファイルを作成しなさい。 sort コマンドを使って、並べ替えなさい。
ls -l の結果は、ファイル名の順番でソートされている。これをファイルの大 きさでソートしなさい。
sort コマンドでよく使うオプション
% ls -l /usr/bin | lv
% grep yes /usr/share/dict/words | lv
% tail /usr/share/dict/words | sort -r
% ls
% ls | cat
% ls | lv
パイプに出力する時にも、画面と同様の表示をさせるには、-C オプションを付
ければよい。
% ls -C
% ls -C | cat
% ls -C | lv
% set
% echo $home
/home1/prof/yas
%
その他に、path, shell, term, status, user 等のシェル変数を表示しなさい。
% set u=/Applications/Utilities
% echo $u
/Applications/Utilities
% ls $u
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
%
% printenv
例:
% printenv HOME
% echo $HOME
その他に、SHELL, TERM, NNTPSERVER, PRINTER 等の値を表示しなさい。
% echo $path
% echo $PATH
% ls -ld $path
利用可能なコマンドの一覧を表示しなさい。
% ls $path > commands
% lv commands
% ls $path | lv
存在しないディレクトリについてのエラー・メッセージは、標準エラー出力に
出力され、ファイルやパイプには現れない。
% history
次の方法で再実行してみないさい。
^P
/^N
で選択して % ls -l ~/Library/*/Firefox/Profiles/*/.parentlock
% cd ~/Library/*/Firefox/Profiles/*
% pwd
% ls -l .parentlock
% open /Applications/Calculator.app
これを、次のような方法を利用して、長い文字列をキーボードから打たないで
実行しなさい。
% echo "$prompt"
この時、ダブルクォート ""
を付けないとうまく表示できないことがある。この理由を考えなさい。
% echo $prompt
シェル変数 prompt は、シェルのプロンプトを保持している。
これを変更してみなさい。
マニュアル man tcsh で、prompt 変数の中で次のような表現がどのような意味 を持っているかを調べなさい。
%m
%c
%n
以下の問題について、問題、および、回答をテキスト・ファイルに記述し、 レポート提出ページから提出しなさい。 端末の表示(コマンドの実行結果)は、コピー&ペースト等の機能を使って提出 するファイルに含めなさい。
(1) シェルのファイル名置換機能を使って /usr/bin にある次のようなファイ ルをすべて表示しなさい。結果は、ls または echo コマンドで表示し、コマン ドラインを含めてその結果をレポートに含めなさい。
(2) echo コマンドを使って、次の文字列を画面に表示しなさい。
(3) 次のファイル名(ディレクトリ名も含めたすべて)を、シェル変数やファイ ル名置換を使って短く表現しなさい。最後に ls -ld で表示しなさい。
(4) tcsh の補完機能を使って、次のファイル名を打ち込み、ls -ld で表示し なさい。この時、どのようなキー操作を行ったかを書きなさい。
(5) The Unix Super Text の次の部分を読みなさい。
(6) [加点] /usr/bin にあるファイルのうち、ファイルファイルのサイズが大 きいもの5 個を表示する方法を示しなさい。
最終的に次のような結果が得られるはずである。
% <回答>
30703212 emacs-21.2.1
30703212 emacs
3976096 php
2455700 jikes
1850988 emacs-undumped
%