Bash Days | Linux | DevOps
23.3K subscribers
155 photos
24 videos
676 links
Авторский канал от действующего девопса

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

Автор: Роман Шубин
Реклама: @maxgrue

MAX: https://max.ru/bashdays

Курс: @tormozilla_bot
Блог: https://bashdays.ru
Download Telegram
Есть у клиента старинный сервер с мониторингом, старинный как гавно мамонта. Работает чуть ли не на BlackCat Linux.

Всё бы ничего, но при подключении к этому серверу по ssh, оно пиздец долго думает, минуты по 3-4 и только потом пускает. Сидишь как олень ждешь у моря погоды.

Сегодня будем решать эту проблему.

Самый очевидный фикс, это прописать в конфиге: /etc/ssh/sshd_config опцию: UseDNS no.

Опция отключает обратное DNS-разрешение IP-адреса клиента при подключении по SSH.

По умолчанию опция UseDNS yes, SSH-сервер при подключении клиента:

1. Получает IP-адрес клиента.
2. Делает обратный DNS-запрос (reverse DNS lookup) — определяет доменное имя по IP.
3. Делает прямой DNS-запрос для проверки, что имя действительно соответствует IP


Дохуя лишнего!

😲 Но этот способ не прокатил. Ладно, идем дальше!

Нахожу в конфиге /etc/ssh/sshd_config: UsePAM yes, ага, еще один звоночек.

Удаляю эту опцию из конфига.

Перезапускаю: systemctl restart sshd

Пробую подключиться по ssh к серверу. Слава яйцам! Залетает только в путь, без мучительных ожиданий. Дело закрыто!

Что делает UsePAM yes в SSH

Когда выставлено UsePAM yes, после успешной аутентификации (например, по публичному ключу), sshd передаёт управление PAM-модулям, которые:

1. Создают сессию (session блок в /etc/pam.d/sshd)
2. Инициализируют среду (например, pam_env)
3. Логируют (pam_lastlog, pam_motd)
4. Могут подключать модули вроде pam_systemd, pam_limits, pam_loginuid и т.п.


Ну и корень проблемы: /etc/pam.d/sshd обычно в этом файле включена пачка модулей которые тормозят твою деятельность.

Вдумчиво настрой этот файл и потом можно обратно включать UsePAM yes.

Проблема решена, всем хорошей рабочей недели!

🛠 #ssh #bugfix #linux

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
1117
Сегодня будем собирать "сливки на молоке". Поговорим немного об оптимизации bash по времени исполнения.

🔤🔤🔥🔤🔤🔤🔤

Все помнят, что есть команда time, которая с точностью до 1e-3 может подсчитать время выполнения конвейера.

Для перфекционистов, вроде меня, есть переменная EPOCHREALTIME, которая выдает текущее время в системе с точностью до 1e-6, т.е до микросекунды.

Но для ее использования есть два препятствия:

1. Она в вещественном формате, а bash не работает с вещественными числами.

2. Разделитель дробной части зависит от языковых настроек. (где-то точка, где-то запятая...)

Попробуем решить эти проблемы. Простая функция. Вычисляет разницу RealTime2-RealTime1 в микросекундах. Если RealTime2 не задана - принимается EPOCHREALTIME.

#uTIME RealTime1 [RealTime2]
function uTIME(){
local T2=${2:-$EPOCHREALTIME}
local T1=${1:-$T2}
T2=${T2/[^0-9]/} ;T1=${T1/[^0-9]/}
# ((T2-T1)) && \
echo $((T2-T1))
}


Ну и теперь, вооружившись инструментом, попробуем использовать на практике:

1. Сравним время выполнения двух функций B1 - исполняется в текущей среде, B2 - исполняется в subshell

2. Сравним преобразование числа в дату с помощью date и printf

#!/bin/bash
function uTIME(){
local T2=${2:-$EPOCHREALTIME}
local T1=${1:-$T2}
T2=${T2/[^0-9]/} ;T1=${T1/[^0-9]/}
# ((T2-T1)) && \
echo $((T2-T1))
}

