linux文件权限与目录配置

一.Linux文件属性及权限
1.文件/目录属性查看
(1)文件属性查看
[root@localhost ~]# ls -l file
   -      rw-r--r--.     1             root      root    0        11月 15 23:55         file
  类型       文件权限     连接数        文件所有人  文件所有组    大小    最后一次被修改的时间    名字
(2)查看目录属性
[root@localhost ~]# ls -ld test
  d    rwxr-xr-x.       2     root        root       6         11月 15 23:56             test
 类型      权限          连接数  目录所有人  目录所有组 子文件属性大小    目录中内容变化        目录名

注:1.文件名第一个字符为“.”的文件是隐藏文件,用“ls -al”查看
      2.文件的容量大小,单位为B。
      3.显示完整的时间格式,用“ls -l --full-time”。

(3)文件权限的含义

a.对文件的含义

r:可读权限,可以使用类似cat等命令查看文件内容

w:可以对文件进行编辑和删除

x:可以运行此文件

b.对目录的含义

r:可以对此目录查看目录内的文件内容,如ls

w:可以在此目录创建文件或目录,但必须有x的权限。

x:可以使用cd命令切入到此目录或使用ls -l查看那目录内文件的详细内容。


2.改变文件属性与权限
(1)文件所属用户组

chgrp命令用来改变文件或目录所属的组。

命令结构:
chgrp  (-R) 用户组名/gid  文件/目录    ##改变文件/目录所属用户组

chgrp  (-R) --reference=文件名      要修改的文件名     ##将要修改的文件的所属组改为和前者文件一致的所属组,前一个文件是被参照的文件,后一个文件为被修改的文件。

注:被改变的组名必须在/etc/group文件内存在,否则显示错误。
[root@localhost ~]# chgrp test file
chgrp: invalid group: ‘test’                     ##test用户组不存在
[root@vm1 ~]# ls -l test.txt
-rw-r--r-- 1 root root 0 8月   4 10:36 test.txt
[root@vm1 ~]# chgrp 38 test.txt        ##以gid为参数修改,38为ntp的gid。
[root@vm1 ~]# ls -l test.txt
-rw-r--r-- 1 root ntp 0 8月   4 10:36 test.txt

[root@vm1 ~]# ls -l file.sh
-rw-r--r-- 1 root root 0 8月   4 10:37 file.sh
[root@vm1 ~]# chgrp --reference=/root/test.txt file.sh
[root@vm1 ~]# ls -l file.sh
-rw-r--r-- 1 root ntp 0 8月   4 10:37 file.sh

(2)更改文件权限

chmod:不是所有人都可以使用chown更改文件权限,除root外,其余用户只能更改属主为自己的文件或目录。
注:当复制文件/目录给某个用户,复制后文件/目录的属性和权限不会更改,则需要用chown改变文件所有者和所属组。

chmod具有四种更改方式:赋权,授权,八进制更改,参照文件更改。

更改参数:-o(other):更改其他用户的权限

                -g(group):更改属组权限

                -u(user):更改属主权限

                a(all):更改所有用户权限(将以上三种全部更改)

命令结构:

chmod       权限      文件/目录       ##改变文件/目录的权限

a.赋权表示法

    用“=”来进行赋权更改,直接更换文件原有的权限,更改为指定的权限。

[root@vm1 ~]# chmod u=rwx file.sh
[root@vm1 ~]# ls -l file.sh
-rwxr--r-- 1 root ntp 0 8月   4 10:37 file.sh

b.授权表示法

    用“+”“-”来进行授权更改,其含义为在原有的权限上增加或者减少权限

[root@vm1 ~]# chmod u-w,g-r,o-r file.sh
[root@vm1 ~]# ls -l file.sh
-r-x------ 1 root ntp 0 8月   4 10:37 file.sh

c.八进制表示法

    用八进制如:“777”直接对目录或者文件进行权限更改。

[root@vm1 ~]# chmod 644 file.sh
[root@vm1 ~]# ls -l file.sh
-rw-r--r-- 1 root ntp 0 8月   4 10:37 file.sh

