久しぶりにサーバの保守作業を行ったのだが、ブランクがあるとちょっとしたコマンドの使い方にも迷うほどで、年々脳みそから落ちるものが多くなっているようだ。今回は、本日はまった二つのポイントについて取り上げてみたい。ちなみに、サーバはLinuxマシンだ。
tarコマンドでバックアップする
システムの変更を行う前に、運用中のデータをバックアップしようと考えた。このとき使えるのがtarというコマンドである。tarを使うと、ディレクトリ構造ごと圧縮して一個のファイルにできる。いわばアーカイバだが、これを最初に実行したら、なんたることか、バックアップ先の空き容量が足りない。運用中のシステムなので、シャットダウンしてディスクを増設することもできない。そこで、重要度の低いデータをバックアップの対象から外す、ということを考える。
通常のバックアップは、こんな感じだ。
tar czfv archive.tar.gz dir/
これで、dir以下の内容が、archive.tar.gzにまとめられる。ちなみにここで言うtarとはGNU tarのことなので、圧縮済みであることを示すサフィックスであるgzも付けるのが普通だ。ここで、dirの下にあるbackupというディレクトリ以下はバックアップから外したいという場合は、以下のようにする。
まず、backupを内容にしたファイルを適当に作る。これをexlistとしよう。そして、以下のようにtarコマンドを実行する。
tar czfvX archive.tar.gz exlist dir/
tarでは、アーカイブ対象は必ず指定することになっており、その指定の前にオプションを与えることになっている。czfvXはすべてオプションで、cは作成、zは圧縮、fは結果をファイルに出力、vは冗長表示、Xは除外リストの指定を意味する。ファイルなどの指定が必要なオプションは、必ず指定の順番でファイルも指定しなければならない。ここではfとXが該当するので、その順番で指定している。
なお、除外リストにはワイルドカードが指定できるので、サフィックスを指定したり、ディレクトリパスの途中を抜いたりと、多様な指定ができる。
ハイフンで始まるファイルを削除する
tarと格闘していたら、オプションそのものを間違えたり、ファイル指定の順番を間違えて、ハイフンで始まるファイルを作ってしまった。最初は、Xオプションの替わりに–excludeなどを使おうとしてうまく行かず、結局–excludeといったファイルを作るハメになってしまった。それでこれを消そうとしたのだが、なぜか消すことができない。たとえばrmコマンドを実行しても、–excludeをオプションと認識して、これが間違ったオプションだからと何もしてくれない。二重引用符で囲もうが、バックスラッシュでエスケープしようが、同じである。
そこで、空オプションを思い出した。「–」とだけ記述した空オプションを指定し、その後にハイフンで始まるファイルを指定するのだ。
rm -- --exclude
これでバッチリ消える。同様のことは、mvなどのコマンドにも言える。一時はどうなることかと思ったが、きちんと解決策は用意されているものだ。
GUIの使える環境では、ファイルを選んで一発ということになろうが、それでは頭が弱くなる。たまには、パズルのようなコマンド操作を楽しんでみたいものだ。
コメント