权限的表示方式
每一类用户对应的都是r,w,x这三种权限,这三种权限它的位置也是固定的
--- 三种权限都没有 000 0
--x 只执行 001 1
-w- 只写 010 2
-wx 能写能执行 011 3
r-- 只读 100 4
r-x 能读能执行 101 5
rw- 能读能写 110 6
rwx 能读能写能执行 111 7
每一类用户的权限都只有这8种变化,而这8种变化可以等同在二进制数字上,0表示没有,1表示有。
所以任何一类用户的权限都可以使用一个8进制数字来表示,三类用户权限用三个8进制数字就能表示。
列:某一类用户权限如下
640
转换为rwx格式为:rw-r-----
修改权限
chmod:修改用户权限
使用格式:使用8进制数字来修改
1 chmod [OPTION]……OCTAL-MOOE FILE
注意:修改目录时,只会改目录权限,而不会一并修改目录和目录下的文件的权限,若要修改,则要加-R选项
2 直接指明mode进行定义
chmod [OPTION]……MODE [,MODE]……FILE……
3 表示参考时的权限来修改权限
chmod [OPTION]……--reference=RFILE FILE……
注意:以上3种格式都支持选项-R,chmod命令任何用户都可以用,但chown和chgrp只有管理员才能用
选项:
-R:表示递归修改权限
chown:修改文件的属主
使用格式:
1 chown [OPTION]……[OWNER][:[GROUP]] FILE
注意:chown既能改属主,又能改属组
2 chown [OPTION]……--reference=RFILE FILE……
选项:
-R:递归
chgrp:修改文件的属组
使用格式:
1 chgrp [OPTION]……[GROUP] FILE……
2 chgrp [OPTION]……--reference=RFILE FILE……
选项:
-R:递归
umask:遮罩码
可以查看和设定遮罩码,它是反向运用的,创建文件时,每一个文件的默认权限都是666-umask,而目录的默认权限都是777-umask。
注意如果目标是文件,如果某类用户的权限减得的结果中存在x权限,则权限+1,而目录则不会+1。
bash的基础特性
1:提供了编程环境编程环境或程序主要有两类:
过程式编程:以指令为中心,数据服务于指令
对象式编程:以数据为中心,指令服务与数据
shell解释器或shell应用程序,大多数shell程序都提供了编程能力,但是绝大多数shell程序它的编程能力主要是用于通过调用当前系统上已有的二进制程序,组织罗列,解释执行的。
程序的执行方式
对计算机而言,它只能理解二进制指令,也只能运行二进制指令,对人来讲,很不容易理解二进制指令所以才有了编程语言。
编程语言可能离机器较近,但仍不是机器语言,所以需要转换,汇编语言就是一种,另一种是高级语言,高级语言人能理解,但机器理解不了,也需要转换。
所以必须有一个工具,把人用编程语言写的程序,转换成机器能理解的二进制格式。
编程语言:
低级语言:如汇编语言
高级语言:由于离人太近了,所以要想办法转换成机器理解的格式,机器才能运行,转换的方式有以下两种:
编译:高级语言—编译器—目标代码
解释:高级语言—解释器—机器代码
编译:将高级语言事先通过编译器,编译器也是一个程序,统统转换成目标代码。
解释:高级语言在运行时需要解释器的参与,每一次解释的结果,就是一条可执行的代码,解释器在解释执行之前会快速扫描一遍整个程序本身,会检查有没有错误,没有错误才会去翻译去执行,而解释的结果就是可执行的机器代码。
过程式编程语言真正执行起来无非就是三种方式:
顺序执行:N条指令之上而下一个一个来
循环执行:有效任务需要N遍才能执行
选择执行:从多条指令中选择一个最适合你需求的,只执行其中一部分,并非所以代码都会运行到,而只执行其中的一个片段。
shell编程:
从本质上来讲,shell编程就是命令的堆砌,shell本身就是一个解释器,命令运行接口就是拿来让我们运行命令的,脚本无非就是换一种方式把你要运行的命令组织在文件中一次运行,这就是shell所提供的编程接口,从这个意义上来讲它不是真正的、完整意义上的编程语言。
对于shell而言,所谓脚本无非就是命令的堆积,只不过堆的时候可以用编程控制机制,让他们一个命令运行很多次,或一大堆命令只执行其中一个。
shell编程极大的降低了编程脚本的难度,但同时shell脚本运行严重依赖于当前环境,严重到哪怕是同一个版本的shell,在A上能运行的脚本,在B上可能没法运行,因为在A上的命令,在B上可能根本没安装,或在A上的程序,在B上没安装,同样,在别的系统上也一样,有可能调用命令的接口都不同,压根没法运行。
shell脚本:它就是一个文本文件,但是这个文本文件必须特点的格式,这个格式是任何shell脚本它的第一行必须写清除这个脚本的解释器的路径。
这种机制就是shebang机制:在第一行写下一个解释器路径,cpu读取后就知道这是一个需要解释执行的程序,cpu就会找到你第一行写下的文件,来运行他,而后由它来负责理解整个文件的内容,从而可以管理执行
cpu只能运行二进制程序文件,而shell脚本里都是文本字符,cpu是无法执行的,但最后都运行了,那是因为它是解释执行的,在cpu上运行一个解释器程序,这个解释器自己是二进制程序,这个解释器去负责读取这个文本文件的每一行,由解释器决定,去找到对应的程序代码所对应的二进制程序在去执行。
文件的前一部分字节是magic nunber魔数:表明了文件的格式,cpu就是通过这个魔数来判断这个文件的格式,每一个文件的格式不同,它的魔数就会不同。
所以shell文件顶格上写#!,后面跟上/bin/bash这样的路径,cpu就知道后面跟的是一个魔数,并且靠后面的这些字符串来获取得知这个对应的执行文件格式不是二进制的,而是靠另外一个解释器来执行,所以这个内容在shell脚本中必需顶格写,如果不顶格写,整个魔数控制机制内核就会无法识别。