コマンドによるファイル操作

ここまで、ファイル操作ファイルシステムコマンド ではそれぞれ以下のことを示して、システムの内部構造について説明しました。

ここではもう一歩踏み込んで、コマンドを用いたファイルの操作を通して、更に Mac の内部構造の理解を進めます。

準備

全体構造(再掲)

ファイルシステム 」でシステム全体のストレージの管理構造が以下のようになっていることを示しました。(赤矢印のフォルダはあなたのユーザ名、その右下の書類フォルダ以下はあなたが置いた各種ファイルになっているでしょう。)

image-20240102181918764

これから、あなたの「書類」フォルダから出発して、ファイルの階層構造をコマンドで確認・操作します。

ZIPファイルの取得

以下のリンクから ZIP (圧縮)ファイルを取得して「ダウンロード」フォルダに保存してください。

dirReport.zip

すると以下のようなウィンドウが表示されるでしょう。

image-20240305194015305

「許可」をクリックして先に進むと、ダウンロードフォルダに保存されるアニメーションが表示されるでしょう。どこに保存したか分からない場合は Safari ウィンドウの右上にあるダウンロードアイコンをクリックすると、以下のようにダウンロードしたファイルが表示されます。そこの右にある虫メガネアイコンをクリックするとダウンロードフォルダが表示されます。

image-20240305194255539

ここで dirReport フォルダが選択されている状態になっています。

image-20240305194437607

注意すべきは、ZIP ファイルをダウンロードしたのに、Mac は自動的に展開して dirReport フォルダを作り、元の ZIP ファイル( dReport.zip )をゴミ箱に入れてしまうことです。もし ZIP ファイルが欲しい場合はゴミ箱から取り出すと良いです。さてここで見えている dirReport フォルダを「書類」フォルダに移動させてください。

Finder ウィンドウをカラム表示に設定して dirReport フォルダを選択すると以下のように見える状態を作ってください。

image-20240114144619487

ダウンロードフォルダの使い方
書類フォルダに移動させず、ダウンロードフォルダで作業し続けることも可能ですが避けましょう。ダウンロードフォルダはあれこれいろんなファイルが混じってしまうので、一時的な置き場所として使うことを勧めます。

ファイル配置・フォルダ構造の確認

さて dirReport の下にあるフォルダ(「 subdir 」など)を選択するなどして、フォルダの内部が下図のような構造になっていることを把握してください。

image-20240114151308815

ターミナルの起動と cd 操作

その上でターミナルを起動して、コマンドプロンプトに「 cd Documents 」と入力して Enter キーを押して下さい。その後でターミナルウィンドウの赤矢印部分を見て下さい。ここが「書類」となっているでしょうか。

image-20240103130238608

もしそうなっていないようなら、恐らくあなたはコマンドの打ち間違いをしています。良く見直して下さい。下に(複数形の s を忘れて)Document としてしまった場合を示します。ウィンドウ最上部の表示は「書類」ではなく(恐らくはあなたのユーザ名)、cd コマンドのエラーメッセージとして “no such file or directory: Document” (そんなファイルあるいはディレクトリはありません:Document )と言われています。「 cd Dcouments 」と正しい操作をやり直してください。

image-20240103130537114

ここまで準備ができれば次に進んで下さい。下図のように Finder のファイル表示とターミナルが両方見えるようにして、同時に見比べながら作業すると理解しやすいと思います。

image-20240103131225840

コマンドによるファイルの操作

コマンド一覧

これから使うコマンドの一覧を先に出しておきます。

名前 機能 例(下線部分は実際のファイル名などを入れる)
ls list の略。いま注目しているディレクトリにあるファイルの一覧を表示する。 % ls
cd change directory の略。注目するディレクトリを変更する。 % cd directory
% cd ..
cat ファイルの中身を出力する。本来は catenate の略(ファイルを連結する、くらいの意味)だがそれが実験できるのはもう少し先。 % cat file
% cat file1 file2
pwd print working directory の略。現在注目しているディレクトリのパスを表示する。 % pwd
mkdir make directory の略。ディレクトリを作成する。 % mkdir directory
rmdir remove directory の略。ディレクトリを削除する。 % rmdir directory
cp copy の略。ファイルをコピーする。 % cp file1 file2
mv move の略。ファイルを異なるディレクトリに移動する。同じディレクトリ内での移動は名前の変更に相当する。 % mv file1 directory
% mv file1 file2
rm remove の略。ファイルを削除する。 % rm file

ls で一覧表示

