Я попытаюсь ответить на вопрос «Почему каждое устройство в Linux является файлом», специально предназначенное для хранения данных (, так как вопрос берет их в качестве примера ). Также могут быть интересны более подробные ответы -о философии POSIX.
Базовая концепция здесь заключается в том, что практически каждая операция на компьютере по существу сводится к перемещению данных. Данные считываются, преобразуются и записываются. Конечно, в зависимости от того, какое оборудование является источником считываемых данных или целью записи данных, результат в реальном -мире будет совершенно другим.
Исторически популярные устройства для хранения данных (предполагали, что жесткий -диск )управляется драйвером SCSI. Вот почему storage обычно имеет префикс sd
. Затем вам нужно логическое «программное» представление отдельного физического «аппаратного» устройства. Вы просто нумеруете их, начиная с a
. Объединенный жесткий диск -может называться sda
.
Теперь у вас есть "файл", из которого вы можете читать данные, (записывая аналогично ). Если вы прочитаете первый байт из /dev/sda
, вы на самом деле прочитаете байт, который фактически находится в самом начале этого устройства хранения данных (размеры блоков игнорируются для простоты ). Вы можете попробовать это сами, запустив sudo hexdump -C /dev/sda | less
. Конечно, большая часть контента будет тарабарщиной для невооруженного глаза.
Однако, если вы интерпретировали эту тарабарщину, чтобы знать, где начинается раздел, и смонтировать этот раздел,программа (драйвер файловой системы )интерпретирует данные для вас и представляет красивую древовидную -структуру с папками и файлами, из которых вы затем можете считывать данные.
Забавный факт :Это также верно (в различной степени )для других типов устройств (символьных устройств )таких как клавиатуры и мыши (они "производят" данные, которые вы можете прочитать ):sudo hexdump -C /dev/input/mouse0
).
Или основная память.
Или даже графическая память (фреймбуфер ):Мне иногда нравится переключаться на одну из виртуальных консолей (Ctrl+Alt+F1 )и моя видеокарта интерпретирует и отображает случайные числа черезsudo dd if=/dev/urandom of=/dev/fb0 bs=1M count=1