shell 如何避免誤刪目錄

2022-05-28 05:15:10 字數 1659 閱讀 3105

1、變數為空導致誤刪檔案

base_path=/usr/sbin

tmp_file=`cmd_invalid`

# rm -rf $base_path/$tmp_file

這種情況下如果 cmd 執行出錯或者返回為空,後果將是災難性的,那如何防範呢?

(1)利用 shell 的變數擴充套件功能,如果變數為空賦給預設值或者丟擲異常退出指令碼:

echo $/$

-bash: tmp_file: var is empty

(2)人肉判斷變數是否為空:

[[ $ == "" ]] && echo 1

1[[ -z $ ]] && echo 1      

1(3)如果變數未定義還可以開啟 set 選項

# cat a.sh

set -u 

b=echo $b

echo $a

echo 1

# bash a.sh

a.sh: line 4: a: unbound variable

那我們該如何防範這種問題呢?

(1)良好的程式設計習慣:變數加引號防止擴充套件

path="/usr/local /sbin"

# rm -rf $path

rm -rf "$path"

(2)對變數進行語義檢查

比如檢測是否含有空格等特殊字元,不通用,不推薦這麼做

3、目錄或檔案含有特殊字元導致誤刪檔案

ll 總用量 8

drwxrwxr-x 2 work work 4096 11月 24 18:57 '~'

-rw-rw-r-- 1 work work   34 11月 24 19:49 a.sh

# rm -rf ~

那我們該如何防範這種問題呢?

(1)良好的程式設計習慣:變數加引號防止擴充套件

rm -rf "~"

(2)如果不確定,刪除之前 echo或 find 一下,看變數被擴充套件成啥了

echo rm -rf "~"

rm -rf ~

echo rm -rf ~ 

rm -rf /home/work

4、cd 切換目錄失敗,導致檔案被誤刪

cd ooxx_path_not_exsit 

rm -rf *.exe

恭喜這種情況下你的當前目錄下匹配檔案都會被誤刪,那我們該如何防範這種問題呢?

(1)使用邏輯短路操作

cd path && rm -rf *.exe

(2)檢測 path 是否存在

[[ -d ~ ]] && echo 1

15、終極解決方案

不要使用 root 作業系統資源,這樣至少不會刪除系統檔案。

6、在登入 shell 下使用友好的提示符

友好的命令提示符能時刻提醒操作者當前在哪個路徑下,避免錯誤的路徑下操作檔案。

誤刪 var lib dpkg info目錄

剛裝完系統,誤刪 var lib dpkg info目錄 mkdir var lib dpkg info apt get reinstall install dpkg get selections grep space install cut f1 dpkg configure a apt get ...

hadoop上誤刪除錯目錄

fs.trash.interval 2880 number of minutes between trash checkpoints.if zero,the trash feature is disabled.在core site.xml中新增這樣一段2880代表分鐘數,即代表刪除的檔案或目錄在 t...

shell指令碼 如何切換當前目錄

指令碼中執行其他目錄的指令碼或者命令,可以用 連線兩條命令,當前面命令執行正常時,才執行後面命令 比如 cd root replace scripts run.out cd root replace scripts b.sh 記得許可權 例子vi srv msc ubicreate rootfs t...