ファイルとディレクトリの木構造、ファイルの属性、ファイル名置換、ファイルを扱うコマンド、Emacsカット&ペースト、コピー&ペースト

					2018年04月24日
情報科学類 コンピュータリテラシ

                                       筑波大学 システム情報系
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~yas/coins/literacy-2018/2018-04-24
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~yas/
http://www.cs.tsukuba.ac.jp/~yas/

■連絡事項

■ファイルとディレクトリの木構造とパス名

■木構造(tree structure)

木構造(tree structure)というのは、コンピュータ・サイエン ス(情報科学類で学ぶ学問)でよく使われる用語。 階層構造(hierarchical structure)ともいう。

木構造の例を、大学の組織を使って説明する(図?)。

木構造という名前は、本物の木が、一度枝分かれした後は決して交わらないこ とに似ていることによる。ある節から別の節までの道が2通り以上あるは、グ ラフ構造と呼ばれる。

筑波大学、社会・国際学群・・・情報学群、情報科学類・・・
図? 大学組織に見られる木構造

筑波大学、社会・国際学群・・・情報学群、情報科学類・・・(領域的な見方)
図? 大学組織に見られる木構造(領域的な見方)

A、B、2つの集合があると、一般には、次の4つに分割される。

  1. Aにしか含まれない部分
  2. AとBの両方に含まれる部分
  3. Bにしか含まれない部分
  4. AにもBにも含まれる部分
領域(木構造)の場合、完全に含まれるか、無関係かのどちらかになる。

集合の関係を説明した図。一般的な場合と領域の場合。
図? 2つの集合の関係

◆字下げによる木の表現

木構造を字下げで表すことがある。

筑波大学

◆区切り文字入り表記

「情報科学類」という節を、次のように表記する。

筑波大学情報学群情報科学類

コンピュータの中で、文字列(文字の並び)で木構造上の位置を表現する時に は、節が分かりやすくために、はっきりと区切りを入れて表現することがよく 行われる。

筑波大学.情報学群.情報科学類
筑波大学/情報学群/情報科学類
情報科学類.情報学群.筑波大学

区切り文字としては、「.」(点)、「/」(スラッシュ)、「\」(バック スラッシュ)、「¥」(円記号)などがよく使われる。単語を並べる時に、木 の根に近いほうから書く流儀と遠い方から書く流儀がある。

◆木の例

コンピュータでは、次のような場所で木構造が使われている。

コンピュータ以外では、次のような場所で木構造が使われている。

◆くわしくは

総合科目「ネットワーク社会を支える情報技術入門 II」/木構造(2017年11月20日)

http://www.softlab.cs.tsukuba.ac.jp/~yas/gen/it-2017-11-20/

◆ディレクトリの木構造

Unix(MacOSX, Linux含む)やMS Windows では、 ファイルの名前を、基本的には 木構造(tree structure,きこうぞう) という考え方で整理する。 木構造は、 階層構造(hieratical structure) とも呼ばれる。

根が上にある本物の木
図? 本物の木

根、home、etc、user、kernel、yas、中間節、端説、リンクからなる構造
図? ファイルとディレクトリの木

◆ルート・ディレクトリ(the root directory)

本物の木に根にあたるディレクトリ。

ルート・ディレクトリの名前は、「/」 (スラッシュ 1 文字)。

◆パス名

Unix では、ファイルやディレクトリの名前を付ける時に、木構造で考えてそ のファイルやディレクトリにたどり着くための道順を使う。 このような名前をパス名(path name) という。 パス(path)とは「道」の意味。pass ではない。

ルートディレクトリから出発する方法で表記するパス名を、 絶対パス名(absolute path name)

絶対パス名は、ルートディレクトリを表す「/」の後に、 たどった枝の名前を並べ、間に区切りとして「/」をはさむ。

例:「/usr/bin/wc

  1. ルート・ディレクトリから出発する
  2. usr」という枝に進む
  3. bin」という枝に進む
  4. wc」という枝に進む

◆カレントワーキングディレクトリ

ルート・ディレクトリを起点にする方法(絶対パス名)だけでは、作業しにくい。 「現在作業中のディレクトリ」 「カレント・ワーキング・ディレクトリ(the current working directory)」 を起点として、ファイル名を扱う。

カレント・ワーキング・ディレクトリを表示するには、pwd (print working directory) コマンドを使う。

$ pwd [←]
/USA/California
$ []
表示されている「/USA/California」が絶対パス名で表示されたカレント・ワー キング・ディレクトリの名前。

