Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Вывод screen на вебстраничку

Есть ли способ вывода screen на веб страничку. Желательно, с возможностью отправки команд в нее?
Ответ:
Сообщение от Dmitry
это нечто большее
Ну, в принципе да, соглашусь, скрин сам по себе это утилита, имеющая несколько другое назначение и расширяющая возможности терминала, а не собственно эмулятор терминала, в какой роли её хотят заюзать тут.
Но таки что предлагаете запускать вы, сударь?
Как вариант могу предположить ещё один баш внутри существующей сессии через тот же самый скрин, например.

Вообще, где-то давно в онлайн-тестировании видал и юзал такое, что хочет получить ТС. Только там надо было за отведённое время выполнить некоторый ряд действий и получить конкретный результат. То есть, админы того тренажёра не давали полного контроля над сервером, а эмулировалась виртуалка на время без возможности сделать sudo и получить высшие привелегии. (точнее - это самое sudoничего конкретно не давало).
Тут же челу надо обеспечить и безопасность, и полный контроль машины. У меня, по крайней мере пока в этом направлении мысля.
Одного пароля su будет маловато. И я бы алиасами поменял некоторые имена команд, чтобы дефолтные имена некоторых "потенциально опасных" команд не имели никакого значения или выводили что-нибудь этакое типа подсказки или ответа "Данная функция недоступна".
К примеру
Bash
1
2
alias sudo='echo "This command not supported"'
alias sudo_su='sudo'
чтобы случайно зашедший не смог получить привелегии просто так, а нужно было набирать конкретно другое для выполнения.
Ну да, алиасы тоже надо аналогичным образом скрыть.
Вопрос: Передача вывода команды через конвейер

Здравствуйте!

Помогите, пожалуйста, понять принцип передачи вывода\результата выполнения команды по конвейеру в bash. Вот, например:
Bash
1
2
3
[alexey@Satellite ~]$ echo '123' | tee new_file | > /dev/null
[alexey@Satellite ~]$ cat new_file 
[alexey@Satellite ~]$
Ход выполнения строки 1 я себе представляю так:
Вывод команды 'echo'(символы '123') поступает на вход команды 'tee', которая сначала направляет этот вывод в файл 'new_file', а затем передаёт его дальше по конвейеру(в /dev/null). Но почему же в 'new_file' ничего не записалось? Ведь, по-идее, вывод команды 'echo' должен быть направлен в битоприёмник только после записи в 'new_file'.

Добавлено через 31 минуту

До меня тут вдруг дошло, что написать надо было так:
Bash
1
echo '123' | tee new_file > /dev/null
Но я всё равно не понял, почему в первом случае в 'new_file' ничего не записалось.
Ответ: Alexey104, Небольшая поправка, я перечитала ваше сообщение с первой строчкой
кода и есть что добавить.
Команда tee читает поток из пайпа и синхронно раздваивает его в файл и на стандартный вывод.
Когда вы ставите дальше конвеер то перенаправляете один вывод команды tee со стандартного
выходного потока а конвеер, а второй поток остается направленным в файл, но так как после очередного
конвеера нет команды способной принять информацию то tee работая синхронно с двумя потоками
не передает информацию и в файл тоже.
Вот, думаю понятно и правильно обрисовала работу вашей первой строчки кода. В этом смысл
работы пайпа.

Добавлено через 3 часа 14 минут
volodin661, Создала в заметках памятку, буду исправляться. Спасибо
Вопрос: Отмена перенаправления вывода

Bash
1
2
3
exec >> log 2>&1
echo "вывод в log"
echo "вывод в терминал" >&1
Как заставить второй echo вывести на экран не отменяя общий вывод в лог?
Ответ:
Сообщение от modman
... вывести на экран не отменяя общий вывод в лог?
Bash
1
man tee
Чем-то похож.
Вопрос: Как проверить что поступает в проверку if код возврата или вывод программы

Доброго времени суток форумчане ! Хотел пройти курс в степике , уже второй день не могу решить.....

Мы рассказали, что можно проверить код возврата внешней программы прямо в конструкции if при помощи if `program options arguments` (действия внутри if выполнятся, если программа закончилась с кодом 0). Однако это не всегда правда! Если запуск внешней программы выводит что-то в stdout, то в проверку if поступит именно этот вывод, а не код возврата! Вы можете убедиться в этом, написав простой bash-скрипт с использованием, например, if `pwd`.

Однако как быть, если хочется всё-таки запустить программу program, которая пишет что-то в stdout и потом выполнить какие-то действия если ее код возврата равен 0? Выберите все верные утверждения или правильно работающие конструкции if.

Примечание: во всех вариантах ответов, где есть кавычка, используется именно косая кавычка (`), а не обычная (') или двойная (").
  • Ничего сделать нельзя
  • Сначала запустить program, затем if [[ $? -eq 0 ]]
  • if `program > some_file.txt`
  • Сначала var=`program`, затем if [[ $var -eq 0 ]]
  • if [[ `program` -eq 0 ]]
Ответ: А, поняла!
Вобщем не по тесту прохождения.
Вывод команды в stdin или stderr не влияет на выполнение условий
потому, что оно принимает только возвращаемое значение!
Вопрос: Youtube не отключает screen saver

Посмотрел, что пишут в интернете, но найти решение, которое бы реагировало на запущенный в полном экране flash-плеер не удается.
Ответ: Протестировал lightsOn.sh, на современной версии ОС скрипт, к сожалению, уже не работает. Однако бурного обсуждения вопрос пока не получил. Можно сделать вывод, что поднятая тема не сильно заботит светлые головы членов Сообщества, а значит вопрос как-то решен, или все Caffeine используют?
Вопрос: Вывод bash скрипта в формате JSON

Добрый день!
Обращаюсь за помощью к специалистам.

Задача - сделать отображение состояния бекапов встроенными средствами виртуальной платформы Proxmox через Zabbix.
Ничего готового не нашел. Зато нашел опубликованный пользователем skygge на форуме zabbix.com скрипт: . Скрипт очень хороший, но очень малоинформативный.
После исследования и раздумий принял решение попробовать своими силами и минимальным знанием скриптинга его переделать полноценный шаблон с автоматическим обнаружением виртуалок, и мониторинга состояния бекапа каждой. Если получится, то опубликую на share.zabbix.com.

Проблема: как и ожидал, застрял на выводе результатов в формате JSON, которые нужно передавать в Zabbix.
Вот мой discovery-script на текущем этапе:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
 
# Script for checking ProxMox virtual machines backup. For use in Zabbix. Skygge@2016
 
#Variables
 
backupconfig='/etc/pve/vzdump.cron'
storageconfig='/etc/pve/storage.cfg'
configdir='/etc/pve/local/qemu-server'
 
# Virtual machines
virtualmachines=`find $configdir -type f -name "*.conf" |cut -d "/" -f 6|cut -d "." -f 1`
 
# Backup Configuration for VM's
backupallmachines=`grep '\-\-all' $backupconfig|wc -l`
 
# Check every VM for configured backup
if [ "$backupallmachines" = "0" ]; then
for i in $virtualmachines
do
    backupenabled=1
 
    checkbackup=`grep $i $backupconfig |sed 's/  */ /g'|cut -d "-" -f 1|cut -d " " -f 8-|tr -d "\n"`
    if [ "$checkbackup" = "" ];then
        echo "VM $i is not configured for backups."
        backupenabled=0
    fi
 
    checkbackupenabled=`grep $i $backupconfig | grep "#vzdump" | sed 's/  */ /g'|cut -d "-" -f 1|cut -d " " -f 8-|tr -d "\n"`
    if ! [ "$checkbackupenabled" = "" ];then
        echo "Backup for VM $i is configured, but disabled."
        backupenabled=0
    fi
 
 
echo -e "{\"VM_NUMBER\":\""$i"\", \"BACKUP_STATUS\":\""$i,$backupenabled"\"}"
 
done
fi
(Выводы "echo" оставил пока что сознательно, для траблшутинга. Знаю, что в выводе лишнего быть не должно.)


Вывод сейчас такой:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ./vms_discovery
{"VM_NUMBER":"100", "BACKUP_STATUS":"100,1"}
 
$ sudo ./vms_discovery
{"VM_NUMBER":"106", "BACKUP_STATUS":"106,1"}
{"VM_NUMBER":"103", "BACKUP_STATUS":"103,1"}
{"VM_NUMBER":"101", "BACKUP_STATUS":"101,1"}
 
$ sudo ./vms_discovery
VM 106 is not configured for backups.
{"VM_NUMBER":"106", "BACKUP_STATUS":"106,0"}
{"VM_NUMBER":"103", "BACKUP_STATUS":"103,1"}
VM 101 is not configured for backups.
{"VM_NUMBER":"101", "BACKUP_STATUS":"101,0"}
Вот из этого всего прошу, пожалуйста, помочь мне сделать полноценный JSON. Самое страшное для меня - запятые после блоков данных, которые надо расставить не просто тупо в конце каждой строки, а пропустить последнюю. Вот тут я в лужу сел полностью.

Вот пример вывода, который Zabbix принимает на ура:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
{
        "data":[
 
                {
                        "{#DISKNAME}":"/dev/sda -d sat",
                        "{#DISK_STATUS}":"1,1"
                },
                {
                        "{#DISKNAME}":"/dev/sdb -d sat",
                        "{#DISK_STATUS}":"1,1"
                }
        ]
}
(взято из другого скрипта)

Самое интересное, что тут есть даже готовое решение: , и им можно было бы попробовать воспользоваться. Вот только прикрутить его у меня ума на текущем жизненном этапе не хватает.

Заранее благодарен за помощь!
Ответ: Max Dark,

Не по теме:

ну что и требовалось доказать: вместо скрипта на 20 строк из которых значимых команд: grep, find и цикл получаем одороболо на почти 100 строк...

Вопрос: Как сохранить вывод команд, пользуясь утилитой dd

Здравствуйте. Подскажите, как сохранить вывод 2-х команд: "uname -a" и "cat /pro/version", с помощью утилиты dd в файл.
У меня есть 3 тома: vol1, vol2, vol3
В первый нежно записать файл, содержащий нули, это легко: dd if=/dev/zero of=/mnt/vol1/image.img bs=1M count=128
Однако в 2 других тома нужно записать вывод команд. Пробовал гуглить, никакой по этому поводу информации не нашел.
Подскажите, какими командами, с помощью утилиты dd, можно сохранить вывод команды "uname -a", показывающей версию ядра ОС Linux в файл "Kernel_version" и вывод команды "cat /pro/version", показывающей версию системы в файл "Linux_version"
Ответ:
Bash
1
uname -a | dd of=Kernel_version
"cat /pro/version" - есть подозрение, что вы букву потеряли.
Почитайте про перенаправление в bash, возможно
вас устроит вариант без использования dd
Вопрос: Вывод нулей в начале дробного числа

Добрый день!
В винде есть такой параметр - Языковые настройки/Настройка формата/Вывод нулей в начале числа, а если такой параметр в линуксе?
Как пример вывод в оракловом SQLPLUS, но такая же проблема при выводе данных в текстовый файл.

# sqlplus

SQL> select 0.123 from dual;

0.123
----------
.123

SQL>
Ответ:
MasterZiv
так и обращайтесь к этому стороннему разработчику, в чем проблема?


проблема хотя бы в том, что стартёр топика не владеет терминологией и называет дробным числом
число с плавающей точкой, что безусловно вызовет затруднения при обращении к потустороннему разработчику.
Вопрос: Парсинг вывода команды last - вывод только новых строк

Задача следующая: есть вывод команды последних залогинившихся юзеров

Код Bash
1
2
3
4
5
6
sh-4.1# last
vipnet   pts/3        11.0.7.253       Wed Jun  3 10:07   still logged in
vipnet   pts/1        11.0.0.154       Wed Jun  3 09:28   still logged in
vipnet   pts/2        11.0.0.154       Tue Jun  2 14:45 - 18:59 (0+04:14)
vipnet   pts/1        11.0.7.253       Tue Jun  2 14:35 - 17:58 (0+03:23)
vipnet   pts/1        11.0.7.253       Mon Jun  1 14:42 - 16:13 (0+01:31)
Необходимо составить команду/скрипт, что будет выводить только новые значения. И пусть файл для хранения предыдущих значений хранится в /var/tmp/logins.log.
Ответ: Для общего случая я бы сделал так:

Код Bash
1
2
3
last | sed -n '/^[^ ]*  *[0-9,a-z\/]\{2,\}/s/\(^.* [1-3, ][0-9] \([^ ]\)\{3\} [0-2][0-9]:[0-5][0-9]\) \(.*\)$/\1<------>\3/p; /^$/q' | sort > /var/tmp/logins_now.log
join -v2 -t'<-->' /var/tmp/logins.log /var/tmp/logins_now.log
mv /var/tmp/logins_now.log /var/tmp/logins.log
<------> и <--> - символы табуляции

Дело в том, что во втором столбце могут быть доменные имена, в которых могут быть знаки '-', могут быть записи вообще не относящиеся к залогиненым пользователям.
Работает во всех шеллах, даже в самом правильном(есть всегда по умолчанию во всех системах) - sh.
Вопрос: Вывод сообщений об ошибках (stderr)

Здравствуйте, возник вопрос при выполнении задания. Каким образом можно вывести сообщение об ошибке? Текст задания представлен ниже.

Написать скрипт с использованием цикла for, выводящий на консоль размеры и права доступа для всех файлов в заданном каталоге и всех его подкаталогах (имя каталога задается пользователем в качестве первого аргумента командной строки). Проверить работу программы для каталога/usr.

Вывод сообщений об ошибках должен производиться в стандартный поток вывода сообщений об ошибках (stderr) в следующем виде:
имя_модуля: текст_сообщения.
Пример:
./1.exe :erroropenfile: 1.txt
имя модуля, имя файла берутся из аргументов командной строки

Добавлено через 3 минуты
Bash
1
2
3
4
5
6
7
8
#!/bin/bash
for i in $(find "$1" - type f)
do
    ls -lh "$i" | awk '{print $1, $5, $9}'
    if [-rname_file]
    then -exec printf "./lab1.sh: error open file: "; -exec basename {}; 
    fi
done
В 4 строке выводится информация о файлах. Но вывести информацию об ошибках не получается (строки 5-7). Помогите пожалуйста.
Спасибо.
Ответ: А man ls посмотреть самому не?
Сообщение от ls --help
HTML5
1
2
-h, --human-readable   c -l, печатать размеры в удобном для человека виде (например, 1K 234M 2G)
-l                     использовать широкий формат