Задать вопрос
  • Удалить из 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
    Ответ написан
    Комментировать
  • Изменение названия русских названий файлов при распаковке zip архива?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    $ convmv --unescape --notest %D0%BF1%D0%BF.jpg
    mv "./%D0%BF1%D0%BF.jpg"	"./п1п.jpg"
    Ready! I converted 1 files in 0 seconds.
    Ответ написан
    2 комментария
  • Перенос Ubuntu с SSD на NVMe, проверить NVMe?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    решение в комментариях к вопросу
    Ответ написан
    Комментировать
  • Парсинг файла bash?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    В скрипте bash я создаю переменную которая вытаскивает из этой строки S4BZJ045 следующим образом:
    SystemName=$(cat server_out.db | grep 'SystemName' | awk '{print $2}' )

    слишком многословная команда, можно сократить:
    SystemName=$(awk '/SystemName/{printf $2}' server_out.db)


    В ответ получаю NotOK, я понимаю, что проблема в лишних символах в переменной SystemName. Проверял через WC:

    скорее всего проблема в переводе строки, print в конце ставит \n, чтобы этого избежать используйте printf
    Ответ написан
    1 комментарий
  • Как управлять браузером параллельно другим приложениям?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    устанавливаем mpv и yotube-dl
    далее, запускаем в консоли IPC-сервер и видео с нужным роликом (пример):
    mpv --input-ipc-server=/tmp/mpvsocket "https://www.youtube.com/watch?v=GYE2P7BWBAs"

    (при желании можно еще дополнительно установить браузерное расширение для запуска команды(видео) чтобы каждый раз не лезть в консоль)
    в другой консоли набираем команды (пример):
    echo '{ "command": ["set_property", "pause", true] }' | socat - /tmp/mpvsocket

    поставить на паузу

    echo '{ "command": ["set_property", "pause", false] }' | socat - /tmp/mpvsocket

    продолжить воспроизведение

    (детальнее смотри mpv:JSON IPC )
    в общем, вешаем данные команды на горячие клавиши и вуаля

    п.с.
    последние две команды пауза и воспроизведение можно записать немного проще и в одной команде:
    echo "cycle pause" | socat - /tmp/mpvsocket
    если пауза то начнёт воспроизведение, а если воспроизводится то ставит на паузу.
    Ответ написан
    Комментировать