Ответы пользователя по тегу Linux
  • Насколько глубоко нужно знать Linux дата-инженеру?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    По-хорошему, надо знать то, что потребуется для работы.
    Обычно это понимание как работает командная строка, терминал, ssh.
    Немножко вглубь: файлы, дескрипторы, файловая система, монтирование, симлинки, хардлдинки, пайпы, конвейеры, синтаксис перенаправления между стандартными потоками ввода/вывода, базовые утилиты командной строки (grep, ls, tee, tail, cat и т.д.), желателен какой-то опыт работы со всем этим, понимание как обычно устроен механизм передачи параметров в таких утилитах, как их выстроить в конвейер, как запаковать\распаковать поток данных на лету. Желательно понимать что такое, как устроены и для чего нужны make-файлы.
    Нужно понимать как пользоваться менеджерами пакетов основных дистрибутивов, желательно в общих чертах понимать что такое докер, контейнеризация в целом, ориентироваться в командах управления образами и контейнерами, понимать что такое вольюмы и где их искать, уметь читать докер-файлы и компоуз-файлы, понимать как вообще это всё работает. Ну и GIT нужно уметь использовать.

    Это основа, но наверно от джунов всего списка никто ожидать не будет - обучат по ходу дела, а если вы претендуете на большее, то сможете быстро разобраться в нужных вопросах, если претензии ваши обоснованы, а пробелы обнаружились.
    Ответ написан
    6 комментариев
  • Что это такое и как защититься?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    По двору прошелся жулик и попытался хакнуть эксплойтом для "майбаха" (условно) все тачки в вашем дворе. Майбахов не нашлось, этот жулик пошел дальше и забыл уже про ваш дворик.

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

    Вообще, если ваш сетап на виртуальных машинах в повторяемой среде и с декларативной конфигурацией вроде кубера или докера, то вы легче сможете пережить всякие такие факапы.
    Схема такая.
    Есть признаки взлома - бэкап логов, снапшот базы, бэкап стораджа, остановка сервисов (если позволяет продакшн), анализ атаки и последствий. Устраняем уязвимость по вектору атаки (гугление по логам и курение тредов), правим конфиги развёртывания и запускаем прод. Потом долго и тщательно разбираемся по логам, снапшотам и бэкапам что затронуто. Делаем тестовый чистый сетап по старой конфигурации и сравниваем пофайлово с атакованной системой, выясняем в какие места вмешались злодеи. Дифаем базу и смотрим на подозрительные различия. Делаем выводы, объявляем об утекших данных, если есть такие признаки (чтобы не подставлять пользователей), принимаем превентивные меры против похожих векторов атак.

    Итого, залог успеха - это хранение конфигураций в гит-репозитории, своевременные бэкапы, хранение бэкапов на отдельных изолированных стораджах, оркестрация и автоматизация развертывания, подробное эшелонирование логирование с бэкапами логов, смоук тесты на нестандартную активность в БД, по сетевым интерфейсам, трафику, процессору, памяти, файловым системам, логам...

    Это взгляд дилетанта по безопасности, если чего пропустил -- поправьте. Если где не прав -- расскажите.
    Ответ написан
    3 комментария
  • Какая утилита подобна wget, но умеет делать upload дерева файлов по https?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А API вообще позволяет одним запросом сразу дерево загружать? Если да, то курлом по идее можно любой запрос сделать, поэтому можно и такой. Если нет и нужно делать много запросов, то придётся разбивать вашу задачу на много вызовов курла. В чем проблема? Пусть это будет батч с кучей простых вызовов курла по одному файлу. Почему нет?
    Ответ написан
    Комментировать
  • Почему не получается установить Docker?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    --dry-run убери=)
    О в комментах уже ответили оказывается.
    Ну, короче, это такой флаг, который позволяет что-то проделать "пешим по-конному", так сказать. Типа всё скачает, всё проделает понарошку, выхлоп будет адекватный как по-настоящему, но без аффекта на реальной системе, без записи.
    Ответ написан
    Комментировать
  • Как перенести базу данных из СУБД Postgresql в MySQL?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Представляете, если бы врачи с таким же уровнем понимания что делают делали трансплантацию органов? Нафаршировал пациента мелко порублеными топором органами донора и ждём выздоровления=).

    Ваш сервис видеоконференций наверно постоянно работает с БД, это значит, что для интеграции вам нужно постоянно делать экспорты. Странное решение дампить и переносить БД целиком. Типа если у вас молоток, то вокруг всё похоже на гвозди?

    Такие вещи обычно делаются в виде микросервисов. На худой конец можно сделать простенького демона, который будет ходить в БД конференций и селектить оттуда только нужные данные, и тут же вставлять в вашу другую базу в нужном формате. Не нужно ничего дампить и ковертировать, хотя наверняка и стандартными командлайнами с небольшой конвертацией SQL-кода регулярками можно добиться аналогичного результата. Но в учтите, это нагромождение непрофильных костылей будет невозможно поддерживать. Прдётся каждый раз сучить рукава и нырять в это говно, чтобы понять почему валится процесс не доходя до конца, или почему незаметно не доходят какие-то записи...

    Если сделать отдельный скрипт синхронизации\. то его можно хорошо про комментировать, задокументировать, обложить тестами и проверками, снабдить внятными и понятными сообщениями об ошибках. Нагромождение пайпов с конвертерами, регекспами и пакетными файлами сделать удобным и стабильным гораздо сложнее.

    Используйте профильные инструменты по назначению и не бойтесь осваивать новые. Такой вот совет.
    А если ближе к вашим попыткам, то смотрите глазами, SQL вполне читаемый, можно по шагам посмотреть что не так. Есть в экспортированном SQL данные? Что это за данные? Куда они вставляются? Есть они там, куда вставляются? Просто проследите поэтапнро.

    Вот про это я и говорил, когда объяснял, что костыльное решение очень трудно дебажить и поддерживать. У вас что-то идёт не так, но вместо того. чтобы разобраться пошагово, вы приходите и заставляете нас тут гадать на кофейной гуще без малейшей информации по теме.
    Ответ написан
    2 комментария
  • Как симулировать сбои в файловой системе?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    куда копать если хочу проверить свою программу в условиях сбоев файловой системы

    Копать надо в сторону документации к своему языку программирования, к библиотекам, которыми вы взаимодействуете с файлами.
    Нужно делать аудит кода, понимать какие ошибки возможны в том или ином месте, в конкретных вызовах системных API прямых или косвенных. Эмулировать можно как обычно моками. Просто бросаете все возможные ошибки в моках и смотрите на реакцию тестов. Да, нужны юнит-тесты. Нужно правильно декомпозировать задачи, чтобы их легко можно было тестировать по частям, чтобы прозрачно было чем могут обернуться те или иные unhandled исключения.
    Почитайте про Gracefull Degradation, про иммутабельность, журналирование и прочее, что может пригодиться для разработки надёжного кода и архитектуры.
    А вы пытаетесь стрелять из ружья дробью по автомобилю, чтобы проверить его надёжность. Это не системный подход.
    Ответ написан
    Комментировать
  • Какой самый быстрый способ передачи информации между двумя ПК?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вытащить винт из виндового компа и ставить в линуксовый, примонтировать и скопировать с максимально возможной скоростью.
    Ответ написан
    Комментировать
  • Как удалить все строки до n через sed?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А почему именно через sed?
    tail -n +10 << my_file
    Вернет все строки файла, начиная с десятой.
    Только нельзя писать в тот же файл, откуда читаете, иначе получите путой файл.
    Вот можно так:
    tail -n +10 my_file > temp_file; mv temp_file my_file
    Ответ написан
    6 комментариев
  • Как в Linux вывести данные из файлов и записать построчно?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Выглядит так, будто бы вам для решения достаочно тривиального однострочника на питоне, запускаемого в виде кманды py. Опишите более внятно формат входных данных, как именются файлы и в каких структурах каталогов они размещены.
    Результат надо в один файл слить?
    Общая схема такая:
    - итерируемся по фходящим файлам с помощью glob или walk (если файлы в дереве каталогов, а не в одном каталоге).
    - преобразуем содержимое файла в словарь: обычно достаточно сплита текста по пробелам и абзацам, потом сплит по "=" и получаем аргумент для конструктора словаря.
    - печатаем в stdout f-строку с одстановкой данных из словаря, плученного выше.

    Это если я правильно понял ваше сумбурное описание задачи.

    UPD. Автор в изначальном вопросе не дал понять. что формат файла бинарный.
    Решение на системных утилитах командной стоки будет громоздким и неремонтопригодным в плане поддержки.
    Нужно на питоне делать. Если id гарантировано 12 цифр и такая последовательность встречется только в виде id, то можно парсить и регекспами.
    Но сдаётся мне не просто вам будет, если не умеете в питон.
    Ответ написан
    Комментировать
  • Что почитать про программирование под Линукс?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А под линукс как-то особенно программировать не требуется. Наоборот можно уже писать кроссплатформенно.
    У винды много своей специфики, связанной со странными особенностями файловой системы, с выкрутасами в плане использования кодировок в терминале, в файловой системе, в остальных местах... Когда начинаешь кодить на линукс и под линукс, то аж дышится легче.
    Начинаешь думать, что интерфейсы можно делать не нативно, а в виде веб-интерфейсов, которые отлично смогут работать и в облаке, и прямо на роутере, и локально.
    В линуксе гораздо проще и каноничнее всё с доке-контейнерами, стандартной является вся инфраструктура командной строки, свзанная с механизмами автоматизации: стандартные тулзы, make, системы управления пакетами...
    Поднять на линуксе изолированную повторяемую среду получатся гораздо проще, чем в винде.

    Вообще не понятно, конечно, о каком програмировании речь. Тут и системное программирование упоминалось, и GUI...
    По собственному опыту скажу, что сомнения при переходе на разработку под линукс в основном надуманные и ненужные. Переход происходит естественно и непринужденно.
    Особенно подкупает встроенная в систему хорошая документация и огромное количество структурированной информации в сети. Даже книг каких-то специальных читать не пришлось. Просто по обстоятельствам ищем статьи и мануалы по конкретным темам: особенности и устройство файловой системы, пайпы, потоки, процессы, система прав доступа...
    Ответ написан
    1 комментарий
  • Можно ли вывести заголовки столбцов при поиске командой GREP?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы могли бы использовать питон. С помощью pythonpy это удобно делать однострочником вроде:
    py "csv.DictReader(sys.stdin)" < x.csv
    Но есть два нюанса.
    - Вам нужно сохранить после фильтрации первую строчку (заголовок) csv-файла (например как вам в соседнем ответе предложили).
    - На выходе у вас будут словари, которые очень похожи на josn.

    Все эти нюансы можно легко обойти.
    Во-первых, пропадает смысл использовать grep, раз вы и так юзаете питон. Можно фильтровать прямо им примерно так:

    Во-вторых, после фильтрации можно вернуть первую строку обратно, как в соседнем ответе.

    Второй нюанс фиксится не так элегантно, но вполне понятно:
    py "(', '.join([f'{k}: {v}' for k, v in rec.items()]) for rec in csv.DictReader(sys.stdin))" < x.csv


    Опять же, будьте осторожны с такими самодельными форматами. Нужно помнить о возможно йнеобходимости экранировать данные.
    Ответ написан
    Комментировать
  • Есть ли какой монитор изменения прав доступов к папке и файлам?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Чаще всего такое бывает из-зза совокупности неочевидных проблем в конфигурации логов, скриптов запуска логгируемуго софта и сиетемы ротации или бэкапа логов.
    Например, описанная вами ситуация может быть порождена следующим стечением ошибок и обстоятельств.
    Бывает, что на бэкенде в один и тот же лог-файл пишут несколько скриптов. Это уже конкуренный доступ к файлам и не есть хорошо. Такое случается, когда по образцу одной проги с логгированием потом делают другую, а конфигурация логгирования не предусматривает такую ситуацию. Вот когда два таких скрипта работают и логи в конфликтный файл пишутся не часто, могут случиться такие проблемы.
    Ещё один из таких скриптов может запускаться под рутовыми правами, а другой после него под пользовательскими. Если запущщеный от рута скрипт вызвал ротацию лог-файла, то новый файл мог создаться уже с рутовыми правами по умолчанию, а это значит, что другой скрипт (или этот же, но запущеный от обычного пользователя) уже не сможет в него писать.

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

    Я могу дого гадать на койейной гуще, но ставить какие-то мониторинги - это охота на ведьм.
    Поищите все места, где присходит конфигурирование логов. Выясните какие процессы могут писать в этот файл и от чьего имени они запущены. Выясните какие крон-джобы запланированы и посмотрите по содержимому файлов и их метаданным когда именно случались проблемы.

    Важно. чтобы в каждый отдельный лог-файл писал один и только один процесс. Он же занимался его ротацией (если, к примеру, вы логгируете стандартной питонячьей либой). Ещё хорошая идея не засталять софт писать логи в файлы, пусть пишет логи в stderr и/или stdout, а оттуда вы их на уровне системы перенаправите куда положено и отфильтруете как надо. если необходимо.

    Итак. Перым делом смотрите какие процессы пишут файл, какие скрипты трогают эти файлы (бэкапы. ротация), посмотрите в crontab, посмотрите конфигурацию сотфа в плане логов и всё должно проясниться. Делать систему мониторинга за изменениями в файловой системе возможно, но это ректальная тонзиллэктомия получаетя какая-то...

    UPD:
    Почему-то не обратил внимания, что речь о логах mysql. Но всё по-прежнему: конфиг логгирования и ротации, распсиание и механизм ротации и бэкапа, поиск по конфигам фрагментов этого пути на предмет аномалий и повторов.
    Ответ написан
    Комментировать
  • Как посмотреть логи bluetooth на windows или linux?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    В линуксе есть тулза bluetoothctl
    А вот статья про отладку https://wiki.ubuntu.com/DebuggingBluetooth
    Вы вообще искать пробовали прежде чем сюда приходить?
    Ответ написан
    Комментировать
  • В чем проблема с выводом?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Для большей ясности стоило бы приести пример выхлопа команды
    occtl --json show users
    Чтобы отвечающим не приходилось ставить VPN-сервер и подключать тестовых пользователей.
    Сходу видно, что вы запрашиваете результат в формате json, а затем парсите его грепами и awk'ом, что крайне бессмысленно и беспощадно. Почему бы не использовать jq для этой цели, а не пытаться забить шуруп молотком.
    Приведенная вами проблема связана с тем, что, вероятно, выхлоп в виде json происходит без гарантии порядка ключей, а ваш способ доставать из него данные весьма варварский.

    Да и проблемы в таком подходе на этом не ограничатся, ведь список пользователей может измениться между итерациями и даже между получаением имени и ip.
    Следовало бы единоразово получить все сырые данне, а затем вытаскивать из них нужное.
    Ответ написан
    Комментировать
  • Как узнать причину отключения WIFI?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Запустите в терминале
    dmesg -w
    и оставьте висеть так.
    Когда вайфай снова рубанётся - мотрите что пишет.
    По тому что напишет можно потом погуглить.
    Ответ написан
    Комментировать
  • Какой дистрибутив linux выбрать для домашнего сервера?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А какая разница какой дистрибутив, если под ваше применение удобнее всё поднимать в докер-контейнерах, а система хоста может быть любой и даже просто чистой.

    Если подъём всей домашней серверной инфраструктуры сводится к клонированию приватного репозитория с докер- и компоуз-файлами и запуском всего одной строчкой, то переехать на новый сервер становится тривиальной адачей, а вся конфигурация и зависимости прозрачно задекларированы в докерр-файлах.

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

    Так что операционка на хосте - пофигу какая. В контейнерах можно тоже убунту или альпайн какой-нибудь. там уже не сильно важно, ведь каждый контейнер решает конкретную узкую задачу.
    Ответ написан
    Комментировать
  • Как подключить python скрипт в автозапуск ubuntu 20.04?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Например прописать в crontab через директиву `@reboot`. Только пути надо даже для бинарников абсолютные указать.
    Ответ написан
    Комментировать
  • Как организовать масштабирование/отказоустойчивость интернет-магазина?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    smilingcheater всё правильно написал. Дабвлю лишь, что нужно анализировать бутылочные горлышки и исправлять узкие места в первую очередь.
    Разбирайтесь с проблемами детально. Что значит "nginx твалится"? Годами работает и ничего с ним не происходит. Выясняйте что произошло, если такое поторяется, то нужно разбираться, а не надеяться, что кто-то даст универасльный простой, но концептуальный совет, который победит все возможные проблемы наперед.
    Правила тут простые: находим узкое место и расширяем его пока общая производительность в часы пик не будет удовлетворительной.
    Надальте сохранение логов, протоколируйте нагрузки, помониторьте базу. Если проблема извне, то попробуйте подобрать хостинг понадёжнее, сменить OVZ на KVM, разнести БД и бэк на разные инстансы, прикрутите балансировщик,
    Если где-то скорость не принципиальна и можно что-то отложить, добавляйте очередь.
    Ответ написан
    3 комментария
  • Как лучше разделить диски для Mint?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А что там думать? Удвоенный объём ОЗУ выделяете под своп раздел, гигов 50 под систему, остальное под хомяка. Жесткий диск примонтируйте в /hdd единым куском.
    Если не [ватит, сольёте временно хрмяка на hdd, переставите быстренько систему с переразбивкой как хотите и вернете хомяка. Минутное дело.
    Однако я последнее время вообще не разношу систему и хомяка па разные разделы. Фактически все разбито на своп и остальное.

    UPD.
    Вынужден внести поправочку.
    При наличии SSD думаю уже нет смысла в отдельном swap-разделе. Можно обойтись файлом.
    При наличии постоянно подключенного HDD нет смысла (ИМХО) даже разделять /home от системы. Меньше мороки.
    Делаем на SSD всё одним разделом, HDD монтируем в /hdd и живём - горя не знаем.
    Своп выделяем по размеру оперативы в файле/tmp/swap. Если не будет хватать, можно повысить квоты.
    Ответ написан
    7 комментариев
  • Серверный видео монтаж?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Используйте FFmpeg. Всё, что вы написали эта тулза позволяет делать через командную строку, но есть биндинги, например ffmpeg-python.
    Ответ написан
    Комментировать