Что такое zsh-эквивалент «pushd -n» в bash?

Как root, просто catраздел на другой раздел:cat /dev/sdXn > /dev/sdYi

или в файл:cat /dev/sdXn > backup.img

Или в файл или раздел на другой машине:cat /dev/sdXn | ssh user@host 'cat > backup.img'

Вы могли бы использовать ddвместо cat, но для этого нет веской причины:

dd if=/dev/sdXn of=backup.img

Или, если вам нужен индикатор выполнения во время копирования и/или контроль над объемом буферизации, используемым во время копирования, вы можете использоватьpv:

pv /dev/sdXn > backup.img

Если раздел прочитал ошибки -, вы можете использовать ddrescueвместоcat:

ddrescue /dev/sdXn /dev/sdYi

или

ddrescue /dev/sdXn backup.img

ddrescueне будет писать на стандартный вывод (или читать со стандартного ввода, а также ), поэтому, если вы хотите, чтобы это backup.imgбыло на другом компьютере, вам придется скопировать его (, например. с помощьюscp)после этого или запишите его на монтирование NFS.

Или, как упомянул пользователь 1133275 в комментарии, можно использовать замену процесса:

ddrescue /dev/sdXn >(ssh user@host 'cat > backup.img')

Наконец, если вам нужна сжатая, монтируемая файловая система, вы можете использоватьqemu-img:

qemu-img convert -c -O qcow2 /dev/sdXn backup.qcow2

Для установки:

qemu-nbd --connect=/dev/nbd0 /path/to/backup.qcow2
mount /dev/nbd0 /mnt

И qemu-img, и qemu-nbdнаходятся в пакете qemu-utils. Кстати, если вы сделали образ всего диска, а не только раздела, вы могли бы запустить свою старую систему как виртуальную машину в новой системе.


Другой вариант — просто установить второй диск и установить на него Debian 10. Затем вы можете просто смонтировать старый диск где-нибудь в новой системе. Или даже двойная -загрузка между Debian 9 и Debian 10.


Лично я бы порекомендовал копию файла (, например. с tarили rsyncили даже cp -a), а не с резервной копией образа. Это полезнее,могут быть легко извлечены в любое место, и не тратят место или время на копирование пустых или неиспользуемых секторов.

резервное копирование образа (почти всегда )худший способ резервного копирования файловой системы.

2
27.11.2021, 00:40
1 ответ

Вы можете редактировать переменную dirstack.

function insertd {
  emulate -L zsh
  typeset -i n=0
  while [[ $1 == [+-]<-> ]]; do
    n=$1
    shift
  done
  if (($# != 1)); then
    echo 1>&2 "Usage: insertd [+N|-N] DIR"
    return 3
  fi
  dirstack=($dirstack[1,$n] $1 $dirstack[$n,-1])
}

Если вы хотите добавить это поведение к самому pushd, вы можете сделать его функцией.

function pushd {
  if [[ $1 == -n ]]; then
    shift
    insertd "$@"
  else
    builtin pushd "$@"
  fi
}

Эта простая версия не обрабатывает комбинации -nи другой опции точно так же, как bash.

Вы даже можете редактировать переменную напрямую.

vared dirstack
2
27.11.2021, 12:54

Теги

Похожие вопросы