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

    3vi1_0n3
    @3vi1_0n3
    Буду оригинален. Если основная задача - интернет-браузинг, то может что-то вроде ChromeOS Flex?
    Вроде где-то видел, что туда уже завезли Linux окружение как во взрослом ChromeOS.
    И сделано оно вроде на Дебиане.
    Ответ написан
    Комментировать
  • Почему после компиляции своего ядра linux его размер в разы больше?

    3vi1_0n3
    @3vi1_0n3
    Собирал свежие ядра пару лет под Дебиан, пока поддержку некоторого железа в пакетном не завезли через два релиза, потом перестал. Там очень много непонятного между пакетными ядрами и сборкой из исходников.
    Несколько примеров:
    1. По умолчанию куча новых модулей (не входящих в старые версии) включена. Если использовать конфиг от старого ядра, новые модули может понадобиться отключать руками.
    2. По умолчанию куча модулей для старого железа включена.
    3. Есть шанс, что определенные модули идут в разных пакетах и не входят в дженерик в дистрибутивных сборках, либо исключены совсем. Из сырцов вы получите всё, вообще всё, что есть в исходниках, либо в модулях, либо в основном ядре, если специально не отключать, в том числе кучу старых девайсов, которых у вас скорее всего нет, или платы видеозахвата, которые вам, например, не нужны.
    4. Если хотите собрать ядро поменьше, придется внимательно читать информацию по железу и тратить реально дофига времени на то, чтобы оставить в монолитном куске только то, что нужно, включая все зависимости, остальное либо собирать модулями, либо отключать совсем.
    5. Можно поотключать вообще всё и постепенно включать то, что имеет смысл. Грузиться нормально скорее всего сразу не будет, но по ошибкам обычно можно примерно понять куда копать.

    Разобраться с этим списком быстро не будет. Можно взять конфиг из пакетного ядра, и начать копать от него, в любом случае это вопрос количества попыток, опыта и уровня понимания что там зачем. Scheduler, например. Есть возможность выбрать один из поддерживаемых, но надо знать, что это такое, и различия между ними. Где-то видел
    статью про планировщики, возможно на хабре.

    Я обычно собирал реально только то, что использовал, преемптивное ядро, плюс USB-устройства выборочно (клавы-мыши в монолит, то, что потенциально могу использовать - в модули), плюс поддержку в ядре файловых систем выборочно (одну, которая используется на корневом разделе, в монолит) и так далее. И после успешной загрузки проходил еще несколько раз и смотрел, что я могу еще отключить совсем, чтобы не собирать ненужное. Занимает обычно лютое количество времени, чтобы найти, прочитать и понять что там что, и довести до состояния "только необходимое плюс немного на перспективу". Собственно поэтому бросил этим страдать сразу как дистрибутивное ядро в пакетах проапдейтилось до нужной версии.

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

    Руководства, которое объясняет, что надо, а что не надо, не видел никогда. Скорее всего потому, что всё очень быстро меняется, за полгода в ядро вливают кучу кода. Это было заметно даже во времена версий 2.4/2.6.
    Поэтому make menuconfig и гуглить непонятное.
    Ответ написан
    2 комментария
  • Как написать bash мониторинг файловой системы EXT4?

    3vi1_0n3
    @3vi1_0n3
    Тут уже много интересного написали. Штука только в том, что в вопросе недостаточно информации, что не позволяет эту задачу решить эффективно. Есть вопросы, на которые надо ответить, прежде чем приступать:

    1. Где хранятся эти файлы, которые могут потенциально вырасти до таких размеров и сколько их?
    Если они хранятся в одной директории, тогда смысла делать поиск по всей системе нет. На моем десктопе с 500К файлов поиск занимает примерно 9.5 секунд с полным сканированием дерева файловой системы. Если файлов потенциально пара сотен, и они все в одной директории или в поддереве директорий, время поиска можно сильно сократить. Я подозреваю, что find читает информацию о размере из inode'ов, поэтому количество файлов играет значительную роль.

    2. Что это за файлы, надо ли их на самом деле мониторить?
    Если это логи, к примеру, есть много способов этого не делать (ротация логов, централизованное хранение), если это образы дисков для виртуальных машин (LVM, или еще что), то find может быть не совсем верное решение, могут быть другие инструменты (получение данных из гипервизора, и так далее)

    3. Можно ли сделать линки на директории, в которых хранятся файлы, в одну директорию и сканировать её вместо всей файловой системы?
    Логично, что, если файлы хранятся где попало и их надо искать по всей системе, поиск будет занимать больше времени.

    Про inotify там выше уже дали ссылку на мою статью 2016 года. Это на самом деле самый лучший вариант, если надо сразу знать об изменениях файлов, и самый удобный. Вот только он может вполне быть "из пушки по воробьям", если вам не надо прямо сразу узнавать о событиях файловой системы и обрабатывать их, а достаточно периодических проверок (с учетом вопросов выше).

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

    Учитывая, что вы хотите это сделать через bash, я бы сначала посчитал, сколько подобных событий (увеличение размера файлов до 16+Тб) происходит и попробовал оптимизировать поиск таких файлов за счет отсекания ненужного поиска (специфическая директория, фильтрация по типу файлов, имени и прочее).

    Если файлы имеют какую-то одинаковую часть имени, можно использовать locate (вместо find) для получения списка файлов, и потом передавайте его в скрипт, который тупо проверит размер каждого (через stat, например). В этом случае надо при появлении новых файлов не забывать вызвать updatedb, если это не происходит автоматически по какой-то причине.

    Как-то так. Посмотрел другие ваши вопросы. Некоторым из них чуть больше контекста тоже не помешало бы.

    P.S. updatedb делает то же самое примерно, что и find, поэтому не надо его вызывать каждый раз перед использованием locate
    Ответ написан
    Комментировать
  • Night Light(Режим для чтения) как устанвоить на manjaro с i3wm?

    3vi1_0n3
    @3vi1_0n3
    Ну, например так, как описано в арч вики - https://wiki.archlinux.org/title/Redshift
    Ответ написан
    Комментировать
  • Не могу отловить процесс нагружающий Linux процессор?

    3vi1_0n3
    @3vi1_0n3
    Можно попробовать atop. Он умеет собирать статистику, и ее потом можно просматривать. Ну, и в интерактивном режиме умеет. Должен быть в стандартных репозиториях.
    Единственное надо будет задать интервал сбора метрик покороче, если хочется поймать краткие всплески.
    Ответ написан
    Комментировать
  • Линукс. Есть ли способ заполнять пути в консоли из файлового менеджера?

    3vi1_0n3
    @3vi1_0n3
    Если я правильно понимаю задачу, может быть можно обойтись без файлового менеджера?
    Вот так, например:
    alias get='dialog --erase-on-exit --fselect $PWD 30 100 --stdout'
    cp $(get) $(get)

    Тут для каждого вызова $(get) будет отдельный выбор файла в текстовом, гуй с иксами не нужен. По пробелу выбор директории из списка, при наборе символов установка курсора на директорию, которая подпадает под введенный текст.
    Но есть нюансы.
    1. Интерфейс слегка своеобразный, надо попривыкнуть.
    2. Очистка экрана, если --erase-on-exit есть, и остатки текстовых окон на экране, если --erase-on-exit нет.
    3. Сразу вставит в команду, без помещения в командную строку значения
    Ответ написан
    Комментировать
  • Почему не отрабатывает exit на третьем уровне скрипта?

    3vi1_0n3
    @3vi1_0n3
    Я могу предположить, что такая структура скриптов призвана обеспечить определенную независимость каждого подменю. Если брать ровно те скрипты, которые у вас есть, то:
    1. Добавляем код возрата в функцию PMI - просто добавляем строчку "return $g" после "esac". Это не сломает существующий скрипт. Но! Придется разбираться с ошибками выполнения вызовов IPMI меню отдельно.
    2. Проверяем код возврата в unem
    read b
            case $b in
              1) clear ; ./1_1_system_menu.sh && exit; unem ;;
              2) clear; ./1_1_ipmi_menu.sh && exit; unem ;;
              3) clear ; menu ;;
              0) exit 0 ;;
            esac

    " && exit" здесь выполнится, если скрипт возвращает 0, что и произойдет, если PMI() вернет 0. Соответственно, при выборе любого другого варианта выхода не будет.

    Однако, несмотря на то, что с такими минимальными изменениями оно может работать как надо, все-таки имеет смысл сделать так, как jcmvbkbc уже упомянул - не исполнять скрипты, а включать их. Я не согласен по поводу места в скрипте, куда их включать, я бы поставил source до определения функции unem.
    И я лично сделал бы это несколько по-другому. Как-то так:

    menu.sh
    #!/bin/bash
    
    # Insert necessary sub-menus
    . ./ipmi_menu.sh
    
    declare -A MAINITEMS
    MAINITEMS['System settings']="echo 'System settings selected'"
    MAINITEMS['Ipmi tools']="PMI"
    MAINITEMS['Back to previous']="break"
    MAINITEMS['Exit']="exit"
    
    while :
    do
      select menuitem in "${!MAINITEMS[@]}"
      do
        echo "Menu item: $menuitem"
        ${MAINITEMS[$menuitem]}
      done
    done

    ipmi_menu.sh
    #!/bin/bash
    
    PMI(){
    echo "PMI functions"
    
    PMI_TITLES=(\
            "Sensors check" \
            "Writing Motherboard FRU information"\
            "Writing MAC address  BMC"\
            "Wtiting MAC address Motherboard"\
            "Back to previous"\
            "Exit")
    PMIITEMS[1]="echo Sensors check"
    PMIITEMS[2]="echo fru information"
    PMIITEMS[3]="echo mac address"
    PMIITEMS[4]="echo mac address motherboard"
    PMIITEMS[5]="break"
    PMIITEMS[6]="exit"
    
    select pmiitem in "${PMI_TITLES[@]}"
    do
      ${PMIITEMS[$REPLY]}
    done
    }


    В menu.sh я использую associative array, это сильно упрощает добавление элементов в главное меню.

    В ipmi_menu.sh я использую обычный массив, чтобы соблюсти порядок пунктов меню. Тут PMIITEMS[XXX] будет просто имя функции, содержащейся в файле ipmi_menu.sh

    В этом примитивном варианте экран не очищается и перерисовка пунктов текущего меню происходит по нажатию ENTER, зато это должно (по идее) работать в любом, даже самом тупом терминале. Если надо красоты, можно select поменять на echo+read, смысл от этого не поменяется, все равно можно брать список функций из массива.
    Ответ написан
    Комментировать
  • Можно ли ограничить доступ к ssh через разрешенный ip таким образом, чтобы эти ограничения не распространялись на sftp?

    3vi1_0n3
    @3vi1_0n3
    Если отвечать на вопрос из заголовка, то да, можно. Это можно сделать на уровне настроек sshd (/etc/sshd_config). Для этого надо сначала настроить дефолтную конфигурацию, которая позволяет использовать только sftp, а потом добавить секцию Match (смотрите man sshd_config), которая по совпадению адреса позволит использовать ssh. Эта секция перегружает дефолтные настройки при совпадении условия.
    Ответ написан
    Комментировать
  • Почему для Linux нет простых VPN приложений?

    3vi1_0n3
    @3vi1_0n3
    Debian + KDE, в системных настройках, из коробки:
    63f6edd7bb192633805192.png
    Ответ написан
    Комментировать
  • Как разархивировать архив tar.gz, в котором архив и т.д?

    3vi1_0n3
    @3vi1_0n3
    Если не надо сохранять все промежуточные файлы, то может так?
    while [ -f *.tar.gz ]; do filename="$(ls -1 *.tar.gz | head -n 1)"; tar -xvf $filename && rm $filename; done;
    Ответ написан
    Комментировать
  • Как записывать в файл до тех пор пока есть место в нем?

    3vi1_0n3
    @3vi1_0n3
    Учитывая, что изначальный размер определяется размером созданного файла (который в теории может быть другим), я бы начал с получения размера и записыванием ровно такого же объема.
    #!/bin/bash
    FILE="test.txt"
    SIZE=$(stat -c %s $FILE)
    { while [ $(stat -c %s $FILE) -lt $SIZE ]
    do
            cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 76
    done } | head -c $SIZE > $FILE
    Ответ написан
    Комментировать
  • Как вручную подключить второй монитор к DVI интерфейсу видеокарты и сделать для этого скрипт?

    3vi1_0n3
    @3vi1_0n3
    А так включается?
    xrandr --output DVI-D-0 --output VGA-0 --auto --right-of DVI-D-0

    По идее в настройках DE должно что-то быть для настройки дисплеев
    Ответ написан
    1 комментарий
  • Как найти и переименовать все файлы, удалив подстроку (-git)?

    3vi1_0n3
    @3vi1_0n3
    #!/bin/bash
    
    find . -name "*-git*.txt" | (
    IFS='
    '
    while read oldname
    do
    newname=${oldname//-git}
    mv "$oldname" "$newname"
    done
    )
    Ответ написан
    3 комментария
  • Как правильно установить Linux на внешний ssd?

    3vi1_0n3
    @3vi1_0n3
    Попробуйте установить VirtualBox, подключить USB-диск к виртуалке и установить. Если виртуалка после этого с него сможет загрузиться, то и обычный компьютер скорее всего сможет.
    Ответ написан
    1 комментарий
  • Как запустить программу / команду в Linux, не выводя её на экран?

    3vi1_0n3
    @3vi1_0n3
    Если программа хочет что-то рисовать на экране, всегда можно использовать systemd service + Xvfb и выводить графику туда.
    Но соглашусь с Adamos, для anbox это очень необычный сценарий. Посмотрел другие ваши вопросы, выглядит так, как-будто вы хотите странного.
    Anbox - нужно устанавливать на Gnome.
    А потом уже запускать на других DE.

    ^-- вообще не ответ на заданный вопрос, надо было просто PATH поправить.
    Вы пытаетесь запускать АндроИд приложение как сервер или как?
    Ответ написан
  • Как удалить дубликаты внутри строки?

    3vi1_0n3
    @3vi1_0n3
    #!/bin/bash
    IFS='
    '
    exec 3<>data.txt
    while read -u 3 line
    do
    (
            IFS=' '
            result=()
            for word in $line
            do
                    [[ ! "${result[*]}" =~ "$word" ]] && result=(${result[*]} $word)
            done
            echo ${result[*]}
    )
    done
    Ответ написан
    1 комментарий
  • Как расшифровать этот sh файл?

    3vi1_0n3
    @3vi1_0n3
    Есть подозрение, что это может быть скрипт, обработанный shc.
    Попробуйте https://github.com/yanncam/UnSHc
    Ответ написан
    Комментировать
  • Какую комманду нужно ввести для фильтрации в Linux?

    3vi1_0n3
    @3vi1_0n3
    join --nocheck-order -t : ./B ./A
    Ответ написан
    Комментировать
  • Bash проверка открытого порта. Как проверить результат работы команды?

    3vi1_0n3
    @3vi1_0n3
    Bash скрипт без nc, с использованием того же $?
    echo "" > /dev/tcp/192.168.1.10/443 && echo "Opened" || echo "Closed"
    Ответ написан
    Комментировать