音响风尚圈

音响风尚圈

Linux终端生存指南 文件类型

admin 251 284

这是一系列基础命令的集合,我会从使用角度介绍,看完这些以后你能够在Linux终端下完成大部分之前需要鼠标和键盘才能完成的操作。

今天是第二篇,Linux下的几种特殊文件类型介绍。

普通文件和目录

管道文件

套接字文件

设备文件

查看文件类型

Windows中我们经常通过后缀名来区分文件类型,比如我们常见的.exe、.doc、.ppt等。

但是Linux中一般不通过后缀名来判断文件类型,因为Linux除了一些特定软件通过后缀名来区分自己的软件支持的文件类型,Linux中的文件一般都不带后缀名。

Linux查看文件类型是通过命令ls-l实现:

ubuntu@ubuntu-virtual-machine:~$ls-l总用量64drwxrwxr-x2ubuntuubuntu40964月1222:551-rw-rw-r--1ubuntuubuntu114月1521:162.txt-rw-rw-r--1ubuntuubuntu04月1222:553-rw-rw-r--1ubuntuubuntu44月1222:574.txt-rw-rw-r--1ubuntuubuntu04月1223:005.txt-rw-rw-r--1ubuntuubuntu04月1223:017.txtdrwxr-xr-x2ubuntuubuntu40964月1022:58桌面drwxrwxr-x3ubuntuubuntu40964月919:10developdrwxrwxr-x2ubuntuubuntu40964月1223:26mydirdrwxrwxr-x2ubuntuubuntu40964月1223:32mydir2drwxrwxr-x2ubuntuubuntu40964月1223:32mydir4drwx------5ubuntuubuntu40964月1222:22snap-rw-rw-r--1ubuntuubuntu04月1222:51

根据文件显示信息的第一个字符可以判断文件类型:

第一个字符

文件类型

-

普通文件

d

目录

b

块设备文件

c

字符设备文件

s

套接字文件

p

管道文件

l

还有一个命令也可以查看文件类型:file命令,直接执行file文件路径:

ubuntu@ubuntu-virtual-machine:~$file./2.txt./2.txt:ASCIItext

每一种文件类型都有自己的使用场景,我在此简单说明类型和主要功能,后面我会对每种文件的实现和使用专门整理。

普通文件和目录

这两个文件类型在上一篇文章介绍得非常详细,这里不在说明。

链接文件

链接文件请现在就了解并能够使用,一种软链接,一种硬链接。

链接文件都可以直接读取和修改源文件的内容。

通过ln命令创建链接文件,命令格式:

ln[选项]源文件目标文件

选项:

s:soft,即制定创建的链接文件类型是软链接文件;如果不加"-s"选项,就是硬链接文件;

f:force,强制选项。如果被创建的链接文件存在同名文件,则删除目标文件后再建立链接文件;

软链接

这是最常用的链接文件,我们前面说了Linux下一切皆文件。

而软链接类似于Windows系统中给文件创建快捷方式,它的文件内容中保存了源文件(或目录)的绝对路径。

注意:一定是绝对路径,否则会出现链接的源文件找不到的情况。

使操作者可以通过另一个文件符号访问另一个文件。

ubuntu@ubuntu-virtual-machine:~$@ubuntu-virtual-machine:~$ls-l总用量64-rw-rw-r--1ubuntuubuntu114月1521:162.txtlrwxrwxrwx1ubuntuubuntu54月1521:332.
硬链接

不能跨文件系统

这两个明显的缺点使平时使用比较少。

ubuntu@ubuntu-virtual-machine:~$@ubuntu-virtual-machine:~$ls-l总用量68-rw-rw-r--2ubuntuubuntu114月1521:162.txt-rw-rw-r--2ubuntuubuntu114月1521:162.
注意

删除了源文件,软链接就没有操作主题了,当你去操作软链接的时候会报错找不到对应的文件。

而硬链接不受到影响,即使已经没有了源文件,仍然可以操作,其内容与删除源文件之前的内容一致。

ubuntu@ubuntu-virtual-machine:~$@ubuntu-virtual-machine:~$:2.:没有那个文件或目录ubuntu@ubuntu-virtual-machine:~$
管道文件