d.参照文件表示法

    使用选项“--reference=文件”来进行更改,其含义为参照指定文件的权限来对当前指定文件进行权限更改,结果与参照文件的权限一致。

[root@vm1 ~]# ls -l test.txt
-rwxr-xr-x 1 root ntp 0 8月   4 10:36 test.txt
[root@vm1 ~]# ls -l file.sh
-rw-r--r-- 1 root ntp 0 8月   4 10:37 file.sh
[root@vm1 ~]# chmod --reference=/root/test.txt file.sh
[root@vm1 ~]# ls -l file.sh
-rwxr-xr-x 1 root ntp 0 8月   4 10:37 file.sh

注:第一种和第二种只能针对其中一类用户更改,第三中和第四种不能单独更改一类用户。
注:被改变的用户名/组名必须在/etc/passwd和/etc/group文件内存在,否则显示错误。


(3)改变文件属主属组

chown用于修改文件或者目录的属主和属组,root用户可以对所有文件或目录进行属主和属组的更改,普通用户只能更改属主是自己的文件或目录,该命令也可使用参照文件修改法。

命令结构:

chown(-R)  属主名:属组名  文件/目录          ##改变属主属组

chown  (-R) --reference=被参照文件        文件

[root@vm1 ~]# chown apache:memcached file.sh
[root@vm1 ~]# ls -l file.sh
-rwxr-xr-x 1 apache memcached 0 8月   4 10:37 file.sh


[root@vm1 ~]# ls -l test.txt
-rwxr-xr-x 1 root ntp 0 8月   4 10:36 test.txt
[root@vm1 ~]# chown --reference=/root/test.txt  file.sh
[root@vm1 ~]# ls -l file.sh
-rwxr-xr-x 1 root ntp 0 8月   4 10:37 file.sh

注:对目录更改属主属组时,如果也需要修改目录文件下的文件和目录一样的属主属组,则可使用“-R”参数,代表递归修改目录下的文件。

a.如果只修改文件的属组,则可使用冒号+属组名,表示只修改属组,属主不变。

b.如果只修改属主,则直接写上用户名即可,属组不变。


3.文件/目录权限的意义
(1)文件是用来记录数据的,包括一般文本文件,数据库内容文件,二进制可执行文件等。
    #若文件给“w”权限,则应给“r”权限。文件能否执行由是否含有“x”权限决定。
    #文件具备“w”权限,可以“写入,编辑,新增,修改”文件的内容,普通用户不能删除文件,文件的删除由目录的“w”权限决定。
(2)目录是存放数据的,主要的内容是记录文件名列表。
    #若目录给“r”权限,则应给“x”权限。“w”权限不可随便给。
    #目录“w”权限具备“新建,删除,重命名,转移”文件/目录等功能
    #目录“x”权限代表用户能否进入目录。

4.文件的默认权限
(1)默认权限的查看
umask(反掩码)                                 ##默认用户在新建文件或目录后的权限默认值。(默认需要减去的权限)。
[root@localhost ~]# umask
0022                                  ##默认权限为777-022=755.(针对于目录)

注:umask的值默认是四位,分别代表:setUid/setGid/粘着位(sticky)、属主权限、组权限、其他用户的权限。有效值为后三位,bash中,第一位必须为0.


系统超级用户root的umask值是0022,而其余用户的umask值为0002.用户创建“文件”,默认没有执行权限“x”,所以默认值为666,目录默认为777,当目录或文件创建后,需要减去对应的umask值才是目录或者文件的最终权限。所以root创建的目录权限为755,文件权限为644.其余用户创建的目录权限为775,文件权限为664.


系统为什么要经过umask值来创建文件或者目录。

    因为系统默认创建文件或目录的权限是666和777,这样不安全,所以引入umask值来控制用户在创建文件或目录时的权限问题。

