set命令做用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的做用分别是打开和关闭指定的模式。set命令不可以定义新的shell变量。若是要定义新的变量,可使用declare命令以变量名=值
的格式进行定义便可。node
set(选项)(参数)
-a:标示已修改的变量,以供输出至环境变量。 -b:使被停止的后台程序马上回报执行状态。 -C:转向所产生的文件没法覆盖已存在的文件。 -d:Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。 -e:若指令传回值不等于0,则当即退出shell。 -f:取消使用通配符。 -h:自动记录函数的所在位置。 -H Shell:可利用"!"加<指令编号>的方式来执行history中记录的指令。 -k:指令所给的参数都会被视为此指令的环境变量。 -l:记录for循环的变量名称。 -m:使用监视模式。 -n:只读取指令,而不实际执行。 -p:启动优先顺序模式。 -P:启动-P参数后,执行指令时,会以实际的文件或目录来取代符号链接。 -t:执行完随后的指令,即退出shell。 -u:当执行时使用到未定义过的变量,则显示错误信息。 -v:显示shell所读取的输入值。 -x:执行指令后,会先显示该指令及所下的参数。
取消某个set曾启动的参数。python
使用declare命令定义一个新的环境变量"mylove",而且将其值设置为"Visual C++",输入以下命令:linux
declare mylove='Visual C++' #定义新环境变量
再使用set命令将新定义的变量输出为环境变量,输入以下命令:shell
set -a mylove #设置为环境变量
执行该命令后,将会新添加对应的环境变量。用户可使用env命令和grep命令分别显示和搜索环境变量"mylove",输入命令以下:bash
env | grep mylove #显示环境变量值
此时,该命令执行后,将输出查询到的环境变量值。函数
set_uid的表现,权限上添加了小写的s,ui
更改密码的文件/etc/shadow,root也没法更改。spa
ls能够查看root权限时。是添加了set_uid权限。.net
去掉set_uid权限方法。code
普通用户用ls命令查看root权限。能显示的内容。
(1)、设置set_gid的方法。设置过的文件会变成黄(橙)色。
(2)、更改所属组方法。
在ls命令前面添加!号,显示的全面。
(1).防删除,在权限中以t显示。
设置777权限,所属者,所属组。
Symbolic Links : 跟hard link不一样,这个是创建一个独立的文件,而这个文件的做用是当读取这个连接文件时,它会把读取的行为转发到该文件所link的文件上。这样讲,也许比较绕口,那么就来举一个例子。如今有文件a,咱们作了一个软连接文件b(只是一个连接文件,很是小),b指向了文件a。当读取b时,那么b就会把读取的动做转发到a上,这样就读取到了文件a。因此,当你删除文件a时,文件b并不会被删除,可是再读取b时,会提示没法打开文件。而,当你删除b时,a是不会有任何影响的。
命令: ln
语法 : ln [-s] [来源文件] [目的文件]
ln 经常使用的选项就一个 ‘-s’, 若是不加就是创建硬连接,加上就创建软连接。
[root@localhost ~]# mkdir 123 [root@localhost ~]# cd 123 [root@localhost 123]# cp /etc/passwd ./ [root@localhost 123]# ll 总用量 4 -rw-r--r-- 1 root root 1097 5月 10 17:08 passwd [root@localhost 123]# du -sk 8 . [root@localhost 123]# ln passwd passwd-hard [root@localhost 123]# ll 总用量 8 -rw-r--r-- 2 root root 1097 5月 10 17:08 passwd -rw-r--r-- 2 root root 1097 5月 10 17:08 passwd-hard [root@localhost 123]# du -sk 8
实例浅绿色
若是删除掉源文件,则软连接文件不能读取了,并且使用 ‘ll’ 查看发现颜色也变了。
[root@localhost ~]# ln -s 456 789 [root@localhost ~]# ls -ld 456 789 drwxr-xr-x 2 root root 4096 5月 10 17:22 456 lrwxrwxrwx 1 root root 3 5月 10 17:29 789 -> 456
注意:建立软链接时,大文件放在前面;作软链接尽可能使用绝对路径
Hard Links : 当系统要读取一个文件时,就会先去读inode table,而后再去根据inode中的信息到块区域去将数据取出来。而hard link 是直接再创建一个inode连接到文件放置的块区域。也就是说,进行hard link的时候实际上该文件内容没有任何变化,只是增长了一个指到这个文件的inode, hard link 有两个限制:(1)不能跨文件系统,由于不一样的文件系统有不一样的inode table; (2) 不能连接目录。
‘ll’ 命令等同于 ‘ls -l’, 请使用 ‘which’ 命令查看一下。作了硬连接后,虽然两个文件大小都为 ‘1097’, 可是目录的大小并无变化。
[root@localhost 123]# ll 总用量 4 -rw-r--r-- 1 root root 1097 5月 10 17:08 passwd-hard [root@localhost 123]# rm -f passwd [root@localhost 123]# du -sk 8 .
删除源文件passwd, 空间依旧不变。这说明硬连接只是复制了一份inode信息。
[root@localhost ~]# ln 123 456 ln: "123": 不容许将硬连接指向目录
硬连接不能用于目录。
[root@localhost ~]# mkdir 456 [root@localhost ~]# cd 456 [root@localhost 456]# cp /etc/passwd ./ [root@localhost 456]# ln -s passwd passwd-soft [root@localhost 456]# ll 总用量 4 -rw-r--r-- 1 root root 1097 5月 10 17:18 passwd lrwxrwxrwx 1 root root 6 5月 10 17:19 passwd-soft -> passwd [root@localhost 456]# head -n1 passwd-soft root:x:0:0:root:/root:/bin/bash [root@localhost 456]# head -n1 passwd root:x:0:0:root:/root:/bin/bash [root@localhost 456]# rm -f passwd [root@localhost 456]# head -n1 passwd-soft head: 没法打开"passwd-soft" 读取数据: 没有那个文件或目录 [root@localhost 456]# ll 总用量 0 lrwxrwxrwx 1 root root 6 5月 10 17:19 passwd-soft -> passw
注意:两种连接的本质区别关键点在于inode.
其余权限
除了读写执行权限外系统还支持强制位(s权限)和粘滞位(t权限)
s权限: 设置使文件在执行阶段具备文件全部者的权限,至关于临时拥有文件全部者的身份. 典型的文件是passwd. 若是通常用户执行该文件, 则在执行过程当中, 该文件能够得到root权限, 从而能够更改用户的密码.
ls -al /usr/bin/passwd -rwsr-xr-x 1 pythontab pythontab 32988 2018-03-16 14:25 /usr/bin/passwd
咱们能够经过字符模式设置s权限:chmod a+s filename,也可使用绝对模式进行设置:
设置suid:将相应的权限位以前的那一位设置为4;
设置guid:将相应的权限位以前的那一位设置为2;
二者都置位:将相应的权限位以前的那一位设置为4+2=6。
注意:在设置s权限时文件属主、属组必须先设置相应的x权限,不然s权限并不能正真生效(c h m o d命令不进行必要的完整性检查,即便不设置x权限就设置s权限,chmod也不会报错,当咱们ls -l时看到rwS,大写S说明s权限未生效)
t权限:要删除一个文档,您不必定要有这个文档的写权限,但您必定要有这个文档的上级目录的写权限。也就是说,您即便没有一个文档的写权限,但您有这个文档的上级目录的写权限,您 也可以把这个文档给删除,而假如没有一个目录的写权限,也就不能在这个目录下建立文档。
怎样才能使一个目录既可以让任何用户写入文档,又不让用户删除这个目录下他人的文档,t权限就是能起到这个做用。t权限通常只用在目录上,用在文档上起不到什么做用。
在一个目录上设了t权限位后,(如/home,权限为1777)任何的用户都可以在这个目录下建立文档,但只能删除本身建立的文档(root除外),这就对任何用户能写的目录下的用户文档 启到了保护的做用。
能够经过chmod +t filename 来设置t权限
资源 :
Linux权限管理:普通文件权限、特殊权限及ACL 荐 : http://blog.51cto.com/11551196/1833974