memory heap
368 subscribers
2.48K photos
504 videos
52 files
3.07K links
science ∩ art = wonder

all memory blocks here are allocated by @a_v_p

GitHub: https://github.com/artyom-poptsov
Mastodon: https://fosstodon.org/@avp

https://memory-heap.org/~avp/
Download Telegram
#bash

Пример конвейрера, который считает размер всех файлов, которые были установлены из пакета RPM:

$ rpm -lq atom | while read line; do [ -f $line ] && echo $line; done | xargs du -ch
#bash

Восстановление файловой системы из архива с одной машины на другую по сети через SSH:
$ cat archive.tgz | pv | ssh [email protected] tar -C /mnt/sda1 -zxf -


Предположим, что система на 192.168.1.1 загружена с какого-либо служебного образа (PartedMagic, SystemRescueCD, ...) и накопитель подмонтирован в /mnt/sda1.

Команду pv (pipe viewer) вставил в конвейер для того, чтобы видеть процесс передачи данных.

У tar заданы следующие опции:
-z — указывает, что мы хотим работать с форматом сжатия GZip.
-x — говорит, что мы хотим распаковать архив.
-f - — имя источника архива. В нашем случае указан "-" что означает stdin (стандартный поток ввода.)

SSH запускается в не-интерактивном режиме, запуская на хосте 192.168.1.1 указанную команду (tar), и передавая данные со своего stdin на вход команды, выполняемой удалённо.

Такой же трюк можно провернуть с полного восстановлением образа накопителя, сделанного например командной dd. Разумеется, на удалённой стороне уже может быть не tar запущен, а тот же dd.
Как воспроизвести музыкальную композицию в консоли, при этом с возможностью управлять воспроизведением из скрипта?

Вот так:
#!/bin/bash

MUSIC_FILE="audio-file.ogg"
FIFO_FILE="control"

mkfifo "$FIFO_FILE"

mplayer -quiet -slave -input file="$FIFO_FILE" "$MUSIC_FILE" > /dev/null 2>&1 &

sleep 1
echo stop > "$FIFO_FILE"

rm "$FIFO_FILE"

exit 0

Описание функциональности mplayer: https://www.mplayerhq.hu/DOCS/tech/slave.txt

#linux #bash
memory heap
В Хьюстоне, штат Техас (США) строят первый двухэтажный дом методом печати на 3D-принтере. Источник: https://www.reuters.com/technology/3d-printing-reaches-new-heights-with-two-story-home-2023-01-12/ Обратите внимание, что часть печатающей головки, через…
Отдельная история о том, как мне удалось скачать видео с сайта reuters.com.

Дело в том, что сайт использует проигрыватель видео, который скачивает видео по частям в формате ts ("MPEG transport stream", также называемый "MPEG-TS") "на лету", и никаких официальных средств скачать видео нет. Пришлось открыть панель разработчика в браузере (Ctrl+Shift+i в Firefox) и посмотреть, какие файлы загружаются по сети.

В итоге выяснил, что части видео подгружаются по таким ссылкам:
https://ajo.prod.reuters.tv/95011abd-c4fc-43bc-b87c-1ad3cb487d55/hls/OV207112012023RP1v1_5473245000_00001.ts
...
https://ajo.prod.reuters.tv/95011abd-c4fc-43bc-b87c-1ad3cb487d55/hls/OV207112012023RP1v1_5473245000_00017.ts

Поскольку мы знаем теперь, в каком диапазоне идёт нумерация фрагментов, и видим также, что ссылка в остальном не меняется, то можем написать скрипт на Bash, который скачивает части видео через wget, склеивает их в один файл и конвертирует в mp4 через ffmpeg:
#!/bin/bash

for num in $(seq -f %02g 1 17); do
wget "https://ajo.prod.reuters.tv/95011abd-c4fc-43bc-b87c-1ad3cb487d55/hls/OV207112012023RP1v1_5473245000_000${num}.ts"
done

cat *.ts > all.ts
ffmpeg -i all.ts -acodec copy -vcodec copy all.mp4

Где:
- Команда seq -f %02g 1 17 генерирует последовательность чисел 01..17 с добавлением дополнительных нулей перед числом, если оно однозначное (благодаря формату %02g.
- Цикл for подставляет значения из диапазона чисел, как значение переменной num — эта переменная используется в цикле для подстановки номера фрагмента видео в ссылку для скачивания.
- Собственно wget скачивает видео по ссылке. ${num} — это как раз место подстановки номера видео.
- cat *.ts > all.ts склеивает фрагменты в один файл.
- ffmpeg конвертирует формат ts в mp4.

#bash #linux #hacks
2
Chet Ramey, Bash.pdf
128.8 KB
Chet Ramey, сопровождающий GNU Bash, написал хорошую статью про (внезапно!) GNU Bash, где описаны его возможности и связанные стандарты (в частности, POSIX.2: Shell and Utilities (IEEE Std 1003.2-1992)).

Источник:
https://tiswww.case.edu/php/chet/bash/article.pdf
#gnu #bash #shell