(-rw-rw-rw)-(-----w--w-)===>-rw-r--r--      ##文件
(drwxrwxrwx)-(d----w--w-)==>drwxr-xr-x   ##目录
(2)默认权限的设定
如何设置umask
[root@localhost ~]# umask 002                        ##设置默认权限为002
[root@localhost ~]# mkdir yang
[root@localhost ~]# ls -ld yang
drwxrwxr-x. 2 root root 6 Nov 16 05:22 yang
(3)umask配置文件的设定
vim /etc/bashrc                                    ##71行是普通用户的更改,73是超级用户的更改
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then      ##如果UID不在199之内,并且用户组名和用户名一致
         umask 002                                                ##则该用户是普通用户,umask为0002,
      else
         umask 022                                                ##反之为系统用户,umask值为0022
      fi
vim /etc/profile                                ##60行是普通用户的更改,62是超级用户的更改
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
      umask 002
  else
      umask 022
 fi
source /etc/bashrc /etc/profile ##让更改立即生效
注:两个文件必须更改一致。

5.特殊权限
stickyid    ###强制位
o+t                                ###只针对目录,当一个目录上有t权限时,这个目录中的文件只能被文件拥有者删除
t=1
chmod o+t 目录
chmod 1777 目录
[root@localhost mnt]# mkdir test yang                         
[root@localhost mnt]# chmod 777 test                          
[root@localhost mnt]# chmod 1777 yang
[root@localhost mnt]# ls -ld test yang
drwxrwxrwx. 2 root root    6 Nov 16 08:00 test
drwxrwxrwt. 2 root root 4096 Nov 16 07:59 yang
[root@localhost mnt]# touch test/file{1..2}
[root@localhost mnt]# touch yang/file{1..2}
[root@localhost mnt]# su - student
Last login: Mon Nov 16 07:56:10 EST 2015 on pts/1
[student@localhost ~]$ cd /mnt
[student@localhost mnt]$ rm -fr test/file*
[student@localhost mnt]$ rm -fr yang/file*
rm: cannot remove ‘yang/file1’: Operation not permitted
rm: cannot remove ‘yang/file2’: Operation not permitted
[student@localhost mnt]$ ls test/
[student@localhost mnt]$ ls yang/
file1      file2


sgid        ###粘制位
g+s        ##针对目录,在目录中创建的文件都自动归属到目录所在组,针对二进制文件,文件内记录的程序在执行时和执行者的组身份没有关系,而是以二进制文件的所有组的身份执行的
chmod g+s file|directory
chmod 2777 file|directory
[root@localhost mnt]# mkdir test
[root@localhost mnt]# chgrp student test
[root@localhost mnt]# chmod 2765 test
[root@localhost mnt]# ls -ld test
drwxrwSr-x. 2 root student 6 Nov 16 07:34 test
[root@localhost mnt]# touch /mnt/test/file
[root@localhost mnt]# ls -l /mnt/test/file
-rw-r--r--. 1 root student 0 Nov 16 07:34 /mnt/test/file


suid        ###冒险位
u+s        ###针对文件,文件记录动作在执行时是以文件所有人身份执行的,与是谁发起的无关
chmod u+s file
chmod 4777 file
[root@localhost mnt]# cp /bin/touch .
[root@localhost mnt]# chmod 4755 touch
[root@localhost mnt]# ls -l
total 64
-rwsr-xr-x. 1 root root 62432 Nov 16 07:35 touch
[root@localhost mnt]# ls -l
total 64
-rwsr-xr-x. 1 root root 62432 Nov 16 07:35 touch
[student@localhost ~]$ /mnt/touch file
[student@localhost ~]$ touch file1
[student@localhost ~]$ ls -l
-rw-rw-r--. 1 root student 0 Nov 16 07:37 file
-rw-rw-r--. 1 student student 0 Nov 16 07:40 file

########################################################


二.Linux文件类型,扩展名与目录配置

