您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 05_Linux文件系统
Linux文件系统博创科技嵌入互动Linux文件系统简介在Unix业界有一句话叫做“一切皆文件”,这是对Linux文件系统的一个很好抽象。我们说“Linux中一切皆文件”直观地可以这样理解:所有的东西,设备、内存都模拟成文件。而Windows中,我们则可以极端地认为“一切皆设备”博创科技嵌入互动Linux文件系统简介Linux的文件系统可以认为包括4种主要组成部分:命名空间(给事物取名,并按一种层次解构组织他们的形式)API(用来便利和操作对象的一套系统调用)安全模型(用来保护,隐藏何共享事物的方案)实现(把逻辑模型同实际硬件联系到一起的软件)命名空间博创科技嵌入互动我们把Linux下的文件分成5种文件类型:c字符设备b块设备l连接f普通文件d目录。文件类型}设备文件博创科技嵌入互动Linux中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。每个字符设备和块设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为“虚拟设备”)。设备文件博创科技嵌入互动设备文件一般来说,每个设备在/dev目录下都有一个对应的文件(设备节点)。可以通过cat/proc/devices命令查看当前已经加载的设备驱动程序的主设备号。在/dev目录下除了字符设备和块设备节点之外还通常还会存在:FIFO管道、Socket、软/硬连接、目录。这些东西没有主/次设备号。博创科技嵌入互动设备文件的命名内核能够识别的所有设备都记录在源码树下的Documentation/devices.txt文件中。----------------------------------------------------------------------主设备号设备类型次设备号=文件名简要说明----------------------------------------------------------------------0未命名设备(例如:挂载的非设备)0=为空设备号保留1char内存设备1=/dev/mem直接存取物理内存2=/dev/kmem存取经过内核虚拟之后的内存3=/dev/null空设备。任何写入都将被直接丢弃,任何读取都将得到EOF。5=/dev/zero零字节源,只能读取到无限多的零字节。8=/dev/random随机数发生器。完全由用户的输入来产生随机数。如果用户停止所有动作,则停止产生新的随机数。9=/dev/urandom更快,但是不够安全的随机数发生器。尽可能由用户的输入来产生随机数,如果用户停止动作,则把已经产生的随机数做为种子来产生新的随机数。11=/dev/kmsg任何对该文件的写入都将作为printk的输出博创科技嵌入互动设备文件的命名1blockRAMdisk0=/dev/ram0第1个RAMdisk(initrd只能使用ram0)1=/dev/ram1第2个RAMdisk...4charTTY(终端)设备0=/dev/tty0当前虚拟控制台1=/dev/tty1第1个虚拟控制台...4block如果根文件系统以是以只读方式挂载的,那么就不可能创建真正的设备节点,此时就使用该设备作为动态分配的主(major)设备的别名0=/dev/root5char其他TTY设备0=/dev/tty当前TTY设备1=/dev/console系统控制台(一般是/dev/tty0)7block回环设备(用一个普通的磁盘文件来模拟一个块设备)对回环设备的绑定由mount(8)或losetup(8)处理0=/dev/loop0第1个回环设备1=/dev/loop1第2个回环设备...博创科技嵌入互动设备文件的命名8blockSCSI磁盘(0-15)0=/dev/sda第1个SCSI磁盘(整个磁盘)16=/dev/sdb第2个SCSI磁盘(整个磁盘)32=/dev/sdc第3个SCSI磁盘(整个磁盘)...分区表示方法如下(以第3个SCSI磁盘为例)33=/dev/sdc1第1个分区34=/dev/sdc2第2个分区...10char非串口鼠标,各种杂项设备和特性1=/dev/psauxPS/2鼠标135=/dev/rtc实时时钟(RealTimeClock)13char核心输入设备32=/dev/input/mouse0第1个鼠标33=/dev/input/mouse1第2个鼠标...63=/dev/input/mice所有鼠标的统一64=/dev/input/event0第1个事件队列65=/dev/input/event1第2个事件队列...29char通用帧缓冲(framebuffer)设备0=/dev/fb0第1个帧缓冲设备1=/dev/fb1第2个帧缓冲设备...博创科技嵌入互动设备文件的命名89charI2C总线接口0=/dev/i2c-0第1个I2C适配器1=/dev/i2c-1第2个I2C适配器...136-143charUnix98PTYslave这些设备节点是自动生成的(伴有适当的权限和模式),不能手动创建。方法是通过使用适当的mount选项(通常是:mode=0620,gid=tty组的gid)将devpts文件系统挂载到/dev/pts目录即可。0=/dev/pts/0第1个Unix98PTYslave1=/dev/pts/1第2个Unix98PTYslave...180charUSB字符设备96=/dev/usb/hiddev0第1个USB人机界面设备(鼠标/键盘/游戏杆/手写版等)...111=/dev/usb/hiddev15第16个USB人机界面设备180blockUSB块设备(U盘之类)0=/dev/uba第1个USB块设备8=/dev/ubb第2个USB块设备16=/dev/ubc第3个USB块设备...API博创科技嵌入互动API–文件操作系统调用Linux操作系统提供了一系列的系统调用来进行文件操作。常用的文件操作系统调用创建creat打开open读写read/writeI/O操作ioctl关闭close博创科技嵌入互动creat(建立文件)头文件#includesys/types.h#includesys/stat.h#includefcntl.h定义函数intcreat(constchar*pathname,mode_tmode);函数说明参数pathname指向欲建立的文件路径字符串。creat()相当于使用下列的调用方式调用open()。open(constchar*pathname,(O_CREAT|O_WRONLY|O_TRUNC));返回值creat()会返回新的文件描述词,若有错误发生则会返回-1,并把错误代码设给errno。附加说明creat()无法建立设备文件,如果需要请使用mknod()。博创科技嵌入互动open(打开文件)头文件#includesys/types.h#includesys/stat.h#includefcntl.h定义函数intopen(constchar*pathname,intflags);intopen(constchar*pathname,intflags,mode_tmode);函数说明参数pathname指向欲打开的文件路径字符串。下列是参数flags常用的旗标:O_RDONLY以只读方式打开文件O_WRONLY以只写方式打开文件O_RDWR以可读写方式打开文件。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。O_CREAT若欲打开的文件不存在则自动建立该文件。O_TRUNC若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的资料也会消失。O_APPEND当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。O_NONBLOCK以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。返回值文件打开成功返回文件的描述符,失败返回-1博创科技嵌入互动read(由已打开的文件读取数据)头文件#includeunistd.h定义函数ssize_tread(intfd,void*buf,size_tcount);函数说明read()会把参数fd所指的文件传送count个字节到buf指针所指的内存中。若参数count为0,则read()不会有作用并返回0。返回值为实际读取到的字节数,如果返回0,表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。附加说明如果顺利read()会返回实际读到的字节数,最好能将返回值与参数count作比较,若返回的字节数比要求读取的字节数少,则有可能读到了文件尾、从管道(pipe)或终端机读取,或者是read()被信号中断了读取动作。当有错误发生时则返回-1,错误代码存入errno中,而文件读写位置则无法预期。博创科技嵌入互动write(将数据写入已打开的文件内)头文件#includeunistd.h定义函数ssize_twrite(intfd,constvoid*buf,size_tcount);函数说明write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。当然,文件读写位置也会随之移动。返回值如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。博创科技嵌入互动ioctl(控制设备)头文件#includesys/ioctl.h定义函数intioctl(intfd,intrequest,...);函数说明ioctl()能对一些特殊的文件(主要是设备)进行一些底层参数的操作。许多字符设备都使用ioctl请求来完成对设备的控制。返回值成动返回0。当有错误发生时则返回-1,错误代码存入errno中。博创科技嵌入互动close(关闭文件)头文件#includeunistd.h定义函数intclose(intfd);函数说明当使用完文件后若已不再需要则可使用close()关闭该文件,二close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd为先前由open()或creat()所返回的文件描述词。返回值若文件顺利关闭则返回0,发生错误时返回-1。附加说明虽然在进程结束时,系统会自动关闭已打开的文件,但仍建议自行关闭文件,并确实检查返回值。安全模型博创科技嵌入互动文件系统的安全性linux作为一种网络操作系统,允许多个用户使用,为了保护用户的个人文件不被其他用户所侵犯,linux(在unix的基础上)提供了文件权限机制,用来保护用户的个人信息。使用用户分类:超级用户:管理者普通用户:合法用户匿名用户:一般情况下为合法用户博创科技嵌入互动文件访问权限Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件的访问权限分为只读,只写和可执行三种。以普通文件为例:只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。博创科技嵌入互动查看文件访问权限对文件来说,有三种不同类型的用户可进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中其他用户都能访问该用户拥有的文件或目录。当用ls-l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如:$ls-lsobsrc.tgz-rw-r--r--1rootroot483997Ju1l517:3lsobsrc.tgz博创科技嵌入互动查看文
本文标题:05_Linux文件系统
链接地址:https://www.777doc.com/doc-3164854 .html