rm -f 以降もファイルが削除されないようにする

rm -f 以降もファイルが削除されないようにする

私は通常StackOverflowに滞在しますが、このトピックについてはあなたがもっと専門家だと思います。

だから今日の練習問題が奇妙で一つ作成し、script.sh最善を尽くして消されないようにtest.txtしなければならないのに問題は最後の減りです持つ~になる

rm -f test.txt

私はシェルについてよく知らないので(通常はC / Objective-Cを使用します)、本を拾い上げましたが、まだ読んでいないので、どうすればいいのかわかりません。

権限について考えましたが、スクリプトをテストするとすべての権限が付与されるため、オプションではありません...(これが重要かどうかはわかりませんが、スクリプトはOS Xで実行されます).

ベストアンサー1

Linuxでは、immutableフラグを使用してchattrファイルシステムレベルの読み取り専用を達成できます(ただし、適切な権限が必要です)。私はOSを使用しませtest.txt

#!/bin/sh
mv test.txt test.bak
trap "mv test.bak test.txt" EXIT

rm -f test.txt

test.txtスクリプト名はに変わり、スクリプトが終了するとtest.bak再び名前が変更されます(以降)。rm -f test.txtこれは実際には読み取り専用ではありませんが、kill -KILLスクリプトを使用しない限り、少なくともデータを保存する必要があります。

もう一つの考えは、そこにその行を追加するとこだわったら、もっと早くやめるのはどうでしょうか?

#!/bin/sh
# do your thing
exit
# my boss insisted to have the 'rm' line below.

rm -f test.txt

rm何もしない関数になることに代わるもの:

#!/bin/sh
# do your thing
rm() {
    # this function does absolutely nothing
    : # ... but it has to contain something
}

rm -f test.txt

上記の関数アプローチと似ていますが、廃止されたコマンドを使用して何もしませんが、実際の終了コードを返す組み込みコマンドのaliasエイリアスを指定します。rmtrue

#!/bin/sh
# do your thing
alias rm=true

rm -f test.txt

環境から削除する代替(組み込みのrmものがないと仮定):rm

#!/bin/sh
# do your thing
PATH= # now all programs are gone, mwuahaha

# gives error: bash: rm: No such file or directory
rm -f test.txt

これを変更するもう1つの方法は、$PATHスタブrmプログラム(検索パスとして使用)を使用することです。/tmp

#!/bin/sh
# do your thing
>/tmp/rm # create an empty "rm" file
chmod +x /tmp/rm
PATH=/tmp

rm -f test.txt

組み込み機能の詳細については、実行して詳細をhelp <built-in>ご覧ください。たとえば、

true: true
    Return a successful result.

    Exit Status:
    Always succeeds.

他のコマンドの場合は、man rmマニュアルページを使用または確認してくださいman bash

おすすめ記事