Command-Line

你能讓dd命令安全嗎?

  • April 23, 2018

我們都有(或認識的人)無意中誤用了destroy-disk( dd) 命令。有哪些方法(如果有)可以通過以下或類似的方式更改命令: 如果/dev/sda作為輸出文件 ( of=/dev/sda) 給出該命令,則該命令不會執行或提示您進行確認,例如“您確定嗎”?

你能用你的.bashrc 文件實現類似的目標嗎?

一般來說,有沒有辦法在傳遞某些參數時阻止某些命令執行?

編輯:該命令以 root 身份執行。

正如 Arkadiusz 所說,您可以創建一個包裝器:

dd() {
 # Limit variables' scope
 local args command output reply

 # Basic arguments handling
 while (( ${#} > 0 )); do
   case "${1}" in
   ( of=* )
     output="${1#*=}"
     ;;
   ( * )
     args+=( "${1}" )
     ;;
   esac
   shift || break
 done

 # Build the actual command
 command=( command -- dd "${args[@]}" "of=${output}" )

 # Warn the user
 printf 'Please double-check this to avoid potentially dangerous behavior.\n' >&2
 printf 'Output file: %s\n' "${output}" >&2

 # Ask for confirmation
 IFS= read -p 'Do you want to continue? (y/n): ' -r reply

 # Check user's reply
 case "${reply}" in
 ( y | yes )
   printf 'Running command...\n' >&2
   ;;
 ( * )
   printf 'Aborting\n' >&2
   return
   ;;
 esac

 # Run command
 "${command[@]}"
}

例子:

$ dd if=/dev/urandom of=file.txt bs=4M count=5
Please double-check this to avoid potentially dangerous behavior.
Output file: file.txt
Do you want to continue? (y/n): y
Running command...
5+0 records in
5+0 records out
20971520 bytes (21 MB, 20 MiB) copied, 0.443037 s, 47.3 MB/s

修改它以滿足您的需求(使其符合 POSIX,檢查其他條件等)。

引用自:https://unix.stackexchange.com/questions/439555