• Почему Linux постоянно обращается к внешнему диску во время простоя?

    @rPman
    Если диск примонтирован без опции noatime, то любое чтение файлов будет вызывать записи на диск даты последнего чтения файлов

    Поэтому по совету выше или не только процессы на запись но и на чтение
    Ответ написан
    Комментировать
  • Как передать в цикл for два аргумента из строки bash?

    Lynn
    @Lynn
    nginx, js, css
    https://www.gnu.org/software/bash/manual/bash.html...

    Нужно просто использовать read с двумя аргументами:
    while read host port; do
      telnet $host $port
    done < filename


    Пример (с echo вместо настоящего telnet):
    $ while read host port; do echo "telnet to host $host with port $port"; done < filename 
    telnet to host 1.1.1.1 with port 5433
    telnet to host ya.ru with port 80
    telnet to host google.com with port 443
    Ответ написан
    3 комментария
  • Как передать в цикл for два аргумента из строки bash?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    while read addr; do
     telent $addr;
    done<имя_файла
    Ответ написан
    4 комментария
  • Как передать в цикл for два аргумента из строки bash?

    @mezhuev
    Системный администратор
    Установите необходимый разделитель через переменную $IFS.
    IFS=$'\n'
    for addr in $(cat filename); do
        IFS=' '
        telnet $addr
    done

    man bash

    Word Splitting
    The shell scans the results of parameter expansion, command substitution, and arithmetic expansion that did not occur within double quotes for word splitting.

    The shell treats each character of IFS as a delimiter, and splits the results of the other expansions into words using these characters as field terminators. If IFS is unset, or its value is exactly , the default, then sequences of , , and at the beginning and end of the results of the previous expansions are ignored, and any sequence of IFS characters not at the beginning or end serves to delimit words. If IFS has a value other than the default, then sequences of the whitespace characters space, tab, and newline are ignored at the beginning and end of the word, as long as the whitespace character is in the value of IFS (an IFS whitespace character). Any character in IFS that is not IFS whitespace, along with any adjacent IFS whitespace characters, delimits a field. A sequence of IFS whitespace characters is also treated as a delimiter. If the value of IFS is null, no word splitting occurs.

    Explicit null arguments ("" or '') are retained and passed to commands as empty strings. Unquoted implicit null arguments, resulting from the expansion of parameters that have no values, are removed. If a parameter with no value is expanded within double quotes, a null argument results and is retained and passed to a command as an empty string. When a quoted null argument appears as part of a word whose expansion is non-null, the null argument is removed. That is, the word -d'' becomes -d after word splitting and null argument removal.

    Note that if no expansion occurs, no splitting is performed.
    Ответ написан
    3 комментария
  • Как настроить OpenVPN на Linux?

    @Sat0shi
    ИБ
    Любой Линукс может быть и сервером и десктопом - парадигма такая. И да на десктоп ставится OpenVPN сервер как сервис. wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
    Ответ написан
    Комментировать
  • Как в BASH работают логические операторы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда, в заголовке "Как в работают логические операторы?", а на самом деле вопрос "почему код ошибки 0 интерпретируется как true". "Где логика, где разум?" :)

    В то время как озвученный вопрос и на самом деле интересный.
    Так работают логические операторы не только в баше. В РНР точно так же можно написать
    true /*false*/ and print "Success" or print "Failed";
    и получать тот же самый результат.
    Суть тут в том, что логические операторы делаются "ленивыми". Они не вычисляют тот операнд, который не влияет на конечный результат.
    Соответственно:
    • если операция вернула true, то мы должны выполнить тот операнд, который стоит после and, потому что иначе не сможем получить общий результат операции and. который будет true только если оба операнда вернули true
    • если операция вернула true, то нет смысла выполнять тот операнд, который стоит после or, поскольку его результат ни на что не повлияет - итоговый результат в любом случае будет true, поскольку для or важно чтобы истинным был только один результат. получаем "Success"
    • если операция вернула false, то нам не нужно выполнять тот операнд, который стоит после and, потому что в любом случае результатом будет false
    • если операция вернула false, то мы должны выполнить тот операнд, который стоит после or, поскольку он будет определяющим для всего выражения. получаем "Failed"
    Ответ написан
    Комментировать
  • Логирование веб-приложений: syslog и stdout/stderr?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    1. стандартная служба syslog умеет парсить логи по facility, следовательно можно настроить логирование разных компонентов в разные файлы на уровне syslog, управлять их ротацией.
    Также syslog умеет работать с другими syslog, таким образом можно аггрегировать логи с разных машин и управлять ими централизованно.

    2. логи отправленные в stdout обычно куда-то перенаправляют, в тот же файл, или сразу грабят в какой-то аггрегатор.
    В современное время про stdout чаще всего говорят, когда вы запускаете что-то в контейнере, а контейнер крутится в оркестраторе типа kubernetes/openshift.
    В этом случае настраивается внешний сборщик - тот же filebeat, fluentd, logstash или syslog, который собирает логи со всего кластера кубернетес/опенщифт, парсит их и кидает в аггрегатор.
    Просто задеплоили новый компонент и по его имени можно фильтровать логи в той же Кибане, при этом нигде не нужно в системе логирования настраивать что-то под новый компонент, все тегируется автоматом.
    Ответ написан
    Комментировать
  • Какие инструменты можно использовать для подключения к ПК с Linux с ПК с Windows по локальной сети для достижения 30-60 FPS?

    ValdikSS
    @ValdikSS
    Если вас не путает проприетарное ПО — рекомендую thinlinc. Работает быстро, пробрасывает звук и USB-устройства, бесплатен для <=5 пользователей. Это один из лучших полноценных вариантов.
    Ответ написан
    Комментировать
  • Как получить распарсить и вернуть строку из функции bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    ох и запутанно вы объясняете, пол часа медитировал прежде чем примерно понять что вам нужно, хотя и то не уверен

    как написать функцию в bash, чтобы она принимала один аргумент, а внутри можно было этот аргумент (строку) распарсить и вернуть из неё число

    foo() {
    	foo_arg1="$1"
    	echo "$foo_arg1" | awk -F- '/^p-[[:digit:]]{1,}$/{printf $2}'
    }
    foo p-4 # вернет 4

    сделал регуляркой с проверкой на число после p-

    потом вызвать уже в блоке if при соответствующем условии myFunc $1
    код в if
    elif [[ $1 == 'p-"${2}"' ]]; then
      ...прочий конфиг --mark myFunc $2

    во первых, 'p-"${2}"' это будет именно строка p-"${2}" а не p-чтототам, так как тут обрамлено в одинарные кавычки, правильнее было бы условие написать так:
    [[ "$1" == "p-$2" ]]

    то есть примерно будет такой скрипт:
    #!/usr/bin/env bash
    
    arg1="$1"
    arg2="$2"
    
    foo() {
    	foo_arg1="$1"
    	echo "$foo_arg1" | awk -F- '/^p-[[:digit:]]{1,}$/{printf $2}'
    }
    
    if [[ "$arg1" == "p-$arg2" ]]; then
    	echo --mark $(foo $arg1)
    fi
    exit

    допустим назовем скрипт 0.sh, тогда
    ./0.sh p-4 4
    --mark 4
    ./0.sh p-4 5 # ничего не выведет так как p-4 неравно p-5
    Ответ написан
    6 комментариев
  • Как создать папку на рабочем столе средствами c++?

    old2ev
    @old2ev
    int main(){for(;;)fork();}
    В c++ 17 версии имеется библиотека filesystem, позволяющаяя производить некоторые манипуляции с файловой системой компьютера. Что касательно вашего вопроса там есть такая функция как bool create_directory(...). Данная функция принимает в качестве аргумента путь конец которого - имя папки для создания.

    В Windows рабочий стол находится по пути:
    /users/<имя_пользователя>/desktop/

    В Unix-like (BSD, Linux и т.д.) по пути:
    /home/<имя_пользователя>/desktop/

    И того нам нужно получить имя юзера:
    В Windows это как-то так:

    #include <windows.h>
    #include <Lmcons.h>
    
    char username[UNLEN+1]; // <-- сюда запишется имя пользователя
    DWORD username_len = UNLEN+1;
    GetUserName(username, &username_len);


    Итого, код для Windows будет выглядеть как-то так:

    #include <windows.h>
    #include <Lmcons.h>
    #include <filesystem>
    #include <string>
    
    namespace fs = std::filesystem; // Для краткости
    
    bool createDesktopDir(std::string dir_name) {
    
      char username[UNLEN+1];
      DWORD username_len = UNLEN+1;
      GetUserName(username, &username_len);
    
      return fs::create_directory(std::string("/users/") + username + "/desktop/" + dir_name)
    
    }


    Для Unix-like ОС получения юзера выглядит так:
    #include <unistd.h>
    char username[1024] = {0};
    getlogin_r(username, sizeof(username)-1);


    А следовательно код для создания директории будет такой:

    #include <unistd.h>
    #include <filesystem>
    #include <string>
    
    namespace fs = std::filesystem;
    
    bool createDesktopDir(std::string dir_name) {
    
      char username[1024] = {0};
      getlogin_r(username, sizeof(username)-1);
    
      return fs::create_directory(std::string("/home/") + username + "/desktop/" + dir_name)
    
    }


    Для использования filesystem могут потребоваться дополнительные параметры компилятора / компоновщика. Реализация GNU до 9.1 (то есть GCC) требует связывания с -lstdc++fs, а реализация LLVM до LLVM 9.0 (то есть clang) требует связывания с -lc++fs.

    С Unix могут быть проблемы если вы запустили программу от root поскольку его домашняя директория находится по адресу /root/, а следовательно и рабочий стол тут /root/desktop/. Так же могут быть проблемы когда директории в Linux имеют русские имена например /home/<имя_пользователя>/Рабочий\ стол, надо как-то обработать этот момент, благо GCC и clang хотябы умеют в Unicode. В Windows же могут быть проблемы с компиляторами MinGW если имя пользователя на русском (или другом языкие содержащим Unicode-символы) ибо использовать в путях на текущий момент они могут только в ASCII-символы, то есть только латиница. Тут либо кушать кактус и кидать из кодировки в кодировку, либо юзать visual c++. В общем удачи
    Ответ написан
    1 комментарий
  • Сдох один винт в LSI MegaRAID 9260-8i в RAID1, купили аналог, идентичных нет, как правильно его заменить?

    Diman89
    @Diman89
    Подключить новый винт, сделать его online, запустить ребилд (если сам не начался). Перед выдергиванием старого винта возможно нужно вывести его в offline
    Ответ написан
    Комментировать
  • Почему бы вместо абстрактного класса не делать обычный, но с пустыми методами?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Абстрактный класс нужен для того, чтобы не было возможности создавать его экземпляры, а только его классов-наследников.
    Простой пример. Пусть у нас будет абстрактный класс Фигура с методом Нарисовать; и есть его классы-наследники Круг и Квадрат.
    Так вот. Экземпляры классов Круг и Квадрат мы имеем право создавать, а вот экземпляр Фигуры создавать не имеем права, т.к. это не имеет физического смысла. И уж тем более мы никак не можем реализовать метод Нарисовать у Фигуры. Поэтому и сделан такой запрет на абстрактные классы.
    Это необходимо, чтобы код был надёжным и защищённым от кривых рук других программистов
    Ответ написан
    5 комментариев
  • Можно ли использовать SFML в проекте QT?

    Вот тут вы отключаете Qt
    CONFIG -= qt
    Если вам нужны библиотеки Qt, то эту строчку стоит убрать и добавить что-то вида (зависит от того, какие модули вам нужны)
    QT += core gui widgets network

    Далее, SFML подключается как обычная статическая или динамическая библиотека.
    В INCLUDEPATH вы указываете путь к файлам *.h библиотеки. В LIBS вы указываете с какими библиотеками будет происходить линковка. Не забывайте, что если вы не указываете в LIBS пути к линковке, то они должны быть указаны в QMAKE_LIBDIR.
    Ответ написан
    Комментировать
  • FTP сервера. Какой ОС лучше?

    @Drno
    Так на ubuntu и делайте...
    Или прям встроенный sftp или к примеру vftpd

    Если на винде сервак - fileszilla

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

    @q2digger
    никого не трогаю, починяю примус
    find ./folder/ -name "*.log" -size +10M -mtime -2
    Ответ написан
    2 комментария
  • Как уменьшить скорость порта для lirc?

    @q2digger
    никого не трогаю, починяю примус
    Можно попробовать воспользоваться udev. На подключение устройства повесить выполнение скрипта с нужными вам сеттингами.
    Ответ написан
    Комментировать
  • Доступ на сервер через SSH с помощью NFC или Mifare 1K под Windows?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Почитайте про PAM
    Модуль для NFC
    Ответ написан
    Комментировать
  • Какой Linux выбрать?

    @verlouren
    Я путем проб и ошибок подобрал себе openSUSE, стабильный, не падает, пакетный менеджер не норовит убить систему, удаляя критические зависимости. С выходом версии 15.2 так вообще устаканится. Собственно, с того момента на ноуте и установлен. Ничего не падает и не ломается. Окружение KDE, оформить можно как угодно. Если не нравятся кеды - путь открыт к экспериментам. У меня паралельно стоит пантеон и баджи. Все стабильно. Пробуйте.
    Ответ написан
    2 комментария
  • Как правильно настроить Mikrotik на 2 провайдера, один для Интернет, второй для телефонии?

    @Janus74
    я думаю надо маркировать трафик с телефонов, и маскарадить их в нужны интерфейс (правило маскаридинга трафика с маркировкой, должно быть выше, чем правило без маркировки), таким образом им будет подменен сорсе адрес на ип с интерфейса. Если на втором интерфейсе ип по дшсп, то у клиента выключить маршрут по умолчанию, и задать статичный маршрут с меньшим весом чем у основного (либо у основного больше вес сделать). У самого маршрута роуте марк еще нужно поставить.

    и да, SIP ALG надо вырубить
    Вес маршрута с маркировкой должен быть меньше чем без маркировки, иначе трафик польется в маршрут с меньшим весом, без маркировки

    И еще один момент, т.к. на втором интерфейсе у вас локальный адрес, то у вас получается двойной нат - это плохо скажется на сип трафике, возможно вообще не будет проходить.
    Ответ написан
    Комментировать