by ketmar
Линуксовый ноутбук может крякнуть, так что особо ценное перекладываю, что-то в облака, что-то на GitHub, тем более Нургалиев ketmar разрешил.
Репозиторий с исходниками
Скомпилированный бинарник
Готовый пакет для Slackware
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2024/10/12/yter
Page Summary
October 2025
|
yterm - линуксовый терминал
Настройка прокси в VLC Player
Решил посмотреть телевизор, чтоб быть в курсе, чего там кремлевская пропаганда врет, оказывается, проще всего сделать дырку в ГОРФ через прокси. Недолгим гуглением выяснил, что в прокси умеет VLC. Оставлю тут инструкцию по настройке прокси в VLC, от собственного склероза в основном. 1. Заходим в Инструменты --> Настройки... 2. Переключаем режим настроек из Простые во Все 3. Слева раскроется дерево настроек, нажимаем на пункт Ввод/кодеки, причем на сам пункт/узел, раскрывающиеся ветви узла нас не интересуют. ( Далее под катом ) 8. ФАНФАРЫ! Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2024/09/24/nast Linux: yt-dlp в Slackware
Сломался даунлоадер с Ютуба yt-dlp , который я пользовал в качестве альтернативы youtube-dl , поскольку youtube-dl медленный. Но ютубовские уроды опять что-то поменяли и старая версия yt-dlp перестала работать. Решил обновить.Новой версии yt-dlp нужна и новая версия Python. У меня стояла 3.7, а нужна 3.9.1. Сносим старую версию (название пакета у вас может быть другим, у меня был python3-3.7.2-i586-1_SBo ):removepkg python3-3.7.2-i586-1_SBo 2. Качаем SlackBuild и исходники от Alien 3. Кладем их в отдельный каталог и делаем пакет: ./python3.SlackBuild Python-3.9.5.tar.xz 4. Устанавливаем пакет: installpkg python3-3.9.5-i586-1alien.txz Копии: Слакбилд и исходники (RAR) Готовый пакет (TXZ) 1. Сносим старый пакет, если есть (название пакета ниже может быть другим): removepkg yt-dlp 2. Делаем временный каталог: cd /tmp 3. Создаем в нем каталог bin :cd yt-dlp2024 4. Качаем в bin с GitHub готовую версию yt-dlp :Ссылка на страницу установки Ссылка на бинарник для Linux 5. Устанавливаем скачанному файлу права на исполнение: chmod 755 yt-dlp 6. Создаем пакет: cd .. 7. В каталоге /tmp будет создан пакет yt-dlp2024.txz , нужно его установить:cd .. Копия готового пакета (TXZ) При первом использовании нового yt-dlp возникла ошибка:[youtube] Extracting URL: https://www.youtube.com/watch?v=3zyZ-Ya Ну все, пиздец, подумал я, настала та самая жопа, когда ебался пол ночи, а звуки для новых сэмплов так и не скачаю, а друзья неделю пилили, что из "жужжалки" UVB-76 (это такая всем известная номерная радиостанция), я себе семплов нужных и нарежу, а тут такой облом. Пошел в ресторацию, выпил хорошего немецкого пива под сосисочки, и решение нагуглилось! При вышеуказанной ошибке yt-dlp надо запускать с параметром --restrict-filenames :yt-dlp --restrict-filenames <url> где <url> - адрес видео, которое хотим скачать, например:yt-dlp --restrict-filenames https://www.youtube.com/watch?v=3zyZ-Ya Все! Качается: [youtube] Extracting URL: https://www.youtube.com/watch?v=3zyZ-Ya Решение нашел здесь Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2024/05/13/linu Linux: Неинтерактивный пользователь
Если мы посмотрим на список пользователей в Linux сразу после установки, мы, кроме root , nobody (пользователя с максимально ограниченными правами) и своего пользователя, увидим множество пользователей, созданных под конкретную подсистему или задачу, например: bin , daemon , adm , operator , games , sshd , usbmux , sddm , pulse , apache , messagebus и т.д.Для чего это сделано? Если кратко - для безопасности, под каждую задачу, от запуска отдельной программы, до управления отдельной подсистемой, создается отдельный пользователь, который, даже если его взломает злоумышленник, не сможет получить доступ ко всей системе. Т.е. хакнули пользователя apache , и у нас сдох только web-сервер Apache, админ нашел сбой, пропатчил, починил, перезапустил нужное - и все опять работает.А почему пользователь неинтерактивный? Опять же, для безопасности, ваш пользователь, или же root , интерактивные, они имеют доступ к терминалу, т.е. могут вводить команды и запускать другие программы из терминала/консоли. Но и в самом терминале и в программах, может обнаружиться ошибка, которая позволит получить пользователю получить нужные права, чтоб в системе навредить. Для того пользователю с ограниченными задачами и отключают доступ к терминалу, т.е., делают его неинтерактивным.Итак, начнем это делать на нашей тестовой системе. Для начала создадим группу для тестовых пользователей, стандартной командой addgroup . Выполнять надо из-под root (или через sudo , зависит от вашей системы), больше не буду на этом останавливаться.groupadd testgrp 1. Самый простой способ: useradd -g testgrp -d /dev/null -s /bin/false testusr1 где: -g testgrp - задать основную группу пользователя (вышесозданную testgrp )-d /dev/null - задать в качестве расположения домашнего каталога нуль-устройство (/dev/null )-s /bin/false - установить фиктивную оболочку (/bin/false ).testusr1 - имя пользователяЕсли опцию -d не указать, система укажет для пользователя домашний каталог, как подкаталог с таким же именем, как имя пользователя, в /home , хотя и не создаст его.Это максимально неинтерактивный пользователь, у него не только установлена фиктивная оболочка (обычным пользователям устанавливают оболочку, например /bin/bash ) но также не установлен домашний каталог, т.е. пользователю просто некуда входить в системе, а также не установлен пароль. С пустым паролем Linux не пустит пользователя, впрочем, об этом ниже.Если попытаться зайти в систему от имени этого пользователя, то получим ошибку Access denied: login as: testusr1 2. Если неинтерактивному пользователю все-таки нужен домашний каталог, например, для хранения конфигураций запускаемых от его имени программ, то домашний каталог вполне можно создать: useradd -g testgrp -m -d /home/testusr2 -s /bin/false testusr2 К опциям -g , -s и -d добавляется опция-m - автоматически создать пользовательский каталогСкрипт adduser, это оболочка над программой useradd, который позволяет указать параметры нового пользователя в диалоговом режиме Пример создания неинтерактивного пользователя: ( Простыня с переводом под катом ) Удобно, красиво, не надо вручную писать опции в командной строке, хотя простыня. Но можно и так, главное, не забыть про фиктивную оболочку /bin/false и, при надобности, пустой пароль.Каждому пользователю в Linux, который хочет получить доступ к терминалу или графической оболочке, должен быть присвоен пароль. Можно провести наглядный эксперимент. 1. Создадим с помощью скрипта adduser нового пользователя testusr4 , только оставим ему некоторые параметры по умолчанию, т.е. домашний каталог и оболочку /bin/bash , изменим только группу на testgrp и зададим ему пароль.2. Попробуем залогиниться: login as: testusr4 Получилось! 3. Выйдем из учетной записи и отредактируем файл /etc/shadow в котором хранятся пароли пользователей (редактируем от имени root ):- Найдем строчку, содержащую информацию о пароле пользователя testusr4 :testusr4:$5$eUbahK8EwlYtD1Nw$ZCH7sMkg.fT - Приведем ее к такому же виду, что у пользователя, например, testusr1 : Т.е. вместо хэша и других свойств пароля, находящегося между вторым и третьим двоеточием, впишем символ восклицательного знака, тем самым удалив их. login as: testusr4 Подробнее прочесть о формате файлов /etc/passwd и /etc/shadow Копия в PDFПредположим, у нас есть интерактивный пользователь testusr5 и эту интерактивность надо пользователю отключить:1. Лишить возможности пользователя входить по паролю, как это было описано выше. 2. Отредактировать файл /etc/passwd, найдя строку пользователя: testusr5:x:1016:1008:,,,:/home/testusr5: И заменить указанную оболочку ( /bin/bash ) на фиктивную (/bin/false ):testusr5:x:1016:1008:,,,:/home/testusr5: Можно заменить запись о домашнем каталоге на /dev/null, если он не нужен, а сам каталог потом удалить с диска: testusr5:x:1016:1008:,,,:/dev/null:/bin/f Интересно, что пользователю в качестве оболочки можно подсунуть не только фиктивную оболочку или обычный shell (bash, sh, zsh и т.д.) но и конкретный скрипт. Тогда, при входе этого пользователя в систему, будет выполняться только этот самый скрипт. Главное, чтоб у пользователя были права на его исполнение. Примечание: Хоть это уже не совсем "неинтерактивный" пользователь, но ради обобщения, пусть будет тут. Внимание! Делайте нечто подобное, когда точно уверены в своих действиях. Если злоумышленник сможет подкорректировать такой скрипт, то сможет и нагадить в системе. Пример: 1. Создадим интерактивного пользователя с домашним каталогом, например, testusr6 , не забыв задать пароль.2. Залогинимся от имени этого пользователя 3. В домашнем каталоге напишем простой тестовый скрипт и дадим ему права на исполнение от имени этого пользователя. #!/bin/bash 4. Выйдем из системы этим пользователем, и от имени root отредактируем /etc/passwd таким образом.Было: testusr6:x:1017:1008:,,,:/home/testusr6: Стало: testusr6:x:1017:1008:,,,:/home/testusr6: 5. Теперь попробуем войти в систему от имени testusr6 :login as: testusr6 После нажатия ENTER сеанс завершится. Как подобную фичу можно использовать на практике, описано здесь: Удаленная перезагрузка сервера под управлением Linux. Перезагрузка Linux без ввода пароля. (копия) Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/11/28/lin Сбой при пересборке ядра Linux (Puppy Slacko)
Прямая ссылка Сбой при пересборке ядра Linux (Puppy Slacko) без включения поддержки UnionFS в ядре. Видеоиллюстрация для лекции, потому что не уверен, будет ли возможность завтра пересобирать криво и прямо ядро перед аудиторией, и пропустят ли туда с личным ноутом. Интернеты есть, а пример хороший, пусть лежит, Ютуб резиновый. Впрочем, если кому-то вдруг понадобится почитать, где именно это в реале встретилось, то вот (копия) Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/11/23/sbo Slackware: Краткая инструкция по настройке Samba
Кто не знает, что это такое. Если говорить по рабоче-крестьянски, инструкция о том, как расшарить в локальную сеть каталог на компьютере с Linux. Про протокол SMB/CIFS и пакет Samba можно почитать по ссылкам в Википедии. Обычно в Slackware сервер Samba доступен "из коробки". Для запуска Samba в Slackware достаточно дать права на исполнение файлу /etc/rc.d/rc.samba и дать команду на запуск:chmod 744 /etc/rc.d/rc.samba Остановка: /etc/rc.d/rc.samba stop Если не надо, чтоб сервер Samba стартовал при загрузке ОС, отбираем права на исполнение: chmod 644 /etc/rc.d/rc.samba Samba прекрасно запускается в сетевом неймспейсе (копия) если это будет надо. В таком случае, Samba надо будет запускать вручную, после того, как нужный namespace настроен, иначе возможны непонятные глюки. Так что в стартовый скрипт, после настройки неймспейсов вставляем команды: echo "Starting samba server..." provns - меняем на имя нужного неймспейса.В скрипт, выполняемый при завершении работы (обычно /etc/rc.d/rc.local_shutdown ) вставляем команду завершения работы Samba-сервера:echo "Stopping samba server..." И отбираем права на исполнение скрипта rc.samba :chmod 644 /etc/rc.d/rc.samba Производим основные настройки в файле /etc/samba/smb.conf
workgroup — рабочая группа (поменяйте на свою)netbios name — имя компьютераserver string — описание (видно, например, в «Сетевом окружении» из Windows)interfaces — сетевой интерфейс, который будет прослушивать Samba-сервер. Можно выставить имена сетевых устройств (например, eth0 ) или задать IPДелаем доступ к каталогам, открытым в Samba анонимным (без логина и пароля): map to guest = bad user Следующие 3 строки нужны, чтоб Samba стал поддерживать символические ссылки. Например для того, чтобы не расшаривать каждый раз новый каталог и не перезапускать Samba, а просто закинуть символическую ссылку в каталог, уже расшареннй в Samba: unix extensions = no log file — куда писать логmax log size — и его максимальный размерПо умолчанию отключаем DNS-proxy и доступ к принтерам: dns proxy = No Секцию [printers] оставляем по умолчанию (все равно все настройки принтеров вырублены в [global] , да и принтеров у меня нет).Иногда полезно создать каталог, чье содержимое доступно в локальной сети только для чтения, например, чтобы пользователь случайно или намеренно не испортил файлы. Пример такой шары из конфига для PXE-сервера. В шаре расположены файлы для Hiren's Boot CD, запускаемого через PXE (копия) Права на файлы, расшаренный каталог и подкаталоги должны быть установлены в 644 (чтение и запись для владельца, чтение для группы, чтение для остальных).В конфиге в отдельной секции описываем шару:
path - путь к каталогу.public - публичный, ставим в yes , т.к. каталог нужно открыть для любого пользователя в локальной сети.browsable=yes - отображение без прямого указания адреса, без этого параметра автоматически не найдется в "Сетевом окружении", например.read only=yes - только чтение.guest ok=yes - пускать любого пользователя.Примечание: Можно расшарить хоть целый раздел. Права на расшариваемый каталог, подкаталоги и файлы надо установить в 777 (читать, исполнять и записывать для всех)Секция в конфиге:
В секции меняется только параметр read only=no Пример отображения в "Сетевом окружении" Windows: Пример конфига на Pastebin Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/08/02/sla Преобразование двоичных (RAW) данных в текстовый шестнадцатеричный формат.
Задача, которую мне поставил клиент, была такая - преобразовать бинарный файл в текст, который можно распечатать и переслать по почте. Чтоб его можно было сканером распознать, и обратно в бинарный файл преобразовать. Ну очень плохо ходят флэшки, и тем более, криптостойкие донглы промеж границ из-за Хуйла, сами понимаете. Пример тестового бинарного файла (в Linux): В Windows: Понятно, что напечатать это нельзя, для распечатки надо преобразовать бинарный RAW-формат в что-то удобопечатоемое, например в строки, содержащие шестнадцатеричные цифры:
В Linux есть сразу несколько инструментов, позволяющих выполнить дамп файла в набор шестнадцатеричных значений, причем "из коробки". Не зря же эта ОС изначально писалась программистами для программистов. Кратко ознакомиться с этими инструментами можно здесь: Convert Binary Data to Hexadecimal (оригинал статьи на буржуйском) Преобразование двоичных данных в шестнадцатеричный формат (Перевод на русский, PDF) Я воспользовался утилитой hexdump , и написал небольшой скрипт, который при вызове его с параметром, содержащим путь к файлу, создает в каталоге с оригинальным файлом файл имя_оригинального_файла.dump , который содержит шестнадцатеричное представление исходного файла:dumpfile <имя_файла> Основной алгоритм укладывается в одну строку: cat $1|hexdump -e '27/1 "%02X " "\n"' >$1.dump 1. Читаем файл, переданный на вход скрипта командой cat .2. Передаем в pipe ( | ) данные hexdump 'у3. Скидываем вывод ( > ) в файл $1.dump Скрипт на GitHub В винде, как обычно - в таких случаях все через жопу, слава Ктулху, нашлись умные люди, которые все сделали за меня на BAT/CMD и доступном в системе JScript. Совместимость - начиная с Windows XP HEXDUMP [/Опция [Значение]]... Записывает содержимое стандартного ввода в шестнадцатеричном виде в стандартный вывод, по 16 байт на строку, используя следующий формат: ООООООО ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ХХ ААААААААААААААААА где: 0000000 = шестнадцатеричное смещение в пределах файлаXX = шестнадцатеричное значение байтаAAAAAAAAAAAAAAAA = байты в формате ASCII (управляющие коды и не-ASCII в виде . [символ точка])Вывод кодируется как ASCII, каждая строка завершается символом CarriageReturn - перевод строки. Поведение можно изменить, добавив любую комбинацию следующих параметров: - /I InFile — ввод из InFile вместо стандартного ввода- /O OutFile — вывод в OutFile вместо stdout: — перезаписывает InFile - /NA - отключить вывод ASCII-символов.- /NO - отключить вывод смещений- /R - Необработанный шестнадцатеричный код в одной строке без пробелов между байтами.- /LF - LineFeed как признак конца строки (UNIX-формат) вместо CarriageReturn LineFeed (по умолчанию, формат Windows)- /NL - без разделителей строк, весь вывод в одной строке без разделителей строк- /U - вывод в кодировке Unicode с BOM (UTF-16)- /V - Вывести информацию о версии- /? - Вывести эту справкуHEXDUMP.BAT версии 2.1 был написан Дэйвом Бенхамом.и поддерживается на https://www.dostips.com/forum/viewt Вывод в файл (пример): hex_dump.bat /I test.temp /O test.temp.dump /NA /NO Вывод на консоль: hex_dump.bat /I test.temp /NA /NO Пример вывода на консоль:
С GitHub Перевод помощи к скрипту Источник Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/07/25/pre Аналог линуксовой команды cat в Windows
Внезапно, есть. Формат командной строки: TYPE [диск:][путь]имя_файла Примеры: type /? - отобразить подсказку по использованию.type mytextfile.txt - вывести на экран содержимое текстового файла mytextfile.txt текущего каталога.type mytextfile.txt | more - вывести на экран содержимое текстового файла mytextfile.txt в постраничном режиме.type mytextfile.txt > D:\newfile.txt - перенаправление вывода команды type в файл, т.е. копирование текстового файла mytextfile.txt в текстовый файл D:\newfile.txt .type bigfile.iso > nul - вывод файла на фиктивное устройство nul , что эквивалентно просто чтению заданного файла.При выводе на экран нетекстовых файлов, байты, содержимое которых представлено неотображаемой частью таблицы ASCII ( 0x00 – 0x1F ) интерпретируется как служебные символы, что выражается в непредсказуемом перемещении курсора, выводе звука, очистке окна и т.п.Источник Совместимость: DOS 6.x и выше. Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/07/21/ana UPD к предыдущему посту про tcplay.
TCPLAY: шифрование несистемного раздела. (копия) TCPLAY: шифрование несистемного раздела.
Как шифровать системный раздел и сделать загрузочную флешку c initrd для шифрованного Linux, можно найти по тегу tcplay (копия) Linux: Отключение проверки SSL-сертификатов в git.
Внимание! Так делать не рекомендуется всеми официальными источниками, но если очень надо, то можно. Используйте на свой страх, риск и хвост! Если, при клонировании репозитория ( git clone https://example.org/project.git ) случилось следующее:Cloning into 'project '... То сертификат, либо сайта, либо один из корневых в вашей системе просрочен. Примечание: Интернет-адреса условные для примера. git config --global http.sslVerify "false" Выполнять надо от root .После этого git не будет проверять валидность сертификатов из любых источников. git config --global http.sslVerify "true" Т.е. если такой баг только на каком-то одном сайте, то можно выключить, скачать и снова включить. Но помните, это глобальный параметр. Не включите обратно, так и будет игнорировать сертификаты. Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/06/26/lin Sqlite3 для Slackware
Пост для бэкапа, вдруг если что искать потом буду. Linux: завершение работы в определенное время.
Понадобилось подготовить оборудование к отключению в определенное время (отключение электричества от энергокомпании), оборудование разное, под Linux и Windows, сейчас расскажу про Linux. Проще всего воспользоваться Cron. Конфигурационный файл Cron не рекомендуется редактировать вручную, тому ще файл один, для всех пользователей, но утилита crontab его аккуратно собирает, разбирает, и подсовывает собственно планировщику (cron ). Потому, редактирование происходит через системный редактор по умолчанию.В Slackware системным редактором по умолчанию является неудобный vim , вот инструкция, как заменить его на что-то более удобоваримое:Slackware: замена основного (системного) консольного редактора на нормальный. (копия) Задача, это, собственно, задача - т.е. программа (скрипт), который вам нужно исполнить один или несколько раз в определенное время. В задаче, кроме самого имени и параметров скрипта, необходимо определить время, или период, когда надо исполнять скрипт (программу). Краткий синтаксис задачи в Cron: минута[ПРОБЕЛ]час[ПРОБЕЛ]день[ПРОБЕЛ]мес Если нужны не все параметры, то их можно проигнорировать, указав, например, вместо дня недели символ * (звездочка).Например, мне нужно отключить оборудование в 12.00 11 марта: Можно добавлять строки комментариев, начинающиеся с # .# Shutdown server Примечание: Если необходимо выполнить задачу от имени пользователя, то и настройку Cron надо выполнять от имени этого пользователя. Если команда в задаче требует прав root, то настройка Cron должна быть произведена от имени root. Осуществляется командой: crontab -l Корректный запуск редактирования конфигурационного файла Cron осуществляется командой: crontab -e Настройка Cron от Losst (копия в PDF) ЗЫ. Проверил, все работает. Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/05/11/lin Slackware: замена основного (системного) консольного редактора на нормальный.
Понадобилось кое-чего поднастроить в Cron, ввожу crontab -e и попадаю в б-гомерзкий vim . А в системе есть и nano и mcedit , гораздо более удобные и человеческие. Надо перенастроить.1. Прописываем переменную EDITOR в скрипте автозагрузки (в /etc/rc.d/rc.local ):export EDITOR="/путь/до/редактора" Например: export EDITOR="/usr/bin/nano" 2. Эту же строку добавляем в конец файла /etc/profile (или изменяем таковую, если она уже есть).3. При необходимости добавляем (изменяем) эту же строку в файлах ~/.bashrc или ~/.bash_profile в пользовательском(их) каталоге(ах).1. Нажать ESC 1 раз (иногда дважды) 2. Если не вносили изменений, надо ввести :q (двоеточие и q )3. Если успели что-то напортить :q! (двоеточие q и восклицательный знак), vim закроется, не сохранив файл.Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/05/11/sla Slackware Linux: Тестовый бредогенератор. Libastral for Slackware
Собираю свой сервер видеонаблюдения (большой такой видеоглазок со свистелками и перделками) на базе Slackware, ибо оная идет на старом железе типа третьих пеньков, которых как говна за баней. Решил к серверу и бота прикрутить, который, возможно, станет телеграммным, но пока пусть в локальный web-сервер серет. Чтоб потестить бота, надо было бредогенератор, т.е. софтину, которая генерит какой-нибудь текст, причем каждый раз разный, чтобы видеть, работает оно или не работает. Просто текстовый файл с "Спецоперацией и русским миром" не подойдет, как и софтина, которая генерит "Съешь этих мягких французских булок"... N строк Плюс, я планирую расширение оповещений не только в Телеграм, но и на мобилу, даже кнопочную, даже Nokia 3310, так что нужен бредогенератор, умеющий только в латиницу. Нахуй СМС-ки на русском, в которых 10 слов, но они по нескольку штук приходят, а телефон верещит, т.к. русские буквы в кодировке СМС занимают 2 байта вместо одного. Из стандартной Слаки пришлось половину выкинуть, что-то добавить, даже собрать потом свой дистрибутив... Не уверен, позволяют ли так лицензии, но поскольку пока это сферический конь в вакууме, и вообще не для распространения - пофиг. Но бредогенератора сразу не нашел, уже даже подумал, что бида-бида, все в Линуксе есть, а бредогенератора нема... Но нашлося! + Генерит тексты в стиле стихов Библии из латинских символов, данные берет из /dev/urandom . В исходнике можно переключить режим генерации текстов на plain, т.е. текст без разбивки.+ Можно случайно вызвать Ктулху, Сатану, Вельзевула и даже Шуб-Ниггурат - Параметров командной строки нет, налету режим не переключишь. .Под Slackware не собиралась, пришлось немного подправить Makefile .Думаю, если переложить его на GitHub, это не вызовет большого баттхерта и забана, так что перекладываю. Оригинальный проект Репозиторий с исходниками Готовый пакет Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/04/26/sla Linux: bash, получить случайный символ из заранее заданной строки
Задана, например, такая строка: PGSTRING='#$%@!?0' Задача - получить из строки с паттерном случайный символ. STRLEN=`expr length "$PGSTRING"` Если вывести переменную STRLEN для строки выше, будет следующее:Len: 7 expr есть в coreutils , так что должен быть практически вездеПолучить случайное число из заданного диапазона можно командой shuf , например:shuf -i x-x1 -n1 где: x-x1 - диапазон чисел-nX - X - количество цифр в числе.Получаем случайное число: RNUM=`shuf -i 1-$STRLEN -n1` Вывод: R Num: 3 Отправляем строку на консоль: echo -e -n "$PGSTRING" И перенаправляем команде cut :Для того, чтобы вырезать командой cut символ, или группу символов из строки, нужно указать первый и последний символ. Например: cut -c1-5 Применяем все вышесказанное: RCHAR=`echo -e -n "$PGSTRING"|cut -c$RNUM-$RNUM` Вывод: Char: %
Использование: getrandchar $PGSTRING Копия функции на PasteBin Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2023/02/07/lin Shred для Windows, перевод краткой справки и эксперимент с параметрами программы
Что такое shred ? Это опенсорсный "уничтожитель" файлов, т.е. программа затирает (забивает случайными данными) файл на диске, чтобы невозможно было его восстановить средствами восстановления файлов, например, чтобы окончательно удалить конфиденциальные данные, доступ к которым может получить злоумышленник. shred входит во многие дистрибутивы Линукс, но есть версии и под другие ОС. Тут буду экспериментировать и описывать версию для windows.Друзья попросили перевести на русский краткую справку, а заодно уж я поэкспериментировал с параметрами, чтобы подобрать оптимальные для повседневного использования. Внимание! Идеальный уничтожитель данных, во всяком случае, с HDD-дисков, это молоток, с последующей обработкой диска в костре на березовых дровах, а всего оставшегося в микроволновке. Использование: shred.exe [ОПЦИИ] ФАЙЛ1 [ФАЙЛ2 ФАЙЛ3 ...] Внимание! Под рукой у меня нет лаборатории и оборудования разных там контор, тем более, проводил я их на скорую руку и довольно дилетантски, так что на абсолютную истину не претендую. Используйте все нижесказанное на свой страх, риск и хвост! Условия: - Windows 7 Professional x64 - SATA HDD Seagate, 500 GB - FS: NTFS - форк shred (ниже дам ссылку)Проверял работу затиралки WinHex'ом 19.9[https://www.x-ways.net/winhex/] x64, не самым свежим, но даже лицензионным (мне его кто-то подарил), на самом деле, следов мелких файлов я так и не обнаружил, так что сразу говорю, почти все тесты shred прошел, и мне лень делать скрины с WinHex'а, а теперь о параметрах:Внимание! Не советую использовать опцию -u , т.е. удаление файла. shred его просто удалит, не поменяв ему имя на случайное, как это делают многие "затиралки", потому, если вы затираете файл, например, с именем, путин бомба взрыв бомбас.doc , то понятно кто хоть содержания файла и не увидит, но выводы сделает. Так что после shred файл лучше обработать напильником, т.е. переименовать его случайным набором символов, или неслучайным, например, мой_кот.jpg , а после этого удалять штатными средствами ОС.Количество итераций: т.е. опция -n <число> или --iterations=<число> На ваше усмотрение, я не заметил разницы в WinHex'е между 3, которые выставил я, и 25 по умолчанию, но стоит ли лишний раз насиловать HDD или SSD перезаписями... Не знаю. Дозапись файла: опция -s <число> (--size=<число>) Дозаписывает файл числом байт (случайных). Если использовать после числа без пробела K M или G , то, соответственно -кило -мега или -гига байт. На мой взгляд, это излишне, найдут у вас в директории C:\DOC файл мой_кот.jpg размером в 5Гб и удивятся. Но вообще можно, shred с файловой системой обращается аккуратно и другие файлы не затрет.Забить все нолями: Опция -z (--zero )На последней итерации затирания, shred перезаписывает весь файл символом с кодом 0 . На мой взгляд, довольно полезная опция, при использовании рекомендаций по переименованию файла и удалению, после затирания. "А хрен знает, товарищ майор, что это у меня за файл был с названием dfghuyty.13 в D:\DOC , вирус, наверное."(Не)дописывать до кластера: Опция -x В Linux'овой версии shred эта опция включает не дописывание до кластера, самое странное, что в Windows-версии наоборот, отключает.Небольшое пояснение. В стандартных файловых системах файл занимает 1 кластер на диске. Т.е. файл, какого бы размера он не был, займет, как минимум 1 кластер. Размер кластера устанавливается настройками ОС, также его можно изменить при форматировании (иногда). Например, кластер в NTFS при стандартном форматировании равен 4Кб, т.е. 4096 байт, потому, даже если файл фактически занимает 4 байта, например, текстовый файл с содержимым 1234 , он все равно будет занимать 1 кластер. Если файл больше одного кластера, то автоматически он займет весь следующий, даже если в файле 4096+1 байт, и т.д.Если (в Windows-версии shred ) применить опцию -x к файлу 3.txt , который содержит 4 байта (текст 1234 , например), то shred и запишет 4 случайных байта.Мое мнение: опцию -x не использовать, пусть уж затирает кластер целиком.Оптимальный вариант опций для мелких повседневных задач (затереть небольшой файл): shred -n 3 -z <file_or_mask> где <file_or_mask> - файл или маска файлов.Позже напишу батник, который будет затертые файлы рандомно переименовывать и удалять. С Mega.NZ Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2022/12/19/shr Скрипт для тестирования сетевых соединений. Инструкция.
Друзья из одной небольшой фиромочки попросили написать небольшой скрипт для тестирования соединений, чтобы быстро понять, где отвалилось. Например, упал роутер, не отвечает внутренний сервер, упал провайдер, или сдох VPN. Попросили сделать кросивое, с этим тоже справился, ошибки выделяются красным цветом, пройденные этапы зеленым, можно включить или отключить звуковое оповещение через PC-speaker. + Последовательно проводить два вида тестов: ping и получение страницы (или файла) с web-сервера+ Оповещать пользователя об ошибках или пройденных тестах, с цветным текстом. + Выдавать звуковые сигналы об успешном завершении теста, или об ошибке на PC-speaker. Для звуковых оповещений должен быть настроен PC-speaker и установлена утилита beep (копия). Последовательность операций задается в конфигурационном файле. Конфигурационный файл состоит из строк следующего формата: операция|адрес|отображаемое описание|прервать/игнорировать Пока поддерживаются только две операции: ping - для ping'а адресаgetp - для получения страницы или файла с WEB-сервера (с помощью wget )адрес - адрес, WWW для getp , IP или WWW для ping .отображаемое описание - описание операции, текст, который будет выводиться на консоль.прервать/игнорировать - при ошибке операции, если указано ключевое слово break, скрипт останавливает работу и выводит сообщение о том, что в ходе тестирования произошли ошибки. Если указать иное значение, например, skip , то скрипт продолжит производить тесты, пока не закончится конфигурационный файл, или пока не будет следующий сбой в тесте, где указана опция break .Названия операций и break нечувстивительны к регистру (т.е. можно написать Ping , ping или Getp , GeTP или BreaK , breaK ).Первые два поля (операция и адрес) являются обязательными. Если они не будут указаны, скрипт будет прерван на строке с ошибкой:
Если не будет указано поле описания, то оно будет по умолчанию установлено в значение No desription :Если последнее поле не будет заполнено, то оно принимает значение break .Если в первом поле будет неверно указанный код операции, то скрипт его проигнорирует, выдав соответствующее сообщение, продолжит выполнять другие операции, но завершится с ошибкой: Ping|192.168.0.1|Main router|break #Main router ping Для разделения полей используется символ | В конфигурационном файле можно использовать комментарии, начинающиеся с символа # , все, что находится после этого символа - игнорируется. Пустые строки также игнорируются.#inettest.cfg example Скрипт не имеет параметров командной строки, основные настройки осуществляются через переменные самого скрипта: CONFIG - путь к конфигурационному файлу, например CONFIG="./inettest.cfg" . Если конфигурационный файл не будет найден, скрипт выдаст ошибку:CRITICAL ERROR: Config file ./inettest.cfg not exist! NOCOLOR - если значение равно 0 , включить вывод цветного текста на консоль, если 1 - отключить. По умолчанию 0 NOCOLOR=1 :NOSOUNDP - включение ( по умолчанию 0 ) или отключение (1 ) звука в процессе тестов. Звук выдается после каждого отдельного теста.NOSOUNDF - аналогично предыдущей переменной, только звук звучит после окончания всех тестов или их прерывания.NOADDR - 0 , включить тестируемый адрес в вывод скрипта, 1 - не включать.NOADDR=0 :NOADDR=1 :PACKETS - количество пакетов для команды ping (по умолчанию PACKETS=3 )TIMEOUT - тайм-аут для получения страницы или файла (в скрипте делается с помощью wget , по умолчанию TIMEOUT=5 )Конфиг: Ping|192.168.0.1|Main router|break #Main router ping Результат: ping :1 — No reply (не один из пакетов до пингуемого адреса не дошел) 2 — Other error (другая ошибка, в большинстве случаев — «сеть недоступна»). getp (wget ):1 — Иная / общая ошибка (generic error code) 2 — Ошибка в параметрах командной строки или файлах конфигурации (.wgetrc или .netrc) 3 — Ошибка файлового ввода/вывода (I/O error) 4 — Ошибка сети (например, при обрыве связи) 5 — Ошибка SSL 6 — Ошибка идентификации (неправильное имя пользователя или пароль) 7 — Ошибка протокола 8 — Ошибка сервера (например, нужный файл на сервере не найден, ошибка 404) 0 - Ошибок в ходе тестов не произошло. 1 - Произошла хотя бы одна ошибка. Репозиторий на GitHub Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2022/10/21/skr Linux: как проверить в скрипте, пингуется ли адрес.
Оказалось все очень просто. Естественно, для анализа работы ping в скрипте, нам потребуются коды возврата. К сожалению, в официальном man для команды ping их, почему-то забыли указать.0 - Success (хоть один из пакетов дошел до адреса) 1 - No reply (не один из пакетов до пингуемого адреса не дошел) 2 - Other error (другая ошибка, в большинстве случаев - "сеть недоступна"). На всякий случай Если произошла ошибка с кодом 2 , то команда ping выводит на stderr сообщение об ошибке, например:ping 8.8.8.8 -c 3 ping является полуинтерактивной командой, и показывает параметры отправленных пакетов (см. на PasteBin), если это не нужно, можно отключить вывод стандартным способом, перенаправив вывод команды ping из stdin и stderr в /dev/null , например:ping 8.8.8.8 -c 3 >/dev/null 2>/dev/null где: >/dev/null - перенаправление stdin в нуль-устройство2>/dev/null - перенаправление stderr в нуль-устройствоПростейшее использование команды ping в скрипте:
Копия на PasteBin smallwolfie@wolfschanze:~/nettest$ ./testping 8.8.8.8 Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2022/10/06/lin Цветной текст в консоли Linux #3. Улучшаем совместимость скрипта.
Друзья ketmar и grusha отправили мне несколько ценных замечаний по поводу покраски консоли из скрипта (копия). Решил про них здесь отдельно написать, и модифицировать скрипт Решил начать с него, оно более важное. Впрочем, отдельно ему посвятил маленькую заметку (копия), где описал проблему и ее решение, так что осталось только применить, оборачиваю основной код функции echoc() в if , осушествляющий проверку, вызвали ли скрипт в терминале или в потоке:
Если не в терминале, просто выводим обычный текст без ESC-кодов: В функции echocn() поступаем аналогично, просто к вызову echo не забываем добавить пареметр -n :
коды для яркости не входят в общепринятый стандарт VT-100, это расширение, и поддерживается далеко не всеми. один из стандартных способов увеличить яркость — включить полужирный режим: "\e[1;32m". да, это не работает для фона, стандартного метода для фона нет.. Т.е. максимально совместимыми цветами с терминалом являются только первые 7: коды 30..37 для текста, 40..47 для фона, дефолтные коды 39 и 49 для текста и фона соответственно (см. таблицу из предыдущей заметки (копия)).Коды для яркости текста ( 90..97 ) и фона (100..107 ) расширение стандарта и поддерживаются не всеми терминалами. Для текста есть способ увеличить яркость - включить полужирный режим: семь цветов плюс полужирный с расчётом на то, что это давно уже яркость текста.Итого, получаем вот такую таблицу совместимых цветов:
Код сброса: \x1b[0m - сбрасывает настройки консоли (цвет текста, фона и стиль) к значению по умолчанию. Он работает нормально.Заодно уж выбросил из таблицы стилей "мигающий" и "невидимый", которые объективно не работают:
Массивы с кодами цветов теперь выглядят так (массив с именами показан для лучшего понимания): NAMES=(Default Black DarkRed DarkGreen DarkYellow DarkBlue DarkMagenta DarkCyan Gray DarkGray Red Green Yellow Blue Magenta Cyan White) И подправляем вывод:
Вывод в терминал: Вывод в файл: ./esccolorscomp >test.txt Замечание #3. Об использовании tput Я задал вопрос, а не проще ли вместо ESC-кодов использовать tput , о чем я уже писал (копия). Ответ был таким: Он требует установленого ncurses , в общем и целом — никто не гарантирует его наличия.На GitHub Это репост с сайта http://tolik-punkoff.com Оригинал: https://tolik-punkoff.com/2022/10/05/tsv |