Linuxでは、psqlと入力リダイレクション演算子を使用してファイルをデータベースにロードしています。私はいくつかのディスク領域を解放するためにファイルを削除したいと思います。それは負荷を妨げるだろうか?入力リダイレクトで使用中のファイルを削除するとどうなりますか?
psql mydatabase < myfile.sql &
rm myfile.sql
Linuxでは、psqlと入力リダイレクション演算子を使用してファイルをデータベースにロードしています。私はいくつかのディスク領域を解放するためにファイルを削除したいと思います。それは負荷を妨げるだろうか?入力リダイレクトで使用中のファイルを削除するとどうなりますか?
psql mydatabase < myfile.sql &
rm myfile.sql
psql
が完了するまで、ファイルは実際にディスクから削除されません。それはディレクトリから削除されるので表示されませんが、操作が完了するまで、ファイルはディスク上に残ります(スペースを使用して)。
プロセスが現在開いているファイルを削除すると、OSはディレクトリエントリを削除しますが、ファイルを保持している最後のプロセスが閉じられるまでファイル自体をディスクに保存します。ファイルを使用しているプロセスは、何も起こっていないかのように楽しく働くことができます。
あなたのスクリプトは幸運の偶然によって動作します(シェルはリダイレクトを設定するまでファイルを削除しません)。そして、(2)psql
の使用が終了する前にファイルを削除しようとすると、 psql
が終了するまで、ファイルはディスクスペースを占有します。あなたはおそらく行うには何を意味
は次のとおりです。
(psql mydatabase < myfile.sql && rm myfile.sql) &
このようなスポーンそれはmyfile.sql
を削除を返した後、psqlのコマンドとを実行するバックグラウンドでサブシェル、。
&&
は、「左側を実行し、正常に終了した場合(読み取り:終了ステータス0を返します)」という意味です。これは一般的なシェルのイディオムです。
rmがリンクを解除する前に、psqlコマンドがmyfile.sqlに対するファイルハンドルを開いたことをどのように知っていますか? –
@ user1131467: 'psql'プロセスをバックグラウンドに置くには、シェルがI/Oリダイレクションを完了していなければなりません。 –