Этап #19
Восстановление системы на зашифрованный диск. Форматирование разделов
Сначала, как и на этапе 18, необходимо получить доступ к зашифрованному жесткому дискуtcplay --map=cryp_sdb --device=/dev/sdb --keyfile=/path/to/key/file
Далее, с помощью утилиты kpartx
, доступ к разделам на жестком дискеkpartx -av /dev/mapper/cryp_sdb
где:
Опция a
– подключить разделы, содержащиеся на зашифрованном устройстве
Опция v
– отобразить, какие разделы были подключены./dev/mapper/cryp_sdb –
подключенный с помощью tcplay
зашифрованный диск.
Далее форматируем разделы. Главный:mkfs –t ext2 /dev/mapper/cryp_sdb1
Дополнительный:mkfs –t ext2 /dev/mapper/cryp_sdb5
И раздел подкачки:mkswap /dev/mapper/cryp_sdb6
Отключаем подключенные разделы:kpartx –dv /dev/mapper/cryp_sdb
Отключаем зашифрованный жесткий диск:tcplay --unmap=cryp_sdb
Перезагружаемся обратно в консоль тестового initrd
Этап #20
Восстановление системы на зашифрованный диск. Восстановление файлов из ранее созданных бэкапов.
Как и в предыдущем этапе, сначала получаем доступ к зашифрованному жесткому диску:tcplay --map=cryp_sdb --device=/dev/sdb --keyfile=/path/to/key/file
И его разделам:kpartx -av /dev/mapper/cryp_sdb
Предположим, что бэкапы системы были сохранены на первый FAT32 раздел флешки sda1
и находятся по следующим путям: /mnt/sdb1/bak/system.tar.gz
и /mnt/sdb1/bak/home.tar.gz
Создаем точку монтирования для флешки (если не создана):mkdir /mnt/sdb1
И монтируем ее (если не примонтирована)mount –t vfat /dev/sdb1 /mnt/sdb1
Создаем точки монтирования для разделов жесткого диска:mkdir /mnt/sda1
Внимание! Точки монтирования для жестких дисков должны называться также, как назывались при создании бэкапов!
mkdir /mnt/sda5
Монтируем разделы:mount –t ext2 /dev/mapper/cryp_sdb1 /mnt/sda1
mount –t ext2 /dev/mapper/cryp_sdb5 /mnt/sda5
Распаковываем архивы:tar –xvf /mnt/sda1/bak/home.tar.gz –C /
tar –xvf /mnt/sda1/bak/system.tar.gz –C /
где:
Опция x
– распаковать архив
Опция v
– отображать имена распаковываемых файлов
Опция f
– архив находится в файле (а не направлен со STDIN)/mnt/sda1/bak/home.tar.gz
– путь к файлу архива–C
– указывает, в какой каталог распаковать архив (сам каталог указывается через пробел, и в данном случае это корень, т.е. /
).
Скопируем заранее исправленные fstab
и mtab,
предположим, они были сохранены в первый раздел загрузочной флешки, в каталог tabs
и данный раздел смонтирован:cp /mnt/sdb1/tabs/fstab /mnt/sda1/etc/fstab
cp /mnt/sdb1/tabs/fstab /mnt/sda1/etc/mtab
После копирования файлов отмонтируем разделы:umount /mnt/sda1
umount /mnt/sda5
Отключаем подключенные разделы:kpartx –dv /dev/mapper/cryp_sdb
Отключаем зашифрованный жесткий диск:tcplay --unmap=cryp_sdb
Перезагружаемся уже с рабочим initrd.
Поздравляю! Если система успешно загрузилась с рабочим initrd, значит, задача выполнена!
После успешной загрузки можно подправить конфиг GRUB, так, чтоб сразу загружалась система с рабочим initrd.
Скачать мануал целиком в PDF
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2019/11/14/usta
Page Summary
October 2025
|
Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть IV
Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть III
Этап #16 Установка Linux и шифрование ее и всего содержимого жесткого диска. Часть II
Этап #11. Установка Linux и шифрование ее и всего содержимого жесткого диска.
Нам понадобятся: Домашний сервер на базе Slackware Linux
Давно хотел собрать в кучу заметки про то, как можно организовать домашний сервер (или сервер для малого офиса) на базе Slackware Linux с VPN, I2P, Tor, файл-помойкой на локальном FTP, возможностью установки с сервера ПО и операционных систем, а возможно и с внутренними Web-сайтами, чатами и что там еще надо в зависимости от ваших задач. А еще и с полным шифрованием жесткого(-их) дисков. Это пост-оглавление. Тут буду копить внутренние ссылки на заметки, относящиеся к организации сервера. Нумерация и последовательность также может меняться, т.к. я пишу как придется, а в содержании буду по мере накопления материала сортировать как надо. Что примерно надо построить на начальном этапе. Сервер в локальной сети, позволяющий клиентам выходить в Интернет, как минимум через два различных IP (VPN и IP основного провайдера), поддерживающий локальный FTP и/или Samba (файловое хранилище), поддерживающий проходную ноду Tor и I2P-роутер, а также обеспечивающий локальным клиентам доcтуп в сети Tor и I2P. Ремарка про железо. На самом деле, чем круче, тем круче, но изначально все делалось на старом Celeron с 500 Гб HDD и 512 Мб ОП, сейчас все вертится на Dual Core Intel Celeron E3200 (2400МГц) с гигабайтом встроенной памяти и встроенным видео, тоже не самая новая машина, но получше. А вообще хочу, чтоб оно на PIII-700 заработало. Сетевая карта одна (расскажу, как из одной реальной виртуальных наделать). Установка Linux и шифрование жесткого диска: - Часть I Копия - Часть II Копия - Часть III Копия - Часть IV Копия - Пример конфига GRUB для загрузки сервера Копия Эта часть целиком в PDF Начальная настройка сети Копия Network namespaces или несколько виртуальных сетевых карт (интерфейсов) с разными IP на одной машине. Копия Настройка файерволла (IPTABLES) Копия Локальный FTP Копия Нода TOR Копия Настройка доступа к I2P Копия PXE (установка и запуск различных ОС со своего сервера на локальных машинах) Копия Локальный прокси-сервер: - Запускающий скрипт Копия - Инструкция по установке Копия - Изменения в конфигурации последней версии Копия Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/11/13/doma Настройка IPTables на сервере. Часть вторая, с поправками.
Итак, раньше копия мы уже делали первоначальную настройку IPTables, но оказалось, что делали не очень верно. tinyproxy свалился после обновления
Черт меня дернул обновить tinyproxy, о настройке которого я писал здесь копия Настройка IPTABLES
На самом деле, жутко не люблю настраивать IPTables, поскольку синтаксис у него несколько инопланетный. Дома и на работе я как-то настроил один раз лет 10 назад и благополучно все забыл. Теперь вот приходится мучительно вспоминать: "Чем ты это делал? Ну вот этой вот мясорубкой.". Calyx.net. Еще один бесплатный VPN
На этот раз от некоей научной конторы Calyx Institute, изначально заточенный под использование клиента Bitmask, но ключи и сертификаты также можно выкачать скриптом из предыдущей заметки (копия) На PasteBin На Mega.nz На Google.Drive Calyx.net Calyx Institute Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/09/22/caly Скрипт для обновления ключей для VPN RiseupVPN без Bitmask и клиента Riseup
Единственная проблема, которая возникает с Riseup VPN - пользовательские ключи периодически протухают (они обновляются примерно раз в 3-4 месяца). Уж не знаю, для чего это сделано, но факт остается фактом. Клиент Bitmask, понятно что, обновляет ключи автоматом, но работает только на астероиде с конкретным давлением и гравитацией. А нам такое не надо. Сам клиент Bitmask на самом деле реализует SRP-авторизацию для последующего получения пользовательского сертификата VPN, однако, админ сервера может выдавать и анонимный ключ, без использования авторизации. С riseup.net несказанно повезло, что гайдам от разработчиков Bitmask, они все-таки (пока) последовали не до конца, и спокойно выдают ключ без авторизации и регистрации. Так что Bonafide можно реализовать частично, опустив шаги регистрации пользователя и всю работу с SRP-авторизацией. Соответственно, остальное без проблем делается с помощью средств shell/bash и нескольких дополнительных утилит. Такое ощущение, что проект медленно дохнет. Из 4 провайдеров, работающих через клиент Bitmask, осталось только два: Riseup, который даже сделал свой отдельный клиент по образу и подобию, и calyx.net, не очень понятный проект от какой-то мелкой американской научной конторы https://www.calyxinstitute.org/, впрочем, тоже предоставляющий бесплатный VPN. А вот колумбийский VPN (всегда мечтал попробовать что-нибудь колумбийское) и единственный платный Codigosur сдохли. И самое печальное, что сдох демо-сервер от самого Bitmask. Который позволялось использовать для отладки своих клиентов под Bitmask-протокол. 1. Нам необходимо выкачать из корня сайта провайдера файл provider.json . Там содержится основная информация о провайдере.2. Далее вытаскиваем из provider.json "api_uri " и "api_version" . Два этих значения (api_uri + api_version ) составляют API_BASE , т.е., например, для Calyx "api_uri": "https://api.calyx.net:4430" и "api_version": "1" , соответственно API_BASE будет https://api.calyx.net:4430/1 3. Выгружаем себе корневой сертификат провайдера (самоподписанный) из "ca_cert_uri" (для Calyx будет https://calyx.net/ca.crt )4. Получаем его fingerprint из "ca_cert_fingerprint" . Отпечаток сертификата SHA256 (у всех двух виденных именно такой)5. Считаем отпечаток скачанного сертификата с помощью openssl :openssl x509 -in $WORKDIR"/"$CACRTFILE -noout -fingerprint -sha256 -inform pem - делаем необходимые строковые преобразования: openssl x509 -in $WORKDIR"/"$CACRTFILE -noout -fingerprint -sha256 -inform pem|awk -F = '{print tolower($2)}'|tr -d ':' и сравниваем то, что получили из сертификата с прочитанным из provider.json должно совпадать.6. Теоретически, с этого момента вся работа с дальнейшим API должна вестись с этим сертификатом, но для простоты можно все запросы делать curl с параметром --insecure .7. Можно выкачать список конфигов сервиса, оформив GET-запрос на адрес API_BASE/configs.json . Список выглядит примерно так:
8. На самом деле из интересного здесь только параметр "eip" , это ссылка на конфиги VPN. Обычно перечисляются сервера и какие-то критичные параметры конфига. Так, например, выглядит текущий eip-service.json для Riseup:На PasteBin 9. Теперь пора получать пользовательский сертификат (и ключ), который будет использоваться для авторизации в VPN, и для этого вообще-то надо логиниться по SRP, но два оставшихся провайдера - Riseup и Calyx, позволяют запрос сделать так. Делаем POST-запрос (пустой) к API_BASE/cert .10. Сохраняем результат. Для парсинга JSON из консоли используется jq , установите для своего дистрибутива, если у вас еще нет.Use bminfo <-p> <provider> [KEYS] Обязательных параметра 2 - первый ключ ( -p ) и провайдер VPN (riseup.net, например).Остальные параметры ( [KEYS] ):--getinfo - получить только provider.json --clear - очистить рабочий каталог--getconfigs - получить provider.json , configs.json и eip config--providerkey - получить корневой сертификат провайдера VPN (cacert.pem )--userkey - получить сертификат пользователя (openvpn.pem )--copy - скопировать сертификаты и файлы json в каталог из $OUTDIR/<provider> --check - скопировать только файлы, которые были измененыМожно использовать в сочетании друг с другом все ключи, кроме --clear .Примеры: Получение всей информации и всех ключей bminfo -p calyx.net --getconfigs --providerkey --userkey Получение только пользовательского ключа: bminfo -p calyx.net --userkey На GitHub riseup.net SRP-6: аутентификация без передачи пароля Bonafide. Secure user registration, authentication, and provider discovery. Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/09/22/skri Устранение глюка с find
Оказалось, в моей функции create_list() копия был обнаружен малозаметный и посему дико поганый баг. А баг был с командой find . Например, если запустить ее в любом каталоге с параметрамиfind /home/smallwolfie/openvpn/configs -maxdepth 1 -iname *.ovpn , то она найдет все файлы *.ovpn Но вот если команду запустить в каталоге с файлами ( /home/smallwolfie/openvpn/configs ), то она упадет:cd /home/smallwolfie/openvpn/configs Вывод: find: paths must precede expression: riseup-nl.ovpn Заключить маску файла в кавычки: find /home/smallwolfie/openvpn/configs -maxdepth 1 -iname "*.ovpn" Вывод: /home/smallwolfie/openvpn/configs/vpnboo Пример из файла скрипта для соединения с определенным VPN-сервером
На GitHub Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/09/17/ustr Интерактивный скрипт для переключения VPN'ок
Старая версия скрипта Че-то решил переделать. 1. На PasteBin 2. На GitHub Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/28/inte Автоматическое обновление пароля для vpnbook.com
На самом деле прошло куча времени, после того, как я заходил на vpnbook.com и пользовался их бесплатным vpn-сервисом. Ну так вот, есть проблема, сервис-то бесплатный, а пароль периодически менялся. Раньше было проще - пароль был на странице, и его можно было просто сграббить, а теперь нет - пароль нарисован на картинке. 1. Нам понадобится какой-то парсер HTML 2. Понадобится какая-нибудь распознавалка текста на картинке, тобишь OCR, поддерживающая режим командной строки, благо в линуксах есть их от слова, хоть дупой жуй. Я использовал самую известную и проверенную, Tesseract называется, распознает все на ура. Картинку с паролем, слава Ктулху, владельцы сервиса (пока) не зашумили и не испоганили, так что распознавание пройдет без дополнительного геморроя. 3. Для отладки можно показывать изображение перед распознаванием прямо в консоли, чтоб это работало, можно установить FIM (копия) В Slackware проще всего установить его через sbopkg. В своих дистрах сами разбирайтесь. 1. Ставим sbopkg, если не стоит, с официального сайта или обновляем если стояла поросшая мхом версия со старым репозиторием в конфиге 2. Запускаем sbopkg В поиске (Search) вводим leptonica, и устанавливаем самую свежую версию. Это зависимость, т.е. библиотека, необходимая для Tesseract. Нашли - жмем Process и уходим курить. 3. Когда все скомпилировалось и поставилось, аналогичным образом ставим Tesseract. 1. Заводим необходимые переменные: #!/bin/bash 2. Перед скачиванием удаляем временный файлы и создаем рабочий каталог, если не существует (если существует, то ключ -p в команде mkdir поможет избежать ошибки):rm "$WORKDIR$HTMLFILE" 2>/dev/null 3. Скачиваем страницу с паролем: echo -n "Get vpnbook page..." Примечание: Почему-то wget всю информацию, вне зависимости от того, произошла ошибка, или все прошло штатно, выкидывает на stderr , посему переопределяем в отдельный лог всю информацию из stderr , чтоб экран не загаживала: 2>/tmp/vpnpass.err.log 4. Проверяем, загрузилось или нет:
1. Вытаскиваем все ссылки на картинки со страницы 2. Отфильтровываем нужные grep' ом: grep "password.php" 3. Выбираем одну (их там две одинаковых): head -n1 4. Заменяем пробел в ссылке на знак +, что понадобится для получения картинки (пробел в POST или GET запросе заменяется на +). Притворяемся браузером. 5. Объединяем это в одну команду, и сохраняем ссылку в переменную: echo -n "Get password image..." 6. Загружаем картинку себе: wget "$VPNBOOKPAGE$PASSLNK" -O "$WORKDIR$PASSIMG" 2>>/tmp/vpnpass.err.log 7. Проверяем, успешно ли прошла загрузка:
8. Для отладки показываем картинку перед распознаванием, если был указан соответствующий ключ ( -s ):
Для распознавания текста, нам придется воспользоваться OCR tesseract . Поскольку текст на английском и довольно прост для распознавания, то из всей мощи Tesseract'а (а инструмент и правда очень крутой), мы воспользуемся самым простым вариантом - все оставим по умолчанию, а результат распознавания выведем на stdout Примечание: Tesseract'у нужно обязательно указывать, куда выводить результат распознавания. Это второй параметр в команде. Команда распознавания: tesseract "$WORKDIR$PASSIMG" stdout Сохраняем результат в переменную: VP_PASSWORD=`tesseract "$WORKDIR$PASSIMG" stdout` Выыодим полученный пароль на экран и сохраняем его в авторизационный файл для Openvpn:
Может совместить этот скрипт со старым скриптом, для обновления конфигов PPTP (новые конфиги делайте сами по образцу). Ссылка на старый скрипт На GitHub На PasteBin специально не кладу, поскольку там есть стукачи, которые доносят владельцам сервиса, что появился новый скрипт по выдиранию пароля. А по-русски владельцы сервиса читать не умеют. Да и на Гитхабе лежал скрипт четырехсотлетней давности, так что не догадаются, что обновился. Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/25/avto Обновление sbopkg и подключение репозитория от Slackware 14.2
Я по дурости поставил в новую слаку старый sbopkg, но поскольку ничего с него до сей поры не устанавливал, то как-то и не замечал. Понадобилось, а смотрю, репозиторий-то в нем от старой слаки. Все делаем под root'ом 1. Сносим старый пакет через removepkg , например (смотрите точное имя пакета средствами своей системы):removepkg sbopkg-0.30.0-i486 2. Удаляем содержимое каталога /var/lib/sbopkg/ 3. Качаем свежий sbopkg с официального сайта Прямая ссылка на пакет 4. Устанавливаем: installpkg sbopkg-0.38.1-noarch-1_wsr.tgz 5. Идем в /etc/sbopkg , видим там 2 файла sbopkg.conf и sbopkg.conf.new . Из sbopkg.conf копируем (тем же mcedit 'ом) в sbopkg.conf.new значения переменных, если в старом конфиге их меняли. У меня, например, сменяно значение OUTPUT , каталога, куда будет сохраняться готовый пакет:export OUTPUT=${OUTPUT:-/root/sbopackets} 6. Переименовываем sbopkg.conf.new в sbopkg.conf 7. Видел рекомендацию почистить кэш со скачанными исходниками (по умолчанию /var/cache/sbopkg переменная SRCDIR в конфиге), но хз. Я почистил, сохранив некоторые архивы.8. Запускаем sbopkg и в меню выбираем Sync, чтоб он синхронизировался с репозиторием. Новый репозиторий прописан в новом конфиге по умолчанию.ФАНФАРЫ! linuxquestions.org Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/25/obno Автоматическое получение конфигов Openvpn для бесплатного VPN от vpnbook.com
Есть относительно неплохой бесплатный сервис VPN vpnbook.com, мы про него когда-то давно писали, а я одно время даже активно пользовался, пока меня не задолбали некоторые ограничения, и я не перешел на лучший и более надежный в плане безопасности Riseup, но в качестве резерва, почему бы не иметь и его? Заодно и знакомый попросил его настроить. В общем, пошел я на сайт, а там все изменилось, появились и периодически добавляются новые сервера, старые подохли, в общем контора активно цветет и пахнет. Так вот, на случай появления новых серверов, придется идти на сайт, скачивать конфиги, при необходимости добавлять свои параметры, и т.д. А зачем это каждый раз делать руками, если можно автоматизировать? 1. Вытащить с сайта список конфигов 2. Скачать архивы конфигов на локальный компьютер и распаковать их 3. Автоматически добавить в конфиг дополнительные параметры, например изменить уровень script-security и добавить пользовательские скрипты, выполняющиеся при соединении и разрыве соединения с сервером, и т.д. Подробности тут или тут4. Конфиги для каждого сервера поставляются в нескольких вариантах, для соединения по разным портам, например TCP 443, TCP 80, UDP 25000, UDP 53. Сервера различаются по странам. Соответственно, надо предусмотреть возможность выбора всех или определенных конфигов. Нам понадобится какой-нибудь парсер HTML. Я использую xidel , о котором недавно писал1. Добавляем в начало скрипта необходимые переменные: VPNBOOKPAGE="https://www.vpnbook.com/" Страница, с которой будем выдирать ссылки на архивы, рабочий каталог скрипта, каталог, куда будем распаковывать архивы и имя файла, под которым сохраним HTML-страницу сайта с нужными данными. 2. Предусматриваем возможность удалить каталог с распакованными конфигами (если пользователь запустит скрипт с ключом -с ):
3. Удаляем ранее сохраненный HTML-файл (иначе новые wget будет сохранять под именами vpnhtml.html.1 , vpnhtml.html.2 и т.д.) и создаем рабочий каталог и каталог для распаковки архивов. Путь будет создан со всеми подкаталогами, если он ранее не существовал. Если каталог уже существовал, то никакой ошибки не будет.rm "$WORKDIR$HTMLFILE" ( Далее под катом ) На PasteBin На GitHub Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/24/avto Отображение картинок в консоли Linux
Задумался тут, можно ли показать изображение в консоли Linux без использования X-Server'а. Ведь в современных Линуксах консоль, по большей части, только маскируются под текстовую, а на самом деле, с определенного этапа загрузки ОС, она вполне себе графическая, и фреймбуфер у них есть, и все прочее для отображения картинки. Шрифты же она отображает, причем не как в DOS, где в консоли никакого графического режима по умолчанию нет, и единственный шрифт 80x25 для VGA-режима и 40x25 для EGA (о-о-о-чень старые мониторы и видеочипы), ЕМНИС. Мелко, противно, нихрена не видно Справедливости ради, в DOS есть и графические режимы, и даже софт для отображения картинок, но, фактически отображение будет не совсем "в консоли", программа должна будет переключить видеоадаптер в графический режим, и там уже сама как-то справляться с изображениями. Вернемся к Linux. Итак, консоль вполне себе графическая, так есть ли софт? Как выяснилось, есть. Называется программа FIM. Программа небольшая, поддерживает основные форматы (BMP, GIF, JPEG, png, tiff) и некоторые другие (PPhotoCD, ppm, XWD), а для остальных она пытается использовать ImageMagick. Программа основана на Fbi (framebuffer imageviewer - это нечто вроде В зависимости от того, где она была запущена, программа использует разные механизмы отображения графики: - если она выполняется в эмуляторе терминала под иксами, то использует библиотеку SDL или imlib2. Впрочем, в иксах, лично у меня, fim смухлевал. В том же самом терминале рисовать не стал, а создал отдельное окно. - если запущена в "голой" консоли без иксов, использует консольный фреймбуфер - и, что довольно забавно, если попытаться запустить ее на терминале, который графику не поддерживает (например, через PuTTY), то программа преобразует изображение в ASCII-арт, ну тут уж, что называется, как получится. Для Debian/Ubuntu и подобных им дистрибутивов есть готовый пакет, для Slackware пришлось собирать из исходников, впрочем, у меня собралось с первого раза. fim <имя файла 1> [имя файла 2] [имя файла 3...] - для просмотра одного или нескольких файлов.fim -R <каталог> , например, fim -R ~/Pictures/ - для просмотра изображений в каталоге.n - следующий файл p - предыдущий + - увеличить - - уменьшить r - поворот m - отзеркалить f - отзеркалить и перевернуть вверх ногами q, ESC - выход На самом деле у утилиты довольно много возможностей, есть командный режим, как у Vim, в котором изображение можно редактировать, подробное описание всех возможностей - в мануале на официальном сайте. Котик в "голой" консоли А вот в иксах он смухлевал, хотя котика нарисовал Псевдографический котик в текстовом терминале. Довольно ничего получилось. Ссылки Официальный сайт Исходники Копия Мой пакет для Slackware Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/21/otob xidel, крохотный парсер HTML, XML, JSON
Понадобилось тут быстро и качественно выдрать из HTMLки ссылки и картинки. Наткнулся на довольно интересный инструмент. Называется xidel, и умеет вытаскивать данные не только из HTML, но также из XML, CSS, JSON, в общем штука получается довольно универсальная. Еще один плюс - кросплатформенность. На сайте есть готовые бинарники под Windows, Linux, пакет для Debian. Все вышеперечисленное, что очень приятно, есть в версиях, как для x86, так и для x64. Также имеются версии для Android ARM и Mac OS 10.8. Открыт и исходный код. Утилита, что хорошо, маленькая, самая большая версия для Android - 2Мб, остальные еще меньше. Брать исходный файл программа может, как из сохраненной на диск страницы, так и непосредственно с сайта. На самом деле, инструкция там довольно большая, покажу только самые простые вещи. Выдираем все адреса ссылок с главной страницы: xidel -s --extract "//a/@href" "http://tolik-punkoff.com" Выдираем адреса изображений: xidel -s --extract "//img/@src" "http://tolik-punkoff.com" То же самое с сохраненной предварительно на диск страницей: wget -P "/tmp" --default-page="test.html" --header="Content-type: text/html" "http://tolik-punkoff.com" wget -P "/tmp" --default-page="test.html" --header="Content-type: text/html" "http://tolik-punkoff.com" Скачать На официальном сайте Мой пакет для Slackware Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/16/xide NodeJS для Slackware 14.2
Ох и запарился я ее собирать... Не, собралась автоматом, просто долго. А готовые пакеты у них на сайте почему-то только под Linux x64. Поэтому, чтоб не пролюбить пакеты: Использование переменных из bash-скрипта в sed
Вроде невелика проблема, а вопросы вызывает. Понятно, что вот так работать не будет: VAR1="Nado naiti" т.к. одинарные кавычки в команде sed все закэранируют, и sed будет искать черти что и с боку бантик.1. Поменять одинарные кавычки на двойные. 2. Поменять sed'овский разделитель слэш ( / ) на что-нибудь другое, например на знак % (Уникальность программы sed в том, что она позволяет использовать любой разделитель, например знак подчеркивания)VAR1="Nado naiti" Добавление строки в начало файла из предыдущей заметки. Строка содержится в переменной $FIRSTSTRING :sed -i -e "1 s%^%$FIRSTSTRING\n%" file.txt Замена строки, начинающейся с любого количества пробелов и/или со строки из переменной $START на строку, содержащуюся в переменной $REPLACE :sed -i "s%^ *$START.*%$REPLACE%" file.txt Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/15/ispo Вставить строку в начало текстового файла в Linux
echo "First line" >newfile.txt sed -i -e '1 s/^/First line\n/' file.txt Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2019/08/15/vsta |