Как mikemaccana примечания, журнал systemd является теперь стандартным устройством журналирования для большинства дистрибутивов. Просмотреть stdout
и stderr
из systemd единицы используют journalctl
команда.
sudo journalctl -u [unit]
Исходный ответ
По умолчанию stdout
и stderr
из systemd единицы отправляются в системный журнал.
При использовании полного systemd это будет доступно через journalctl
. На Fedora это должно быть /var/log/messages
но системный журнал поместит его, где в Ваших правилах говорится.
Из-за даты сообщения, и принимающий большинство людей, которые подвергаются systemd, через мягкую фетровую шляпу, Вы были, вероятно, поражены ошибкой, описанной здесь: https://bugzilla.redhat.com/show_bug.cgi? id=754938 Это имеет хорошее объяснение того, как все это работает также =) (Это было ошибкой в selinux-политике, которая заставила сообщения об ошибках не быть зарегистрированными, и был зафиксирован в selinux-policy-3.10.0-58.fc16
)
При поиске способа проверить из сценария можно сделать любой из них:
tput cols
и tput lines
, поскольку manatwork предлагаетНо если Вы хотите детали, здесь мы идем:
Для виртуальных терминалов (xterm, и др.) существует ioctl()
системный вызов, который скажет Вам, каков размер окно. Если это может, less
использование этот вызов. Кроме того, когда Вы изменяете размер окна, независимо от того, что работает в том окне, получает a SIGWINCH
сигнал, который позволяет less
знайте, что это должно проверить на новый размер окна. Например, я запустил a less
выполнение (как идентификатор 16663 процесса), подключенный к нему с strace
, и измененный окно. Это - то, что я видел:
$ strace -p 16663
Process 16663 attached - interrupt to quit
read(3, 0xbfb1f10f, 1) = ? ERESTARTSYS (To be restarted)
--- SIGWINCH (Window changed) @ 0 (0) ---
rt_sigaction(SIGWINCH, {0x805cf10, [WINCH], SA_RESTART}, {0x805cf10, [WINCH], SA_RESTART}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig -icanon -echo ...}) = 0
ioctl(1, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
ioctl(2, TIOCGWINSZ, {ws_row=40, ws_col=80, ws_xpixel=0, ws_ypixel=0}) = 0
Это также что tput cols
и tput lines
сделайте негласно, если они могут. Для большего количества информации об этом методе посмотрите man tty-ioctl
и поиск TIOCGWINSZ.
Для других терминалов, таких как подключенные к последовательным портам, тем не менее, нет никакого способа получить эту информацию непосредственно. В этом случае, less
начинает искать подсказки в переменных среды.
LINES
и COLUMNS
будет часто устанавливаться на терминальные размеры. На самом деле, если bash
или zsh
может найти терминальные размеры, это автоматически установит эти переменные само, чтобы помочь not-so-clever программам видеть терминальный размер. Однако большинство других оболочек, включая dash
и tcsh
, не устанавливайте эти переменные.TERM
обычно устанавливается на терминальный тип, в этом случае terminfo база данных может содержать ожидаемый размер терминала. Если tput rows
не может использовать IOCTL (например, если Вы будете соединены по последовательному порту), то он отступит к значениям, зарегистрированным здесь. Для терминала, размер которого может измениться, это - только предположение и, вероятно, будет неправильно.Для большего количества информации посмотрите man tput
чтобы команда управляла терминалом, и man terminfo
для списка вещей можно сказать терминалу делать.
Если Вы будете смотреть на исходный код, то Вы будете знать less
вызовы ioctl()
получать размер окна на Linux.
#ifdef TIOCGWINSZ
{
struct winsize w;
if (ioctl(2, TIOCGWINSZ, &w) == 0)
{
if (w.ws_row > 0)
sys_height = w.ws_row;
if (w.ws_col > 0)
sys_width = w.ws_col;
}
}
#else
#ifdef WIOCGETD
{
struct uwdata w;
if (ioctl(2, WIOCGETD, &w) == 0)
{
if (w.uw_height > 0)
sys_height = w.uw_height / w.uw_vs;
if (w.uw_width > 0)
sys_width = w.uw_width / w.uw_hs;
}
}
#endif
Я не уверен, является ли это информацией, которую Вы ищете. Я предполагаю less
регистрирует обработчик сигналов для SIGWINCH
. Когда размер терминальных изменений, это получает a SIGWINCH
предупредите и зондируйте tty информацию для текущего размера терминала. http://www.gnu.org/software/libc/manual/html_node/Miscellaneous-Signals.html