LINUX.ORG.RU

Сообщения papin-aziat

 

Хочу говорить про Bash

Форум — General

Для себя уже навалял кучку полезных скриптиков и походу изучения bash периодически их перечитываю, и что-то там допиливаю, но понял, что надо что-то посложнее попробовать и этакое поближе к программированию.

Решил попробовать написать программку, которая удаляет дубликаты строк из .bash_history (там более 7000 строк у меня). Мне это показалось достойной задачкой для начинающего башиста, хотя и (может быть) довольно бесполезной. Кстати, есть такая программа shell-history-cleaner (кажется на расте написана, давно себе собрал, работает, но видимо заброшена автором), я пользуюсь, но попробовать свои силы надо было.

В результате мне удалось сделать задуманное, но хочется поговорить и о «неудачных» вариантах, которые может быть были бы более удачными, если бы я больше знал о bash и linux вообще, так что категорически приветствуется критика и подсказки более правильных решений или каких-нибудь хитростей командной строки.

Так как-то сложилось, что я упорно откладывал изучение массивов на потом, и когда наконец более-менее разобрался с индексированным массивом, то сразу приступил к делу, чтобы заодно закрепить прочитанное в книжках, поэтому первый «неудачный» вариант будет об этом.

Программа рабочая, делает дело, но долго. Мой файл перемалывает за минуту с небольшим, при этом нагружая одно виртуальное ядро процессора на 100%. Зная лоровские нарративы об ущербности bash как языка программирования, я подумал, что вот и столкнулся с подобной ущербностью, поэтому просто искал возможность хоть как-то оптимизировать процесс.

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

