Linux入职基础-2.3

xiaoxiao2021-03-01  12

Linux入职基础-2.3_文件属性与普通权限操作

Linux 文件属性概要

Linux 文件(或目录)的属性主要包括:文件(或目录)的节点种类权限模式链接数量、所归属的用户用户组文件大小、最近修改的时间文件名等内容。

[root@localhost ~]# ls -li

total 108

800009 -rw------- 1 root root 1646 Nov 12 23:42 anaconda-ks.cfg

800037 drwxr-xr-x 2 root root 4096 Nov 12 23:51 Desktop

800227 -rw-r--r-- 1 root root   21 Nov 14 11:10 enginer001.txt

800223 lrwxrwxrwx 1 root root   14 Nov 14 11:10 enginer002.txt -> enginer001.txt

800002 -rw-r--r-- 1 root root 33244 Nov 12 23:42 install.log

800003 -rw-r--r-- 1 root root 4068 Nov 12 23:42 install.log.syslog

800226 -rwxr-xr-x 1 rootroot    21 Nov 14 11:03 mylsfile.shell

800220 drwxr-xr-x 2 root root 4096 Nov 14 11:00 mysoft_dir

800225 -rw-r--r-- 2 root root   33 Nov 14 11:01 sinfo001.txt

800225 -rw-r--r-- 2 root root   33 Nov 14 11:01 sinfo.txt

解释:

第一字段:inode;

第二字段:文件种类和权限;

第三字段:硬链接个数;

第四字段:所有者;

第五字段:所归属的组;

第六字段:文件或目录的大小,默认单位为字节(bytes);

第七字段:最后创建或修改月/日(日期),--full-time参数显示年/月/日;

第八字段:最后创建或修改时/分;

第九字段:文件名或目录名,“.filename”表示隐藏文件。

以mylsfile.shell为例:

800226-rwxr-xr-x 1 root root    21 Nov 14 11:03mylsfile.shell

inode 的值是:800226

文件类型:文件类型是-,表示这是一个普通文件

文件权限:权限rwxr-xr-x ,表示文件属主可读、可写、可执行,文件所归属的用户组可读、可执行,其它用户可读、可执行;“-”表示无权限;

硬链接个数:数值是1,这个文件没有硬链接,就是他本身;

文件所有者:root,这个文件它归于root用户所有;

文件属组:root,这个文件它亦归属于root用户组;

文件大小:21,表示文件大小是21个字节;

访问与修改时间:Nov 14 11:03,这里的时间是最后修改的时间;

文件名: mylsfile.shell。

1、文件隐藏属性:

属性A:存取此文件(或目录)时,它的存取时间atime将不会被修改;

属性S:对任何文件的修改,该更动会同步写入磁盘中(一般文件是非同步写入);

属性a文件将只能添加数据,而不能删除也不能修改数据;

属性c:先进行压缩后再储存,在读取的时候将会自动解压缩;

属性d:当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份;

属性i:一个文件不能被删除、改名、链接,亦无法写入或新增数据;

属性s:如果这个文件被删除,将会被完全的移除出这个硬盘空间,无法找回;

属性u: 如果该文件被删除了,则数据内容其实还存在硬盘中,可救援该文件。

配置文件隐藏属性:chattr [+-=][ASacdistu] 文件或目录名称

显示文件隐藏属性:lsattr [-adR] 文件或目录

举例如下:

[root@localhost /]# ll test

-rw-r--r-- 1 root root 0 Nov 17 22:03 a

-rw-r--r-- 1 root root 0 Nov 17 22:05 b.txt

[root@localhost /]# chattr +i test     //给test目录加i属性

[root@localhost /]# lsattr -d test

----i-------- test

[root@localhost /]# touch test/c.txt      //root用户新建文件

