• Bash - как вывести только первое слово?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    изначально строка очень длинная, но мне из нее нужно выдернуть только значение 674256, 674262 и т.д. чтобы они были без знака # и каждая с новой строки - в оригинале они со знаком #

    $ echo "#674256 10745127/2 name #674262 10745127/3 name #674268 10745127/4 name #674274 10745127/5 name #674280 10745127/6 name" | awk 'BEGIN{RS="#"}{print $1}'
    
    674256
    674262
    674268
    674274
    674280
    Ответ написан
    Комментировать
  • Почему youtube-dl медленно качает видео?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Ответ написан
    Комментировать
  • Какой программой можно посмотреть FPS текущего стрима RTSP?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    ffprobe -v error "rtsp://10.1.1.102:554/stream=0" -select_streams v:0 -show_entries stream=r_frame_rate -of csv=p=0 | bc
    Ответ написан
    Комментировать
  • Удалить из jq ключи содержащие часть слова?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ jq 'with_entries(select(.key|test("password")|not))' config.json
    {
      "description": "",
      "hostname": "ubuntu18",
      "ip": "",
      "username_1": "test",
      "username_1_owner": "dude1",
      "username_2": "test1",
      "username_2_owner": "dude2"
    }
    Ответ написан
    Комментировать
  • Есть ли консольный редактор для Linux, в котором просто выделять весь текст?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Vim не надо.

    а emacs ?)

    как вариант попробуйте тильду ( tilde ) (выделить все Ctrl+A)

    п.с.
    наткнулся на интересный консольный редактор dte
    очень гибкий и весит меньше чем nano
    $HOME/.dte/rc
    alias select-all        'bof; select -l; eof'
    alias select-all-paste  'select-all; pipe-from -m wl-paste -p'
    
    bind C-A      'select-all'
    bind M-a      'select-all-paste'

    здесь мы создали файл($HOME/.dte/rc) настроек программы dte и прописали в нём алиасы нужных нам команд(select-all и select-all-paste) после чего повесили их на сочетания клавиш(Ctrl+a и Alt+a)
    select-all - выделяет весь текст
    select-all-paste - выделяет весь текст и заменяет его на содержимое буфера обмена (чтобы два раза не вставать)

    здесь wl-paste это внешняя утилита для работы с буфером обмена Wayland
    wl-paste -- буфер скопированного
    wl-paste -p -- буфер выделенного

    для X-сов вместо wl-paste можно использовать к примеру тот же xsel с нужными ключами:
    Selection options
    -p, --primary Operate on the PRIMARY selection (default)
    -s, --secondary Operate on the SECONDARY selection
    -b, --clipboard Operate on the CLIPBOARD selection

    то есть при замене wl-paste на xsel будет примерно так:
    alias select-all-paste  'select-all; pipe-from -m xsel -p'
    Ответ написан
    Комментировать
  • Как увеличить место на диске после резервного копирования?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    клонируем диск:
    dd if=/dev/sda of=/dev/nvme0n1 bs=100M conv=fsync oflag=direct status=progress

    где размер /dev/sda меньше или равно размеру диска(не раздела) /dev/nvme0n1

    смотрите какие разделы у вас на диске nvme0n1
    lsblk /dev/nvme0n1
    допустим у вас там два раздела nvme0n1p1 и nvme0n1p2
    и нужно расширить последний nvme0n1p2, то есть второй

    максимально увеличим последний(2) раздел в таблице разделов
    echo ", +" | sudo sfdisk /dev/nvme0n1 -N 2
    -N 2 здесь это второй раздел

    после чего на всякий случай перечитаем таблицу разделов данного диска:
    blockdev --rereadpt /dev/nvme0n1
    и проверим файловую систему nvme0n1p2 (перед увеличением)
    e2fsck -f /dev/nvme0n1p2
    теперь увеличиваем непосредственно размер самой файловой системы второго раздела:
    resize2fs /dev/nvme0n1p2
    и на последок еще раз проверяем:
    e2fsck -f /dev/nvme0n1p2

    п.с.
    если у вас GPT разметка диска то еще не помешает продублировать запись таблицы разделов с начала диска в конец
    sfdisk --relocate gpt-bak-std /dev/nvme0n1
    Ответ написан
    Комментировать
  • У меня на ноуте два порта: USB 2 и 3 - как узнать какой из них 3.0 не полагаясь на якобы "синюю" окраску (я тупо не вижу синий он или зеленый)?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    у usbutils помимо утилиты lsusb есть еще lsusb.py для вывода более человеко понятной информации по usb
    но данного скрипта я к сожалению не наблюдаю на загрузочном диске убунты, хотя при желании его можно легко достать загрузив нужный архив с usbutils v12 (данная версия стоит в убунте 20)
    после чего распаковать и достать от туда файл lsusb.py.in, переименовав в lsusb.py и сделать его исполняемым
    chmod +x lsusb.py
    ну а после там же и запускаете
    ./lsusb.py
    Ответ написан
    Комментировать
  • Как отформатировать в NTFS?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    # mkfs.ntfs /dev/nvme0n1

    для начала нужно указывать при форматировании конкретный раздел а не диск, например для первого раздела:
    # mkfs.ntfs /dev/nvme0n1p1

    меня интересуют какие то стандартные средства без установки ntfs-3g

    подождите несколько(зависит от дистрибутива) месяцев когда выкатят ядро 5.15 в котором сделают 'нативную' поддержку ntfs
    тыц1 - "Линус Торвальдс заявил, что драйвер NTFS готов к добавлению в ядро Linux"
    тыц2 - "Драйвер NTFS от Paragon Software может быть принят в состав ядра Linux 5.15"
    или можете попробовать уже сейчас себе скомпилировать - тыц3
    если у вас arch-подобный дистр то можете установить с АУРа - тыц4
    Ответ написан
    Комментировать
  • Из-за чего youtube-dl ограничивает скорость скачивание?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    youtube-dl не ограничивает скачивание её ограничивает сам ютуб, часто помогает перезапуск скачки, возможно даже что это тот самый throttling.
    да и сам youtube-dl давно не обновлялся, попробуйте его форк yt-dlp возможно с ним будет нормально.
    Ответ написан
    1 комментарий
  • Почему Linux Manjaro не видит UUID раздела?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    lsblk -o +UUID
    ну или только uuid по выбранному разделу:
    lsblk -no UUID /dev/nvme0n1p1
    Ответ написан
    Комментировать
  • Как правильно составить небольшой bash скрипт по созданию пользователей?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    такое ощущение что условие неполное, поэтому немного усложню, а при желании вы легко можете упростить скрипт до нужного результата
    Предположим что нужно создать N пользователей(от 1 до N) и задать пароль к ним и всё это с соответствующей числовой приставкой . То есть, написать скрипт который на вход получает базовое имя и пароль, а также количество пользователей которых нужно создать.
    допустим имя скрипта будет luser.sh
    #!/usr/bin/env bash
    
    USER=$1 # базовая часть имени пользователя
    PASS=$2 # базовая часть пароля
    N=$3    # количество пользователей
    for (( i = 1; i <= $N; i++ )); do
    	useradd "${USER}_$i" && $(echo "${USER}_$i:${PASS}_$i" |chpasswd)
    	echo "User ${USER}_$i added!"
    done

    пример работы скрипта:
    $ sudo ./luser.sh user pass 3
    User user_1 added!
    User user_2 added!
    User user_3 added!

    проверим что пользователи с основанием в имени user действительно создались:
    $ grep -e "^user" /etc/passwd
    user_1:x:1314:1314::/home/user_1:/bin/bash
    user_2:x:1315:1315::/home/user_2:/bin/bash
    user_3:x:1316:1316::/home/user_3:/bin/bash
    Ответ написан
    Комментировать
  • Как слайсить массив на баше?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    for ((i=0;i<${#array[@]};i=i+6));do echo ${array[@]:i:6};done
    Ответ написан
    Комментировать
  • Как локализовать скрипт на BASH?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    sk ( skim )
    get_lang=$(grep -rh папка/где/искать -e '^language=' | awk -F'=' '{print $2}' | sk)
    Ответ написан
    Комментировать
  • Оконный менеджер i3 не слушает изменения в конфиге?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    посмотрите есть ли конфиг в домашней директории пользователя ~/.config/i3/config
    если он там есть то он имеет приоритет над /etc/i3/config
    Ответ написан
    Комментировать
  • Получить для обработки цикла файлы по маске из папки отсортированые по дате?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $LS="ls -t | grep database"
    for li in $LS
    do
    echo $li
    done


    первое
    неправильно указанна переменная при присвоении ей значения:
    $LS=...
    правильно будет:
    LS=...

    второе
    LS="ls -t | grep database"
    здесь вы переменной LS присваиваете строку, а нужно результат выполнения
    LS="$(ls -t | grep database)"

    в итоге должно получится как-то так:
    LS="$(ls -t | grep database)"
    for li in $LS
    do
    	echo $li
    done
    Ответ написан
  • Как получить распарсить и вернуть строку из функции bash?

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

    как написать функцию в bash, чтобы она принимала один аргумент, а внутри можно было этот аргумент (строку) распарсить и вернуть из неё число

    foo() {
    	foo_arg1="$1"
    	echo "$foo_arg1" | awk -F- '/^p-[[:digit:]]{1,}$/{printf $2}'
    }
    foo p-4 # вернет 4

    сделал регуляркой с проверкой на число после p-

    потом вызвать уже в блоке if при соответствующем условии myFunc $1
    код в if
    elif [[ $1 == 'p-"${2}"' ]]; then
      ...прочий конфиг --mark myFunc $2

    во первых, 'p-"${2}"' это будет именно строка p-"${2}" а не p-чтототам, так как тут обрамлено в одинарные кавычки, правильнее было бы условие написать так:
    [[ "$1" == "p-$2" ]]

    то есть примерно будет такой скрипт:
    #!/usr/bin/env bash
    
    arg1="$1"
    arg2="$2"
    
    foo() {
    	foo_arg1="$1"
    	echo "$foo_arg1" | awk -F- '/^p-[[:digit:]]{1,}$/{printf $2}'
    }
    
    if [[ "$arg1" == "p-$arg2" ]]; then
    	echo --mark $(foo $arg1)
    fi
    exit

    допустим назовем скрипт 0.sh, тогда
    ./0.sh p-4 4
    --mark 4
    ./0.sh p-4 5 # ничего не выведет так как p-4 неравно p-5
    Ответ написан
    6 комментариев
  • Как запустить arch linux на beaglebone black?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    #!/usr/bin/env bash
    
    set -o xtrace
    set -o errexit
    
    MicroSD="/dev/sdX"
    DIR="/tmp/bbb"
    MNT="$DIR/mnt"
    
    rm -rf $DIR
    mkdir -p "$MNT"
    
    dd if=/dev/zero of=$MicroSD bs=2M count=1 conv=fsync oflag=direct status=progress
    echo -e "label:dos\nstart=2M" | sfdisk $MicroSD
    yes | mkfs.ext4 -O '^metadata_csum,^64bit' -m1 ${MicroSD}1
    mount ${MicroSD}1 "$MNT"
    
    am33x=ArchLinuxARM-am33x-latest.tar.gz
    curl -L -o $DIR/$am33x "http://os.archlinuxarm.org/os/$am33x"
    bsdtar -xpf "$DIR/$am33x" -C "$MNT" && sync
    
    dd if=$MNT/boot/MLO of=$MicroSD bs=128k count=1 seek=1 conv=notrunc,fsync oflag=direct status=progress
    dd if=$MNT/boot/u-boot.img of=$MicroSD bs=384k count=2 seek=1 conv=notrunc,fsync oflag=direct status=progress
    
    umount "$MNT"
    exit
    Ответ написан
    Комментировать
  • В убунту можно сделать какое то уведомление, что то вроде "заканчивается оперативная память", и начинается использование свапа?

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

    ну так в чем проблема то ?
    чтобы посмотреть память есть команда free или даже напрямую через cat /proc/meminfo
    для вывода уведомлений можно использовать, к примеру, notify-send
    чтобы всё это зациклить в баше есть while

    while :;do if [[ "$(free | awk '$1=="Mem:"{print $2-$3}')" < $[1*1024*1024] ]];then notify-send 'Палундра' "Приближается пушистый северный зверёк";fi;sleep 1;done

    вот простенький пример однострочника, где мы проверяем каждую секунду(sleep 1) память с помощью утилиты free и если(if) разница($2-$3) между total и used памятью(по умолчанию измеряется килобайтах) меньше чем 1 Гиг ( $[1*1024*1024] k) то мы начинаем бить тревогу выводя сообщение через утилиту notify-send

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

    zram спасёт отца русской демократии
    Ответ написан
    Комментировать
  • Как ускорить загрузку firefox со старым профилем?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    сам перепробовал много чего, но в конечном итоге остановился на загрузке профиля в оперативную память и управление с помощью утилиты profile-sync-daemon
    соответствующая статья есть на archWiki - Firefox/Profile on RAM
    конкретно по утилите Profile-sync-daemon
    Ответ написан
    Комментировать