根据我的最后一个问题我认为我们不能使用“cp”将文件复制到磁带设备或“/dev/lp0”等设备。但我仍然不明白为什么。
为了使这个问题足够简单,只需告诉我是否命令“cp”只能在块设备上使用?
答案1
一种思考方式是将这些事物视为不同的设备类型。 “cp”仅知道如何将文件复制到有限数量的设备类型或从有限数量的设备类型复制文件。最常用的存储文件的设备是磁盘驱动器。 “cp”知道如何将文件复制到磁盘驱动器以及从磁盘驱动器以及有限的一组其他设备(例如 /dev/tty)复制文件。
在磁带、CD 或打印机之间写入和读取数据,或者通过网络向另一台计算机写入和读取数据,需要了解这些设备如何工作的专业知识。
每次添加新设备类型时,“cp”完全有可能得到增强,但这意味着有许多不同的命令选项有时在某些计算机上有效,而在其他计算机上无效。
UNIX 的设计是一个命令应该做一件事,并且做得很好。对于“cp”,一件事是将磁盘文件复制到磁盘文件。
答案2
有块设备和字符设备(以及其他)。对于字符设备,字符流将传入或传出。例如键盘或磁带机。对于块设备,您可以向前和向后查找它们,因此创建文件分配表并管理文件。例如磁盘。
cp 用于(已安装的)块设备:它在文件系统表中创建一个条目,该条目包含文件存储的位置 - 然后文件将存储到该位置。包括向前(也许向后)寻求。您无法使用磁带设备执行此操作(就像无法使用键盘一样)。这就是为什么您将 cat 与磁带驱动器一起使用,将 cp 与磁盘一起使用。