touch: cannot touch `test/c.txt': Permission denied  //root denied

2、inode(索引节点)

目前比较新的操作系统的文件数据除了文件实际内容外,通常含有很多的属性;如文件权限(rwx)与文件属性(拥有者、群组、时间等)。文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际内容数据则放置到data block 区块中;还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

inode为每个文件进行信息索引,所以就有了inode的数值,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;操作系统根据指令,能通过inode值最快的找到相对应的文件。

inode 相同的文件是硬链接文件,链接文件是通过ln工具来创建的。

[root@localhost~]# ln   sinfo.txt  sinfo001.txt

一个inode值可以对应多个文件,不同的文件名。其硬链接个数是1,创建了硬链接sinfo001.txt创建后,硬链接个数增加1变成了2。

inode值相同的文件,属性几乎是完全一样,修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化;删除互为硬链接关系的某个文件,其它的文件并不受影响。

举例:

把sinfo.txt删除后,我们还是一样能看到sinfo001.txt的内容,并且 sinfo001.txt仍存在的,能看到内容。

软件链接文件(亦称符号链接文件)的inode值是不同的。

对比结果如下:

两个文件节点的inode值不同;种类不同(-,l);读写权限不同;修改时间不同。

硬链接个数相同;文件的所有者和归属的用户组相同。

当我们修改链接文件的内容时,就意味着我们在修改源文件的内容;当然源文件的属性也会发生改变,链接文件的属性并不会发生变化。

软链接文件只是占用了inode来存储软链接文件属性等信息,但文件存储是指向源文件的。当把源文件删除后,失去了源文件,软链接文件也就不存在了;这一点和硬链接是不同的;

注意:

硬链接,不能为目录创建,只有文件才能创建硬链接;

软件链接,可以为文件或目录都可创建。

3、文件类型

- 表示普通文件

d 表示目录文件

l 表示符号连接文件

c 表示字符设备文件

b 表示块设备文件

s 表示socket文件

p 表示命名管道文件

普通文件(-)

由 ls -al 所显示出来的属性方面,第一个字符为 [ - ],

例如 [-rwxrwxrwx ]

依照普通文件的内容,又略可以分为:

i、纯文本档(ASCII):可以直接读到的数据,例如数字、字母等等。

ii、二进制文件(binary):系统直接认识,可以执行的文件。

iii、数据格式文件(data):些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。比如, /var/log/wtmp是一个data file文件,需要last这个指令来读出,若用cat读会出乱码,因为它是属于一种特殊格式的文件,记录登录的数据。

目录文件(d)

由 ls -al 所显示出来的属性方面,第一个字符为 [ - ],

[root@localhost ~]# ls -lid mysoft_dir/

800220 drwxr-xr-x 2 rootroot 4096 Nov 14 11:00 mysoft_dir/

符合链接文件(l)

[root@localhost ~]# ls -lienginer*

800224 -rw-r--r-- 1 rootroot  0 Nov 15 15:51 enginer001.txt

800223 lrwxrwxrwx 1 root root 14 Nov 14 11:10 enginer002.txt ->enginer001.txt设备文件(b/c)

c表示字符设备文件,比如猫等串口设备。

[root@localhost ~]# ls -li/dev/tty

1675 crw-rw-rw- 1root tty 5, 0 Nov 14 10:18 /dev/tty

b表示块设备文件,比如硬盘,光驱等设备。

[root@localhost ~]# ls -li /dev/sda

1081 brw-r----- 1root disk 8, 0 Nov 14 18:18 /dev/sda

数据接口文件(s)

这种类型的文件常被用在网络上的数据传输。启动一个程序来监听客户端的要求,而客户端就可以透过这个socket来进行数据的沟通;启动MySQL服务器会产生一个mysql.sock的文件。常在/var/run目录中看到这种文件类型。

管道文件(p)

解决多个程序同时存取一个文件所造成的错误问题。

有些资料也称数据输送文件。

关注知识点:要知道某个文件的基本数据,例如,ASCII 或者是 data 文件,或者是 binary文件, 是否使用到动态函式库 (share library) 等等,可使用 file 这个命令来查看:

[root@localhost ~]# file /var/lib/mlocate/mlocate.db

/var/lib/mlocate/mlocate.db: data

[root@localhost ~]# file ~/.bashrc

/root/.bashrc: ASCII text

[root@localhost ~]# file /usr/bin/passwd

/usr/bin/passwd: setuid ELF 32-bit LSB executable, Intel 80386,version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs),for GNU/Linux 2.6.9, stripped

[root@localhost ~]# ll  /usr/bin/passwd

-rwSr-xr-x 1 root root 23420 Aug 3  2010 /usr/bin/passwd

4、文件(或目录)的普通权限

Linux的文件属性,有一个16位的字(2字节)来表示文件的类型和权限信息,其中4位表示文件的类型信息,剩下的12位表示文件的权限模式。如下图:

12位权限模式的组成:

9个权限位(普通权限位)用来控制谁能够读写和执行该文件内容,还有一组3个权限位(特殊权限位)来影响与控制可执行程序运行时的表现,这12个位就共同构成了该文件的权限模式(mode)。

①普通权限(9位):

9个权限位就分别被分成3组:

第一组3位(r、w、x):控制属主的访问权限;

第二组3位(r、w、x):控制属组的访问权限;

第三组3位(r、w、x):控制其他每个人访问权限。

在上面的每个3位一组中,高位是读取位(r),中间位是写入位(w),低位是执行位(x)。

②特殊权限(3位):

高位SUID位: 只对二进制执行文件有效;让执行该命令的用户以该命令(可执行文件)拥有者的权限去执行。

中位SGID位: 只对二进制执行文件和目录有效;对文件的原理同SUID位类似指“属组”的权限去执行。

低位SBIT位: 只对目录有效,主要预防目录中文件被删除。

5、普通权限(rwx)对于文件与目录有不同的含义

文件主要的内容是存放实际数据,目录主要的内容在存放文件名列表,文件与目录关系很紧密,所以r, w, x对于文件与目录有不同含义的解读。

①对于文件而言

读取位(r):允许打开文件并读取它的内容;

写入位(w):允许新增、修改和删除该文件的内容(但不包含删除此文件真身);

执行位(x):允许该文件能被系统执行,跟文件扩展名没关系的(区别windows系统.exe, .bat, .com等)。

总结:文件的权限(rwx)控制对象是文件的内容,而非文件名!能否删除和重命名(或者删除后再建)该文件则由该文件的父目录上的“9位”权限模式所控制。

②对于目录而言

读取位(r):允许读取目录结构列表,即可以查询该目录下的文件名列表(但,不表示可以进入此目录或读取文件内容,即,可以ls ./dirname/,但不可以 cd ./dirname/或cat ./dirname/filenamexxx);

写入位(w):允许修改目录结构列表,即新建、修改、更名、删除、移动该目录下的文件与子目录(无论它们的权限为何!);

执行位(x):允许进入该目录成为工作目录(目录不可以被执行),即cd命令切换到此目录内。

权限组合效果:

r+x组合:读取位和执行位的组合,作用是控制是否列出目录的内容;

w+x组合:写入位和执行位的组合,作用是否允许在目录中创建、删除和重命名文件。

注意事项:工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限,那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限(可以浏览该目录下的文件)。

举例,关于目录x权限的应用

[rabbit@localhost ~]$ ll /tmp        //rabbit用户浏览/tmp目录

drwxrwxr-x 2 rabbitrabbit  4096 Nov 15 22:23 dirtest  //目录有r、x权限

[rabbit@localhost ~]$ ll /tmp/dirtest/       

-rwxrwxr-x 1 rabbitrabbit 21 Nov 15 22:23 test.sh //目录下文件名可以浏览

[rabbit@localhost ~]$  /tmp/dirtest/test.sh 

this is test                                  //目录下文件可以被执行

[rabbit@localhost ~]$ cat  /tmp/dirtest/test.sh

echo 'this is test '                          //目录下文件内容可以读取

[rabbit@localhost ~]$ chmod -x/tmp/dirtest/  //命令撤消目录x权限

[rabbit@localhost ~]$ ll /tmp |grep dir

drw-rw-r-- 2 rabbitrabbit 4096 Nov 15 22:23 dirtest //目录有r无x权限

[rabbit@localhost ~]$ ll /tmp/dirtest/

?--------- ? ? ? ?            ? test.sh    //允许看到目录下文件名

[rabbit@localhost ~]$ cat  /tmp/dirtest/test.sh

cat: /tmp/dirtest/test.sh:Permission denied   //不允许读取目录下的文件内容

[rabbit@localhost ~]$  /tmp/dirtest/test.sh

bash: /tmp/dirtest/test.sh:Permission denied   //不允许执行目录下的文件

[rabbit@localhost ~]$

[rabbit@localhost ~]$ chmod +x/tmp/dirtest/

[rabbit@localhost ~]$ chmod -r/tmp/dirtest/

[rabbit@localhost ~]$ ll /tmp|grep dirtest

d-wx-wx--x 2 rabbitrabbit  4096 Nov 15 22:23 dirtest  //目录有x无r权限

[rabbit@localhost ~]$ ll/tmp/dirtest/

ls: /tmp/dirtest/: Permissiondenied      //不允许浏览目录下文件

[rabbit@localhost ~]$ cat/tmp/dirtest/test.sh

echo 'this is test '                     //目录下文件内容可以读取

[rabbit@localhost ~]$  /tmp/dirtest/test.sh

this is test                           //目录下文件可以被执行

应用:在架设网站的时候,目录(www/doc)是存放许多xxx.html网页文件数据给因特网的任何人来浏览的,如果目录只开放r的权限,那样的结果就是导致Apache软件无法到该目录下读取文件内容(最多只能看到文件名列表), 用户最终总是无法打开网页(显示权限不足!)

总结:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给!

6、特殊权限(suid,sgid,sbit)对文件或目录的不同意义

本节请看《Linux文件特殊权限与应用》,其中有详细介绍!

7、文件的属主和属组

Linux 系统上的每个文件和进程都属于特定的用户账户。系统文件和进程属于一个称为root的虚拟用户,也叫超级用户。root可以充当任何文件或进程的属主,还可以执行一些特殊操作,而其他用户是无权执行这些操作的。

每个文件都同时有一个属主(owner)和一个属组(group owner),他们都rwx权限;但是,只有文件的属主拥有修改文件访问权限。具体而言,就是属主可以严格地设置文件的访问权限,让其他任何人都不能够访问这个文件。

上几节中我们也介绍了,一个文件的这两种归属关系都可以用ls –l filename 命令来了解。

[root@localhost ~]# ls -l/home/rabbit/b

-rw-r--r-- 1 rootrabbit 0 Nov 17 00:01 s.txt   

实际上Linux用数字来确定属主和属组,而不是用它们的名称,请看下面例子:

[root@localhost ~]# ll/home/rabbit//c/s.txt

-rw-r--r-- 1 test test 0 Nov 1700:01 /home/rabbit//c/s.txt

[root@localhost ~]# userdel test    //删除test用户后

[root@localhost ~]# ll/home/rabbit//c/s.txt     //属主和属组用来数字标识

-rw-r--r-- 1 501501 0 Nov 17 00:01 /home/rabbit//c/s.txt  //test的uid=501

用户标识号(Useridentification numbers:UID)被映射到/etc/passwd文件中的用户名上;组标识号(Group identification Numbers:GID)被映射到/etc/group 文件中的组名。

root帐号在定义上的特征是它的UID为0,不许创建UID 为0的其他帐号。

8、改变文件属性与权限

①权限两种助记符:数值型、字符型

数值型:

使用数字来(4、2、1、0)一一代表各个权限(r、w、x、-),把每种身份(owner/group/others)各自的三个权限(r/w/x)进行分值累加,各权限的分数对照表如下:

r:4  w:2  x:1  -:0      

例如,权限为: [-rwxr-xr---] ,其分值:754

owner = rwx = 4+2+1 = 7

group = r-x = 4+0+1 = 5

others= r-- = 4+0+0 = 4

[rabbit@localhost ~]$ chmod 754 filenamexxx

字符型:

u代表属主,u代表属主,o代表其它用户,a 则代表全部的身份,三种身份的权限(r、w、x)用符号u, g, o来代表。

操作格式如下:

加入:(u, g, o)+(rwx)

除去:(u, g, o)-(rwx)

设定:(u, g, o)=(rwx)

g=u:让属组的权限跟属主的权限完全一样

u+w:为文件的属主添加写入权限

a-x:删除全部3种类别用户的执行权限

例如,设一个文件的权限成为:[-rwxr-xr--]

u=rwx,g=rw,o=r

[rabbit@localhost ~]$ chmodu=rwx,g=rw,o=r filenamexxx

②改变权限的命令:chmod

chmod是用来改变文件或目录权限的命令,但只有文件的属主和超级用户root才有这种权限。

[root@localhost tmp]# ll shell

-rwxr-xr-x 1 root root 33 Nov 13 17:02 shell

设置文件shell权限[-r-xr-xr--],助记符:554或ug=rx,o=r

③默认权限分配命令:umask

umask是通过八进制的数值来定义文件或目录被创建时的缺省权限掩码。每次登录系统时,umask命令都被执行,并自动设置权限掩码来限制新文件和新目录的权限。其配置文件在/etc/bashrc中.

[root@localhost tmp]# umask     //显示该用户当前的umask值

0022                            //root的umask值是0022

[rabbit@localhost tmp]$ umask

0002                           //非root的umask值是0002

默认情况下:用户所能拥有目录的最大权限是777,能拥有文件的最大权限是666(即目录权限减去x)。

当root用户创建文件时,默认的权限则是用文件的最大权限666去掉相应位置的umask值,即文件的默认权限是644。

[root@localhost tmp]# touch testing

[root@localhost tmp]# ll testing

-rw-r--r-- 1 root root 0 Nov 16 11:15 testing   //文件默认的权限644

当root用户创建目录时,默认的权限就是用目录的最大权限777去掉相应位置的umask值权限。即目录的默认权限是755。

[root@localhost tmp]# mkdir test

[root@localhost tmp]# ll -d test

drwxr-xr-x 2 root root 4096 Nov 16 11:29 test   //目录默认权限755

应用场景:设置一个合理的umask值,以确保用户创建的文件具有所期望的缺省权限,防止其它非同组用户对这些文件具有写入的权限。

举例:

[rabbit@localhost ~]$ vi .bashrc

Umask0022              //重新设置umask值

[rabbit@localhost ~]$ wq       //保存

④改变文件或目录的归属关系命令:chown、chgrp

只有超级用户才能改变文件的属主;超级用户和文件的属主(该属主必须同时是目标属组成员)可以改变一个文件(或目录)的的属组。

chown [选项]… [属主][:属组] 文件..

属主必须在/etc/passwd文件中;属组必须在/etc/group文件中。

[root@localhost ~]# ll /tmp | grep a

-rw-r--r-- 1 rabbit rabbit    0 Nov 16 15:10 a

[root@localhost ~]# chown  root:root  /tmp/a

[root@localhost ~]# ll /tmp | grep a

-rw-r--r-- 1 root  root       0 Nov 16 15:10 a

 

[root@localhost ~]# ll /tmp

-rw-r--r-- 1 rabbit rabbit    0 Nov 16 15:11 b.txt

[root@localhost ~]# chgrp root /tmp/b.txt

[root@localhost ~]# ll /tmp | grep 'b.txt'

-rw-r--r-- 1 rabbit root      0 Nov 16 15:11 b.txt

注意:有时我们删除了用户,但是却没有删除这个用户的home目录,这种情况下,它的home目录的属主和属组就会变成数字。如下所示:

[root@localhost ~]# cat/etc/passwd | grep test

test:x:501:501::/home/test:/bin/bash

[root@localhost ~]# cat/etc/group | grep test

test:x:501:

9、Linux文件名的扩展与限制

Linux的文件基本没有“扩展名”,但适当的扩展名可提示文件类型:

*.sh : 可提示脚本或批处理的文件 (scripts);

*Z, *.tar, *.tar.gz, *.zip, *.tgz: 可提示经过打包的压缩的文件;

*.html, *.php:可提示网页相关的文件;

Linux文件名避免使用一些特殊字符:.* ? >< ; & ! [ ] | \ ' " ` ( ) { }+ -等等,因为这些符号在文字接口下,是有特殊意义的!

其次,单一文件(或目录)的文件名最大长度容许为 255 个字符;同时,包含完整路径名(含/)不要超出 4096 个字符。

 

转载请注明原文地址: https://www.6miu.com/read-3100102.html

最新回复(0)