Не могу изменить переменную окружения

В следующий раз вы можете просто использовать pv с самого начала (если это доступный через ваш менеджер пакетов, установите его). Это утилита с единственной целью - связывать входные данные с выходными, а также отслеживать прогресс и скорость.

Затем, для записи образа на диск, скажем, с размером блока 4 МБ:

pv -ptearb /path/to/image.bin | dd iflag=fullblock of=/dev/whatever bs=4M

Помимо начальной буферизации (смещение последней синхронизацией, которую можно выполнить с помощью dd , если хотите), это покажет вам индикатор выполнения, среднюю скорость, текущую скорость и расчетное время прибытия.

Параметр iflag = fullblock заставляет dd захватывать полные блоки ввода через pv , в противном случае вы зависите от конвейера для размеров блоков.

Чтобы пойти другим путем, используйте dd для чтения и pv для записи, хотя вы должны явно указать размер, если источник является блочным устройством. Для устройства 4 ГБ:

dd if=/dev/whatever bs=4M | pv -ptearb -s 4096m > /path/to/image.bin

Вы также можете определить размер автоматически, например:

dd if=/dev/whatever bs=4M | pv -ptearb -s `blockdev --getsize64 /dev/whatever` > /path/to/image.bin

На самом деле не имеет значения, в каком порядке вы выполняете dd и pv , это полностью зависит от производительности - если устройство, на которое вы читаете или с которого вы выполняете чтение, имеет оптимальную производительность для определенных размеров блоков, вы хотите использовать dd вместо pv для доступа к этому устройству. Вы даже можете прикрепить dd на обоих концах, если хотите, или вообще не использовать, если вам все равно:

pv -ptearb /path/to/image.bin > /dev/whatever
sync
4
22.11.2018, 18:36
1 ответ

Переменная оболочки USERNAMEявляется специальной в оболочке Z.

Это всегда имя учетной записи ID пользователя процесса оболочки.

Вы не увидите поведение, которое вы наблюдали в оболочках Almquist, Watanabe, Korn или Bourne Again. Эта переменная — обычная переменная оболочки, которая поначалу не установлена. Вот, например, снаряд 93 Korn:

$ echo $USERNAME

$ USERNAME=wibble
$ echo $USERNAME
wibble
$

В оболочке Z оно начинается как имя учетной записи UID процесса оболочки. Попытка установить его будет пытаться изменить этот UID. Это, конечно, терпит неудачу, если вы не являетесь суперпользователем и оставляете переменную такой, какой она была раньше.

Однако, если бы вы запустили оболочку Z от имени суперпользователя, вы бы увидели изменение как переменной оболочки USERNAME, так и идентификатора пользователя вашего процесса оболочки.

root # echo $USERNAME
root
root # USERNAME=JdeBP
JdeBP %

Дополнительная литература

13
27.01.2020, 20:47

Теги

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