function B1(){ :;}
function B2()(:)

uTIME

echo -n 'function {} = '
T=$EPOCHREALTIME
B1
uTIME $T

echo -n 'function () = '
T=$EPOCHREALTIME
B2
uTIME $T

echo -n 'printf -v VAR "%(%Y%m%d)T" 1746024063 = '
T=$EPOCHREALTIME
printf -v VAR "%(%Y%m%d)T" 1746024063
uTIME $T

echo -n 'VAR=$(date -d@1746024063) = '
T=$EPOCHREALTIME
VAR=$(date -d@1746024063 +%Y%m%d)
uTIME $T


0
function {} = 106
function () = 2533
printf -v VAR "%(%Y%m%d)T" 1746024063 = 405
VAR=$(date -d@1746024063) = 5221

Обратите внимание - результаты отличаются на порядок.

Конечно, в реальных случаях использования, скорее всего, результаты будут отличаться меньше, но есть смысл задуматься. Особенно, если Вы будуте использовать функции во внутреннем цикле.

Первый (пустой) вызов uTIME нужен потому, что первый вызов функции всегда выполняется дольше, чем последующие. Если кого-то напрягает "0" на экране при инициализации - раскомментируйте строчку # ((T2-T1)) && \

Если нужно засечь время выполнения в контрольных точках - используйте массив:
RT+=($EPOCHREALTIME)

В при каждом исполнении этого оператора в массив будет добавляться время контрольной точки. Время исполнения между точками можно будет вычислить как
uTIME ${RT[N]} ${RT[N+1]}


Исследуйте bash, оптимизируйте, развивайтесь.

🛠 #bash

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
38
Как из РФ создать новую учётку в Gitlab

У ребят в Linux Factory довольно часто возникает вопрос — а как зарегистрировать новую учетку в Gitlab?

Онож там и карту просит и смс и еще хуй пойми чего.

Вариантов есть много, но работают они 50 на 50. У кого-то работает одно, у кого-то другое, но нет золотой середины.

Сейчас я покажу 100% рабочий вариант.

Регистрируешься в Putsbox. Это сервис для временных почтовых ящиков. Проверен лично мной годами, никогда не косячит.

Про этот сервис я как-то давненько рассказывал здесь.


Тут важно зарегистрироваться, а не просто создать новый ящик.

Это важно, потому что Gitlab рано или поздно снова запросит подтвердить твою личность и отправит код на почту. А если ты не порегаешься в putsbox, то ящика того самого не будет.

Короче регаешься в putsbox, входишь в учетку и создаешь почтовый ящик.

Дальше скачиваешь себе TOR Browser и регаешься в Gitlab на ящик который создал в ранее. Проходишь капчу, челенджи с количеством камней и т.п. Да, будет подтормаживать, но за пару минут управишься.

После регистрации на ящик в putsbox приходит код с подтверждением, подтверждаешь. Закрываешь TOR Browser.

Идешь в свой браузер и без проблем залетаешь в Gitlab под новой учёткой.

Без карт, смс и прочей хуиты. Если в будущем оно попросит тебя снова подтвердить личность, идешь в старый ящик putxbox и подтверждаешь.

А если запуск пайплайнов требуют верификации, то читаем этот пост.


На самом деле всё просто. Единственный момент — TOR Browser, возможно сразу он у тебя не запустится, нужно будет поиграть с мостами либо заранее подключить VPN. Короче тут сам разберешься, это уже дело третье.

Если такая ебатория не по тебе, можешь локально Gitlab воткнуть. В этом посте я по шагам показал как это сделать. И не нужно думать что эта тварь сильно прожорливая, под лабу хватит минимального конфига по железу.


Такие дела, тыкай, изучай.

🛠 #linuxfactory #gitlab #services

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
647
Вот смотри, берем школьников, есть условный «отличник».

Он ничего не может, кроме как выучить, зазубрить. Особенно в начальных классах. У него еще нет понимания, зачем это нужно и для чего. Он пиздюк.

