支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • Linuxコマンド:rmの基本とオプ

はじめに

Linuxでファイルやディレクトリを削除する際に必ず使用すると言っても過言ではない「rm」コマンド。このコマンドの基本的な使い方とコマンドについて改めて振り返ります。知っているコマンドだからこそ知らない知識や見落としていた活用方法があるかもしれません。

Linux「rm」コマンドについて

「rm」コマンドの基本書式

$ rm[オプション][削除するファイル名]

例:カレントディレクトリのfle1.docを削除

$ rm file1.doc

例:フルパスで指定し/temp/file1.docを削除

$ rm[オプション][削除するファイル名]

複数のファイルを同時に削除する

$ rm [ファイル名] [ファイル名]

$ rm file1.doc file2.doc

パターンを指定して複数のファイルを削除する

シェルによるパス名の展開を利用してパターンに合致する複数のファイルを一度に削除することが出来ます。しかしパターンの指定を誤ったり、間違えたまま実行してしまうと本来削除しないファイルやディレクトリまで削除してしまうことがあるため、確認を怠らず注意して実行に移ってください。

$ rm*[パターン指定]

$ rm *.doc

「シェルによるパス名の展開

Linuxではコマンドの引数に「*」「?」「[」等の記号を使用して「パターン」を指定することが出来ます。パターンを指定することでより複雑な条件でのマッチングを可能にします。したがって希望するファイルやディレクトリを一度に削除することが可能になります。ただしマッチするファイルがない場合は通常削除処理は行われずにコマンドが実行されます。

パス名展開のルール

「*」:長さが0以上の文字列にマッチします

「?」:設定した任意の一文字とマッチします

「[文字](角括弧で指定された文字)」:指定された文字のうちいずれかの文字とマッチします。また[a~z]のようにすることでアルファベットaからzまでの範囲の文字を指定することも可能です

「[^文字]あるいは[!文字]」:指定された文字以外のいずれかにマッチします。あるいは[^0-9]のように0~9以外の範囲を指定することも可能です。
※しかし「'」「"」で指定された文字列はマッチ条件からは除外され、処理が行われずにコマンドに移行します。

パス展開と組み合わせて用いられる事が多いテキスト

「..」:パス展開ではありませんが「親ディレクトリ」に展開する場合に用います

[.]:同様にパス展開処理に直接関係するものではありませんが、「カレントディレクトリ」に展開する場合に指定します。

チルダ展開

パス名展開とは異なり、ファイルの有無に関係なく展開されます。さらにこの置換はパス名展開より先に処理が行われ、パス名展開と同時に使用されることが多いです。

「~」:ホームディレクトリに置換

「~[ユーザー名]」:指定したユーザー名のホームディレクトリに置換

ブレース展開

パターン指定した条件にさらに条件追加して展開するという処理になります。またこのブレース展開もパス名展開より先に処理が行われます。以下例を持って説明します。

$ echo 123{abc,dfc,ghi}456の結果、123abc456 123def456 123ghi456

ブレース展開と組み合わせた上記ではブレース({})内の「abc」「def」「ghi」にそれぞれブレース前後に入力されている「123」と「456」を追加して展開されるという処理になります。ちなみにこの場合に前後の「123」「456」の文字列がなければ追加処理はされません。

Linux「rm」コマンドのオプション一覧

[-f](--force):存在しないファイルを無視しエラーメッセージを表示しない

[-i](--interactive):ファイルの削除前に確認を行う

[-I](--Interactive):削除の対象が4つ以上の場合のみ削除の確認を行う

[-v](--verbose):削除の経過を詳細に表示する

[-d](--directory):unlinkでディレクトリを削除する

[-r]あるいは[-R](--recursive):ディレクトリも削除の対象とする

[-one file system]:マウントされたディレクトリは削除の対象にせずにスキップを行う

[-preserve root]:「/」を削除しない(デフォルトの状態)※

[-no preserve root]:「/」を特別なものとして扱わない※

※[-preserve root][-no preserve root]の2つにおいて、rmコマンドのバージョンによって有効かどうかが異なりますので注意してください。

隠しファイルを削除する場合

隠しファイル(ドットファイル)を削除する場合、「rm *」のように指定しても削除対象にはなりません。隠しファイルを削除したい場合は「rm.dotfile」あるいは「rm.dot*」とファイル指定を行って削除処理を行うか、ディレクトリごと削除すると可能です。

オプションと同じファイル名・ディレクトリ名を削除する

「-iv」のようなファイル名やディレクトリ名を指定する場合には現在のディレクトリを表す「./」を付与して処理を行います。

例:$ rm ./-iv

誤って「rm」「-rf」コマンドをしたファイルの復元方法

誤ってファイルやディレクトリを削除してしまった…。さらにバックアップも作成していなかった場合の復元方法をご紹介します。※今回ご紹介する環境は「OS:CentOS6.7」「ファイルシステム:ext3あるいはext4」の場合です。

準備

まずはじめにファイルシステムを確認します。確認が出来たら「読み取り専用」に変更します。読み取り専用とすることによって[rm][rf]コマンドを実行後の場所に新規データの書き込みを防ぎ、ファイル復元を行いやすく整えます。その後、誤ってコマンドを実行したタイムスタンプを確認しメモします。

extundeleteをインストールする

extundeleteをインストールします。もしインストールが失敗する場合は必要なパッケージがインストールされていない場合がありますので、「ext2fs」「gcc」をインストールしてみてください。インストール後、[extundelete --help]にてヘルプを表示します。

使用方法

基本的には  extundelete --restore-file (復元対象のファイル名)(復元対象のファイルが存在するデバイス名)のコマンドでファイルを復元します。
時間指定して復元をする場合は $extundelete --restore-all --after $(date +%s -d '2020-01-01 00:00:00') /dev/sda3)と条件を自身のものに変換して入力を行い実行します。
extundeleteコマンドを実行するとコマンドを実行したディレクトリに「RECOVERD_FILES」というディレクトリが作成されます。そのディレクトリ内にファイルが復元されています。

最後に

Linuxの作業上、ファイルの操作のために削除というのは無くてはならないものです。だからこそ意図しない挙動や削除を行ってしまい失敗してしまうことも頻発します。ましてや「rm」コマンドはWindowsやMacのようにゴミ箱から元に戻せるわけではありません。Linuxの作業中についつい流れ作業で必要なファイルやディレクトリを削除してしまった…。そういった失敗を未然に防ぐために改めて日頃使用されている「rm」の基礎とオプションをこれを切っ掛けに見直してはいかがでしょうか。少しでもお役に立てれば幸いです。ここまで読んでいただきありがとうございました。