linux 一切都是文件

这是给您一个技巧性的问题:以下哪些文件?

  • 目录
  • Shell脚本
  • LibreOffice文件
  • 串口
  • 内核数据结构
  • 内核调整参数
  • 硬盘驱动器
  • 隔断
  • 逻辑卷(LVM)
  • 印表机
  • 插座

也许您不会相信这一点,但是对于Unix和Linux来说,它们都是文件。 这是最令人惊奇的概念之一,它使一些非常简单但功能强大的方法能够执行许多本来很难或不可能的管理任务。

备份主启动记录

例如,考虑备份硬盘驱动器主启动记录(MBR)的简单任务。 有时,我需要还原或重新创建我的MBR,尤其是分区表。 从头开始创建它非常困难。 从保存的文件还原它很容易。 Linux附带了功能强大的GNU实用程序dd,它可以执行此功能以及许多其他功能。

dd代表“磁盘转储”,但是长期存在的美国管理员都将其称为“磁盘破坏者”,因为如果您不太谨慎的话,它将完全按照您的指示进行操作,包括销毁硬盘或分区上的所有数据。

以下命令将备份您的MBR。 它必须以root用户身份运行,因为非root用户无法访问/ dev目录中的硬盘设备文件 。 BS是块大小,计数是要从源文件读取的块数。 此命令将在/ tmp目录中创建一个文件myMBR.bak。 该文件的大小为512字节,包含MBR的内容,包括引导程序代码和分区表。

dd if=/dev/sda of=/tmp/myMBR.bak bs=512 count=1

如果MBR损坏,则必须引导至应急磁盘并使用以下命令,该命令实际上执行与上述命令相反的操作。 请注意,不必像第一个命令中那样指定块大小和块数,因为dd命令将简单地将备份文件复制到硬盘驱动器的第一个扇区,并在到达源文件末尾时停止。

dd if=/tmp/myMBR.bak of=/dev/sda

这都是文件系统的一部分

Linux计算机上的所有内容都可以作为文件系统空间中的文件进行访问。 这样做的全部目的是能够在不同的事物上使用通用工具 。

dd命令可用于将硬盘驱动器的整个分区复制到文件或另一个硬盘驱动器,如下所示。 此处dd命令再次将数据复制到输入设备的末尾并停止。 确保输出设备的尺寸大于输入设备的尺寸。

dd if=/dev/sdf2 of=/dev/sdg3

dd if=/dev/sda of=/dev/sdg

其他文件系统工具也可以工作。 例如,cat命令可用于将任何文件的内容发送到标准输出。 这包括分区和整个硬盘驱动器。 然后,可以将输出重定向到文件。

cat /dev/sda1 > partition1.backup

但是,cat命令没有dd命令所具有的控制。 例如,不能指定要从源设备或文件读取的数据量。

这是一个有趣的实验,将证明所有内容都是文件。 大多数Linux发行版具有1到7的多个虚拟控制台,可用于通过Shell接口登录到本地控制台会话。 可以使用组合键Ctrl-Alt-F1(对于控制台1)和Ctrl-Alt-F2(对于控制台2)进行访问,依此类推。

按Ctrl-Alt-F2切换到控制台2。在某些发行版中,登录信息包括与此控制台关联的tty(电传类型)设备,但许多没有。 它应该是tty2,因为您在控制台2中。

以非root用户身份登录。 然后,您可以使用who is i命令(是的,就是这样,带有空格)来确定将哪个tty设备连接到此控制台。

在我们实际执行该实验之前,请查看/ dev中tty2和tty3设备的列表。

ls -l /dev tty[23]

将会定义大量的tty设备,但是我们并不关心它们中的大多数,仅是tty2和tty3设备。 作为设备文件,它们没有什么特别的。 它们只是字符类型的设备。 我们将在实验中使用这些设备。 tty2设备连接到虚拟控制台2,而tty3设备连接到虚拟控制台3。

按Ctrl-Alt-F3切换到控制台3。以同一非root用户身份再次登录。

现在,在控制台3上输入以下命令。

echo "Hello world" > /dev/tty2

按Ctrl-Alt-F2返回控制台2。控制台2中将显示字符串“ Hello world”(不带引号)。

也可以使用GUI桌面上的终端仿真器执行此实验。 桌面上的终端会话使用/ dev树中的伪终端设备,例如/ dev / pts / 1。 使用Konsole或Xterm打开两个终端会话。 确定它们连接到哪些伪终端,并使用其中一个向另一终端发送消息。

现在,通过使用cat命令在另一个终端上显示/ etc / fstab文件,继续进行实验。

另一个有趣的实验是使用cat命令将文件直接打印到打印机。 假设您的打印机设备是/ dev / usb / lp0,并且您的打印机可以直接打印PDF文件,则以下命令将在您的打印机上打印PDF文件。

cat test.pdf > /dev/usb/lp0

dd命令还可用于打印打印机就绪文件。 我认为cat命令实际上更适合此任务。

“一切都是文件”的含义