А двоечник/троечник, он уже в этом возрасте во всем разбирается. Воспитан улицей, консолью, гуглом и гитхабом.

Он сразу думает — так блядь, как же мне выкрутиться из этой ситуации, выучить я не могу, потому что я тупая обезьяна. Если я получу двойку, мне пропишут пиздюлей, заберут телефон, сошлют в ад.

Хуй там плавал. Двоечник/троечник нихера не тупой, он просто не хочет учить, мол — да в рот оно ебись конём, не кайф мне учить, нахуя я буду себя этим дерьмом пичкать. Это бесполезная информация!

Дальше он думает — таааак, чтобы не получить двойку, надо подмазаться к отличнику, чтобы списать, придумать какую-то справку и не пойти на урок, возможно осуществить хитрую многоходовочку и все в таком духе.

Понимаешь?

Это уже состоявшийся Кризис Менеджер, СРАЗУ! Потому, что двоечник/троечник это — ЛИЧНОСТЬ с нестандартным мышлением.

А «отличник» — шаблонный персонаж, который даже не понимает зачем он получает эти пятёрки.

К чему это я…

Не нужно вылизывать свой код до совершенства, самое главное — чтобы оно работало, а как ты это сделаешь — неважно. Таску в done, остальное в техдолг. Бизнес рад, ты молодец.

А когда ты начинаешь вылизывать письки, начинаешь проёбывать дедлайны, злиться на себя, выгораешь, залечиваешь раны после ретроспективы.

Отпусти! Делай как умеешь и не рви жопу. Сбалансируй это! И всё у тебя будет хорошо.

Всё что совершенно — это полная хуйня!

Всегда должен быть изъян, прод должен падать, техдир должен плакать.

Это блядь айти!

«Отличник» — не всегда умный, а «двоечник/троечник» — не всегда глупый.

Нестандартное мышление проявляется рано.

Школа поощряет подчинение, а не инициативу.

Внутренний бунт — первый шаг к становлению личности.

Креативность и критическое мышление рождаются в условиях давления.


Хороших тебе выходных и береги себя!

Я в перелетах, все домашки проверю на днях, не теряйте.

🛠 #рабочиебудни #remains

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
34154
За что не люблю nexcloud — натыкал что-то через морду мышкой и получил по ебалу 500й ошибкой. И всё блядь! Обратно не откатишься.

Убедился, файл есть, содержимое в файле есть. Сука!

Сломал так — включил модуль Удалённое хранилище и через него подключил локальную папку. Всё!


Отключение модулей через консольку ситуацию не меняет, в дебаг даж не полезу, потому что 10 лет подряд с этим nextcloud такие вот свистопляски. Каждый раз ощущаю себя каким-то сапёром и боюсь лишнего натыкать. Ну так же не должно быть!

Чё щас кстати по рынку подобного есть? Но не на ебучем PHP и без таких приколов?

🛠 #рабочиебудни #fails

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1251
Про shit-урлы

Правильно, о чём же я могу тебе еще рассказать, про девопс, про линукс да про письки.

Лови прикол: IlIlllIIl.llIlI.lI

Этот домен приведёт тебя… Ну сам короче ткни да посмотри куда он тебя приведет.

Ну или такой:

https://loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo.ong/loooooooooOOoOooooooooooooOOOoOoooooooooooOOOoOoooooooooooOOOoooooooooooooOOOooOOooooooooooOOOoOoooooooooooOoOOOOooooooooooOoOOOOoooooooooOOOoOooooooooooooOoOOOooooooooooOOoOOoOoooooooooOOooOoOooooooooooOoOOOOoooooooooOOoooOooooooooooOOooooOoooooooooOOOooOOoooooooooOOoOooooooooooooOOooOoooooooooooOOooooOoooooooooOOOOooOoooooooooOOOooOOng

Все любят сокращать ссылки, а ты выебнись и удлини!

Делается это через генераторы:

1. Лилилилили
2.
Лооооооох

