14.4.3 ファイルの操作

ここでは,コマンドライン上からのファイルの操作方法について説明します.より具体的には,以下について説明します.

  • ファイルやディレクトリの複製・移動・削除(cp, mv, rm コマンド)
  • ファイル内容の表示(cat, less, lv コマンド)
  • ファイルの作成(cat, touch コマンド)

ファイルやディレクトリの複製・移動・削除の操作については,Finder では hwb14.3.3 ファイルの操作 と対応します.

ファイルやディレクトリの複製

ファイルやディレクトリの複製を行うには,cp コマンドを利用します.

cp (コピー元) (コピー先)return2

例えば,次の 2 行目の入力はカレントディレクトリにある foo.txt を複製した bar.txt というファイルを作ります.
lsreturn2
foo.txt hwb     piyo
cp foo.txt bar.txtreturn2
lsreturn2
bar.txt foo.txt hwb     piyo

また次の例では,foo.txt を親ディレクトリに同じ名前でコピーしています.
cp foo.txt ..return2
ls ..return2
Desktop        ECC            Movies          Public          tex Documents       Library         Music           Sites           windows Downloads       Mail            Pictures        foo.txt

コピー先に既に同じ名前のファイルがあった場合.コピーしたファイルで上書きされ,元の内容は永久に抹消されます.復活させる方法はありません.なお,-i オプションをつけることで,本当に上書きしてよいか確認することができます.
cp -i foo.txt ..return2
overwrite ../foo.txt? (y/n [n]) y enter
cp -i foo.txt ..return2
overwrite ../foo.txt? (y/n [n]) n enter not overwritten

cp コマンドは,ディレクトリの複製にも使用することができます.ただし,その際には -r オプションをつける必要があります.次の例の 1 行目は,-r オプションをつけないとエラーが出ることを示しています.
cp piyo/fuga ~/tmpreturn2
cp: piyo/fuga is a directory (not copied).
cp piyo/fuga ~/tmpreturn2

さて,ここで 2 行目の実行結果について見てみると,次のようになります:

  • コピー先の ~/tmp が存在していなければ,コピー元の piyo/fuga というディレクトリが,~/tmp という名前でコピーされます.
  • もし  ~/tmp が既に存在していれば,その中に fuga という(コピー元と同じ名前の)ディレクトリが作られます.

次の例は,piyo/fuga というディレクトリをカレントディレクトリにコピーします.カレントディレクトリは存在しているので,fuga というディレクトリがカレントディレクトリの真下にできることになります.

cp -r piyo/fuga .return2
lsreturn2
bar.txt foo.txt fuga    hwb piyo

なお,ここで「cp piyo/fuga/ .」とコピー元の最後に「/」をつけると,教育用計算機システムでは fuga ディレクトリの中身がコピーされることになりますので,気をつけてください.
exercise教育用計算機システムの Mac 環境において,/mnt2/exercise/hanako/occupation.txt を自分のデスクトップにコピーしてみましょう.
cp /mnt2/exercise/hanako/occupation.txt ~/Desktopreturn2

デスクトップに現れたコピーされたファイルのアイコンをダブルクリックし,そこに書いてある花子さんの職業を見てみて下さい.花子さんの職業は何でしょう.(1)
練習が終わったら,コピーしたファイルを削除しておくと便利です.

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

ファイルやディレクトリの移動には, cp コマンドの代わりに mv コマンドを利用します.使い方はほぼ同じで,ディレクトリの移動の際に -r オプションがいらなくなっただけです.

mv (移動元) (移動先)return2

cp コマンドと同じように,移動先に既に同じ名前のファイルがあった場合.移動したファイルで上書きされ,元の内容は永久に抹消されます.復活させる方法はありません.-i オプションをつけることで,本当に上書きしてよいか確認することができます.
例えば,次の2行めの入力はカレントディレクトリにある foo.txt を(カレントディレクトリの)baz.txt に移動させます.これは名前の変更を行っていることに相当します.
lsreturn2
bar.txt foo.txt hwb     piyo
mv foo.txt baz.txtreturn2
lsreturn2
bar.txt baz.txt hwb     piyo

また,次の例は,bar.txt を piyo というディレクトリに移動させます.
mv bar.txt piyo/return2
lsreturn2
baz.txt hwb     piyo
ls piyoreturn2
bar.txt fuga

cp のときと同様に,ディレクトリを移動する次のコマンド
mv piyo/fuga ~/tmpreturn2

の実行結果について見てみると,次のようになります.

  • 移動先の ~/tmp が存在していなければ,移動元の piyo/fuga というディレクトリが,~/tmp という場所に名前・位置になります.
  • もし ~/tmp が既に存在していれば,その中に fuga という(移動元と同じ名前の)ディレクトリが作られます.

