переиграем и завершим эту прекрасную рубрику #pizza хоть квантовый компьютер подключайте, щас без правил и ограничений
👀 Один рубит - семеро в хуй трýбят!
Попросил сегодня на собесе кандидата зачистить nginx логи. Кандидат на роль девопс (мидл) на вилку 200-250к.
Зачистил —
Мде блядь… это будет интересно!
ㅤ
Задаю следующий вопрос — Серёжа, а почему файл
Где карта Билли? Нам нужна карта!
Внятного ответа не получил, что-то на уровне — он появится спустя сутки, когда logrotate отработает. Дада… будем сутки без логов сидеть. А если нет logrotate?
Короче, если хочешь зачистить файл, есть несколько безопасных способов.
Первый способ:
Тут мы перезаписываем лог-файл с помощью оператора редиректа «>».
Это безопасно для процесса, который продолжает записывать в лог, поскольку процесс будет продолжать писать в тот же файл, а его дескриптор не изменится.
Ключевая фраза — дескриптор не изменится. А когда ты этот файл через
Второй способ:
Третий способ:
Некоторые сервисы, например, apache или nginx, позволяют отправить сигнал процессу для того, чтобы он закрыл текущий лог-файл и открыл новый (сигнал USR1). В этом случае процесс продолжит работать, но логи будут записываться в новый файл.
Где
Четвертый вариант — тот самый logrotate, но его рассматривать не будем.
Я пользуюсь первым вариантом с символом перенаправления «>». Стильно, модно, молодежно!
Короче сначала думаем головой, а потом уже пользуемся тяжелой артиллерией вроде
А какие способы обнуления знаешь ты? Про аклкашку не пишите, этот способ знают все.
tags: #рабочиебудни #linux
—
🔔 ➡️
Попросил сегодня на собесе кандидата зачистить nginx логи. Кандидат на роль девопс (мидл) на вилку 200-250к.
Зачистил —
rm /var/log/nginx/access.log
Мде блядь… это будет интересно!
ㅤ
Задаю следующий вопрос — Серёжа, а почему файл
access.log
пропал и больше не появляется? Nginx то в данный момент работает, запросы на него идут.Где карта Билли? Нам нужна карта!
Внятного ответа не получил, что-то на уровне — он появится спустя сутки, когда logrotate отработает. Дада… будем сутки без логов сидеть. А если нет logrotate?
Короче, если хочешь зачистить файл, есть несколько безопасных способов.
Первый способ:
sudo > /var/log/nginx/access.log
Тут мы перезаписываем лог-файл с помощью оператора редиректа «>».
Это безопасно для процесса, который продолжает записывать в лог, поскольку процесс будет продолжать писать в тот же файл, а его дескриптор не изменится.
Ключевая фраза — дескриптор не изменится. А когда ты этот файл через
rm
ёбнул само собой дескриптор потерялся и nginx охуевает.Второй способ:
sudo truncate -s 0 /var/log/nginx/access.log
-s 0 =
обрезать файл до нулевого размера. В этом случае дескриптор также не будет потерян и nginx продолжит писать непотребности.Третий способ:
Некоторые сервисы, например, apache или nginx, позволяют отправить сигнал процессу для того, чтобы он закрыл текущий лог-файл и открыл новый (сигнал USR1). В этом случае процесс продолжит работать, но логи будут записываться в новый файл.
sudo kill -USR1 <pid>
Где
<pid> = PID
процесса. После выполнения этой команды файл с логов превратится в access.log.1
и откроется новый access.log
.Четвертый вариант — тот самый logrotate, но его рассматривать не будем.
Я пользуюсь первым вариантом с символом перенаправления «>». Стильно, модно, молодежно!
Короче сначала думаем головой, а потом уже пользуемся тяжелой артиллерией вроде
rm
и т.п.А какие способы обнуления знаешь ты? Про аклкашку не пишите, этот способ знают все.
tags: #рабочиебудни #linux
—
🔔 ➡️
Привет, друзья, вопрос из зала от коллеги. Кто что думает? Велком в комменты!
ㅤ
Вопрос:
tags: #рабочиебудни
—
🔔 ➡️
ㅤ
Вопрос:
Сейчас занимаюсь задачей по миграции/синхронизации файлового сервера предприятия.
Суть проблемы в следующем: Вся информация сейчас распределена по разным серверам, которые начинают выходить из строя.
Используется Windows Server с DFS, права настроены через Active Directory.
Новый файловый сервер нужно реализовать на базе РЕД ОС.
На этапе планирования столкнулся с рядом вопросов — как лучше организовать процесс миграции, чтобы структура и права доступа остались удобными и управляемыми?
Если у вас будут предложения или потребуется дополнительная информация, с радостью предоставлю! Заранее спасибо за помощь!
tags: #рабочиебудни
—
🔔 ➡️
Сегодня 1с начала ругаться на нехватку лицензий. Дело не мое, но начали проверять, и увидели подключение с IP, которого нет в нормативных документах.
🔥 Инцидент. Я немного офигел. Что, откуда? Нужно искать, кто тут такой умный.
Начинаем исследование:
на сервере 1c
Ага, скорее всего windows 10 после обновления переключила сеть в "общедоступные".
По mac определили, что это ASUS. Но может ноут, может комп или wi-fi роутер вредители воткнули в сеть.
Но как ее найти? Сетка не большая, меньше 100 ip, но не будешь же каждый комп и каждое устройство проверять...
Короче, на серваке 1с:
Через 5 минут пользователь звонит, "у меня 1с не работает".
Проверил - точно. Ip не правильно задали. Восстановил, перевел сеть в режим "Частные".
А проблему нехватки лицензий так и не решили. Конец года, вся бухгалтерия пашет. Вот лицензий на всех и не хватает.
Народ, а вы сталкивались с появлением в сети незарегистрированных ip? Как решали проблему?
tags: #networks #рабочиебудни © by Tagd Tagd
—
🔔 ➡️
🔥 Инцидент. Я немного офигел. Что, откуда? Нужно искать, кто тут такой умный.
Начинаем исследование:
на сервере 1c
ss|grep ip
- Видно, машина работает с 1с.ping ip
- машина не пингуется.nmap -Pn ip
- все порты < 1000 закрыты.Ага, скорее всего windows 10 после обновления переключила сеть в "общедоступные".
arp ip
- показывает macПо mac определили, что это ASUS. Но может ноут, может комп или wi-fi роутер вредители воткнули в сеть.
sudo arping -I enp3s4 ip
- машина пингуется.Но как ее найти? Сетка не большая, меньше 100 ip, но не будешь же каждый комп и каждое устройство проверять...
Короче, на серваке 1с:
sudo iptables -I INPUT -s ip -j REJECT
Через 5 минут пользователь звонит, "у меня 1с не работает".
Проверил - точно. Ip не правильно задали. Восстановил, перевел сеть в режим "Частные".
А проблему нехватки лицензий так и не решили. Конец года, вся бухгалтерия пашет. Вот лицензий на всех и не хватает.
Народ, а вы сталкивались с появлением в сети незарегистрированных ip? Как решали проблему?
tags: #networks #рабочиебудни © by Tagd Tagd
—
🔔 ➡️
Верной дорогой идёте товарищи...
ㅤ
Уровень статьи средне-сложный. Я не буду объяснять, как завести пользователя, как прописать ему оболочку, как настроить аутентификацию по ключам. Информации об этом валом.
Сегодня мы рассмотрим как сделать «тупиковую машину». Под ней я понимаю машину, попасть на которую можно через интернет по ssh, но на самой этой машине интернета нет.
Заинтриговал? Мозг немного взорвался? Короче, делаем ssh-прокси.
⁉️ Для чего это нужно?
Это можно использовать для раздачи доступа сторонним пользователям для управления ресурсами внутри сети, для студентов, работающих на удалёнке. (студенты IT - самые агрессивные пользователи).
Короче для минимизации рисков информационной безопасности. Скажу сразу, это не панацея. Инфу/файлы можно таскать через буффер обмена. Но много информации так не передашь.
Поехали!
Понадобится 2 машины: Бастионная (Jump-сервер, ssh-прокси) - машина, которая торчит открытым портом ssh в интернет.
И Тупиковая - машина (возможно виртуалка), с открытым в локалку портом ssh, на которой будет работать пользователь. И у которой нет доступа в инет (закрыт на периметровом маршрутизаторе. Или не прописаны шлюзы.
Основное условие у пользователя не должно быть root, а то сменит IP/MAC, пропишет шлюзы...). (допустим ее локальный ip
С Бастионной машины должен быть доступ к Тупиковой по ssh, внутри локалки.
НА БАСТИОННОЙ МАШИНЕ. (аутентификация по ключам уже настроена, ssh защищена от быстрого перебора)
1. Заводим пользователя, например, Tagd83j6 с паролем >=20 символов (не пригодится)
2. Добавляем публичный ключ Пользователя. (Он обычно с парольной фразой) в
3. Генерим ключ без пароля для доступа к Тупиковой машине. (лучше ed25519).
4. Домашней папке Tagd83j6 создаем файл типа
НА ТУПИКОВОЙ МАШИНЕ (аутентификация по ключам уже настроена)
1. Заводим пользователя Tagd83j6 с паролем >=20 символов (не пригодится)
2. добавляем публичный ключ(с Бастионной машины. п3) в
Все. Теперь, если на Бастионной машине от root набрать
Сразу должны попасть на Тупиковую машину.
Собственно все.
Аутентификация пользователя производится на Бастионной машине!!!
При подключении к Бастионной машине нас сразу перебрасывает на Тупиковую. На ней есть локалка, но нет интернета.
Вопросы, критика, плюсики приветствуется.
tags: #networks #linux © by Tagd Tagd
—
🔔 ➡️
ㅤ
Уровень статьи средне-сложный. Я не буду объяснять, как завести пользователя, как прописать ему оболочку, как настроить аутентификацию по ключам. Информации об этом валом.
Сегодня мы рассмотрим как сделать «тупиковую машину». Под ней я понимаю машину, попасть на которую можно через интернет по ssh, но на самой этой машине интернета нет.
Заинтриговал? Мозг немного взорвался? Короче, делаем ssh-прокси.
⁉️ Для чего это нужно?
Это можно использовать для раздачи доступа сторонним пользователям для управления ресурсами внутри сети, для студентов, работающих на удалёнке. (студенты IT - самые агрессивные пользователи).
Короче для минимизации рисков информационной безопасности. Скажу сразу, это не панацея. Инфу/файлы можно таскать через буффер обмена. Но много информации так не передашь.
Поехали!
Понадобится 2 машины: Бастионная (Jump-сервер, ssh-прокси) - машина, которая торчит открытым портом ssh в интернет.
И Тупиковая - машина (возможно виртуалка), с открытым в локалку портом ssh, на которой будет работать пользователь. И у которой нет доступа в инет (закрыт на периметровом маршрутизаторе. Или не прописаны шлюзы.
Основное условие у пользователя не должно быть root, а то сменит IP/MAC, пропишет шлюзы...). (допустим ее локальный ip
10.10.10.10
).С Бастионной машины должен быть доступ к Тупиковой по ssh, внутри локалки.
НА БАСТИОННОЙ МАШИНЕ. (аутентификация по ключам уже настроена, ssh защищена от быстрого перебора)
1. Заводим пользователя, например, Tagd83j6 с паролем >=20 символов (не пригодится)
2. Добавляем публичный ключ Пользователя. (Он обычно с парольной фразой) в
~/.ssh/authorized_keys
3. Генерим ключ без пароля для доступа к Тупиковой машине. (лучше ed25519).
4. Домашней папке Tagd83j6 создаем файл типа
shell10.sh
(666 root:root)
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
ssh $USER.10.10.10 2>/dev/null
sudo usermod -s /home/Tagd83j6/shell10.sh Tagd83j6
НА ТУПИКОВОЙ МАШИНЕ (аутентификация по ключам уже настроена)
1. Заводим пользователя Tagd83j6 с паролем >=20 символов (не пригодится)
2. добавляем публичный ключ(с Бастионной машины. п3) в
~/.ssh/authorized_keys
Все. Теперь, если на Бастионной машине от root набрать
su Tagd83j6
Сразу должны попасть на Тупиковую машину.
Собственно все.
Аутентификация пользователя производится на Бастионной машине!!!
При подключении к Бастионной машине нас сразу перебрасывает на Тупиковую. На ней есть локалка, но нет интернета.
Вопросы, критика, плюсики приветствуется.
tags: #networks #linux © by Tagd Tagd
—
🔔 ➡️
Интересно, но часто получаю вопрос: чем vi отличается от vim?
ㅤ
Если коротко, то все форки
Сейчас в современных дистрибутивах предустановлен именно
Так что ничего тут такого нет. Отличия — в функциональности.
Банально открой какой-нибудь
Но если будешь проверять, убедись что открывается именно
Такие дела. Вечерком залетит пост попизже от Tagd про права.
Хорошей всем рабочий недели!
tags: #linux
—
🔔 ➡️
ㅤ
Если коротко, то все форки
vi
это стероидные штуки, со своими свистоперделками, обвесами и т.п. А vi давно уже в деприкейтед.VIM =
VI iMproved, то есть — «VI Улучшенный»Прям готовое погоняло для викинга.
Сейчас в современных дистрибутивах предустановлен именно
vim
. Даже в CentOS 7 был предустановлен vim
вместо vi
(без симлинков).Так что ничего тут такого нет. Отличия — в функциональности.
Банально открой какой-нибудь
index.py
в vi
и потом в vim
, сразу увидишь что в vi
отсутствует подсветка синтаксиса + в vi
если память не изменяет — не было визуального режима.Но если будешь проверять, убедись что открывается именно
vi
, потому что в 99999% у тебя отроется vim
.Такие дела. Вечерком залетит пост попизже от Tagd про права.
Хорошей всем рабочий недели!
tags: #linux
—
🔔 ➡️
Тут меня попросили подробнее рассказать про права 330 на каталог.
🔤🔤🔥🔤🔤🔤🔤
Но начну я с того, что напомню, что права в текстовом формате несколько лучше, чем в числовом.
ㅤ
Конкретно дело касается права "X". Это то же самое, что "x" но касается только каталогов.
То есть
Ну, ладно, я отвлекся. 330.
Тут в чате Alex (генератор идей) правильно назвал права «черной комнатой». Клаcсная аналогия.
Короче, я баню зловредов, которые ломятся ко мне на ssh. Баню в разных филиалах. И филиалы сваливают ежедневные отчеты мне, в головной по sftp.
По-хорошему, нужно, чтоб для каждого филиала, отдельная учетка, все загружают, каждый в свой каталог... Но данные не особо ценные.
Но и паранойю никто не отменял. А если ломанут один филиал, и как начнут данные отравлять... :-)
В общем принял решение, что все работают под одной учеткой. Поставил права на папку 330 (-wx-wx---).
Эти права разрешают файл открыть, записать, удалить. Только нужно точно указать какой конкретно файл. Потому что список получить нельзя.
Файлы сваливаются с суффиксом, например
То есть на сервере в головном от root я вижу все файлы, а филиалы не видят не то что соседние файлы, но даже свой.
Эти права раньше часто ставили на папку upload на анонимных ftp серверах. Но и сейчас можно использовать, для заливки, бэкапов, например.
Да, знаю, сейчас опытные админы набегут и начнут рассказывать про rsync. Я архивы шифрую. А при работе с шифрованными архивами rsync работает хуже, чем sftp. (Ну, сначала контрольные суммы, потом сравнение, потом синхронизация).
А что там сравнивать... они всегда разные. Блин, опять скатился на больное... В общем, при одной учетке, формально можно считать sftp сервер анонимным, но с кругом пользователей, ограниченным ключами :-).
Применение прав 330 позволяет упростить заливку файлов с обеспечением некоторой секьюрности.
Для освежения памяти очень рекомендую статью chmod в википедии.
tags: #security #linux
—
🔔 ➡️
🔤🔤🔥🔤🔤🔤🔤
Но начну я с того, что напомню, что права в текстовом формате несколько лучше, чем в числовом.
ㅤ
Конкретно дело касается права "X". Это то же самое, что "x" но касается только каталогов.
То есть
chmod -R +X ./
установит возможность поиска во всех подкаталогах текущего, но не сделает все файлы исполняемыми!Ну, ладно, я отвлекся. 330.
Тут в чате Alex (генератор идей) правильно назвал права «черной комнатой». Клаcсная аналогия.
Короче, я баню зловредов, которые ломятся ко мне на ssh. Баню в разных филиалах. И филиалы сваливают ежедневные отчеты мне, в головной по sftp.
По-хорошему, нужно, чтоб для каждого филиала, отдельная учетка, все загружают, каждый в свой каталог... Но данные не особо ценные.
Но и паранойю никто не отменял. А если ломанут один филиал, и как начнут данные отравлять... :-)
В общем принял решение, что все работают под одной учеткой. Поставил права на папку 330 (-wx-wx---).
Эти права разрешают файл открыть, записать, удалить. Только нужно точно указать какой конкретно файл. Потому что список получить нельзя.
Файлы сваливаются с суффиксом, например
filXXX_Ohd1Ul.txt
Имя файла для каждого филиала всегда одно и то же, префикс - название филиала, суффикс набор букв (защита от перебора).То есть на сервере в головном от root я вижу все файлы, а филиалы не видят не то что соседние файлы, но даже свой.
Эти права раньше часто ставили на папку upload на анонимных ftp серверах. Но и сейчас можно использовать, для заливки, бэкапов, например.
Да, знаю, сейчас опытные админы набегут и начнут рассказывать про rsync. Я архивы шифрую. А при работе с шифрованными архивами rsync работает хуже, чем sftp. (Ну, сначала контрольные суммы, потом сравнение, потом синхронизация).
А что там сравнивать... они всегда разные. Блин, опять скатился на больное... В общем, при одной учетке, формально можно считать sftp сервер анонимным, но с кругом пользователей, ограниченным ключами :-).
Применение прав 330 позволяет упростить заливку файлов с обеспечением некоторой секьюрности.
Для освежения памяти очень рекомендую статью chmod в википедии.
tags: #security #linux
—
🔔 ➡️
Сегодня настроение ныть почему-то нет, поэтому научимся открывать файл на нужной строке в разных редакторах.
ㅤ
А нахуя это нужно? Ну ХЗ, я обычно этим не пользуюсь, открываю полностью файл и ищу нужную мне строку. Но это вкусовщина, кто как привык.
Вообще я встречал людей, которые так открывают файлы, когда видят нечто подобное:
Хуяк и открыл
Короче давай посмотрим как это сделать.
Создаем файл для теста:
Получаем такое содержимое:
Ну и теперь давай открывать это:
➡️ mcedit
➡️ less
➡️ nano
➡️ vim
Вот такие пироги. А какие еще редакторы ты знаешь в которых можно открыть файл на определенной строке? Камон в комменты!
tags: #linux #tricks #bash
—
🔔 ➡️
ㅤ
А нахуя это нужно? Ну ХЗ, я обычно этим не пользуюсь, открываю полностью файл и ищу нужную мне строку. Но это вкусовщина, кто как привык.
Вообще я встречал людей, которые так открывают файлы, когда видят нечто подобное:
Error in file "script.py" on line 42: NameError: name 'variable' is not defined
Хуяк и открыл
script.py
сразу на 42 строке.Короче давай посмотрим как это сделать.
Создаем файл для теста:
( printf '%s\n' {A..Z}-$[++I] > /tmp/bashdays.txt )
Получаем такое содержимое:
A-1
B-2
C-3
D-4
E-5
F-6
G-7
H-8
I-9
...
Ну и теперь давай открывать это:
➡️ mcedit
mcedit +7 /tmp/bashdays.txt
➡️ less
less -w +11 /tmp/bashdays.txt
➡️ nano
nano +14 /tmp/bashdays.txt
➡️ vim
vim +4 /tmp/bashdays.txt
Вот такие пироги. А какие еще редакторы ты знаешь в которых можно открыть файл на определенной строке? Камон в комменты!
tags: #linux #tricks #bash
—
🔔 ➡️
👍1
Про процессоры
Привет, знаю что несколько не формат, но давно хотел написать да и в личке довольно много просили, потому полагаю некоторым пригодится.
🔤🔤🔥🔤🔤🔤🔤🔤🔤🔤
Автор поста 👆👆👆 А я лишь утащил в телеграф, получился длинно-пост, сюда не влезло. Лайки и комментарии приветствуются.
👉 Читаем и проникаемся
tags: #hardware
—
🔔 ➡️
Привет, знаю что несколько не формат, но давно хотел написать да и в личке довольно много просили, потому полагаю некоторым пригодится.
🔤🔤🔥🔤🔤🔤🔤🔤🔤🔤
Автор поста 👆👆👆 А я лишь утащил в телеграф, получился длинно-пост, сюда не влезло. Лайки и комментарии приветствуются.
👉 Читаем и проникаемся
tags: #hardware
—
🔔 ➡️
Пули закончатся раньше чем ноги
Откапал сегодня в одном коммерческом интерпрайзе такую конструкцию:
Смотрю я в неё и понять не могу, а нахуя?
ㅤ
Давай разберемся что тут не так.
Понял в чем дело? Нет? Давай дальше…
Вопрос — нахуя здесь «test»? Цикл и так является условным и сам проверяет что вернула команда. Получается избыточность.
Такое обычно херачат, либо по привычке, либо когда нужно быстрое решение, а времени на ресерч нет. Работает да и хрен с ним.
Вся эта конструкция могла бы выглядеть так:
Цикл будет шуршать, пока команда pgrep отрабатывает без ошибок и находит процесс.
Вот такая вот романтика, на хую два бантика… Изучай!
tags: #bash
—
🔔 ➡️
Откапал сегодня в одном коммерческом интерпрайзе такую конструкцию:
while [ $(pgrep process_name)>'0' ]
do
sleep 5
done
Смотрю я в неё и понять не могу, а нахуя?
ㅤ
Давай разберемся что тут не так.
«[»
= это аналог или синоним встроенной команды «test». Если не задавать оператор, то на пустой строке вернется FALSE. Ну и логично что вернется TRUE если срока не пустая.«while»
— ежу понятно, условный цикл. Будем вертеть на хуй, пока команда заданная в условие возвращаешь истину. В нашем случае эта команда «test».«pgrep»
— ищем процесс с именем process_name. Эта штука выводит на стандартный вывод PID процесса. Если процесс не найден, код возврата отличный от нуля и нуль в противном случае.«$(command)»
— Command запускается в подоболочке. Результат выполнения, подставляется в текущую позицию.«>»
— Перенаправляет результат работы команды в файл (в нашем случае файл 0). Существующий файл, перезаписывается. Несуществующий, будет создан.Понял в чем дело? Нет? Давай дальше…
Вопрос — нахуя здесь «test»? Цикл и так является условным и сам проверяет что вернула команда. Получается избыточность.
Команда test — Предназначена для проверки типа файла и сравнения чисел и строк. Возвращает код возврата 0 (истина) или 1 (ложь) в зависимости от вычисления выражения. Выражения могут быть как унарными, так и бинарными.
Такое обычно херачат, либо по привычке, либо когда нужно быстрое решение, а времени на ресерч нет. Работает да и хрен с ним.
Вся эта конструкция могла бы выглядеть так:
while pgrep process_name &> /dev/null
do
sleep 5
done
Цикл будет шуршать, пока команда pgrep отрабатывает без ошибок и находит процесс.
Вот такая вот романтика, на хую два бантика… Изучай!
tags: #bash
—
🔔 ➡️
Набрёл сегодня на мануал по установке ack, а там такое:
В строке, в конце есть непонятности:
ㅤ
Опять какая-то магия, а магию мы с тобой любим.
Давай разберемся.
В данном случае
Например,
Вместо доступа к уже выполненной команде из истории, мы ссылаемся на текст текущей строки.
Соответственно:
Как это работает?
Сначала выполняется команда curl, которая скачает файл ack-2.28-single-file и сохранит его в
После этого, команда chmod изменяет права доступа для файла.
А
И по итогу команда превращается в
Вот и вся магия. Упорото? Аще!
А зачем это нужно?
- удобно для автоматизации и избежания дублирования ввода
- снижает вероятность ошибок, если накосячил в путях
Короче эта хреновина делает команду более динамичной и минимизирует рукоблудие.
Штука прикольная, как говорится — век живи, век учись.
🔥 Ну и с пятницей друзья! Еще пару недель и каникулы.
tags: #bash
—
🔔 ➡️
curl https://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 !#:3
ack — инструмент для поиска текста в файлах, который часто используется разработчиками как более удобная и современная альтернатива `grep`. Он написан на Perl и ориентирован на работу с кодом.
В строке, в конце есть непонятности:
!#:3
ㅤ
Опять какая-то магия, а магию мы с тобой любим.
Давай разберемся.
В данном случае
!#:3
— это конструкция, связанная с историей команд в оболочке Bash/Zsh.!
= Используется для доступа к истории команд.Например,
!!
повторит последнюю команду, а !123
выполнит команду с номером 123 в истории.#
= Ссылается на текущую команду, которая в данный момент пишется.Вместо доступа к уже выполненной команде из истории, мы ссылаемся на текст текущей строки.
:3
= Указывает, что нужно взять третий аргумент в текущей строке.Соответственно:
:1 — первый аргумент
:2 — второй аргумент
:3 — третий аргумент
Как это работает?
Сначала выполняется команда curl, которая скачает файл ack-2.28-single-file и сохранит его в
~/bin/ack.
После этого, команда chmod изменяет права доступа для файла.
А
!#:3
подставляет третий аргумент текущей команды, то есть ~/bin/ack.
И по итогу команда превращается в
chmod 0755 ~/bin/ack
curl http://beyondgrep.com/ack-2.28-single-file > ~/bin/ack && chmod 0755 ~/bin/ack
Вот и вся магия. Упорото? Аще!
А зачем это нужно?
- удобно для автоматизации и избежания дублирования ввода
- снижает вероятность ошибок, если накосячил в путях
Короче эта хреновина делает команду более динамичной и минимизирует рукоблудие.
Штука прикольная, как говорится — век живи, век учись.
🔥 Ну и с пятницей друзья! Еще пару недель и каникулы.
tags: #bash
—
🔔 ➡️
This media is not supported in your browser
VIEW IN TELEGRAM
🎄 Моя! 🎄
Ну чо, кто на ёлку богат уже? Кидайте в комменты ёлки и своё пятничное настроение, пиво там, вискарь или чо там у вас.
Ну чо, кто на ёлку богат уже? Кидайте в комменты ёлки и своё пятничное настроение, пиво там, вискарь или чо там у вас.
Так вот
🔤🔤🔥🔤🔤🔤🔤
Нука бармалеи, чо будет?
+ прикол
🔤🔤🔥🔤🔤🔤🔤
Эта музыка будет вечной, если я заменю батарейки
#!/bin/bash
declare -i a=9223372036854775803
for i in {1..10};do
echo $((a++))
done
Нука бармалеи, чо будет?
+ прикол
#!/bin/bash
declare -i a=1
for i in {1..64};do
a=a*2
[[ $i -gt 60 ]] && echo $i,$a
done