Задать вопрос
  • Как увеличить место под раздел 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 комментария
  • Как получить название видео youtube?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    yt-dlp --print "%(title)s" URL
    Ответ написан
    Комментировать
  • Как разобраться в выводе lsusb?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    в usbutils помимо lsusb есть еще lsusb.py которая показывает информацию в более человекопонятном виде, но в убунту почему-то её вырезают. При желании её можно себе скачать и запустить напрямую:
    curl "https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usbutils.git/plain/lsusb.py.in" > lsusb.py && chmod +x lsusb.py

    а после запустить
    ./lsusb.py
    Ответ написан
    4 комментария
  • Как в bash добавить строку в конце файла но перед определенной строке?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если упростить, то нужно перед одной строкой вставить другую
    если делать через sed то
    STR1="echo get_template_part('template-parts/$1/$2')"
    STR2="<?php get_footer(); ?>"
    sed -i "/$STR2/i $STR1" FILE
    Ответ написан
    3 комментария
  • Как записать вводимые данные в определенном формате?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    while [[ $(wc -c <<< $MAC_IN) != 13 ]]; do
    	read -p "Please input MAC address : " # XX_XX:XX  XX-XX/XX
    	MAC_IN=$(echo -n "$REPLY"|sed 's/[^0-9a-fA-F]//g')
    done
    
    MAC=$(echo -n "$MAC_IN"|fold -w2 |tr '\n' ':')
    echo $MAC  # XX:XX:XX:XX:XX:XX:XX
    Ответ написан
    Комментировать
  • После каждого обновления программ в Pamac, места на диске становится меньше, как это остановить?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    просто почистите кеш
    pacman -Scc
    Ответ написан
    Комментировать
  • Как записывать в файл до тех пор пока есть место в нем?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Он как видно на 100049 байт.

    Мне нужно записывать в него строки ew=`cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 76` до тех пор пока он не заполнится полностью.

    то есть, у нас есть символы от A-Z a-z 0-9 каждый из которых занимает 1 байт
    нужно записывать строки с 76 символами + 1 символ перевода строки
    по итогу получим

    100049/77 = 1299 полных строк и немного хвоста
    размер хвоста
    100049-1299*77 = 26 символов

    если всё это перевести в bash-код то получим следующее
    #!/usr/bin/env bash
    
    #вводные
    FILE=file.txt
    S=100049 # общий размер в байтах
    s=76   # максимальное количество однобайтовых символов на строку
    
    N=$[S/(s+1)]
    n=$[S-N*(s+1)]
    
    echo "Cтрок + хвост = $N + $n"
    
    rm -rf $FILE
    for (( i = 0; i < $N; i++ )); do
    	cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c $s >> $FILE
    	echo >> $FILE
    done
    cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c $n >> $FILE
    
    echo "Файл записан"
    echo "Размер файла $FILE = $(stat -c %s $FILE) байт"

    по итогу получим файл с необходимым объёмом данных
    Ответ написан
    Комментировать