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

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Нужно определиться зачем вы планируете изучить детально систему - вы собираетесь заняться системным программированием?
    ИЛи прикладным? Если прикладным, то для GUI приложений просто осваиваете любой фреймворк, типа qt, который работает в Линукс и пишете.
    Библиотеки для С++ есть и там и там.
    Ответ написан
    2 комментария
  • Как изменить консоль по умолчанию linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    init это не консоль, это процесс ядра операционки.

    оболочка bash запускается после того, как юзер залогинился, и дефолтная оболочка указывается для юзера в /etc/passwd. И это тоже не консоль.

    Нужно разобраться с терминологией и что именно нужно сделать.
    Ответ написан
    Комментировать
  • Резервный backup с windows на linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    та банально можно по ssh скопировать.
    На виндовс есть scp, rsync которые скопируют файлы или директории или посинкают их.
    При этом ставить ничего не нужно, бинарники для винды можно просто скачать, много вариантов.
    Ответ написан
    2 комментария
  • Алгоритм или бестпрактис для синхронизации .dotfiles?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer

    Предполагаю, что можно сделать его зашифрованным через openssl и именно его синхронизировать или даже версионировать через git (или оставить текущую схему с ансибл). При входе в систему расшифровывать его, кладя в RAM и подключать через "source .bashrc". Работать. После окончания рабочего дня расшифрованный файл надо удалить (ну или изначально при начале работы класть его в RAM).
    Но в этот файл регулярно вносятся изменения, бывает раз в день, а бывает лишь один раз в месяц.


    Не самый плохой вариант шифровать через openssl.
    Только зачем расшифровывать файл? Расшифровывайте прямо в память во время использования

    то есть в .bashrc можно например так

    dbuser=database_user
    dbpass="$(openssl enc -d -base64 -aes-128-ctr -nopad -k secret_key.txt<<<"l1k2j3kl14jjkl321h4lk124123;ljk2`13jlkj")"

    Синтаксис из головы написал, надо уточнить как указать путь к файлу с мастер секретом.
    При этом файл остается зашифрованным, но в текущей сесии переменная уже с открытым паролем.
    Либо можно сделать несколько файлов подобного типа и инклюдать их в скрипты прямо перед использованием.
    Ответ написан
    Комментировать
  • Куда приложение Обо мне(mugshot) записывает данные о созданном пользователе?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    да, можно в /etc/passwd - там есть поле gecos

    username:password:userid:groupid:gecos:home-dir:shell

    которое даже имеет под-поля разделенные запятой, где можно указать дополнительную инфу:
    username:password:userid:groupid:FullName,RoomAddress,WorkPhone,HomePhone,Others:home-dir:shell

    некоторые команды умеют ее оттуда доставать, например почтовые клиенты или finger
    Ответ написан
    Комментировать
  • Как правильно составить cron задачу?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Все верно, "0 10 1-7 * 4"
    Ответ написан
  • Почему не запускается приложение на linux alpine?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    пиши ldd seeker

    Скорее всего он не может найти необходимые динамические библиотеки, что покажет ldd (именно поэтому ругается на not found).
    Либо не подходит архитектура, либо не хватает каких-либо зависимостей, которые следует доустановить.
    Ответ написан
    Комментировать
  • Как добавить право записи для группы в Bash скрипте?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    /var/log может содержать логи с небезопасной информацией. Поэтому давать доступ группе надо только если все кто в группе доверенные лица.
    Или запускай скрипт от рута.
    Ответ написан
    Комментировать
  • Почему на хостинге у многих есть папка public_html и почему она так называется?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Даже по названию папки понятно откуда она так называется. public слово понятно, html понятно.
    Дефолтные настройки веб сервера для персональных страничек пользователей.
    При включении они доступны по адресу www.site/~username
    Ответ написан
    Комментировать
  • Какую выбрать систему мониторинга для работы за NAT для небольшого разношерстного парка?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    grafana. Обычно она уже идет с influxDB, можно метрики слать напрямую в influxDB через его АПИ
    Ответ написан
  • Как вырезать слова из вывода?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    у меня так сработало
    sshd -T | grep -oiP '[a-z0-9-.]*etm@[a-z0-9-.]*'
    Ответ написан
    Комментировать
  • Какая утилита подобна wget, но умеет делать upload дерева файлов по https?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    прикол в том, что http в принципе не знает что такое файловая система, поэтому нужно писать скрипт, который оббежит ваши каталоги и зааплоадит файлы по одному.
    Либо архивировать каталог и заливать уже архив со всем внутри, как это делают
    Ответ написан
    Комментировать
  • Context switch per second (Linux) 1.3млн это много или мало?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Нужно понимать как работает многозадачность и распределение процессорного времени по ядрам.
    В Линукс довольно сложно посчитать реальную занятость процессора.
    В сам свитчинг ничего упираться не может, точнее нет каких-то специальных лимитов. Это обычная процессорная занятость, относящаяся наверное к system cpu usage, но это неточно. Чем быстрее процессор, тем быстрее он может выполнять свитчинг и тем больше свитчингов в секунду может быть выполнено, это просто выполнение инструкций процессора вне рамках процессов, а внутри ядра системы, точнее process scheduler.

    Но проблема в том, как именно распределяется процессорное время. process scheduler в ядре линукса выделяет слайсы примерно по 10-15 милисекунд на процесс, потом переключает на другой. Для процессов, которые что-то активно вычисляют (например архивация), после анализа деятельности может быть выделен более длинный слайс или несколько подряд, то есть уменьшается свитчинг. При этом оценка времени, которая нужна на сам свитчинг - она довольно сложная, ведь для подсчета количество потраченного cpu нужно потратить cpu, и эти 10-15% может на самом деле не существовать.

    Если парралельных процессов очень много и все хотят что-то делать (чекнуть load average), то машина просто не успевает обработать их все, и тратить на переключение приличное количество ресурса, вместо того чтобы непосредственно выполнять код ваших программ.
    Таким образом какого-то определенного лимита на context switching нет, это просто еще одна метрика, которая может подсказать что слишком много одновременно запускаете, можно попробовать оптимизировать.

    Ну или просто не хватает CPU, а система ошибочно показывает свободные ресурсы, которых на самом деле нет.

    Линукс на самом деле не так уж детально может посчитать точное количество ресурсов. Там выполняется все очень просто - на входе в контекст засекается timestamp, на выходе из контекста засекается таймстамп, и потраченное время дописывается в метаданные процесса (для каждого ядра, если процесс многопоточный). Исторические значения не записываются, в метаданных процесса есть только вот это - сколько всего cpu usage с момента старта процесса.
    Если запустить какой-нить top, он будет каждые 1-2 секунды бегать по списку процессов, сравнивать этот параметр и показывать результат загруженности за последние 1-2 секунды, но вот уточнить процесс занял свои 25% cpu плавно в течение секунды, или он занимал 100% cpu первую четверть секунды или третью - вы уже не сможете.

    Ну и само ядро считает свои внутренние потоки так же само.
    И только активность самого process scheduler (то есть cpu затраченное на анализ и переключения процессов) не может быть красиво подсчитана.

    p.s. я не разработчик линукс, поэтому это мое IMHO основанное на наблюдениях и обзорных статьях о работе современного планировщика, если будут гуру которые меня поправят или подтвердят сказанное - будет круто.
    Ответ написан
    Комментировать
  • Можно ли записать данное sed выражение в одну строку?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Что-то непонятно у вас с текстом.
    Приведите несколько строк из файла с alb.ingress.kubernetes
    там перевода строк нет, или как?
    sed не умеет работать с мультистроковыми регулярками, он считывает текст построчно и затем сравнивает с паттерном, при этом в считанной строке символа перевода строки собственно даже и не будет.
    Можно попробовать работать с мультилайн через наполнение pattern space, правда там будет конструкция посложнее.

    Наверное проще, если вы нормально приведете пример вашего лога, и можно будет посмотреть как там зацепиться.
    Ответ написан
    Комментировать
  • Как в jq bash вывести только первое значение ключа из одного словаря?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    для валидного JSON (а ваш пример невалидный, плюс кавычка во втором айпишнике не закрыта", можно было бы заюзать так

    jq '[.[][][].addr]|.[1]'

    spoiler
    { "addresses" : {
    "Network hidden ab4252cc-8e5f-5d76-86e7-618f3f18ac48": [
    {
    "version": 4,
    "addr": "123.12.1.123"
    }
    ],
    "Network 4df4332c-6a52-43b3-bdf3-653d6b6764a4": [
    {
    "version": 4,
    "addr": "123.123.12.123"
    }
    ]
    }
    }
    Ответ написан
    Комментировать
  • Как запретить пользователю выполнять команды в Shell?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    1. поменять ему дефолтный шелл на /bin/nologin
    2. установить ftp сервер со своими настройками и пользователями, вместо линуксового логина
    Ответ написан
    Комментировать
  • Как отправить процесс в фон?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Здравствуйте.
    На Ubuntu server после ввода команды bg <номер процесса> ничего не происходит, просто возвращается строка на ввод.

    Так и должна просто возвращаться строка на ввод. Во первых если процесс уже был запущен и работал в фоне, то вы ничего не делаете. Если он был приостановлен, он просто должен перейти в running.
    Но для того, чтобы вам помочь, было бы неплохо чтобы вы привели лог своей консоли, как вы выполняете jobs, как вы указываете номер процесса. То есть выполнить jobs, bg номер, jobs

    При вводе команды bg <номер процесса> на экране начинает отображается вывод этого процесса, при этом окно терминала наглухо зависает и я ничего не могу сделать, даже остановить процесс (ctr+C)

    Как докажете что окно терминала именно зависает?
    для начала, если вы запустили процесс в фоновом режиме, то Ctrl+C естественно не может его остановить. Он же в фоне выполняется. Скорее всего вы не понимаете, что вам доступен терминал, в котором вы можете вводить другие команды.
    Фоновый процесс просто может писать текст в терминал.
    Напишите вслепую clear, например, проверьте что экран очистился ненадолго.
    И запускать процессы в фон, которые шлют много текста в терминал - в общем случае бессмысленно
    Ответ написан
    Комментировать
  • Как автоматически проставлять группу пользователя при создании файла через winscp?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Тут системно надо подходить к вопросу. Много неясностей.

    1. Если все пользователи пишут в одну и ту же папку (типа upload), можно просто проставить SUID и SGID флаги на папку, и все файлы в ней будут создаваться от юзера/группы владельца upload/

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

    3. Добавить всех пользователей в одну группу и проверить чтобы umask был 0002
    Ответ написан
    Комментировать
  • Ошибка в задаче bash при изменении оболочек юзеров из файла. Как исправить?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Если у вас такая задача, то она непонятно чему учит.
    Слишком ненужные и длинные цепочки
    Итак.

    1. sed умеет сам открывать файлы. то есть вместо cat users.txt | sed можно просто sed users.txt
    2. учитесь смотреть промежуточные значения, тот же ваш $line перед выполнением
    3. Учитесь пользоваться sed без -i и смотреть промежуточный результат перед тем как он полезет в файл.
    4. Что у вас с кавычками?
    /^" $line ":/ это что?
    вы пытаетесь пользоваться регулярками без понимания что это такое?
    Вы вообще не понимаете как хотя бы одну строчку изменить через sed?

    Тут даже чинить нечего, в строчке с sed все неверно.

    for user in $(grep -vP "^(/s)*#" users.txt)
    do
       sudo sed -ir $user "/^$user:/s/\\bin\\sh/\\bin\\bash/" /etc/passwd
    done
    Ответ написан
    2 комментария
  • Какая файловая система наиболее устойчива к сбоям?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    все очень просто.
    1. Бэкапы.
    2. УПС.

    И не искать себе выдуманное решение с файловыми системами.
    * Файловые системы не заботятся о пользовательских данных.
    * Целостность файловой системы это о том, что структура будет целая, то есть два файла не занимают один кластер, нет незавершенных операций, когда что-то недописано, или какой-то кластер считается занятым, а на самом деле нет и уже неконсистентность.
    * Эти проблемы решаются простым способом - все что криво удалить, и все. Не восстановить.
    * Второй момент - софт может просто записать кривые данные, и тут как бы от файловой системы не зависит. Вплоть до какого-нить криптера, который сделает совершенно корректные файловые операции и все пошифрует.
    * Если же глючит хард, то там все еще хуже.

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