2つのコマンドの出力差(ls対du)

2つのコマンドの出力差(ls対du)

そのため、職場で問題を分析してみると、Oracleで一部のデータファイルを生成したときに、そのデータファイルがファイルシステムでスペースを確保せず、データファイルがあるファイルシステムに移動しましたが、驚くべきことに、sapdataファイルls -ltrはデータファイルを生成するときに指定した重みで表示されますが、aはdu -gs0.00となっているため、比較のために次の2つのコマンドを実行しました。

ㅏ)

find ./sapdata* -name "temp*" -type f -exec du -gs {} \;

2)

find ./sapdata* -name "temp*" -type f -exec ls -ltr {} \; | awk '{printf ("%.2f\t%s\n", $5/1024/1024/1024,$9)}'

このコマンドはLinuxではなくUnixなので、このように動作することに注意してください。-printforは使用できません-h。使用する必要-gがあり、取得するには1024で分割する必要がありますls

最後の結果の出力は最初の結果の出力と同じですが、2番目の結果はの情報を使用しますls -ltr

実際にはすべてが大丈夫です。違いを確認し、この問題を解決しようとしていますが、2つの方法でさらに一歩進んでいきたいと思います。

  1. 両方の結果を混在させ、どのファイルが連続して異なるかを教えてください。
  2. 2つの結果を混ぜ合わせてモニタリングスクリプトを作成するのに役立つ比較「状態」を取得します。

このコマンドで得られる出力の例は次のとおりです。

A)私に:

15.63   ./sapdata19/temp_1/temp.data1
25.31   ./sapdata20/temp_2/temp.data2

B)私に:

15.63   ./sapdata19/temp_1/temp.data1
0.00    ./sapdata20/temp_2/temp.data2

だから解決策1では、私は次のようなものが欲しい

                         DU                                            DIFF                                    LS
--------------------------------------------------------   ----------   --------------------------------------------------------
15.63   ./sapdata19/temp_1/temp.data1    OK          15.63   ./sapdata19/temp_1/temp.data1
25.31   ./sapdata20/temp_2/temp.data2    FAILED   0.00    ./sapdata20/temp_2/temp.data2

あるいは、そのように可能であることがわかりますが、ヘッダーは必要ありません。

ソリューション2の場合は、次のようなものが必要です。

Health=50%
Number of Failed=1
Total Number of Datafiles=2
List of Failed=
./sapdata20/temp_2/temp.data2

おそらくBASHスクリプトを使用してあまり問題なく実行できる最後の解決策かもしれませんが、最初の解決策は一行で書きたいので、どうすればいいのかわかりません。私はそこに、おそらくおそらくそこにいると思いますxargsが、私はわかりません。diffawk


  • @roaimaに返信:

    duいいえ、これはとの違いに関する質問ではありませんls。違いがあることを知っていますが、一般的に違いは意味がありません。これで、Oracleの一時ファイルには意味がある可能性があります。私はDBAではないので、Oracleがどのように機能するのかよくわかりませんがbrtools

    要点は、100G sapdata FS /oracle/SID/sapdata1(SAPインスタンス用のoracle)があると仮定することです。 25Gのデータファイルを2つ追加すると、50Gが使用され、50Gが使用sapdata1可能にsapdataなり、それぞれ20Gの一時ファイルが2つ追加されます。したがって、sapdata1には90Gの使用スペースがありますが、見つけることができる各ファイルの合計で表される50Gの使用スペースがあり、一時ファイルが使用されていない場合、残りduのファイルサイズは1024K(空)ファイルサイズになります。 「こんにちは。50Gの空き領域があります。メインテーブルスペースに2つの25Gデータファイルを追加できます」と言ってdf -Phこれを追加します。ここで問題はOracleです。実際に表スペースにスペースがないことを理解してもよろしいですか?一時ファイルの重みがDFに表示されないため、FSですか?私が見るには、その人は知りませんし、2つの追加データファイルを追加するようにします。

    このとき、FSには使用可能な0Gデータファイルが4つあり、FSスペースを占有しない20G一時ファイルが2つあります。 aの検索結果を追加すると、dulsの検索結果を追加すると合計100Gになります。 、総量は100Gになり、100G FSでは140Gになります。

    これは、Oracleデータベースが実際にこれらの一時ファイルを使用しようとしたときに実行できず、失敗したり、一時ファイルのサイズを残りのスペースに合わせて自動的に調整することを意味します。わかりませんが、制御しないと失敗し、本番環境で失敗することはお勧めできません。

    Oracleはこれらの一時ファイルをすばやく作成するためにスペースを割り当てずに作成しますが、私の考えでは、これは単純な混乱ではなくいくつかの問題を引き起こす可能性があります。私の英語力が最高でない場合は申し訳ありません。

  • @Paul_pedant 申し訳ありません。これがLinuxではなくUnixであることを指摘するのを忘れました。 unix findはまだ存在しません-print。とにかくfindを-printf使ってこれを短くすることができますが、-print私はそれを使いたいですawk。ハハ。

関連情報