Linux講座にようこそ。このページは「Linuxの使い方 - 第4章 ファイル操作のコマンド2」です。
ディレクトリやファイルを取り扱うコマンドのうち、ここでは次のコマンドをご紹介します。前にも述べましたが、コマンドの全ての引数をご紹介しているわけではありませんので、詳細内容をお知りになりたい場合はmanコマンドで調べてください。
cpコマンドはファイル及び、ディレクトリの複写を行い、mvコマンドはファイル及び、ディレクトリの移動を行います。移動の場合は移動元のファイルは消えますので注意してください。複写先或は、移動先に同名のファイルがあった場合は標準では上書きされます。また、ファイル名やディレクトリ名を変更したい場合もmvコマンドで行えます。
複写元(移動元)ファイル名と複写先(移動先)ファイル名は異なっていても構いません。一度に複数のファイルの複写や移動も出来ますが、その場合は最後に指定したディレクトリの下に、同じ名前のファイルとして複写及び、移動を行います。
cpコマンドのオプションには、次のようなものがあります。
オプション | 意味 |
---|---|
-i, --interactive | 複写先ファイルが既に存在していた場合、上書きをするかを問い合わせます。 |
-p, --preserve=mode,ownership,timestamps | 複写元ファイルの属性(保護モードや更新日時、等)を引き継ぎます。当オプションを指定しないと、複写先ファイルの更新日時はコマンドを実行した日時になります。 |
-R, -r, --recursive | ディレクトリの複写を行います。(当該ディレクトリ以下のツリー構造全てを複写します) |
mvコマンドのオプションには、次のようなものがあります。
オプション | 意味 |
---|---|
-i, --interactive | 移動先ファイルが既に存在していた場合、上書きをするかを問い合わせます。 |
カレントディレクトリの下のmeibo1を同じ場所にmeibo2として複写します。
$ cp meibo1 meibo2 $ $ cp -i meibo1 meibo2 ← meibo2は存在しますので、-iオプションを指定します cp: overwrite `meibo2'? n ← y又はnで応答します $
カレントディレクトリの下のMEIBOディレクトリを含めて、以下の全てを/tmpディレクトリの下に複写します。
$ cp -R MEIBO /tmp $
カレントディレクトリの下のmeibo2をmeibo.oldに名称変更します。
$ mv meibo2 meibo.old $
ファイルやディレクトリの名称変更はmvコマンドで簡単に出来ますが、その場合は1回の実行で1つのファイルの名称変更しか出来ません。名称に規則性がある場合は、renameコマンドで複数ファイルの名称変更ができますので、多くのファイルの名称変更を行う場合はrenameコマンドを使うとよいでしょう。
ファイルパス名中の「変更対象文字列」と一致する文字列を「変更文字列」に変更します。ファイルパス名にはワイルドカードも使用出来ます。
renameコマンドのオプションはありません。
カレントディレクトリの下のmeibo1、meibo2、meiboAをmeibo_1、meibo_2、meibo_Aに名称変更します。
$ ls data meibo1 meibo2 meiboA $ $ rename meibo meibo_ meibo? $ $ ls data meibo_1 meibo_2 meibo_A $
カレントディレクトリの下のmeibo_1、meibo_2をmeibo01、meibo02に名称変更します。
$ rename meibo_ meibo0 meibo_[12] $ $ ls data meibo01 meibo02 meibo_A $
mkdirコマンドはディレクトリを作成し、rmdirコマンドはディレクトリを削除します。rmdirコマンドで削除する場合、予めデレクトリは空の状態にしておく必要があります。
ファイルやディレクトリの名称については特に規則はありません。長さの制限はファイルシステムの種類などにより異なるかもしれませんが、通常255文字までは大丈夫だと思います。なお、記号の多くはシェルにとって特別な意味がありますので、名前の一部に記号を使うのは避けたほうがよいと思います。名前の一部として使う記号は_(アンダライン)と.(ピリオド)程度にしておいたほうがよいでしょう。
また、UNIX系OSの場合、英字の大文字と小文字は別の文字として認識しますので、大文字と小文字は使い分けて下さい。なお、当講座の例題ではディレクトリ名を大文字にしていますが、ファイルと区別をしやすくするためで、それ以上の意味はありません。
一度に複数のディレクトリの作成や削除が出来ます。
オプション | 意味 |
---|---|
-p, --parents | 親のディレクトリがない場合、親のディレクトリも作成(mkdir)及び、削除(rmdir)します。 |
カレントディレクトリの下にDIRディレクトリを作成し、その下にSUBDIR1とSUBDIR2ディレクトリを作成します。
$ mkdir DIR $ $ mkdir DIR/SUBDIR1 DIR/SUBDIR2 $
前の例題と同じ事を-pオプションを使用して行います。
$ mkdir -p DIR/SUBDIR1 DIR/SUBDIR2 $
前の例題で作成したディレクトリを全て削除します。
$ rmdir DIR rmdir: DIR: ディレクトリは空ではありません ← エラーメッセージです $ $ rmdir DIR/SUBDIR1 DIR/SUBDIR2 ← DIRの下を空にします $ rmdir DIR $
rmコマンドはファイルを削除します。オプションの指定によりディレクトリの削除も出来ます。
引数の指定により、一度に複数のファイルやディレクトリの削除も出来ます。
オプション | 意味 |
---|---|
-i, --interactive | 削除するか否かを問い合わせます。 |
-f, --force | 削除するか否かを問い合わせません。 |
-r, -R, --recursive | 指定したディレクトリを含め、ツリー構造全てを削除します。 |
カレントディレクトリの下のファイルのうち、拡張子が「old」のものを全て削除します。
$ rm *.old ← ディレクトリは削除しません $
書き込み禁止のファイルを削除します。この場合、-iオプションの有無にかかわらず、削除の問い合わせをしてきます。
$ ls -l meibo -r--r--r-- 1 merry users 30 3月 17 10:32 meibo ← 書き込み禁止ファイルです $ $ rm meibo rm: remove write-protected file `meibo'? y ← 削除の問い合わせです。yで削除します $
DIRディレクトリの下のファイルとディレクトリを全て削除します。
$ rm -r DIR/* ← DIRディレクトリは空になります $
findコマンドはファイルやディレクトリの検索を行います。オプションにより検索条件を指定します。
第1引数(開始ディレクトリパス名)により検索開始ディレクトリを指定し、第2引数以降に検索条件を指定します。 開始ディレクトリパス名に絶対パス名を指定すると、結果も絶対パス名になり、相対パス名を指定すると相対パス名になります。複数の条件を指定するときは-andを指定すると論理積(かつ)に、指定しないと論理和(または)になります。
検索条件としては次のようなオプションがあります。
オプション | 意味 |
---|---|
-name 名称 | 指定した名称のファイルやディレクトリを検索します。名称にはワイルドカードを指定できますが、シェルのそれと区別するためにアポストロフィ又は、引用符で括ります。 |
-type 種別 | 種別にdを指定するとディレクトリを、fを指定するとファイルを検索します。 |
-atime n | 最終アクセスがn×24時間前のファイルやディレクトリを検索します。 |
-mtime n | 最終修正がn×24時間前のファイルやディレクトリを検索します。 |
-exec コマンド | 検索結果を使ってコマンドを実行します。 |
/usr/bin/の下から「cat」という名称のファイルを検索します。
$ find /usr/bin -name "cat" /usr/bin/cat ← 絶対パス名で表示します $ $ find /usr/bin -name "cat*" ← ワイルドカード(アステリスク記号)を指定します /usr/bin/catchsegv /usr/bin/cat /usr/bin/catman $
カレントディレクトリ以下のファイルを全て検索します。
$ find . -type f ./MERRY/meibo/data/data1 ← 相対パス名で表示します ./MERRY/meibo/data/data2 ./MERRY/meibo/meibo1 ./MERRY/meibo/meibo2 ./MERRY/meibo/meiboA ./MERRY/tel $
カレントディレクトリ以下のファイルで、5日以内に修正がかかったものを検索します。以内は-で、以前は+で指定します。
$ find . -type f -and -mtime -5 ./MERRY/tel $
前の例題で検索したファイルの詳細情報を表示します。{}は検索結果を、\;はコマンドの最後を表します。({} \;は固定パターンですので、このままおぼえてください)
$ find . -type f -and -mtime -5 -exec ls -l {} \; -rw-r--r-- 1 merry users 17 3月 17 21:50 ./MERRY/tel $