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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    замена внутри файла

    Я использую для этого такую конструкцию:
    #! /bin/bash
    
    subst()
    {
    	eval "cat <<EOF
    `cat \"$1\"`
    EOF"
    }
    
    . ./config
    subst ./dhcpd.conf.in > ./dhcpd.conf


    При этом dhcpd.conf.in выглядит так:
    ddns-update-style interim;
    ignore client-updates;
    
    subnet ${NET}.0 netmask 255.255.255.0 {
            option routers                  ${NET}.1;
            option subnet-mask              255.255.255.0;
    
            option domain-name-servers      192.168.248.21;
    
            option root-path                "${NET}.1:/tftpboot/tensilica/rootfs/${ROOTFS}${NFS_MOUNT_OPTIONS}";
    
            range dynamic-bootp ${NET}.128 ${NET}.128;
            default-lease-time 21600;
            max-lease-time 43200;
    }

    а config -- так:
    NET=192.168.135
    ROOTFS=cp0_latest
    NFS_MOUNT_OPTIONS=${NFS_MOUNT_OPTIONS},noac
    IF_CONFIG="$NET.1 up"
    CONFIG=debug-kc705-cp0_latest
    KERNEL_IMAGE=uImage


    Т.е. в функции subst внутренний cat подставляет тело файла-шиблона, а eval выполняет внешний cat с подстановкой shell-переменных, зачитанных из config. Нужно понимать, что и шаблон и конфиг в этом скрипте могут выполнять произвольные команды, т.е. нельзя их брать у недоверенного пользователя.
    Ответ написан
    Комментировать
  • Почему && не работает в Screen?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему так, не подскажете?

    Потому что && разбивает команду следующим образом:
    ( screen -dmS unpack unzip -o arhiv.zip ) && ( rm arhiv.zip )

    т.е. "запустить screen и удалить файл". Чтобы удалить файл внутри screen надо написать
    screen -dmS unpack bash -c 'unzip -o arhiv.zip && rm arhiv.zip'
    Ответ написан
    1 комментарий
  • Почему сменяется группа при изменении содержимого файла?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему сменяется группа при изменении содержимого файла?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В каком месте может быть ошибка?

    man pipe: писать можно только в fd[1], читать -- только из fd[0].
    Канал однонаправленный, т.е. для двунаправленной коммуникации нужно открывать два канала.
    Должно быть так:
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h> 
    
    int main(int argc, char **argv) {
    
            int fd0[2], fd1[2], n;
            char c;
            pipe(fd0);
            pipe(fd1);
    
            if (!fork()) {
                    close(fd0[0]);
                    close(fd1[1]);
    
                    write(fd0[1], "c", 1);
    
                    sleep(1);
    
                    if ((n = read(fd1[0], &c, 1)) != 1) {
                            printf("Дочерний процесс. Результат чтения: %d\n", n);
                            exit(0);
                    }
    
                    printf("Дочерний процесс прочитал: %c\n", c);
                    exit(0);
            }
            close(fd1[0]);
            close(fd0[1]);
                                                                                                                                                                                                                                                                              
            write(fd1[1], "p", 1);
            if ((n = read(fd0[0], &c, 1)) != 1) {
                    printf("Родительский процесс. Результат чтения: %d\n", n);
                    exit(0);
            }
    
            printf("Родительский процесс прочитал: %c\n", c);
            exit(0);
    
            return 0;
    }
    Ответ написан
    3 комментария
  • Максимальное кол-во папок в одной папке (ext4)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Максимальное кол-во папок в одной папке (ext4)?

    Нет ограничения.
    Есть ограничение на общее количество файлов в одной файловой системе -- 2^32, их все можно свалить в один каталог.
    Ответ написан
    4 комментария
  • Как поставить драйвера на сетевую карту Intel i219V?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    поставил Debian

    Какую версию?

    Сетевой контроллер: Intel i219V
    При установке ОС сетевую карту не нашел

    Эта сетевуха давно поддерживается в linux mainline.
    Что в dmesg после загрузки?
    Ответ написан
  • Зачем нужен fakeroot, при сборке deb-пакета?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    fakeroot делает так, что приложение, которое не имеет прав рута, но ожидающее, что оно имеет эти права, не завершается с ошибкой из-за недостатка прав, при выполнении некоторых функций, а продолжает работать. Т.е. он "проглатывает" ошибки вызванные недостатком привилегий.

    Например, обычный пользователь не может сделать chowh root:root для файла, которым он владеет:
    $ chown root:root test ; echo $?
    chown: changing ownership of 'test': Operation not permitted
    1

    fakeroot даёт приложению видимость того, что ошибки не происходит. Владелец файла при этом, конечно, не меняется:
    $ fakeroot chown root:root test ; echo $?
    0
    $ ls -la test
    -rw-rw-r--. 1 jcmvbkbc jcmvbkbc 1709 Jun  1  2011 test

    Всё.

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

    Почему в мануалах пишут так:
    fakeroot dpkg-deb --build ./path
    а вот так тоже работает:
    dpkg-deb --build ./path

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

    Андрей Буров, pfg21 всякие "песочницы", "не пускает во внешний мир", "скрипт может раскидать бинарники по системе, песочница его не выпустит" применительно к fakeroot -- это фантазия. Сборка пакетов может и должна производиться под обычным пользователем. Штатная система привилегий заботится о том, что приложение, запускаемое под непривилегированным пользователем ничего не сломало.
    Ответ написан
    8 комментариев
  • Пеhенос скомпилированного модуля ядра Linux на другую машину?

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

    Можешь. Но загрузить такой модуль без проблем ты сможешь только если совпадают версии ядра и основные опции в .config ядра. Ну либо если отключишь проверку версии модулей в конфиге. Иначе -- только modprobe --force.
    Ответ написан
    2 комментария
  • Как вывести фрагмент из текстового файла в BASH?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #! /bin/sh
    
    TOP=$(($1 + 1))
    BOT=$(($3 + 1))
    
    LEFT=$2
    WIDTH=$(($4 - $2 + 1))
    
    sed -n "$TOP,$BOT s/.\{0,$LEFT\}\(.\{0,$WIDTH\}\).*$/\1/p"

    $ ./win.sh 1 3 3 7
    У попа была собака,
    Он её любил.
    Она съела кусок мяса.
    Он её убил.
    её лю
     съел
    её уб
    $
    Ответ написан
    Комментировать
  • Где посмотреть номера системных вызовов ядра Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    - старое архитектурно-специфичное представление (определения в arch/*/include/uapi/asm/unistd.h, на примере MIPS)
    - старое архитектурно-независимое представление (определения в include/uapi/asm-generic/unistd.h, ими пользуется, например, ARM64)
    - новое представление (отдельный файл определений из которого генерируются заголовочные файлы),
    Ответ написан
    Комментировать
  • Что за ошибка компиляции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я скачал драва на свой wifi адаптер tl-wn722n

    Я бы смотрел сюда или сюда.
    Ответ написан
    Комментировать
  • Зачем эти поля в control при сборке deb-пакета?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Чем отличаются поля Recommends и Suggests?

    https://www.debian.org/doc/debian-policy/ch-relati...
    https://www.debian.org/doc/manuals/debian-faq/ch-p...
    TL;DR: силой рекомендации (Recommends сильнее).

    Зачем нужно поле priority (приоритет), где оно проверяется/используется?

    https://www.debian.org/doc/debian-policy/ch-archiv...

    Зачем нужны пакеты, которые можно установить, но нельзя удалить?

    Чтобы пользователь себе систему с дуру не сломал.

    Зачем нужно поле Essential, если можно запретить удаление пакета через Priority?

    https://www.debian.org/doc/debian-policy/ch-contro...

    Можно ли все-таки удалить пакет и как, если Essential = yes или Priority = required?

    Priority = required -- как я понял -- да, Essential = yes -- как я понял -- нет.
    Ответ написан
    Комментировать
  • Ошибка при запуске Linux parrot?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что это значит?

    Это значит, что что-то пошло не так. Но самой ошибки на этом экране нет.
    Посмотри на вывод dmesg для начала.

    Выдает такое

    Клади картинки на habrastorage.
    Ответ написан
    Комментировать
  • Почему переменная не работает в ssh внутри баш скрипта?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему, как исправить?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Мне нужно, чтобы этот таймер был не на live cd, как во всех практически дистрах, а на другом пункте.
    Если это вообще возможно реализовать, то, пожалуйста, дайте мне об этом знать

    Возможно. Конфигурация загрузчика находится на liveCD в файле /isolinux/live.cfg можно посмотреть так:
    $ mkdir cd
    $ sudo mount -o loop Parrot-security-4.3_amd64.iso cd
    mount: /dev/loop0 is write-protected, mounting read-only
    $ head -n3 cd/isolinux/live.cfg
    label ^live
            menu label ^Live Mode
            menu default

    Вот это menu default нужно перенести в другое место.
    Как это сдеать? Проще всего хекс-редактором отредактировать iso. В свежескачанном 64-битном parrot security os iso эта строчка находится по адресу 0x546e024, ищется простым грепом:

    $ hexdump -Cv Parrot-security-4.3_amd64.iso | grep -A3 'label ^live'
    0546e000  6c 61 62 65 6c 20 5e 6c  69 76 65 0a 09 6d 65 6e  |label ^live..men|
    0546e010  75 20 6c 61 62 65 6c 20  5e 4c 69 76 65 20 4d 6f  |u label ^Live Mo|
    0546e020  64 65 0a 09 6d 65 6e 75  20 64 65 66 61 75 6c 74  |de..menu default|
    0546e030  0a 09 6c 69 6e 75 78 20  2f 6c 69 76 65 2f 76 6d  |..linux /live/vm|


    Вот например я сделал второй пункт пунктом по умолчанию:
    0546e000  6c 61 62 65 6c 20 5e 6c  69 76 65 0a 09 6d 65 6e  |label ^live..men|
    0546e010  75 20 6c 61 62 65 6c 20  5e 4c 69 76 65 20 4d 6f  |u label ^Live Mo|
    0546e020  64 65 0a 09 6c 69 6e 75  78 20 2f 6c 69 76 65 2f  |de..linux /live/|
    0546e030  76 6d 6c 69 6e 75 7a 0a  0a 69 6e 69 74 72 64 20  |vmlinuz..initrd |
    0546e040  2f 6c 69 76 65 2f 69 6e  69 74 72 64 2e 69 6d 67  |/live/initrd.img|
    0546e050  0a 0a 61 70 70 65 6e 64  20 62 6f 6f 74 3d 6c 69  |..append boot=li|
    0546e060  76 65 20 68 6f 73 74 6e  61 6d 65 3d 70 61 72 72  |ve hostname=parr|
    0546e070  6f 74 20 6c 6f 63 61 6c  65 73 3d 65 6e 5f 55 53  |ot locales=en_US|
    0546e080  2e 55 54 46 2d 38 20 6b  65 79 62 6f 61 72 64 2d  |.UTF-8 keyboard-|
    0546e090  6c 61 79 6f 75 74 73 3d  75 73 20 71 75 69 65 74  |layouts=us quiet|
    0546e0a0  20 73 70 6c 61 73 68 20  61 70 70 61 72 6d 6f 72  | splash apparmor|
    0546e0b0  3d 30 0a 09 0a 6c 61 62  65 6c 20 74 65 78 74 0a  |=0...label text.|
    0546e0c0  0a 6d 65 6e 75 20 6c 61  62 65 6c 20 54 65 72 6d  |.menu label Term|
    0546e0d0  69 6e 61 6c 20 6d 6f 64  65 0a 0a 6d 65 6e 75 20  |inal mode..menu |
    0546e0e0  64 65 66 61 75 6c 74 0a  09 6c 69 6e 75 78 20 2f  |default..linux /|
    Ответ написан
    2 комментария
  • Как по SSH с линукса на линукс получить доступ к GUI?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как по SSH с линукса на линукс получить доступ к GUI?

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

    Первое делается либо тупо запуском приложения внутри сессии ssh -X, либо запуском удалённого vnc-сервера и присоединением к нему. "Тупо" -- потому что при обрыве связи в первом случае приложение будет потеряно, а во втором -- нет, можно будет присоединиться к vnc повторно и продолжить.

    Второе делается запуском x11vnc на удалённой машине с параметром -display указывающим на нужный X11-дисплей и последующим присоединением к этому vnc-серверу.
    Ответ написан
    Комментировать
  • Что это такое за ошибка в Oracle linux server?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что это такое за ошибка в Oracle linux server

    Не может примонтировать корневую файловую систему.

    по незнанию я увеличил, оказалось то, что так увеличивать нельзя

    Похоже на причину.

    что теперь делать я вообще не знаю, новичок в этом

    Новичку проще всего будет поставить линукс заново.
    Ответ написан
    Комментировать
  • Как заставить wget качать из конвейера?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    curl -s 'https://api.adoptopenjdk.net/v2/latestAssets/releases/openjdk11?openjdk_impl=hotspot&os=linux&arch=x64&release=latest&heap_size=normal&type=jdk' | \
    jq -r '.[0].checksum_link' | xargs wget
    Ответ написан
    Комментировать