Linux文件权限与属性详解 之 一般权限

Linux文件权限与属性详解 之 ACL

Linux文件权限与属性详解 之 SUID、SGID & SBIT

Linux文件权限与属性详解 之 chattr & lsattr

Linux文件权限与属性详解 之 su & sudo

一般属性

  1. iNode: 3152621

    1). 何为iNode

    2). iNode内容

    3). iNode 大小

    4). iNode 号
  2. 文件类型

    1). 文件和目录

    2). 字符串设备和块设备文件:

    3). 链接文件

    4). socket文件
  3. 文件访问权限
  4. 链接数目:
  5. 文件所有者
  6. 文件所属组
  7. 文件大小
  8. 修改时间
  9. 文件名称

Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

对于文件或目录,除了具备一般的读写执行等普通属性(权限)外,其实还具备了很多的特殊属性(权限),下面听我慢慢道来!

一般属性

Linux的文件或目录属性主要包括:文件或目录的节点、种类、权限、链接数量、所有者和所属组、最近访问或修改的时间等内容;

例如,我们可以使用 ls -alih

[niesh@aat-sh aat-r1a]$ ls -alih
total 116K
1595625 drwxr-x---. 11 niesh niesh 4.0K Jul 26 15:40 .
1575954 drwx------. 10 niesh niesh 4.0K Jul 26 15:40 ..
1595627 -rw-r--r--. 1 niesh niesh 43K Jul 21 17:37 .13ca1a0c-b2e8-11e6-a60b-8b459dcd00e6
3152621 -rwxr-xr-x. 1 niesh niesh 12K Jul 21 17:34 aat
3152671 -rw-rw-r--. 1 niesh niesh 367 Jul 24 15:08 AAT.conf
1600855 drwxr-xr-x. 17 niesh niesh 4.0K Jul 21 17:34 data
3152663 drwxr-xr-x. 4 niesh niesh 4.0K Jul 21 17:34 license
3151254 drwxrwxr-x. 15 niesh niesh 4.0K Jul 21 17:34 local
3151228 drwxrwxr-x. 2 niesh niesh 4.0K Jul 24 14:19 log
1575043 -rwxr-xr-x. 1 niesh niesh 12K Jul 24 15:42 .serviceaat
[niesh@aat-sh aat-r1a]$

以上总共对应了8段字符,每段字符的解释如下:

  1. iNode:节点,文件/目录在文件系统中对应的唯一值
  2. 文件类型:目录、文件还是其它
  3. 文件权限:不同用户对该文件所具备的权限
  4. 链接数目:硬链接数目
  5. 文件所有者:文件的主人
  6. 文件所属组:文件所属的组
  7. 文件大小
  8. 文件修改时间:文件最后的访问/修改时间
  9. 文件名

此处,我们以 aat 为例进行解释:

3152621 -rwxr-xr-x.  1 niesh niesh  12K Jul 21 17:34 aat

1. iNode: 3152621

1). 何为iNode

顾名思义为索引节点.

每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是 inode ,另一部份是 Block. Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件.

2). iNode内容

我们可以使用 stat aat 来查看aat文件的iNode的详细内容。