カレント・ワーキング・ディレクトリを変更するには cd (change directory) コマ ンドを使う。

$ cd dirname [←]
「ディレクトリ dirname に行く」とも言う。

世界の街の木構造、USA、California、Florida、San-Francisco
図? 世界の街の木構造

$ pwd [←]
/USA/California
$ cd /USA/Florida [←]
$ pwd [←]
/USA/Florida
$ cd /USA/California/San-Francisco [←]
$ pwd [←]
/USA/California/San-Francisco
$ []

カレントワーキングディレクトリは、名前「.」で参照できる。

lsコマンドは引数にディレクトリを指定すると、そのディレクトリの中にある ファイルの一覧を表示するが、引数を与えないと、「.」が与えられたものとし て働く。

$ ls [←]
Los-Angeles  San-Francisco
$ pwd [←]
/USA/California
$ ls /USA/California [←]
Los-Angeles  San-Francisco
$ ls . [←]
Los-Angeles  San-Francisco
$ []

カレントワーキングディレクトリを起点としたパス名を 相対パス名(relative path name)という。 「/USA/California」の時、 「San-Francisco」は「/USA/California/San-Francisco」、 「San-Francisco/China-Town」は「/USA/California/San-Francisco/China-Town」を意味する。

◆ディレクトリの親子関係

親ディレクトリ(parent directory)
あるディレクトリの ルート・ディレクトリからそのディレクトリへの道順で1つだけ 根に近いディレクトリ。 1個上のディレクトリともいう。 「..」で参照可能。
子ディレクトリ(child directory), サブディレクトリ(subdirectory)
あるディレクトリの、1つ根から遠いディレクトリ
隣のディレクトリ、兄弟のディレクトリ
共通の親ディレクトリを持つディレクトリ。 「../ディレクトリ名」で参照可能。

◆ホーム・ディレクトリ(home directory)

個人所有のファイルを保存する時に起点となるディレクトリ。

cd コマンドに引数を与えないと、ホーム・ディレクトリにもどる。

多くのシェル(csh,tcsh,bash,zsh) やEmacsなどでは、 ホームディレクトリを「~」で指定できる (指定できないプログラムもある。)

」は、英語の端末(ASCII,後述)の形。 日本語(JIS,後述) では、「」となることがある。

他人のホーム・ディレクトリは、「~ユーザ名」で指定できるプログラムがある。 (指定できないもプログラムもある。)

~xxx」と「~/xxx」のように 「~」直後に「/」の有無で意味が違う。

/ がある (例: ~/xxx)
自分のホーム・ディレクトリ以下のファイル(またはディレクトリ)。 xxx はファイル名、または、ディレクトリ名として解釈される。
/ がなく、アルファベットで始まる(例: ~xxx)
他のユーザのホーム・ディレクトリ。 xxx はユーザ名として解釈される。
/ がなく、数字で始まる(例: ~1、~2、~3、・・・)
bash では、ディレクトリスタックの上から num 番目を参照。 新Linux/UNIX入門 04-020 ファイル名とディレクトリ名とパス名 参照新Linux/UNIX入門 06-037 ディレクトリを行き来する(pushd, popd) 参照The Unix Super Text 上巻 11.10 ディレクトリスタック 参照

■ファイルの属性

Unixのファイルとディレクトリは、内容(ビット列を保存する)の他に、 所有者、更新された日付などの 属性attributes ) を持つ。

ls -l コマンドを実行するとカレントディレクトリのファイルや ディレクトリの属性が表示される。

$ ls -l [←]
total 99
drwx------   4 yas  prof   3072  4 10 17:37 Desktop
drwx------   3 yas  prof   1024  3 11 13:52 Documents
drwx------@ 34 yas  wheel  2048  4 18 10:05 Library
drwx------  20 yas  prof   2048  4 18 10:57 Maildir
drwx------   2 yas  prof   1024  4 21 16:03 Music
-rw-r--r--   1 yas  prof   3178  4 15 15:56 file100.txt
-rw-r--r--   1 yas  prof     25  4 15 15:58 file30
-rw-r--r--   1 yas  prof   2550  4 15 15:59 literacy-a2.txt
-rw-r--r--   1 yas  prof   2550  4 15 15:57 literacy-a2.txt~
...
$ []
行単位に次のようなファイルやディレクトリの属性が表示さる。

◆所有者(owner)