file=$1
mapfile -t list < <(grep -v '^$' $file)
while ((${#list[*]})); do
    line=${list[-1]}
    unset list[-1\]
    for i in ${!list[*]}; do
        [[ $line == "${list[i]}" ]] &&
            unset list[i\]
    done
    final+=("$line")
done
printf '%s\n' "${final[@]}" | tac > $file

Для таких же любителей как я поясню идею кода. На его краткость отлично повлиял тот факт, что в истории командной строки надо сохранять последние уникальные строки, то есть работать надо с конца файла, а у индексированных массивов как раз есть стабильная ссылка на последний индекс: array[-1]. То есть не надо ничего переворачивать.

Как я понимаю, самое тугое место в скрипте — сравнение строк, и что-то более быстрых вариантов походу нет. Далее надо думать о многопоточности, но я пока до этого не дозрел.

Поскольку на данном этапе я застрял и вроде бы ясно, что тема с массивами как-то всё усложняет, то решил написать скриптик в стиле unix-way, и искренне полагал, что это будет правильным решением задачки, ведь утилиты все написаны суровыми дядьками на Си, и там всё без дураков — быстро и надёжно. Пришла идея отбросить всю эту возню с поиском и удалением, а просто взять всё — и отфильтровать.

file=$1
list=$(tac $file | grep -v '^$')
while [[ $list ]]; do
    read -r line <<< $list
    list=$(grep -Fxv "$line" <<< $list)
    echo "$line"
done | tac > $file

Чтобы уважаемый лорчанин не хельпал ключи -F -x, напомню: F — читает regex буквально, а x — помещает выражение между ^$, иначе пришлось бы использовать ключ -P (perlre) и выражение выглядело бы как говно: "^\Q$line\E$", а работало бы ещё медленней, возможно, но это не точно. (кстати, я был весьма разочарован узнать, что с sed такое вообще не провернуть — никак не заставить подстановку читать буквально).

Итак, на короткой дистанции (разумеется, у меня был короткий вариант файла для тестов) этот скрипт почти в два раза обогнал предыдущий, но — что было для меня полнейшим разочарованием! — он совершенно заткнулся даже на средней дистанции (нагружая процессор на четверть, но размазано по потокам), то есть я его тупо прервал на какой-то там 10-ой минуте, так что о проверке на полном файле речи уже не шло. Как это понимать — не знаю, поясните. 1000 строк он смолол где-то за секунду с небольшим, а 3000 — уже застрял.

Ладно, пока не было новых идей, прочитал главу про ассоциативные массивы и сразу почуял, что это походу то, что мне надо, но я не ожидал, что настолько! Свойство хеша не дублировать индексы как будто специально создано для решения этой задачки. Быстро стало понятно, что надо просто переложить строки из обыкновенного массива в индексы хеша, а в значения хеша — номера индексов строк из обыкновенного массива.

file=$1
mapfile -t list < <(grep -v '^$' $file)
declare -A hash
for i in ${!list[*]}; do
    hash[${list[i]}]=$i
done
for i in "${!hash[@]}"; do
    final[${hash[$i]}]="$i"
done
printf '%s\n' "${final[@]}" > $file

Это было круто! Нет смысла даже говорить о времени выполнения этой программы, она работает почти мгновенно, менее двух десятых секунды.

Получается на bash таки можно что-то программировать и оно может работать быстро.


UPD

Наконец подсказали, что во втором скрипте у меня ошибка: read -r очищает строку от пробельных символов по краям, поэтому grep её не находит и получается бесконечный цикл. Спасибо @mky: Хочу говорить про Bash (комментарий)
Теперь этот скрипт переваривает тот же файл за 15-16 секунд!

file=$1
list=$(tac $file | grep -v '^$')
while [[ $list ]]; do
    IFS=$'\n' read -r line <<< $list
    list=$(grep -Fxve "$line" <<< $list)
    echo "$line"
done | tac > $file

UPD2

Спасибо анону, подкинул идею отфильтровать хешем в один проход: Хочу говорить про Bash (комментарий)

file=$1
mapfile -t list < <(tac $file | grep -v '^$')
declare -A hash
for i in "${list[@]}"; do
    [[ ${hash[$i]} ]] && continue
    hash[$i]=added
    final+=("$i")
done
printf '%s\n' "${final[@]}" | tac > $file

UPD3

Продолжаю благодарить анона, что замотивировал таки раскурить sort. Итак, почти самый шустрый вариант:

file=$1
list=$(< $file \
    grep -vn '^$' |
    tac |
    sort -t: -k2 -u |
    sort -t: -k1,1n |
    cut -d: -f2-)
echo "$list" > $file

На моём компе меньше трёх сотых секунды!


UPD4

Дошли руки до AWK и это походу победитель на скорость в стиле unix-way (анон давал такой рецепт в треде).

file=$1
list=$(tac $file |
    grep -v '^$' |
    awk '!added[$0]++')
tac <<< $list > $file

На моём компе — девять тысячных секунды!

 

papin-aziat
()

Килограмм Солнца

Форум — Talks

Семихатов тут выдал, что типа килограмм Солнца (и руками так показал как будто килограмм картошки) даёт меньше тепла, чем килограмм преющих листьев в лесу, а такое горячее оно потому, что масса у него большая.

Объясните дураку, это что ж получается, если навалить листьев как следует, то они будут светить на всю вселенную?

 

papin-aziat
()

Firefox похоже деградирует

Форум — Desktop

Для тестов взял всратый сайт market.yandex.ru, чтоб сразу была понятна разница.

Итак, поскольку меня интересовала плавность скроллинга, то я тупо крутил страничку вниз без остановки.

Google-chrome отлично справляется и грузит процессор условно на 100% (один из потоков), ну и там плюс-минус, фигня, зато стабильно, комфортно.

Firefox ESR-115 — то же самое, примерно так же грузит проц и почти так же хорошо справляется со всем остальным.

Firefox ESR-128 местами плывёт фпс, почему-то не успевает прогружать ленту и затыкается, грузит проц на 200%, комп начинает пыхтеть.

Версии фокса настроены одинаково, один и тот же user.js.

Может быть кто-то знает, что можно отключить или включить в новом ESR, чтобы он стал как раньше, очень надо!

Последнюю версию фокса пробовал. Улучшений не заметил. Что-то в этот раз сломали капитально.

 , зоркий-глаз

papin-aziat
()

Гномеры допрыгались...

Форум — Talks

Ну чё, посоны, допрыгались гномеры, довыёживались, почуяли свой монополизьм, и вот — получите!

Начиная с Федоры 42 спин с кедами перестаёт быть левым спином и становится в один ряд с гномом, то есть теперь это будет ещё один официальный Fedora Workstation.

А я говорил, не надо делать из гнома видеоигру, надо стабилизироваться, упрощаться, это ж для серьёзных дядей в конце концов, им в бирюльки играть некогда.

Короче, помяните моё слово, неспроста это. Значит где-то в высоких кабинетах Шапки кого-то они уже начинают таки доставать, и вот пожалуйста, первый пошёл…

Пруф: https://pagure.io/Fedora-Council/tickets/issue/504

 , , ,

papin-aziat
()

Старый кот опять забанился

Форум — Talks

В чём драма? Я только это нашёл: https://www.linux.org.ru/forum/linux-org-ru/17779756?lastmod=17779786

 

papin-aziat
()

Ну и кто тут говорил, что AlmaLinux не нужен?

Форум — Talks

Некто Генри Ян, сотрудник Майкрософт пишет:

AlmaLinux доступен в Azure Marketplace уже более трёх лет, и мы рады объявить, что теперь он является официально поддерживаемым дистрибутивом Linux в Azure. <...> AlmaLinux используется широким кругом клиентов в Azure и становится все более популярным выбором для пользователей CentOS Linux, которые ищут альтернативы после завершения его поддержки. Одобрение AlmaLinux в Azure является свидетельством его надежности, безопасности и производительности.

пруф: https://techcommunity.microsoft.com/t5/linux-and-open-source-blog/announcing-availability-of-almalinux-as-an-endorsed-linux/ba-p/4282201

Вот так-то, там дяди солидные, они с кем попало делов не имеют!

 

papin-aziat
()

Ну вот, до́жили...

Форум — Talks

Сижу, читаю новость про Kitten в блоге AlmaLinux, а там пишут:

Our upstream decided to remove packaged versions of Firefox and Thunderbird RPM packages from CentOS Stream 10 and RHEL10 in favor of using Flatpak versions of them.

Фига, в десятой шапке получается не будет фокса в репах? 😱

 , , , ,

papin-aziat
()

Наблюдаю странный паттерн

Форум — Talks

Всё чаще оказываюсь в ситуации, когда пишу коммент на ЛОРе и, нажимая кнопу «отправить», вижу красное сообщение, что тема удалена.

Это что-то объективное или с этим к психоаналитику?

 

papin-aziat
()

Centos Stream: сборки с разными DE

Форум — Desktop

На опеннете выложили новость про некую сборку MIN якобы от разрабов стрима, но это от SIGs. Ладно, неважно.

Короче, оказывается есть целая куча лайв-сборок с разными DE на центоси, вот такой набор:

  • CINNAMON
  • GNOME
  • KDE
  • MATE
  • XFCE
  • MAX (весь набор)
  • MIN (без гуёв совсем)

Все лайв-сборки можно установить, даже которая MIN (там есть утилита install_to_hard_drive).

Обновляются каждые 3 месяца.

Брать здесь: https://mirror.stream.centos.org/SIGs/9-stream/altimages/images/live/

Кто-нибудь пробовал?

 , , , ,

papin-aziat
()

Плеер для lossless (.cue)

Форум — Desktop

Иногда надо найти хорошее исполнение конкретного опуса и я качаю всякие flac+cue и ape+cue.

Точно знаю, что открывать, разбивать на треки и играть .cue умеет Deadbeef.

Есть ещё какие-нибудь варианты, чтобы заглянуть в монолитный lossless-файл и послушать что-то там по-отдельности (другие плееры, вообще другие способы).

 , ,

papin-aziat
()

HeliumOS — скалу закатали в бетон. Встречайте!

Новости — Red Hat
HeliumOS — скалу закатали в бетон. Встречайте!
Группа Red Hat

Коротенько: атомарный дистрибутив на базе AlmaLinux (доступный без ограничений Линукс-дистрибутив класса Enterprise).


Кое-что из FAQ

Что такое HeliumOS?

Это атомарная операционная система для настольных компьютеров, созданная на базе AlmaLinux, которая наследует его стабильность, безопасность и совместимость с экосистемой Enterprise Linux.

Что предлагает HeliumOS?

GNOME, магазин пакетов Flatpak и 10 лет поддержки, которых хватит на весь срок службы вашего компьютера.

Почему называется «атомарный»?

Обновления системы распространяются через OCI-совместимые образы BootC. В результате, даже если отключить электроэнергию во время обновления, это никак не повлияет на работоспособность системы.

Сравнение с другими дистрибутивами

Ubuntu

В отличие от Ubuntu, HeliumOS не использует пакеты snap и принадлежит к семейству дистрибутивов, которые основаны на Red Hat Enterprise Linux.

Fedora

Fedora и проект Universal Blue предлагают атомарные операционные системы на базе Fedora, однако жизненный цикл Fedora составляет 13 месяцев, тогда как HeliumOS поддерживается 10 лет.

AlmaLinux

HeliumOS напрямую основан на AlmaLinux и использует многие его компоненты, но в отличие от AlmaLinux, HeliumOS ориентирован на предоставление атомарной операционной системы для настольного компьютера, которая подходит для всех пользователей.


Теперь кое-что из истории создания дистрибутива со слов своего создателя, опубликованных в блоге Альмы:

Моя цель — создать операционную систему для настольных компьютеров на базе Linux, которая будет удобной в использовании, стабильной и надежной.

Сначала я использовал для этой цели Debian, однако возникли некоторые проблемы:

  • Debian поддерживается 3-5 лет, и хотя он весьма стабилен относительно других дистрибутивов, я хотел чего-то более стабильного.
  • Непредвиденное прерывание во время традиционного обновления пакетов в Linux может привести к тому, что система не сможет загрузиться или будет работать некорректно.

Пару месяцев назад я узнал об Image mode for RHEL — это новый метод развертывания RHEL, который использует образы OCI для обновлений. Переход на Enterprise Linux и использование bootc (технология, лежащая в основе Image mode for RHEL) решили бы обе проблемы, которые я обнаружил в Debian. В общем, после комплекса экспериментов мы анонсировали альфа-версию HeliumOS на базе CentOS Stream.

Несмотря на решение нескольких проблем, переход на CentOS Stream привёл к новым:

  • CentOS Stream является роллингом, что может создавать сложности для поддержки программ или драйверов, которым требуется, например, конкретная версия ядра.
  • CentOS Stream поддерживается только 5 лет, что может быть приемлемо в некоторых случаях, но ограничивает использование HeliumOS в ситуациях, где требуется более длительная поддержка.

Стало ясно, что переход на дистрибутив Enterprise Linux с фиксированными обновлениями, такой как AlmaLinux, решил бы обе проблемы.

Благодаря совместной работе в чатах с ребятами из AlmaLinux и Fedora, мы настроили рабочие процессы для создания образов AlmaLinux bootc, так что обновления и новые выпуски HeliumOS будут поставляться через образы bootc, полученные из AlmaLinux.


Светлый лик главного разработчика: Isaac Beverly

>>> Перейти на сайт HeliumOS

 , bootc, heliumos

papin-aziat
()

EL8 — для десктопа готов!

Галерея — Скриншоты

Недавно случилось последнее крупное обновление Шапки на версию 8.10. Это последний релиз данной ветки дистрибутива.

Так как у клонов нет RHSM, мне приходилось кулибить с repo-файлами, чтобы иметь возможность дёргать upgrade, когда уже вышел новый релиз, а обновляться некогда или лень. Теперь хорошо, закончились эти бесконечные обновления, — для десктопа готов!

Стейбл такого уровня позволяет радикально кастомизировать систему (что я и делаю), поэтому обновления могут причинять боль. Так что пришлось выделить день и погрузиться в чарующий мир конпеляния и конфигуряния, как вы, программисты, любите, и как мы, простолюдины, как-то не особо.

Тут вроде бы надо что-то рассказать про этот чудесный дистрибутив (в данном случае AlmaLinux), но даже не знаю с какой стороны начать, поэтому просто немного покритикую гном и всё.

В общем юзаю стандартную концепцию гнома 3, но, чтобы довести её до своего удобства, пришлось потрудиться, и так как не на всякую хотелку есть готовое расширение, надо лезть в js-файлы и css шелла. В результате подобные выкрутасы усложняют обновления (хорошо, что в этот раз адвайту не обновляли…).

На скриншоте обычная рабочая обстановка, которая может неделями (а иногда месяцами) не меняться в общем. Иногда на меня нападает красноглазие, тогда всё закрывается и столы заняты окнами терминала, наутилуса, редактора (kwrite) и браузера, но это состояние меня посещает всё реже. Разумеется, всякой обычной компьютерной фигней типа похода по магазинам, торренов, киношек, ютубов, гугления и т.п. тоже страдаю, но на скриншот эпизодическое решил не тащить.

За последнее время как-то совсем скатился в мышевозие, так что интерес к поисковой строке шелла давно потерял, хоткеи тоже практически не использую, поэтому гном (как и прочие программы) максимально настроен под мышь. Пустая половина топбара по сути одна большая кнопка Activities, где ЛКМ — овервью, а ПКМ — иконки программ (grid). ПКМ по миниатюре окна в овервью — закрывает окно, контекстное меню на иконке в dash или grid имеет пункт, который закрывает программу. В остальном всё как обычно в гноме 3, только столы статичные, убрана всякая визуальная мишура, подкручены анимации и всякое по мелочи раздвинуто, растянуто, увеличено и т.п., то есть выглядит всё максимально просто, ясно и работает плавно. Вот так вкратце и весь стиль работы в гуе, где мышь — этакий универсальный манипулятор, который позволяет одной рукой управлять окнами и программами с минимумом движений, а клавиатура используется только по делу.

Да, чё прикольно-то. Почти весь софт кутейный. Из востребованных гномовских только наутилус, терминал и системный монитор (настроечные и прочие утилиты можно опустить), а из чисто гткшных — Audacity и GIMP. ФФ вроде и не гткшный. У либреофиса тоже что-то своё. Остальное кути:

Musescore
Anki
Kwrite
Okular
Telegram
MEGAsync
Goldendict
kcolorchooser
Flameshot
SMPlayer
qBittorrent
SoundKonverter
Avidemux
qpdfview
Flacon
kid3
ksnip

Кстати, выглядят и работают отлично.

Если кто не понял, на скриншоте овервью — самая чёткая штука в гном 3, рабочий стол в гноме выглядит собственно никак, поэтому не вижу смыла выкладывать его на картинку. По центру миниатюры окон (на скрине только терминал), здесь кликом мыши переключаешься между окнами. Слева — Dash, это своего роде трей, где видны запущенные программы и соответсвенно переключаешься между ними здесь. Справа — рабочие столы. Окна можно кидать как из центра на любой рабочий стол, так и наоборот, и между столами окна можно перекидывать на панели слева. Grid (который ПКМ по активизу). Вот такие великие технологии были утеряны гномерами, когда они пошли на поводу у любителей видеоигр.

 , ,

papin-aziat
()

Знатокам телефонов

Форум — Talks

Заказали телефон. Из магазина звонят, бла-бла-бла про доставку и предлагают проверку на скрытые дефекты за 500 рублей, мол тогда 99.999% телефон будет без проблем. Мол там какое-то крутое оборудование и они 40 минут тестируют на всякие проблемы телефон. Я отказался, так как я должен был бы по сути поверить на слово, что они это делали… Зря отказался? Нужны такие проверки? Мне попался тупой менеджер, который не смог объяснить нормально?

 

papin-aziat
()

Телефон и двухэтапная аутентификация в гугл.

Форум — Talks

Надо было сбросить телефон к заводским настройкам (долго объяснять). Перед этим действием всё, что можно было, забекаплено в гугл. На «пустом» телефоне пытаешься авторизоваться в гугл, а там двухэтапная аутентификация, занавес.

Хорошо, под рукой был комп, где можно было от того пользователя зайти в профиль гугла и выключить эту дрянь, и что меня поразило, что это можно было выключить без этой самой аутентификации (Слава Аллаху).

Может есть ещё способы это обойти? Потому что я теперь и себе эту фигню выключил пока нафиг. Чем грозит? Может тупо сделать пароль подлиннее?

 

papin-aziat
()

Ханна Монтана

Форум — Talks

Кто-нибудь уже поинтересовался творчеством?

 

papin-aziat
()

Объясните, что это такое?

Форум — Desktop

Вчера внезапно перестал нормально работать сайт musescore.com — какая-то капча (cloudflare или как-то так) вылезает, толком ничего не работает, если разлогинился, то уже не залогиниться и тд.

Из самой программы (MuseScore 3.6) тоже доступа нет, но помогло почистить кэш, заново залогиниться и заработало.

А вот из браузера никак (Firefox ESR [115]). Из гугл-хрома — норм, из ФФ-125 — тоже.

В результате поменял user agent в ESR на Linux Firefox 124 и — заработало всё как надо. Это что за хреновина, там здоровые люди? Есть какой-то высший смысл в этом всём?

 

papin-aziat
()

Flathub: Failed to parse...

Форум — Desktop

Давно не использовал flatpak, но вот решил одну прогу потестить…

Делаю

dnf install -y flatpak
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

На всякий случай перезагружаюсь (помню, что надо было зачем-то)

И…

$ flatpak search denemo
F: Failed to parse /var/lib/flatpak/appstream/flathub/x86_64/active/appstream.xml.gz file: Error on line 4065 char 29: <p> already set '
      Organic Maps is a free Android & iOS offline maps app for travelers,
      tourists, hikers, drivers and cyclists.
      It uses crowd-sourced OpenStreetMap data and is developed with love by
      ' and tried to replace with ' ('
No matches found

Иду в гуголь.

Проблему пообсуждали почти год назад: https://github.com/flatpak/flatpak/issues/5434

Типа у кого старые версии флатпака, тот в пролёте, а это — шапка 8 (про 9 не знаю), убунта (какая-то LTS, у них так много цифер…), демьян 11, и это только то, что мне на глаза попалось при чтении.

Однако влияет только на поиск, сами программы устанавливаются.

Можно как-то починить?

У них там всё в порядке с душевным здоровьем?

 ,

papin-aziat
()

Прокрутка в браузерах

Форум — Desktop

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

У всех так? Как починить (хотя бы в фоксе)?

 , ,

papin-aziat
()

Поменять местами клавиши в виртуальной консоли

Форум — Desktop

В гноме с помощью gnome-tweaks я переставил клавиши CTRL на место клавиш ALT, и теперь ко́нтролы рядом с пробелом (что очень удобно), а а́льты рассовал как получилось – левую рядом с ко́нтролом, а правую в самый конец справа.

Получилось вот так:

[win][ALT][CTRL][SPACE][CTRL][fn][menu][ALT]

И ещё поменял местами CAPS_LOCK и ESC (что тоже крайне удобно оказалось).

Иногда бывает надо зайти в виртуальную консоль (это бывает крайне редко и в этом проблема) и починить иксы или гном, или что-то ещё, что не даёт загрузиться в DE, и наступает борьба с привычкой к вышеназванным расположениям клавиш , и если в баше ещё терпимо, то в виме становится совсем грустно…

Есть ли возможность поменять местами вышеназванные клавиши? Какие вообще есть варианты?

Предлагайте также всякие альтернативы и рассказывайте о своих фишках на эту тему, – это всё интересно!

 

papin-aziat
()

Объясните как настроить бекапы Анки

Форум — Desktop

Гуглил, читал, но просветление как-то не наступило.

Закладка с настройками бекапов выглядит так: https://i.ibb.co/ySNR1DJ/2024-02-20-21-41.png

Пишут что

Anki periodically backs up your collection. After backups are more than 2 days old, Anki will start removing some of them to free up disk space.

Далее можно указать

  • Minutes between automatic backups
  • Daily backups to keep
  • Weekly backups to keep
  • Monthly backups to keep

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

С минутами понятно – поставил количество минут в сутках, а дальше чтение мануалов и тредов на эту тему только запутывает.

 ,

papin-aziat
()

RSS подписка на новые темы