みんなが知りたいLinuxコマンド「ファイル 検索」と「ファイル 削除」|ざっくりLinux!- 71

端末操作

前回も書いたが、「Linux」で検索して出てくる第二検索ワードは、「ファイル 検索」と「ファイル 削除」だ。

現在、これほどGUIが進んでいるのに、なぜファイル検索と削除に、コマンドを使いたがるのだろうか?

ざっくり派の筆者には、不可解で仕方がない。

だが、みんなが知りたいのだから、このコマンドが何なのか、調べてみた。

ファイルとディレクトリの関係

今回の内容は、Linux初級資格の「Linux Essentials」ドキュメントのうち、課題2.3、2.4、3.2を参考に、「ざっくり」と調べてみたことを書いていく。

「ファイル 検索」と「ファイル 削除」の前に知っておきたいことは、ファイルとディレクトリの関係だ。

どのOSのパソコンも、ファイルとディレクトリで構成されている。

ディレクトリとは、ファイルを格納するフォルダとほぼ同じこと。GUIではフォルダといい、CUIではディレクトリという。WindowsやMacでは、フォルダって言ってるね。

そしてファイルは、必ずどこかのディレクトリに格納されているということだ。

試しに端末を開いて、

kazy@kazy-Thinkpad-X240:~$ tree

と打ってみると、端末上にディレクトリ構成が表示される。もし、treeがないと表示されたら、

sudo apt install tree

でインストールする。

実際に表示されるディレクトリ構成は以下のようになる。各ディレクトリ内のファイル名は省略しているが、各ディレクトリの下にツリー状に格納されたファイル名が表示されるはずだ。

kazy@kazy-Thinkpad-X240:~$ tree
|
|--MEGA(クラウドストレージ「MEGA」へのアクセスディレクトリ)
|--VirtualBox VMs(VirtualBox関連)
|--ダウンロード
|--テンプレート
|--デスクトップ
|--ドキュメント
|--ビデオ
|--ピクチャ
|--ミュージック
|--公開

これを、ファイルマネージャで表示したものが、以下画像。

ファイルマネージャ

端末上に表示されたものは、各ディレクトリ名と一致している。

Linuxで端末操作をするにあたり、多くの人がディレクトリ名は英語にしておいた方が良い」と指摘しているが、筆者はそうは思わない。

Linux Essentialsにも書いてある通り、多くのディストリビューションでは、アルファベットの大文字と小文字、数字、スペース、特殊文字のほか、日本語(全角文字)も使用可能としている。

実際、OSの日本語環境を整えておけば、端末も日本語で表示されるべきもの(ディレクトリ名やファイル名など)は、日本語で表示されるからだ。

ディレクトリ間の移動は「cd」表示は「ls」

次に、見たいディレクトリへの移動。

まず、現在どのディレクトリにいるかを知るには、端末を開き、

kazy@kazy-Thinkpad-X240:~$

の、「~(チルダという)」に注目する。

「~」は、現在「ホームディレクトリ」の位置であることを意味している。

筆者のPCのホームディレクトリには、上述の通り10のディレクトリがある。ここから、端末で「ドキュメント」に移動してみる。

移動には、「cd(change directory)」を使う。

kazy@kazy-Thinkpad-X240:~$ cd ドキュメント

と入力すると、

kazy@kazy-Thinkpad-X240:~/ドキュメント$

と変わる。「:」と「$」の間は、先ほどまで「~」だけだったが、移動したことによって「~/ドキュメント」になった。ホームディレクトリ内のドキュメントに移動したということだ。

前回も書いたが、この「~/ドキュメント」部分は、現在いるディレクトリ名、つまり場所を示している。ホームディレクトリの上の階層、ファイルシステムは「/」で表示される。

オプションとして、「pwd(present working directory)」も書いておく。これは、絶対パスを表示させるコマンドで、ファイルシステムの最上階層から現在いるディレクトリまでの全ての要素、つまり「道のり」を示す。

上記の通り、ドキュメントに移動したところで「pwd」と入力すると、

kazy@kazy-Thinkpad-X240:~/ドキュメント$ pwd
/home/kazy/ドキュメント

と表示される。ドキュメントはファイルシステムの中の、ホームディレクトリ内ということ。

ドキュメントディレクトリに移動したところで、どんなファイルがあるかを確認するには、「ls(list segments)」を使う。

kazy@kazy-Thinkpad-X240:~/ドキュメント$ ls
MuseScore3 Test

表示は色分けされており、青色のものがフォルダ、黒はファイルを示している(ディストリビューションによって違うので確認を)。これをファイルマネージャで見ると、以下の通り。

ファイルマネージャ2

GUIでも、「MuseScore3」というフォルダと、「Test」というテキストファイルが存在することが確認できた。

