25.6.3. ファイルの操作
ここでは、コマンドライン上からのファイルの操作方法について説明します。
- ファイルやディレクトリの複製・移動・削除(
cp
,mv
,rm
コマンド) - ファイル内容の表示(
cat
,less
,lv
コマンド) - ファイルの作成(
cat
,touch
コマンド)
ファイルやディレクトリの複製・移動・削除の操作については、Finder では 11.4. ファイルの操作 と対応します。
ファイルやディレクトリの複製 #
ファイルやディレクトリの複製を行うには、cp
コマンドを利用します。
例えば、カレントディレクトリに foo.txt が存在する状況で
foo.txt
foo.txt を複製した bar.txt というファイルを作ります。
bar.txt foo.txt
また次の例では、foo.txt を親ディレクトリに同じ名前でコピーしています。
注意 — コピー先に既に同じ名前のファイルがあった場合。新しいファイルで上書きされ、元の内容は永久に抹消されます。復活させる方法はありません。
なお、-i
オプションをつけることで、本当に上書きしてよいか確認することができます。
overwrite ../foo.txt? (y/n [n])
上書きするか? と聞かれました。自信がある場合は y
をそうでない場合は n
を入力します。
y/n [n]
のような表記は、「yes ならy
を no ならn
を入力し、 せよ。なお文字を入力せずに した場合はn
が入力されたと扱う」と読みます。
cp
コマンドは、ディレクトリの複製にも使用することができます。ただし、その際には -r
オプション**をつける必要があります。
cp: piyo/fuga is a directory (not copied).
オプション無しの場合はエラーになりました。
さて、ここで 2 行目の実行結果について見てみると、次のようになります:
- コピー先の
/tmp が存在していなければ、コピー元の piyo/fuga というディレクトリが、/tmp という名前でコピーされます。 - もし ~/tmp が既に存在していれば、その中に fuga という(コピー元と同じ名前の)ディレクトリが作られます。
次の例は、piyo/fuga というディレクトリをカレントディレクトリにコピーします。カレントディレクトリは存在しているので、fuga というディレクトリがカレントディレクトリの真下にできることになります。
bar.txt foo.txt fuga hwb piyo
なお、ここで「cp piyo/fuga/ .」とコピー元の最後に「/」をつけると、教育用計算機システムでは fuga ディレクトリの中身がコピーされることになりますので、気をつけてください。
/home/hwb/exercise/hanako/occupation.txt
を自分のデスクトップにコピーしてみましょう。cp /home/hwb/exercise/hanako/occupation.txt ~/Desktop
とします。デスクトップに現れたコピーされたファイルのアイコンをダブルクリックし、そこに書いてある花子さんの職業を見てみて下さい。花子さんの職業は何でしょう。必要がなければ、練習が終わったら、コピーしたファイルを削除しておきましょう。
ファイルやディレクトリの移動 #
ファイルやディレクトリの移動には、cp
コマンドの代わりに mv
コマンドを利用します。使い方はほぼ同じです。
移動の場合は、ディレクトリの移動も -r
オプションなしに可能です。
移動先がファイルの場合、
cp
コマンドと同じように、移動先に既に同じ名前のファイルがあった場合は移動したファイルで上書きされ、元の内容は永久に抹消されます。復活させる方法はありません。
-i
オプションをつけることで、本当に上書きしてよいか確認することができます。
例えば、次の2つめのコマンドはカレントディレクトリにある foo.txt を(カレントディレクトリの)baz.txt に移動させます。これは名前の変更を行っていることに相当します。
bar.txt foo.txt hwb piyo
bar.txt baz.txt hwb piyo
また、次の例は、bar.txt を piyo というディレクトリに移動させます。
baz.txt hwb piyo
bar.txt fuga
cp のときと同様に、ディレクトリを移動する次のコマンド
は、次のように動作します。
- 移動先の
/tmp が存在していなければ、移動元の piyo/fuga というディレクトリが、/tmp という場所に名前・位置になります。 - もし ~/tmp が既に存在していれば、その中に fuga という(移動元と同じ名前の)ディレクトリが作られます。
ファイル・ディレクトリの削除 #
ファイルやディレクトリの削除には、rm
コマンドを用います。ディレクトリを削除するには、-r
オプションを指定する必要があります。
削除したファイルやディレクトリを復活させる方法はありません。日常的にはFinder のゴミ箱へ移動を使う方が無難です。
-i
オプションをつけることで、本当に削除してよいか確認することができます。
なお、ディレクトリを-r
オプションなしで削除しようとすると、例えば
rm: piyo: is a directory
のようにエラーが表示されます。実際の削除は行われません。
ファイル内容の表示 #
ファイルの中には、テキストファイルという(人間が読める)文字データだけが書かれたファイルがあります。代表例としては、シェルスクリプト(
25.3. シェルスクリプト
)や、TeX ソース(
27. LaTeX
)などがあります。テキストファイルの内容は、cat
, less
, lv
といったコマンドで表示させることができます。ここでは、これらのコマンドの使用例を解説します。
cat
コマンドは、ファイルの中身を一挙に表示させるコマンドです。引数に表示させたいファイル名を指定します。その性質上、1 画面に収まらないような長いファイルには不向きです。下の例は、memo.txt というファイルの中身を画面に一挙に表示させます。
1 画面を超えるような長いテキストファイルを読むには、less
, lv
といったコマンドを使います。これらは 1 画面単位で内容を表示するプログラムで、ページャと総称されます。
less コマンド #
less
コマンドは、cat
コマンドと同じように、表示させたいファイルの名前を後ろに指定して使います。
1 画面分を表示したところで一旦停止します。
キーを押すと、1 画面分スクロールして続きを見ることができます。上下の矢印キーを使って、1 行ずつ見る範囲を変えることもできます。終了するには q
キーを押します。
less 起動中に h
キーを押すか、
として起動すると、キー操作のヘルプが表示されます。
代表的な操作方法を下にまとめます。一つの操作に対し、複数の方法が用意されている場合が多いです。
操作 | キー |
---|---|
less の終了 | q , Q , Z , Z など |
1画面進む | f |
1画面戻る | b |
半画面進む | d |
半画面戻る | u |
1行だけ進む | e , j , カーソル下 など |
1行だけ戻る | y , カーソル上 など |
先頭へ | < |
末尾へ | > |
lv コマンド #
lv
コマンドは、ほぼ less
コマンドと使い勝手は同じです。
lv
コマンドでは文字コード(
12.4. 人のための文字
)の自動判別がなされる、日本語のテキストファイルを読むには lv
コマンドの方が便利かもしれません。一方、less
コマンドにだけあって lv
コマンドにはない機能もあります。
/home/hwb/exercise/taro/interest.txt
というファイルには、太郎くんの興味があるものが書いています。彼の興味がある科目は何でしょうか。
cat
コマンドなどを用いて調べてみましょう。ファイルの作成 #
通常、テキストファイルを作るには mi
などのエディタをを用います。
1, 2行のテキストファイルなら、コマンドラインから直接ファイルを作ることもできます。
echo
コマンドはあとに指定された文字列をそのまま出力します。
これとリダイレクションを組み合わせ、>
に続けてファイル名を指定すると、echo
が出力する文字列を内容として持つファイルを作成することができます。
(
25.5. パイプとリダイレクション
)
次の例は addr.txt
というファイルを作ります。
コマンドラインを利用してファイルを作成する場合、>
を使ったという方法を使うことが多いです。大雑把にいうと、コマンドの出力結果を画面ではなくファイルに変更することでファイルを作る、ということになります。
ファイルが既に存在する場合>
は削除と上書きとして動作します。>>
と不等号を二つ重ねると1行追加になります。
cat
コマンドを使って複数行のファイルを作ることもできます。例えば、memo.txt を作るには次のようにします。
ここで、カーソルは行頭に移動し入力待ちの状態になります。この状態でどんどん新しい文章を入力していきます。
HumptyDumpty sat on a wall.
HumptyDumpty had a great fall.
入力を終わりにするには、最後の行を入力し終わった後(行末で まで押した後)で d *を押します。
また touch
コマンドを使うと、「空ファイルを作る」ことができます。
ファイルがすでに存在する場合は更新時刻が現在時刻に更新されます(ファイルの内容は変わらない)。