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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    tac file | sed -n '1,/^$/{/./p}' | tac
    Первый tac читает файл задом наперёд, sed вырезает первый блок непустых строк, второй tac переворачивает этот блок в исходное состояние.
    Ответ написан
    7 комментариев
  • Существует ли таблица совместимости компиляторов и версий библиотек?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Для gcc и его libstdc++ есть таблица соответствия версии компилятора и версии символов из его библиотеки, а так же описание правил, по которым версии изменяются и вообще всей идеи версионирования ABI: https://gcc.gnu.org/onlinedocs/libstdc++/manual/ab...
    Ответ написан
    Комментировать
  • Как извлечь symvers из ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне надо извлечь из ядра symvers чтоб собрать модуль.

    Это ты в продолжение Как решить ошибку компиляции ядра Android? пишешь?
    Ответ написан
  • Загадочное поведение сетевого интерфейса debian, как исправить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ну и че может быть, интернета тупо нет ;(

    iptables -vL
    Ответ написан
    Комментировать
  • Как решить ошибку компиляции ядра Android?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я собрал твоё ядро на чистом debian 9:

    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make O=out riva_defconfig
    ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make O=out -j8 all


    Пришлось пофиксить говновраппер который отлавливал предупреждения:

    diff --git a/scripts/gcc-wrapper.py b/scripts/gcc-wrapper.py
    index 93a6cf4e287e..55652d391844 100755
    --- a/scripts/gcc-wrapper.py
    +++ b/scripts/gcc-wrapper.py
    @@ -83,8 +83,7 @@ def run_gcc():
         try:
             proc = subprocess.Popen(args, stderr=subprocess.PIPE)
             for line in proc.stderr:
    -            print >> sys.stderr, line,
    -            interpret_warning(line)
    +            print >> sys.stderr, line
     
             result = proc.wait()
         except OSError as e:


    Ошибок не было.
    Версия aarch64-linux-gnu-gcc -- 6.3.0.

    Мне показалось, что ты собираешь не установив ARCH, из лога нифига непонятно.
    Ответ написан
    32 комментария
  • В каких случаях всречается ошибка undefined symbol в библиотеках linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как отладить этот процесс?

    Установив переменные окружения LD_DEBUG и LD_DEBUG_OUTPUT перед запуском программы и глядя в получившийся лог. См. man ld.so.
    Ответ написан
  • Wifi сеть отображается как проводная в Kali Linux на virtualbox, Как исправить?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Подключаюсь к WIFI сети через адаптер, windows видит сеть как беспроводную. Запускаю Kali сеть отображается как проводная (eth0)
    Как можно поправить?

    Только отдав wifi целиком гостевой системе. Разделять его с хостовой системой и одновременно видеть как беспроводной адаптер в гостевой не получится.
    Ответ написан
  • Как увеличить ФС Ext4 внутри файла с 2 до 50 МБ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    отмонтировать файл
    resize2fs file 50M
    Ответ написан
    Комментировать
  • Почему в iptables пусто, а в netstat не все порты?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    iptables не имеет никакого отношения к тому, какие порты могут быть открыты. iptables управляет тем, как сетевые пакеты проходят через сетевой стек.
    Ответ написан
  • Как в bash для strace программы аргументы в строке разделять?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Лучшее известное мне решение -- с помощью массива:

    args=("--param1=value1" "--param2=value with spaces")
    "$cmd" "${args[@]}"


    Каждый элемент массива будет передан одним параметром.
    Ответ написан
    Комментировать
  • Почему не компилируется код на ассемблере в gcc?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    перекомпилируйте с параметром -fPIC
    gcc -fPIC ./hello.s

    "перекомпилируйте" в данном контексте означает "сгенерируйте другой ассемблерный код".

    Код программы выглядит так:

    Ну это же явно 32-битный код, компилируй его под 32 бита:
    gcc -m32 hello.s -o hello
    Ответ написан
    3 комментария
  • Про BlackArch, стоит ли учить\устанавливать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Сразу хочу сказать, что я хорошо ознакомлен с Linux, так что ознакомиться с BlackArch мне будет не очень трудно.

    Если бы ты был реально "хорошо ознакомлен", ты бы поставил этот blackarch в песочницу, поигрался бы, нашёл ответы на свои вопросы и возможно по пути отправил бы баг-репорт разработчикам. И не было бы этого вопроса.

    не поймите меня неправильно

    Вместо того, чтобы заниматься делом ты "познаёшь системы" с "проффесиональным интерфейсом" и строчишь о своих муках выбора вопросы на тостер, я тебя правильно понял?
    Ответ написан
  • Как удалиить папки вместе с файлами в Shell скрипте?

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

    Легко:
    find /volume1/Swap/ -depth -mindepth 1 -mtime +0 -delete
    Ответ написан
  • Как запустить на Linux 64 bit программы 32 bit, пишет что запускаемые файла это пустое место?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Доустановить 32-битное окружение -- libc и всё остальное, что программа использует. Детали зависят от дистрибутива.
    Пример для debian:
    dpkg --add-architecture i386
    apt-get update
    apt-get install libc6:i386
    Ответ написан
    1 комментарий
  • Как скриптом в Linux синхронизировать время с указанием своего Часового пояса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как скриптом в Linux синхронизировать время с указанием своего Часового пояса?

    Никак же, внутреннее время в Linux -- всегда в UTC. Для синхронизации часов TZ не нужна.
    TZ -- это обычная переменная окружения, влияет она только на С-функции работающие с датой/временем и на одной машине разные сессии вполне могут иметь разные настройки TZ.
    Установить её для ash можно в /etc/profile или ~/.profile.
    Ответ написан
    5 комментариев
  • Почему не работает ALT-CTRL-Fx?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Захожу в консоль по SSH через Putty. Хочу переключиться к примеру на TTY2. Нажимаю CTRL+ALT+F2, но в консоли только [12~
    Что я делаю не так?

    ctrl-alt-f2 -- это сочетание клавиш для драйвера виртуального терминала. Соответственно, оно работает только при вводе через виртуальный терминал.

    Под простым юзером ввожу chvt 2:
    Если под рутом, то команда выполняется и всё
    Что я делаю не так?

    В графической консоли вводишь? С помощью strace легко понять что происходит:
    от простого юзера:
    $ strace -iv chvt 2
    ...
    [00007f96b99d56f0] open("/proc/self/fd/0", O_RDWR) = 3
    [00007f96b99da80a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f96b99db017] ioctl(3, KDGKBTYPE, 0x7fff06db6d67) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f96b99d5f30] close(3)             = 0
    [00007f96b99d56f0] open("/dev/tty", O_RDWR) = 3
    [00007f96b99da80a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f96b99db017] ioctl(3, KDGKBTYPE, 0x7fff06db6d67) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f96b99d5f30] close(3)             = 0
    [00007f96b99d56f0] open("/dev/tty0", O_RDWR) = -1 EACCES (Permission denied)
    ...

    Т..е. stdin и /dev/tty не поддерживают ioctl переключающий терминал (вернее, до него даже не доходит), потому что твоя консоль -- это псевдотерминал, а открыть /dev/tty0 не хватает привилегий.
    А от рута:
    $ sudo strace chvt 2
    ...
    [00007f591848c6f0] open("/proc/self/fd/0", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f591848cf30] close(3)             = 0
    [00007f591848c6f0] open("/dev/tty", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f591848cf30] close(3)             = 0
    [00007f591848c6f0] open("/dev/tty0", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5, c_oflags=0, c_cflags=0xbf, c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = 0
    [00007f5918492017] ioctl(3, VT_ACTIVATE, 0x2) = 0
    [00007f5918492017] ioctl(3, VT_WAITACTIVE, 0x2) = 0
    ...

    Т.е. stdin и /dev/tty -- то же самое, но /dev/tty0 открывается и ioctl VT_ACTIVATE проходит.
    Ответ написан
    Комментировать
  • Как низкоуровневый код использующий стек узнает откуда он начинается?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Если взять за основу эту схему, то становится понятно, как код процесса может узнать адреса текста, инициализированных данных, неинициализированных данных

    Если мы говорим про обычные (не PIE) исполняемые ELF-файлы, то они слинкованы под конкретный адрес куда они будут загружены, и все адреса внутри одного исполняемого файла посчитаны заранее. Поэтому загрузка адреса функции или пременной в секции данных -- это просто загрузка константы в регистр.

    и кучи

    С кучей всё по-другому, потому что куча и объекты в ней полностью динамические. Выделение памяти для кучи -- это всегда системный вызов, который возвращает адрес выделенной памяти (и sbrk, и mmap).

    не ясно, как становится известен адрес стека и аргументов командной строки

    они инициализируются ядром ОС, согласно ABI, см. например, ABI x86_64, раздел 3.4.1.
    Ответ написан
    Комментировать
  • Как решить проблему в Bash?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    if [ -s file.txt ]
    then
    echo "File is empty"

    Неправильный тест:
    -s FILE
                  FILE exists and has a size greater than zero


    Правильный тест на файл нулевого размера наверно будет выглядеть так:
    if [ -f file.txt -a ! -s file.txt ]

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Сразу скажу, комп у меня слабенький и ждать 3-4 часа чтоб понять что забыл в конце оператора точку с запятой поставить, это не хорошо?!

    При разработке необязательно использовать конфигурацию ядра со всеми включёнными опциями. Типичный конфиг который я использую при разработке собирается с нуля за 2 минуты.
    Кроме того, ядерный Makefile понимает цели вида *.o. Т.е. можно взять и откомпилировать один файл из дерева исходников ядра. Например: make init/main.o.
    Если ты меняешь что-то в исходниках, перекомпилироваться будет только то, что действительно зависит от того, что ты поменял. Поменяешь .c -- перекомпилируется единственный соответствующий ему файл .o.

    как можно тестировать компоненты ядра

    Это совсем другой вопрос. Под просто тестированием понимают проверку того, что код работает правильно, а не то, что он собрался.
    Ответ написан
    Комментировать
  • Почему появляется ошибка segmentation fault но при повторном запуске программы её нет?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я не вижу криминала который мог бы привести к segfault в приведённой программе.
    Почему поведение может отличаться между запусками -- например потому что запись в файл /sys/class/gpio/export меняет состояние системы и запоминается между запусками.
    Кроме того, согласно https://www.kernel.org/doc/Documentation/gpio/sysfs.txt в direction надо писать in или out, а high или low нужно писать в value. Сегфолта от этого быть не должно, тем не менее.

    Что происходит, если собрать программу с отладочной информацией и запустить так, чтобы она упала под отладчиком?

    UPD: посмотрел ещё немного... В приведённом исходном тексте кривые юникодные кавычки. Рекомендую исправить на ASCII, либо вставить исходный текст как есть, без фокусов.
    Ответ написан