cookie

Ми використовуємо файли cookie для покращення вашого досвіду перегляду. Натиснувши «Прийняти все», ви погоджуєтеся на використання файлів cookie.

avatar

Линукс и DevOps Дни

Самобытно про разработку, devops, linux, скрипты, тестирование, сисадминство, техдирство, пиэмство и за айтишную жизу.

Більше
Рекламні дописи
177
Підписники
Немає даних24 години
-8047 днів
-99530 днів

Триває завантаження даних...

Приріст підписників

Триває завантаження даних...

Здравствуйте товарищи. Ну чо, как оно? Поехали еBash’ить. Сегодня разберем интересную задачку, которую я подкидываю на собесы. Задача со звездочкой. Суть задачи: нужно вывести строки в окно терминала и пронумеровать их используя только один вызов sed. Аналогично выводу команды nl. То есть должно получиться такое:
printf '%s\n' {a..d} | nl
1 a
2 b
3 c
4 d
Только это нужно сделать с помощью одного вызова sed. Обычно кто берется ее решать, спустя какое-то время говорят — Роман, иди нахуй, это сделать невозможно! Так говорят бедолаги, которым либо лень что-то делать, либо писька еще не отросла. Всё возможно, было бы желание. Короче поехали решать. Давай попробуем сразу с sed несколько вариантов.
printf '%s\n' {a..d} | sed '='  
printf '%s\n' {a..d} | sed -n 'p;='  
printf '%s\n' {a..d} | sed -n '=;p'
Ну чет да… ожидаемый результат совсем не ожидаемый. Дело в том, что когда sed встречает команду «=», он тут же пишет текущий номер строки с завершающим символом «\n» или «\0». То есть номер и строка разделены «\n» или «\0». Поэтому в примерах по sed для решения этой задачи, используют два вызова.
printf '%s\n' {a..d} | sed '=' | sed 'N;s/\n/ /'
Вот так всё корректно отработает, но задачу мы не решили, условия другие. Нам можно использовать лишь один sed. ✔ Чо будем делать? Думать ёпта! Для начала надо посмотреть, а что мы имеем и на что можем повлиять. Утилита sed пишет строки. Куда она их пишет? Вот и решение… Вставляем в начало каждой строки, управляющую последовательность. Которая переместит курсор на предыдущую строку и установит его например в 3 колонку.
printf '%s\n' {a..d} | sed '=;s/^/\x1b[1A\x1b[3G/'
Получаем ожидаемый результат:
1 a
2 b
3 c
4 d
Поздравляю! Задача решена с помощью всего лишь одного вызова sed.
Если очевидные решения не приносят результата, всегда можно воспользоваться неочевидными. Благо таких неочевидных решений бесконечное множество.
Изучай. Всех с пятницей и хороших предстоящих выходных. Береги себя! tags: #bash #linux🔔
Показати все...
╯╭┳┳┳╮╰┈╮╰┈╯╭┈╮  ╮┣╭━╮┃▕╲╰┈┈┈╯╱▏  ┊┣┃┈╰╯▕╱▔▔▔▔▔╲▏ ╯┣╰┳┳┳┳▏▊┈▂┈▊▕╭  ╮╰━▏┊┊┊╲┈╰┻╯┈╱┊  ╰╮┊▏▂▂▂▂▔▂▕▔▔╭╯  ╮┊▕▂▏▂▏▕▂▏▂▏╭╯ Тыкни и подпишись на GITHUB котика
Показати все...
Не переношу жару, черт его знает как в детстве мы сидели во дворе и пили водку на солнце в +45 градусов, сейчас бы я так не смог. Сегодня будем проводить ректальное тестировать переменной PATH с помощью кишки.
( set -f; IFS=':'; for i in ${PATH:?'хуй с маслом'};do [[ -r "$i" && -d "$i/." ]] || echo "$i";done )
Эта кишка проверяет элементы в переменной PATH. И выводит на экран которые не существуют, или к которым нет доступа на чтение. Давай разберем каждый элемент отдельно:
set -f
Отключает функцию pathname expansion (или globbing). Это предотвращает интерпретацию символов *, ? и [] как шаблонов имен файлов.
IFS=':'
Устанавливает разделитель полей (Internal Field Separator, IFS) на двоеточие «:». Это необходимо для правильного разбора переменной PATH, где пути разделены двоеточием.
for i in ${PATH:?'хуй с маслом'}
Запускает цикл for, который перебирает каждый элемент переменной PATH. Выражение ${PATH:?'empty path'} проверяет, что переменная PATH не пустая; если она пустая, выводится сообщение «хуй с маслом» и выполнение прерывается.
do [[ -r "$i" && -d "$i/." ]] || echo "$i"; done
Внутри цикла проверяется каждый элемент «i» из PATH.
[[ -r "$i" && -d "$i/." ]]
Проверяет, существует ли каталог (-d "$i/.") и доступен ли он для чтения (-r "$i").
|| echo "$i"
Если каталог не существует или недоступен для чтения, то выводится значение «i» (путь). Думаю более менее понятно. Если видишь огромную кишку, разбивай её на части и тогда с ней проще будет разобраться.
Это как в тайм-менеджмент, что-то там блядь про делёжку слона на маленькие кусочки.
В общем суть такая — если переменная PATH не установлена или пустая, команда завершится и будет выдано сообщение «хуй с маслом». Поля переменной PATH отображаются на экран, если не соответствуют минимальным требованиям, или являются нулевыми. Bash будет искать в текущей директории.
man bash → PARAMETERS → Shell Variables → PATH PATH The search path for commands.  It is a colon-separated list of directories in which the shell looks for commands (see COMMAND EXECUTION below).  A zero-length (null) directory name in the value of PATH indicates the current directory.  A null directory name may appear as two adjacent colons, or as an initial or trailing colon.  The default path is  system-dependent,  and is set by the administrator who installs bash.  A common value is `/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin'
Минимальные требования. Каждый элемент пути должен иметь бит исполнения. Последний элемент должен быть каталогом и обладать разрешением на чтение, исполнение. Для запуска программы достаточно, чтоб исполняемый файл программы имел бит исполнения и все каталоги в пути имели бит исполнения, чтения (не требуется если указываете полный путь до исполняемого файла). У меня например после запуска кишки, выдало:
/snap/bin
Пошел смотреть и точно, в переменной PATH этот каталог указан, а физически его нет на диске. Для исследования путей удобно использовать команду namei.
namei -m /etc

f: /etc
   drwxr-xr-x /
   drwxr-xr-x etc
Тему про PATH поднимал раннее в этом посте.
Ну а так вроде всё, изучай! tags: #bash #linux🔔
Показати все...
Фото недоступнеДивитись в Telegram
🗓 20 июня , 18:00 📌 Selectel Network MeetUp№10. Юбилейный, терапевтический. Коллеги из приглашают на свой десятый митап, где поднимут наболевшие темы. Обсудят работу с дешевыми и дорогими коммутаторами, организацию Wi-Fi в компании и способы защиты от сетевых атак. Основные темы: ▫️ Защита от SYN-flood. ▫️ Работа с коммутаторами. ▫️ Опыт работы и заблуждения о Wi-Fi. Будет полезно всем, кто работает с сетями и сетевым оборудованием, а особенно сетевым администраторам, инженерам и архитекторам. Участие бесплатное, регистрируйтесь по ссылке и приходите в офис в Санкт-Петербурге или подключайтесь онлайн: https://slc.tl/fl4u4 Реклама ООО «Селектел» erid: 2VtzqvVQzhd
Показати все...
Фото недоступнеДивитись в Telegram
Сегодня без прелюдий. Давай через утилиту ps узнаем время, когда был запущен процесс. Делается это довольно просто. Для начала запустим подопытного. У меня будет гуёвая убунта. Запускаю firefox.
/usr/bin/firefox
Можешь с ярлыка на рабочем столе его заранить. А если нет иксов, подставь cron или какой-нибудь свой скрипт который крутится в фоне. Дальше открываем терминал и фапаем:
ps --no-headers -C firefox -o lstart
В ответ видим строку: Sun Jun 16 05:54:24 2024 Это и есть та самая временнáя метка, когда был запущен процесс. В моем случае firefox. Аналогично можно узнать метку любой запущенной программы или процесса. Формат поля lstart универсальный и его понимает тест(-newer) из предыдущего поста про find. Давай поищем файлы в домашнем каталоге, которые были модифицированы после запуска firefox.
find ~/ -newermt "$(ps --no-headers -C firefox -o lstart)"
Выводится достаточно большой список. Это хороший кейс, когда пытаешься что-то отдебажить. Некоторые версии утилиты ps могут создать головняк...
Показати все...
Как говорится — у хорошего айтишника и бычий хуй веревка! Привет. Сегодня про find и временные метки. У утилиты find есть ключ -newer. Тест (-newer) возвращает истину, если метка X новее метки Y. Формат теста такой:
-newerXY
Y — Указывает временную метку образца. X — Указывает временную метку искомых файлов.
Временные метки:
с — время изменения m — время модификации a — время последнего доступа t — буквальное время, а не имя файла (только Y) B — время создание файла (поддерживается не везде)
Поддерживаемые форматы (t): Вот несколько из них, которые можно получить с помощью утилиты date.
date --rfc-3339=ns  
date --rfc-2822   
date +'@%s.%N'
TZ=UTC0 date +'%Y-%m-%d %H:%M:%S'  
date +'%Y-%m-%d %H:%M:%S %z'  
LC_ALL=C TZ=UTC0 date  
Также date умеет отнимать/прибавлять даты.
date -d'- 1 hours'
Более подробно можешь почитать в гнутой доке. Или заглянуть командой: info coreutils date Теперь давай поищем файлы в домашнем каталоге у которых время модификации, менялось с заданной даты. Минус 2 часа от текущего времени.
find ~/ -newermt "$(date --rfc-2822 -d '- 2 hours')"
Ага, получаем ожидаемый список. Ок, теперь создадим файл bashdays.txt, у которого время модификации будет -2 часа от текущего времени.
touch -mt $(date '+%Y%m%d%H%M.%S' -d '-2 hours' ) bashdays.txt
Проверяем:
stat bashdays.txt
Смотрим поле Modify, ага все верно, время -2 часа от текущего времени. Снова запускаем поиск файлов, у которых время модификации свежее времени модификации файла bashdays.txt
find ~/ -newermm bashdays.txt
Выводим дополнительную информацию со временем модификации найденных файлов:
find ~/ -newermm bashdays.txt -printf '%t\n'
Допускается задавать разные временные метки искомых файлов и образца. Поиск файлов у которых время модификации новее времени изменения файла bashdays.txt
find ~/ -newermc bashdays.txt -printf '%t\n'
Чтобы узнать, при каких условиях изменяются временные метки. Можете поизучать man-страницы к системному вызову stat. Где это можно применить? Ну например, для зачистки старых бэкапов, если предпочитаешь использовать для этого самописные скрипты. На самом деле дофига где применить можно, всё зависит от фантазии и потребностей. Завтра выходной строим, в воскресение вернусь. Хороших предстоящих выходных, береги себя! tags: #linux #bash🔔
Показати все...
Фото недоступнеДивитись в Telegram
🚩🚩🚩🚩🚩🚩🚩 Тема: Нужен ли swap в Linux? Мы разберем: - что такое swap; - нужен ли он сегодня; - как он работает, какие данные в него уходят; - за что на самом деле отвечает параметр swappiness; - структуру кеша в Linux. 🏆 Спикер Андрей Буранов — системный администратор в VK, входит в топ-3 лучших преподавателей образовательных порталов. 5️⃣6️⃣7️⃣ Не упустите возможность! Регистрируйтесь сейчас https://otus.pw/CxGq/ 🔑 Специальная цена на курс «Administrator Linux. Professional» для участников. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Показати все...
Фото недоступнеДивитись в Telegram
Здрасти. Такое ощущение, что сегодня понедельник. Вчера коллега принёс вопрос — часто встречаю в настройках терминала, выбор каких-то xterm, vt100, linux, rxvt и т.п. Чо это такое и как влияет на потенцию? Вопрос на самом деле хороший, но его в приличном обществе предпочитают не задавать. Потому что мало кто про это вообще задумывался. По итогу эту настройку игнорируют и оставляют по умолчанию. Давай разберемся, что же это за зверь и какой вариант выбрать правильно. TL;DR Выбирай xterm-256color Все эти vt100, xterm и др. всё это типы терминалов. vt100 был разработан в конце 1970х, а xterm более современная версия. Но все равно все они уёбищные. Поэтому каждый из нас выбирает что-то мастхевное, Tilix, Quake, iTerm и т.п. Их можно заточить под свои хотелки и максимально кастомизировать. Давай посмотрим чем vt100 отличается от xterm. Добавляем в .bashrc экспорт и перезаходим:
export TERM=vt100
Теперь выполняем:
echo -e "\e[31mHello Bashdays\e[0m"
И видим что управляющие символы не сработали. А ...
Показати все...
00:43
Відео недоступнеДивитись в Telegram
MaxPatrol SIEM — не делайте это сами 🦾 27 июня в 14:00 (мск) 💥 MaxPatrol SIEM берет на себя рутинную работу аналитика по мониторингу и управлению событиями. Регистрируйтесь на онлайн-запуск MaxPatrol SIEM 8.2, чтобы узнать, как ML-модуль BAD 🤖 не только выдает второе мнение по событию в виде risk score, но и самостоятельно обнаруживает целенаправленные атаки. Регистрируйтесь, чтобы узнать обо всех обновлениях системы и получить гайд по подключению источников. Авторы лучших вопросов получат памятные призы! 👉 Зарегистрироваться
Показати все...
Ролик 2 (сжато).mp49.08 MB
Фото недоступнеДивитись в Telegram
Как говорится никогда не строй планы заранее. Вчера я успешно задрых и проебал момент с чаркой пива и сериальчиками. Ну хоть выспался, 12 часов сна пошли на пользу. А сегодня я принес тебе Puter. Это операционка прям в браузере. Даже терминал есть, но урезанный. Фишка этой операционки — ты можешь ее в докере поднять у себя и радоваться, прекрасно подходит для всяких малинок если иксы ставить прям впадлу. Ну и куча софта предустановлено, открывай и пиши код до посинения. Вся эта кухня в оупенсорсе на гитхабе. В демо версии есть хром браузер. Через него можно побегать по сайтам не светя свою жопку с айпишником. Айпишники кстати там разные попадаются, сейчас мне показывает — Пиздастан Редмонд. Ну ты понял, как этим можно воспользоваться 😲
Кстати отлично запускается порнохабина, даже ЗВУК есть!
Короче я принес, а ты уже сам смотри, мож где сгодится в хозяйстве. Увидимся! tags: #services🔔
Показати все...
Оберіть інший тариф

На вашому тарифі доступна аналітика тільки для 5 каналів. Щоб отримати більше — оберіть інший тариф.