[niesh@aat-sh aat-r1a]$ stat aat
File: `aat'
Size: 12046 Blocks: 24 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 3152621 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 558/ niesh) Gid: ( 558/ niesh)
Access: 2017-07-24 14:08:09.178005527 +0800
Modify: 2017-07-21 17:34:14.773005438 +0800
Change: 2017-07-21 17:37:05.799005438 +0800
[niesh@aat-sh aat-r1a]$

由以上信息可以看出,iNode包含如下信息:

  • 文件名
  • 文件大小(以字节为单位)
  • 文件数据的Block位置
  • 链接数
  • UID
  • GID
  • 文件的执行权限
  • 时间戳:atime(最近访问时间),ctime(状态改变时间),mtime(最近修改时间)

3). iNode 大小

iNode同样会占用硬盘空间, 所以硬盘格式化的时候,OS会自动分成两个区域:iNode区(存放iNode)和Block区(存放数据).

一个iNode所占用空间的大小一般为128/256Byte,我们可以使用 df -i查看系统的iNode总量和使用情况,如下:

niesh@server65:~$ df -ih|grep -v none
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 12M 111K 12M 1% /
udev 3.0M 453 3.0M 1% /dev
tmpfs 3.0M 597 3.0M 1% /run
/dev/sda1 299K 298 298K 1% /boot

查看一下iNode占用空间的大小,使用 dumpe2fs -ih /dev/sda1 | grep -i node进行查看:

niesh@server65:~$ dumpe2fs -ih /dev/sda1 | grep -i node
Inode size: 256

4). iNode 号

每个inode都有一个号码,Linux系统内部不使用文件名,而使用inode号来识别文件。对于系统来说,文件名只是inode号码便于识别的别称。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

我们可以使用 ls -i命令查看文件/目录的iNode号

[niesh@aat-sh aat-r1a]$ ls -il aat
3152621 -rwxr-xr-x. 1 niesh niesh 12046 Jul 21 17:34 aat

2. 文件类型

Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念。我们通过一般应用程序而创建的比如file.txt、file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文件类型中衡量的话,大多是常规文件(也被称为普通文件)。

Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等

可使用 file <file-name> 命令进行查看文件类型:

[niesh@niesh Desktop]$ file other.py
other.py: Python script, ASCII text executable

1). 文件和目录

我们使用 ls -lh 查看一下桌面文件:

[niesh@niesh Desktop]$ ls -lh
总用量 8.0K
-rw-rw-r--. 1 niesh niesh 2.2K 7月 27 10:20 endian.c
drwxr-xr-x. 2 root root 70 6月 19 16:36 LN
-rw-r--r--. 1 niesh niesh 115 6月 15 17:07 other.py

查看第一个字符:

- :普通文件(包括字符文件和二进制文件),可使用 touch <file-name进行创建;

d : 目录文件,可使用 mkdir <dir-name>进行创建

2). 字符串设备和块设备文件:

我们去查看/dev目录下的文件,显示如下:

[niesh@niesh ~]$ ls -lh /dev/
crw--w----. 1 root tty 4, 0 6月 29 23:18 tty0
brw-rw----+ 1 root cdrom 11, 0 6月 29 23:18 sr0

c : 为字符串设备,若路由器等设备

b : 块设备,若硬盘、光驱等

3). 链接文件

同样去查看/dev目录,我们发现了一些以l开头的文件,如下所示:

[niesh@niesh ~]$ ls -lh /dev/
lrwxrwxrwx. 1 root root 15 6月 29 23:18 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 6月 29 23:18 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 6月 29 23:18 stdout -> /proc/self/fd/1

l : 为链接文件,具体请看第4小节目

4). socket文件

查看 /dev目录下的文件,会发现有s类型的文件,如下所示:

[niesh@niesh ~]$ ll /dev/
srw-rw-rw-. 1 root root 0 6月 29 23:18 log

s:套接字文件,仅作了解即可

3.文件访问权限

Linux的访问权限分为 执行三种,可以使用 ls -l进行查看:

[niesh@niesh Desktop]$ ls -lh
总用量 8.0K
-rw-rw-r--. 1 niesh niesh 2.2K 7月 27 10:20 endian.c
drwxr-xr-x. 2 root root 70 6月 19 16:36 LN

r:可读(4)

w:可写(2),对于目录来说表示可在目录中新建文件

x:可执行(1),对于目录来说为可进入到该目录中

-:表示无对应位上的权限

仔细数一下,你会发现权限位总共有9位,每3位一组,那么这三组分别为何方神圣呢?(以 LN为例)

第一组(rwx):表示文件所有者的权限,该文件的所有者为root,具备可读 可写 可执行的全部权限

第二组(r-x):文件所属组的权限,具备可读 可执行

第三组(r-x):其他人的权限(跟本文件无关的人),具备可读 可执行

  • 更改文件权限

    命令:chmod xxx < file-name >

    r=4, w=2, x=1
[niesh@niesh Desktop]$ ls -lh
-rw-rw-r--. 1 niesh niesh 2.2K 7月 27 10:20 endian.c
[niesh@niesh Desktop]$ chmod 754 endian.c
[niesh@niesh Desktop]$ ls -lh
-rwxr-xr--. 1 niesh niesh 98 7月 27 10:34 endian.c

4代表读权限,2代表写权限,1代表执行权限

7=4+2+1,表示拥有可读可写可执行权限

5=4+1,表示拥有可读可执行权限,但是没有写权限

4 代表拥有可读权限

0 代表没有任何权限

以此类推

4. 链接数目:

对于一个文件来说,有唯一的索引接点与之对应,而对于一个索引接点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问该文件。

链接文件,是Linux中经常使用和非常重要的一个概念,Linux下,链接可以分为两类:

  • 软链接

    又称为符号链接,类似于Windows下的快捷方式,方便文件的查询等,只是一段文字,里面包含着它所指向的文件的名字,系统看到软链接后自动跳到对应的文件位置处进行处理

    创建方式:ln -s source target
  • 硬链接

    硬链接相当于为本文件开设了一个新的文件,但两个文件执行同一个iNode,改变一个文件的内容另一个随之改变,相当于“连体婴”;两个文件时平权的,一个删除另一个照样可用

    创建方式:ln source target

可以使用ls -l进行查看,如下:

[niesh@niesh ~]$ ls -lh /dev/
lrwxrwxrwx. 1 root root 15 6月 29 23:18 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 6月 29 23:18 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 6月 29 23:18 stdout -> /proc/self/fd/1

目录,用于记录本目录下的文件名等信息,iNode本身不记录文件名,因此对文件的新增、删除、修改必须具备上层目录的 w(写) 权限。



多个档名对应同一个inode,硬链接只是在某个目录下新增一笔档名链 接到某个inode号码的关联记录而已。如果将上图中任何一个档名删除,档案的inode与block都还存在,依然还可以通过另一个档名来读取正确的档 案数据。此外,不论用哪一个档名来编辑,最终的结果都会写入相同的inode和block中,因此均能进行数据的修改。



软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它link的那个档案的档名,由于只是作为指向的动作,所以当来源档案被删除之后,软连接的档案无法开启,因为找不到原始档名。连结档的内容只有档名,根据档名链接到正确的目录进一步取得目标档案的inode,最终就能够读取到正确的数据。如果目标档案的原始档名被删除了那么整个环节就进行不下去了。

我们使用ls -l查看到的链接数目,其实就是有多少个文件/目录链接到本文件/目录;对文件而言比较容易理解;对目录而言,内部包含多少个子目录就有多少个链接文件(目录不允许用户创建软连接):

[niesh@niesh ~]$ ll
总用量 0
drwxr-xr-x. 3 niesh niesh 77 7月 27 10:34 Desktop
以上,Desktop有3个链接文件,为 . .. LN [niesh@niesh Desktop]$ ll
总用量 20
drwxr-xr-x. 3 niesh niesh 77 7月 27 10:34 .
drwx------. 19 niesh niesh 4096 7月 27 13:51 ..
drwxr-xr-x. 2 root root 70 6月 19 16:36 LN [niesh@niesh Desktop]$ mkdir test
我再建一个目录test
[niesh@niesh Desktop]$ ll
总用量 20
drwxr-xr-x. 3 niesh niesh 77 7月 27 10:34 .
drwx------. 19 niesh niesh 4096 7月 27 13:51 ..
drwxr-xr-x. 2 root root 70 6月 19 16:36 LN
drwxrwxr-x. 2 niesh niesh 6 7月 27 13:54 test 下面我们查看一下Desktop的链接数目:
[niesh@niesh ~]$ ll
drwxr-xr-x. 4 niesh niesh 88 7月 27 13:54 Desktop
变为4个了,验证完毕

5. 文件所有者

即文件的拥有者,通常为文件的创建者。

创建文件/目录有其默认的属性:

文件:-rw-rw-rw- (666)

目录:drwxdwxdwx (777)

但实际上我们新建文件/目录后,查看属性,发现并不是以上默认值:

[niesh@niesh Desktop]$ mkdir dir
[niesh@niesh Desktop]$ touch file
[niesh@niesh Desktop]$ ls -lh
总用量 0
drwxrwxr-x. 2 niesh niesh 6 7月 27 14:37 dir
-rw-rw-r--. 1 niesh niesh 0 7月 27 14:37 file
drwxr-xr-x. 2 root root 70 6月 19 16:36 LN

以上可以看出

  • 文件的权限为-rw-rw-r--
  • 目录的权限为drwxrwxr-x

这是由于 umask 造成的

[niesh@niesh Desktop]$ umask
0002

umask的默认值为0002,

第一位为特殊权限(后面讲解),

第二位为文件所有者权限,

第三位为文件所属组权限

第四位为其它人权限

则用户创建后的权限为:

文件权限: -rw-rw-rw- - -------w- = -rw-rw-r--

目录权限:drwxdwxdwx - ----w--w- = dwrxrwxr-x

当然你也可以自己更改:

[niesh@niesh Desktop]$ umask 007
[niesh@niesh Desktop]$ umask
0007
[niesh@niesh Desktop]$ touch aa
[niesh@niesh Desktop]$ mkdir bb
[niesh@niesh Desktop]$ ls -lh
总用量 0
-rw-rw----. 1 niesh niesh 0 7月 27 14:53 aa
drwxrwx---. 2 niesh niesh 6 7月 27 14:53 bb
drwxr-xr-x. 2 root root 70 6月 19 16:36 LN
[niesh@niesh Desktop]$

你看,改了吧!

  • 更改文件所有者

    命令:chown username file|directory
[niesh@niesh Desktop]$ ll
总用量 0
drwxr-xr-x. 2 root root 70 6月 19 16:36 LN [niesh@niesh Desktop]$ sudo chown niesh LN
[sudo] password for niesh: [niesh@niesh Desktop]$ ll
总用量 0
drwxr-xr-x. 2 niesh root 70 6月 19 16:36 LN

6. 文件所属组

即文件的所属Group,其设置等方法类似文件所有者

  • 更改文件所属组

    命令:chgrp groupname file|directory
[niesh@niesh Desktop]$ ll
总用量 0
drwxr-xr-x. 2 niesh root 70 6月 19 16:36 LN [niesh@niesh Desktop]$ chgrp niesh LN [niesh@niesh Desktop]$ ll
总用量 0
drwxr-xr-x. 2 niesh niesh 70 6月 19 16:36 LN
[niesh@niesh Desktop]$

7. 文件大小

文件大小即文件锁占用的字节数,这对于文件来说很容易理解,但对于目录,需要清晰的知道目录是什么,占用空间的目的等。

  • 何为目录

    目录其实就是文件夹,是一组信息的集合,用于连接和包含各个文件名
  • 目录内容

    RedHat 默认的目录最小为4k,但我的CentOs是按照实际显示的

    你可以用 vim 来查看目录锁包含的内容
[niesh@niesh Desktop]$ ll
总用量 0
drwxr-xr-x. 2 niesh niesh 70 7月 27 15:29 LN [niesh@niesh Desktop]$ ll LN/
总用量 32
-rwxr-xr-x. 1 root root 8976 6月 19 16:36 getlongopt
-rwxrwxrwx. 1 root root 1578 6月 19 16:40 getlongopt.c
-rwxrwxrwx. 1 root root 8734 6月 19 13:29 getopt
-rwxrwxrwx. 1 root root 1237 6月 19 13:29 getopt.c [niesh@niesh Desktop]$ vim LN/



看,里面是不是包含了所有的文件/目录名?

里面的.swp文件为swap,请自行google.

8. 修改时间

一般,文件包括三个时间:

  • atime (access time)

    最近访问时间,即最近在社么时间访问了该文件
  • ctime (changed time)

    状态该表时间,即对文件的执行权限进行了修改的时间
  • mtime (modify time)

    修改时间,即最近什么时候对文件进行了修改

PS: Linux没有创建时间的概念

ls显示的时间为mtime

另外,你可以使用 stat <file-name>查看文件的详细信息(上面已述)

9. 文件名称

这里只有一点需要注意:

文件名前加 . 为隐藏文件


Linux文件权限与属性详解 之 一般权限的更多相关文章

  1. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  2. Linux文件权限与属性详解 之 ACL

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  3. Linux文件权限与属性详解 之 chattr & lsattr

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  4. Linux文件权限与属性详解 之 su & sudo

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...

  5. 轻松学习Linux之Shell文件和目录属性详解

    轻松学习Linux之Shell文件和目录属性详解 轻松学习Linux之理解Sitcky 轻松学习Linux之理解umask 轻松学习Linux之理解SUID&SGUID 本系列多媒体教程已完成 ...

  6. Linux文件权限与属性详解 之 SUID、SGID&SBIT

    一.SetUID 1.Linux普通用户可以修改自己的密码,这个是一个合情合理的设置; 修改密码其实修改的是/etc/shadow这个文件,这个文件的属性: ----------. 1 root ro ...

  7. linux 文件查找 find命令详解

    一,从索引库查找文件:locate 索引库:操作系统会周期性的遍历根文件系统,然后生成索引库 手动更新索引库:updatedb 语法:locate [OPTION]... PATTERN... 只匹配 ...

  8. linux学习7 Linux文件系统功能和作用详解

    一.终端 1.用户界面 GUI: GNome KDE CLI: bash,zsh,sh,csh,tcsh,ksh 2.远程连接 a.ssh协议. 查看系统是否监听于tcp协议的22号端口: ss  - ...

  9. Linux文件处理命令 ls 详解

    Linux系统的应用场景最多的就是用作服务器的系统了,简洁,安全,高效,一般我们服务器端不会安装Linux的图形化界面,虽然现在一些Linux发行版的图形界面也很漂亮,但是,服务器最主要的是高效.所以 ...

随机推荐

  1. Java 包与类的命名(util、service、tool、dao )区别

    util 通用的.与业务无关的,可以独立出来,可供其他项目使用.方法通常是public static,一般无类的属性,如果有,也是public static. service 与某一个业务有关,不是通 ...

  2. 公用表表达式 (CTE)、递归、所有子节点、sqlserver

    指定临时命名的结果集,这些结果集称为公用表表达式 (CTE).公用表表达式可以包括对自身的引用.这种表达式称为递归公用表表达式. 对于递归公用表达式来说,实现原理也是相同的,同样需要在语句中定义两部分 ...

  3. 将表格添加到Word文档中 ,包括表格样式设置

    创建 Table 对象并设置其属性 在您将表格插入文档之前,必须创建 Table 对象并设置其属性. 要设置表格的属性,请创建TableProperties对象并为其提供值. TablePropert ...

  4. 【Android开源库】 PagerSlidingTabStrip从头到脚

    简介 PagerSlidingTabStrip,是我个人经常使用到的一个和ViewPager配合的页面指示器,可以满足开发过程中常用的需求,如类似于今日头条的首页新闻内容导航栏等等,之前自己开发的Ju ...

  5. tornadoの2

    tornado之日记本——   1.diary.py:   import time from model.database import DataBase from tornado import we ...

  6. 万里长征第一步:Python进程池的一点点小坑

    # -*- coding: utf- -*- """ Created on Thu Mar :: @author: lilide """ # ...

  7. python网络爬虫开发实战(崔庆才)_14页_chromedriver环境配置和加载

    自己1,环境配置,我下载了相对应的Chromedriver(其实我也不知道对不对应,都是下载最新版的我猜应该会对应),然后在任何文件夹下输入command+shift+G,打开输入窗口,任何输入  / ...

  8. Oracle ebs 数据脱敏

    https://blog.csdn.net/pan_tian/article/details/16120351Data Masking可对数据进行不可逆的去身份化后,再用于非生产环境,同时自动保留引用 ...

  9. 'An instance 0x155e74a0 of class UIWebView was deallocated while key value observers were still registered with it.

    在iOS和html混编的时候,当用iOS原生的navigation导航pop回去的时候,出现 *** Terminating app due to uncaught exception 'NSInte ...

  10. 协程 及 libco 介绍

    libco 是腾讯开源的一个协程库,主要应用于微信后台RPC框架,下面我们从为什么使用协程.如何实现协程.libco使用等方面了解协程和libco. why协程 为什么使用协程,我们先从server框 ...