移動の「cd(change directory)」と表示の「ls(list segments)」は、ファイル検索や削除に関わってくるコマンドなので、覚えておくといいと思う。

ファイル検索は「find」

やっと今回のテーマ、「ファイル検索」に辿り着いた。

ファイルを検索するコマンドは、ズバリ「find」。

ファイル名がわかっているときの検索

そもそも、ファイル名がわかっていれば、検索する必要はなさそうだが、こんな単純な検索で「find」コマンドを使う場面はないだろう。おそらく、何がしか操作をする際に必要な特定ファイルを検索する場合だろうな…

このコマンドには、さまざまなオプションがある。

ファイル名から、そのファイルのある場所を検索するには、「find」とファイル名の間に「-name」を挿入する。

kazy@kazy-Thinkpad-X240:~$ find -name Test

実際は、ドキュメントフォルダ内に「Test」というテキストファイルを保存してあるので、上記入力の結果は、

kazy@kazy-Thinkpad-X240:~$ find -name Test
./ドキュメント /Test

と表示された。

あまりオプションを羅列すると、それだけで混乱しそうなので、とりあえずファイル名検索の「-name」だけ覚えておこう。

いろいろなオプションを知りたいときは、とにかくググること。「findコマンド オプション」で、いくらでも出てくる。

あいまい検索

「あのファイル、どこに保存したっけ…、えっと、ファイル名は…?」

保存したファイル名は「あいまい」で、あるアプリを使って保存したことだけは覚えている、そんなことはしょっちゅうある。

そんな時には、あいまい検索(正式名称ではないが、筆者がこう呼んでいる)をする。

例えば、特殊なアプリ「MuseScore」という、楽譜作成アプリのファイルを探すとしよう。このファイル拡張子は「.mscz」と、かなり特殊だ。この場合、

kazy@kazy-Thinkpad-X240:~$ find -name "*.mscz"

というように、わからない部分(ファイル名)を*(アスタリスク)に置き替え、拡張子を含めたあいまいなファイル名全体を、「” “」で囲んで検索するというもの。

実際に検索した結果の端末画面は、以下の通り。

端末でfindコマンド

この「あいまい検索」で使うアスタリスクは、何かと便利だ。

極端な例として、「ファイル名も拡張子もわからないが、ディレクトリ名だけはわかる」という場合。

ファイル名と拡張子の間の「ドット(.)」だけで検索するには、わからないというしるしのアスタリスクを前後につけて、

kazy@kazy-Thinkpad-X240:~$ find -name "*.*"

と入力すれば、ドットを含むファイル名がずらっと表示される。

さすがに、こんな検索の仕方はないだろうから、通常はファイル名、もしくは拡張子名で検索するんだろう。

ファイル削除は「rm」ディレクトリ削除は「rmdir」

最後は、削除に関するコマンド。

ファイルを削除する「rm(remove)」は、以下のように使う。

kazy@kazy-Thinkpad-X240:~$ rm ファイル名(複数ファイルを削除する場合はファイル名を羅列する)

例えば、不要なファイルのディレクトリがわかっている場合は、「cd」コマンドでそのディレクトリに移動してから行えば、間違って他のファイルを削除するという心配はない。さらに、念のためディレクトリに移動したら、「ls」コマンドでそのファイルの存在を確認するもよい。

また、ディレクトリを削除するには、「rmdir(remove directory)」を使う。使い方は、「rm」と同じだ。

しかし、「rmdir」はデフォルトでは空のディレクトリしか削除できない。なので、中身のファイルは、先に「rm」で削除しておかなければいけない。

ファイルマネージャの「ゴミ箱に移動」とは違い、ファイルもディレクトリも、一度削除したら復活できないので、注意して行う。

まとめ

今回は、ファイルシステム内の

  • 移動コマンド:「cd(change directory)」
  • 表示コマンド:「ls(list segments)」
  • 移動コマンド:「cd(change directory)」
  • 表示コマンド:「ls(list segments)」
  • 検索コマンド:「find」
  • ファイル削除コマンド:「rm(remove)」
  • ディレクトリ削除コマンド:「rmdir(remove directory)」

について書いた。

本当は「ファイル検索」と「ファイル削除」だけのつもりだったが、それに関連するコマンドも付け加えた。

コマンドを理解するには、「sudo」が「superuse + do」であるように、コマンドの意味(元の英語表示)を考えながら覚えると、わりと覚えやすい。

前回とあわせると、これだけコマンドを使いこなせるようになれば、何だかいっぱしのITエンジニアになったかのような錯覚さえ覚える(かなり大げさ)。

だが、忘れるべからず。

これはあくまでLinux学習のためであって、現在はどのディストリビューションも、GUIでこれら操作は簡単にできるということを…。

Linuxは難しくない!

【ざっくりLinux!のおすすめ本】

コメント