“一切都是文件”的含义是深远的,比在诸如此类的简短文章中列出的含义要大得多。 您已经在前面的实验中看到了一些示例。 但是,这是包含这些内容以及更多内容的简短列表。

  1. 克隆硬盘驱动器。
  2. 备份分区。
  3. 备份主启动记录(MBR)。
  4. 将ISO映像安装到USB拇指驱动器上。
  5. 与其他终端上的用户进行通信。
  6. 将文件打印到打印机。
  7. 更改/ proc伪文件系统中某些文件的内容,以修改正在运行的内核的配置参数。
  8. 用随机数据或零覆盖文件,分区或整个硬盘驱动器。
  9. 将不需要的输出从命令重定向到/ dev / null设备,该设备将永远消失。
  10. 等等等等

这里有很多可能性,因此任何列表实际上只能刮擦表面。 我相信您已经或将会想出很多方法来创造性地使用Linux的此功能,这要比我在这里提到的要多得多。 我希望看到您对如何使用“一切都是文件”的评论。

附加信息

有关/ dev /目录和您可能在其中找到的设备的更多信息,请参阅Linux Journal中的本文 。 对于单个设备的更多具体信息, 这篇文章和这篇文章在Linux文档计划是有帮助的。

翻译自: https://opensource.com/life/15/9/everything-is-a-file

linux 一切都是文件

linux 一切都是文件_一切都是文件相关推荐

  1. python 目录下的文件_用python把文件夹下的所有文件包括文件夹里面的文件都拷贝到同一个目录下...

    比如1文件夹下有2文件夹,2文件夹下有1.txt文件和3文件夹,3文件夹下有2.txt3.txt现在要把1.txt2.txt3.txt全都拷贝到1文件夹下importosimportshutildef ...

  2. python os复制文件_用Python复制文件的九种方法

    以下是演示"如何在Python中复制文件"的九种方法. shutil copyfile()方法 shutil copy()方法 shutil copyfileobj()方法 shu ...

  3. python怎么运行ipynb文件_如何运行.ipynb文件的图文讲解

    如何运行.ipynb文件的图文讲解 首先cmd下面输入: pip install jupyter notebook,安装慢的改下pip的源为国内的源 然后cmd中输入: jupyter noteboo ...

  4. ubuntu新建python代码文件_[Vim]新建python文件自动添加python header

    使用vim脚本来实现的,使用了模板,几行代码就能实现很实用. ~/.vimrc 中的代码 "auto add pyhton header --start autocmd BufNewFile ...

  5. python解压文件_使用Python实现文件压缩和解压

    大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...

  6. qmoc文件_手动生成MOC文件

    一直以来我都是将moc命令写成批处理文件,并且一直使用很正常,今早来要为一个类生成moc文件,批处理是直接由以前正常运行的批处理文件改成,应该是没有什么错误的,其结果却发现我所要的moc文件并没有生成 ...

  7. hosts文件_电脑修改hosts文件屏蔽网站方法

    说起hosts文件我想有很多电脑用户都不会感到陌生,因为利用它我们可以屏蔽一些网站,但是有很多电脑用户都不知道电脑如何修改hosts文件屏蔽网站,那么电脑如何修改hosts文件屏蔽网站呢?下面为大家带 ...

  8. 释放mysql ibdata1文件_释放MySQL ibdata1文件的空间

    在MySQL数据库中,如果不指定innodb_file_per_table参数,单独存在每个表的数据,MySQL的数据都会存放在ibdata1文件. mysql ibdata1存放数据,索引等,是MY ...

  9. java包图标是文件_关于更换.jar文件默认图标

    最近写了个java程序,导出.jar文件后觉得默认图标太寒酸,想换一个自个儿喜欢的.eclipse导出.jar文件网上提供了很多很正确的方法,我也不必赘述.至于更改默认图标,网上提供的一些方法真是让人 ...

最新文章

  1. CHUCK手把手带你搞定OPENSTACK
  2. python动态数组的最大值_python实现动态数组的示例代码
  3. s:property 获取 ValueStack中的值
  4. C++之指向对象成员函数的指针
  5. 笔记-信息化与系统集成技术-供应链管理
  6. 开源数据访问组件Smark.Data 1.7新增功能
  7. ROW_NUMBER() OVER() 函数用法详解 (分组排序,多例子)
  8. l4 l7 代理_什么是四层(L4 proxy)和七层负载均衡(L7 proxy)?区别是什么? 翻译自Nginx官网...
  9. java实现一个简单的登录界面
  10. 库克为 iOS 操碎了心
  11. 模块化(1):基本思路
  12. 1. OpenMAX系列 —— ACodec和OMX的联系
  13. unbuntu下 配置vim 详解
  14. 4.RabbitMQ 安装
  15. Stata: 空间计量模型溢出效应的动态呈现
  16. 修图类APP原型设计分享– Hello Camera
  17. BUUCTF中的“新年快乐”
  18. 微信id修改服务器繁忙,微信终于可以修改ID了! 但,你可能不行......
  19. java cos90,Java Math.cosh() 方法
  20. iOS开发最新最全微信第三方登录接入流程

热门文章

  1. 高铁车厢女童突然抽搐 护士为防其咬舌将手指放口中
  2. datatime,time,string转换和format格式化处理
  3. 人机交互,加速机器人拟人化
  4. 从90年代的SRNN开始,纵览循环神经网络27年的研究进展
  5. 安装配置优化nginx
  6. A1156. 开心的金明
  7. PHP curl 使用代码
  8. sql1032n sql6048n db2start启动不了 db2修改hostname
  9. Oracle dataGuard专题:Rman通过duplicate创建standby
  10. 详细说说ActionScript中function的call()方法和apply()方法