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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    с чем могут возникнуть проблемы

    Можно начать отсюда.
    Из моего опыта, самое часто всплывающее отличие glibc от других libc -- поддержка версионирования символов.
    Ответ написан
  • Точка останова, Ptrace. Почему крашится программа после снятия точки останова?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем проблема? Что я делаю не так?

    Я подозреваю, что не нужно делать regs.rip -= 1 ;, потому что процесс не может "выполнить" точку останова.
    Ну и для надёжности, я бы убедился, что в памяти куда пишется 0xcc действительно до этого было 0x55.
    Ответ написан
  • Как иизменить параметр tdp_mmu?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как иизменить параметр tdp_mmu?

    стандартный способ
    echo N | sudo tee /sys/module/kvm/parameters/tdp_mmu
    не помогает?

    root@Line-host:~# echo "options kvm tdp_mmu=N" >/etc/modprobe.d/kvm-disable-tdp-mmu.conf
    root@Line-host:~# cat /sys/module/kvm/parameters/tdp_mmu
    Y

    Ну а чего ты ожидал, параметры из modprobe.d применяются при загрузке модуля. Можно сделать rmmod kvm ; modprobe kvm чтобы убедиться, что параметр применяется.
    Ответ написан
  • Linux NetworkManager аварийная остановка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Любая команда start/stop/restart NetworkManager выдает одно и тоже

    Напомнило анекдот
    Доктоp, я кажется умиpаю! Куда ни ткну пальцем-везде такая боль! -Э-э, дpужочек, так у вас же палец сломан!

    sudo: resolve_conf.c:571: update_from_conf: Assertion 'resolve_conf_matches (resp, conf)' failed

    Это сообщение о том, что sudo сломался. Вспоминай что менял и возвращай обратно. Cудя по тексту ошибка может быть вызвана содержимым /etc/resolv.conf.

    Или воспользуйся su, например.
    Ответ написан
  • Как написать Netflow сенсор с нуля?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как мне модифицировать мою программу, чтобы она могла определять потоки и корректно отправлять их коллектору?

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

    Если ограничиться определением по ссылке, то тебе надо будет разбирать сырые пакеты до сетевого уровня, откидывать не-IP, из IP извлекать IP-протокол, адрес источника, адрес назначения и тип сервиса, для протоколов TCP и UDP дополнительно извлекать порт источника и порт назначения. Всё это довольно просто сделать самому вооружившись RFC по упомянутым протоколам. Также надо будет понять, что делать с фрагментированными IP-пакетами.
    Ответ написан
    Комментировать
  • Что делать если компилятор nasm работает неправильно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    выдает непонятную фигню

    Ну в программе нет проверки ввода, поэтому если вводить непонятную фигню, то и выводить она будет непонятную фигню. А если вводить цифры, так чтобы сумма не превышала 9, то приведённая программа прекрасно работает.
    Это, правда не значит, что в этой программе нет ошибок. Я вижу как минимум одну:
    res resb 1 
    …
    mov [res], eax

    классическое переполнение буфера. Её наличие, правда, на результат повлиять не может.
    Ответ написан
    Комментировать
  • Почему mono в ubuntu не находит .so?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему-то в ubuntu она отказывается находить его, хотя он есть в папке с программой.

    добавь путь до каталога с этим файлом .so в переменную окружения LD_LIBRARY_PATH перед запуском программы.
    Ответ написан
  • Зачем производится закрытие файлового дескриптора?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    зачем закрывается файловый дескриптор (exec 2<&-) перед тем как связать его с лог файлом?

    Я не вижу в этом никакого смысла, потому что системный вызов dup2 (которым вополняется связывание дескриптора логфайла с дескриптором #2) точно так же закрывает дескриптор в который происходит дупликация.
    Ответ написан
  • Могу ли я создать ссылку с параметрами на файл?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Чтобы каждый раз не задавать параметры дэймону, ищу как зафиксировать.

    aspirantes, написать скрипт в котором проставить нужные параметры. Например:
    $ cat > /home/222 <<EOF
    #!/bin/sh
    exec /home/111 -param1 -param2 "$@"
    EOF
    $ chmod +x /home/222
    Ответ написан
    Комментировать
  • Форматирование смонтированного диска?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что будет с диском 1, если его смонтировать в папку диска 2 и затем отформатировать диск 2?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Имеется код вида
    int64_t a = b/c
    b и c какие-то произвольные числа
    требуется записать 0 в переменную a, если произошел SIGFPE.
    Проверять значения b и c не вариант, нужно как-то задавать значение для a в обработчике сигнала.

    Задача в такой постановке выглядит странной, если это не просто учебная задача на обработку сигналов.
    Если это учебная задача -- то конечно, и ассемблерная вставка тут может помочь, но это не вопрос для тостера.
    Если это практическая задача, то решить её можно следующими способами:

    - наиболее простой и переносимый, но не самый быстрый -- таки проверить значения b и c перед вычислениями.

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

    - следующий вариант -- нифига не простой и не переносимый -- устанавливать обработчик сигнала с помощью sigaction, заказывать доставку SA_SIGINFO и анализировать ucontext (третий аргумент) в обработчике сигнала. Сложность заключается в том, что связь между тем, что будет записано в ucontext и исходным кодом на C ни разу не очевидна. Т.е. можно извлечь из памяти по адресу info->si_addr инструкцию вызвавшую сбой, проанализировать её длину и куда она записывает результат, записать в результат 0 и передвинуть адрес возврата. Но это выглядит как неоправданное количество мороки.
    Ответ написан
  • Как вылечить ошибку "error communicating with TPM chip"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нужно лечить или просто забить?

    Просто забить. Если ты не знаешь, что такое TPM, а система успешно грузится -- он тебе не нужен.
    Ответ написан
    Комментировать
  • Ошибка unhandled dwarf2 в Valgrind как можно исправить и с чем связана?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    при использовании Valgrind выпадает ошибка:

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

    Опытным путём пришёл к выводу что проблемма связана с ошибкой в самом make.

    м... а почему valgrind ругается вот на это:
    ==6410== Valgrind:   "/media/mid/Main_file_m2/Road/rank 0/libftTester/a.out"
    Ответ написан
  • Почему systemd-journald ест много оперативки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Из 2 гигов оперативки занято 500 мб, причём раньше свободно было больше.

    Память должна быть занятой. Если она свободна -- значит она никому не нужна.

    Из-за чего systemd-journald может есть 10% от оперативки? Куда смотреть?

    Смотреть в колонку VIRT -- приложение выделило себе 266М виртуальной памяти. То, что оно использовало 202М физической памяти для этого -- это просто прекрасно.

    Как только в системе появятся другие пользователи памяти -- будь спокоен, физическая память будет отобрана у приложений которые её не используют и передана приложениям которым она нужна.
    Ответ написан
    1 комментарий
  • Почему не берутся пробелы в bash переменной?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    файл "Название какого-то файла.mkv" $WhatFile возвращает в виде "Название" , отрезая всё, что есть после первого пробела

    для этого вместо for WhatFile in $(...) лучше использовать конструкцию find ... -print0 | xargs -0 .... Т.е.
    find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 -print0 | sort -zr | xargs -0 -I\{} bash -c '
    WhatFile=\{}
    // извлекаем название найденного файла
    WhatFileName=$(basename "$WhatFile"  )
    echo "$WhatFileName"
    // извлекаем папку найденного файла
    WhatFolder=$(dirname "$WhatFile"  )
    echo "$WhatFolder"
    // извлекаем папку найденного файла
    #echo WhatFolder $WhatFolder
    #переименование
    #файла
      if [ -n "$WhatFileName" ]; then
      WhatRenameFile=$( echo "$WhatFileName" |
      sed -f "$Renamer" )
        if [ "$WhatFileName" != "$WhatRenameFile" ]; then
          echo "переименовываем файл из "$WhatFileName" в "$WhatRenameFile""
        mv -fv "$WhatFile" "$WhatFolder"/"$WhatRenameFile"
      echo "пауза 2 секунды"
        sleep 2s
      else 
        echo "Файл соответствует правилам "$WhatFileName""
        fi
      #echo $WhatRenameFile
      fi
    '
    Ответ написан
  • Lsusb и lspci не видят тачпад ноутбука ELAN, однако dmesg его видит?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    lsusb и lspci не видят его

    и это правильно, потому что, судя по dmesg, это i2c устройство подключенное к i2c-контроллеру висящему на шине PCI (вот к этому: 00:15.1 Serial bus controller: Intel Corporation Cannon Point-LP Serial IO I2C Controller #1 (rev 30)).
    Ответ написан
    3 комментария
  • Как на Linux читать и изменять память процесса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Классический способ состоит в использовании системного вызова ptrace с кодами запроса PTRACE_ATTACH для присоединения к процессу, PTRACE_PEEKTEXT и PTRACE_POKETEXT для чтения и записи его памяти и PTRACE_DETACH для отсоединения.
    Ответ написан
    Комментировать
  • Не запускается ядро Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что я делаю не так?

    Ты не предоставляешь достаточно данных для диагностики. Как ты конфигурировал своё ядро? Как устанавливал?

    Unable to mount root fs on unknown-block(0,0)

    мой хрустальный шар говорит, что ты либо не установил модули своего ядра, либо они не попали в initramfs.
    Ответ написан
    21 комментарий
  • Как общаться с процессом в Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нужно написать программу, которая будет посылать в stdin программы данные и забирать из stdout.

    Что я делаю не так?


    Ты пользуешься не тем методом. pidfd_open делает совсем не то, что ты ожидаешь, см. раздел "Use cases for PID file descriptors" по приведённой ссылке.

    Взаимодействие с дочерним процессом через stdin/stdout обычно реализуется через пайп. Вот пример.

    Вот ещё пример который делает exec

    #include <unistd.h>
    
    int main()
    {
            int fd[2][2];
            pipe(fd[0]);
            pipe(fd[1]);
            pid_t pid_fork = fork();
            if (!pid_fork) {
                    // Дочерний процесс
                    close(fd[0][1]);
                    close(fd[1][0]);
                    dup2(fd[0][0], STDIN_FILENO);
                    dup2(fd[1][1], STDOUT_FILENO);
                    execl("/usr/bin/tr", "/usr/bin/tr", "l", "r", NULL);
            } else {
                    // Родительский процесс
                    close(fd[0][0]);
                    close(fd[1][1]);
                    char buf[1000];
                    ssize_t sz;
    
                    write(fd[0][1], "hello, world\n", sizeof("hello, world\n") - 1);
                    close(fd[0][1]);
                    sz = read(fd[1][0], buf, sizeof(buf));
                    if (sz > 0) {
                            write(STDOUT_FILENO, buf, sz);
                    }
            }
            return 0;
    }
    Ответ написан
    Комментировать
  • Как прокручивать консоль Arch linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как прокручивать консоль Arch linux?

    "Консоль" в смысле "голый виртуальный терминал"? Никак. Можно запускать какой-нибудь screen или tmux в виртуальном терминале и "прокручивать" вывод его средствами (не самыми, впрочем, очевидными: ctrl-a-esc).
    Ответ написан