ファイルが誰の所有物かを示す。 コンピュータのなかでは人はユーザ名で表されるので、 所有者もユーザ名(上の例ではyas)で表される。

◆グループ名

Unixでは複数のユーザが属する グループ(group)を設定できる。 ファイルは必ずどれか1つのグループに属する。

◆大きさ

ファイルの大きさ(size)は、ファイルの内容をバイト数で数えた値(bit ではな く byte)。

◆時刻

Unixのファイルには、次の3種類の時刻が記録されている
最終アクセス時刻 (the last access time)
ファイルの「内容」が最後にアクセス(読み込み)された時刻。 ls -lu で表示される。
最終更新時刻 (the modification time)
ファイルの「内容」が最後に変更(書き込み)された時刻。 ls -l で表示される「時刻」で、 単に「ファイルの時刻」といった場合にはこの時刻を意味する。
最終変更時刻 (the status change time)
ファイルの「属性」が最後に変更された時刻。 ls -lcで表示される「時刻」。
他の時刻も属性の1つなので、「最終更新時刻」を変更すると、 「最終変更時刻」も変更した時刻も変わる。

◆モード(mode)

ファイルの型とファイルへのアクセス(読み書き)の可否を決めるための属性

ファイルの型

モードの一番左1文字は、ファイルの型(type)を表わす。
-
ファイル
d
ディレクトリ

許可されたアクセス方法

モードからファイルの型を除いた部分はアクセスの可否を決めるための 情報。主に r, w, x, - の組み合わせの 9 文字。

詳しくは、後述する。 新Linux/UNIX入門 06 ファイルのアクセス制御 参照新Linux/UNIX入門 06-058 パーミッションマスクの設定(umask) 参照The Unix Super Text 9.5.5項 モード 参照The Unix Super Text 21.5節 マスクとモード 参照

■ファイル名置換

ファイル名の一部だけをキーボードから打ち込み、 残りの部分をシェルに探させる。

補完(completion)では、人間が目で確認するが、置き換えでは人間が確認する ことはない(見つからなければエラーになる)。

例:/usr/bin にある at で始まるファイルをすべて ls コマンドに引き渡したい。1つひとつ打つと疲れる。

