• Как массово создать копии файлов с суффиксами?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    for i in {1..50}; do cp file1.test file1_$i.test;done
    Ответ написан
    1 комментарий
  • Как декодировать результаты ldapserash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    там походу проблема возникает из за перевода строки в конце данных которые поступают в base64
    попробуйте в awk print заменить на printf:
    ... | awk '{split ($0, a, ": "); printf a[2]}' | base64 -d`


    Как я понял это перекодирование потому что при вызове без base64 выходит данные в виде..

    ну да, используется для русских символов:
    $ echo "0JHQsNC70LHQsNGI0L7Qsg==" | base64 -d
    Балбашов
    Ответ написан
    Комментировать
  • Есть ли офисные программы для терминала?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    по возрастанию свежести
    sc, teapot, oleo, neoleo
    Ответ написан
    Комментировать
  • Как изменить раздел диска?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Установка Windows на данный диск невозможна. На выбранном диске находится таблица MBR-разделов. В системах EFI Windows можно установить только GPT-диск.

    странно что винда сама не может сменить таблицу разделов с mbr на gpt при установке (естественно что все данные с диска пропадут).
    sudo umount -R /dev/sdc
    echo -e "label:gpt\nstart=2M" | sudo sfdisk /dev/sdc

    где вместо sdc ставите имя нужного диск( смотри через lsblk)
    Ответ написан
  • Как сравнить 2 файла в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    показать только ту строку, которая отсутствует во втором файле

    comm -23 <(sort file1.txt) <(sort file2.txt)
    Ответ написан
    3 комментария
  • Как сложить числа от x до y на bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    9 класс, арифметическая прогрессия
    # b >= a
    read -p "число 1: " a
    read -p "число 2: " b
    echo $[(a+b)*(b-a+1)/2]
    Ответ написан
    2 комментария
  • Как посчитать число строк в файле по условию?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если знать точные даты начала и конца то легко:
    awk '/router.php/' example.com.log | awk '/\[16\/Nov\/2021:15:15:56 -0500\]/,/\[17\/Nov\/2021:15:15:56 -0500\]/' | wc -l


    п.с.
    если делать конкретно через date, а не тупо обрабатывать как строки что проще но нужно знать конкретный диапазон, то необходимо учитывать некоторые нюансы, ту же локаль, так как у вас или кого-то другой кто будет у себя запускать данную команду может быть отличная локаль для даты чем в самом логе
    сравните
    $ date -d now
    $ LANG=ru_RU.UTF-8 date -d now
    $ LANG=en_US.UTF-8 date -d now

    сами локали естественно должны быть доступны в системе, проверить можно утилитой localectl:
    $ localectl list-locales
    en_US.UTF-8
    ru_RU.UTF-8


    также +0300 это не просто так, и если обрабатывать скрипт находясь в другом часовом поясе то может произойти смещение по времени в ту или иную сторону
    так что если внести поправки на часовой пояс( %z) + локаль, получим:
    LANG=en_US.UTF-8 date -d 'now-24hours' +'[%d/%b/%Y:%H:%M:%S %z]'


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

    cat example.ru.log  | awk -F'[][/:]' '/router.php/{"date +%s -d \""$2"-"$3"-"$4" "$5":"$6":"$7"\"" | getline z; print z" "$0}'

    здесь мы преобразовали к понятному date формату, а потом перевели в юникс время( +%s) и получившейся результат просто добавили к началу строки.
    результат

    1637320437 212.193.33.123 - - [19/Nov/2021:14:13:57 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637320437 212.193.33.123 - - [19/Nov/2021:14:13:57 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637320438 212.193.33.123 - - [19/Nov/2021:14:13:58 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321647 212.193.33.123 - - [19/Nov/2021:14:34:07 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321647 212.193.33.123 - - [19/Nov/2021:14:34:07 +0300] "GET /router.php HTTP/1.0" 301 447 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321648 212.193.33.123 - - [19/Nov/2021:14:34:08 +0300] "GET /router.php HTTP/1.0" 301 446 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321650 212.193.33.123 - - [19/Nov/2021:14:34:10 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321650 212.193.33.123 - - [19/Nov/2021:14:34:10 +0300] "GET /router.php HTTP/1.0" 301 451 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637321651 212.193.33.123 - - [19/Nov/2021:14:34:11 +0300] "GET /router.php HTTP/1.0" 301 445 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637324092 212.193.33.123 - - [19/Nov/2021:15:14:52 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637326108 212.193.33.123 - - [19/Nov/2021:15:48:28 +0300] "GET /router.php HTTP/1.0" 301 447 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
    1637327153 212.193.33.123 - - [19/Nov/2021:16:05:53 +0300] "GET /router.php HTTP/1.0" 301 446 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"


    дату 1 день(24 часа) назад можно узнать так:
    date +%s -d 'now-1day'
    или даже так
    echo $[`date +%s` - 24*60*60]
    просто отняв от текущего количество нужных секунд

    в итоге получим:
    cat example.ru.log |awk -F'[][/:]' '/router.php/{"date +%s -d \""$2"-"$3"-"$4" "$5":"$6":"$7"\"" | getline z; print z" "$0}' | awk -v t=$[`date +%s` - 24*60*60] '$1>=t'


    теперь при желании можно легко расширить и указывать диапазон поиска от(t1) и до(t2)
    cat example.ru.log |awk -F'[][/:]' '/router.php/{"date +%s -d \""$2"-"$3"-"$4" "$5":"$6":"$7"\"" | getline z; print z" "$0}' | awk -v t1=`date +%s -d '19-Nov-2021 15:00:00 +0300'` -v t2=`date +%s -d '19-Nov-2021 16:00:00 +0300'` '$1>=t1 && $1<=t2'

    здесь ищем в диапазоне одного часа
    от 19-Nov-2021 15:00:00 +0300
    до 19-Nov-2021 16:00:00 +0300
    результат
    1637324092 212.193.33.123 - - [19/Nov/2021:15:14:52 +0300] "GET /router.php HTTP/1.0" 301 449 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +www.google.com/bot.html)"
    1637326108 212.193.33.123 - - [19/Nov/2021:15:48:28 +0300] "GET /router.php HTTP/1.0" 301 447 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36 (compatible; Googlebot/2.1; +www.google.com/bot.html)"
    Ответ написан
    4 комментария
  • Как создать свое приложение под linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Комментировать
  • Как переместить все файлы в другую папку кроме папки с помощью терминала?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ cd $HOME/Videos
    $ mv !(filters) filters

    если не сработает значит нужно включить расширение регулярных выражений
    $ shopt -s extglob
    включено или нет можно глянуть командой
    $ shopt
    ...
    extglob        	on
    ...
    Ответ написан
    Комментировать
  • Сервис для загрузки хранилища файлов(картинок). Какой выбрать?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Ответ написан
    Комментировать
  • Проблема в Garuda Linux Xfce?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Garuda основан на Arch Linux у которого пакетный менеджер pacman
    skypeforlinux нету в оф.репах но есть в Ауре
    для прозрачной установки пакетов с Аура установите обертку над пакманом, например тот же yay
    pacman -S --needed git base-devel
    git clone https://aur.archlinux.org/yay.git
    cd yay
    makepkg -si

    после уже устанавливаете нужные пакеты
    yay -Suy skypeforlinux-stable-bin
    или
    yay -Suy skypeforlinux-preview-bin
    Ответ написан
    1 комментарий
  • 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
    Ответ написан
    Комментировать