• Как сравнить значения в строках вывода и по условию выполнить скрипт?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    [[ $(sensors | awk '/Core/{i+=$3}END{print i/NR}') > 60 ]] && ./script.sh

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

    если вам всё же нужно не средняя а температура любого из ядер, то это довольно просто:
    [[ $(sensors | awk '/Core/{print $3}') > 60 ]] && ./script.sh

    при первом совпадении скрипт сработает
    Ответ написан
    Комментировать
  • Как с помощью цикла while, команды dig вывести в файл ips.txt A-записи домена, после чего на следующей строке PTR-запись IP?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    здесь можно обойтись и простым однострочником:
    dig +short vk.com |xargs -tI{} dig -x {} +short 2>&1|awk '/^dig /{print $3}!/^dig /'
    Ответ написан
    2 комментария
  • Как сделать возможным вывод программы в консоль?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    если нужно в динамике - одновременно выводить на консоль, писать в файл и тут же сразу построчно анализировать поступающую информацию, то тут чуть сложнее, хоть и не немного, вот небольшой пример:
    работа через файл
    #!/usr/bin/env bash
    
    # функции бот1 и бот2 которые постоянно выводят рандомно числа от 0 до 9 с интервалом в 2 секунды
    bot1(){
    	while true; do
    		echo "Bot1: $[RANDOM%10]"
    		sleep 2
    	done
    }
    
    bot2(){
    	while true; do
    		echo "Bot2: $[RANDOM%10]"
    		sleep 2
    	done
    }
    
    # путь к лог-файлу куда будем писать логи от ботов
    LOG=/tmp/botsLog.txt
    
    # удаляем лог-файл (если ненужно то закоментирвоать)
    rm -rf $LOG
    
    # запускаем ботов в фоновом(&) режиме, 
    # а также начинаем выводит поступающую от них информацию на консоль и писать в общий лог-файл
    bot1 | tee -a $LOG &
    sleep 1
    bot2 | tee -a $LOG &
    
    # функция анализа лог-файла (потока)
    analysisLogs() {
    	# запускаем постоянное построчное чтение поступающих данных в функцию
    	while read -r data; do
    		# здесь мы задаём фильтры и то что выполнить если совпадёт условие
    		case "$data" in
    			"Bot1: 0" ) echo "Бот 1 выдал ноль"
    				;;
    			"Bot2: 0" ) echo "Бот 2 выдал ноль"
    				;;
    		esac
    	done
    }
    
    # tail выводит поступающие данные по мере роста лог-файла (мониторит)
    # в данном случае мы передаём появляющиеся данные из файла в функцию analysisLogs
    tail -f $LOG | analysisLogs 
    
    # это необходимо чтобы главная программа преждевременно не завершилась 
    # пока не завершаться запущенные в ней фоновые(&) потоки
    wait
    
    exit

    с комментариями думаю будет понятней
    ctrl+c завершить скрипт

    можно конечно и через переменную сделать но это будет не так красиво да и не по феншую, кстати здесь мы пишем в ОЗУ так как /tmp у большинства дистрибутивов примонтирован в оперативной памяти.

    Если же не хочется вообще писать данные на диск или в озу, так как логи обычно склонны к накоплению если их не чистить да или просто ненужны, то можно просто использовать именованный канал(FIFO-файлы) с которым можно работать как с файлом(читать/писать) но при этом он будет выступать просто в роли промежуточного буфера, для этого в нашей программе нужно поменять всего две строчки(создать именованный канал и вместо tail использовать обычный cat )
    работа через fifo-файл
    #!/usr/bin/env bash
    
    # бот1 и бот2 просто постоянно выводят рандомно числа от 0 до 9 с интервалом в 2 секунды
    bot1(){
    	while true; do
    		echo "Bot1: $[RANDOM%10]"
    		sleep 2
    	done
    }
    
    bot2(){
    	while true; do
    		echo "Bot2: $[RANDOM%10]"
    		sleep 2
    	done
    }
    
    # путь к лог-файлу куда будем писать логи от ботов
    LOG=/tmp/botsLog.txt
    
    # удаляем лог-файл
    rm -rf $LOG
    
    # создаём именованный канал (FIFO-файл)
    mkfifo $LOG
    
    # запускаем ботов в фоновом(&) режиме, 
    # а также начинаем выводит поступающую от них информацию на консоль и писать в общий fifo-файл
    bot1 | tee -a $LOG &
    sleep 1
    bot2 | tee -a $LOG &
    
    # функция анализа поступающих данных
    analysisLogs() {
    	# запускаем постоянное построчное чтение поступающих данных в функцию
    	while read -r data; do
    		# здесь мы задаём фильтры и то что выполнить если сработает условие
    		case "$data" in
    			"Bot1: 0" ) echo "Бот 1 выдал ноль"
    				;;
    			"Bot2: 0" ) echo "Бот 2 выдал ноль"
    				;;
    		esac
    	done
    }
    
    # читаем файл(FIFO-файл) и передаём появляющиеся данные в функцию analysisLogs
    cat $LOG | analysisLogs 
    
    # это необходимо чтобы главная программа преждевременно не завершилась 
    # пока не завершаться запущенные в ней фоновые(&) потоки
    wait
    
    exit
    Ответ написан
    1 комментарий
  • Почему VScode не видит node.js на линукс?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    При попытке запустить код через VScode, вылазит ошибка, молв не может найти путь к node.

    вы что-то не то делаете, может вы ноду по какому-то специфическому пути поставили и в PATH путь не прописали, хотя если делать по стандарту всё должно завестись из коробки.

    $ sudo pacman -S node
    $ whereis node
    node: /usr/bin/node /usr/include/node /usr/share/man/man1/node.1.gz


    ссылки по теме:
    archwiki Node.js
    vscode integrated terminal
    Node.js tutorial in Visual Studio Code
    Ответ написан
    Комментировать
  • Как и куда bash убирает элемент массива?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    в простом случае:
    $ x='test1 test2'
    $ y=($x)
    $ echo ${y[0]} И ${y[1]}
    test1 И test2


    если же, например, у нас разделитель перевод строки то:
    $ x='test 1
    test 2'
    $ q="$IFS";IFS=$'\n';y=($x);IFS="$q"
    $ echo ${y[0]} И ${y[1]}
    test 1 И test 2
    Ответ написан
  • Как попасть в папку загрузок через консоль?

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

    откуда такие выводы ?
    вы ввели команду shell и попали в домашний каталог текущего пользователя chronos
    для справки:
    cd $HOME
    также должен перенести в папку текущего пользователя
    знак "~" также указывает на домашнюю директорию пользователся

    в последнем скриншоте после команды ls как раз и выводится содержимое домашней папки пользователя и как видно там есть папка Downloads, вот в неё и переходите раз вам нужно попасть в папку загрузок через консоль
    cd Downloads
    ну или из любого места
    cd $HOME/Downloads
    аналог:
    cd ~/Downloads
    Ответ написан
    7 комментариев
  • Unix time VS Epoch time?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    ничем, это одно и тоже
    из вики:
    Unix time (also known as Epoch time, Posix time, seconds since the Epoch, or UNIX Epoch time) is a system for describing a point in time. It is the number of seconds that have elapsed since the Unix epoch, minus leap seconds; the Unix epoch is 00:00:00 UTC on 1 January 1970 (an arbitrary date); it is nonlinear with a leap second having the same Unix time as the second before it, and every day is treated as if it contains exactly 86400 seconds. Due to this treatment Unix time is not a true representation of UTC.
    Ответ написан
    Комментировать
  • Как присвоить значение элемента строкового массива в bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    можно загнать строки из файла в массив намного проще:
    x="$IFS";IFS=$'\n';array=(`cat array.list`);IFS="$x"


    если брать конкретно ваш вариант то можно использовать опцию lastpipe чтобы выполнить последнюю команду конвейера в текущей оболочке:
    i=1
    shopt -s lastpipe
    cat array.list | while read str
    do
       array["$i"]="$str"
       i=$(($i+1))
    done
    shopt -u lastpipe
    echo ${array[@]}
    Ответ написан
    Комментировать
  • Как брать инфу по id с кинопоиска?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    но не получается получить список актёров,режиссёра и кол-во серий. Подскажите, что я делаю не так?
    во первых укажите используемый язык в тегах к вопросу, во вторых дублирование своего вопроса(уже третий) плохой тон и обычно карается модераторами, в третьих всю необходимую информацию можно посмотреть в документации

    ради интереса сделал себе скрипт для вывода информации на консоль
    может кому еще сгодится
    #!/usr/bin/env bash
    set -o errexit
    
    BASE_URL="https://kinopoiskapiunofficial.tech/api"
    API_KEY="05e15730-5d36-4a7b-9cb8-1a9034ed276c"
    KEYWORD=$(echo "$@" | jq -Rr '@uri')
    
    # получаем список фильмов по ключевому слову
    get_keyword=$(curl -s -X GET "$BASE_URL/v2.1/films/search-by-keyword?keyword=$KEYWORD&page=1" -H "accept: application/json" -H "X-API-KEY: $API_KEY")
    
    # запоминаем id выбранного фильма
    FilmID=$(echo "$get_keyword" | jq -r '.films[] | "\(.filmId);\(.year);\(.nameRu);\(.nameEn)"' | column -t -s';' | sk | awk '{print $1}')
    [[ "$FilmID" == "" ]] && exit
    
    
    # получаем данные о фильме по его id
    get_film_data=$(curl -s	-X GET "$BASE_URL/v2.1/films/$FilmID" -H "accept: application/json" -H "X-API-KEY: $API_KEY")
    
    echo
    echo "$get_film_data" | jq -r '.data | "\t*** \(.nameRu) (\(.year)) ***"'
    echo "$get_film_data" | jq -r '.data | "\t    [ \(.nameEn) ]"'
    echo
    echo
    echo "             О фильме"
    echo =====================================================
    x="Год производства;"$(echo "$get_film_data" | jq -r '.data.year')
    x=$x"\nСтрана;"$(      echo "$get_film_data" | jq -r '.data.countries[].country' | sed -z 's/\n/, /g' | sed 's/..$//')
    x=$x"\nЖанр;"$(        echo "$get_film_data" | jq -r '.data.genres[].genre' | sed -z 's/\n/, /g' | sed 's/..$//')
    x=$x"\nВремя;"$(       echo "$get_film_data" | jq -r '.data.filmLength' | awk -F: '{print $1*60+$2" минут / "$0}')
    echo -e "$x" | column -t -s';'
    echo
    echo
    echo
    
    
    echo "             Описание"
    echo =====================================================
    echo "$get_film_data" | jq -r '.data.description' | par -w 60d
    echo
    echo
    echo
    
    
    echo "             Эпизоды"
    echo =====================================================
    echo "$get_film_data" | jq -r '.data.seasons[].episodes[] | "\(.seasonNumber);\(.episodeNumber);\(.nameRu);\(.nameEn)"' | column -t -s';'
    echo
    echo
    echo
    
    
    # получаем информацию о людях работавших над фильмом
    get_staff=$(curl -s	-X GET "$BASE_URL/v1/staff?filmId=$FilmID" -H "accept: application/json" -H "X-API-KEY: $API_KEY")
    
    
    echo "             Над фильмом работали"
    echo =====================================================
    echo "$get_staff" | jq -r '.[] | "\(.professionText);\(.nameRu);\(.nameEn)"' | column -t -s';'
    echo
    echo
    echo
    
    exit

    для запуска нужно передать в скрипт ключевое слово(фразу) по которой с сервера будет запрошена информация по совпадающим фильмам, после чего выдаст список в котором клавишами(верх, низ) выбираем нужный фильм.
    При выборе фильма с сервера автоматом запросится его id и выдаст структурированную информацию по фильму, его описанию, эпизодах и актёрах
    для работы помимо bash необходимы утилиты curl, skim, jq, par.
    Ответ написан
  • Можно ли подставить имя файла из ls?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    не совсем понятна задача
    не можете скопировать мышкой и не работает автодополнение ?
    узнаём номер нужной строки:
    ls -A1 | nl'
    если нужны только видимые(без точки в начале имени) файлы то можно упустить ключ A
    выводим строку по её номеру:
    ls -A1 | awk 'NR==7'
    где 7 это пример номера строки с нужным именем файла выданный с помощью команды ls, ставим свой номер.
    при желании можно завернуть это в переменную и просто вставлять где нужно:
    f=$(ls -A1 | awk 'NR==7')
    далее уже можно будет оперировать этой переменной, например:
    rm "$f"

    п.с.
    если нужно больше интерактива то можно воспользоваться утилитой skim(sk) или fzf
    f=$(ls | fzf)
    для скрытых файлов добавить ключ -A
    даст возможность выбрать нужный файл клавишами(верх, низ), а затем(Enter) передать его в переменную.
    ну а дальше уже оперируем переменной f
    Ответ написан
    Комментировать
  • Резервное копирование и восстановление etx4 возможно только в посекторном режиме?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Статься на Хабре прям для вас: Копирование разделов жёсткого диска средствами GNU/Linux: как обойтись загрузочной флешкой там, где раньше нужен был Акронис.
    Ответ написан
    Комментировать
  • Как подключиться к локальному юзеру Linux через filezilla?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    поднимите ssh-сервер на локальном компьютере
    а в поле Нost ведите 127.0.0.1 или localhost или ваш IP адрес выданный DHCP роутера(если есть)
    Ответ написан
  • Awk, как объединить столбцы при передаче в shell?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{z="date -d \""$4" "$5"\" \"+%s\""; z | getline z; print z}'
    1565817878

    ну или вывести в самой строке
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{z="date -d \""$4" "$5"\" \"+%s\""; z | getline z; $4=z;$5="";print}'
    a1 a2 a3 1565817878  a6 ...

    немного покороче
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{"date -d \""$4" "$5"\" \"+%s\""|getline $4;$5="";print}'
    a1 a2 a3 1565817878  a6 ...


    upd. (исправление)
    $ echo "a1 a2 a3 15-Aug-2019 00:24:38 a6 ..." | awk '{"date -d \""$4" "$5"\" \"+%s\"" | getline z; $4=z;$5="";print}'
    a1 a2 a3 1565817878  a6 ...
    Ответ написан
    4 комментария
  • Какой лучше использовать тип архива gz или bz2?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    для сохранения прав можно запрячь rsync или tar а для сжатия лучше xz
    как пример https://wiki.archlinux.org/title/Rsync#Full_system...
    Ответ написан
  • Как использовать регулярные выражения в цикле консоли Линукс?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Или есть более простой способ, чтобы сохранить картинки в новой папке?

    cp $(cat images_file) --target-directory="new_path/"
    Ответ написан
    Комментировать
  • Как найти файлы, у которых в содержимом встречаются 2 слова?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    grep --max-count=1 -z -l "СЛОВО1.*СЛОВО2" ФАЙЛ1 ФАЙЛ2 ...
    Ответ написан
    1 комментарий
  • Как открыть плеер vlc из bash?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Дано:
    "пару прямых ссылок на аудио и видеопоток 1080p из youtube" ,
    полученных через youtube-dl -g

    с чего вы взяли что там будет 1080p ?)
    возможные отдачи форматов можно глянуть так:
    $ youtube-dl --list-formats "https://www.youtube.com/watch?v=fTMXYj_a0Wo"

    spoiler

    [youtube] fTMXYj_a0Wo: Downloading webpage
    [info] Available formats for fTMXYj_a0Wo:
    format code extension resolution note
    249 webm audio only tiny 51k , webm_dash container, opus @ 51k (48000Hz), 2.13MiB
    250 webm audio only tiny 71k , webm_dash container, opus @ 71k (48000Hz), 3.00MiB
    251 webm audio only tiny 128k , webm_dash container, opus @128k (48000Hz), 5.39MiB
    140 m4a audio only tiny 129k , m4a_dash container, mp4a.40.2@129k (44100Hz), 5.41MiB
    394 mp4 256x144 144p 62k , mp4_dash container, av01.0.00M.08@ 62k, 30fps, video only, 2.60MiB
    160 mp4 256x144 144p 73k , mp4_dash container, avc1.4d400c@ 73k, 30fps, video only, 3.08MiB
    278 webm 256x144 144p 82k , webm_dash container, vp9@ 82k, 30fps, video only, 3.46MiB
    395 mp4 426x240 240p 116k , mp4_dash container, av01.0.00M.08@ 116k, 30fps, video only, 4.85MiB
    133 mp4 426x240 240p 121k , mp4_dash container, avc1.4d4015@ 121k, 30fps, video only, 5.08MiB
    242 webm 426x240 240p 142k , webm_dash container, vp9@ 142k, 30fps, video only, 5.96MiB
    396 mp4 640x360 360p 225k , mp4_dash container, av01.0.01M.08@ 225k, 30fps, video only, 9.40MiB
    134 mp4 640x360 360p 238k , mp4_dash container, avc1.4d401e@ 238k, 30fps, video only, 9.96MiB
    243 webm 640x360 360p 250k , webm_dash container, vp9@ 250k, 30fps, video only, 10.46MiB
    135 mp4 854x480 480p 369k , mp4_dash container, avc1.4d401f@ 369k, 30fps, video only, 15.44MiB
    244 webm 854x480 480p 379k , webm_dash container, vp9@ 379k, 30fps, video only, 15.87MiB
    397 mp4 854x480 480p 386k , mp4_dash container, av01.0.04M.08@ 386k, 30fps, video only, 16.13MiB
    136 mp4 1280x720 720p 606k , mp4_dash container, avc1.4d401f@ 606k, 30fps, video only, 25.36MiB
    247 webm 1280x720 720p 667k , webm_dash container, vp9@ 667k, 30fps, video only, 27.90MiB
    398 mp4 1280x720 720p 798k , mp4_dash container, av01.0.05M.08@ 798k, 30fps, video only, 33.36MiB
    18 mp4 640x360 360p 639k , avc1.42001E, 30fps, mp4a.40.2 (44100Hz), 26.72MiB
    22 mp4 1280x720 720p 740k , avc1.64001F, 30fps, mp4a.40.2 (44100Hz) (best)

    где видно что для данного видео 1080p нету и в помине )
    к сведению youtube-dl по умолчанию всегда берет best
    то есть в данном случае это будет как раз 720p
    $ youtube-dl --list-formats "https://www.youtube.com/watch?v=fTMXYj_a0Wo" | grep best
    22           mp4        1280x720   720p  740k , avc1.64001F, 30fps, mp4a.40.2 (44100Hz) (best)

    при желании можно выбрать нужный формат вручную, например для данного видео mp4 480p:
    youtube-dl --format="397+bestaudio" -g "https://www.youtube.com/watch?v=fTMXYj_a0Wo"

    где 397 это номер потока из --list-formats
    также указываем +bestaudio так как поток 397 идет только как video only поэтому говорим что нужно прицепить к данному видео еще и аудиодорожку с наилучшим качеством

    но чтобы каждый раз не мучатся и не искать подходящий формат или не отдавать на волю случая(то что гугл считает за best) можно просто прописать в формате необходимые условия, например:
    youtube-dl --format="bestvideo[height<=?1080]+bestaudio" -g "https://www.youtube.com/watch?v=fTMXYj_a0Wo"

    будет брать(из --list-formats) видео максимально близко к расширению(высота) 1080 (равным или меньше)
    можно даже указывать кодеки и fps а также через слэшь(/) указывать дополнительные условия, например:
    youtube-dl --format="bestvideo[height<=?1080][vcodec^=h264]+bestaudio/best[height<=?1080]/best" -g "https://www.youtube.com/watch?v=fTMXYj_a0Wo"

    первое условие
    bestvideo[height<=?1080][vcodec^=h264]+bestaudio
    высота меньше или равна 1080 и кодек h264 (хорош для слабого железа так как есть поддержка железа даже в утюге в отличии от новомодных av1, vp9 ...)
    далее второе условие если не сработало первое
    best[height<=?1080]
    то есть если нету с кодеком h264 то грузить с любым но тока если есть разрешение 1080 или меньше
    также просто best включает в себя как bestvideo так и bestaudio

    п.с.
    Попробовал youtube-dl + MPV плеер.
    Работает по умолчанию, без танцев с бубном. )))

    чтобы в mpv не вводить каждый раз формат можно в конфиге mpv.conf указать нужные значения в переменной
    ytdl-format="...."
    у ytdl-format такой же формат как и описанный выше для ключа --format

    п.с.2
    если пользуетесь firefox то поставьте это расширение
    позволит запускать плеер(mpv?) просто выбрав в контекстном меню(правый клик мыши на ютуб-ссылке), чертовски удобно
    Ответ написан
  • Нужно открыть youtube в плеере VLC, в чём ошибка?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    погляжу народ обожает трудности
    x=($(youtube-dl -g https://www.youtube.com/watch?v=yfHQCNPTios)) && vlc ${x[0]} --input-slave ${x[1]}


    Чтобы открыть youtube 1080p в плеере VLC

    для этого нужно выставить нужные параметры в ключе --format
    x=($(youtube-dl -g --format="bestvideo[height<=?1080]+bestaudio" https://www.youtube.com/watch?v=yfHQCNPTios)) && vlc ${x[0]} --input-slave ${x[1]}

    подробнее об этом написал тебе в твоём предыдущем вопросе

    для mpv будет проще:
    mpv --ytdl-format="bestvideo[height<=?1080]+bestaudio" https://www.youtube.com/watch?v=yfHQCNPTios
    Ответ написан
    23 комментария
  • Как правильно устанавливать linux с двумя жёсткими дисками?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    как люди любят себе усложнять жизнь )
    lvm, btrfs, zfs, рейды, 100500 разделов ... брр
    ставьте на nvme одни(/) раздел (или два[+ /boot] если у вас UEFI), не отделяя хомяк в отдельный раздел
    а на ssd можно будет скидывать тяжелые файлы - фильмы, музыка, виртуальные машины и др., а также бекап важных данных с nvme
    По поводу рут и Хоум на nvme - это же очень много для системы и кофигов. 90% будет пустовать на этом диске.

    не страшно, во первых, хомяк со временем растёт, во вторых чем больше свободного места тем дольше прослужит ваш nvme, так как данные не перезаписываются сразу по месту как в hdd, а "равномерно дописываются" на свободное место.
    В общем если кратко, как лучше спроектировать дисковое пространство с точки зрения перспективы безгеморойной переустановки в будущем?

    легко, копируете папку с вашим пользователем(что в хомяке) на ssd, накатываете на nvme новую систему по тому же принципу, копируете папку пользователя обратно, создаёте пользователя указав эту папку как его хом попутно при необходимости рекурсивно меняем права(chown -R ...) в данной папке на нужные.
    ну и вроде всё.

    п.с.
    вместе с диском докупил ещё планку памяти

    раз ОЗУ у вас с избытком то чтобы меньше мучать диск можно в fstab добавить параметр commit=60 что позволит системе производить запись на диск раз в минуту держа эти данные в памяти, в принципе можно и больше, у себя например довел до двух минут и вроде пока нормально.
    Ответ написан
    5 комментариев
  • Как проверить версию GCC в составе дистрибутива Ubuntu последней desktop версии?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    Ответ написан
    Комментировать