まず「 ls 」コマンドでファイルの一覧を表示させます。コマンドプロンプトに「 ls 」と打ち込んで Enter キーを押して下さい。こうしたコマンド実行操作を、これ以降は単に「 ls コマンドを実行する」と記述します。

以下のように、先ほど作成した「 dirReport 」というフォルダが見えている事を確認してください。

image-20240103130033654

Finder での書類フォルダの中を表示させれば、dirReport フォルダの存在など、ls コマンドの結果と同じファイル群の一覧が表示されていることが確認できるでしょう。

image-20240116174946666

並び順が違う?
並び順が違っていたり、ファイル名の後ろに「 .xlsx 」といったもの(拡張子と呼びます)が付いていたり、幾らか気になる事があるかも知れませんが、このことについてはあとで説明します。ひとまずは置いて先に進みましょう。

cd でディレクトリ移動

ここでターミナルで「 cd dirRerpot 」として Enter キーを押して下さい。その後、再び ls コマンドを実行すると、今度は先ほどとは異なるファイルの一覧が表示されます。

yasuda@Lily dirReport % ls
sample1.txt subdir            <<< 「dirReport」フォルダ以下にあるものがリストとして表示されている
yasuda@Lily dirReport % 

これが dirReporrt 以下のファイル群であることがわかるでしょうか。Finder で dirReport フォルダを選択すると、下図のようにそこに同じファイルやフォルダがあることが確認できるでしょう。

image-20240114155810460

つまり ls は「いま注目しているフォルダの位置から見えるファイルのリストを出す」コマンドで、cd は「注目しているフォルダの位置を変更する」コマンドなのです。cd は Change Directory の略です。

Directory とフォルダ
用語としての両者の関係については「ファイルシステム 」の節で説明しました。Finder 操作では「フォルダ」と呼ぶ場合が多いですが、コマンド操作では「ディレクトリ」と呼ぶ場合が多いです。これも後述します。

cat でファイルの中身を出力

cat コマンドでは「 cat file 」と書く事で、指定した file の中身をターミナルに出力(表示)させることができます。(下線は「その時に指定すべき文字列」を入れよ、という意味です)

yasuda@Lily dirReport % cat sample1.txt
All work and no play makes Jack a dull boy.
yasuda@Lily dirReport %

sample1.txt ファイルをダブルクリックするなりして「テキストエディット」アプリケーションで開いて中身を確認すると、同じ内容(英文テキストで一行だけ)が表示されるでしょう。

image-20240121221402516

cd でさらに下のディレクトリに移動

次に「 cd subdir 」として、更に下のフォルダに注目点を移したうえで、もう一度 ls コマンドを実行してください。

yasuda@Lily dirReport % cd subdir 
yasuda@Lily subdir % ls
list.txt    subsubdir            <<< 「subdir」ディレクトリ以下にあるものがリストとして表示されている
yasuda@Lily subdir %  

そしてまた「 cd subsubdir 」としてディレクトリ移動し、そこにあるファイル一覧を表示させてください。

yasuda@Lily subdir % cd subsubdir 
yasuda@Lily subsubdir % ls
cal2023.txt images
yasuda@Lily subsubdir % 

「 cal2023.txt 」ファイルの中身も cat コマンドで表示させてみましょう。

さてここまでの「注目点の変更と、それ以下のファイル群の表示」操作について図示してみます。まず最初に dirReport フォルダに注目点をセットし(1)、ls コマンドはそこにあるファイルのリストを出しました(2)。次に注目点を一段下の subdir に移して(3)ファイルのリストを表示させました(4)。最後に注目点を更に一段下の subsubdir に移して(5)ファイルのリストを表示させました(6)。

image-20240114163930534

cd .. で一つ上のディレクトリに移動

cd コマンドでは「 cd directory 」と書く事で、(そこに存在する)指定した directory に移動しました。

つまりこれまでは「下に掘っていく」方向での操作でしたが、「 cd .. 」とすることで、一つ上のディレクトリに注目点を移動できます。つまり「 .. (ピリオド二つ)」表記が「一つ上」のディレクトリを意味します。

yasuda@Lily subsubdir % cd ..   <<< 一段上に移動(上図 5 -> 3 )
yasuda@Lily subdir % ls
list.txt    subsubdir             <<< (上図 4 が出力されている)
yasuda@Lily subdir % cd ..      <<< さらに一段上に移動(上図 3 -> 1 )
yasuda@Lily dirReport % ls
sample1.txt subdir              <<< (上図 2 が出力されている)
yasuda@Lily dirReport % 

