• Почему bash скрипт не работает?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    во первых, судя по заголовку в https://hashkeys.club/92/
    total pages = 2475880078570760549798249 (1000 keys per page)

    у вас предыдущие 8 порядков куда-то делись
    24758800785707605
    2475880078570760549798249
    возможно так и задуманно, но мне кажется что всё же это не так

    во вторых, без параллельной закачки ловить здесь нечего, поэтому:
    rm -rf urls.txt
    for i in $(seq 1 1 1000000); do echo "url=https://hashkeys.club/92/page=$i" >> urls.txt;done
    curl --remote-name-all --parallel -K urls.txt

    здесь указан миллион, поставьте свой диапазон, но лучше разбить по миллиону или 10 миллионов
    seq 1 1 1000000
    seq 1000001 1 2000000
    ...


    но надеюсь вы осознаёте какое время и объёмы вы хотите скачать ?
    у меня для 100 страниц показало:
    $ curl --remote-name-all --parallel -K urls.txt
    DL% UL%  Dled  Uled  Xfers  Live   Qd Total     Current  Left    Speed
    --  --  10.2M     0   100     0     0 --:--:--  0:00:29 --:--:--  406k

    скорость походу режет сам сервер
    то есть, даже если взять ваш урезанный объём страниц в 24758800785707605 то выйдет

    по времени:
    24758800785707605 / (100 страниц /30 секунд) = 8252933595235868 секунд
    это порядка 261698807 лет

    по объёму:
    24758800785707605 / (100 страниц /10 мегабайт) = 2475880078570760 мегабайт
    а это порядка 2 зеттабайт !!!!!
    Ответ написан
    Комментировать
  • Как разделить csv файл на несколько файлов?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    пилим на четыре части:
    split -n 4 file.csv
    в итоге получим 4 файла: xaa xab xac xad

    после переноса склеиваем файлы в один:
    cat xaa xab xac xad > file.csv
    Ответ написан
    Комментировать
  • Как установить docker-compose?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Но когда я пытаюсь установить пакет docker-compose появляеться следующая ошибка

    естественно, так как docker-compose из оф.реп и docker-desktop как отдельный пакет предоставляемый непосредственно Docker конфликтующие пакеты так как частично перекрываются. То есть, чтобы установить docker-compose из офреп нужно сначала удалить docker-desktop.

    Если я правильно понял, что когда я устанавливал Docker Desktop, то сразу и установился docker-compose.

    да, вам выше писало
    docker-compose: /usr/lib/docker/cli-plugins/docker-compose уже существует в файловой системе

    но тока не тот что предоставляет в офрепозитории Арча, а тот что идёт непосредственно в комплекте с docker-desktop.

    Но как сделать так, что бы терминал мог работать с docker-compose?

    похоже что в пакете docker-desktop забыли прописать чтобы при установке устанавливалась ссылка /usr/bin/docker-compose на /usr/lib/docker/cli-plugins/docker-compose
    придётся сделать это вручную, и можно даже подсмотреть как это сделали в PKGBUILD пакета docker-compose
    ln -sf /usr/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose

    выполните данное действие в терминале единожды
    Ответ написан
    Комментировать
  • Как смотреть видео с мелким текстом?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    видео можно скачать с ютуба с помощью yt-dlp
    а после в большинстве видеоплееров при просмотре на нужном моменте жать на паузу и масштабировать изображение, в том же mpv клавиши по умолчанию для зума
    Alt + and Alt -
        Combining Alt with the + or - keys changes video zoom.
    Alt+BACKSPACE
        Reset the pan/zoom settings.
    Ответ написан
    2 комментария
  • Как правильно настроить оповещение о подключении пользователя root?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    статья по которой вы делаете 10-тилетней давности и за это время возможно уже что-то изменилось в механике взаимодействия.
    у меня, например, не работает от рута не то что воспроизведение музыки, а и сам notify-send что пришлось изголятся по типу такого:
    sudo -u \#$(id -u ЮЗЕР) DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u ЮЗЕР)/bus notify-send 'Hello world!' 'This is an example notification.'

    где за основу взята информация с арчвики

    чтобы получить аналогичную возможность описанную в статье пришлось немного переработать взаимодействие для большей универсальности.
    /etc/ssh/sshrc
    pathfifo=/tmp/sshd_alarm/fifo; [[ -p $pathfifo ]] && echo $USER $SSH_TTY $SSH_CONNECTION > $pathfifo &

    при коннекте по ssh проверяется существует ли именованный канал (FIFO) и если да то стучит в него полезную для нас информацию о том кто, как и куда.

    pathfifo=/tmp/sshd_alarm/fifo; [[ ! -p $pathfifo ]] && mkdir -p -m o=x $(dirname $pathfifo) && mkfifo -m o=rw $pathfifo; tail -f $pathfifo | while read OUTPUT; do notify-send -u critical "Предупреждение безопасности" "$(echo "$OUTPUT"|awk '{print $1" [ "$2" ] инициировал SSH-соединение\n"$3":"$4"  "$5":"$6}')";ffplay -loglevel 24 -nodisp -autoexit /путь/к/аудиофайлу.mp3 &! ;done

    данный код можно запустить в консоли для теста, поэтому для удобства сделал его в виде однострочника, при желании его можно запихнуть в systemd сервис либо общий либо для конкретного пользователя который сработает при старте системы.
    Так вот, данный код создаст если нету FIFO файл куда будет прилетать для нас уведомления от нашего стукача, с помощью awk разбираем строку и шлем notify-send уведомление, а после в фоне запускаем указанный аудиофайл.
    Ответ написан
    Комментировать
  • Как записать значение куки в файл с помощью командной строки?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    man curl
    конкретнее смотри
    -c, --cookie-jar
    -b, --cookie
    там же и примеры
    Ответ написан
    Комментировать
  • Почему процессор не работает на максимум?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Процессор Intel® Core™ i5-1135G7
    Максимальная тактовая частота в режиме Turbo 4,20 GHz
    Настраиваемая частота TDP (в сторону увеличения) 2.40 GHz
    Настраиваемая частота TDP (в сторону уменьшения) 900 MHz

    то есть, выставляя TDP в BIOS можно регулировать частоту от 900 до 24000 MHz (у вас уже выставленно на максимум), при этом в краткосрочном режиме Turbo частота может достичь 4,20 GHz, но только для одного ядра.
    Ответ написан
  • Как к выводу из curl и awk добавить выполнение скрипта python?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    curl http://sitename | awk '{print $2}' | awk -F= '{system("script.py "$2)}'
    Ответ написан
    Комментировать
  • Как грамотно создать Linux дистрибутив?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Ответ написан
    Комментировать
  • Как вывести список пользователей с порядковым номером c сохранением сортировки по алфавиту?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk -F: '{print "- "$1}' /etc/passwd |sort |nl
    Ответ написан
    Комментировать
  • В каких редакторах текста (или Сервисах Заметок / Аутлайнерах) есть режим фильтрации строк - и продолжение работы с тем что осталось?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    вы наверное тока про windows ?
    если и про linux то тут такое можно слепить на коленке, вот к примеру однострочная функция на баше которая собирает по кирпичикам то что вам нужно
    xyz(){ cat "$1" |fzf --reverse |{ read x;echo "$x" | dte |{ read y; awk -i inplace -v x="$x" -v y="$y" '$0==x{$0=y}{print}' "$1"; } } }

    здесь довольно простая логика работы
    cat читает указанный файл и передаёт данные через трубу(|) в утилиту fzf с помощью которой фильтруем нужные нам строки, далее запоминаем наш выбор в переменную x и передаем отфильтрованную строку в консольный редактор dte которые умеет в stdin|stdout то есть принимает данные из потока | редактирует | передаёт отредактированное дальше в поток, после чего запоминаем отредактированные данные в переменную y, а под конец с помощью утилиты awk еще раз читаем наш файл и заменяем строку x на строку y.

    запускается довольно просто:
    xyz /path/to/file
    Ответ написан
  • Как передать переменную в curl?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    send=$(echo "$send" | sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g')
    curl -X POST -H 'Content-type: application/json' --data "$(jq -n --arg text "$send" '{text: $text}')" https://hooks.slack.com/services/???????????/???????????/????????????????????????

    первая строка - переприсваиваем send для обрезания невидимых символов цветовых кодов
    во второй строке с помощью jq формируем валидный json для отправки данный в ключе --data
    Ответ написан
    Комментировать
  • Почему systemd-journald ест много оперативки?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    возможно она у вас там мешки ворочает
    картинка
    62962cc3963ff385227468.png

    если журнал за предыдущие рабочии сессии для вас не критичен то:
    /etc/systemd/journald.conf
    Storage=volatile
    RuntimeMaxUse=20M
    Ответ написан
    Комментировать
  • Как удалить лишние файлы в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    создадим тестовую площадку:
    mkdir -p /tmp/TEST && touch "/tmp/TEST/backup-name-back-"{01..05}"-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-"{10..13}-{100..104}".bak" && tree /tmp/TEST

    вывод tree
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ...
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 100 files

    получим 100 файлов бэкапа

    теперь несколько однострочников
    прописываем полный путь к папке где хранятся бэкапы и заодно закинем список для сравнения в переменную Т
    DIR="/tmp/TEST"; T=$(ls $DIR/* |awk -F'[-.]' '{print $4" "$(NF-2)$(NF-1)";"$0}')

    показать что останется после удаления
    echo "$T" |sort -nr |sort -un |awk -F';' '{print $2}'

    показать что удалиться
    comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}'

    !!! удаляем !!!
    rm $(comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}')

    по итогу получим:
    $ tree /tmp/TEST
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-03-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-04-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 5 files
    Ответ написан
    1 комментарий
  • Почему не берутся пробелы в bash переменной?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    решение через IFS:
    x="$IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 | sort -r );
    do
    IFS="$x"

    п.с.
    первоначальный(неверный) вариант
    кавычки, в одном месте поменяй на одинарные а в другом добавь двойные
    for WhatFile in "$(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r )";
    Ответ написан
    23 комментария
  • Можно ли менять файлы etc в filezilla?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    можно, для этого нужно подключится под рутом (root)

    === сервер ubuntu 20.04 ===
    должен быть установлен и запущен sshd сервер
    а также в файле /etc/ssh/sshd_config
    найти и установить значение
    PermitRootLogin yes
    после чего перезапустить sshd.service
    sudo systemctl restart sshd.service

    === filezilla ===
    протокол: SFTP
    Пользователь: root
    Ответ написан
  • Существует ли, утилита для Linux с выводом программ для их запуска?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    смотри rofi и подобные
    Ответ написан
    Комментировать
  • Как получить путь до рабочего стола пользователя Ubuntu?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    for user in /home/* #поиск домашнего каталога

    а с чего вы взяли что домашний каталог пользователя обязательно должен находится в /home ?
    $ man useradd
    ...
    -b, --base-dir BASE_DIR
    The default base directory for the system if -d HOME_DIR is not specified. BASE_DIR is concatenated with the account name to define the home directory. If the -m option is not used, BASE_DIR must exist.
    
    If this option is not specified, useradd will use the base directory specified by the HOME variable in /etc/default/useradd, or /home by default.


    то есть, при сотворении пользователя его домашний каталог находится в домашнем БАЗОВОМ каталоге для пользователей который указывается либо через переменную --base-dir либо берётся из /etc/default/useradd (где он по умолчанию /home)

    Как получить путь до рабочего стола пользователя Ubuntu?

    если нужен путь до рабочего стола текущего пользователя то проще некуда:
    systemd-path user-desktop
    если для другого(не тока текущего) пользователя то можно так:
    su - YOUR_USER -c "systemd-path user-desktop"
    или лучше так:
    runuser -l YOUR_USER -c "systemd-path user-desktop"


    если нужно узнать имена всех несистемных пользователей, то
    $ man useradd
    ...
    UID_MAX (number), UID_MIN (number)
    Range of user IDs used for the creation of regular users by useradd or newusers.
    
    The default value for UID_MIN (resp. UID_MAX) is 1000 (resp. 60000).

    но для верности можно глянуть в /etc/login.defs и оттуда узнать UID_MIN и UID_MAX
    eval $(awk '/^UID_/{print $1"="$2}' /etc/login.defs)

    ну а затем отфильтровать файл /etc/passwd по этим параметрам
    awk -v MIN=$UID_MIN -v MAX=$UID_MAX -F: '$3>MIN && $3<MAX {print $1}' /etc/passwd

    в итоге получим список несистемных пользователей на данной системе

    Есть sh скрипт который должен создать 2 desktop файла на рабочем столе и разрешить их выполнение, попробовал этот код:

    если нужно для текущего пользователя то проще простого:
    DESKTOP=$(systemd-path user-desktop)
    cp sources/update.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/update.desktop
    cp sources/shutdown.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/shutdown.desktop

    если для всех пользователей то просто закинуть нужные действия в функцию и запускать её от указанных пользователей в цикле
    Ответ написан
    Комментировать
  • Как объединить строки в bash скрипте?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk '{printf $0}' data.txt
    Ответ написан
  • Как на Убунте добавить в файл host через bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    echo "127.0.0.1 site.com" | sudo tee -a /etc/hosts

    А если надо удалить строчку?

    если она последняя то можно так:
    sudo awk -i inplace 'NR>1{print i}{i=$0}' /etc/hosts
    Ответ написан