Задать вопрос
Ответы пользователя по тегу Linux
  • После перезагрузки не запускается iptables на Ubuntu server 20.04?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Какой демон? iptables это не демон. Этот сервис просто загружает сохранённые правила из файла при старте, а при остановке ничего не делает (либо очищает таблицы, в зависимости от настройки).

    Чтобы сохранить текущие загруженные правила, надо просто вызвать netfilter-persistent save.

    Если после перезагрузки в iptables -L есть нужные правила, то всё работает правильно.
    Ответ написан
    2 комментария
  • Что я упускаю при руссификации консоли?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В отличие от Debian, в Ubuntu файлы локализации вынесены в отдельный пакет language-pack-ru, установка которого решает проблему.
    Ответ написан
    Комментировать
  • Можно ли использовать Fail2Ban из докера?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну как бы это вполне возможно. Нужно --net=host, чтобы fail2ban редактировал iptables на хосте, нужно прокинуть (или загнать в образ) конфиг, нужно прокинуть изучаемые им логи, ну и про privileged mode не забыть. Но зачем? Ему же по сути только конфиг надо настроить один раз и везде использовать, вон уже выше ansible посоветовали для упрощения этой операции.
    Ответ написан
    Комментировать
  • Как запустить сеть без systemd-networkd (networkManager)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что сетка /32 состоит из одного адреса 10.166.0.4. Маска /32 - это 255.255.255.255. А нужно /24 - 255.255.255.0. С ней всё заработает как надо.
    Ответ написан
    7 комментариев
  • Можно ли "разбить зеркало" не угробив систему (mdadm)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если это именно зеркало (raid1), то да, можно работать на половинке зеркала, ведь она идентична второй половинке. Например, если с одним из дисков есть аппаратные проблемы, то его меняют, затем синхронизируют данные, причём всё это можно сделать без остановки системы (при наличии возможности горячей аппаратной замены диска).
    Ответ написан
  • Как вывести содержимое файла имея только команды echo и ls?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Владелец файла неважен, важно наличие доступа. Если доступа на чтение нет, то это всё, приехали.

    Так-то кратчайший вариант тут указали:

    echo `<-text.txt-`

    Но я думаю пользователя волновал именно минус в имени, а не наличие cat, и вот с этим побороться легко:

    cat -- -text.txt-
    cat ./-text.txt-
    Ответ написан
    Комментировать
  • Почему в среде Linux админов Vim - это тру, а Nano - для слабаков?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Вопрос в такой форме в принципе не очень корректен. Понятно, что vim может намного больше и намного круче, чем nano, но в конкретной ситуации важно не то, насколько крут используемый инструмент, а твоё личное умение решать задачи.

    Кто-то может быть и хорошо шпарит всякие клёвые штуки на vim, но элементарные задачи будет решать бездумными копипастами со Stackoverflow, чреватыми получением какого угодно (вплоть до деструктивного) результата. А в это же самое время опытный админ типа одного моего хорошего знакомого быстро и эффективно решит все проблемы в малоизвестном нынче, но весьма популярном лет 20 назад среди пересевших с DOS на UNIX редакторе joe. Ничего предосудительного в этом нет.
    Ответ написан
    Комментировать
  • Возможно ли динамически сформировать файл конфигурации, если требует указать к нему путь?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно сделать как-то так:

    echo some_file_content | command /dev/stdin

    Тогда команда получит в качестве имени файла /dev/stdin, который означает стандартный ввод и будет при чтении возвращать строку some_file_content. Но надо учитывать, что seek по такому файлу невозможен, поэтому если программа не просто читает файл построчно, а пытается перемещаться по нему, то это не сработает.

    Если не хочется занимать stdin или надо передать так несколько псевдофайлов, можно сделать так:

    command <(echo some_file_conten)

    Фактически command получит в качестве аргумента что-то типа /dev/fd/63. Можно убедиться, сделав

    ls -l <(echo hello)

    Но в целом не стоит слишком бояться создавать временные файлы. Это быстро, ведь если генерировать его непосредственно перед запуском, то данные сразу будут в дисковом кэше и прочитаются программой моментально.
    Ответ написан
    1 комментарий
  • Чьи права примонтированной папки в докер? Контейнера или хоста?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это точно один и тот же файл? Можно сделать stat на файл в системе и отдельно в контейнере, зайдя в него по docker exec. Если inode у файла разный - это разные файлы. Возможно, с пробросом в докер что-то напутано.

    Как называется пользователь зависит от содержимого файла /etc/passwd, который в контейнере и на хосте разные. Пользователь в Linux идентифицируется по uid - это просто числовой идентификатор. Соответственно, uid=0 это root, теоретически его можно переименовать, но так никто не делает.
    Ответ написан
    Комментировать
  • Загрузочная запись в ISO образе?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Что значит "с помощью dd записал iso"? Нельзя в iso9660 просто так ковыряться внутри. Надо смонтировать (через loop device), достать файлы, внести изменения, собрать обратно.

    Чтобы диск остался загрузочным, надо понять, какой там загрузчик (вероятно, isolinux?) и пересобрать iso с учётом этого (например, для isolinux смотреть тут: https://wiki.syslinux.org/wiki/index.php?title=ISOLINUX).
    Ответ написан
    1 комментарий
  • Существуют ли аналоги remote.it (облачный cli) для linux?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если нет возможности/желания поднимать VPN, то это задача как раз для сервиса ngrok, дёшево и сердито.
    Ответ написан
    2 комментария
  • Как перенаправить ввод из конвейера?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    cat sorted | cut -f 1 -d ' ' | uniq |
    while read line
    ...
    Ответ написан
  • При запуске Linux Debian 10 черный экран с ошибкой, как исправить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Явно система установлена чересчур минимально, без графического окружения. Если при установке слишком активно задать галочками "это и это и это не ставить", то такое вполне ожидаемо.

    Для исправления компьютер долежн быть подключен к Internet.

    Введи свой логин, Enter, пароль (он не будет отображаться), Enter. Появится приглашение командной строки, оканчивающееся на символ $. Далее надо сделать:

    sudo apt install task-XXX-desktop

    Вместо XXX нужно указать желаемую оболочку: kde, gnome, xfce4... Лично я предпочитаю xfce4 за её легковесность, но gnome и kde более распространены, и в debian традиционно по умолчанию ставится gnome

    У тебя спросит ещё раз твой пароль (sudo выполняет действия от пользователя root, но вводить надо свой пароль). Затем будут скачаны из интернета вагон и тележка нужных пакетов. По окончании надо перезагрузиться и должен будет появиться графический вход в систему.

    PS: Впрочем, сообщение ядра, высыпавшееся сразу после приглашения логина, намекает на отсутствие нужных для работы сетевухи Realtek 8168 firmware. Все нужные firmware можно установить пакетом firmware-linux, но при отсутствии сети это проблема. Вот из официального руководства по установке как их подсовывать https://www.debian.org/releases/stable/armhf/ch06s...
    Ответ написан
    Комментировать
  • Как скачать файл с сервера находясь на сервере?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Задача сводится к тому, чтобы на сервере можно было бы открыть ssh-соединение до компьютера, находящегося за nat где-то в офисе. И это можно сделать! Для этого в ssh есть Port Forwarding.

    Делаем так:

    ssh -R 12345:127.0.0.1:22 user@example

    При этом не только открывается сессия с example, но и на удалённом сервере на localhost (127.0.0.1) sshd начинает слушать порт 12345. Все коннекты на этот порт по ssh-соединению (то есть зашифрованно прокидываются на исходную машину на 127.0.0.1:22. Что и требовалось.

    Например, можно на удалённой машине зайти на свою:

    ssh -p 12345 me@localhost

    Можно скопировать файл:

    scp -P 12345 /dev/zero me@localhost

    Можно даже sftp:

    sftp -o Port=12345 me@localhost

    Возможен проброс порта и в обратную сторону, с локальной машины на удалённую, с помощью ключа -L. Например, пусть есть сервер в офисе с внешним IP, с которого доступен внутренний адрес 192.168.1.2 с Windows и включённым RDP. Нам надо на него попасть, не заморачиваясь с поднятием VPN.

    Делаем так:

    ssh -L 31415:192.168.1.2:3389 user@example

    Затем в RDP-клиенте вместо 192.168.1.2 вводим 127.0.0.1:31415

    PS: Нужно отметить, что в настройках sshd PortForwarding может быть запрещён. Но чаще всего в конфигурации по умолчанию он включен.
    Ответ написан
    1 комментарий
  • Как установить пакет libsndfile1 для librosa без прав sudo?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно скомпилировать самому. Или взять из пакетов такого же дистрибутива, как на хостинге, положить к себе, через LD_LIBRARY_PATH подсунуть... Но как тут уже правильно сказали, лучше не страдать фигнёй.
    Ответ написан
    Комментировать
  • Почему команда curl -I (--head) отдает код 404, а curl -i отдает код 200?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В зависимости от используемых библиотек и технологий обработчик HEAD может быть необходимо ещё и явным образом надо написать. Поэтому нет ничего удивительного, что сервер и не обязан возвращать одинаково.

    Например, вот у меня есть сто лет назад написанный скрипт на базе библиотеки BaseHTTPServer:

    def do_GET(self):
      url = self.path
      for mm in self.methodmap.keys():
        if re.match(mm, url):
          return self.methodmap[mm](url, None)
      self.send_response(404)
      self.send_header('Content-Type', 'text/plain')
      self.end_headers()
      self.wfile.write('URL not defined')
    
    def do_HEAD(self):
      self.send_response(200)
      self.send_header('Content-type', 'application/json')
      self.end_headers()


    Здесь HEAD всегда будет возвращать 200, даже на кривые URL, в то время как GET может возвращать 404. Потому что писать красиво для HEAD мне не было никакой потребности, и я просто оставил тот вариант, который был в шаблоне скрипта по умолчанию.
    Ответ написан
    Комментировать
  • Как получить текст из терминала, используя python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Задачу нужно решать в принципе иначе. То, что запущено в tmux, надо запустить с выводом в файл. А на сайт выводить результат парсинга этого файла. Сам файл можно забирать по ssh с ключом, ну или запускать удалённо команду tail:

    ssh -i my_id_rsa_key user@foo.bar tail /tmp/script.log


    Запускать в tmux и потом ещё возиться с работой интерактивного shell - это чересчур.
    Ответ написан
    3 комментария
  • Стоит ли переходить с win 10 на linux debian?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Все указанные программы под Linux производителем не выпускаются, так что тебе переходить точно не имеет смысла, ты не сможешь в нём работу работать.

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Скомпилировать как статический бинарник (можно даже под x86 чтобы работало на 32-битных и 64-битных машинах).

    $ echo 'int main(){ printf("Hello, World\n"); }' > xxx.c
    $ gcc -static xxx.c -o xxx
    xxx.c: In function ‘main’:
    xxx.c:1:13: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
     int main(){ printf("Hello, World\n"); }
                 ^~~~~~
    xxx.c:1:13: warning: incompatible implicit declaration of built-in function ‘printf’
    xxx.c:1:13: note: include ‘<stdio.h>’ or provide a declaration of ‘printf’
    $ ./xxx 
    Hello, World
    $ ls -l xxx
    -rwxrwxr-x 1 shurik shurik 844696 авг 13 22:04 xxx
    $ ldd ./xxx
            не является динамическим исполняемым файлом


    Но если используется много всяких библиотек, потребуются их статические версии, что может быть напряжно.
    Ответ написан
  • Большое потребление SWAP в работе KVM?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Свободная память - это free. В avail показывается "потенциально доступная" память, если система сбросит все дисковые кэши.

    Система превентивно сбрасывает часть данных в swap для того, чтобы был запас свободной памяти. Это поведение зависит от переменной vm.swappiness, задающей процент занятой памяти, при превышении которого система начинает перенос данных в swap. Я бы посоветовал проверить её значение, возможно, там стандартные 60%, что на системе с 64 Гбайтами будет означать, что swap начинает использоваться после 38.4 занятой памяти. Собственно, в used на скриншоте почти столько и есть.

    Посмотреть текущее значение можно так:

    sysctl vm.swappiness

    Если это как-то мешает, можно увеличить, например, до 75%, что будет давать порог в 48 Гб. Но под кэш останется не больше 16 Гб, при активном дисковом обмене уменьшение может оказаться заметным, особенно на HDD.
    Ответ написан
    2 комментария