Intereting Posts
Как сделать символическую ссылку на / usr / bin / vim, но с параметрами запуска? Скрипт для проверки состояния ntp и синхронизации времени системы Создание локального репозитория yum без rpms Какой инструмент вы используете для монтирования гибкого USB-накопителя с плиткой wm Добавление имени dir в список файлов как идти без ума Заменить файлы с последней измененной датой файлами (или датами) из архива Возможно ли использование ярлыков в среде рабочего стола? Самый короткий способ извлечь последние 3 символа базы (минус суффикс) filename Что произойдет с сеансом сеанса по ssh, когда соединение потеряно? Как переместить кнопки окна на панель 3.16 gnome shell Как я могу сделать bash не соответствовать `.` и` ..` с `. *` Как разрешить аутентификацию с помощью `sudo` с помощью альтернативного пароля? Gnome-Tweak-Tool остановлен, работая в Debian Jessie Когда была изобретена концепция удаленных репозиториев?

двоичные файлы Linux / var / log / wtmp

почему некоторые файлы в двоичном формате Linux? Например, журнал / var / log / wtmp? Точнее, почему журнал в двоичной форме.

Файлы wtmputmp ) относятся к 1970-м годам, и дизайнеры не дали много причин. Вы можете видеть, что учетная информация записи utmp и wtmp использует запись фиксированной длины. Текстовый лог-файл использовал бы больше места на диске и потребовал больше времени для форматирования сообщения, чем просто запись двоичной записи.

Дальнейшее чтение (страницы руководства Unix 6-го издания):

  • utmp – информация о пользователе
  • wtmp – история входа пользователя

Также 1-е издание (там нет wtmp ):

  • / tmp / utmp – информация о пользователе

Есть некоторые преимущества для «записей фиксированного размера». Таким образом, историческая структура записи utmp / wtmp была

 struct utmp { char ut_line[8]; /* tty name */ char ut_name[8]; /* user id */ char ut_host[16]; /* host name, if remote */ long ut_time; /* time on */ }; 

(Это было на машине SunOS 4, я просто выбрал ее, потому что ее легко прочитать).

Это упрощает добавление данных в файл и отображение их в обратном порядке, просто пропуская байты sizeof(struct utmp) . Это облегчает для программ, как в last сообщение в обратном порядке.

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

например, текущая машина FreeBSD имеет:

 struct utmpx { short ut_type; /* Type of entry. */ struct timeval ut_tv; /* Time entry was made. */ char ut_id[8]; /* Record identifier. */ pid_t ut_pid; /* Process ID. */ char ut_user[32]; /* User login name. */ char ut_line[16]; /* Device name. */ #if __BSD_VISIBLE char ut_host[128]; /* Remote hostname. */ #else char __ut_host[128]; #endif char __ut_spare[64]; }; 

Еще одно преимущество utmp и lastlog – возможность иметь разреженные файлы.

Например, с lastlog (который команда finger использует для отображения последнего времени входа в систему) данные хранятся со смещением на основе uid * sizeof(struct lastlog) . Таким образом, вы можете быстро и легко найти последнее время входа для uid 12345678, ища рассчитанную позицию.

С текстовыми файлами эти преимущества не существуют; каждая запись имеет переменную ширину или должна быть дополнена. Результаты больше, сложнее иметь дело, может потребоваться разбор ( long ut_time легче обрабатывать, чем пытаться разобрать строку даты ASCII).

ASCII отлично подходит для людей и для данных, которые люди могут манипулировать. Binary (иногда) лучше для программ, особенно для необработанных данных, которые люди не обязательно должны видеть.