在Linux中,有三种基本文件类型:(1)普通文件、(2)目录、(3)设备文件
一、普通文件
普通文件是以字节为单位的数据流,包括文本文件、源码文件、可执行文件等。文本和二进制文件对Linux来说并无区别,对普通文件的解释由处理该文件的应用程序进行。
二、目录
目录可以包括普通文件和特殊文件、目录相当于Windows和MAC中的文件夹。
三、设备文件
设备文件也被称为特殊文件,设备文件和普通文件不同的是,设备文件中并不包含任何数据。Linux与外部设备(例如光驱、打印机、终端、modern等)是通过一种被称为设备文件的的文件来进行通信。Linux输入输出到外部设备的方式和输入输出到一个文件的方式是相同的。Linux和一个外部设备通讯之前,这个设备必须首先要有一个设备文件在。
设备文件由两种:字符设备文件和块设备文件。
(1)字符设备文件:以字母“c”开头。字符设备文件向设备传输数据时,一次传送一个字符。典型的通过字符传送数据的设备由终端,打印机、绘图机、moderm等。字符设备文件又是也被称为“raw”设备文件。
(2)块设备文件:以字符“b”开头。块设备文件向设备传送数据时,先从内存中的buffer中读或写数据,而不是直接传送数据到物理磁盘。磁盘和CD-ROMS既可以使用字符设备文件也可以使用块设备文件。
Linux文件基本属性
Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在Linux系统中可以利用ls -l命令来显示文件的属性以及文件所属的用户和组
每一行分位7列:
第一列:文件类型
第二列:表示文件个数。如果是文件,那么就是1;如果是目录,那么就是该目录中文件的数目。
第三列:文件的所有者,即文件的创建者。
第四列:文件所有者所在的用户组。在Linux中,每个用户都隶属于一个用户组。
第五列:文件大小(以字节计)。
第六列:文件被创建或者上次被修改的时间。
第七列:文件名或目录名。
(*每个目录都有一个指向它本身的子目录“.”和指向它上级目录的子目录“..”,所以对于一个空目录来说它的文件个数应该位2。)
第一列是由前10个字符组成的,如上面图片中的drwxrwxr-x。这10为字符的意义为:
0位:标识文件类型
-:普通文件。如文本文件、而进制可指向文件、源代码等。
b:块设备文件。
c:字符设备文件。
d:目录文件。
l:符号链接(软连接)。可以来链接任何普通文件,类似于Windows中的快捷方式。
p:具名管道。管道是进程间的一种通信机制。
s:用于进行间通信的套接字。
1-3位:标识该文件的所有者对文件的权限。owner
4-6位:标识所有者的同组用户拥有该文件的权限。group
7-9位:标识其他用户拥有该文件的权限。others
r:可读(read)
w:可写(write)
x:可执行(execute)
-:没有权限
rwx的顺序不会发生变化,如何某个用户没有用于这项权限这项会使用“-”来替代。
Linux文件的属主和属组
对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。同时,Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件的所有者以外的用户又可以分为文件所有者和其他用户。所以,Linux系统按文件所有者、文件所有者同组和其他用户规定了不同文件的访问权限。文件的权限无法限制root用户。
更改文件属性
1、chgrp:更改文件属组
chgrp [-R] 属组名 文件名
参数选项:
-R:递归更文件属性,就是在更改某个文件属组时,如果加上-R的参数,那么该目录下所有的文件的属组都会被修改。
chown:更改文件属主,也可以同时更改文件属组。
chown :更改文件属主,也可以同时更改文件属组
chown [-R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
3、chmod:更改文件9个属性
Linux文件属性有两种设置方法(1)数字(2)符号。
一、数字:
Linux文件的基本权限就要9个,分别为owner/group/others三种身份各有自己的read/write/exceute权限。
其中每种权限都是由对应的分值的,read对应的分数为4,write对应的分数为2,exceute对应的分数为1,“-”对应的分数为0。
比如HelloWorld.cpp对应身份的权限为:rw-、rw-、r--,对应的分数为6,6,4。下面我们将该文件每个身份对应的权限都打开,那数字对应的就是777。
chmod [-R] xyz 文件或目录
选项与参数:
xyz:表示各个身份对应的分数。
-R:递归地更改文件和目录。
二、符号:
Linux的三种身份为:
(1)user(owner)
(2) group
(3) others
那么就可以使用u、g、o来表示三种身份的权限。此外,a表示all,即全部身份。读写权限可以写成r,w,x,-。
chomd u=xyz,g=xyz,o=xyz
chmod a +/- [x,y,z]
当不赋予某个身份某个权限时,就直接不用写,不需要写-。