$ ls -l /usr/bin/at /usr/bin/atos /usr/bin/atq /usr/bin/atrm /usr/bin/atsutil [←]
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/at
-rwxr-xr-x  1 root  wheel  90960  2  6 17:03 /usr/bin/atos
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atq
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atrm
-rwxr-xr-x  1 root  wheel  25568  3 18 14:08 /usr/bin/atsutil
$ []
次のように、「*」を使うと楽に打てる。
$ ls  -l /usr/bin/at* [←]
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/at
-rwxr-xr-x  1 root  wheel  90960  2  6 17:03 /usr/bin/atos
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atq
-r-sr-xr-x  4 root  wheel  75648  3 18 14:09 /usr/bin/atrm
-rwxr-xr-x  1 root  wheel  25568  3 18 14:08 /usr/bin/atsutil
$ []
この例では、シェルが「/usr/bin/at*」を5つのファイル名に置き換え ている。ls が行っているのではない。ls以外のどんなプログラ ムでも有効である。
$ echo /usr/bin/at* [←]
/usr/bin/at /usr/bin/atos /usr/bin/atq /usr/bin/atrm /usr/bin/atsutil
$ file /usr/bin/at* [←]
/usr/bin/at:      setuid Mach-O universal binary with 2 architectures
/usr/bin/at (for architecture x86_64):	  Mach-O 64-bit executable x86_64
/usr/bin/at (for architecture i386):	  Mach-O executable i386
/usr/bin/atos:    Mach-O universal binary with 2 architectures
/usr/bin/atos (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/atos (for architecture i386):	  Mach-O executable i386
/usr/bin/atq:     setuid Mach-O universal binary with 2 architectures
/usr/bin/atq (for architecture x86_64):	  Mach-O 64-bit executable x86_64
/usr/bin/atq (for architecture i386):	  Mach-O executable i386
/usr/bin/atrm:    setuid Mach-O universal binary with 2 architectures
/usr/bin/atrm (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/atrm (for architecture i386):	  Mach-O executable i386
/usr/bin/atsutil: Mach-O 64-bit executable x86_64
$ []
echo は、引数をそのまま表示するコマンド、 file は、ファイルの種類を表示するコマンドである。

◆ファイル名置換でよく使われるパタン

bash では、「*」を含めて、次のようなパタンが使える。
パタン 意味
* 任意の文字列(空でもよい)(.で始まるものを除く)
? 任意の1文字
[str] strのなかの1文字。たとえば [aA] は、a か A とマッチする。「-」があると、ASCIIでその間の文字を意味する。たとえば [0-9](数字)や[a-zA-Z](アルファベット)がよく使われる。
{str1,str2,...} 「,」で区切られたパタン str1, str2, ... を順にファイル名置換した結果を並べたもの
~username ユーザusernameのホーム・ディレクトリの絶対パス。
~/ 自分自身のホーム・ディレクトリ
~ 自分自身のホーム・ディレクトリ

よく使われる形式

*
全てのファイル名。
*.txt
最後が .txt で終わるもの。
*.[ch]
最後が .c、または、.h で終わるもの。
file[0-9]
「file」で始まり、数字で終わるファイル名
[a-z]*
英小文字で始まるファイル名
[Ww]ork
Work または work の両方、またはどれか
注意:「*」と「*.*」は違う。Windowsで「*.*」と書く 所、Unixでは、「*」で十分なことが多い。

◆空白文字を含むファイル名

ファイル名に空白文字を含んでいると、そのままではうまく扱えない。
$ ls -ld /Applications/QuickTime Player.app [←]
ls: /Applications/QuickTime: No such file or directory
ls: Player.app: No such file or directory
$ []
「?」や「*」で置き換え可能な場合が多い。
$ ls -ld /Applications/QuickTime*Player.app [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ ls -ld /Applications/QuickTime?Player.app [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ []
バックスラッシュ「\ 」や" " を使う方法もある。
$ ls -ld /Applications/QuickTime\ Player.app [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ ls -ld "/Applications/QuickTime Player.app" [←]
drwxr-xr-x+ 3 root  wheel  102  3 18 14:11 /Applications/QuickTime Player.app
$ []

■ファイルとディレクトリを扱うコマンド(2)

ファイルとディレクトリ(4月18日) の復習。

■ファイルの基本的な操作

次のコマンドを使えるようにする。

◆lsの-aオプションによる「.」から始まるファイルの表示

ls コマンドは、標準では、カレント・ワーキング・ディレクトリを意 味する「.」や親ディレクトリを意味する「..」を含めて、 「.」から始まるファイル名を表示しない。-a オプションを付 けると、「.」から始まるファイル名も表示する。ホーム・ディレクト リには、「.」で始まるファイルがいくつか存在する。
$ ls [←]
Desktop         Library         Music           Public          WinFiles
Documents       Movies          Pictures        Sites           public_html
$ ls -a [←]
.                       .cshrc~                 Movies
..                      .emacs                  Music
.CFUserTextEncoding     .emacs.d                Pictures
.DS_Store               .login                  Public
.Spotlight-V100         .profile                Sites
.Xauthority             .ssh                    WinFiles
.backupfiles2006        Desktop                 public_html
.bashrc                 Documents
.cshrc                  Library
$ []

◆lsの-dオプションによるディレクトリそのものの表示

ls コマンドは、引数にディレクトリ名が与えられると、ディレクトリ の内容を表示する。
$ ls -l ~/Maildir [←]
total 113
drwx------  2 yas  prof  35840  4 18 11:00 cur
drwx------  2 yas  prof  17408  4 18 10:57 new
drwx------  2 yas  prof   1024  4 18 11:37 tmp
$ []
ディレクトリそのものを表示したい時(特に「-l」と組み合わせて日付 等の属性を表示したい時)は、「-d」オプションを付ける。
$ ls -ld ~/Maildir [←]
drwx------  20 yas  prof  2048  4 18 10:57 /home/prof/yas/Maildir
$ []

◆cp file dir

cp コマンドには、コピー先にディレクトリを指定することができる。
$ cp file1 file2 dir [←]
この場合、dir 以下に、(一番葉の部分だけ)同じ名前のファイルが作られる。 次の操作と概ね同じ動作をする。
$ cp file1 dir/file1  [←]
$ cp file2 dir/file2 [←]

ディレクトリを指定する時には、カレント・ワーキング・ディレクトリ 「.」 や ホーム・ディレクトリ「〜」も使える。

$ cp /etc/group . [←]
$ cp /etc/group ~ [←]
$ cp ~yas/public_html/htdocs/coins/literacy-2018/2018-04-24/literacy-a100.txt . [←]

◆ファイルを消す

意義

ファイルを消すには、rm (remove) コマンドを用いる。

$ rm file1 [←]
このファイル file1 が削除される。

rm コマンドで消してしまったファイルは、普通2度と戻らない。 消す前に、本当に不要かどうかを確認すること。

◆rm -i

rm コマンドには、-i オプションがあり、ファイルを消すかどうかを対話的 (interactive)に y/n で聞いてくる。消してもよい時には、y と答える。

コマンド名の置換え(alias)等て、rm を rm -i に変えることは、一般的には勧 められない。「rm -i [←] y」という操作が、一連の操作として身に付い てしまうので。

◆ファイルの名前を変更

ファイル名を変更するには mv (move) コマンドを使う。

$ mv oldname newname [←]
この結果、ファイルoldfileのファイル名をnewnameに変更される。

ここで、newname のファイルが存在した場合、元の newname は消されてしまう。

◆ディレクトリの作成

mkdir (make directoryr)コマンドを使う。
$ mkdir dirname [←]
この結果、dirnameという名前のディレクトリが作らる。

◆ディレクトリ名の変更

mvコマンドは、ディレクトリの名前を変更するために使える。

$ mkdir dir1 [←]
$ ls  [←]
dir1
$ mv dir1 dir2 [←]
$ ls  [←]
dir2
$ []

◆ファイルのディレクトリへの移動

ファイル名を変更する mv (move) コマンドは、 同じディレクトリだけでなく、他のディレクトリに対しても使える。
$ mkdir ~/dir1 [←]
$ mv oldname ~/dir1/newname [←]
この結果、カレント・ワーキング・ディレクトリにある ファイルoldfileのファイル名は、 ~/dir1/newnameに変更される。

次のように、ディレクトリだけを指定することもできる。

$ mv name ~/dir1/ [←]
この場合、次のものと同じになる。
$ mv name ~/dir1/name [←]
また、変更先にディレクトリを指定する mv では、ファイル名は1個でなくて も複数でもよい。
$ mv file1 file2 file3 ~/dir1 [←]

◆ディレクトリの削除

ディレクトリを削除するには、 rmdir (remove directory) コマンドを使う。
$ rmdir dirname [←]
この結果、 ディレクトリdirnameが削除される。

空でないディレクトリは、rmdir コマンドでは 「Directory not empty」 というエラー・メッセージが表示され削除できない。 この場合は、子供のディレクトリやファイル を削除してからもう一度削除する。

◆ファイルの操作にともなうエラー

No such file or directory
そういう名前のファイルが見つからなかった。ファイル名が間違っていな いか確かめる。
Permission denied
ファイル名は合っているが、アクセス権がない。 モードを ls -l で調べる。
No space left on device
ディスクに空領域がない。 まず、不要なファイルを消す。
Disc quota exceeded
ディスクに空領域があるが、 個人に割り当てられた領域を使い果たした。 まず、不要なファイルを消す。

■Emacs

手引き 3章 参照新Linux/UNIX入門 25-195 333ページ マークを使ったテキストのカットアンドペースト 参照The Unix Super Text 15.1 12章 参照

◆カット&ペースト、コピー&ペースト

手引き 3.3.5項 参照The Unix Super Text 12.4.3項 参照, The Unix Super Text 12.4.5項 参照

マーク
C-SPC (Control + Space キー)または C-@ で設定する。 うまくいくと、ミニバッファに Mark set と表示される。 カーソルを動かしても移動しない。 次に新しいマークをセットするまで有効。
ポイント(カーソルのある位置)
カーソルを動かすと移動する。
リージョン(領域)
マークした場所とカーソルの間
リージョンに対する操作には、さまざまなものがある。 カットしたもの、または、コピーしたものをペーストするには、C-y を 使う。

テキストの移動(カット&ペースト)の方法

  1. C-SPC、または、C-@ でマーク
  2. カーソル移動
  3. C-wでカット
  4. カーソル移動
  5. C-yでペースト
コピー&ペーストの方法
  1. C-SPC、または、C-@ でマーク
  2. カーソル移動
  3. M-w、または、Esc wでコピー
  4. カーソル移動
  5. C-yでペースト

◆大量の削除

カット&ペーストのカットだけをやる。
  1. C-SPC、または、C-@ でマーク
  2. カーソル移動
  3. C-wでカット

◆Emacs、保存しないで終了

Emacs は、きちんと C-x C-s で保存(save)して、C-x C-c で終了することが望 ましい。

Emacs で何か編集して、保存しないで C-x C-c で終了しようとすると、次のように聞かれる。

Save file ファイル名? (y, n, !, ., q, C-r, d or C-h) []
ここで y と 1 文字打つ(リターン・キー不要)と、保存して終了してくれる。 保存したくない時には、 n と1 文字打つ。 この時は、Emacs は次のように問い合わせてくる。
Modified buffers exist; exit anyway? (yes or no) []
保存しないで終了したい時は、次のように「yes[←]」と打つ。
Modified buffers exist; exit anyway? (yes or no) yes[←]

◆複数のプログラムで書き換え

1 つのファイルを、同時に複数のプログラムで書き換えると問題が生じる。 (iTerm の端末を複数開いて、複数の端末で emacs literacy-a2.txt と実行し、ファイル literacy-a2.txt を書き換えると問題が生じる。) 1つのファイルは、同時には 1つのプログラムで修正する。

Emacs には、1 つのファイルを複数の Emacs で編集しないようにするために、ロックの機能がある。 複数の Emacs で編集しようとしていることを検出すると、Emacs は次のような警告を発する。

ファイル名 locked by ユーザ名@コンピュータ名 (pid 番号): (s, q, p, ?)?[]
普通は、qと答えて、編集しない。 s では、ロックを (steal) して編集、 p では、ロックはそのままで編集できるが、良い方法ではない。

1つのファイルを編集するのは、1つのプログラムだけにする、 Emacs を実行するのは、1 つの iTerm だけにすると、このような難しい問題は生じない。

◆Emacsを終了してからiTermを終了すること

Emacs が動いている端末(iTerm)のウィンドウを左上の「赤」ボタンで閉じては いけない。そうすると、次のようなトラブルが生じることがある。

実行と逆順に終了するのが良い。iTerm、シェル、emacs の順に実行した ら、emacs、シェル、iTerm の順に終了する。

■実習

実習時間中には、以下の課題をできるだけ多く行いなさい。全部を行う必要はない。

★練習問題(401) Emacsの復習

Emacs で、ファイルを作成する方法を復習しなさい。

★練習問題(402) Spotlight と入力ソースのショートカット・キーの解除

Emacs でカット&ペーストやコピー&ペースト をする時には、C-SPC のキーをよく利用する。 しかし、macOS ではこのキーは、「入力ソースの切り替え」で使われている。 Emacs を使いやすくするために、次のことを行いなさい。

★練習問題(403) Emacs、カット&ペースト、コピー&ペーストのキー操作

次の表に含まれているキーを覚えて使えるようにしなさい。
C-SPC または C-@ 領域(region)の先頭を決める(マーク)
C-w リージョン(領域)をカット
ESC w リージョン(領域)をコピー
C-y リージョン(領域)をペースト

★練習問題(404) bashキー操作

bash の次の Emacs 風キーの働きを確認しなさい。 次の操作を行いなさい。

★練習問題(405) Emacs、ファイルから大量の不要な行の削除

Emacs のカット機能を使って、ファイルから大量の不要な行を削除する練習を 行いなさい。
  1. 練習用のファイルを作成する。次の例では、前回のレポートのファイルを コピーして作成している。他のファイルでも良い。
    $ cp literacy-a2.txt literacy-emacs-cut.txt [←]
    
  2. emacs を実行する。
    $ emacs literacy-emacs-cut.txt [←]
    
  3. 消したい場所(たとえば、問題の詳しい説明)の先頭にカーソルを移動さ せる。 C-f, C-b, C-n, C-p キーを使う。
  4. C-SPC 、または、C-@ キーを打ち、マークを設定する。
  5. 消したい場所末尾にカーソルを移動させる。
  6. C-w キーでカットする。
  7. 3. から 6. を繰り返す。
  8. 最後に、Emacs を C-x C-s C-x C-c で終了する。
マークを付ける場所は、消したい場所の先頭ではなく末尾でも良い。その場合 は、カーソルを消したい場所の先頭に移動させる。そのことを確認しなさい。

★練習問題(406) lsによるホーム・ディレクトリの観察

ls コマンドで、自分のホーム・ディレクトリにどのようなファイルやディレク トリがあるかを調べなさい。また、-l オプション、-a オプション、-d オプショ ンの働きを確認しなさい。
$ cd ~ [←]
$ ls [←]
$ ls -a [←]
$ ls -l [←]
$ ls -la [←]
$ ls -d [←]
$ ls -dl [←]
$ ls -adl [←]

★練習問題(407) cd、pwd、lsによるディレクトリの観察

次のディレクトリの内容を cd コマンド、pwdコマンド、および、ls コマンド を使って観察しなさい。
$ cd ディレクトリ名 [←]
$ pwd [←]
$ ls [←]
$ ls -l [←]

★練習問題(408) cdコマンドによるホームディレクトリへの移動

次の方法で、ホームディレクトリへ移動してみなさい。

(1) 引数無しで cd コマンドを実行

$ cd / [←]
$ pwd [←]
$ ls [←]
$ cd [←]
$ pwd [←]
$ ls [←]
(2) cd コマンドに、「~」を与える。
$ cd / [←]
$ pwd [←]
$ ls [←]
$ cd ~ [←]
$ pwd [←]
$ ls [←]
(3) cd コマンドに、「~ログイン名」を与える。
$ cd / [←]
$ pwd [←]
$ ls [←]
$ cd ~ログイン名 [←]
$ pwd [←]
$ ls [←]

★練習問題(409) cdコマンドによるホームディレクトリ以下のディレクトリへの移動

ホーム・ディレクトリの下に、どのようなディレクトリがあるかを ls -l で調 べなさい。
$ ls -l [←]
ディレクトリの場合、左端が「d」になっている。 ( ファイルの属性 参照 ) cd コマンドを使って、カレント・ワーキング・ディレクトリを ホーム・ディレクトリの下のディレクトリに変更しなさ い。以下は、Music に変更した例である。
$ cd [←]
$ pwd [←]
$ ls [←]
$ cd Music [←]
$ pwd [←]
$ ls [←]
Music も含めて次のようなディレクトリについても、類似の操作を行い なさい。

★練習問題(410) ファイル名置換、テキストファイルの一覧表示

ホームディレクトにあるテキストファイルの一覧を表示しなさい。 テキストファイルには、ファイルの末尾(拡張子)として、「.txt」や 「.text」がついているものとする。
$ ls *.txt [←]
$ ls *txt [←]
$ ls *.text [←]
$ ls *text [←]
$ ls *.txt *text [←]
$ ls *.t*xt [←]

★練習問題(411) ファイル名置換、ls -ld

ホームディレクトにある、大文字 D から始まるディレクトリの一覧を表示しな さい。
$ cd [←]
$ ls -d D* [←]
Desktop		Documents	Downloads
$ ls -ld D* [←]
drwx------  4 yas  prof  5120  4 21 14:35 Desktop
drwx------  6 yas  prof  1024  5 13  2016 Documents
drwx------  2 yas  prof  1024  4 13 17:31 Downloads
$ []
この例では、 lsの-dオプションによるディレクトリそのものの表示 の機能を利用している。これを付けなかった場合、どうなるか調べなさい。
$ cd [←]
$ ls D* [←]
$ ls -l D* [←]
同様に、大文字 M から始まるファイルやディレクトリを表示しなさい。

同様に、小文字 s で終わるファイルやディレクトリを表示しなさい。

$ ls -ld *s [←]

★練習問題(412) ファイル名置換、長い名前のディレクトリにcd

ホームディレクトに、次のような 大文字 D から始まる 3 つのディレクトリ があったとする。
$ cd [←]
$ ls -ld D* [←]
drwx------  4 yas  prof  5120  4 21 14:35 Desktop
drwx------  6 yas  prof  1024  5 13  2016 Documents
drwx------  2 yas  prof  1024  4 13 17:31 Downloads
$ []
この中で、Desktop に cd したい。単純な方法では、長い名前を全て打ち込む ことである。
$ cd [←]
$ pwd [←]
/home/ugrad/99/s9998765
$ cd Desktop [←]
$ pwd [←]
/home/ugrad/99/s9998765/Desktop
$ []
ファイル名置換を使って、短い名前で cd できることを確認しなさい。
$ cd [←]
$ pwd [←]
/home/ugrad/99/s9998765
$ cd De* [←]
$ pwd [←]
/home/ugrad/99/s9998765/Desktop
$ []
$ cd [←]
$ pwd [←]
/home/ugrad/99/s9998765
$ cd D*p [←]
$ pwd [←]
/home/ugrad/99/s9998765/Desktop
$ []

★練習問題(413) ファイル名置換、長い名前のアプリケーションの実行

/Applications/Calculator.app は、電卓のプログラムである。これをシェルか ら実行するためには、次のように open コマンドに対してパス名を与えればよい。
$ open /Applications/Calculator.app [←]
これを、ファイル名置換機能(*,?)を利用して、長い文字列をキーボードから打 たないで実行しなさい。
$ echo /App*/Calc* [←]
(1つしか表示されない確認する。複数あると問題がある。)
$ ls -d /App*/Calc* [←]
(1つしか表示されない確認する。複数あると問題がある。)
$ open /App*/Calc* [←]
同様に、/Applications にある、他のアプリケーション・プログラムを実行し てみなさい。
$ ls /Applications [←]
$ echo  「*」を含むファイル名 [←]
$ ls -d 「*」を含むファイル名 [←]
$ open  「*」を含むファイル名 [←]

★練習問題(414) ファイルとディレクトリの操作

Emacs で、まずファイルを数個、作成しなさい。
$ emacs file1.txt [←]
$ emacs file2.txt [←]
$ emacs file3.txt [←]
mkdir コマンド、ディレクトリを数個、作成しなさい。
$ mkdir dir1 [←]
$ mkdir dir2 [←]
$ mkdir dir3 [←]
そして、次の表にあるファイルの操作を行ってみなさい。

ls	f1 f2 f3	ファイルの名前の一覧の表示
ls	dir		ディレクトリの内容の表示
ls			カレント・ワーキング・ディレクトリの内容の表示
ls -d	d1 d2 d3	ディレクトリの名前の一覧の表示
ls -a	dir		ディレクトリの内容の表示(.で始まる名前も表示)
ls -l	f1 f2 f3	ファイルの属性の表示
ls -ld	d1    		ls -l -d の組み合わせ
pwd			カレント・ワーキング・ディレクトリの表示
cd	dir		カレント・ワーキング・ディレクトリの変更
cd			ホーム・ディレクトリへ移動
cat	f1		ファイルの内容の表示
head	f1		ファイルの内容の表示(最初の10行)
cp	f1 f2		ファイルのコピー
cp	f1 f2 f3 dir	ファイルを指定されたディレクトリへコピー
cp	dir/f1 .	ファイルをカレント・ワーキング・ディレクトリへコピー
rm	f1 f2 f3	ファイルの削除
mv	old new		ファイルの名前を変える
mv	f1 f2 f3 dir	ファイルの名前を変える(dir以下への移動)
mkdir	dir		ディレクトリの作成
mkdir -p d1/d2/d3	ディレクトリの作成(親も自動的に作成)
rmdir	dir		ディレクトリの削除(空のディレクトリの時)

f1, f2, f3 はファイル名、dir, d1, d2, ... は、ディレクトリ名

★練習問題(415) treeコマンド

tree コマンドを利用して、ファイルを木構造が分かりやすいように表示しなさい。

tree コマンドに -N オプションをつけると、ファイル名に漢字を含むものも表 示できる。

$ tree -N ディレクトリ名 [←]
注意: 表示が止まらなくなった時、強制終了したい時には、 Control キー + c キー も使える。

lv による表示。後ろに「| lv」をつける。 終了するには、q キーを打つ。

$ tree -N ディレクトリ名 | lv [←]
<表示省略>
<空白キーで次のページを表示>
:q
$ []

iTerm にペーストする時に「?」が表示されるならば、次のように すれば (UTF-8ではなく) ASCII 文字を使うようになる。

$ LANG=C tree -N ディレクトリ名 [←]

tree コマンドの次のオプションの意味を ls と比較しなさい。

詳しくは、man tree を見なさい。

★練習問題(416) Finderによるホーム・ディレクトリの観察

Finder でホーム・ディレクトリを開きなさい。そして、ls の結果と比較しな さい。
  1. Dock で Finder をクリック
    Finderのアイコン
  2. 一番上のメニューバーにある「移動」メニューから「ホーム」を選ぶ。

■課題4 ファイルとディレクトリの木構造、ファイルの属性、ファイル名置換、ファイルを扱うコマンド、Emacsカット&ペースト、コピー&ペースト

次のファイルを自分のホーム・ディレクトリ等にコピーしなさい。 そして、そのファイルの指示に従い、内容を埋めなさい。エディタとしては、 今日の課題では、必ず Emacs を使いなさい。
$ ls [←]
(literacy-a4.txtが存在することを確認する)
$ emacs literacy-a4.txt [←]

作成したファイルを、 レポート提出ページから提出しなさい。


Last updated: 2018/04/30 15:18:21
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>