shell文件权限和脚本执行

 

文件权限位
基本命令
? 文件和目录的权限。
? setuid。
? chown和c h g r p。
? umask。
? 符号链接。
按照所针对的用户,文件的权限可分为三类:
1) 文件属主,创建该文件的用户。
2) 同组用户,拥有该文件的用户组中的任何用户。
3) 其他用户,即不属于拥有该文件的用户组的某一用户。
当创建一个文件的时候,系统保存了有关该文件的全部信息,包括:
" 文件的位置。
" 文件类型。
" 文件长度。
" 哪位用户拥有该文件,哪些用户可以访问该文件。
" i节点。
" 文件的修改时间。
" 文件的权限位。
让我们用touch命令创建一个文件:
 $ touch temp
创建了一个空文件,现在用ls -l命令查看该目录下文件的属性(我这里用中文版):
如下:
 [root@Linux_chenwy temp]# ls -l
总用量 36
-rw-r--r--    1 root     root        34890 10月 19 20:17 httpd.conf
-rw-r--r--    1 root     root            0 10月 19 20:16 temp
  总用量 36:是ls所列出的入口占用空间的字节数(以K为单位)。
1该文件硬链接的数目。
root:文件属主。
root:文件属组(一般是文件属主所在的缺省组。)
34890:字节来表示的文件长度,记住,不是K字节!
10月 19 20:17:件的更新时间。
temp or httd.conf :件名。
 
BTW:要检查该目录所有文件占用的空间应该用这个命令:du。
譬如说前面说的36是如何计算出来: 
首先我们要先了解你所用的文件系统的IO BLOCK(中文叫作簇)为多少,在你所使用的这个文件系统的IO BLOCK大小是4096 Bytes。
他意义是文件系统最小的读写及分配单位,每次读写操作你都不能小于这个尺寸。即使你的文件是只有一个字节。而且文件在硬盘上的存储也是以这个为单位,就是说如果文件尺寸小于这个值,那么它在磁盘上占用的空间就是4096字节。
占用空间的具体算法是:(进一(文件尺寸/4096))×4096。根据这个你就可以计算出你所列举的例子中的文件的空间使用状况:34890除以4096,大约等于8.5,进一法取得为9,就是说文件在磁盘上占用了9个BLOCk,每个BLOCK为4K,所以这两个文件占用的空间就是36K。
这个规则也适合于目录,不过不会出现为0的目录,即使是空目录
-rw-r--r-- :这是该文件的权限位。
第一个横杠:指定文件类型,表示该文件是一个普通文件。(所创建的文件绝大多数都是普通文件或符号链接文件)。
除去最前面的横杠,一共是9个字符,他们分别对应9个权限位。通过这些权限位,可以设定用户对文件的访问权限。对这两个文件的精确解释是:
 rw-:前三位,文件属主可读、写
r--:中间三位,组用户可读
r--:最后三位,其他用户只可读
在创建的时候并未给属主赋予执行权限,在用户创建文件时,系统不会自动地设置执行权限位。这是出于加强系统安全的考虑
BTW:文件的属主组并不一定就是所有者所在的缺省组,而可以是任何一个跟该文件所有者无关的用户组。为了方便,还是统称属主,属组和其它
现在分开详细说明:
文件类型
前面提到的第一条横杠,表示该文件是普通文件型
文件类型有七种,它可以从ls -l命令所列出的结果的第一位看出.
七种类型:
 d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。
文件的权限位中中每一组字符中含有三个权限位:
 r 读权限
w 写/更改权限
x 执行该脚本或程序的权限

如:
 r-- --- --- 文文件属主可读,但不能写或执行
