Windows用户不知道的Linux特点: Everything Is File - 爱分享小站

如果您是Linux的新手,或者已经使用了几个月,那么你必须听说过或读过诸如“ 在Linux中,一切都是文件 ”之类的陈述。


在 Unix系统或者说是Linux 系统及其衍生出来的系统,一切都可以看做文件。





所有都是文件的话,那文件夹(目录)是干什么的?






Linux 系统中文件和目录没有什么不同,但目录还有一个重要的功能,那就是有结构性的分组存储其它文件,以方便查找访问。所有的硬件组件都表示为文件,系统使用这些文件来与硬件通信。

“一切都是文件”这种说法,定义了Linux操作系统的体系结构。这意味着系统中的所有过程(从进程,文件,目录,套接字,管道等)都由一个Linux内核中虚拟文件系统中抽象出来的叫做文件描述符的表示。虚拟文件系统是Linux内核提供的一个接口。

因此,“一切都是文件描述符”这样的描述要更准确些。Linus大神( Linux内核创始人)他又更精确地纠正了这一点:“一切都是字节流”。

是不是不好理解啊?

不管怎么说,我们需要知道的就是:此种体系结构的优点就是,可以在各种资源上使用相同的工具、软件和API。


不过虽都是文件,但是还是有文件类型类型之分。





Linux 文件类型的不同之处?






Linux 系统中有三种基本的文件类型:

  • 普通/常规文件
  • 特殊文件
  • 目录文件

普通/常规文件
这些文件,就是我们在Windows系统文件夹下看到的那些文件。
它包含了文本、数据、代码,图片视频等数据的文件,其在 Linux 系统中是最常见的一种。常见的有:
  • 可读文件(文本文件,代码文件)
  • 二进制文件(程序文件)
  • 图像文件
  • 视频文件
  • 压缩文件等

特殊文件
特殊文件包括以下几种:
块文件(block):设备文件,对访问系统硬件部件提供了缓存接口。它们提供了一种通过文件系统与设备驱动通信的方法。
有关于块文件一个重要的性能就是它们能在指定时间内传输大块的数据和信息。
列出某目录下的块文件:
 ls -l /dev | grep "^b"
输出例子

字符文件(Character):也是设备文件,对访问系统硬件组件提供了非缓冲串行接口。它们与设备的通信工作方式是一次只传输一个字符的数据。
列出某目录下的字符文件:
ls -l /dev | grep "^c"
输出例子

符号链接文件(Symbolic link) :符号链接是指向系统上其他文件的引用。因此,符号链接文件是指向其它文件的文件,那些文件可以是目录或常规文件。
列出某目录下的符号链接文件:
ls -l /dev/ | grep "^l"
输出例子


Linux 中使用 ln 工具就可以创建一个符号链接文件,如下所示:
touch /tmp/file1.txtln -s /tmp/file1.txt /home/bruce/file1.txt  [创建符号链接文件]ls -l /home/bruce/ | grep "^l" [列出符号链接文件]

在上面的例子中,首先我们在 /tmp 目录创建了一个名叫 file1.txt 的文件,然后创建符号链接文件,将 /home/bruce/file1.txt 指向 /tmp/file1.txt 文件。

管道(Pipe)和命令管道(Named pipe) : 将一个进程的输出连接到另一个进程的输入,从而允许进程间通信(IPC)的文件。
命名管道实际上是一个文件,用来使两个进程彼此通信,就像一个 Linux 管道一样。
列出某目录下的管道文件:
ls -l | grep "^p"
输出例子:

在 Linux 中可以使用 mkfifo 工具来创建一个命名管道,如下所示:
mkfifo pipe1echo "This is named pipe1" > pipe1
在上的例子中,我们创建了一个名叫 pipe1 的命名管道,然后使用 echo 加入一些数据,这之后在处理输入的数据时终端就变成了一直等待状态,没法继续交互操作,感觉只剩下Ctrl+C 一条路可走。
是这样吗?当然不是。
这时候,我们打开另外一个终端窗口,运行下面的脚本命令,来打印出刚加入管道的数据。
while read line ;do echo "This was passed-'$line' "; done < pipe1
上面的脚本用了 while..do..done这样的语法。意思就是当(while)满足某个条件时,就执行(do)某项操作,直到遇见done标志。


套接字文件(socket) :提供进程间通信方法的文件,它们能在运行在不同环境中的进程之间传输数据和信息。
这就是说,套接字可以为运行网络上不同机器中的进程提供数据和信息传输。
一个 socket 运行的例子就是网页浏览器连接到网站服务器的过程。
ls -l /run | grep "^s"
输出例子:


目录文件
这是一些特殊的文件,既可以包含普通文件又可包含其它的特殊文件,它们在 Linux 文件系统中是以根(/)目录为起点分层组织存在的。
列出某目录下的目录文件:
ls -l / | grep "^d"
输出例子:


您可以使用 mkdir 命令来创建一个目录。




结论





尽管在Linux中,一切都可以看作是文件,但是对于普通使用者来说,和Windows上的操作其实也没多大区别,在日常使用中也不同太多的关注他们的不同。

相关推荐

网友评论(0)