Ответы пользователя по тегу bash
  • Как отобразить JSON с кириллицей в bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    это escape-последовательность, а точнее символы юникода в шестнадцатеричном формате
    $ echo -e "\u0421\u0430\u043c\u0430\u0440\u0430"
    Самара
    Ответ написан
    1 комментарий
  • Как ввести пароль дополнительным параметром к команде?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если вы просто хотите выполнить команду от суперпользователя с явным введением пароля
    echo ПАРОЛЬ | sudo --stdin КОМАНДА
    или
    sudo --stdin КОМАНДА <<< ПАРОЛЬ

    если же вам нужен именно su user но чтобы пароль можно было задать в строке явно то используйте утилиту expect:
    LANG=en_US.UTF-8 expect -c 'spawn su ЮЗЕР;expect Password:;send "ПАРОЛЬ\n";interact'
    Ответ написан
    Комментировать
  • Почему bash скрипт не работает?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    во первых, судя по заголовку в https://hashkeys.club/92/
    total pages = 2475880078570760549798249 (1000 keys per page)

    у вас предыдущие 8 порядков куда-то делись
    24758800785707605
    2475880078570760549798249
    возможно так и задуманно, но мне кажется что всё же это не так

    во вторых, без параллельной закачки ловить здесь нечего, поэтому:
    rm -rf urls.txt
    for i in $(seq 1 1 1000000); do echo "url=https://hashkeys.club/92/page=$i" >> urls.txt;done
    curl --remote-name-all --parallel -K urls.txt

    здесь указан миллион, поставьте свой диапазон, но лучше разбить по миллиону или 10 миллионов
    seq 1 1 1000000
    seq 1000001 1 2000000
    ...


    но надеюсь вы осознаёте какое время и объёмы вы хотите скачать ?
    у меня для 100 страниц показало:
    $ curl --remote-name-all --parallel -K urls.txt
    DL% UL%  Dled  Uled  Xfers  Live   Qd Total     Current  Left    Speed
    --  --  10.2M     0   100     0     0 --:--:--  0:00:29 --:--:--  406k

    скорость походу режет сам сервер
    то есть, даже если взять ваш урезанный объём страниц в 24758800785707605 то выйдет

    по времени:
    24758800785707605 / (100 страниц /30 секунд) = 8252933595235868 секунд
    это порядка 261698807 лет

    по объёму:
    24758800785707605 / (100 страниц /10 мегабайт) = 2475880078570760 мегабайт
    а это порядка 2 зеттабайт !!!!!
    Ответ написан
    Комментировать
  • Как вывести список пользователей с порядковым номером c сохранением сортировки по алфавиту?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk -F: '{print "- "$1}' /etc/passwd |sort |nl
    Ответ написан
    Комментировать
  • Как передать переменную в curl?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    send=$(echo "$send" | sed $'s,\x1b\\[[0-9;]*[a-zA-Z],,g')
    curl -X POST -H 'Content-type: application/json' --data "$(jq -n --arg text "$send" '{text: $text}')" https://hooks.slack.com/services/???????????/???????????/????????????????????????

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

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    создадим тестовую площадку:
    mkdir -p /tmp/TEST && touch "/tmp/TEST/backup-name-back-"{01..05}"-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-"{10..13}-{100..104}".bak" && tree /tmp/TEST

    вывод tree
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-11-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-12-104.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-100.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-101.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-10-100.bak
    ...
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-102.bak
    ├── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-103.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 100 files

    получим 100 файлов бэкапа

    теперь несколько однострочников
    прописываем полный путь к папке где хранятся бэкапы и заодно закинем список для сравнения в переменную Т
    DIR="/tmp/TEST"; T=$(ls $DIR/* |awk -F'[-.]' '{print $4" "$(NF-2)$(NF-1)";"$0}')

    показать что останется после удаления
    echo "$T" |sort -nr |sort -un |awk -F';' '{print $2}'

    показать что удалиться
    comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}'

    !!! удаляем !!!
    rm $(comm -3 <(echo "$T" |sort -n) <(echo "$T" |sort -nr |sort -un) |awk -F';' '{print $2}')

    по итогу получим:
    $ tree /tmp/TEST
    /tmp/TEST
    ├── backup-name-back-01-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-02-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-03-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    ├── backup-name-back-04-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    └── backup-name-back-05-название_на_русском,_могут,_встречаться_(скобки,_точки,_запятые.)-13-104.bak
    
    0 directories, 5 files
    Ответ написан
    1 комментарий
  • Почему не берутся пробелы в bash переменной?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    решение через IFS:
    x="$IFS";IFS=$'\n';for WhatFile in $(find $Downloads -regex ".*\.\(mkv\|m4v\|mp4\|ts\|avi\)" -and -mmin +30 | sort -r );
    do
    IFS="$x"

    п.с.
    первоначальный(неверный) вариант
    кавычки, в одном месте поменяй на одинарные а в другом добавь двойные
    for WhatFile in "$(find $Downloads -regex '.*\.\(mkv\|m4v\|mp4\|ts\|avi\)' -and -mmin +30 | sort -r )";
    Ответ написан
    23 комментария
  • Как объединить строки в bash скрипте?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    awk '{printf $0}' data.txt
    Ответ написан
  • Как на Убунте добавить в файл host через bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    echo "127.0.0.1 site.com" | sudo tee -a /etc/hosts

    А если надо удалить строчку?

    если она последняя то можно так:
    sudo awk -i inplace 'NR>1{print i}{i=$0}' /etc/hosts
    Ответ написан
  • Bash, как преобразовать формат даты?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ echo "091220" |jq -rR 'strptime("%d%m%y")|strftime("%Y-%m-%d")'
    2020-12-09

    мне нравится для подобных преобразований использовать утилиту jq
    Ответ написан
    Комментировать
  • Как правильно выбрать переменные из json в bash скрипте?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ cat example.json |jq -r '.server | .name,.public_net.ipv4.ip'
    my-server
    142.132.235.187


    если нужно сразу в переменные загнать то
    $ cat example.json| jq -r '.server | "name=\(.name)","ip=\(.public_net.ipv4.ip)"'
    name=my-server
    ip=142.132.235.187

    обернуть в eval и всё

    $ eval $(jq -r '.server | "name=\(.name)","ip=\(.public_net.ipv4.ip)"' example.json)
    
    $ echo $ip
    142.132.235.187
    Ответ написан
    Комментировать
  • Что делать, если бесконечно работает команда sort -u в bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ sort --help
    Использование: sort [ПАРАМЕТР]… [ФАЙЛ]…
    или: sort [ПАРАМЕТР]… --files0-from=Ф
    Печатает сортированное слияние всех ФАЙЛ(ов) на стандартный вывод.

    Если ФАЙЛ не задан или задан как -, читает стандартный ввод.
    ...

    если вы про консоль, то
    $ sort -u
    d
    a
    g
    t
    aa
      нажать <Ctrl+D> для сортировки
    a
    aa
    d
    g
    t


    если вам нужно просто прекратить работу данной команды то используйте стандартное сочетание Ctrl+C

    п.с.
    ни в коем случае не запускайте vi ))
    Ответ написан
    2 комментария
  • Bash не видит переменную после выхода из цикла. В чем может быть проблема?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    а ведь можно проще:
    awk '{system("sed -i s/"$1"/"$2"/g file.txt")}' name.txt
    Ответ написан
  • Что означает данная конструкция в bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если проделать в консоли
    $ echo ${0}
    /usr/bin/zsh
    $ echo ${0##*/}
    zsh

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

    а по поводу ${STR##*/} смотри parameter-expansions, если кратко то конкретно здесь он служит для выделения имени(краткого) из пути
    Ответ написан
    Комментировать
  • Как сделать, чтобы скрипт прекращался при сочетании клавиш, в GNU/Linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    можно сделать так:
    в самом скрипте в начале добавьте строку:
    echo $$ > /tmp/myscript.pid

    теперь зная PID процесса запущенного скрипта можно легко его прибить командой:
    kill -9 $(cat /tmp/myscript.pid)
    данную команду легко повесить на сочетании клавиш воспользовавшись инструментами графической оболочки которую используете.
    Ответ написан
    Комментировать
  • Как написать команду на bash, переименующую все файлы в каталоге в 0.bmp 1.bmp 2.bmp...?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    eval $(ls |awk '{i++;print "mv "$0" "i".bmp;"}')

    для подстраховки, если в именах есть пробелы то предварительно нужно взять их в кавычки ' (\x27)
    eval $(ls |awk '{i++;print "mv \x27"$0"\x27 "i".bmp;"}')
    Ответ написан
    Комментировать
  • Как найти определенный символ в строке файла и выполнить над этой строкой действие (sh)?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    вариант 1
    awk '/:0$/' file1 > file2

    вариант 2
    awk -F: '$NF==0' file1 > file2
    Ответ написан
    Комментировать
  • Как искать вхождения из списка фраз в linux?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    grep -f файл1 файл2
    файл1 - "В одном файле список слов."
    файл2 - "Во втором большой список строк."

    man grep
    -f FILE, --file=FILE
    Obtain patterns from FILE, one per line. If this option is used multiple times or is combined with the -e (--regexp) option, search for all patterns given. The empty file contains zero patterns, and therefore matches nothing.
    Ответ написан
    Комментировать
  • Как получить вывод в рамке с переносом строк?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Хочу создать рамку вокруг вывода, для этого использую функцию
    msg="# $* #"

    что-то вообще не то

    как вариант размер можно контролировать через column
    MEM="Memory Usage: 277/1983MB (13.97%)"
    HDD="Disk Usage: 5/16GB (35%)"
    CPU="CPU Load: 0.00"
    VAR="$MEM\n$HDD\n$CPU"
    banner() {
    	v="$@"
    	x=$(echo -e "$v" |awk '{if(length>max)max=length}END{for(i=1;i<max+5;i++){printf "#"}}')
    	echo "$x"
    	echo -e "$v" |awk '{print "# "$0" #"}' |column -t -s: -o: |column -t -s'#' -o'#'
    	echo "$x"
    }
    banner "$VAR"

    вывод
    #####################################
    # Memory Usage: 277/1983MB (13.97%) #
    # Disk Usage  : 5/16GB (35%)        #
    # CPU Load    : 0.00                #
    #####################################


    хотя если есть возможность изначально контролировать вид получение MEM, HDD, CPU то будет проще записать данные через тот же csv а его вывод уже форматировать соответствующими программами, например csview

    MEM="Memory,277/1983MB,13.97%"
    HDD="Disk,5/16GB,35%"
    CPU="CPU,0.00,"
    echo -e "$MEM\n$HDD\n$CPU" |csview -H --style Reinforced

    вывод:
    ┏────────┬────────────┬────────┓
    │ Memory │ 277/1983MB │ 13.97% │
    │ Disk   │ 5/16GB     │ 35%    │
    │ CPU    │ 0.00       │        │
    ┗────────┴────────────┴────────┛
    Ответ написан
    3 комментария