Linux文件权限

228 阅读7分钟

本文正在参与 “走过Linux 三十年”话题征文活动

Linux文件权限

Linux文件属性

ls -al 命令查看文件

[root@study ~]# ls -al
total 48
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg

ls是“list”的意思,显示文件的文件名与相关属性。而选项“-al”则表示列出所有的文件详细的权限与属性 (包含隐藏文件,就是文件名第一个字符为“ . ”的文件)。

第一栏代表这个文件的类型与权限(permission):

第一个字符代表这个文件是“目录、文件或链接文件等等”:

  • 当为[ d ]则是目录
  • 当为[ - ]则是文件
  • 若是[ l ]则表示为链接文件(link file);
  • 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
  • 若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)。

接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

  • 第一组为“文件拥有者可具备的权限”,以“initial-setup-ks.cfg”那个文件为例, 该文件的拥有者可以读写,但不可执行;
  • 第二组为“加入此群组之帐号的权限”;
  • 第三组为“非本人且没有加入本群组之其他帐号的权限”。

第二栏表示有多少文件名链接到此节点(i-node):

每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使用文件名来记录, 因此每个文件名就会链接到一个i-node!这个属性记录的,就是有多少不同的文件名链接到相同的一个i-node号码去就是了。

第三栏表示这个文件(或目录)的“拥有者帐号”

第四栏表示这个文件的所属群组

第五栏为这个文件的容量大小,默认单位为Bytes

第六栏为这个文件的创建日期或者是最近的修改日期:如果想要显示完整的时间格式,使用“ls -l --full-time”命名。

第七栏为这个文件的文件名

如果文件名之前多一个“ . ”,则代表这个文件为“隐藏文件”,例如上表中的.config那一行,该文件就是隐藏文件。

如何改变文件属性与权限

chgrp :改变文件所属群组 chown :改变文件拥有者 chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

chgrp :改变文件所属群组

改变一个文件的群组真是很简单的,直接以chgrp来改变即可,这个指令就是change group的缩写,要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误

chown :改变文件拥有者

改变拥有者就是change owner

使用者必须是已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变

chmod :改变文件的权限, SUID, SGID, SBIT等等的特性

数字类型改变文件权限

Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限

例如:

chmod 777 .bashrc

符号类型改变文件权限

基本上就九个权限分别是 (1)user (2)group (3)others三种身份那么我们就可以借由u, g, o来代表三种 身份的权限,此外, a 则代表 all 亦即全部的身份

| chmod | u g o a | +(加入) -(除去) =(设置) | r w x | 文件或目录

例如:

chmod u=rwx,go=rx .bashrc
chmod a-x .bashrc

目录与文件之权限意义

文件权限

文件是实际含有数据的地方,包括一般文本文件、数据库内容档、二进制可可执行文件(binary program)等等。 因此,权限对于文件来说,他的意义是这样的: r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等; w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件); x (execute):该文件具有可以被系统执行的权限。

目录权限

r (read contents in directory): 表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!

w (modify contents of directory):

  • 创建新的文件与目录;
  • 删除已经存在的文件与目录(不论该文件的权限为何!)
  • 将已存在的文件或目录进行更名;
  • 搬移该目录内的文件、目录位置。

x (access directory): 目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!就是当你登陆Linux时, 你所在的主文件夹就是你当下的工作目录。

变换目录的指令是“cd”(change directory)

Linux文件种类

正规文件(regular file ): 就是一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字符为 [ - ],例如 [-rwxrwxrwx ]。另外,依照文件的内容,又大略可以分为:

  • 纯文本文件(ASCII):这是Linux系统中最多的一种文件类型啰, 称为纯文本文件是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。
  • 二进制档(binary):Linux当中的可执行文件(scripts, 文字体批处理文件不算)
  • 数据格式文件(data): 有些程序在运行的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登陆时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够通过last这个指令读出来, 但是使用cat时,会读出乱码,因为他是属于一种特殊格式的文件。

目录(directory): 就是目录啰~第一个属性为 [ d ],例如 [drwxrwxrwx]。

链接文件(link): 就是类似Windows系统下面的捷径啦! 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ;

设备与设备文件(device): 与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:

  • 区块(block)设备文件 :就是一些储存数据, 以提供系统随机存取的周边设备,举例来说,硬盘与软盘等就是啦! 你可以随机的在硬盘的不同区块读写,这种设备就是区块设备,你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]喔!

  • 字符(character)设备文件:一些序列埠的周边设备, 例如键盘、鼠标等等!这些设备的特色就是“一次性读取”的,不能够截断输出。 举例来说,你不可能让鼠标“跳到”另一个画面,而是“连续性滑动”到另一个地方啊!第一个属性为 [ c ]。

数据接口文件(sockets): 既然被称为数据接口文件, 这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听用户端的要求, 而用户端就可以通过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/run或/tmp这些个目录中看到这种文件类型了。

数据输送档(FIFO, pipe): FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。