管道是一种进程间通信的方式,而且管道也有两种类型,有名管道和无名管道。

管道顾名思义,就像一根实际的管道那样为进程间建立一个通讯的通道,相互收发数据。

有名管道和无名管道的区别主要是:有名管道可以在任意两个进程之间通讯,而无名管道只能在父子进程之间通讯。

我想你可能目前还对进程的概念不太清楚,你可以先忽略管道类型差异,这样简单理解:管道可以是在两个程序之间建立一个通道,相互读写数据。而对于两种管道类型目前这个阶段记住两个关键字:有名管道fifo,无名管道pipe。

套接字文件

网络通信的文件符号,网络编程以此为锚点进行读写操作。

这个与管道一样也是一种进程间通信方式,目前阶段请了解这是用于网络通信,记住关键词:socket即可。

设备文件

设备文件一般在/dev/目录下。我们在这个目录下可以看到很多设备文件:

ubuntu@ubuntu-virtual-machine:~$ls/dev/autofsdm-0hugepagesloop4nvramsg0tty12tty25tty38tty50tty63ttyS17ttyS3vcsvcsuvsockblockdm-1hwrngloop5portsg1tty13tty26tty39tty51tty7ttyS18ttyS30vcs1vcsu1zerobsgdma_heapinitctlloop6pppshmtty14tty27tty4tty52tty8ttyS19ttyS31vcs2vcsu2zfsbtrfs-controldmmidiinputloop7psauxsnapshottty15tty28tty40tty53tty9ttyS2ttyS4vcs3vcsu3busdrikmsgloop8ptmxsndtty16tty29tty41tty54ttyprintkttyS20ttyS5vcs4vcsu4cdromdvdlightnvmloop9ptssr0tty17tty3tty42tty55ttyS0ttyS21ttyS6vcs5vcsu5cdrwecryptfslogloop-controlrandomstderrtty18tty30tty43tty56ttyS1ttyS22ttyS7vcs6vcsu6charfb0loop0mapperrfkillstdintty19tty31tty44tty57ttyS10ttyS23ttyS8vcsavfioconsolefdloop1mcelogrtcstdouttty2tty32tty45tty58ttyS11ttyS24ttyS9vcsa1vga_arbitercorefd0loop10memrtc0ttytty20tty33tty46tty59ttyS12ttyS25udmabufvcsa2vgubuntucpufullloop11midisdatty0tty21tty34tty47tty6ttyS13ttyS26uhidvcsa3vhcicpu_dma_latencyfuseloop12mqueuesda1tty1tty22tty35tty48tty60ttyS14ttyS27uinputvcsa4vhost-netcusehidraw0loop2netsda2tty10tty23tty36tty49tty61ttyS15ttyS28urandomvcsa5vhost-vsockdiskhpetloop3nullsda5tty11tty24tty37tty5tty62ttyS16ttyS29useriovcsa6vmci

常见设备文件命名规则作如下:

/dev/hd[a-t]:IDE设备

/dev/sd[a-z]:SCSI设备

/dev/fd[0-7]:软驱

/dev/md[0-31]:软raid设备

/dev/loop[0-7]:回环设备

/dev/ram[0-15]:内存

/dev/null:黑洞,丢进去的东西就再也找不到了

/dev/ttyS[0-3]:串口

/dev/tty[0-63]:虚拟终端

/dev/lp[0-3]:并口

/dev/console:控制台

/dev/fb[0-31]:framebuffer

块设备

用程序可以随机访问设备数据,程序可自行确定读取数据的位置。

硬盘、软盘和闪存都是典型的块设备,应用程序可以寻址磁盘上的任何位置进行数据读写。

sda1块设备属于块设备:

ubuntu@ubuntu-virtual-machine:~$ls-l/dev/sda1brw-rw----1rootdisk8,14月1122:07/dev/sda1
字符设备

提供连续的数据流,可以顺序读取,但通常不支持随机存取。

键盘和串口是常见的字符设备,只能顺序的读写数据。

tty串口设备属于字符设备:

ubuntu@ubuntu-virtual-machine:~$ls-l/dev/ttycrw-rw-rw-1roottty5,04月1222:21/dev/tty