1.文件类型,扩展名
(1)文件类型
    普通文件:第一个字符为[-].
            纯文本文件(ASCII)
            二进制文件(binary)
            数据格式文件(data)
    目录(directory):第一个属性为[d]。
    链接文件(link):第一个属性为[l]。
    设备与设备文件(device):通常集中在/dev目录中
             块(biock)设备文件:存储数据,提供系统随机访问的接口设备,第一个属性为[b]。一般为主机硬件设备。
             字符(character)设备文件:串行接口的设备,第一个属性为[c]。一般为外置设备。
    套接字(sockets):数据接口文件,被用在网络上的数据连接。第一个属性是[s]。通常在/var/run目录中可以看到这种文件类型。
    管道(FIFO,pipe):
                fifo:解决多个程序同时访问一个文件所造成的错误问题。第一个属性是[p]。

(2)文件扩展名
    注:一个文件中没有可执行数据,即使拥有“x”权限,也不能执行。
    *.sh:脚本或批处理文件。文件是用shell写的,扩展名为*.sh。
    *Z,*.tar,*.tar.gz,*.zip,*.tgz:经过打包压缩的文件。
    *.html,*.php:网页相关文件,分别带边html语法和php语法的网页文件。.html文件可使用浏览器直接开启,.php文件可以通过客户端的浏览器来服务端浏览。

(3)Linux文件长度限制
    默认ext2,ext3,ext4,xfs文件系统
    单一文件/目录:最大文件名容许量为255个字符
    完整路径名称及目录(/)的完整文件名为4096个字符。

2.目录配置
(1)目录
/       ##根目录。存储与开机系统的文件。/etc./bin./dev./lib./sbin应该和根目录放置在一个分区里,而类似/usr/local可以单独位于另一个分区
/bin    ##在单用户维护模式下能够操作的命令。/bin下的一些命令可以被root与一般用户所使用,主要有cat,chmod,chown,date,mv,mkdir,cp,bash等常用命令。
/sbin    ##系统管理命令存放位置,一般只能有超级用户执行。大多数命令普通用户一般无权限执行,类似/sbin/ifconfig,普通用户使用绝对路径也能执行,用于查看当前系统的网络配置。
/boot    ##启动分区,负责系统启动。存放linux启动时内核以及引导系统程序所需要的核心文件,内核文件(vmlinuz)和grub系统引导管理器(/boot/grub)位于此目录。
/dev    ##存放设备与设备接口管理文件,访问该目录下的某个文件相当于访问某个硬件设备,常用的有/dev/null,/dev/zero,/dev/tty,/dev/ip*,/dev/hd*,/dev/sd*。
/etc    ##存放大多数系统配置文件,作为一些软件启动时默认配置文件读取的目录,不可放置可执行文件。/etc/fstab:存放系统分区挂载信息,/etc/init.d:所有服务的默认启动脚本。/etc/xinetd.d:super daemon(超级守护进程)管理的各项服务的配置文件目录。/etc/X11:与X Windows有关的配置文件,xorg.conf:XServer的配置文件。
/home    ##普通用户的家目录,
/lib    ##32位系统库文件存放位置,主要存放开机时用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库。/lib/modules:存放内核相关的模块(驱动程序)
/lib64    ##64位系统库文件存放位置
/media    ##系统临时设备挂载点。存放软盘,光盘,DVD等设备。
/mnt    ##系统临时设备挂载点
/run    ##系统临时设备挂载点
/opt    ##第三方软件安装位置。存放第三方软件以及自行安装额外的软件。
/proc    ##虚拟文件系统,存放系统运行时的运行信息,如进程信息,内核信息,网络信息等。此目录存放在内存中,实际不占用磁盘空间。如/proc/cpuinfo存放cpu的相关信息。
/root    ##超级用户家目录
/srv,/var    ##系统数据,日志文件
/sys    ##系统管理,主要是关于内核的
/tmp    ##系统临时文件存放位置,任何人均可访问。系统软件或者用户运行程序时产生的临时文件存放在这里。此目录数据需要定期清除。
/usr    ##系统用户相关信息数据及用户自定义软件存放位置。

(2)系统文件路径
绝对路径
文件在系统的真实位置,文件名字以“/”开头,例如:/usr/share/doc。
相对路径
文件相对与当前所在位置的一个名字的简写,这个名字不会以/开头,而且名字会自动添加pwd显示的值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章