• Как удалить все пакеты, в которых содержится одно и тоже имя?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    посмотреть список установленный пакетов название которых соответствует условию:
    pacman -Qqs | grep gh

    удалить список пакетов:
    pacman -R $(pacman -Qqs | grep gh)
    но в процессе удаления может выдать сообщение что в системе есть зависимости, когда от удаляемого пакета зависит другой пакет, то есть может нарушиться их работа.
    Поэтому для удаления выбранных пакетов нужно
    - либо добавить к ним также и удаление зависимых пакетов:
    pacman -Rsc $(pacman -Qqs | grep gh)
    - либо проигнорировать зависимости и удалить тока указанные пакеты:
    pacman -Rdd $(pacman -Qqs | grep gh)

    подробнее смотри archwiki про пакман
    Ответ написан
    Комментировать
  • Какой программой вы пользуетесь для замены несколькими регулярными выражениями?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    #!/usr/bin/env bash
    
    #set -o xtrace
    set -o nounset
    set -o errexit
    set -o pipefail
    
    URL="$1"
    DIR="$PWD"
    
    FILENAME=$(yt-dlp --print filename -o "%(title)s" "$URL")
    
    FILE_JSON="$DIR/$FILENAME".json
    FILE_COMMENTS="$DIR/$(date +"%y%m%d") $FILENAME".txt
    
    yt-dlp --write-comments --dump-single-json "$URL" > "$FILE_JSON"
    
    echo -e "$URL\n" > "$FILE_COMMENTS"
    cat  "$FILE_JSON" | jq -r '.title' >> "$FILE_COMMENTS"
    echo "--------------------------------------------------" >> "$FILE_COMMENTS"
    cat  "$FILE_JSON" | jq -r '"Просмотров: \(.view_count)   Лайков: \(.like_count)   Комментариев: \(.comment_count)"' >> "$FILE_COMMENTS"
    echo "--------------------------------------------------" >> "$FILE_COMMENTS"
    cat  "$FILE_JSON" | jq -r '.comments[] | if .parent == "root" then "\n+\(.like_count) \(.author) >>> \(.text)" else "\t+\(.like_count) \(.author) >>> \(.text)" end' >> "$FILE_COMMENTS"
    Ответ написан
    2 комментария
  • Безопасен ли линукс для хранения файлов?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Какая вероятность того что линукс после обновления или после перезагрузки может не запустится

    процент вероятности вам никто не назовёт так как это зависит слишком от многих факторов. Вы написали "или после перезагрузки", сама по себе перезагрузка не страшна, а вот перезагрузка после глобального обновления системы порой может преподнести неожиданный результат.
    Обновление систем можно грубо поделить на два типа - релиз и плавающий релиз(rolling release).
    1) К релизным системам относится к примеру дебиан и убунта, да и винда по сути тоже. Релизный принцип это когда основные компоненты системы изменяются только от релиза к релизу, в то время как её периферия(второстепенные компоненты) могут меняться на протяжении самого релиза. Проблемы с системой здесь в основном могут возникнуть при обновлении до нового релиза, которое происходит раз в несколько лет, поэтому многие из неискушенных просто накатывают её по новой.
    2) К системам с плавающим(ролинг) релизом относится, к примеру, выбранный тобой manjaro который основан на arch. Здесь нету релизов в обычном понимании так как все компоненты системы обновляться по мере их доступности, под релизом здесь понимается срез текущей системы для формирования установочного образа. Проблемы здесь могут возникать чаще чем в первом варианте так как могут обновиться компоненты непосредственно влияющие на работоспособность системы, что порой(редко но метко) может привести к невозможности загрузки системы, обычно это либо загрузчик, либо ядро, либо драйвер на видеокарту, ну может что-то еще системное, но это уже редкость. Способы исправления довольно обкатаны особенно если под рукой есть спасательная флешка. Некоторые, в том или ином виде, делают бекапы системы перед обновлениями для подстраховки.

    Есть еще вариант с Nix и Guix дистрибутивами linux, которые в некотором смысле позволяют программировать свою систему, отказаться от костылей в виде бекапов, а также являясь системой с ролинг релизом иметь разные версии программ что является болью для других систем подобного типа, но это довольно сложные штуки даже для линуксоидов.

    но боюсь за свои файлы

    обновление системы никак не влияет на сохранность ваших личных файлов(не путать с системными файлами), можете конечно временно потерять доступ к ним если система вдруг не загрузилась, но для этого не всякий случай всегда можно держать спасательную флешку с live системой linux для восстановления основной системы ну или даже просто подмонтировать нужный раздел с данными.
    Потерять данные конечно можно, но в основном это происходит если повреждается файловая система, ну или там случайно затёрлась таблица разделов, всё это довольно редкий случай если исключить проблему с железом.
    Ответ написан
    Комментировать
  • Как в линуксе сравнить два дерева директорий, но без проверки содержимого файлов, только проверить совпадение размеров и дат?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    diff <(tree -sixfD --noreport Dir1) <(tree -sixfD --noreport Dir2)
    Ответ написан
    Комментировать
  • Как при помощи awk или sed вытащить первую и последнюю строку вывода?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    первая и последняя строка с помощью awk
    ... |awk 'NR==1;END{print}'

    а чтобы два раза не вставать то можно сразу с нужными столбцами:
    awk '{x=$2" "$3" "$6" "$7" "$11}NR==1{print x}END{print x}' FILE
    Ответ написан
    Комментировать
  • Как добавить параметр OK/NOTOK в конце вывода?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Есть команда показывающая кол-во подключенных ЮСБ к серверу и их наименование

    у вас лишь немного модифицированная команда lsusb, а она выводит
    lsusb is a utility for displaying information about USB buses in the system and the devices connected to them.

    то есть помимо самих подключенных usb-устройств выводит и шины на которых они висят.
    Не знаю по какому принципу вы будете определять где ставить OK а где NO в выводе lsusb, но если вам нужно в цвете плюс вставить внешний параметр в awk то будет выглядеть примерно так:
    RED='\033[0;31m'
    GREEN='\033[0;32m'
    NORMAL='\033[0m'
    
    OK="${GREEN}OK${NORMAL}"
    NO="${RED}NO${NORMAL}"
    
    lsusb |awk -v ok="$OK" -v no="$NO" '{print $3" "$4" - "$7" "$8" "$9" "no}'
    Ответ написан
    Комментировать
  • Как сгруппировать каталоги и подсчитать их размер?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    примерно так
    $ du -sb * |awk '{cmd="stat -c %z "$2" |cut -d\" \" -f1";cmd |getline z;close(cmd);print z" "$1}' |awk '{sum[$1]+=$2}END{for(i in sum)print i,sum[i]}' |sort |numfmt --to=iec --field 2 --padding=10
    2022-01-21        13M
    2022-11-02        17G
    2022-12-13       4,7G
    2023-01-15       388M
    2023-03-06       1,6G
    2023-04-01       1,6G
    2023-04-03       2,2G
    2023-04-04        13G
    2023-04-11       7,6G
    Ответ написан
    1 комментарий
  • Как увеличить место под раздел linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если кратко то в вашем случае будет примерно так:
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
    echo ", +" | sudo sfdisk --no-reread -N 4 /dev/sda
    echo ", +" | sudo sfdisk --no-reread -N 5 /dev/sda
    sudo partx --update /dev/sda
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda
    sudo resize2fs -f /dev/sda5
    lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/sda

    с помощью lsblk контролируем состояния
    первый sfdisk максимально раздвигает расширенный раздел, а второй sfdisk раздвигает уже сам раздел /dev/sda5
    sfdisk работает тока с таблицей разделов
    partx обновляет для ядра информацию по разделам на указанном диске
    ну и под конец с помощью resize2fs расширяем файловую систему до значений в таблице разделов.

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

    $ truncate -s 1G test.img
    $ echo -e "label:dos\nsize=100M,bootable,type=L\nsize=200M,type=L\nsize=300M,type=L\ntype=Ex\nsize=+" | sfdisk test.img
    Проверяется, чтобы сейчас никто не использовал этот диск... ОК
    Диск test.img: 1 GiB, 1073741824 байт, 2097152 секторов
    Единицы: секторов по 1 * 512 = 512 байт
    Размер сектора (логический/физический): 512 байт / 512 байт
    Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
    
    >>> Заголовок скрипта принят.
    >>> Создана новая метка DOS с идентификатором 0xa605c035.
    test.img1: Создан новый раздел 1 с типом 'Linux' и размером 100 MiB.
    test.img2: Создан новый раздел 2 с типом 'Linux' и размером 200 MiB.
    test.img3: Создан новый раздел 3 с типом 'Linux' и размером 300 MiB.
    test.img4: Создан новый раздел 4 с типом 'Extended' и размером 423 MiB.
    test.img5: Создан новый раздел 5 с типом 'Linux' и размером 422 MiB.
    test.img6: Done.
    
    Новая ситуация:
    Тип метки диска: dos
    Идентификатор диска: 0xa605c035
    
    Устр-во    Загрузочный  начало   Конец Секторы Размер Идентификатор Тип
    test.img1  *              2048  206847  204800   100M            83 Linux
    test.img2               206848  616447  409600   200M            83 Linux
    test.img3               616448 1230847  614400   300M            83 Linux
    test.img4              1230848 2097151  866304   423M             5 Расширенный
    test.img5              1232896 2097151  864256   422M            83 Linux
    
    Таблица разделов была изменена
    Синхронизируются диски.
    
    $ losetup --partscan --show --find test.img
    /dev/loop0
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           1G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part         422M
    
    $ mkfs.ext4 /dev/loop0p5
    $ mkdir /tmp/mnt
    $ sudo mount /dev/loop0p5 /tmp/mnt
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           1G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
    
    
    $ truncate -s +1G test.img
    $ sudo losetup --verbose --set-capacity /dev/loop0
    
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    422M 385,2M /tmp/mnt
    
    
    $ echo ", +" | sudo sfdisk --no-reread -N 4 /dev/loop0
    $ sfdisk --dump /tmp/test.img
    label: dos
    label-id: 0xa605c035
    device: /tmp/test.img
    unit: sectors
    sector-size: 512
    
    /tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
    /tmp/test.img2 : start=      206848, size=      409600, type=83
    /tmp/test.img3 : start=      616448, size=      614400, type=83
    /tmp/test.img4 : start=     1230848, size=     2963456, type=5
    /tmp/test.img5 : start=     1232896, size=      864256, type=83
    
    $ echo ", +" | sudo sfdisk --no-reread -N 5 /dev/loop0
    $ sfdisk --dump /tmp/test.img
    label: dos
    label-id: 0xa605c035
    device: /tmp/test.img
    unit: sectors
    sector-size: 512
    
    /tmp/test.img1 : start=        2048, size=      204800, type=83, bootable
    /tmp/test.img2 : start=      206848, size=      409600, type=83
    /tmp/test.img3 : start=      616448, size=      614400, type=83
    /tmp/test.img4 : start=     1230848, size=     2963456, type=5
    /tmp/test.img5 : start=     1232896, size=     2961408, type=83
    
    $ sudo partx --update /dev/loop0
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    1,4G 385,2M /tmp/mnt
    
    $ sudo resize2fs /dev/loop0p5
    $ lsblk -p -o NAME,TYPE,FSTYPE,SIZE,FSSIZE,MOUNTPOINT /dev/loop0
    NAME           TYPE FSTYPE  SIZE FSSIZE MOUNTPOINT
    /dev/loop0     loop           2G
    ├─/dev/loop0p1 part         100M
    ├─/dev/loop0p2 part         200M
    ├─/dev/loop0p3 part         300M
    ├─/dev/loop0p4 part           1K
    └─/dev/loop0p5 part ext4    1,4G   1,3G /tmp/mnt
    
    $ sudo umount /tmp/mnt
    $ losetup -d /dev/loop0
    Ответ написан
    5 комментариев
  • Как в Firefox удалить прикреплённую ссылку?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    это походу с ярлыков берётся что на домашней странице
    перейдите на about:preferences#home и поставьте галочку напротив пункта Ярлыки если не стоит, далее открываем новую страницу наводим курсор на ярлык после чего у него подсвечивается '...' жмём и выбираем пункт Открепить
    Ответ написан
    1 комментарий
  • Как в txt сгенерировать числа от 000001 до 999999?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    вывести в файл последовательно числа от 000001 до 999999
    seq -w 1 999999 > file.txt
    если нужно рандомно и без повторов, то
    shuf <(seq -w 1 999999) > file.txt
    Ответ написан
    Комментировать
  • Как настроить визуализацию процессов в linux под sway с помощью pscircle?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    установите из аура pscircle (кстати, у разрабов почему то указанно pscircle-git которого нету в аур)
    yay -S pscircle
    вместо yay можно использовать любой другой аурхелпер
    также установите из офреп пакет swaybg если еще не установлен.

    Далее создадим скрипт с именем background и положим его например здесь $HOME/.local/bin/background

    (вариант 1)
    #!/usr/bin/env bash
    
    PICTURE_PATH=/tmp/pscircle.png
    TIME_UPDATE=5 # ставить >= 2
    
    # борьба с дублями программы
    PID_PATH=/tmp/background.pid
    [[ -e $PID_PATH ]] && kill $(cat $PID_PATH)
    echo $$ > $PID_PATH
    
    [[ -n "$(pgrep swaybg)" ]] && pkill swaybg
    
    while :; do
    	pscircle 	--output=$PICTURE_PATH \
    				--max-children=50 \
    				--output-width=1920 \
    				--output-height=1080 \
    				--tree-radius-increment=150 \
    				--dot-radius=3 \
    				--link-width=1.3 \
    				--tree-font-size=13 \
    				--toplists-font-size=20 \
    				--tree-center=-300:0 \
    				--cpulist-center=600.0:-120.0 \
    				--memlist-center=600.0:120.0
    
    	swaybg 	--image $PICTURE_PATH \
    			--mode center \
    			--color "#000000" \
    			--output "*" &
    
    	# время на установку нового изображения перед тем как убрать старое
    	# убирает мерцание при смене обоев
    	sleep 1
    
    	[[ -n $pid ]] && kill $pid
    	pid=$(pgrep swaybg)
    
    	sleep $[TIME_UPDATE-1]
    done


    скрипт (вариант 2)
    #!/usr/bin/env bash
    
    PICTURE_PATH=/tmp/pscircle.png
    TIME_UPDATE=5
    
    # борьба с дублями программы
    PID_PATH=/tmp/background.pid
    [[ -e $PID_PATH ]] && kill $(cat $PID_PATH)
    echo $$ > $PID_PATH
    
    [[ -n "$(pgrep swaybg)" ]] && pkill swaybg
    
    while :; do
     	pscircle --output=$PICTURE_PATH
     	swaymsg "output * background $PICTURE_PATH fill #000000"
     	sleep $TIME_UPDATE
    done


    второй вариант проще, но у меня почему то вызывает мерцание при смени картинки.
    Правим параметры под себя и сделаем скрипт исполняемым:
    chmod +x $HOME/.local/bin/background

    затем уже в самом конфиге sway $HOME/.config/sway/config добавляем строчку
    exec_always $HOME/.local/bin/background
    где exec_always позволит перезагружать наш конфиг через перезагрузку файла конфигурации sway, по умолчанию установлена комбинация
    bindsym $mod+Shift+c reload
    то есть, при подборе параметров для pscircle в нашем скрипте достаточно будет нажать вышеуказанную комбинацию клавиш чтобы изменения вступили в силу.
    ps.
    Также не забудьте в конфиге sway закомментировать строку где указанно старое использование обоев рабочего стола.
    Ответ написан
    1 комментарий
  • Сколько было записано на SSD за всю жизнь?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    возможно у вас параметр Total_LBAs_Written не в секторах отмеряется а сразу в гигах,
    в принципе это легко проверить при помощи dd, для этого можете использовать код из этого ответа.

    update
    ***скрипт***

    закинуть в файл Total_LBAs_Written и сделать его исполняемым:
    chmod +x Total_LBAs_Written
    сам скрипт
    #!/usr/bin/env bash
    
    ##############################################################################################################
    # Описание
    #
    # Определение количества записанных данных на диск за всё время его работы исходя из RAW показателей smartctl
    # Грубо говоря, это перевод значения показателя Total_LBAs_Written в человеко понятный вид за счет сравнения его 
    # показателей до и после записи тестового файла на выбранный диск.
    #
    #
    # Условие работы
    #
    # Для работы программы в системе должны присутствовать следующие утилиты:
    #   smartctl
    #   fzf
    #
    #
    # Использование
    #
    # Примеры запуска программы:
    # $ sudo Total_LBAs_Written
    # $ sudo Total_LBAs_Written 2G
    # $ sudo Total_LBAs_Written 100М
    #
    # далее в меню выберите нужный диск и нажмите Enter
    # по умолчанию тестовый файл берётся в 1 гиг, но можно указать и своё значения передав его программе первым параметром.
    # В меню будут отображаться тока те диски которые соответствуют критериям: 
    # - несъёмный
    # - примонтирован в системе
    # - не быть в режиме только для чтения (для возможности записи на него временных тестовых данных)
    # - иметь достаточно места для записи тестового файла
    #
    #
    # Пример вывода программы
    #
    # $ sudo Total_LBAs_Written 100M
    # Total_LBAs_Written (1) = 5860217375
    # Total_LBAs_Written (2) = 5860422239 ~ 2999598811739 bytes = 2,8T
    #              (2) - (1) = 204864 ~ 104857600 bytes = 100M (test file size)
    # ==============================================================================
    # Итого на диск /dev/sda было всего записанно порядка 2,8T
    #
    ##############################################################################################################
    
    # set -o xtrace
    set -o nounset
    set -o errexit
    set -o pipefail
    
    TESTFILE_SIZE=${1:-1G}
    TESTFILE_SIZE_BYTES=$(numfmt --from=iec $TESTFILE_SIZE)
    
    disk_partitions(){
    	lsblk -plo PKNAME,NAME,MOUNTPOINT $(lsblk -rbpo "PATH,RM,RO,FSAVAIL" |awk -v size=$TESTFILE_SIZE_BYTES '$2==0&&$3==0&&$4>size{print $1}')
    }
    
    export TESTFILE_SIZE_BYTES
    export -f disk_partitions
    
    
    SELECTED_PARTITION=$(disk_partitions \
    |fzf 	--bind 'ctrl-r:reload(bash -c 'disk_partitions')' \
    		--header $'Ctrl+c\t- выйти\nCtrl+r\t- обновить\nEnter\t- выбрать\n\n' \
    		--header-lines=1 \
    		--layout=reverse \
    |awk '{print $2}' )
    
    
    DISK=$(lsblk -npo PKNAME $SELECTED_PARTITION)
    
    TLW1=$(smartctl -a $DISK | awk '/Total_LBAs_Written/{print $NF}')
    [[ -z $TLW1 ]] && echo "Параметр Total_LBAs_Written на текущем диске $DISK не найден !!!" && exit 1
    
    TESTFILE_PATH=$(lsblk -no MOUNTPOINTS $SELECTED_PARTITION)/testfile
    
    
    sync -f $SELECTED_PARTITION
    dd if=/dev/zero of=$TESTFILE_PATH bs=$TESTFILE_SIZE_BYTES count=1 status=none
    sync -d $TESTFILE_PATH
    rm $TESTFILE_PATH
    
    TLW2=$(smartctl -a $DISK | awk '/Total_LBAs_Written/{print $NF}')
    
    echo "Total_LBAs_Written (1) = "$TLW1
    TLW2_SIZE=$(echo "$TLW2*$TESTFILE_SIZE_BYTES/($TLW2-$TLW1)"|bc)
    echo "Total_LBAs_Written (2) = $TLW2 ~ $TLW2_SIZE bytes = "$(numfmt --to=iec $TLW2_SIZE)
    echo "             (2) - (1) = $[TLW2-TLW1] ~ $TESTFILE_SIZE_BYTES bytes = "$(numfmt --to=iec $TESTFILE_SIZE_BYTES)" (test file size)"
    
    echo ==============================================================================
    echo "Итого на диск $DISK за всё время его работы было записанно порядка $(numfmt --to=iec $TLW2_SIZE)"
    
    exit
    Ответ написан
    4 комментария
  • Програма для синхронизации ГуглДрайв (Линукс), есть такое?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Ответ написан
    Комментировать
  • Как изменить вывод баш скирпта?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если у вас там команды с многострочным выводом, по типу файлов, то для того чтобы это вывести обычно нужно пройти два этапа:
    первый, это построчное объединение файлов/переменных с нужным разделителем
    второе, это уже непосредственный отформатированный вывод по указанному выше разделителю.
    рассмотрим ваш пример с командой hostnamectl
    для построчного объединения можно использовать стандартную утилиту paste
    paste file1 file2
    где вместо файлов подставим вывод наших команд
    paste <(hostnamectl) <(hostnamectl)
    но в таком виде оно просто сольёт строки, а нам их нужно как-то различать в одной строке, если внутри вывода команд не используется символ ';' то возьмём его в качестве разделителя, то есть нам нужно в конец file1(ну или вывода команды) добавить окончание в виде точки с запятой ';'
    делается это просто с помощью того же awk
    hostnamectl |awk '{print $0";"}'
    в общем виде будет выглядеть так:
    paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl)


    то есть, по сути, мы получили структурированный текстовый формат по типу CSV/TSV с разделителем в виде ';'
    а вывести подобное довольно просто, так как для этого есть много разных консольных утилит, начиная от стандартной линуксовой column
    paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl) | column -t -s';'

    и заканчивая внешней утилитой csview с рамочками и блэкджеком:
    paste <(hostnamectl |awk '{print $0";"}') <(hostnamectl) | csview -H -d';'

    хотя в последнем варианте можно сократить до
    paste <(hostnamectl) <(hostnamectl) | csview -H --tsv

    так как paste добавляет еще табуляцию как разделитель
    Ответ написан
    1 комментарий
  • Как в через терминал linux найти файлы с одним расширением и только в папках которые заканчиваются на строку?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    найти нужные файлы и заменить в них подстроку
    sed -i "s/stroka1/stroka2/g" $(find -type f -iname "*.html" | grep \\-blr\/ )
    Ответ написан
    Комментировать
  • Как разметить Manjaro на нескольких дисках?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Да, я немного не правильно выразился, хочу из одного ссд сделать грубо говоря два (на виндовс-языке: разбить на два тома), и в один "том" записать /root, /swap и т.д, а во второй /home, и было бы неплохо еще и /usr.

    1) /root - это домашняя папка суперпользователя рут, её никуда никто не выносит, ибо незачем,
    возможно вы имели в виду рут(root) раздел, от слова корневой, главный, изначальный, но тогда он обозначается просто как косая черта /

    2) /swap раздел для ssd обычно не делают, то еще на hdd куда не шло. Если нужен swap то его можно позже подключить как файл, подобно файлу подкачки в винде, там всего несколько команд, погуглите.

    3) выносить /usr в отдельный раздел нету смысла, поверьте, по крайней мере для домашнего использования. То что в /usr установлено многие программы еще не повод пытаться их сохранить для облегчения переустановки, так как этого будет явно недостаточно, ведь сама база где хранится вся информация о пакетах и их связях будет утеряна, обычно она лежит по адресу /var/lib/pacman/ да и можно посмотреть командой:
    $ pacman -v
    ...
    DB Path   : /var/lib/pacman/

    если у вас много программ которые вы ставите вручную после переустановки системы и хотели бы это автоматизировать то это довольно просто делается, заведите файлик, например pacman.list и туда внесите нужные пакеты для установки, каждый пакет на новой строке, к примеру:
    telegram-desktop
    firefox
    chromium
    emacs

    ну а после, когда нужно установить, просто скормите этот файл пакетному менеджеру pacman:
    sudo pacman -S $(<pacman.list)
    или тому же аур-хелперу если там внесены еще и пакеты из АУРа
    yay -S $(<pacman.list)
    при желании вообще можно хранить список где-то в интернетах, да хотя бы на том же github, pastebin или что-то похожем, а потом просто через curl вытакскивать
    sudo pacman -S $(curl -s ...)

    хотя мне кажется что вам возможно лучще будет использовать те же бекапы, если конечно у вас всё так сложно с поломками и последующими переустановками системы, для начала можете попробовать что-то попроще, к примеру
    backintime(aur, github) или timeshift(aur, github)

    4) по поводу деления диска на два раздела - корень и хомяк, то тут всё просто:
    вместо слов несколько картинок под спойлером с установки под виртуалку:
    spoiler

    64163a583b97e842121621.png
    64163a678b438842218800.png
    64163a729c301895325977.png
    64163a7ee8a9d876303857.png
    64163aaa4639e486281347.png

    здесь пробовал уместить всё в 10 гиг, вы же для корня выделите 50-60 гиг а остальное под хомяк
    Ответ написан
    Комментировать
  • 2x8gb лучше или 4+16gb(DDR4 для ноутбука)?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    лучше всего 16x2
    если сейчас денег есть тока на одну 16г то покупайте её, вторую можно и позже купить
    Ответ написан
    2 комментария
  • На какой диск лучше ставить вторую oc?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    любую ОС всегда лучше ставить на ssd, но у вас их тут две и какая будет в приоритете вы не упоминаете.
    Вариант двух ОС на ssd где предполагается поделить его на две части примерно по 60 гиг, так себе затея, и дело тут не в том что две системы на одном диске плохо, нет, дело в том что 60 гиг я бы сказал это в притык, и то всё равно придется постоянно следить чтобы место вдруг не закончилось, то есть, постоянно следить и чистить от лишнего. Но и это даже не всё, так как свободного места предполагается быть мало это само собой скажется на довольно быстром исчерпании физического ресурса ssd которому придется чаще перезаписывать ячейки свободной памяти у которых ротация будет довольно слабая.
    Если это стационарник и есть возможность докупить диск то проще всего взять еще один ssd на 120+ гиг под одну систему, если же это ноут то прикупить ssd на 250+ гиг и поделить уже его между системами.
    Если покупка в данный момент невозможна и нужен именно натив то уже в крайнем случае можно установить linux на hdd, но учтите если ставите систему на hdd то всегда ставьте раздел с системой в начале диска, так как известно что скорость чтения у hdd падает почти в два раза от начала к концу диска.
    Ответ написан
    8 комментариев
  • Как отличить внутренние команды от внешних в Astra Linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ 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
    ~


    $ type -t cp dir bg dmesg
    file
    file
    builtin
    file

    из вывода видно что cp, dir и dmesg это внешние(file) команды, а bg это внутренняя(builtin) или точнее встроенная команда.
    Ответ написан
    Комментировать
  • Как узнать курс валюты в командной строке терминала?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    у ЦБР есть официальная страничка где можно узнать как получить нужные данные

    если коротко, то будет примерно так:
    $ curl -s "http://www.cbr.ru/scripts/XML_daily.asp" | enconv -x UTF-8 | xq -r '.ValCurs.Valute[] | select(.CharCode == "USD" or .CharCode == "EUR") |.CharCode + " " + .Value'
    USD 74,7087
    EUR 79,5716


    с помощью curl качаем нужные данные в формате xml
    далее переводим с помощью утилиты enconv в обще нормальную кодировку
    затем с помощью утилиты xq разбираем полученные данные
    xq входит в пакет yq которая по сути является надстройкой над jq, то есть здесь xml транслируется в json а после обрабатывается утилитой jq

    вот пример вывода всех доступных курсов валют в отформатированном виде с помощью утилиты csview
    curl -s "http://www.cbr.ru/scripts/XML_daily.asp" | enconv -x UTF-8 | xq -r '.ValCurs.Valute[] | .CharCode + " " + .Nominal + " " + .Value' | sort | awk 'BEGIN{print "Code Nominal Value"}{print}' | csview -d' '

    вывод:
    ┌──────┬─────────┬─────────┐
    │ Code │ Nominal │ Value   │
    ├──────┼─────────┼─────────┤
    │ AED  │ 1       │ 20,3400 │
    │ AMD  │ 100     │ 19,1325 │
    │ AUD  │ 1       │ 51,0933 │
    │ AZN  │ 1       │ 43,9463 │
    │ BGN  │ 1       │ 40,7332 │
    │ BRL  │ 1       │ 14,3646 │
    │ BYN  │ 1       │ 26,6998 │
    │ CAD  │ 1       │ 55,2743 │
    │ CHF  │ 1       │ 80,5485 │
    │ CNY  │ 1       │ 10,8398 │
    │ CZK  │ 10      │ 33,5739 │
    │ DKK  │ 1       │ 10,7002 │
    │ EGP  │ 10      │ 24,4263 │
    │ EUR  │ 1       │ 79,5716 │
    │ GBP  │ 1       │ 90,6889 │
    │ GEL  │ 1       │ 28,3363 │
    │ HKD  │ 10      │ 95,3890 │
    │ HUF  │ 100     │ 20,7001 │
    │ IDR  │ 10000   │ 49,2185 │
    │ INR  │ 100     │ 90,1603 │
    │ JPY  │ 100     │ 55,4219 │
    │ KGS  │ 100     │ 85,4595 │
    │ KRW  │ 1000    │ 57,2524 │
    │ KZT  │ 100     │ 16,7640 │
    │ MDL  │ 10      │ 39,8181 │
    │ NOK  │ 10      │ 72,3823 │
    │ NZD  │ 1       │ 46,5734 │
    │ PLN  │ 1       │ 16,7565 │
    │ QAR  │ 1       │ 20,5244 │
    │ RON  │ 1       │ 16,1333 │
    │ RSD  │ 100     │ 67,8622 │
    │ SEK  │ 10      │ 72,2507 │
    │ SGD  │ 1       │ 55,7819 │
    │ THB  │ 10      │ 21,5775 │
    │ TJS  │ 10      │ 69,2908 │
    │ TMT  │ 1       │ 21,3453 │
    │ TRY  │ 10      │ 39,6051 │
    │ UAH  │ 10      │ 20,2313 │
    │ USD  │ 1       │ 74,7087 │
    │ UZS  │ 10000   │ 66,0995 │
    │ VND  │ 10000   │ 31,6013 │
    │ XDR  │ 1       │ 99,6569 │
    │ ZAR  │ 10      │ 40,6808 │
    └──────┴─────────┴─────────┘


    ну или конкретно для указанных валют
    $ curl -s "http://www.cbr.ru/scripts/XML_daily.asp" | enconv -x UTF-8 | xq -r '.ValCurs.Valute[] | select(.CharCode == "USD" or .CharCode == "EUR") |.CharCode + " " + .Nominal + " " + .Value' | awk 'BEGIN{print "Code Nominal Value"}{print}' | csview -d' '
    ┌──────┬─────────┬─────────┐
    │ Code │ Nominal │ Value   │
    ├──────┼─────────┼─────────┤
    │ EUR  │ 1       │ 79,5716 │
    │ USD  │ 1       │ 74,7087 │
    └──────┴─────────┴─────────┘
    Ответ написан
    3 комментария