r-- r-- --- 文文件属主和属组用户(一般来说,是文件属主所在的缺省组)可读
r-- r-- r- - 文任何用户都可读,但不能写或执行
rwx r-- r- - 文文件属主可读、写、执行,属组用户和其他用户只可读
rwx r-x --- 文文件属主可读、写、执行,属组用户可读、执
rwx r-x r- x 文文件属主可读、写、执行,属组用户和其他用户可读、执行
rw- rw- --- 文文件属主和属组用户可读、写
rw- rw- r- - 文文件属主和属组用户可读、写,其他用户可读
rw- rw- --- 文文件属主和属组用户及其他用户读可以读、写,慎用这种权限
设置,因为任何用户都可以写入该文件
使用chmod来改变权限位
这一命令有符号模式和绝对模式。
符号模式
chmod命令的一般格式为:
chmod [who] operator [permission] filename
w h o的含义是:
 
现在已经使文件属主对temp文件具有读、写执行的权限,属组用户真有读写权限,其它用户没有权限了。
绝对模式
chmod命令绝对模式的一般形式为:
chmod [mode] file
其中m o d e是一个八进制数。
在绝对模式中,权限部分有着不同的含义。每一个权限位用一个八进制数来代表,如
 0 4 0 0 文件属主可读
0 2 0 0 文件属主可写
0 1 0 0 文件属主可执行
0 0 4 0 属组用户可读
0 0 2 0 属组用户可写
0 0 1 0 属组用户可执行
0 0 0 4 其他用户可读
0 0 0 2 其他用户可写
0 0 0 1 其他用户可执行
在设定权限的时候,只需按照上面查出与文件属主、属组用户和其他用户所具有的权限相对应的数字,并把它们加起来,就是相应的权限表示。
可以看出,文件属主、属组用户和其他用户分别所能够具有的最大权限值就是7。
再来看看前面举的例子:
 -rwxr--r--  1   root            0 10月 19 20:16 temp
相应的权限是:
 rwx-:0400 + 0200 +0100 (文件属主可读、写、执行) = 0 7 0 0
r--:0 0 4 0 (属组用户可读) = 0 0 4 0
r--:0 0 4 0 (属组用户可读) = 0 0 4 0
0 7 4 4
有一个计算八进制权限表示的更好办法,如下:
 文件属主:r w x:4 + 2 + 1
属组用户:r w x:4 + 2 + 1
其他用户:r w x:4 + 2 + 1
这上面这相,更容易地计算出相应的权限值,只要分别针对文件属主、属组用户和其他用户把相应权限下面的数字加在一起就可以了。
temp文件具有这样的权限:
 r w x     r - - r - -
4+2+1  4     4
把相应权限位所对应的值加在一起,就是7 4 4。
如:
 chmod 666 rw- rw- rw- 赋予所有用户读和写的权限
chmod 644 rw- r-- r- - 赋予所有文件属主读和写的权限,所有其他用户读权限
chmod 744 rwx r-- r- - 赋予文件属主读、写和执行的权限,所有其他用户读的权限
chmod 664 rw- rw- r- - 赋予文件属主和属组用户读和写的权限,其他用户读权限
chmod 700 rwx --- --- 赋予文件属主读、写和执行的权限
chmod 444 r-- r-- r- - 赋予所有用户读权限
下面举一个例子,假定有一个名为temp的文件,具有如下权限:
 -rw-rw-r--  1   root            0 10月 19 20:16 test1
现在希望对该文件可读、写和执行, root组用户对该文件只读,可以键入:
 $chmod 740 test1
$ls -l
-rwxr-----  1   root            0 10月 19 20:16 test1
如果文件可读、写和执行,对其他所有用户只读,用:
 $chmod 744 test1
$ls -l
-rwxr--r--  1   root            0 10月 19 20:16 test1
如果希望一次设置目录下所有文件的权限,可以用:
 $chmod 664*
$ls -l
-rw-r--r--  1   root            0 10月 19 20:16 test1
这将使文件属主和属组用户都具有读和写的权限,其他用户只具有读权限。
还可以通过使用- R选项连同子目录下的文件一起设置:
 chmod -R 664 /temp/*
这样就可以一次将/ temp目录下的所有文件连同各个子目录下的文件的权限全部设置为文件属主和属组用户可读和写,其他用户只读。使用- R选项一定要谨慎,只有在需要改变目录树下全部文件权限时才可以使用。 
目录
目录的权限位和文件有所不同。目录的读权限位意味着可以列出其中的内容。写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。执行权限位则意味着搜索和访问该目录.
 
 r :可以列出该目录中的文件
w:可以在该目录中创建或删除文件
x:可以搜索或进入该目录
权限文件属主属组用户其他用户
 drwx rwx r- x ( 775 ) 属主读、写、执行,属组读、写、执行,其它组读、执行
drwx r-x r- - ( 754 ) 属主读、写、执行,属组读、执行,其它组读
drwx r-x r- x ( 755 ) 属主读、写、执行,属组读、执行,其它组读、执行
如果把属组用户或其他用户针对某一目录的权限设置为- - x,那么他们将无法列出该目录中的文件。如果该目录中有一个执行位置位的脚本或程序,只要用户知道它的路径和文件名,仍然可以执行它。用户不能够进入该目录并不妨碍他的执行。
目录的权限将会覆盖该目录中文件的权限。例如,如果目录temp具有如下的权限:
 drwxr--r--  1   admin            0 10月 19 20:16 temp
而目录下的文件myfile的权限为:
 
                          -rwxrwxrwx  1   admin           0 10月 19 20:16 myfile
那么admin组的用户将无法编辑该文件,因为它所属的目录不具有这样的权限。
该文件对任何用户都可读,但由于它所在的目录并未给admin组的用户赋予执行权限,所以该组的用户都将无法访问该目录,他们将会得到“访问受限”的错误消息。
-rwxrwxrwx
9个权限位换成这样是不是更容易理解呢?
如:
-rwxrw-r-- 1 root admin 34890 10月 19 20:17 httpd.conf


前三位:rwx:它的所有者是root,即就是文件所有者,它对httpd.conf这个文件的权限是读写执行;
中间三位:rw-:表示admin组对这个文件的权限是读写
后面位:r--:就是即不是所有者,也不是属组的对文件的权限是读

 

 

 

一、认识权限和用户管理

1、查看权限

 

权限类型:

    1、r 读

    2、w 写

    3、x 可执行

 

Linux用户

    1、所有者(u)

    2、所属组(g) (所有者及所有者所在组的全部用户)

    3、其他用户(o)(其他组的所有用户(包括文件所有者))

    4、所有用户(a)

 

文件权限解读

    文件类型 所有者权限  所属组权限  其他用户权限            所有者  用户所在的组  文件大小  创建时间  文件名

复制代码

[root@Salve ~]# ll
总用量 100
-rw-------. 1 root root 1752 5月 22 00:29 anaconda-ks.cfg
-rw-r--r--. 1 root root 44184 5月 22 00:28 install.log
[root@Salve ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@Salve ~]# head -1 /etc/group
root:x:0:
[root@Salve ~]# cat /etc/group
root:x:0:
bin:x:1:bin,daemon

复制代码

二、用户与权限

1、用户管理

(1)、用户查看

       

 id  username

(2)、用户添加 

 useradd  username

创建用户,同时会产生新的用户组,并且用户属于该组

(3)、用户删除

    

userdel  -r  username 

2、用户组

用户与组的关系:

(1)、把用户加入组

复制代码

[root@Salve ~]# id test2
uid=501(test2) gid=501(test2) 组=501(test2)
[root@Salve ~]# gpasswd -a test2 root          #把用户test2加入到root组
Adding user test2 to group root
[root@Salve ~]# id test2
uid=501(test2) gid=501(test2) 组=501(test2),0(root)  #test2同时属于两个组

复制代码

    同时属于两个组后,两个组的权限都具备,即两个组权限之和

 

(2)、把组中用户删除

[root@Salve ~]# gpasswd -d test2 root
Removing user test2 from group root

3、权限分配

    第一二种修改过用户对文件的权限

(1)、chmod权限分配

    a、字母权限分配

         chmod  u+x file

         chmod   u-x file

    (对用户单独设置权限用此方式。)

 

    b、数字权限

        chmod 755  file

数字对应权限如下:

    r        4

    w       2

    x        1

755        rwx r-x r-x    解析rwx 4+2+1=7      r-x  4+1=5

754        rwx r-x r--

默认644

(当所有用户的权限都要修改时用词方法)

    缺点:不能对用户的细化权限分配

 

(2)、acl

 

权限细化需求

1、root file rw-

2、root file r--

3、other file r--

4、user1 file rw

5、user2 file rx

6、user3 file wx    (不能查看,但是能写入)

7、user4 file rwx  (rwx只是对内容有权限,无法删除)

 

acl权限分配:

1、setfacl设置文件权限 

setfacl -m u:user1:rw file01.txt 
setfacl -m u:user2:rx file01.txt 

2、getfacl查看文件权限

getfacl file01.txt  

3、删除文件权限

    setfacl -x user:user4 file01.txt

4、清空文件权限

    setfacl -b file01.txt           擦除对文件所有的权限(恢复文件的原始状态权限:644)

 

5、创建和删除文件权限:

#需要对目录设置acl权限即可

 setfacl -m u:user4:rwx mnt/

注意:

dr-xr-xr-x.   2 root root  4096 5月  24 14:19 mnt

切换到目录的一瞬间需要目录的x权限,否则不能切换目录。

 

6、如何对目录及子目录和文件设置acl权限

setfacl -m u:user4:rwx -R /mnt/                R参数代表递归

 

7、目录中后期添加的子目录和文件如何继承父目录的权限

方法一: setfacl -m u:user4:rwx -R /mnt/     繁琐                       (应用实例:网站文件管理)

方法二:setfacl -m d:u:user4:rwx -R /mnt/         d代表default权限,会继承默认权限

 

用户对程序、命令的权限

(3)、sudo
设置用户对命令的执行权限-visodo:

1、设置:

# visudo

user4 localhost=/usr/sbin/useradd,/usr/sbin/userdel

 

2、使用有密码的sudo授权命令

$ sudo /usr/sbin/useradd user5

$ sudo /usr/sbin/userdel -r user5

 

3、使用无密码的sudo授权命令  (使用情境:在脚本里输入命令)

$ sudo /usr/sbin/useradd user6

$ sudo /usr/sbin/userdel -r user6

设置形式: 

user5 ALL=NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel

sudo  ALL=NOPASSWD: /usr/sbin/userdel -r user4

 

 

三、Shell文件权限和脚本执行

1、Shell脚本

    (1)、用途:完成特定的、较复杂的系统管理任务

    (2)、格式:集中保存多条Linux命令,普通文本文件

    (3)、执行方式:按照预设的顺序执行解释执行

 

2、编写可执行的Shell脚本

   (1)、 建立包含执行语句的脚本文件

   (2)、 #脚本文件中包含的内容

            运行环境设置:#!/bin/bash

            注释信息:以#开始的说明性文字

            可执行的Linux命令行

    (3)、为脚本文件添加可执行权限

3、执行Shell脚本的方式:

    (1)、bash test.sh          #不需要写解析器,并且不需要给脚本设置执行权限

    (2)、./test.sh                #需要写解析器,需要给脚本设置执行权限

4、一个Shell脚本例子:

复制代码

#!/bin/bash
#tesh.sh
 
echo 'disk space:'
echo
df -Th
echo
echo 'free space:'
free -m
echo
echo 'users:'
for i in'ls /home'
do
  id -u $i
done

复制代码

运行Shell脚本:

    直接执行具有x权限的脚本文件:例如:./test.sh

    使用指定的解释器程序执行脚本内容:例如:bash test.sh 、sh test.sh

 

5、Shell脚本示例:

    每周五17:30清理FTP服务器的公共共享目录

        检查/var/ftp/pub/目录,将其所有子目录及文件的详细列表、当时的时间信息追加保存到/var/log/pubdir.log

文件中,然后清空该目录

yum -y install vsftpd*

复制代码

#!/bin/bash
#ftp目录统计
 
date >>/var/log/pubdir.log
 
ls -lhR /var/ftp/pub >>/var/log/pubdir.log
 
rm -rf /var/ftp/pub

复制代码

命令执行通过后即可添加到任务计划中:

crontab -e   

查看任务计划:

crontab -l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值