Так, самое время подвести итоги с картами «Релиз».
Больше всего реакций набрал комментарий Алексея Агафонова (supmea), по итогу 39 огоньков.
На втором месте Александр Смирнов (wddingo) с 38 лайками за комментарий:
Ну и третье место занял Максим (Rosssich), набрав 30 респектов за комментарий:
На этой неделе к вам придет Макс и узнает куда засылать призы. Ждите.
Нюансы. На руках у меня всего одна колода, она отправится в приоритете Алексею, остальные две вышлем в ближайшее время, как получим их от организатора. Ну либо закинем рублей на карту, чтобы вы самостоятельно заказали их через Авито и не парились на почте.
Всем спасибо за участие, вы все лучшие!
Больше всего реакций набрал комментарий Алексея Агафонова (supmea), по итогу 39 огоньков.
Привести в порядок всё, чтоб не стыдно перед последователями было. А доступы и так оставят и почту. Ещё и докучают что-либо сделать. А мы идём на большие деньги смотреть как у других всё сделано не так как нужно
На втором месте Александр Смирнов (wddingo) с 38 лайками за комментарий:
Самое гадкое, что можно было им сделать - я сделал, я ушел с этой работы. Пусть теперь сами с этим говном разбираются. А пакостить - это считаю слишком мелочным
Ну и третье место занял Максим (Rosssich), набрав 30 респектов за комментарий:
а вообще - ключевое слово "не заплатили". поэтому заявление в трудовую инспекцию, суд и т.д. там можно урона нанести больше чем от всяких там chaosmonkey )
На этой неделе к вам придет Макс и узнает куда засылать призы. Ждите.
Нюансы. На руках у меня всего одна колода, она отправится в приоритете Алексею, остальные две вышлем в ближайшее время, как получим их от организатора. Ну либо закинем рублей на карту, чтобы вы самостоятельно заказали их через Авито и не парились на почте.
Всем спасибо за участие, вы все лучшие!
И снова здравствуйте. Давай сегодня немного в кишках покопаемся.
Запускаем бессмысленную команду:
И наблюдаем как строка статистики постоянно меняется.
В простонародье — рефрешится.
Бесполезная? Ну не скажи, с её помощью можно протестировать скорость чтения и записи.
ㅤ
Эта команда копирует блоками нули из спец-файла в другой. Записывая статистику на стандартный вывод ошибок stderr.
Строка статистики постоянно меняется. Но как dd это делает? Давай разберемся ниже.
Запускаем страшную кишку и немного ждем
По итогу получаем, что-то подобное:
Портянка с read означает — ждем 4 секунды, считываем первую строчку ввода и сохраняем ее в переменную REPLY, а далее выводим содержимое переменной на экран.
✔ Не так уж и страшно, правда?
Ааа, херовина
Ну дак вот.
Получается утилита dd, пишет статистику за секунду в стандартный поток ошибок и затем суёт символ
Который означает - возврат каретки.
Вот и вся магия.
Делаем хак, чтобы избавиться от возврата каретки:
Теперь статистика выводится в столбик:
Нагляднее? Конечно!
Что с этим можно сделать? Ну например протестировать скорость чтения и записи, используя разный размер буферов.
Херачим Bash скрипт:
Запускаем и получаем:
Круто? Да охуеть!
Ну а если нужна статистика за пять секунд. Делаем 5+1 к количеству записей и индексу массива. Массив начинается с нуля. Но можешь это изменить с помощью опции -O.
По итогу имеем статистику за 5 секунд:
Вот такие пироги. Теперь можешь тестировать VPSки и писать статью на хабру с бенчмарками.
Давай, увидимся завтра!
tags: #linux #bash
—
🔔 @bashdays
Запускаем бессмысленную команду:
dd if=/dev/zero of=/dev/null status=progress
И наблюдаем как строка статистики постоянно меняется.
В простонародье — рефрешится.
4254480896 bytes (4.3 GB, 4.0 GiB) copied, 4.77966 s, 890 MB/s
Бесполезная? Ну не скажи, с её помощью можно протестировать скорость чтения и записи.
ㅤ
Эта команда копирует блоками нули из спец-файла в другой. Записывая статистику на стандартный вывод ошибок stderr.
Строка статистики постоянно меняется. Но как dd это делает? Давай разберемся ниже.
Запускаем страшную кишку и немного ждем
dd if=/dev/zero of=/dev/null status=progress |& { read -t 4; echo "${REPLY@Q}"; }По итогу получаем, что-то подобное:
$'\r927888896 bytes (928 MB, 885 MiB) copied, 1 s, 928 MB/s\r1851585024 bytes (1.9 GB, 1.7 GiB) copied, 2 s, 926 MB/s\r2749514752 bytes (2.7 GB, 2.6 GiB) copied, 3 s, 917 MB/s'
Портянка с read означает — ждем 4 секунды, считываем первую строчку ввода и сохраняем ее в переменную REPLY, а далее выводим содержимое переменной на экран.
Ааа, херовина
|& нужна, чтобы объединить stdout и stderr и затем направить его в read.Ну дак вот.
Получается утилита dd, пишет статистику за секунду в стандартный поток ошибок и затем суёт символ
«\r». Который означает - возврат каретки.
Вот и вся магия.
Делаем хак, чтобы избавиться от возврата каретки:
dd if=/dev/zero of=/dev/null status=progress |& tr '\r' '\n'
Теперь статистика выводится в столбик:
1836032000 copied, 2 s, 918 MB/s
2793336832 copied, 3 s, 931 MB/s
3726170624 copied, 4 s, 932 MB/s
4655933440 copied, 5 s, 931 MB/s
Нагляднее? Конечно!
Что с этим можно сделать? Ну например протестировать скорость чтения и записи, используя разный размер буферов.
Херачим Bash скрипт:
#!/bin/bash
for i in {9..20}
do
bs=$((2**i))
dd bs="$bs" if=/dev/zero of=/dev/null status=progress |& {
mapfile -d$'\r' -n 2; printf '%-8s : %s\n' "$bs" "${MAPFILE[1]}"; }
done
exit
Запускаем и получаем:
512 : 878647296 copied, 1 s, 879 MB/s
1024 : 1618295808 copied, 1 s, 1.6 GB/s
2048 : 3096260608 copied, 1 s, 3.1 GB/s
4096 : 5056294912 copied, 1 s, 5.1 GB/s
8192 : 8047247360 copied, 1 s, 8.0 GB/s
Круто? Да охуеть!
Ну а если нужна статистика за пять секунд. Делаем 5+1 к количеству записей и индексу массива. Массив начинается с нуля. Но можешь это изменить с помощью опции -O.
#!/bin/bash
for i in {9..20}
do
bs=$((2**i))
dd bs="$bs" if=/dev/zero of=/dev/null status=progress |& {
mapfile -d$'\r' -n 6; printf '%-8s : %s\n' "$bs" "${MAPFILE[5]}"; }
done
exit
По итогу имеем статистику за 5 секунд:
512 : 4667945472 copied, 5 s, 934 MB/s
1024 : 8693190656 copied, 5 s, 1.7 GB/s
2048 : 15988561920 copied, 5 s, 3.2 GB/s
4096 : 27510878208 copied, 5 s, 5.5 GB/s
8192 : 39937343488 copied, 5 s, 8.0 GB/s
Вот такие пироги. Теперь можешь тестировать VPSки и писать статью на хабру с бенчмарками.
Давай, увидимся завтра!
tags: #linux #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
С утра успешно победил всех антагонистов и теперь самое время сделать что-то полезное.
Сегодня разбираем проблемный Bash скрипт.
А проблема заключается в том, что скрипт удаляет файлы, которые содержат в именах цифры.
За качество скрипта тереть не будем. Нам нужно задебажить проблему, ведь явных команд на удаление в этом скрипте — нет.
Для начала, давай создадим вводные, чтобы было с чем работать.
Так, создали 6 файлов с разными именами:
Модифицируем проблемный скрипт, чтобы он выводил строку с командой
Запускаем и получаем красивое:
Смотрим что у нас осталось, хуяк и вместо 6 файлов, у нас осталось всего лишь 3 штук.
Куда блядь делось остальное? Вокруг да около ходить не будем.
Дело в том, что в одном каталоге не может быть двух файлов с одинаковым названием. Очевидно? Да!
Как работает
Если <новое имя> это существующее имя файла, тогда оно будет удалено, а <старое имя> получит имя <новое имя>.
ㅤ
Если взять нашу ситуацию, то произошло следующее:
1. Удалено 01.txt. и 001.txt -> 01.txt
2. Удалено 02.txt. и 002.txt -> 02.txt
3. Удалено 03.txt. и 003.txt -> 03.txt
✔ Итого потеряли 3 файла, печаль.
Теперь давай более наглядно. Удаляем подопытные файлы и создаем новые. Плюс запишем в каждый файл его имя.
Получилось 6 файлов, в каждом файле содержится имя самого файла.
Смотрим что получилось:
Снова модифицируем скрипт и задаем опцию
Выполняем скрипт и смотрим что у нас осталось от файлов.
Теперь смотрим содержимое самих файлов и преисполняемся.
По итогу, если нужно пронумеровать файлы, позаботься об уникальности имён и заранее протестируй на тестовых данных. Чтобы случайно к херам не снести все ассетсы с продакшена.
Ну и всегда обрабатывай исключения если файл уже существует, чтобы не остаться без штанов.
Изучай, всего тебе самого наилучшего!
tags: #linux #bash
—
🔔 @bashdays
Сегодня разбираем проблемный Bash скрипт.
#!/bin/bash
i=0
for name in `ls *.txt`
do
i=$[i+1]
mv $name `printf "%02d" $i`.txt
done
А проблема заключается в том, что скрипт удаляет файлы, которые содержат в именах цифры.
За качество скрипта тереть не будем. Нам нужно задебажить проблему, ведь явных команд на удаление в этом скрипте — нет.
Для начала, давай создадим вводные, чтобы было с чем работать.
mkdir /tmp/test
cd /tmp/test
touch {001..003}.txt {01..03}.txt
Так, создали 6 файлов с разными именами:
01.txt
02.txt
03.txt
001.txt
002.txt
003.txt
Модифицируем проблемный скрипт, чтобы он выводил строку с командой
mv перед её выполнением:#!/bin/bash
i=0
for name in `ls *.txt`
do
i=$[i+1]
echo 'DEBUG: mv' $name `printf "%02d" $i`.txt
mv $name `printf "%02d" $i`.txt
done
exit 0
Запускаем и получаем красивое:
DEBUG: mv 001.txt 01.txt
DEBUG: mv 002.txt 02.txt
DEBUG: mv 003.txt 03.txt
DEBUG: mv 01.txt 04.txt
DEBUG: mv 02.txt 05.txt
DEBUG: mv 03.txt 06.txt
Смотрим что у нас осталось, хуяк и вместо 6 файлов, у нас осталось всего лишь 3 штук.
ls
04.txt
05.txt
06.txt
Куда блядь делось остальное? Вокруг да около ходить не будем.
Дело в том, что в одном каталоге не может быть двух файлов с одинаковым названием. Очевидно? Да!
Как работает
mv:mv <старое имя> <новое имя>
Если <новое имя> это существующее имя файла, тогда оно будет удалено, а <старое имя> получит имя <новое имя>.
ㅤ
Если взять нашу ситуацию, то произошло следующее:
1. DEBUG: mv 001.txt 01.txt
2. DEBUG: mv 002.txt 02.txt
3. DEBUG: mv 003.txt 03.txt
4. DEBUG: mv 01.txt 04.txt
5. DEBUG: mv 02.txt 05.txt
6. DEBUG: mv 03.txt 06.txt
1. Удалено 01.txt. и 001.txt -> 01.txt
2. Удалено 02.txt. и 002.txt -> 02.txt
3. Удалено 03.txt. и 003.txt -> 03.txt
Теперь давай более наглядно. Удаляем подопытные файлы и создаем новые. Плюс запишем в каждый файл его имя.
for i in {001..003}.txt {01..03}.txt; do echo $i > $i;doneПолучилось 6 файлов, в каждом файле содержится имя самого файла.
Смотрим что получилось:
ls -la
8 Jul 10 08:05 001.txt
8 Jul 10 08:05 002.txt
8 Jul 10 08:05 003.txt
7 Jul 10 08:05 01.txt
7 Jul 10 08:05 02.txt
7 Jul 10 08:05 03.txt
Снова модифицируем скрипт и задаем опцию
-b для утилиты mv. Теперь для существующего файла будет создаваться резервная копия. Бекап ёпта!#!/bin/bash
i=0
for name in `ls *.txt`
do
i=$[i+1]
echo 'DEBUG: mv' $name `printf "%02d" $i`.txt
mv -b $name `printf "%02d" $i`.txt
done
exit 0
Выполняем скрипт и смотрим что у нас осталось от файлов.
ls -la
7 Jul 10 08:05 01.txt~
7 Jul 10 08:05 02.txt~
7 Jul 10 08:05 03.txt~
8 Jul 10 08:05 04.txt
8 Jul 10 08:05 05.txt
8 Jul 10 08:05 06.txt
Теперь смотрим содержимое самих файлов и преисполняемся.
По итогу, если нужно пронумеровать файлы, позаботься об уникальности имён и заранее протестируй на тестовых данных. Чтобы случайно к херам не снести все ассетсы с продакшена.
Ну и всегда обрабатывай исключения если файл уже существует, чтобы не остаться без штанов.
Изучай, всего тебе самого наилучшего!
tags: #linux #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
ДА или НЕТ? Давай разберемся!
Запускай:
Получаем интерактивный запрос:
Выбор зависит от потребности. Либо да, либо нет. Но что вводить? Очевидно же — y или n.
Справедливо. Но что если… Запускаем:
Выхлоп:
Это все возможные варианты, которыми ты можешь воспользоваться. Если вместо «y» ты введешь знак «+» — файл удалится.
Аналогично можно ввести 0 или 1. Либо «Д» или «Н».
Не везде из коробки прописаны такие регулярки, например на англоязычной убунте хуй с маслом.
Функция оценивающая ответ пользователя, учитывает локализацию.
ㅤ
Для подтверждения, или отмены может быть использован любой символ в квадратных скобках из вывода вышеприведённой команды.
А любой символ не совпадающий с символами из набора
Как на это можно повлиять?
Всё это забиндино в файлах которые лежат в папке:
Например, в файле ru_RU есть такое:
Тут присутствует как раз «0» и «1» / «+» и «-».
Если хочется упороться, можешь собрать свою локаль и добавить свои символы в регулярку:
После первой команды, нужно отредактировать файл
Такие вот перлы и приколы. Изучай.
👉 Многие этого ждали, завтра закину анонс про личное наставничество и обучение в рамках проекта Linux Factory.
tags: #linux
—
🔔 @bashdays
Запускай:
cd /tmp
touch bashdays.txt
rm -i bashdays.txt
Получаем интерактивный запрос:
rm: remove regular empty file 'test.txt'?
Выбор зависит от потребности. Либо да, либо нет. Но что вводить? Очевидно же — y или n.
Справедливо. Но что если… Запускаем:
locale -k noexpr yesexpr
Выхлоп:
noexpr="^[-0nNНн]"
yesexpr="^[+1yYДд]"
Это все возможные варианты, которыми ты можешь воспользоваться. Если вместо «y» ты введешь знак «+» — файл удалится.
Аналогично можно ввести 0 или 1. Либо «Д» или «Н».
Не везде из коробки прописаны такие регулярки, например на англоязычной убунте хуй с маслом.
noexpr="^[nN]"
yesexpr="^[yY]"
Функция оценивающая ответ пользователя, учитывает локализацию.
ㅤ
Для подтверждения, или отмены может быть использован любой символ в квадратных скобках из вывода вышеприведённой команды.
А любой символ не совпадающий с символами из набора
yesexpr будет равносилен отмене, в том числе и пустой ввод.Как на это можно повлиять?
Всё это забиндино в файлах которые лежат в папке:
/usr/share/i18n/localesНапример, в файле ru_RU есть такое:
LC_MESSAGES
yesexpr "^[+1yY<U0414><U0434>]"
noexpr "^[-0nN<U041D><U043D>]"
yesstr "<U0434><U0430>"
nostr "<U043D><U0435><U0442>"
END LC_MESSAGES
Тут присутствует как раз «0» и «1» / «+» и «-».
Если хочется упороться, можешь собрать свою локаль и добавить свои символы в регулярку:
cp /usr/share/i18n/locales/ru_RU ~/my_ru_RU
localedef -f UTF-8 -i ~/my_ru_RU ru_RU.UTF-8
После первой команды, нужно отредактировать файл
~/my_ru_RU и затем запускать вторую команду.Такие вот перлы и приколы. Изучай.
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Ну вот и пришло время…
Привет. В личку регулярно заходят наши подписчики и интересуются наставничеством, обучением и т.п.
Ладно, чо тянуть, закроем вопрос.
Встречаем Linux Factory!
1.08 выпускаю кракена. Но кракен будет для маленьких. Матёрые заскучают, но кто знает…
Курс пилить я ебал, поэтому покажу протоптанные дорожки и основы. И если ты ими правильно воспользуешься — слава тебе и почет + 100500 денег в секунду.
Живописнее и подробнее можешь ознакомиться тут, всё утро красоту наводил🥳
Чтобы стать частью прекрасного, запускай бота и жми кнопки.
Программа: https://bashdays.ru/intro/
Стать сильнее тут: @tormozilla_bot
👇 👇 👇
TL;DR если хочешь в девопс, я тебя научу
Привет. В личку регулярно заходят наши подписчики и интересуются наставничеством, обучением и т.п.
Ладно, чо тянуть, закроем вопрос.
Встречаем Linux Factory!
1.08 выпускаю кракена. Но кракен будет для маленьких. Матёрые заскучают, но кто знает…
Курс пилить я ебал, поэтому покажу протоптанные дорожки и основы. И если ты ими правильно воспользуешься — слава тебе и почет + 100500 денег в секунду.
Живописнее и подробнее можешь ознакомиться тут, всё утро красоту наводил
Чтобы стать частью прекрасного, запускай бота и жми кнопки.
Программа: https://bashdays.ru/intro/
Стать сильнее тут: @tormozilla_bot
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет. Сегодня нассым в чайник.
А если конкретнее, рассмотрим более подробно команду
Это с виду она дохуя скучная, на деле там всё по полочкам.
Man содержит разделы от 1 до 9 + дополнительные (n, l, p). В дополнительные разделы входят всё то, что по каким-то причинам не попало в первые 9.
Все это дело сконфигурировано в файле: /etc/manpath.config, в него можно не смотреть, там хуйня какая-то непонятная для не подготовленного человека.
Ну дак вот. В каждом
✔ Давай тыкать палкой.
Ставим пакет:
Запускаем:
Выведется список с содержимым 1го раздела:
Теперь пройдемся по разделам:
1. Справка по стандартным командам (программы и утилиты). Это самый огромный раздел в справочной системе. Глаза разбегутся. Но есть лайкфак, можно воспользоваться поиском.
Выведется ограниченный список команд и утилит, которые содержат слово «copy»
В скобках выводится цифра раздела, в котором была найдена справка. А дальше можно сделать например так:
Херак и ты получил желаемое. С поиском намного удобнее и приятнее работать.
2. Раздел содержит описание системных вызовов. В этом разделе можно найти понимание этих ваших линуксов. Например, смотрим справку по
Кончаем и получаем список системных вызовов с которыми работает
3. Раздел с библиотечными функциями. Тут больше для программистов.
4. Описание файлов-устройств расположенные в
5. Описание форматов файлов. Конфигурационные файлы приложений и их синтаксис. Например, синтаксис файла теневых паролей.
Чтиво весьма занятное. Именно в этом файле задаются
6. Раздел игр.
7. Описание стандартов и соглашений. Например, последовательность загрузки ОС.
или параметры ядра при загрузке:
или шаблоны имён файлов:
8. Команды для системного администрирования. Например, информация о портах/сокетах:
монтирование устройств:
отображение информации о дисках и их настройка:
9. Функции ядра. В большинстве случаев этот раздел отсутствует в современных дистрибутивах. Раздел не является стандартом. Если нужно узнать про функции ядра, тут только поиск через
Так же ты можешь встретить разделы
Ну и закончим эту простыню вишенкой. Для этой команды нужны Иксы.
Страница со справкой Bash будет отформатирована в «html» формате и открыта в браузере по умолчанию.
Без Иксов просто сформируется «html» файл в папке tmp, у меня он появился тут:
Ладно, изучай. Увидимся завтра!
tags: #linux #bash
—
🔔 @bashdays
А если конкретнее, рассмотрим более подробно команду
manЭто с виду она дохуя скучная, на деле там всё по полочкам.
Man содержит разделы от 1 до 9 + дополнительные (n, l, p). В дополнительные разделы входят всё то, что по каким-то причинам не попало в первые 9.
Все это дело сконфигурировано в файле: /etc/manpath.config, в него можно не смотреть, там хуйня какая-то непонятная для не подготовленного человека.
Ну дак вот. В каждом
man разделе, есть страница intro. То бишь «вступление», которое описывает что содержит раздел.Ставим пакет:
apt install manpages-dev
Запускаем:
man 1 intro
Выведется список с содержимым 1го раздела:
- Login
- The shell
- Pathnames and the current directory
- Directories
- Disks and filesystems
и т.п.
Теперь пройдемся по разделам:
1. Справка по стандартным командам (программы и утилиты). Это самый огромный раздел в справочной системе. Глаза разбегутся. Но есть лайкфак, можно воспользоваться поиском.
man -k copy
Выведется ограниченный список команд и утилит, которые содержат слово «copy»
cp (1) - copy files and directories
cpgr (8) - copy with locking the given file
cpio (1) - copy files to and from archives
cppw (8) - copy with locking the given file
dd (1) - convert and copy a file
В скобках выводится цифра раздела, в котором была найдена справка. А дальше можно сделать например так:
man 8 cppw
Херак и ты получил желаемое. С поиском намного удобнее и приятнее работать.
2. Раздел содержит описание системных вызовов. В этом разделе можно найти понимание этих ваших линуксов. Например, смотрим справку по
mkdir.man 2 mkdir
Кончаем и получаем список системных вызовов с которыми работает
mkdir.3. Раздел с библиотечными функциями. Тут больше для программистов.
4. Описание файлов-устройств расположенные в
/dev5. Описание форматов файлов. Конфигурационные файлы приложений и их синтаксис. Например, синтаксис файла теневых паролей.
man 5 login.defs
Чтиво весьма занятное. Именно в этом файле задаются
«SYS_UID_MAX», «SYS_UID_MIN». Это диапазон UID, который будет присвоен пользователю, при использовании утилит «useradd» или «newusers» когда, ты добавляешь нового пользователя.6. Раздел игр.
7. Описание стандартов и соглашений. Например, последовательность загрузки ОС.
man 7 boot
или параметры ядра при загрузке:
man 7 bootparam
или шаблоны имён файлов:
man 7 glob
8. Команды для системного администрирования. Например, информация о портах/сокетах:
man 8 netstat
монтирование устройств:
man 8 mount
отображение информации о дисках и их настройка:
man 8 hdparm
9. Функции ядра. В большинстве случаев этот раздел отсутствует в современных дистрибутивах. Раздел не является стандартом. Если нужно узнать про функции ядра, тут только поиск через
man -k <ключевое слово>.Так же ты можешь встретить разделы
n, l, p, но опять-же они не всегда присутствуют, все зависит от того, какой софт ты ставил себе на машину.Ну и закончим эту простыню вишенкой. Для этой команды нужны Иксы.
apt install man-db groff
man -H bash
Страница со справкой Bash будет отформатирована в «html» формате и открыта в браузере по умолчанию.
Без Иксов просто сформируется «html» файл в папке tmp, у меня он появился тут:
/tmp/hmanU3yORv/bash.htmlЛадно, изучай. Увидимся завтра!
PS: Все кто подал заявки на вписку в Linux factory, все ок. Как только решу вопросы с эквайрингом Тибанка (бекенд у них отвалился), всем напишу. Терпения вам и мне дорогие подписчики. Всех обнял!
tags: #linux #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 139 3
Tagd Tagd порадовал нас еще одним постом. Спасибо друг! В редакцию тебя что-ли на ставку забрать, складно пишешь 🥳 . Пиши еще!
Как я офигел и полюбил AWK.
А между тем - это полноценный язык программирования.
Я решил выучить
Эта конструкция убирает дубли строк файла, оставляя только уникальные.
Причем делает это за один проход чтения файла!
Работает она очень просто:
Считывается строка файла ($0), Если a[$0] не (!) равен 0, то строка выводится в stdout.
После этого, a[$0] инкрементируется. Если далее встретится такое же значение строки $0, то a[$0] уже будет ненулевым и строка проигнорируется.
У этой конструкции есть и подводные камни. Весь файл фактически считывается в массив и хранится в памяти. Так что если файл больше половины свободной памяти - используйте
И теперь несколько примеров без объяснений:
Уникальные строки, c числом вхождений >=3.
Все вхождения, начиная с третьего.
Эти конструкции могут быть полезны, когда хочется выявить особо настырных.
Ну, и еще.
или
Не так красиво, как bc. Но
В общем, если припрёт
Ну, и ложка дегтя. Есть несколько версий
Базовый функционал у них одинаковый. Так что не заморачивайтесь. Если кто-то заинтересовался - help по GAWK.
👉 Вопросы, комментарии приветствуются.
tags: #linux
—
🔔 @bashdays
Как я офигел и полюбил AWK.
AWK - сильно недооценен. Мало кто его использует кроме как - вывести вторую колонку.А между тем - это полноценный язык программирования.
Я решил выучить
AWK, когда на хабре увидел конструкцию:awk '!a[$0]++' ./file
Эта конструкция убирает дубли строк файла, оставляя только уникальные.
Причем делает это за один проход чтения файла!
Работает она очень просто:
Считывается строка файла ($0), Если a[$0] не (!) равен 0, то строка выводится в stdout.
После этого, a[$0] инкрементируется. Если далее встретится такое же значение строки $0, то a[$0] уже будет ненулевым и строка проигнорируется.
У этой конструкции есть и подводные камни. Весь файл фактически считывается в массив и хранится в памяти. Так что если файл больше половины свободной памяти - используйте
uniq.И теперь несколько примеров без объяснений:
awk '++a[$0]==3'
Уникальные строки, c числом вхождений >=3.
awk '++a[$0]>=3'
Все вхождения, начиная с третьего.
Эти конструкции могут быть полезны, когда хочется выявить особо настырных.
Ну, и еще.
AWK поддерживает вещественные числа. Поэтому когда нужно что-то посчитать:awk 'BEGIN{print 1/3}' или
echo 1 3|awk '{print $1/$2}'Не так красиво, как bc. Но
bc/dc может и не быть в системе, а awk, есть, практически везде.В общем, если припрёт
awk'ом можно заменить cat, sed, grep, tr, cut, head, tail, wc...Ну, и ложка дегтя. Есть несколько версий
awk: MAWK NAWK GAWKБазовый функционал у них одинаковый. Так что не заморачивайтесь. Если кто-то заинтересовался - help по GAWK.
👉 Вопросы, комментарии приветствуются.
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Раз пошла такая пьянка, эта sed`ушка подсветить вхождения подстроки, сохраняя, весь контекст. Грубо говоря выделит цветом только те строки, которые ты укажешь.
String нужно заменить на то слово, которое нужно подсветить.
ㅤ
Это случай когда использование
Изучай…
tags: #linux #bash
—
🔔 @bashdays
sed 's/string/\x1b[31m&\x1b[m/g' bashdays.txt
String нужно заменить на то слово, которое нужно подсветить.
ㅤ
Это случай когда использование
sed оправдано.Изучай…
tags: #linux #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Magic SysRq в Linux
Чо эт такое? Ооо брат, это комбинация клавиш которая позволяет выполнять низкоуровневые команды независимо от состояния системы.
✔ Тема достаточно полезная, прочитай, пригодится.
Ядро реагирует на такие команды моментально, независимо от того, что оно делает в данный момент. При условии, что само ядро не заблокировано.
ㅤ
Чтобы послать ядру Magic SysRq, нужно нажать
А где взять клавишу SysRq? На современных клавиатурах это клавиша PrintScreen.
А какой key нажимать в конце? Ну например:
+b - немедленная перезагрузка системы
+o - выключение системы
+s - синхронизация всех файловых систем
+u - перемонтирование файловых систем в read only
+r - возвращение управления с клавиатуры X-сервера к консоли
+k - завершение всех процессов на текущей консоли
В моем случае, чтобы послать эту комбинацию клавиш в Virtualbox, мне пришлось нажать —
После нажатия этой комбинации, в терминале выводится справка по доступным командам SysRq.
После вывода справки, смотрим логи ядра:
и видим, что ядро триггернулось и записало в журнал:
Грубо говоря, если система встала раком и не отвечает, можешь ребутнуть её магическими клавишами:
Ну либо поиграться с read only на проде.
В официальной доке, этот функционал шикарно расписан, прям рекомендую почитать, хоть и с переводчиком.
Изучай...
tags: #linux
—
🔔 @bashdays
Чо эт такое? Ооо брат, это комбинация клавиш которая позволяет выполнять низкоуровневые команды независимо от состояния системы.
Ядро реагирует на такие команды моментально, независимо от того, что оно делает в данный момент. При условии, что само ядро не заблокировано.
ㅤ
Чтобы послать ядру Magic SysRq, нужно нажать
ALT+SysRq+key.А где взять клавишу SysRq? На современных клавиатурах это клавиша PrintScreen.
А какой key нажимать в конце? Ну например:
+b - немедленная перезагрузка системы
+o - выключение системы
+s - синхронизация всех файловых систем
+u - перемонтирование файловых систем в read only
+r - возвращение управления с клавиатуры X-сервера к консоли
+k - завершение всех процессов на текущей консоли
В моем случае, чтобы послать эту комбинацию клавиш в Virtualbox, мне пришлось нажать —
Правый ALT+PrintScreen+h.После нажатия этой комбинации, в терминале выводится справка по доступным командам SysRq.
После вывода справки, смотрим логи ядра:
dmesg -tk | grep -m1 '^sysrq: HELP :'
и видим, что ядро триггернулось и записало в журнал:
sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(v) show-blocked-tasks(w) dump-ftrace-buffer(z)
Грубо говоря, если система встала раком и не отвечает, можешь ребутнуть её магическими клавишами:
ALT+SysRq+b.Ну либо поиграться с read only на проде.
В официальной доке, этот функционал шикарно расписан, прям рекомендую почитать, хоть и с переводчиком.
Изучай...
PS: А если у меня нет клавиши PrintScreen? Ну значит, не судьба!
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Ёпта! Работа над Linux Factory идет полным ходом, всем кто принес мне свой емейл в бота, все котики и записаны.
Кому я еще не ответил — отвечу, ничо не потерялось. Я тут в одну харю ща всё разгребаю и отбиваюсь от менеджеров тибанка с помощью их же разработки — автоответчика Олега.
В начале следующей неделе буду рассылать инвайты в закрытый канал, ну и инструкции чо каво делать.
✔️ Так, теперь по сегодняшней теме — Awk и пасхальное яйцо.
Если запустить:
Всё нахуй упадет с ошибкой —
nostalgia это не документированная опция, которая была добавлена в версии 2.11 beta и сопровождалось странным комментарием:
Чо за херня?
Ранние версии
ㅤ
Еще из интересного.
Эти команды аналогичны:
Странное конечно поведение учитывая содержимое этого поста.
Ну да ладно, хуй с ним. Чо только не придумают…
Хороших тебе предстоящих выходных и береги себя.
Ааа еще забыл, Tagd Tagd написал нам две пиздатых статьи, на днях выложу. Спасибо Tagd Tagd с меня бонусы!
tags: #linux #bash
—
🔔 @bashdays
Кому я еще не ответил — отвечу, ничо не потерялось. Я тут в одну харю ща всё разгребаю и отбиваюсь от менеджеров тибанка с помощью их же разработки — автоответчика Олега.
В начале следующей неделе буду рассылать инвайты в закрытый канал, ну и инструкции чо каво делать.
Если запустить:
awk --nostalgia
Всё нахуй упадет с ошибкой —
awk: bailing out near line 1 Abortednostalgia это не документированная опция, которая была добавлена в версии 2.11 beta и сопровождалось странным комментарием:
undocumented feature, inspired by nostalgia, and a T-shirt
Чо за херня?
Ранние версии
awk аварийно завершались при различных эксепшенах выводя подобную ошибку. Утилиту отладили, но осталась — ностальгия. Но кто знает, возможно это ключ к ответу на главный вопрос жизни.ㅤ
Еще из интересного.
Gawk использует GNUтое расширение предоставляемое функциями разбора аргументов командной строки. При активации этого расширения доступен специальный синтаксис -W long_option.awk -Wnos
awk -Wcopy
Эти команды аналогичны:
awk --nostalgia
awk --copyright
Странное конечно поведение учитывая содержимое этого поста.
Ну да ладно, хуй с ним. Чо только не придумают…
Хороших тебе предстоящих выходных и береги себя.
Кстати кто сегодня винду обновил и получил синьку, самое быстрое решение опубликовал Дима в полезняшках. Репостить не буду, кому надо сами сходите посмотрите.
Ааа еще забыл, Tagd Tagd написал нам две пиздатых статьи, на днях выложу. Спасибо Tagd Tagd с меня бонусы!
tags: #linux #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Неделя только началась, а я уже заебался.
Как и обещал, публикую полезнейший пост от нашего коллеги Tagd Tagd 👇
Сегодня мы рассмотрим пару фишек настройки ssh среднего уровня.
БЕЗДУМНАЯ НАСТРОЙКА SSH по SSH МОЖЕТ ПРИВЕСТИ К ПОТЕРЕ КОНТРОЛЯ НАД СЕРВЕРОМ.
Чтобы минимизировать риски, я подключаюсь по
В одной правлю
ㅤ
Наличие физического доступа к консоли - приветствуется.
Вы уже знаете, как настроить ключи. Они прописаны и работают!!!
Допустим в файле
Там же есть опция
В нём хранятся публичные ключи пользователей, которым разрешено ssh.
Обычно это
делаем так:
а в файле
перезапускаем sshd:
Всё. С ключом, прописанным в
Наличие ключей в домашней папке пользователя теперь необязательно.
Может быть удобно, если рулить сотней пользователей. Ну, или как дырочка.
Лучше, конечно задать:
Кстати, при данной опции попытки перебора по root попадают в log, но не отмечаются в
Продолжение следует...
tags: #linux
—
🔔 @bashdays
Как и обещал, публикую полезнейший пост от нашего коллеги Tagd Tagd 👇
Сегодня мы рассмотрим пару фишек настройки ssh среднего уровня.
БЕЗДУМНАЯ НАСТРОЙКА SSH по SSH МОЖЕТ ПРИВЕСТИ К ПОТЕРЕ КОНТРОЛЯ НАД СЕРВЕРОМ.
Чтобы минимизировать риски, я подключаюсь по
ssh двумя сессиями.В одной правлю
sshd_config, другую оставляю для возможного отката при косяках, поскольку при перезапуске sshd с измененным конфигом текущие сессии сохраняются.ㅤ
Наличие физического доступа к консоли - приветствуется.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.1
Вы уже знаете, как настроить ключи. Они прописаны и работают!!!
Допустим в файле
/etc/ssh/sshd_configPubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
Там же есть опция
AuthorizedKeysFile и обычно она закомментирована. Она указывает, где находится файл аuthorized_кeys.В нём хранятся публичные ключи пользователей, которым разрешено ssh.
Обычно это
~/.ssh/authorized_keysделаем так:
sudo cp ~/.ssh/authorized_keys /etc/ssh/authorized_keys
sudo chown root:root /etc/ssh/authorized_keys
sudo chmod 644 /etc/ssh/authorized_keys
а в файле
/etc/ssh/sshd_configAuthorizedKeysFile %h/.ssh/authorized_keys /etc/ssh/authorized_keys
перезапускаем sshd:
systemctl restart sshd
Всё. С ключом, прописанным в
/etc/ssh/authorized_keys можно заходить под любым пользователем, у которого прописан вменяемый shell, включая root!!!Наличие ключей в домашней папке пользователя теперь необязательно.
Может быть удобно, если рулить сотней пользователей. Ну, или как дырочка.
Лучше, конечно задать:
PermitRootLogin no
Кстати, при данной опции попытки перебора по root попадают в log, но не отмечаются в
lastb. Это так, к сведению.Продолжение следует...
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Такс, всем желающим вводные разослал, проверяйте.
А мы уже начали с ребятами потихоньку преисполняться.
Кто не успел вписаться в движ или проебал сообщение, проверь или напиши в бота @linuxfactorybot, разрулим.
Напомню что с 1 сентября для новеньких, ценник внезапно в пару раз подрастет. Сейчас можно сказать это пилотный запуск и летние скидки.
Хорошей тебе рабочей недели🫥
А мы уже начали с ребятами потихоньку преисполняться.
Кто не успел вписаться в движ или проебал сообщение, проверь или напиши в бота @linuxfactorybot, разрулим.
Напомню что с 1 сентября для новеньких, ценник внезапно в пару раз подрастет. Сейчас можно сказать это пилотный запуск и летние скидки.
Хорошей тебе рабочей недели
Please open Telegram to view this post
VIEW IN TELEGRAM
Тадам! SSH часть вторая by Tagd Tagd.
Сначала покажется что ты это читал, но это не так, контекст другой.
Сегодня мы рассмотрим как запретить пользователям добавлять свои ключи.
Если пользователь подключит свой ключ - меняй пароль, не меняй - пофигу.
БЕЗДУМНАЯ НАСТРОЙКА SSH по SSH МОЖЕТ ПРИВЕСТИ К ПОТЕРЕ КОНТРОЛЯ НАД СЕРВЕРОМ.
Чтобы минимизировать риски, я подключаюсь по ssh двумя сессиями.
В одной правлю
ㅤ
Наличие физического доступа к консоли - приветствуется.
Вы уже знаете, как настроить ключи. Они прописаны и работают!!!
Допустим в файле
Там же есть опция
делаем так:
в файле
перезапускаем sshd:
Всё. Будут действовать только ключи из из папки
После успешного подключения по ключу:
Кстати, протестировать и посмотреть все опции
Это так, к сведению.
tags: #linux
—
🔔 @bashdays
Сначала покажется что ты это читал, но это не так, контекст другой.
Сегодня мы рассмотрим как запретить пользователям добавлять свои ключи.
Если пользователь подключит свой ключ - меняй пароль, не меняй - пофигу.
БЕЗДУМНАЯ НАСТРОЙКА SSH по SSH МОЖЕТ ПРИВЕСТИ К ПОТЕРЕ КОНТРОЛЯ НАД СЕРВЕРОМ.
Чтобы минимизировать риски, я подключаюсь по ssh двумя сессиями.
В одной правлю
sshd_config, другую оставляю для возможного отката при косяках, поскольку при перезапуске sshd с измененным конфигом текущие сессии сохраняются.ㅤ
Наличие физического доступа к консоли - приветствуется.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.2
Вы уже знаете, как настроить ключи. Они прописаны и работают!!!
Допустим в файле
/etc/ssh/sshd_configPubkeyAuthentication yes
# перед изменениями рекомендую включить парольную аутентификацию
PasswordAuthentication yes
PermitRootLogin prohibit-password
Там же есть опция
AuthorizedKeysFile и обычно она закомментирована. Она указывает, где находится файл аuthorized_кeys.делаем так:
sudo test -f /etc/ssh/authorized_keys && sudo mv /etc/ssh/authorized_keys /etc/ssh/authorized_keys.1
sudo mkdir /etc/ssh/authorized_keys
sudo cp "/home/${USER}/.ssh/authorized_keys" "/etc/ssh/authorized_keys/${USER}"
sudo chown -R root:root /etc/ssh/authorized_keys
sudo chmod -R u=rwX,go=rX /etc/ssh/authorized_keys
в файле
/etc/ssh/sshd_configAuthorizedKeysFile /etc/ssh/authorized_keys/%u
перезапускаем sshd:
systemctl restart sshd
Всё. Будут действовать только ключи из из папки
/etc/ssh/authorized_keys в файле с именем пользователя, и подключить их может только root.После успешного подключения по ключу:
PasswordAuthentication no
systemctl restart sshd
Кстати, протестировать и посмотреть все опции
sshd_config можно командой sudo sshd -TЭто так, к сведению.
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
А вот и долгожданное продолжение от © Tagd Tagd.
Файл, который упоминается в статье будет добавлен в комментарии.
Погнали 👇
Хотел писать про другое в ssh, но без блока Match ну никак не получается.
Для начала лирическое отступление. Вы установили ключи, отключили парольную аутентификацию, но вас все равно брутят.
Плохие парни, что, дебилы? Не видят, что у вас ключи стоят? Все они видят. Просто есть блок Match, с помощью которого можно задавать различные настройки разным пользователям.
В этом примере парольная аутентификация запрещена для всех, кроме пользователя bashdays.
Скажу по секрету, я тоже делаю настройки для пользователя последнего шанса.
У меня на флэшке есть ключи и putty. Потому что не знаешь, когда и откуда понадобится порулить. Но я допускаю, что и флэшки может не оказаться.
Вот тогда пригодится такой пользователь. Только чтобы пользователя быстро не нашли, я беру логин, сложнее, чем admin, Root student или pi.
Ну и парольную фразу задаю больше 20 символов. К статейке должен быть прикреплен архив с логинами реальных простукиваний.
В первой колонке - количество стуков для данного пароля. Реальная база, собранная с одной машины, с системой защиты от переборов за пару лет.
Если вы нашли свой логин в этой базе - повод задуматься. Логин
Да, раньше можно было и такое. Благо сейчас эту дыру закрыли.
Что-то я отвлекся.
В блоке MATCH доступны ключевые слова User, Group, Host, Address, LocalAddress, LocalPort, RDomain.
Первые четыре применяются наиболее часто. Если в блоке MATCH несколько ключевых слов, они объединяются по AND.
Также возможно использование шаблонов.
Например:
Перечисления идут через запятую БЕЗ ПРОБЕЛОВ. Допускается несколько блоков MATCH.
Ну, и последний вопрос. Раз конфиг у нас с условием, как его проверять?
Выдаст на stdout конфиг для указанного пользователя с указанного адреса.
Обратите внимание. здесь ключевые слова немного отличаются:
«addr», «user», «host», «laddr», «lport», «rdomain» и отсутствует группа.
продолжение следует...
tags: #linux
—
🔔 @bashdays
Файл, который упоминается в статье будет добавлен в комментарии.
Погнали 👇
Хотел писать про другое в ssh, но без блока Match ну никак не получается.
Для начала лирическое отступление. Вы установили ключи, отключили парольную аутентификацию, но вас все равно брутят.
Плохие парни, что, дебилы? Не видят, что у вас ключи стоят? Все они видят. Просто есть блок Match, с помощью которого можно задавать различные настройки разным пользователям.
PasswordAuthentication no
PubkeyAuthentication yes
Match User bashdays
MaxSessions 10
MaxAuthTries 10
PasswordAuthentication yes
В этом примере парольная аутентификация запрещена для всех, кроме пользователя bashdays.
Скажу по секрету, я тоже делаю настройки для пользователя последнего шанса.
У меня на флэшке есть ключи и putty. Потому что не знаешь, когда и откуда понадобится порулить. Но я допускаю, что и флэшки может не оказаться.
Вот тогда пригодится такой пользователь. Только чтобы пользователя быстро не нашли, я беру логин, сложнее, чем admin, Root student или pi.
Ну и парольную фразу задаю больше 20 символов. К статейке должен быть прикреплен архив с логинами реальных простукиваний.
В первой колонке - количество стуков для данного пароля. Реальная база, собранная с одной машины, с системой защиты от переборов за пару лет.
Если вы нашли свой логин в этой базе - повод задуматься. Логин
"_" в базе - замена пользователя пробел.Да, раньше можно было и такое. Благо сейчас эту дыру закрыли.
Что-то я отвлекся.
В блоке MATCH доступны ключевые слова User, Group, Host, Address, LocalAddress, LocalPort, RDomain.
Первые четыре применяются наиболее часто. Если в блоке MATCH несколько ключевых слов, они объединяются по AND.
Также возможно использование шаблонов.
Например:
Match User *bashdays*, guest*
Address 192.168.0.0/24,!192.168.0.27
Перечисления идут через запятую БЕЗ ПРОБЕЛОВ. Допускается несколько блоков MATCH.
Ну, и последний вопрос. Раз конфиг у нас с условием, как его проверять?
sudo sshd -T -C user=bashdays,addr=192.168.0.27
Выдаст на stdout конфиг для указанного пользователя с указанного адреса.
Обратите внимание. здесь ключевые слова немного отличаются:
«addr», «user», «host», «laddr», «lport», «rdomain» и отсутствует группа.
man sshd
man sshd_config
продолжение следует...
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Привет, пока я летаю, рекомендую обратить внимание на эту софтину.
✔️ goManageDocker
Это инструмент для управления docker’ом через интерфейс командной строки.
Разработан он для ленивых жоп (как я), которые в рот ебали вводить длинные консольные команды для получения желаемого.
ㅤ
Ну дак вот GMD всю эту работу берет на себя, тыкай горячие кнопки и рули своими образами и контейнерами.
Прям мастхевная хуёвина для каких-то своих пет-прооектов. Для разработчиков прям пушка, поставил локально и не ебись с консолькой.
Ставится элементарно:
Репка тут: https://github.com/ajayd-san/gomanagedocker
tags: #utilites
—
🔔 @bashdays
Это инструмент для управления docker’ом через интерфейс командной строки.
Разработан он для ленивых жоп (как я), которые в рот ебали вводить длинные консольные команды для получения желаемого.
ㅤ
Обычно после отпуска нахрен забываешь весь этот чудо docker синтаксис и приходится вновь лезть в интернет за мануалом — докер для чайников.
Ну дак вот GMD всю эту работу берет на себя, тыкай горячие кнопки и рули своими образами и контейнерами.
Прям мастхевная хуёвина для каких-то своих пет-прооектов. Для разработчиков прям пушка, поставил локально и не ебись с консолькой.
Ставится элементарно:
bash -c "$(curl -sLo- https://raw.githubusercontent.com/ajayd-san/gomanagedocker/main/install.sh)"
Репка тут: https://github.com/ajayd-san/gomanagedocker
tags: #utilites
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Здрасти, я потихоньку прихожу в себя после всех этих поездок. К концу недели глядишь раскачаюсь и войду в привычный ритм. Ну а пока читаем пиздатые посты от Tagd Tagd 👇
Сегодня мы рассмотрим как ДЛЯ СЕБЯ запилить SOCKS VРN через ssh.
Допустим у вас есть виртуалка на зарубежном хостиге с ssh. (на pq 450р/мес.)
ㅤ
А вы человек добрый, почти как я, и решили поделиться счастьем с женой и детьми.
Но давать доступ к консоли страшно, вдруг что-нибудь сломают.
Вы уже знаете, как настроить ключи. И они прописаны и работают!!!
Есть несколько способов безболезненно раздать vрn на свою семью. В файле
Если иcпользуете группу — не забудьте добавить в нее пользователя:
При параметре
На клиенте:
После запуска и ввода фразы ключа программа ничего не выводит, а потом, при использовании начинают сыпаться какие-то ошибки, ну и ладно. Если прервать команду, соединения в браузере разорвутся.
В firefox:
Если ваш адрес
В настройках firefox нужно будет заменить
Продолжение следует...
tags: #linux
—
🔔 @bashdays
Сегодня мы рассмотрим как ДЛЯ СЕБЯ запилить SOCKS VРN через ssh.
Допустим у вас есть виртуалка на зарубежном хостиге с ssh. (на pq 450р/мес.)
ㅤ
А вы человек добрый, почти как я, и решили поделиться счастьем с женой и детьми.
Но давать доступ к консоли страшно, вдруг что-нибудь сломают.
БЕЗДУМНАЯ НАСТРОЙКА SSH по SSH МОЖЕТ ПРИВЕСТИ К ПОТЕРЕ КОНТРОЛЯ НАД СЕРВЕРОМ.
Чтобы минимизировать риски, я подключаюсь по ssh двумя сессиями. В одной правлю sshd_config, другую оставляю для возможного отката при косяках, поскольку при перезапуске sshd с измененным конфигом текущие сессии сохраняются.
Наличие физического доступа к консоли - приветствуется.
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.$(date +%Y%m%d-%H%M%S)
Вы уже знаете, как настроить ключи. И они прописаны и работают!!!
Есть несколько способов безболезненно раздать vрn на свою семью. В файле
/etc/ssh/sshd_configMatch User bashdays_tagd
# или Match Group proxy
MaxAuthTries 3
MaxSessions 0
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
allowtcpforwarding yes
#--
sudo service sshd restart
Если иcпользуете группу — не забудьте добавить в нее пользователя:
sudo usermod -aG proxy bashdays_tagd
При параметре
MaxSessions 0 будет запрещен доступ к shell и sftp. Но разрешен проброс портов.На клиенте:
ssh -N -D 5000 bashdays_tagd@ssh.host.name
После запуска и ввода фразы ключа программа ничего не выводит, а потом, при использовании начинают сыпаться какие-то ошибки, ну и ладно. Если прервать команду, соединения в браузере разорвутся.
В firefox:
Настройки -> Настройка сети -> Параметры соединения
Ручная настройка прокси. SOCKS5. 127.0.0.1 порт 5000.
Галка — Отправлять DNS-запросы через прокси при использовании SOCKS 5
или:
ssh -N -D 192.168.1.57:5000 bashdays_tagd@ssh.host.name
Если ваш адрес
192.168.1.57 и вы, человек еще более добрый чем я, и решили поделиться VРN со всей своей локалкой (в которой сидит еще и тёща с тестем):В настройках firefox нужно будет заменить
127.0.0.1 на 192.168.1.57Продолжение следует...
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Последние новости — В Москве госпитализировали мужика, который не смог настроить GoodbyeDPI и похавал без ютуба.
А ты настроил?😲
Вот так вот и живем, а сегодня Tagd Tagd снова в тренде 👇
—
Сегодня (01.08.2024) запускаю скрипт архивирования и получаю сообщение об ошибке:
Скрипт, написанный и работающий с 02.02.24г вдруг перестал работать.
Чудеса?
ㅤ
Лезу, смотрю, где ошибка.
Мне нужен просто номер месяца для контроля, какой накопитель должен быть примонтирован.
Начинаю выяснять. Оказывается, числа, начинающиеся с "0", а bash считает восьмеричными. Понятное дело, 08 для восьмеричной системы великовато.
Ну, решений проблемы море.
0. Самый правильный вариант (подсказал Alexey Kuznetsov)
1. Классический вариант
10# - система счисления. Роман об этом уже писал. Но, читаемость (понимаемость) строки - так себе.
2. Более читаемый
Просто уберем ведущий "0" и проблема решена.
3. Решение на awk.
Пробую пробую на своей машине:
Работает. Встраиваю в скрипт - ошибка
Поверяю версии
Блин, это уже вызов.
Но, решение есть.
Странная инструкция
Ну, собственно все. В коментах надеюсь увидеть другие варианты решения проблемы.
tags: #linux
—
🔔 @bashdays
А ты настроил?
Вот так вот и живем, а сегодня Tagd Tagd снова в тренде 👇
—
Сегодня (01.08.2024) запускаю скрипт архивирования и получаю сообщение об ошибке:
bash: declare: 08: слишком большое значение для основания (неверный маркер «08»)
Скрипт, написанный и работающий с 02.02.24г вдруг перестал работать.
Чудеса?
ㅤ
Лезу, смотрю, где ошибка.
declare -i MON=$(date +%m)
Мне нужен просто номер месяца для контроля, какой накопитель должен быть примонтирован.
Начинаю выяснять. Оказывается, числа, начинающиеся с "0", а bash считает восьмеричными. Понятное дело, 08 для восьмеричной системы великовато.
Ну, решений проблемы море.
0. Самый правильный вариант (подсказал Alexey Kuznetsov)
declare -i MON=$(date "+%-m")
1. Классический вариант
declare -i MON=$((10#$(date "+%m")))
10# - система счисления. Роман об этом уже писал. Но, читаемость (понимаемость) строки - так себе.
2. Более читаемый
declare -i MON=$(date "+%m"|sed 's/^0//')
Просто уберем ведущий "0" и проблема решена.
3. Решение на awk.
Пробую пробую на своей машине:
declare -i MON=$(awk 'BEGIN{m=+strftime("%m");print m}')Работает. Встраиваю в скрипт - ошибка
awk: line 2: function strftime never defined
Поверяю версии
awk. У меня на машине gawk, на серваке mawk.Блин, это уже вызов.
mawk - не gawk и у него отсутствуют функции времени и даты (ну, по крайней мере в той версии).Но, решение есть.
declare -i MON=$(date "+%m"|awk '{print $1+=0}')Странная инструкция
$1+=0 позволяет преобразовать строковое представление числа в первой колонке в числовое.Ну, собственно все. В коментах надеюсь увидеть другие варианты решения проблемы.
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Ой чо я вам принёс ребят…
очередную хуиту🥳
Называется эта хуета QEMU-QuickBoot и написана она на Bash.
Скрипт создан для упрощения развертывания QEMU виртуалок с интуитивно понятным интерфейсом. Короче для всех любителей потыкатьхомяка мышкой.
ㅤ
Штука позволяет быстреьнко создавать и загружать виртуальные машины используя физические устройства либо исошники, имейджи и т.п. BIOS/UEFI вся хуйня.
В зависимостях там Zenity, хуй знает чо это такое, но нужно. Предварительно это надо поднять через апт инсталл если совсем на пол шестого.
Потыкал, чето даже работает. Загнивающий запад с реддита пищит, ну хуй знает, попробуем...
Репка со всеми подробностями тут 👇
https://github.com/GlitchLinux/QEMU-QuickBoot/
ps: в любом случае можнофоркнуть спиздить и использовать в своих поделках, даж реверсить ничо не надо, скрипты, хули…
tags: #utilites
—
🔔 @bashdays
очередную хуиту
Называется эта хуета QEMU-QuickBoot и написана она на Bash.
Скрипт создан для упрощения развертывания QEMU виртуалок с интуитивно понятным интерфейсом. Короче для всех любителей потыкать
ㅤ
Штука позволяет быстреьнко создавать и загружать виртуальные машины используя физические устройства либо исошники, имейджи и т.п. BIOS/UEFI вся хуйня.
В зависимостях там Zenity, хуй знает чо это такое, но нужно. Предварительно это надо поднять через апт инсталл если совсем на пол шестого.
Потыкал, чето даже работает. Загнивающий запад с реддита пищит, ну хуй знает, попробуем...
Репка со всеми подробностями тут 👇
https://github.com/GlitchLinux/QEMU-QuickBoot/
ps: в любом случае можно
tags: #utilites
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Здрасти, здрасти, давно не виделись. Сегодня… Аааа по ходу дела разберемся, погнали!
Есть у меня текстовый файл, вида:
И есть условный bash скрипт, который должен прочитать этот файл и присвоить значения переменным, чтобы получилось так:
Сначала прикидываем в голове алгоритм — читаем файл построчно, цикл вся хуйня, делаем что-то на подобии массива и дальше по накатанной. Это всё понятно, классика.
Но решим мы её как обычно через жопу:
Охуенно? ДА! Теперь давай разберем чо происходит.
В переменную «n» зачитываемрэпчанский текстовый файл
Это так, к слову, если любишь рэп — ничо против не имею.
Конструкция
По итогу переменная «n» содержит в себе весь текст из файла
Ну а магическая поебень
Символ «--» перед set = сброс всех предыдущих позиционных параметров и установка новых.
Можно конечно сделать проще, но проще это не для нас:
Тут содержимое файла
Итого получаем аналогичную картинку:
Такие вот дела, накидывайте в комменты еще варианты упоротых решений, простые не интересны.
tags: #bash
—
🔔 @bashdays
Есть у меня текстовый файл, вида:
bashdays.ru/1
bashdays.ru/2
bashdays.ru/3
bashdays.ru/4
bashdays.ru/5
И есть условный bash скрипт, который должен прочитать этот файл и присвоить значения переменным, чтобы получилось так:
$1 = bashdays.ru/1
$2 = bashdays.ru/2
$3 = bashdays.ru/3
$4 = bashdays.ru/4
$5 = bashdays.ru/5
Сначала прикидываем в голове алгоритм — читаем файл построчно, цикл вся хуйня, делаем что-то на подобии массива и дальше по накатанной. Это всё понятно, классика.
Но решим мы её как обычно через жопу:
#!/bin/bash
n=$(<bashdays.txt)
set -- $n
echo $1 # bashdays.ru/1
echo $2 # bashdays.ru/2
echo $3 # bashdays.ru/3
...
echo $@ # bashdays.ru/2 bashdays.ru/3 ...
Охуенно? ДА! Теперь давай разберем чо происходит.
В переменную «n» зачитываем
bashdays.txt с нашим списком урлов.Как сказал Паук — Рэп это кал!
Это так, к слову, если любишь рэп — ничо против не имею.
Конструкция
$( < ) аналогична команде «cat», выполняет замену с подстановкой == $(cat bashdays.txt).По итогу переменная «n» содержит в себе весь текст из файла
bashdays.txtНу а магическая поебень
set -- $n устанавливает позиционные параметры на основе содержимого переменной «n». То есть решает нашу задачу.Символ «--» перед set = сброс всех предыдущих позиционных параметров и установка новых.
Можно конечно сделать проще, но проще это не для нас:
cat bashdays.txt | xargs ./script.sh
Тут содержимое файла
bashdays.txt передается в скрипт и скрипт получает эти параметры в качестве аргументов.#!/bin/bash
echo $1
echo $2
echo $3
echo $@
Итого получаем аналогичную картинку:
bashdays.ru/1
bashdays.ru/2
bashdays.ru/1 bashdays.ru/2 ...
Такие вот дела, накидывайте в комменты еще варианты упоротых решений, простые не интересны.
tags: #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Я привык что на винде, касперский регулярно предлагает мне избавиться от дубликатов файлов. Никогда этой хуйнёй не пользовался, но тут чет скучно стало, решил потыкать. Потыкал, понравилось.
ㅤ
Минусы иметь винт на 10 терабайт — повторно качаешь взрослые фильмы, которые уже качал 3 года назад, но найти не можешь.
Ну и понеслась…
А на linux чо делать? Есть такая штука —
fdupes называется.Натравливаешь её на нужный каталог и получаешь кайф:
fdupes -r ~/Downloads
По выхлопу:
./music/Blind Guardian Bright Eyes.mp3
./mp3/Blind Guardian Bright Eyes.mp3
Опа, в папках
music и mp3 идентичные файлы, значит один из них точно можно ёбнуть!Но чо руками что ли это делать? Неа!
fdupes -d ~/Downloads/*
Тебе вывалит интерактивный режим:
Set 1 of 1:
1 [ ] /tmp/Downloads/music/Blind Guardian Bright Eyes.mp3
2 [ ] /tmp/Downloads/mp3/Blind Guardian Bright Eyes.mp3
Но вообще если не боишься, запускай:
fdupes -r -d -N ~/Downloads/*
Как говорится, если ты не знаешь что у тебя хранится на диске — значит оно тебе нахуй не нужно. Так что посмелее!
После отработки получаем:
[+] ~/Downloads/music/Blind Guardian Bright Eyes.mp3
[-] ~/tmp/Downloads~/mp3/Blind Guardian Bright Eyes.mp3
В папке
~/Downloads/music файл остался, а вот в в папке mp3 похерился.Работает эта штука - Очень шустро! И зашла она мне прям люто, аналогично как
ncdu из этого поста.Ставится элементарно:
apt install fdupes
+ у ней дофига ключей, вызывай
help и изучай, чо там только нет.Ссылка на репку: https://github.com/adrianlopezroche/fdupes
Но есть алтернативы шутрее:
Бенчмарки 8vCPU/30G (54,000 files 17Gb)
fdupes takes 2m 47.082s
findup takes 13.556s
jdupes takes 0.165s
Либо наш любимый
find со своей кишкой из аргументов. Выбор за тобой!Давай, увидимся!
tags: #utilites #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM