- Команда wall в Linux
- Передача сообщения
- Трансляция сообщения из файла
- Передача сообщения группе
- Выводы
- Linux wall command
- Description
- Syntax
- Options
- Examples
- Related commands
- Команда wall в Linux
- Трансляция сообщения
- Трансляция сообщения из файла
- Передача сообщения группе
- Вывод
- Малоизвестные полезные параметры компилятора GCC — часть 2
- Активация вывода предупреждений, не связанных с параметром -Wall
- Активация предупреждений, связанных со сравнениями значений с плавающей точкой
- Оптимальная работа с параметрами командной строки компилятора GCC
- Заключение
Команда wall в Linux
wall — это утилита командной строки, которая отображает сообщение на терминалах всех вошедших в систему пользователей. Сообщения можно вводить либо на терминале, либо в содержимом файла. wall означает запись всех, чтобы отправить сообщение только определенному пользователю, используйте команду write .
Обычно системные администраторы отправляют сообщения об обслуживании и просят пользователей выйти из системы и закрыть все открытые программы. Сообщения отображаются для всех вошедших в систему пользователей с открытым терминалом. Пользователи, использующие графическую среду рабочего стола без открытого терминала, не увидят сообщения. Каждый пользователь может управлять доступом на запись к своему терминалу с помощью утилиты mesg . Когда суперпользователь вызывает wall команду, все пользователи будут получать сообщения, независимо от их mesg настройки.
Передача сообщения
Синтаксис команды wall следующий:
Если файл не указан, wall читает сообщение со стандартного ввода.
Самый простой способ передать сообщение — вызвать команду wall с сообщением в качестве аргумента:
Сообщение будет передано всем пользователям, которые в данный момент вошли в систему.
Чтобы подавить баннер и отображать только —nobanner вами текст для вошедших в систему пользователей, вызовите команду с параметром -n ( —nobanner ):
Если вы хотите писать многострочные сообщения, вызывайте команду без аргумента:
Команда wall будет ждать, пока вы введете текст. Когда вы закончите вводить сообщение, нажмите Ctrl+D чтобы завершить программу и передать сообщение.
Вы также можете использовать перенаправление здесь-строки или перенаправить вывод другой команды на wall . Вот пример, показывающий, как использовать команду echo для трансляции многострочных сообщений:
Трансляция сообщения из файла
Если вы регулярно отправляете одни и те же сообщения, вы можете записать каждое из них в файл, чтобы вам не приходилось повторно набирать один и тот же текст. wall читает из файла только при вызове root.
Чтобы транслировать содержимое файла, вызовите команду wall за которой следует имя файла:
Передача сообщения группе
Чтобы отправить сообщение только членам данной группы, запустите команду с параметром -g ( —group ), за которым следует имя группы. Например, чтобы писать только на терминалах членов группы «devs», вы должны запустить:
Группа также может быть указана по ее GID (идентификатору группы).
Выводы
Команда wall записывает сообщение на терминалы всех пользователей, вошедших в систему.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Источник
Linux wall command
On Unix-like operating systems, the wall command writes a message simultaneously to all other logged-in users.
This page covers the Linux version of wall.
Description
wall displays the contents of file or, by default, its standard input, on the terminals of all currently logged-in users. The command will cut any lines that are over 79 characters to new lines. Short lines are white space padded to have 79 characters. The command always puts carriage return and new line at the end of each line.
Only the super-user can write on the terminals of users who have chosen to deny messages or are using a program which automatically denies messages.
Reading from a file is refused when the invoker is not superuser and the program is suid or sgid.
Syntax
Options
-n, —nobanner | Suppress banner |
-t, —timeout TIMEOUT | Write timeout to terminals in seconds. TIMEOUT must be positive integer. Default value is 300 seconds, which is a legacy from time when people ran terminals over modem lines. |
-V, —version | Display version information and exit. |
-h, —help | Display a help message and exit. |
Examples
Using the sudo command to run wall as the superuser, sends the contents of message.txt to all users.
Related commands
mesg — Control if (non-root) users can send messages to your terminal.
talk — Talk with other logged in users.
write — Send a message to another user.
shutdown — Schedule a time for the system to be powered down.
Источник
Команда wall в Linux
Обычно системные администраторы отправляют сообщения об обслуживании и просят пользователей выйти из системы и закрыть все открытые программы. Сообщения отображаются для всех вошедших в систему пользователей с открытым терминалом. Пользователи, использующие графическую среду рабочего стола без открытого терминала, не увидят сообщения. Каждый пользователь может управлять доступом на запись к своему терминалу с помощью утилиты mesg. Когда суперпользователь вызывает wallкоманду, все пользователи получают сообщения, независимо от их настроек mesg.
Трансляция сообщения
Синтаксис команды wall следующий:
Если файл не указан, сообщение будет прочитано со стандартного ввода.
Самый простой способ передать сообщение – вызвать команду wall с сообщением в качестве аргумента:
Сообщение будет передано всем пользователям, которые в данный момент вошли в систему.
Чтобы увидеть всех вошедших в систему пользователей, выполните команду w или who.
Чтобы подавить баннер и отображать только вводимый вами текст для вошедших в систему пользователей, вызовите команду с параметром -n( –nobanner):
Если вы хотите писать многострочные сообщения, вызывайте команду без аргумента:
Команда wall будет ждать, пока вы введете текст. Когда вы закончите вводить сообщение, нажмите Ctrl+D, чтобы завершить программу и передать сообщение.
Вы также можете использовать перенаправление здесь-строки или перенаправить вывод другой команды в wall. Вот пример, показывающий, как использовать команду echo для трансляции многострочных сообщений:
Трансляция сообщения из файла
Если вы регулярно отправляете одни и те же сообщения, вы можете записать каждое из них в файл, чтобы вам не приходилось повторно набирать один и тот же текст. wall читает из файла только при вызове от имени root.
Чтобы транслировать содержимое файла, вызовите команду wall, за которой следует имя файла:
Передача сообщения группе
Чтобы отправить сообщение только членам данной группы, запустите команду с параметром -g( –group), за которым следует имя группы. Например, чтобы писать только на терминалах членов группы «devs», вы должны запустить:
Группа также может быть указана по ее GID (идентификатору группы).
Вывод
Команда wall записывает сообщение на терминалы всех вошедших в систему пользователей.
Не стесняйтесь оставлять комментарии, если у вас есть вопросы.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Малоизвестные полезные параметры компилятора GCC — часть 2
Оригинал: Uncommon but useful GCC command line options — part 2
Автор: Himanshu Arora
Дата публикации: 1 декабря 2016 г.
Перевод: А.Панин
Дата перевода: 8 февраля 2017 г.
Компилятор GCC поддерживает на первый взгляд бесконечное количество параметров командной строки. Конечно же, никто не использует и не изучает все эти параметры в процессе работы над своим программным обеспечением, но существует ряд параметров, о которых должен, а может быть и обязан знать каждый разработчик. Некоторые из этих параметров могут использоваться достаточно часто, другие — от случая к случаю, что, впрочем, не делает их менее полезными.
В рамках данной серии статей мы рассматриваем некоторые из этих малоизвестных, но полезных параметров командной строки компилятора GCC и уже обсудили пару таких параметров в первой статье.
Если вы помните, в начале первой статьи серии я кратко упоминал о том, что параметр -Wall , который обычно используется разработчиками для генерации предупреждений, не позволяет генерировать некоторые специфические предупреждения. Если вы никогда не слышали об этих предупреждениях и методике их активации, вы можете не волноваться, так как мы подробно обсудим их в рамках данной статьи.
Кроме того, мы также обсудим параметры командной строки компилятора GCC для вывода предупреждений, связанных с переменными с плавающей точкой, а также обратим внимание на оптимальную методику работы с большим количеством параметров командной строки компилятора GCC.
Но перед тем, как перейти к рассмотрению обозначенных выше вопросов, следует упомянуть о том, что все примеры, команды и инструкции из данной статьи были протестированы в системе Ubuntu 16.04 LTS с компилятором GCC версии 5.4.0.
Активация вывода предупреждений, не связанных с параметром -Wall
Хотя параметр командной строки -Wall и сообщает компилятору GCC о необходимости вывода подавляющего большинства предупреждений, некоторые предупреждения не выводятся даже при использовании данного параметра. Для их вывода следует использовать параметр -Wextra .
В качестве примера предлагаю рассмотреть следующий код:
Я случайно разместил символ точки с запятой после условной инструкции if . При последующей компиляции кода с помощью приведенной ниже команды компилятор GCC не выведет каких-либо предупреждений:
А теперь рассмотрим случай использования параметра -Wextra :
В этом случае будет выведено аналогичное предупреждение:
Из приведенного выше текста предупреждения очевидно, что использование параметра командной строки -Wextra привело к активации флага компилятора -Wempty-body , в результате чего был выявлен подозрительный фрагмент кода и выведено соответствующее предупреждение. А это полный список флагов предупреждений, активируемых с помощью рассматриваемого параметра командной строки: -Wclobbered , -Wempty-body , -Wignored-qualifiers , -Wmissing-field-initializers , -Wmissing-parameter-type (только для языка C), -Wold-style-declaration (только для языка C), -Woverride-init , -Wsign-compare , -Wtype-limits , -Wuninitialized , -Wunused-parameter (только при использовании с -Wunused или -Wall ) и -Wunused-but-set-parameter (только при использовании с -Wunused или -Wall ).
Если вас интересуют подробные описания упомянутых флагов, вы можете обратиться к странице руководства компилятора GCC .
Кроме того, параметр командной строки -Wextra позволяет компилятору выводить предупреждения в следующих случаях:
- Указатель сравнивается с целочисленным нулевым значением с помощью оператора или >=.
- Значения из перечисления и не из перечисления встречаются в одной условной инструкции (только в C++).
- Отсутствие виртуального наследования от виртуального базового класса (только в C++).
- Доступ к элементам регистрового массива (только в C++).
- Получение адреса регистровой переменной (только в C++).
- Отсутствие инициализации базового класса в рамках конструктора копирования наследуемого класса (только в C++).
Активация предупреждений, связанных со сравнениями значений с плавающей точкой
Вы можете знать о том, что никогда нельзя осуществлять проверку равенства значений с плавающей точкой (если вы не слышали об этом, вам стоит почитать ответы на часто задаваемые вопросы о сравнении значений с плавающей точкой ). Но если вы случайно осуществите данную операцию, выведет ли компилятор GCC предупреждение или даже сообщение об ошибке? Давайте проверим.
Это код, в котором осуществляется проверка равенства значений переменных с плавающей точкой с помощью оператора == :
А это команда компиляции данного кода с помощью компилятора GCC (содержащая как параметр -Wall , так и параметр -Wextra ):
К сожалению, в процессе исполнения данной команды не будет выведено каких-либо предупреждений, связанных со сравнением значений с плавающей точкой. Быстрый просмотр страницы руководства GCC позволяет обнаружить наличие отдельного параметра командной строки -Wfloat-equal , который должен использоваться в подобных сценариях.
А это команда с данным параметром:
Данная команда позволяет сгенерировать аналогичный вывод:
Как несложно обнаружить, параметр -Wfloat-equal сообщает компилятору GCC о необходимости генерации предупреждения, связанного со сравнением чисел с плавающей точкой.
А это выдержка из описания данного параметра на странице руководства компилятора GCC :
Данная операция нередко используется по той причине, что программисту удобнее считать значения с плавающей точкой бесконечно точными аппроксимацями дробных чисел. Если вы также прибегаете к ней, вам придется вычислить (путем анализа кода или каким-либо другим образом) максимальную или возможную максимальную погрешность расчета и учесть ее в процессе сравнения значений (а также их вывода, но это уже другая операция). По сути, вместо установления равенства значений вам придется установить, пересекаются ли диапазоны этих двух значений; а для этой цели должны использоваться операторы сравнения, поэтому использование оператора равенства является, скорее всего, плохой практикой.
Оптимальная работа с параметрами командной строки компилятора GCC
Если количество параметров командной строки компилятора GCC в вашем проекте стало настолько большим, что вам неудобно ими управлять, вы можете разместить эти параметры в текстовом файле и передать компилятору имя этого текстового файла в качестве параметра командной строки. Для этой цели должен использоваться специальный параметр командной строки @file .
Например, если ваша команда компиляции выглядит следующим образом:
То вы можете разместить три связанных с выводом предупреждений параметра в файле с именем, таким, как gcc-options :
После чего ваша команда компиляции станет более простой и доступной для редактирования:
А это выдержка из описания параметра @file со страницы руководства компилятора GCC:
Чтение параметров командной строки из файла. Параметры читаются и подставляются вместо параметра @file . Если файла с переданным именем не существует или этот файл не может быть прочитан, параметр будет обработан таким же образом, как и все другие параметры, а не удален.
Параметры в файле должны разделяться с помощью символов пробелов. Символ пробела может быть включен в состав параметра путем помещения этого параметра в одинарные или двойные кавычки. Любой символ (включая обратный слэш) может быть включен в состав параметра путем помещения перед этим символом обратного слэша. Сам файл может содержать дополнительные параметры @file ; все эти параметры будут рекурсивно обрабатываться.
Заключение
На данный момент мы рассмотрели пять малоизвестных полезных параметров компилятора GCC: -save-temps , -g , -Wextra , -Wfloat-equal и @file . Потратьте немного своего времени на их испытание и не забудьте прочитать описание каждого из них на странице руководства компилятора GCC.
Вам знакомы другие подобные параметры командной строки компилятора GCC и вы желаете рассказать о них? Вы можете разместить любую информацию об этих параметрах в разделе комментариев.
Источник