pwd で現在のディレクトリを知る

pwd コマンドで「現在注目しているディレクトリ」を表示させることができます。pwd は Print Working Directory の意味です。

yasuda@Lily dirReport % pwd                  <<< コマンド投入
/Users/yasuda/Documents/dirReport            <<< 現在はここ
yasuda@Lily dirReport % ls 
sample1.txt subdir
yasuda@Lily dirReport %

見ての通り「 / (スラッシュ)」でがディレクトリ表示の区切り文字になっており、これで階層構造を表示しています。

作業ディレクトリ・カレントディレクトリ

pwd コマンドに出てきたように、この「現在注目しているディレクトリ」のことを「作業ディレクトリ」「カレント (Current) ディレクトリ」と呼びます。

「作業ディレクトリを answers ディレクトリに移してください」とか「カレントディレクトリは answers ディレクトリになっていますか?」といった表現をします。

ホームディレクトリ

このドキュメントの冒頭に、ストレージ管理構造の全体像を示しました。そこには「ユーザ」フォルダがあり、そこにあなたのユーザ名(例では yasuda )を名前とするフォルダがあったでしょう。

image-20240121183716050

Mac は、このフォルダ(ディレクトリ)以下に各ユーザのファイルが置かれることを想定しています。そのためここを「ホームディレクトリ」と呼んでいます。ターミナルを起動した直後は、カレントディレクトリがホームディレクトリになっています。

cd 」、つまり引数(ひきすう)なしで cd コマンドを実行すると、それまでどのディレクトリにいたとしても、ホームディレクトリに移動することができます。

ファイルのパス (Path)

pwd コマンドの結果は、/Users/yasuda/Documents/ のようになっていました。このディレクトリやファイル名を / 記号で連結した表記を「パス(Path、経路といった意味)」と呼びます。つまり先ほどの「 sample1.txt 」ファイルのパスは「 /Users/yasuda/Documents/dirReport/sample1.txt 」です。「(木構造の)ルートから、これこれをたどって目的のファイルにたどり着く」イメージを持って下さい。

次に一つ下の subdir ディレクトリに移動したり、また戻ったりした際の pwd コマンドの出力を示します。パス名(ディレクトリパス)が操作に合わせて伸び縮みしているのが分かるでしょう。

yasuda@Lily dirReport % pwd                  <<< いまどこ?
/Users/yasuda/Documents/dirReport            <<< 現在はここ
yasuda@Lily dirReport % cd subdir            <<< すぐ下の subdir に cd (Change Directory)
yasuda@Lily subdir % pwd                     <<< いまどこ?
/Users/yasuda/Documents/dirReport/subdir     <<< /subdir が増えた
yasuda@Lily subdir % cd ..                   <<< 一つ上のディレクトリに移動
yasuda@Lily dirReport % pwd                  <<< いまどこ?
/Users/yasuda/Documents/dirReport            <<< 増えた /subdir がなくなった(元に戻った)
yasuda@Lily dirReport % 

絶対パス

ファイルのパスが「 /Users/yasuda/Documents/dirReport/sample1.txt 」だった場合を例に、その書き方を少し詳しく見ます。

image-20240303193453872

この、先頭が / で始まる、つまりルートディレクトリを含めたパスを「絶対パス」と呼びます。状況にかかわらずファイルの位置を特定する、といった意味です。

相対パス

先頭が / で始まらないパスの表記法もあります。これを相対パス、つまり「現在の作業ディレクトリ(カレントディレクトリ)からの相対的なファイルの位置」を示す書き方です。

例えば (1) の位置、つまり dirReport ディレクトリに cd した状態(現在の作業ディレクトリが dirReport)だったとします。

image-20240303232032740

この状態で、以下のような操作結果になることが分かるでしょうか。

  1. pwd コマンドの結果は /Users/yasuda/Documents/dirReport になる

  2. この状態で、

  3. ここで「 cd subdir 」として (2) の位置に作業ディレクトリを移動する

パッと納得がいかない場合は実際に試してみると良いです。

「 .. 」は一つ上のディレクトリを指す

相対パス記述の中で、一つ上のディレクトリを指す「 .. 」を用いると以下のようなこともできます。

  1. 作業ディレクトリが (2) の状態から

「 . 」は現在の作業ディレクトリを指す

これは余り使い途がないように感じられるでしょうが、「.」を用いて、以下のような書き方もできることを知っておきましょう。

  1. 作業ディレクトリが (2) の状態から