ファイル・ディレクトリの削除

ファイルやディレクトリの削除には,rm コマンドを用います.ディレクトリを削除するには,-r オプションを指定する必要があります.

rm (ファイル名)return2
rm -r (ディレクトリ名)return2

削除したファイルやディレクトリを復活させる方法はありません.-i オプションをつけることで,本当に削除してよいか確認することができます.
なお,ディレクトリを削除しようとするときに,-r オプションなしで rm コマンドを実行させると,例えば
rm piyoreturn2
rm: piyo: is a directory

のようなエラーが表示されます.実際の削除は行われません.

ファイル内容の表示

ファイルの中には,テキストファイルという(人間が読める)文字データだけが書かれたファイルがあります.代表例としては,シェルスクリプト(hwb25.4 シェルスクリプト)や,TeX ソース(hwb27. LaTeX)などがあります.テキストファイルの内容は,cat, less, lv といったコマンドで表示させることができます.ここでは,これらのコマンドの使用例を解説します.
cat コマンドは,ファイルの中身を一挙に表示させるコマンドです.引数に表示させたいファイル名を指定します.その性質上,1 画面に収まらないような長いファイルには不向きです.下の例は,memo.txt というファイルの中身を画面に一挙に表示させます.

cat memo.txtreturn2

1 画面を超えるような長いテキストファイルを読むには,less, lv といったコマンドを使います.これらは 1 画面単位で内容を表示するプログラムで,ページャと総称されます.

less コマンド

less コマンドは,cat コマンドと同じように,表示させたいファイルの名前を後ろに指定して使います.

less memo.txtreturn2

1 画面分を表示すると一旦停止します.space キーを押すと,1 画面分スクロールして続きを見ることができます.上下の矢印キーを使って,1 行ずつ見る範囲を変えることもできます.終了するには q キーを押します.
less 起動中に h キーを押すか,
less --helpreturn2

としてコマンドラインから起動すると,キー操作のヘルプが表示されます.
代表的な操作方法を下にまとめます.一つの操作に対し,複数の方法が用意されている場合が多いです.

操作キー
less の終了q, Q, ZZ など
1画面進むspace, f, f, v
1画面戻るb, b, v
半画面進むd, d
半画面戻るu, u
1行だけ進むenter, e, j, n など
1行だけ戻るy, k, p など

lv コマンド

lv コマンドは,ほぼ less コマンドと使い勝手は変わりません.
しかし,lv コマンドでは文字コード(hwb18.4 文字の符号化)の自動判別ができたりするので,日本語のテキストファイルを読むには lv コマンドの方が便利かもしれません.一方,less コマンドにだけあって lv コマンドにはない機能もあります.

exercise/mnt2/exercise/taro/interest.txtというファイルには,太郎くんの興味があるものが書いています.彼の興味がある科目は何でしょうか.catコマンドなどを用いて調べてみましょう.(1)

ファイルの作成

ファイルを作るには mi などのアプリケーションを用いたり,他の場所からのコピーやダウンロードをすることが多いですが,コマンドラインから直接ファイルを作ることもできます.
コマンドラインを利用してファイルを作成する場合,「>」を使ったリダイレクション(詳しくはhwb15.5 パイプとリダイレクションを参照)という方法を使うことが多いです.大雑把にいうと,コマンドの出力結果を画面ではなくファイルに変更することでファイルを作る,ということになります.
例えば,(echo コマンドはあとに指定された文字列をそのまま出力させるだけなので)次で addr.txt というファイルを作ることができます.

echo 3-8-1 Komaba Meguroku Tokyo > addr.txtreturn2

cat コマンドを使って複数行のファイルを作ることもできます.例えば,memo.txt を作るには次のようにします.
cat > memo.txtreturn2
point

ここで,カーソルは行頭に移動し入力待ちの状態になります.この状態でどんどん新しい文章を入力していきます.
cat > memo.txtreturn2
HumptyDumpty sat on a wall. enter HumptyDumpty had a great fall. enter

入力を終わりにするには,最後の行を入力し終わった後(enterを押した後)で dを押します.
また touch コマンドを使うと,「空ファイルを作る」ことができます.空のファイルをつくるなんて意味があるのかと思われるかもしれませんが,「この作業はいついつに終わった」ことを空ファイルを作ることで記録することもが行われたりしています.touch コマンドは,ただ
touch hoge.txtreturn2

のように引数に作りたいファイル名を与えればよく,リダイレクションは不要です.また,すでに存在するファイル名を touch コマンドに与えることもでき,そうした場合は更新時刻だけが現在時刻に変わる(ファイルの内容は変わらない)ことになります.