Ось декілька хитрощів, які я придумав протягом багатьох років.
Вирізати та вставити на недружній тти або неінтерактивний режим гри
Якщо ви знаходитесь у ситуації, коли EOF / ^ D / ^ F не виявлено, ви можете використовувати dd для передачі текстових файлів хосту. Оскільки він автоматично припинить читання після заданої кількості байтів.
Я використовував це нещодавно, як минулого року, під час навчань із безпеки, де нам вдалося отримати невід’ємні оболонки на віддаленому хості та потрібні для передачі файлів у.
Насправді я навіть зробив пару бінарних файлів, кодуючи їх base64 і використовуючи повільний, але надійний сценарій декодування base-bash bas64.
dd of=textfile.txt bs=1 count=<size_of_data_in_paste_buffer>
Супер класна хитрість полягає в тому, що під час запуску dd, якщо ви надсилаєте йому сигнал USR1, він видаватиме його поточний статус (читання байтів, байтів в секунду ..)
Універсальний фільтр стану пропускної здатності
Я написав це, щоб діяти як чистий фільтр прогресу для будь-якої програми, яка випромінює дані через stdout. (Примітка: майже що-небудь передаватиме дані через stdout - для програм, які цього не роблять, ви можете обдурити, якщо вони не поспішають на вас, використовуючи / dev / stdout як ім'я файлу. Але ідея полягає в основному кожен раз, коли ви отримуєте X кількість байтів, друкуйте хеш-позначки (наприклад, старі шкільні FTP, коли увімкнено хеш-режим)
(Примітка) Справа у файлі прогресу кульгава, це було переважно доказом концепції. Якби я його повторно використав, я просто використав би змінну.
dd bs=$BLKSZ of=${TMPFILE} 2>&1 \
| grep --line-buffered -E '[[:digit:]]* bytes' \
| awk '{ print $1 }' >> ${PROGRESS} &
while [[ $(pidof dd) -gt 1 ]]; do
# PROTIP: You can sleep partial seconds
sleep .5
# Force dd to update us on it's progress (which gets
# redirected to $PROGRESS file.
pkill -USR1 dd
local BYTES_THIS_CYCLE=$(tail -1 $PROGRESS)
local XFER_BLKS=$(((BYTES_THIS_CYCLE-BYTES_LAST_CYCLE)/BLKSZ))
if [ $XFER_BLKS -gt 0 ]; then
printf "#%0.s" $(seq 0 $XFER_BLKS)
BYTES_LAST_CYCLE=$BYTES_THIS_CYCLE
fi
done
файли з нарізаними кубиками за допомогою анонімних файлів оболонок
Ось надзвичайно псевдокодовий приклад того, як ви можете мати підписаний файл tar, який ви можете витягти без помилок, надаючи вкладку tar через анонімний файл файлового файлу - не використовуючи жодних tmp-файлів для зберігання часткових файлових даних.
generate_hash() {
echo "yay!"
}
# Create a tar file, generate a hash, append it to the end
tar -cf log.tar /var/log/* 2>/dev/null
TARFILE_SIZE=$(stat -f "%z" log.tar)
SIGNATURE=$(generate_hash log.tar)
echo $SIGNATURE >>log.tar
# Then, later, extract without getting an error..
tar xvf <(dd if=$OLDPWD/log.tar bs=1 count=${TARFILE_SIZE})
Tl; dr: я вважаю, що ДД є надзвичайно корисним. І це лише три приклади, які я можу придумати з вершини голови.