Размер файла устройства (отсутствует в ls -l output)

Когда я пытаюсь распечатать вывод файла устройства, вы увидите двоичные данные в шестнадцатеричном формате. Но после выполнения ls -l /dev/sda я получаю:

brw-rw----  1 root disk      8,   0 Jan 29 12:29 /dev/sda

Я не понимаю, каков фактический размер файла? Что означают эти цифры?

1
задан 31 January 2016 в 10:49

2 ответа

Я не могу найти документацию о том, почему ls показывает их вместо простой 0, например du или stat, но, как говорит байт-коммандер, они являются основными и младшими номерами устройств этого специальный файл. Из источника:

if (f->stat_ok
  && (S_ISCHR (f->stat.st_mode) || S_ISBLK (f->stat.st_mode)))
{
  char majorbuf[INT_BUFSIZE_BOUND (uintmax_t)];
  char minorbuf[INT_BUFSIZE_BOUND (uintmax_t)];
  int blanks_width = (file_size_width
                      - (major_device_number_width + 2
                         + minor_device_number_width));
  sprintf (p, "%*s, %*s ",
           major_device_number_width + MAX (0, blanks_width),
           umaxtostr (major (f->stat.st_rdev), majorbuf),
           minor_device_number_width,
           umaxtostr (minor (f->stat.st_rdev), minorbuf));
  p += file_size_width + 1;
}

Этот код, часть основных и младших номеров устройств , используется, когда выходной формат длинный (который находится с -l), использует номера устройств вместо размера для символьного и блочного устройств.

Чтобы получить фактический размер устройства, в этом Unix & amp; Сообщение Linux.

4
ответ дан 23 May 2018 в 13:53

Кажется, вы пропустили концепцию «все-есть-файл».

В мире UNIX все (данные, устройства, сокеты, ...) сопоставляется с файлом.

В отличие от этих обычных файлов каталог / dev-directory (в случае вашего домашнего каталога) т. е. подразумевается именем - файлами устройства. Поэтому вы найдете файлы типов символов, блоков и труб, представляющих устройства, например. / dev / mem - это файл, представляющий вашу системную память, / dev / ttyACM0 может быть серийным модемом. Связь между этими (device-) файлами и ответственными драйверами создается с использованием основных и второстепенных номеров, как показано в файле ls (и как описано выше).

Размер устройства - это атрибут, специфичный для устройства, и его необходимо запросить с помощью специальных инструментов устройства (как показано в приведенном выше сообщении), потому что нет уникального способа борьбы с этим атрибутом (SSD может иметь фиксированный размер - но последовательный порт может доставлять бесконечный поток данных, поэтому нет фиксированного размера, / dev / null имеет бесконечное хранилище:)).

Вы можете прочитать здесь: https: // en .wikipedia.org / вики / Everything_is_a_file

3
ответ дан 23 May 2018 в 13:53
  • 1
    Очень хорошо, значительно улучшенный ответ :) – Sergiy Kolodyazhnyy 31 January 2016 в 10:23

Другие вопросы по тегам:

Похожие вопросы: