“一切都是文件”和Linux中的文件类型的说明

如果你是新来的Linux,或已经使用了数个月,那么你一定听说过或读到的语句,如“ 在Linux中,一切都是文件 ”。

一切都是Linux中的文件和文件类型

另请阅读: 5有用的命令来管理Linux的文件类型

这实际上是真的,虽然它只是一个泛化概念,在Unix及其衍生物如Linux中,一切都被视为一个文件。 如果某些内容不是文件,那么它必须作为系统上的进程运行。

要理解这一点,就拿上你的根的空间量(/)目录总是由不同类型的Linux的文件所占用。 当创建文件或将文件传输到系统时,它在物理磁盘上占用一些空间,并且被认为是特定格式(文件类型)。

此外,Linux系统不区分文件和目录,但目录做一项重要工作,即将其他文件分组存储在层次结构中以方便定位。 所有硬件组件都表示为文件,系统使用这些文件与它们进行通信。

这个想法是对Linux的一个伟大属性的重要描述,其中输入/输出资源,如您的文档,目录(Mac OS X和Windows中的文件夹),键盘,显示器,硬盘驱动器,可移动媒体,打印机,调制解调器,虚拟终端以及进程间和网络通信是由文件系统空间定义的字节流。

一切都是文件的一个显着优点是,可以在上述输入/输出资源上使用相同的一组Linux工具,实用程序和API。

尽管一切都在Linux是一个文件,有一定的特殊文件,这些文件不仅仅是例如文件的详细套接字和命名管道

Linux中不同类型的文件是什么?

在Linux中,基本上有三种类型的文件:

  1. 普通/常规文件
  2. 特殊文件
  3. 目录

普通/常规文件

这些是包含文本,数据或程序指令的文件数据,它们是在Linux系统上可以找到的最常见类型的文件,包括:

  1. 可读文件
  2. 二进制文件
  3. 图像文件
  4. 压缩文件等。

特殊文件

特殊文件包括:

块的文件 :这些设备文件提供到系统硬件组件的缓冲存取。 它们提供通过文件系统与设备驱动程序通信的方法。

关于的文件的一个重要方面是,它们可以在给定时间传输数据和信息的一个较大块。

列出目录中的块文件套接字:

# ls -l /dev | grep "^b"
示例输出
brw-rw----  1 root disk        7,   0 May 18 10:26 loop0
brw-rw----  1 root disk        7,   1 May 18 10:26 loop1
brw-rw----  1 root disk        7,   2 May 18 10:26 loop2
brw-rw----  1 root disk        7,   3 May 18 10:26 loop3
brw-rw----  1 root disk        7,   4 May 18 10:26 loop4
brw-rw----  1 root disk        7,   5 May 18 10:26 loop5
brw-rw----  1 root disk        7,   6 May 18 10:26 loop6
brw-rw----  1 root disk        7,   7 May 18 10:26 loop7
brw-rw----  1 root disk        1,   0 May 18 10:26 ram0
brw-rw----  1 root disk        1,   1 May 18 10:26 ram1
brw-rw----  1 root disk        1,  10 May 18 10:26 ram10
brw-rw----  1 root disk        1,  11 May 18 10:26 ram11
brw-rw----  1 root disk        1,  12 May 18 10:26 ram12
brw-rw----  1 root disk        1,  13 May 18 10:26 ram13
brw-rw----  1 root disk        1,  14 May 18 10:26 ram14
brw-rw----  1 root disk        1,  15 May 18 10:26 ram15
brw-rw----  1 root disk        1,   2 May 18 10:26 ram2
brw-rw----  1 root disk        1,   3 May 18 10:26 ram3
brw-rw----  1 root disk        1,   4 May 18 10:26 ram4
brw-rw----  1 root disk        1,   5 May 18 10:26 ram5
...

字符文件 :这些也是设备文件提供到系统硬件组件缓冲串行访问。 它们通过一次一个字符地传输数据来提供与设备的通信方式。

在目录中列出字符文件套接字:

# ls -l /dev | grep "^c"
示例输出
crw-------  1 root root       10, 235 May 18 15:54 autofs
crw-------  1 root root       10, 234 May 18 15:54 btrfs-control
crw-------  1 root root        5,   1 May 18 10:26 console
crw-------  1 root root       10,  60 May 18 10:26 cpu_dma_latency
crw-------  1 root root       10, 203 May 18 15:54 cuse
crw-------  1 root root       10,  61 May 18 10:26 ecryptfs
crw-rw----  1 root video      29,   0 May 18 10:26 fb0
crw-rw-rw-  1 root root        1,   7 May 18 10:26 full
crw-rw-rw-  1 root root       10, 229 May 18 10:26 fuse
crw-------  1 root root      251,   0 May 18 10:27 hidraw0
crw-------  1 root root       10, 228 May 18 10:26 hpet
crw-r--r--  1 root root        1,  11 May 18 10:26 kmsg
crw-rw----+ 1 root root       10, 232 May 18 10:26 kvm
crw-------  1 root root       10, 237 May 18 10:26 loop-control
crw-------  1 root root       10, 227 May 18 10:26 mcelog
crw-------  1 root root      249,   0 May 18 10:27 media0
crw-------  1 root root      250,   0 May 18 10:26 mei0
crw-r-----  1 root kmem        1,   1 May 18 10:26 mem
crw-------  1 root root       10,  57 May 18 10:26 memory_bandwidth
crw-------  1 root root       10,  59 May 18 10:26 network_latency
crw-------  1 root root       10,  58 May 18 10:26 network_throughput
crw-rw-rw-  1 root root        1,   3 May 18 10:26 null
crw-r-----  1 root kmem        1,   4 May 18 10:26 port
crw-------  1 root root      108,   0 May 18 10:26 ppp
crw-------  1 root root       10,   1 May 18 10:26 psaux
crw-rw-rw-  1 root tty         5,   2 May 18 17:40 ptmx
crw-rw-rw-  1 root root        1,   8 May 18 10:26 random

符号链接文件 :一个符号链接是到系统上的其他文件的引用。 因此,符号链接文件是指向其他文件的文件,它们可以是目录或常规文件。

列出目录中的符号链接套接字:

# ls -l /dev/ | grep "^l"
示例输出
lrwxrwxrwx  1 root root             3 May 18 10:26 cdrom -> sr0
lrwxrwxrwx  1 root root            11 May 18 15:54 core -> /proc/kcore
lrwxrwxrwx  1 root root            13 May 18 15:54 fd -> /proc/self/fd
lrwxrwxrwx  1 root root             4 May 18 10:26 rtc -> rtc0
lrwxrwxrwx  1 root root             8 May 18 10:26 shm -> /run/shm
lrwxrwxrwx  1 root root            15 May 18 15:54 stderr -> /proc/self/fd/2
lrwxrwxrwx  1 root root            15 May 18 15:54 stdin -> /proc/self/fd/0
lrwxrwxrwx  1 root root            15 May 18 15:54 stdout -> /proc/self/fd/1

您可以使用符号链接ln在Linux工具,如下面的例子。

# touch file1.txt
# ln -s file1.txt /home/youcl/file1.txt  [create symbolic link]
# ls -l /home/youcl/ | grep "^l"         [List symbolic links]

在上面的例子中,我创建了一个名为file1.txt/ tmp目录 ,然后创建符号链接,/home/youcl/file1.txt指向/tmp/file1.txt。

管或命名管道 :这些文件,允许由一个处理的输出连接到另一输入端的进程间通信。

命名管道实际上是两个进程用于与每个进程通信的文件,它充当Linux管道。

在目录中列出管道套接字:

# ls -l | grep "^p"
示例输出
prw-rw-r-- 1 youcl youcl    0 May 18 17:47 pipe1
prw-rw-r-- 1 youcl youcl    0 May 18 17:47 pipe2
prw-rw-r-- 1 youcl youcl    0 May 18 17:47 pipe3
prw-rw-r-- 1 youcl youcl    0 May 18 17:47 pipe4
prw-rw-r-- 1 youcl youcl    0 May 18 17:47 pipe5

您可以使用mkfifo子程序在Linux中创建一个命名管道如下。

# mkfifo pipe1
# echo "This is named pipe1" > pipe1

在上面的例子中,我创建了一个叫做命名管道pipe1 ,然后我用的推移,一些数据给它echo命令 ,后壳成为联合国的互动,同时处理输入。

然后我打开另一个shell并运行another命令打印输出传递给管道。

# while read line ;do echo "This was passed-'$line' "; done<pipe1

套接字文件 :这些是提供进程间通信的一种手段文件,但它们可以在不同的环境中运行的进程之间传输的数据和信息。

这意味着套接字在网络上的不同机器上运行的进程之间提供数据和信息传递。

一个显示套接字工作的例子是Web浏览器与Web服务器建立连接。

# ls -l /dev/ | grep "^s"
示例输出
srw-rw-rw-  1 root root             0 May 18 10:26 log

这是一个套接字示例使用在C上创建socket()系统调用。

int socket_desc= socket(AF_INET, SOCK_STREAM, 0 );

在上面:

  1. AF_INET是地址族(IPv4)的
  2. SOCK_STREAM是类型(连接TCP协议导向)
  3. 0是协议(IP协议)

来指socket文件,使用socket_desc ,这是相同的文件描述符,并使用read()write()系统调用来读出并分别从套接字写。

目录

这些是存储包括普通及其他特殊文件的特殊文件,它们在从根开始的层次结构中的Linux文件系统的组织(/)目录中。

列出目录中的套接字:

# ls -l / | grep "^d" 
示例输出
drwxr-xr-x   2 root root  4096 May  5 15:49 bin
drwxr-xr-x   4 root root  4096 May  5 15:58 boot
drwxr-xr-x   2 root root  4096 Apr 11  2015 cdrom
drwxr-xr-x  17 root root  4400 May 18 10:27 dev
drwxr-xr-x 168 root root 12288 May 18 10:28 etc
drwxr-xr-x   3 root root  4096 Apr 11  2015 home
drwxr-xr-x  25 root root  4096 May  5 15:44 lib
drwxr-xr-x   2 root root  4096 May  5 15:44 lib64
drwx------   2 root root 16384 Apr 11  2015 lost+found
drwxr-xr-x   3 root root  4096 Apr 10  2015 media
drwxr-xr-x   3 root root  4096 Feb 23 17:54 mnt
drwxr-xr-x  16 root root  4096 Apr 30 16:01 opt
dr-xr-xr-x 223 root root     0 May 18 15:54 proc
drwx------  19 root root  4096 Apr  9 11:12 root
drwxr-xr-x  27 root root   920 May 18 10:54 run
drwxr-xr-x   2 root root 12288 May  5 15:57 sbin
drwxr-xr-x   2 root root  4096 Dec  1  2014 srv
dr-xr-xr-x  13 root root     0 May 18 15:54 sys
drwxrwxrwt  13 root root  4096 May 18 17:55 tmp
drwxr-xr-x  11 root root  4096 Mar 31 16:00 usr
drwxr-xr-x  12 root root  4096 Nov 12  2015 var

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

# mkdir -m 1666 youcl.com
# mkdir -m 1666 news.youcl.com
# mkdir -m 1775 linuxsay.com

概要

您现在应该清楚地了解为什么Linux中的一切都是一个文件,以及可以在Linux系统上退出的不同类型的文件。

您可以通过阅读有关单个文件类型的更多信息来添加更多内容,并创建它们。 我希望这篇指南对您有所帮助,对于您希望分享的任何问题和其他信息,请留下评论,我们将讨论更多。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