標準コマンドが大好物な、ユゲタです。
サーバーサイドでよく利用するコマンドの一つに、「アーカイブコマンド」があります。
tar , zip , rar ...などなど、圧縮形式には色々ありますが、PC系では、zipが主流ですが、
linuxサーバーは、デフォルトでは、zipコマンドはインストールされていません。
代わりに、tarコマンドが昔からデフォルトでインストールされていますが、
windowsやmacでは、逆にこちらの圧縮形式は皆無です。
アーカイブユーティリティ的なソフトを使えば、zipでも、tarでも、なんでも圧縮、解凍できてしまいますが、
こと、webサーバーで、圧縮処理をシステム的に行いたい場合は、tarコマンドが使いやすいでしょう。
これは、数多くサーバーを運用してきて、今現在も更に多くのサーバーを自己運用しているサーバーエンジニアとしての、
ユゲタの個人的意見でもあります。
ちなみに、linuxでは、「unar」という圧縮コマンドが、圧縮タイプの網羅性が優れているので、
煩雑な圧縮形式に対応する場合は、コチラをりようすると、いいでしょう。
圧縮ファイルの解凍に圧倒的に便利な「unar」コマンド
tarコマンドでエラーが出た
今回、汎用的なシステムを作っていて、
そこで利用できるログファイルをアーカイブする処理をする必要があったので、
手軽に使えるtarコマンドを使ってみたところ、
$ tar -zxvf /var/www/html/test.tgz /var/www/html/test.log
tar: Removing leading `/' from member names
こんなエラーがターミナルに表示されました。
このエラーの意味は、「/」はlinuxでは、「ルート」の意味を持ち、管理権限での実行が必至になるので、
今現在のアカウントでは、権限がないですよ。
というエラーメッセージです。
でも、実行結果は、正常に圧縮はできているので、要するに、警告的なエラーメッセージです。
エラーメッセージの対処方法
このエラーに対応するには、いくつかの方法がありますが、どれを選択するかは、お好み次第です。
-1. Cオプションを使う
この方法は、少しトリッキーですが、
圧縮元の階層にどうしても「/」を含めなければ行けない場合に、次のようにすると、エラーは出なくなります。
$ tar -zxvf /var/www/html/test.tgz -C / var/www/html/test.log
圧縮元の手前に「-C」オプションを付けて、少しわかりにくいですが、「/」と階層を半角スペースを空けます。
-Cオプションは、「cd」コマンドの役割で、コマンド実行内部での実行環境を指定している感じです。
2. cdコマンドを使う
単純ですが、階層を「/」ルートからのアクセスではなく、対象フォルダまで移動して、相対パスで指定する方法です。
$ cd /var/www/html
$ tar -zxvf test.tgz test.log
同じ階層で処理するのであれば、この方法はシンプルに書けて悪くないですね。
ワンラインで書きたければ、cdコマンドの改行を「;(セミコロン)」にすることで、1行で記述できますよ。
3. 無視する
そもそも、エラーが出ようが出まいが、結果は正常に終了しているので、この警告レベルのエラーは無視してしまうという方法もあります。
でも、いちエンジニアとしては、アラートすら表示されるのが気持ち悪いので、今後OSのアップデートで、
警告レベルから、禁止レベルにならないとも限らないので、
できれば、こういうエラーは表示しないように対処することが、重要な気もしているので、この方法はあまりオススメできませんけどね。
まあ、1回コッキリでコマンドを実行するレベルであれば、いいのかもしれません。
その場合は、出来上がりのアーカイブファイルの中身をちゃんとデータ欠損がないか確認をすることを合わせてオススメしておきます。
一体、どんなシステムを作っているの?
今回、ユゲタが作っている汎用的なシステムというのは、今自社で開発している、SaaSソフトウェアで、複数のバランシング構成された、ユーザーアクセスサーバーに保持されたデータを
ログデータの集計処理を行うサーバーに一括で移動させたいために、一旦アーカイブ化して、処理をするようにする時に利用していたんですね。
なので、対象のサーバー内部でターミナルコマンドを実際に打ち込んで実行するのではなく、
sshコマンドで、対象サーバーに鍵ログインして、アーカイブして、rsyncでアーカイブデータを取得する・・・
というような、極めてマニアックな処理を行っていたんですね。
その際にどうしてもサーバー毎に構成が違うので、ルート形式からの絶対パスで処理を行う必要があったので、今回の場合、2番めのcd方式で対応するようにしました。
このエラーを見るマニアックなエンジニアの人がいたら、盛り上がりそうなので、是非お話しましょう。
0 件のコメント:
コメントを投稿