• Где найти подписи к пакету?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    там ниже в коментах под данным пакетом в АУРе закреплен пост сопровождающего данный пакет:
    --> ALWAYS DO A CLEAN BUILD <--
    This package will verify the signature of the git tag / commit. Developer keys are available here and instructions are here. See the PKGBUILD to determine which developer key you need.

    то есть, смотрите PKGBUILD данного пакета
    а именно вот эту конкретную переменную:
    validpgpkeys=('EA0A77BF9E115615FC3BD8BC7653B940E494FE87'
                  # Linus Färnstrand (code signing key) <linus@mullvad.net>
                  '8339C7D2942EB854E3F27CE5AEE9DECFD582E984'
                  # David Lönnhager (code signing) <david.l@mullvad.net>
                  )

    нам нужны ключи:
    Linus Färnstrand
    David Lönnhager
    идем сюда и качаем их
    а потом сюда и смотрим как их установить
    если конкретно то
    gpg2 --import xxxx.asc
    чистим кеши от прошлых установок пакетов:
    sudo pacman -Scc
    ну а дальше пробуйте уже установить данный пакет
    Ответ написан
    Комментировать
  • Как извлечь названия программ из команды в bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    это вполне легко можно реализовать на самом баше в несколько строк, если нужен именно руби то можете просто взять за основу как отправную точку для своей реализации

    список всех программ расположенных в $PATH
    $ ls ${PATH//:/ } |awk 'NF && !/:$/'

    список, а точнее описание, встроенных(builtin) команд в оболочку bash можно посмотреть с помощью команды help
    $ help

    но думаю правильнее будет использовать type для определения типа команды
    $ type -t rg
    file
    $ type -t cd
    builtin

    $ type --help
    ...
    -t	output a single word which is one of `alias', `keyword',
    	`function', `builtin', `file' or `', if NAME is an alias,
    	shell reserved word, shell function, shell builtin, disk file,
    	or not found, respectively


    тип file по сути это чисто внешние программы, а builtin - внутреннии, на счет остальных могут быть нюансы, то есть при проверке через type оставляем тока те утилиты которые возвращают file.

    В итоге мы можем сгенерировать список(file.txt) чисто внешних программ из тех что лежат в $PATH:
    $ for i in $(ls ${PATH//:/ } |awk 'NF && !/:$/');do [[ $(type -t $i) == "file" ]] && echo $i;done > file.txt


    Допустим у нас есть файл test.txt с историей команд:
    sudo ls  | awk '!($NF ~ /\.[a-z]+$/)'
    for i in ~/*; do echo $(locate -c -r $i) $i; done | pv | sort -nr | bcat -t
    for f in *.zip; do unzip $f; done
    RACK_HANDLER=falcon rails s


    тогда:
    $ grep -o -w -n -f file.txt test.txt
    1:sudo
    1:awk
    2:pv
    2:sort
    3:zip
    3:unzip


    единственный недостаток это каждое совпадение пишет с новой строки, исправляем с помощью awk:
    $ grep -o -w -n -f file.txt test.txt |awk -F: '{if($1!=i){printf $2" "}else{print $2};i=$1}'
    sudo awk
    pv sort
    zip unzip


    если сравнивать с вашим шаблоном:
    sudo ls awk
    pv sort bcat
    unzip
    rails


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

    также естественно что иногда будут происходить косяки как например тут с zip при анализе строки
    for f in *.zip; do unzip $f; done
    zip тут не выступает в роли программы, но это всё же слово которое совпало с нашим списком утилит.
    bcat и rails не вывело так как данных программ не установленно.

    в общем если кратко то всё это реализовывается в два однострочника на bash:
    $ for i in $(ls ${PATH//:/ } |awk 'NF && !/:$/');do [[ $(type -t $i) == "file" ]] && echo $i;done > file.txt
    $ grep -o -w -n -f file.txt test.txt |awk -F: '{if($1!=i){printf $2" "}else{print $2};i=$1}'
    Ответ написан
    2 комментария
  • Как искать вхождения из списка фраз в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    grep -f файл1 файл2
    файл1 - "В одном файле список слов."
    файл2 - "Во втором большой список строк."

    man grep
    -f FILE, --file=FILE
    Obtain patterns from FILE, one per line. If this option is used multiple times or is combined with the -e (--regexp) option, search for all patterns given. The empty file contains zero patterns, and therefore matches nothing.
    Ответ написан
    Комментировать
  • Как получить вывод в рамке с переносом строк?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Хочу создать рамку вокруг вывода, для этого использую функцию
    msg="# $* #"

    что-то вообще не то

    как вариант размер можно контролировать через column
    MEM="Memory Usage: 277/1983MB (13.97%)"
    HDD="Disk Usage: 5/16GB (35%)"
    CPU="CPU Load: 0.00"
    VAR="$MEM\n$HDD\n$CPU"
    banner() {
    	v="$@"
    	x=$(echo -e "$v" |awk '{if(length>max)max=length}END{for(i=1;i<max+5;i++){printf "#"}}')
    	echo "$x"
    	echo -e "$v" |awk '{print "# "$0" #"}' |column -t -s: -o: |column -t -s'#' -o'#'
    	echo "$x"
    }
    banner "$VAR"

    вывод
    #####################################
    # Memory Usage: 277/1983MB (13.97%) #
    # Disk Usage  : 5/16GB (35%)        #
    # CPU Load    : 0.00                #
    #####################################


    хотя если есть возможность изначально контролировать вид получение MEM, HDD, CPU то будет проще записать данные через тот же csv а его вывод уже форматировать соответствующими программами, например csview

    MEM="Memory,277/1983MB,13.97%"
    HDD="Disk,5/16GB,35%"
    CPU="CPU,0.00,"
    echo -e "$MEM\n$HDD\n$CPU" |csview -H --style Reinforced

    вывод:
    ┏────────┬────────────┬────────┓
    │ Memory │ 277/1983MB │ 13.97% │
    │ Disk   │ 5/16GB     │ 35%    │
    │ CPU    │ 0.00       │        │
    ┗────────┴────────────┴────────┛
    Ответ написан
    3 комментария
  • Можно ли установить компьютер на застекленном балконе?

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

    Рабочая температура жесткого диска

    Температурный режим жесткого диска гораздо ниже температур процессора или видеокарты, что вполне очевидно, поскольку иначе бы диски выпускались с активным охлаждением. Нормальная температура жесткого диска находится в диапазоне 25-45 градусов по Цельсию. Если ваш диск работает при 46 градусах, это не значит, что он прямо сейчас сломается. Нет, диск будет далее работать, но любые значения выше рабочей температуры (в разумных пределах) будут потихоньку укорачивать время жизни диска и надежность его работы.

    Производители жестких дисков часто указывают приемлемые для работы диска температуры. Учтите, что приемлемые температуры – это не то же самое, что нормальные или идеальные температуры для накопителя. Приемлемая температура указывает на диапазон, в котором диск может работать в принципе. Современные накопители обладают диапазоном приемлемой температуры от 0 до 60 градусов по Цельсию. Более старые от 5 до 50 градусов.

    Вы наверняка знаете, что у процессоров и видеокарты нет слишком низкой температуры. Чем она ниже, тем эффективнее работа (грубо говоря). Именно поэтому экстремальные оверклокеры пользуются жидким азотом для охлаждения камней. Такой подход не подойдет для жестких дисков. Для современного HDD губительна не только слишком высокая, но и слишком низкая температура. Хотя 5-10 градусов по Цельсию все еще будет в пределах рабочей температуры, рекомендуемой производителем, подобная среда вредна для диска, поскольку негативно сказывается на подшипнике скольжения и смазочных материалах.

    Проще говоря, деградация диска происходит как на высоких, так и на низких температурах. Оптимальная рабочая температура жесткого диска колеблется от 25 до 45 градусов. Придерживайтесь этого показателя и ваш диск прослужит вам долго, если не пострадает от других неприятностей.
    Ответ написан
  • Есть ли почтовый сервис с API для чтения сообщений?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    зачем такие сложности, можно просто взять те же гималаи и отработать всё у себя на сервере
    регистрируете одну почту на том же gmail
    далее подключаете её через конфиг
    после получаете список письм в виде json, отбираете нужные
    himalaya --output json list
    можно даже сразу через search отобрать нужные
    далее читаете(read) отобранные письма по номерам и парсите их содержимое на наличие нужной информации
    Ответ написан
    Комментировать
  • Как распарсить несколько url из файла в формате "excel"?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    сохраняйте документ в csv, а его уже любым удобным инструментом обрабатывайте
    Ответ написан
    6 комментариев
  • Как найти строку в текстовом файле с помощью grep?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Да, поиск по json

    если у вас файл json типа такого:
    file.json
    [
    {"id": "5644561-46484-546545" , "number": "879876-5644561-546545" ,"reestr":"46878-6214-8794"},
    {"id": "6644561-46484-546545" , "number": "979876-5644561-546545" ,"reestr":"56878-6214-8794"},
    {"id": "7644561-46484-546545" , "number": "079876-5644561-546545" ,"reestr":"66878-6214-8794"}
    ]


    то там довольно всё просто делается используя консольную утилиту jq:
    $ jq -r '.[] | "\(.id): \(.reestr)"' file.json
    5644561-46484-546545: 46878-6214-8794
    6644561-46484-546545: 56878-6214-8794
    7644561-46484-546545: 66878-6214-8794


    если нужен конкретный id:
    $ jq -r '.[] | select(.id == "7644561-46484-546545") | "\(.id): \(.reestr)"' file.json
    7644561-46484-546545: 66878-6214-8794


    ну или через внешнюю переменную:
    $ jq -r --arg ID "7644561-46484-546545" '.[] | select(.id == $ID) | "\(.id): \(.reestr)"' file.json
    7644561-46484-546545: 66878-6214-8794
    Ответ написан
    Комментировать
  • Как экранировать "-" при работе утилиты jq?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    jq '."target-hosts"' deploy.json
    Ответ написан
    Комментировать
  • Как массово создать копии файлов с суффиксами?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    for i in {1..50}; do cp file1.test file1_$i.test;done
    Ответ написан
    1 комментарий
  • Как декодировать результаты ldapserash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    там походу проблема возникает из за перевода строки в конце данных которые поступают в base64
    попробуйте в awk print заменить на printf:
    ... | awk '{split ($0, a, ": "); printf a[2]}' | base64 -d`


    Как я понял это перекодирование потому что при вызове без base64 выходит данные в виде..

    ну да, используется для русских символов:
    $ echo "0JHQsNC70LHQsNGI0L7Qsg==" | base64 -d
    Балбашов
    Ответ написан
    Комментировать
  • Есть ли офисные программы для терминала?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    по возрастанию свежести
    sc, teapot, oleo, neoleo
    Ответ написан
    Комментировать
  • Как изменить раздел диска?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Установка Windows на данный диск невозможна. На выбранном диске находится таблица MBR-разделов. В системах EFI Windows можно установить только GPT-диск.

    странно что винда сама не может сменить таблицу разделов с mbr на gpt при установке (естественно что все данные с диска пропадут).
    sudo umount -R /dev/sdc
    echo -e "label:gpt\nstart=2M" | sudo sfdisk /dev/sdc

    где вместо sdc ставите имя нужного диск( смотри через lsblk)
    Ответ написан
  • Как сравнить 2 файла в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    показать только ту строку, которая отсутствует во втором файле

    comm -23 <(sort file1.txt) <(sort file2.txt)
    Ответ написан
    3 комментария
  • Как сложить числа от x до y на bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    9 класс, арифметическая прогрессия
    # b >= a
    read -p "число 1: " a
    read -p "число 2: " b
    echo $[(a+b)*(b-a+1)/2]
    Ответ написан
    2 комментария
  • Как посчитать число строк в файле по условию?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если знать точные даты начала и конца то легко:
    awk '/router.php/' example.com.log | awk '/\[16\/Nov\/2021:15:15:56 -0500\]/,/\[17\/Nov\/2021:15:15:56 -0500\]/' | wc -l


    п.с.
    если делать конкретно через date, а не тупо обрабатывать как строки что проще но нужно знать конкретный диапазон, то необходимо учитывать некоторые нюансы, ту же локаль, так как у вас или кого-то другой кто будет у себя запускать данную команду может быть отличная локаль для даты чем в самом логе
    сравните
    $ date -d now
    $ LANG=ru_RU.UTF-8 date -d now
    $ LANG=en_US.UTF-8 date -d now

    сами локали естественно должны быть доступны в системе, проверить можно утилитой localectl:
    $ localectl list-locales
    en_US.UTF-8
    ru_RU.UTF-8


    также +0300 это не просто так, и если обрабатывать скрипт находясь в другом часовом поясе то может произойти смещение по времени в ту или иную сторону
    так что если внести поправки на часовой пояс( %z) + локаль, получим:
    LANG=en_US.UTF-8 date -d 'now-24hours' +'[%d/%b/%Y:%H:%M:%S %z]'


    но проще всего, как по мне, это перевести дату в unix timestamp (количество секунд от начала эпохи юникс), это позволит нам не заморачиваться с локалью и часовым поясом, а полученное число(секунд) будет абсолютно и уже можно без проблем сравнить с другим числом(секунд) от того периода который нам нужен.

    cat example.ru.log  | awk -F'[][/:]' '/router.php/{"date +%s -d \""$2"-"$3"-"$4" "$5":"$6":"$7"\"" | getline z; print z" "$0}'

    здесь мы преобразовали к понятному date формату, а потом перевели в юникс время( +%s) и получившейся результат просто добавили к началу строки.
    результат

    1637320437 212.193.33.123 - - [19/Nov/2021:14:13:57 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637320437 212.193.33.123 - - [19/Nov/2021:14:13:57 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637320438 212.193.33.123 - - [19/Nov/2021:14:13:58 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321647 212.193.33.123 - - [19/Nov/2021:14:34:07 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321647 212.193.33.123 - - [19/Nov/2021:14:34:07 +0300] "GET /router.php HTTP/1.0" 301 447 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321648 212.193.33.123 - - [19/Nov/2021:14:34:08 +0300] "GET /router.php HTTP/1.0" 301 446 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321650 212.193.33.123 - - [19/Nov/2021:14:34:10 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321650 212.193.33.123 - - [19/Nov/2021:14:34:10 +0300] "GET /router.php HTTP/1.0" 301 451 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321651 212.193.33.123 - - [19/Nov/2021:14:34:11 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637324092 212.193.33.123 - - [19/Nov/2021:15:14:52 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637326108 212.193.33.123 - - [19/Nov/2021:15:48:28 +0300] "GET /router.php HTTP/1.0" 301 447 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637327153 212.193.33.123 - - [19/Nov/2021:16:05:53 +0300] "GET /router.php HTTP/1.0" 301 446 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"


    дату 1 день(24 часа) назад можно узнать так:
    date +%s -d 'now-1day'
    или даже так
    echo $[`date +%s` - 24*60*60]
    просто отняв от текущего количество нужных секунд

    в итоге получим:
    cat example.ru.log |awk -F'[][/:]' '/router.php/{"date +%s -d \""$2"-"$3"-"$4" "$5":"$6":"$7"\"" | getline z; print z" "$0}' | awk -v t=$[`date +%s` - 24*60*60] '$1>=t'


    теперь при желании можно легко расширить и указывать диапазон поиска от(t1) и до(t2)
    cat example.ru.log |awk -F'[][/:]' '/router.php/{"date +%s -d \""$2"-"$3"-"$4" "$5":"$6":"$7"\"" | getline z; print z" "$0}' | awk -v t1=`date +%s -d '19-Nov-2021 15:00:00 +0300'` -v t2=`date +%s -d '19-Nov-2021 16:00:00 +0300'` '$1>=t1 && $1<=t2'

    здесь ищем в диапазоне одного часа
    от 19-Nov-2021 15:00:00 +0300
    до 19-Nov-2021 16:00:00 +0300
    результат
    1637324092 212.193.33.123 - - [19/Nov/2021:15:14:52 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +www.google.com/bot.html)"
    1637326108 212.193.33.123 - - [19/Nov/2021:15:48:28 +0300] "GET /router.php HTTP/1.0" 301 447 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +www.google.com/bot.html)"
    Ответ написан
    4 комментария
  • Как создать свое приложение под linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Комментировать
  • Как переместить все файлы в другую папку кроме папки с помощью терминала?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ cd $HOME/Videos
    $ mv !(filters) filters

    если не сработает значит нужно включить расширение регулярных выражений
    $ shopt -s extglob
    включено или нет можно глянуть командой
    $ shopt
    ...
    extglob        	on
    ...
    Ответ написан
    Комментировать
  • Сервис для загрузки хранилища файлов(картинок). Какой выбрать?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Ответ написан
    Комментировать
  • Проблема в Garuda Linux Xfce?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Garuda основан на Arch Linux у которого пакетный менеджер pacman
    skypeforlinux нету в оф.репах но есть в Ауре
    для прозрачной установки пакетов с Аура установите обертку над пакманом, например тот же yay
    pacman -S --needed git base-devel
    git clone https://aur.archlinux.org/yay.git
    cd yay
    makepkg -si

    после уже устанавливаете нужные пакеты
    yay -Suy skypeforlinux-stable-bin
    или
    yay -Suy skypeforlinux-preview-bin
    Ответ написан
    1 комментарий