Ну и конечно же всё это есть на гитхабе, можешь свой хитрожопый домен придумать и выпендриваться.

1. shit-url
2.
loooooooooo

Еще там активно это на CNAME кидают и какие-то невообразимые вещи делают.


Зачем оно тебе нужно, ну хуй знает. Чисто в BIO поставить, да над коллегами поугарать.

Хорошей тебе рабочей недели, изучай!

🛠 #services

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
566
Сервис для поиска долбаёбов

Каждый из нас совершал такую ошибку — отправка конфиденциальных данных в гит репозиторий.

Ладно если репа приватная, максимум выебут на ретро. Но если репка публичная то тут уже могут возникнуть куда более серьезные проблемы.

Сервис grep.app как раз позволяет такие проблемы создавать. Это грепалка данных по миллиону открытых гит репозиториев.

Вот и всё!

Нужны ключи от gpt или midjourney? Да пожалуйста! Есть желание запентестить чужой сервак? Вот тебе приватные ssh ключи и айпишники! Хочешь коммерческий доступ к mindmax? Так вот он!


Ну и всё в таком духе.

Короче обычный поисковик по открытому исходному коду.

Естественно в злых умыслах лучше это не использовать, не ровен час получишь по ебалу.

Но чисто в научных целях, прям маст-хэв!

Забирай в инструментарий, глядишь сгодится в хозяйстве.

🛠 #services

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
563
На каждую жопу с резьбой, найдется хуй с винтом!

Очередной вопрос — не хочу графану, не хочу всю эту ебаторию, а как мониторить то сайтик?

Да блядь всё просто — Uptime Kuma!

У самого стоит как с похмелья, да и у клиентов тоже нефритовый стояк.

Идеальное решение как самостоятельное, так и дополнительная приблуда к основному мониторингу.

Там есть практически всё, чтобы понимать что тебе песда!

У меня в основном триггеры на статусы стоят, поиск слов, ответы апихи.

Аааа.. еще и срок жизни ssl сертов отслеживает, тут прям заебись.

Ну и из приятного — пингует тебя в телегу, не заябывает, а по делу!


Короче настоятельно рекомендую эту штуку у себя развернуть, даже как доп к основному мониторингу. Порой оно кричит раньше чем всё сломалось.

Вот те докерфайл

version: "3.8"
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- 3001:3001
volumes:
- uptime-kuma:/app/data
volumes:
uptime-kuma: null


Ну и ссылка на гитхаб

А у меня сегодня пятница, дети закончили очередной учебный год, слава яйцам, три месяца не надо вставать в ёбаных 6 утра.

Краба тебе, завтра еще увидимся!

🛠 #utilites

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
14133
Со временем SRE инженер учится скрывать свой страх. Для всех это выглядит примерно так — ceph развалился? Ну ок, щас починим.

В это время в голове SRE инженера — ебическая сила, мир в огне, всему песда, щас в жопу полезут, чё делать? Сука блять пизда дешёвка проститутка прошмандовка блядский выродок гондон выходи из круга вон!

Да похуй, пойду кофе попью.

Молодые инженеры испытывают огромный стресс в таких ситуациях.

Ощущают — как раскаленный металлический хуй терминатора проходит через их жопы, через все тело и прямо в уши долбит ритм Angel of Death, пульсирует, взрывает перепонки.

На языке возникает горечь, голова покруживается, адреналин бьёт ключом.

Это особый страх, первобытный, девопсовый.

Страх похожий на — когда в тебя стреляют из огнестрельного оружия, но не попадают. Ощущение предстоящей кончины. Беззащитность.

Но когда в тебя постоянно и долго стреляют из такого оружия, ты начинаешь познавать этот страх и начинаешь скрывать его.


Поэтому за фразой — да похуй, пойду кофе попью — скрывается нечто большее… скрывается опыт.

Ты не можешь на это никак повлиять, так зачем суетиться?

Попей кофе, выжди, глядишь оно само починится, 502 статус еще не приговор. Оно уже случилось.

