今回は、ファイルのコピーや移動、削除といったファイルの基本操作のためのコマンドを掘り下げて説明していくことにしましょう。その後で、別名でファイルにアクセスするリンクについても説明します。今回紹介するコマンドはどれも、前回紹介した「*」や「?」といったワイルドカード、および「..」や「.」といった特別なディレクトリを示す記号と組み合わせることで、より柔軟な処理が可能になります。
UNIXの教科書〜はじめよう! WindowsとLinuxからのステップアップ〜 4日目
2008年2月
大津 真
マリー先生:
今回はファイル操作に関する基本コマンドの取り扱いについて説明しましょう。ここまでの操作を理解すれば、ターミナル上での基本的な操作はだいたいOKなのでがんばりましょう。
その前に、前回の説明に関してなにか質問ありますか?
タックス君:
先日、先輩にbashのパッケージをインストールしてもらったのですが、bashを起動するにはどうすればいいのですか?
マリー先生:
bashのインストール先にもよるけど、/usr/local/bin/bashにインストールされている場合、単に試すだけだったら、コマンドラインで「/usr/local/bin/bash 【Enter】」(設定によっては「bash 【Enter】」)とすればいいわ。
$ /usr/local/bin/bash 【Enter】
もとのシェル(POSIX SHELL)にもどるには「exit【Enter】」を実行してね。
タックス君:
ログインしたときにPOSIX SHELLの代わりにbashを使うように設定することはできますか?
マリー先生:
ログインしたときに起動するシェルのことを「ログインシェル」というの。ログインシェルはchshコマンドで変更できるわ。ただし、初期状態ではシステムファイルを設定しないと、システムに標準で用意されているシェルしかログインシェルにできないの。あるいは、HP-UX管理ツールであるSMH (System Management Homepage)のugwebを使ってもログインシェルを変更できるわ。いずれにしてもスーパーユーザの権限が必要なので、もしbashをログインシェルにしたかったら管理者に相談してね。
ファイルをコピーするcpコマンド の基本的な使い方について前回 簡単に説明しましたが、この時間ではもう少し掘り下げて説明しましょう。
前回は、あるディレクトリの下の複数のファイルをまとめてコピーするのに使用するのに、「*」「?」といったワイルドカードを使用する方法について紹介しました。覚えていますでしょうか?
たとえば、カレントディレクトリの下にある拡張子が「.txt」のファイルを、ホームディレクトリ「~」の下のbackupディレクトリにコピーするには、次のようにします。
こうするとワイルドカード「*」がシェルによって展開されます。カレントディレクトリにsample.txt、info.txt、readme.txtの3つのファイルがあったとすると、次のような命令がカーネルに送られるわけです。
cp sample.txt info.txt readme.txt ~/backup
マリー先生:
cpコマンドでは、コピー先に同じ名前のファイルがあっても警告なしに上書きしてしまうので注意してね。
マリー先生:
心配なら「-i」オプションを指定すれば、上書きするかどうかをファイルごとに確認しくれるわ。前の例で「-i」オプションを指定すれば、backupディレクトリに同じファイルがあった場合には上書きしていいかその都度訊いてくるの。「y 【Enter】」で上書き、それ以外の文字を入力すればコピーされないわ。
$ cp -i *.txt ~/backup
overwrite /home/taro/backup/A.txt? (y/n) y ←上書きする
overwrite /home/taro/backup/AB.txt? (y/n) n ←上書きしない
それでは、あるディレクトリを丸ごと階層構造を保持したまま、別のディレクトリにコピーすることはできるでしょうか? 答えは、もちろん可能です。それには「-r」オプション(もしくは「-R」オプション)を指定してcpコマンドを実行します。このことを、“ディレクトリを再帰的にコピーする”などといいます。
たとえば、Documentsディレクトリを丸ごと、backupディレクトリの下にコピーするには次のようにします。
$ cp -r Documents backup/
四色君:
この例だと、backupディレクトリの下にDocumentsディレクトリが作成されますけど、違うディレクトリ名でコピーすることもできますか?
マリー先生:
できるわよ。たとえば、DocBackupというディレクトリ名にするには次のようにすればいいわ。
$ cp -r Documents backup/DocBackup
このとき、同じ名前のディレクトリが存在していた場合には、その下にコピーされてしまうので注意してね。前の例で、cpコマンドを実行するときに、backup/DocBackupディレクトリが存在していた場合にはbackup/DocBackup/Documentsディレクトリが作成されてしまうの。
ファイルの情報を保持したままコピーする-pオプション
cpコマンドでファイルをコピーすると、ファイルの更新日時はコピーした日時になります。またファイルのパーミッション(アクセス権限)などの情報はシェルの設定によって変更される場合があります。
$ cp index.html index2.html
$ ls -l
total 32
-rw-rw-rw- 1 o2 users 5 Jan 1 00:00 index.html
-rw-r--r-- 1 o2 users 5 Jan 29 22:48 index2.html ←パーミッションと
更新日時が変更された
もとのファイルの情報をそのまま保持したい場合には、「-p」オプションを指定して実行します。
$ cp -p index.html index3.html
$ ls -l
total 48
-rw-rw-rw- 1 o2 users 5 Jan 1 00:00 index.html
-rw-r--r-- 1 o2 users 5 Jan 29 22:48 index2.html
-rw-rw-rw- 1 o2 users 5 Jan 1 00:00 index3.html ←情報が保持される
コピーではなくてファイルを移動したい場合にはmvコマンド 使います。cpコマンドの引数の順番と同じく、最初の引数にもとのファイルのパスを、2番目の引数にコピー先のパスを指定します。
たとえば、カレントディレクトリの下のReadMe.txtを、ホームディレクトリ「~」の下に移動するには次のようにします。
なお、mvコマンドはディレクトリを丸ごと移動することもできます。このとき、cpコマンドと異なり「-r」オプションは必要ありません。たとえばカレントディレクトリの下にあるsamplesディレクトリを、ホームディレクトリの下にあるPicturesディレクトリに移動するには、次のようにします。
タックス君:
移動ではなく名前を変更するにはどうすればいいのですか?
マリー先生:
それもmvコマンドでOKよ。つまりmvには名前の変更といった意味合いもあるの。たとえば、カレントディレクトリの下にある「file.txt」の名前を「myFile.txt」にするには、次のようにすればいいわ。
ファイルの削除にはrmコマンド を使います。たとえば、カレントディレクトリの下にあるold.txtを削除するには次のようにします。
四色君:
rmコマンドの引数にワイルドカードは使えますか?
マリー先生:
もちろん使えますよ。たとえば、UNIX系OSではバックアップファイルのファイル名の最後にチルダ「~」が使用されることがしばしばあるの。カレントディレクトリからそれらのファイルをまとめて削除するには、次のようにすればいいわ。
タックス君:
ワイルドカードを使ってファイルをまとめて削除できるのは便利だけど、ちょっとコワイですね。
マリー先生:
そんな場合には、cpコマンドと同じく「-i」オプションをつけるといいわ。そうすれば、ひとつずつ確認してからファイルを削除してくれるの。
$ rm -i *.txt
Readme.txt: ? (y/n) n
ok.txt: ? (y/n) y
profile.txt: ? (y/n) m
「-r」オプションを指定すると、ディレクトリを丸ごと削除することができます。このオプションを使用するとホームディレクトリを丸ごと削除するといったことも簡単にできてしまいますので、実行には細心の注意をはらってください。
たとえば、oldディレクトリ以下を丸ごと削除するには次のようにします。
ディレクトリの削除に特化したのがrmdirコマンド です。 たとえば、カレントディレクトリの下にあるworkディレクトリを削除するには次のようにします。
ただし、rmdirが削除できるのは空のディレクトリだけです。その下にファイルやディレクトリがあるとエラーとなり削除できません。
タックス君:
「rm -r」コマンドでディレクトリを丸ごと削除できるのですから、rmdirコマンドは必要ない気がしますけど。
マリー先生:
「rm -r」はその下にファイルがあっても、指定したディレクトリ以下をすべて削除してしまうので、ある意味危険なコマンドなわけ。だから実行には細心の注意を払う必要があるの。それに対して、rmdirはその下にファイルがあると削除できないから安心なのよ。
HP-UXのデスクトップ環境には、The Open Group が管理する商用のデスクトップ環境であるCDE(Common Desktop Environment)が採用されています。ファイルのコピー/移動、削除、2時間目で説明するシンボリックリンクの作成といったファイルの基本操作は、CDEのファイルマネージャを使っても行えます。
そのままファイルをドラッグ&ドロップすると移動になりますが、Ctrlキーを押しながらドラッグ&ドロップすると移動になります。
図1:CDEのファイルマネージャ
なお、コピー/移動先のパスをダイアログボックスで指定することもできます。たとえば、コピーする場合にはファイルを選択してから、「選択」メニューから「コピー先を選択」を選択します。表示されるダイアログボックスで、コピー先のディレクトリのパスと、ファイル名を指定してEnterキーを押すとコピーが実行されます。
図2:ダイアログボックスを使ったファイルのコピー
1 | 2
本ページの内容は執筆時の情報に基づいており、異なる場合があります。
ご購入前のお問い合わせ
エンタープライズ向け製品の
ご購入前のご相談
03-5749-8328
09:00-19:00 (月曜−金曜)
10:00-17:00 (土曜)
※祝祭日と5月1日は除く
製品・キャンペーンに関するお問い合わせ
ご購入後のお問い合わせ
オンラインサポート
製品の標準保証でご利用いただける無償のサービスです。
ショールーム
導入をご検討のお客様へ
業務アプリケーションの継続・標準化・開発性とシステム担当者様、システム開発者様が抱える悩み・疑問に対する解決策 を実体験 して頂けます。