Berikut adalah beberapa trik yang saya buat selama bertahun-tahun ..
Potong-dan-Tempel di bash mode tty atau non-interaktif
Jika Anda berada dalam situasi di mana EOF / ^ D / ^ F tidak terdeteksi, Anda dapat menggunakan dd untuk mentransfer file teks ke host. Karena itu akan berhenti membaca setelah jumlah byte yang ditentukan secara otomatis.
Saya menggunakan ini baru-baru ini tahun lalu selama latihan keamanan di mana kami bisa mendapatkan kerang non-tty pada host jarak jauh dan diperlukan untuk mentransfer file.
Bahkan, saya bahkan melakukan beberapa file biner dengan base64 mengkodekannya dan menggunakan script decoding pure-bash base64 murni yang lambat.
dd of=textfile.txt bs=1 count=<size_of_data_in_paste_buffer>
Trik yang sangat keren adalah ketika dd sedang berjalan, jika Anda mengirimkan sinyal USR1, itu akan memancarkan statusnya saat ini (byte dibaca, byte per detik ..)
Filter state throughput universal
Saya menulis ini untuk bertindak sebagai filter kemajuan bash murni untuk setiap program yang memancarkan data melalui stdout. (Catatan: Hampir semua hal akan memancarkan data melalui stdout - untuk program yang tidak, Anda dapat menipu jika mereka tidak menganggap Anda menggunakan / dev / stdout sebagai nama file. Tapi idenya pada dasarnya, setiap kali Anda mendapatkan X jumlah byte, cetak tanda pagar (seperti FTP sekolah lama saat mode hash Anda aktif)
(Catatan) Berkas progresnya payah, ini sebagian besar merupakan bukti konsep. Jika saya redid, saya hanya akan menggunakan variabel.
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
file irisan-dan-dadu menggunakan file menangani shell anonim
Berikut adalah contoh kode pseudo-sangat tentang bagaimana Anda dapat memiliki file tar yang ditandatangani yang dapat Anda ekstrak tanpa kesalahan dengan memberikan input tar melalui penanganan file anonim - tanpa menggunakan file tmp apa pun untuk menyimpan data file parsial.
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 adalah: Saya merasa sangat berguna. Dan ini hanya tiga contoh yang bisa saya pikirkan dari atas kepala saya.