Всё что ты можешь сделать — принять, спокойно подумать и придумать решение. Ну или не придумать, потому что оно само починится.

Короче к чему я всё это — проще будь, ёпта! Ты должен ебать айти, а не айти тебя!

🛠 #рабочиебудни #remains

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
61193
Очередные грабли. При клонировании Linux машин, клонированные машины получают по DHCP тот же IP адрес, что и донор. Возникает конфликт интересов.

Проблема распространенная, лечится довольно просто.

1. Меняем MAC адреса на клонах
2. Меняем machine-id на клонах

В первом случае всё просто, делается через морду VBox, либо через консольные команды:

ip link
sudo ip link set dev eth0 down
sudo ip link set dev eth0 address 00:11:22:33:44:55
sudo ip link set dev eth0 up


Новый MAC адрес можешь сгенерить такой командой:

printf '02:%02x:%02x:%02x:%02x:%02x\n' $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256)) $((RANDOM%256))


Во втором случае это файл /etc/machine-id, в нем хранится уникальный идентификатор машины.

ed76c4f179044828b51028aadf9f4981


Удаляем и генерим новый machine-id:

sudo rm /etc/machine-id sudo systemd-machine-id-setup


Перезапускаем виртуальную машину. DHCP выдаёт этой машине новый IP адрес, который не будет конфликтовать с донором.

Вот и вся наука. Пользуйся.

🛠 #linux #linuxfactory

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
87
Продолжаем тыкать SelectOS

На этот раз, я покажу как раскатать ОС в облаке из ISO образ (не из коробки).

Наступлю на несколько граблей, задебажу, пофиксю и пообщаюсь с саппортом. Короче будет интересно, го 👇

🦖 Ставим SelectOS в облако

Предыдущие посты:

- Пробуем SelectOS
- SelectOS в деле

🛠 #linux #review

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
231
Тошнит от избыточности Portainer?

Ну дак вот, есть пиздатая легковесная альтернатива под названием dockge.

Визуально она очень похожа на Uptime Kuma, без хуйни и перегруженных интерфейсов.

Суть простая: скармливаешь туда свой docker-compose, нажимаешь — запустить, а дальше оно само всё сделает.

Удобное редактирование, обновление, поддержка .env, визуализация логов, подключение через shell к контейнерам и т.п.


В общем всё что нужно для быстрого развертывания.

Сам лично переехал на эту штуку в домашней лаборатории. И пока доволен. Вот те готовый ямлик для запуска dockge.

services:
dockge:
image: louislam/dockge:1
restart: unless-stopped
ports:
- 5001:5001
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
- /opt/stacks:/opt/stacks
environment:
- DOCKGE_STACKS_DIR=/opt/stacks
- DOCKGE_ENABLE_CONSOLE=true


➡️ Репка на гитхабе
➡️ Посмотреть видео работы

Забирай в копилку! Ну и с пятницей!

🛠 #utilites #docker

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
682
С пятницей! Здоровья тебе и твоим близким, береги себя!
54182
Распространенный случай в пайплайнах, как ребята пишут в LF:

deploy:
stage: deploy
script:
- ssh ${USER}@${HOST} "docker pull"
- ssh ${USER}@${HOST} "docker down"
- ssh ${USER}@${HOST} "docker up -d"
- ssh ${USER}@${HOST} "....."


🔥 Как и обещал. С сегодняшнего дня в Linux Factory действуют летние скидки. Кто ждал, велком.


То есть на каждую команду, создается отдельная SSH сессий. В большинстве случаев у тебя всё будет работать, но порой можно наступить на грабли.

На сервере может быть установлены лимиты в ssh_configMaxSessions, а плюсом еще работает Fail2ban или нечто подобное.

И по итогу пайплайн будет вечно делать хуйню, внезапно падать и т.п.

Что делать?

Передать команды в рамках одной сессии.

Например, так:

script:
- |
ssh ${USER}@${HOST} << EOF
docker pull ...
docker down ...
docker up -d ...
...
EOF


