0

次のようなシェル スクリプトを作成しようとしています。

  • ログディレクトリから別のディレクトリにファイルをコピーして分析します。

  • ファイル化してテキスト パターンを検索する Gunzips

  • さらに分析するために、そのパターンをファイルに出力します

  • 上記のファイルを削除します

私はこれを段階的にやろうとしています。これまでのところ、私は地面から降りることができませんでした。はぁ...

この例を here から取得し、修正を開始しました。

#!/bin/bash


FILES= `ls /opt/dir1/scripts/access_*.gz`



for i in $FILES
  do
    cp $i /tmp/apache
    gunzip $i | grep -i 'Mozilla' >> output.txt
  done

これを行うたびに、次のような許可拒否メッセージが表示されます。

./test1.sh: line 7: /opt/dir1/scripts/access_log.1.gz: Permission denied

このスクリプトをルートとして実行していても、これらのコマンドを手動で実行しても問題ありません。何か案は?

ありがとう

4

1 に答える 1

0

ルートには書き込み権限がないよう/opt/dir1/scripts/です。あなたがすることはあなたがしようとしていることではありません;)

まず、フォルダを作成して、それが存在することを確認する必要があります。mkdir -p /tmp/apache

ファイルをそのディレクトリにcp $i /tmp/apacheコピーします。

gunzip $iコピーしたファイルではなく、上の行から元のファイルを抽出します。zgrepを使用してこれを行うためのより簡単な方法を提案します。zgrepはgrepに似ていますが、gzip圧縮されたファイルでも機能します。最初にこれを試してください:

#!/bin/bash
# create the folder (-p supreses warnings if the folder exists)
mkdir -p /tmp/apache
# create the output file (empty it, if it exists)
echo "" > /tmp/apache/output.txt
zgrep -i 'Mozilla' /opt/dir1/scripts/access_*.gz >> /tmp/apache/output.txt
于 2013-03-14T17:10:11.020 に答える