Даже если у нас есть устройство, например, /dev/sdb1
точка монтирования устройства отличается, например, от /media/user/sth
. Теперь я сбит с толку и мне любопытно узнать, какова связь между фактическим именем устройства и точкой монтирования, потому что оба из dev
и /media/user/sth
представляют собой две разные папки в системе.
Итак, почему имя устройства связано с папкой?
TL; DR : поскольку файловая система /dev/
и точка монтирования устройства имеют очень минимальное отношение и различаются по своему назначению.
Цитировать ответ Жиля :
Почти все файлы в / dev являются файлами устройств. В то время как при чтении и записи в обычный файл хранятся данные на диске или в другой файловой системе, доступ к файлу устройства связывается с драйвером в ядре, которое обычно, в свою очередь, связывается с частью аппаратного обеспечения (аппаратное устройство, отсюда и название).
Вы когда-нибудь слышали поговорку «все это файл в * nix»? Ну, вот как работает /dev
файловая система - она позволяет вам иметь «файл», представляющий конкретную часть оборудования, подключенного к вашему компьютеру. Если у вас подключена мышь, например, она будет отображаться как /dev/input/mouse0
; если у вас подключен жесткий диск, он, скорее всего, будет отображаться как /dev/sd<LETTER><NUMBER>
(и следует отметить, что обычно он используется для представления блочных устройств, которые позволяют считывать данные в блоках с некоторым количеством байтов и обычно использовать протокол SCSI, хотя для новых накопителей NVM может отображаться как /dev/nvme0n1
).
И с такими устройствами можно взаимодействовать. Обычно люди делают резервные копии с dd if=/dev/sda1 of=/dev/sdc1
или чем-то длинным. Если у вас есть Arduino или Raspberry Pi, подключенные через последовательный порт, они будут отображаться как последовательные консоли /dev/ttyUSB0
или /dev/ttyACM0
, и вы можете записывать в них байты для связи с устройством, хотя более практичным является использование чего-то вроде screen
или byobu
или PuTTY
программного обеспечения. Но это все - вы не можете просто просматривать файлы на устройстве простым способом.
Файловая система - это способ организации данных на запоминающем устройстве некоторой формы. И есть много файловых систем . Если у вас есть жесткий диск от Mac, данные были организованы на этот диск с файловой системой HPFS или APFS; если он прибывает из Windows - это может использовать файловую систему NTFS; если это происходит из Linux - обычно это будет форма файловой системы ext
; BSD или Solaris могут использовать zfs
, и так далее, и так далее. Вы даже можете смонтировать ISO-файл резервной копии и связать его с папкой. Все они имеют свои преимущества, но основная идея заключается в том, что данные организованы определенным логическим образом и позволяют пользователю работать с отдельными файлами, а не с байтами или блоками данных. И общая черта состоит в том, что все файловые системы должны иметь точку монтирования, логический корень дерева файловых систем папок и файлов.
И вот тут-то и появляется /dev
. На самом деле /dev
- это виртуальная файловая система, смонтированная в папке /dev
, в том смысле, что она существует только во время работы вашей машины; как только вы закроете, все в этом каталоге исчезнет. То же самое с каталогами /proc
и /sys
- представления процессов и физических устройств существуют только для времени работы системы. Вот почему вы не можете сделать /dev
точкой монтирования для вашего USB-накопителя или жесткого диска - это уже точка монтирования для чего-то другого, и, кроме того, это нарушит иерархию файловой системы Unix стандарта.
Хотя можно создать каталог в /dev/my_mountpoint
и смонтировать там жесткий диск (с правами root), но он избыточен и соответствует уже упомянутому стандарту иерархии файловой системы Unix.
Мы могли бы сравнить веб-сайты и диски. С веб-сайтом у вас есть набор ссылок на определенные страницы. Но технически сайт представляет собой набор данных, хранящихся где-то на сервере. Та же идея здесь - /dev/sda1
может содержать данные и файлы, но точка монтирования позволяет вам логически взаимодействовать с этими вещами, и, зная путь к файлу, вы можете легко перейти к нему так же, как со ссылками на веб-сайте, к которому вы переходите страницы, которые вам нужны.
С технической точки зрения точка монтирования и устройство управляются несколькими файлами. /etc/fstab
позволит вам указать устройство ( либо по ссылке /dev
, либо по номеру UUID), а также к тому, где его монтировать во время загрузки. /etc/mtab
, /proc/mounts
, /proc/self/mountinfo
и /proc/self/mountstats
скажут вам, где устройства в настоящее время установлены. Теперь в Ubuntu графический интерфейс пользователя допускает автоматическое монтирование (в прошлом это был Unity, а теперь GNOME, но в любом случае этим все еще нужно было управлять с помощью той же схемы GSettings ). Это, в свою очередь, взаимодействует с системой UDisks2
, которая затем подключает ваш USB или жесткий диск к папке /media
; другими словами, имеется программное обеспечение, которое автоматически связывает ваш USB-накопитель с точкой монтирования.
Следует также отметить, что некоторые программы, такие как df
, могут работать только на смонтированных файловых системах, т. Е. df
покажет использование только для тех дисков и разделов, которые смонтированы. Напротив, во многих случаях желательно, чтобы файловая система была размонтирована для утилиты проверки файловой системы fsck
или утилит parted
/ Gparted
(поскольку они используются для изменения размера, а изменение размера смонтированного раздела может привести к потере данных). Такие утилиты, как findmnt
, позволят вам найти, где монтируется конкретное устройство (которое я лично использую в своей подсказке оболочки, чтобы узнать, на каком дисководе я сейчас работаю).
Вероятно, это все еще не имеет большого смысла, и это понятно. Скажем так, это конвенция. Не обязательно вещь Unix, потому что Windows делает это аналогичным образом , с похожей терминологией. Это просто то, как строятся компьютеры и что имело значение для инженеров, когда они проектировали системы много лет назад. Но эй - это работает, верно?