В YAML, конструкция | перед блоком многострочного текста указывает, как обрабатывать переносы строк. | означает: сохраняй все переносы строк, как они написаны.


Либо пропихать так:

script:
- ssh ${USER}@${HOST} "docker pull ...; docker down ...; ..."


Но предпочтительнее первый вариант, он консистентный и более читаемый.

Учись сразу делать нормально и учитывать такие моменты.

Ну и с праздником тебя и твоих ребятишек!

🛠 #devops #linuxfactory #cicd

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
782
Всем UpSnap!

Короче очередная пиздатая утилита с мордой, которая позволяет управлять твоим зоопарком в рамках Wake on Lan.

К примеру у меня дома серваки под лабы и т.п. Круглосуточно я их не гоняю, включая по необходимости. Но каждый раз что-бы их включить мне приходится поднимать и тащить свою жопу в кладовку и нажимать кнопку.

Ну такое себе. Поэтому на этих серваках я включил Wake on Lan и через UpSnap управляю их включением. А самое главное — теперь не поднимаю жопу.

Что нам предлагают?

Да собственно ничего лишнего, морда, мышка, клик и всё включено.

Можно конечно через консольку всё это дело админить, но через морду как-то интереснее что-ли, эстетичнее, да и нагляднее. Не тупо мак адрес лицезришь, а видно что-где-когда.

Минимальный композ для запуска, порт 8090 (не указан, так как конейнер работает в режиме: host)

services:
upsnap:
container_name: upsnap
image: ghcr.io/seriousm4x/upsnap:latest
restart: unless-stopped
network_mode: host
volumes:
- ./data:/app/pb_data
environment:
- TZ=Europe/Vienna


Позырь, глядишь сгодится в хозяйстве. Репка на гитхабе тут.

🛠 #utilites #networks

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
48
Решил поделиться своим опытом использования Samba.

🔤🔤🔥🔤🔤🔤🔤

Ну, не то, чтобы прям Samba, но всякими smb-комбайнами.

Я сопровождаю небольшие конторки от 5 до 100 компов. Покупать виндовые серверы для такого количества — просто излишество. Если для маленьких конторок, для 10 машин, еще можно расшарить папку на win-pro, то дальше нужно думать.

Начал я с FreeNas, потом Nas4free, TrueNas, OMV, и когда поднабрался опыта, остановился на Samba без всяких web-интерфейсов.

Но я не об этом. Тем, кто думает, что можно легко заменить win-server на Samba Посвящается.

Основное отличие виндового и линуксового сервера — права доступа. У винды права реализованы лучше и гибче. Сейчас мне в комментах напишут про ACL, особенно те, кто их не использует.

Винда, устанавливает права на папку, и в зависимости от прав на папку — выставляются права на файл. При перемещении файла из папки в папку — права могут меняться. На линуксе файл получает права при создании, и потом с ними живет.

Большинство проблем, связанных с правами на Samba, связаны именно с ACL.

Ситуация следующая, два пользователя U1, U2, три папки D1, D2, D3. U1 имеет доступ D1, D2, U2 к D2, D3. На винде, если U1, создаст файл в D1, а потом перенесет в D2 - пользователь U2 будет иметь к нему доступ, а на линуксе нет.

Для некоторых папок приходится делать cron-скрипт для сброса прав. Может у кого-то есть опыт использования inotify для этого, поделитесь.

Не знаю, как Вы, а я для себя решил отказаться от ACL. Потому что использовать getacl setfacl не удобно.

Рекомендую для маленьких контор использовать разрешения на шАры и обычные линуксовые права. Просто в этом случае расшаренных папок много.

Ну, про то, что таблицы символов для файловых систем не совпадают — я уже как-то писал. Проблема возникает, если в конторе часть пользователей на винде, часть на linux.

В общем, на мой взгляд пока нет полноценной замены для Win-сервера в качестве файлопомойки, для контор среднего и большого размера.

🛠 #windows #linux

@bashdays / @linuxfactory / @blog
Please open Telegram to view this post
VIEW IN TELEGRAM
36