数字设定法:
必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限, 2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式为:chmod [mode] 文件名
指令实例:
指令 chmod a+x sort 说明 设定文件sort的属性为: 文件属主(u):增加执行权限 与文件属主同组用户(g):增加执行权限 其他用户(o):增加执行权限 设定文件text的属性为: 文件属主(u): 增加写权限 与文件属主同组用户(g): 增加写权限 其他用户(o): 删除执行权限 假设,执行chmod后a.out的权限为: –rws--x--x 1 inin users 7192 Nov 4 14:22 a.out 并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“–rw--”,即该文件只有其属主具有读写权限。当其他用户执行a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以他就能够读取shiyan1.c这个文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。 因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。 chmod a–x mm.txt chmod –x mm.txt chmod ugo–x mm.txt chmod 644 mm.txt 这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。 即设定文件mm.txt的属性为:-rw-r--r-- 文件属主(u):拥有读、写权限 与文件属主同组人用户(g): 拥有读权限 其他人(o): 拥有读权限 即设定wchtxt这个文件的属性为:-rwxr-x--- 文件主本人(u):可读/可写/可执行权 与文件主同组人(g): 可读/可执行权 其他人(o): 没有任何权限 chmod ug+w,o-x text chmod u+s a.out chmod 750 wch.txt
21
chgrp(change group):改变文件或目录所属的群组
语法:chgrp [选项] 组 文件
该命令改变指定文件所属的用户组。其中“组”可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果执行chgrp的用户不是该文件的属主或超级用户,则不能改变该文件的组。 参数:
-R:递归式地改变指定目录及其下的所有子目录和文件的属组。
chown(change own):修改文件的拥有者或群组
语法:chown [选项] 用户或组 文件
chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。 例如:root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。 参数:
- R :递归式地改变指定目录及其下的所有子目录和文件的拥有者。 - v :显示chown命令所做的工作。
find(find):查找目录或文件
语法:
find pathname -options [-print -exec -ok ...]
? pathname: find命令所查找的目录路径。
? -print: find命令将匹配的文件输出到标准输出。
? -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为
\\'command\\' { } ;,注意{ }和“;”之间的空格。
? -ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的
shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 ? -options:为find命令可使用的参数。
参数:
-name pattern:按文件名查找,pattern是要查找的文件名匹配模板; -perm mode:按文件权限查找,mode是要查找的文件权限模式; -user:按文件的拥有者查找; -group:按文件所属的组查找; -mtime -n +n:按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内, +n表示文件更改时间距现在n天以前。 -amin n:查找系统中最后n分钟访问的文件
-atime n:查找系统中最后n*24小时访问的文件
22
-cmin n:查找系统中最后n分钟被改变文件状态的文件
-ctime n:查找系统中最后n*24小时被改变文件状态的文件 -mmin n:查找系统中最后n分钟被改变文件数据的文件
-mtime n:查找系统中最后n*24小时被改变文件数据的文件
-nogroup:查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。 -nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。 -type:查找某一类型的文件,诸如:
b - 块设备文件。 d - 目录。
c - 字符设备文件。 p - 管道文件。 l - 符号链接文件。 f - 普通文件。
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
指令实例:
指令 find $HOME -print find ~ -print find . -type f -perm 644 -exec ls -l {} \\; 说明 这两条指令都可以查找当前用户主目录下的所有文件。 让当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件。 查找系统中所有文件长度为0的普通文件,并列出它们的完整路径。 find / -type f -size 0 -exec ls -l {} \\; find /var/logs -type f -mtime +7 -ok rm {} \\; 查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们。 find . -group root -exec ls -l {} \\; 查找当前目录中所有属于root组的文件。 find . -name admin.log[0-9][0-9][0-9] -atime 删除当目录中访问时间在7日以-7 –ok rm {} \\; 来、含有数字后缀的admin.log文件。 locate(locate):快速查找文件或目录
locate命令其实是“find -name”的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
23
参数:
-e :仅显示locate查找结果中,索引项关联的文件存在的那些项。 -l :指定查找到多少项后退出查找。
-q :安静模式,不会显示任何错误讯息。 -r :使用正规运算式用做寻找的条件。 -V :显示locate的版本 -i :忽略大小写。
whereis:程序名搜索
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
which:检查命令是否存在,及执行位置
which命令的作用是,在PATH环境变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
diff(different):生成差异信息 & patch(patch):修补文件
diff和patch是一对工具,在数学上来说,diff是对两个集合的差运算,patch是对两个集合的和运算。
diff比较两个文件或文件集合的差异,并记录下来,生成一个diff文件,这也是我们常说的patch文件,即补丁文件。patch能将diff文件运用于原来的两个集合之一,从而得到另一个集合。举个例子来说文件A和文件B,经过diff之后生成了补丁文件C,那么这个过程相当于A-B=C,那么patch的过程就是B+C=A 或A-C=B。因此我们只要能得到A, B, C三个文件中的任何两个,就能用diff和patch这对工具生成另外一个文件。 diff后面可以接两个文件名或两个目录名。 如果是一个目录名加一个文件名,那么只作用在那么个目录下的同名文件。如果是两个目录的话,作用于该目录下的所有文件,不递归。如果我们希望递归执行,需要使用-r参数。 命令:diff A B > C A:原始文件, B:修改后的文件, C:为A的补丁文件。
不加任何参数生成的diff文件格式是一种简单的格式,这种格式只标出了不一样的行数和内容。我们需要一种更详细的格式,可以标识出不同之处的上下文环境,这样更有利于提高patch命令的识别能力。这个时候可以用-c开关。
patch用于根据原文件和补丁文件生成目标文件。还是拿上个例子来说:
命令:patch A C
以上命令执行后就能得到B, 这一步叫做对A打上了B的名字为C的补丁。这一步之后,
24
文件A就变成了文件B。如果你打完补丁之后想恢复到A怎么办呢?
命令:patch -R B C
以上命令就可以重新还原到A了。所以不用担心会失去A的问题。 diff命令常用参数:
-i:忽略文件内容中的大小写区别; -b:忽略空格数量的变化; -B:忽略空行的变化;
-r:递归处理所有子目录中的文件;
-u:输出每个修改的前后3行,也可以在其后给出具体数值指定更多的行; -N:对于缺少的文件视为空,以正确处理新建或删除的文件时的情况; -a:将所有的类型文件的内容都视为文本; patch命令常用参数: -R:恢复源文件;
ln(link):链接文件或目录
ln命令的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件。 当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln –s /bin/less /usr/local/bin/less。-s 是代号(symbolic)的意思。
这里有两点要注意:
1. ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文
件都会发生相同的变化;
2. ln的链接有软链接和硬链接两种,软链接就是ln –s ** **,它只会在你选定的位置
上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的软链接,用ls –l命令去察看,就可以看到显示的link的路径了。
2.3 Linux文本编辑及查看
编辑工具是任何操作系统中都必不可少的工具,编辑工具可以帮助我们把思想表述出来,并形成计算机文件形式,以便进行相应数据处理和保存。
2.3.1 vi或vim编辑器
在Linux操作系统shell窗口内输入vi或vim就可以打开linux中最著名的编辑器,几乎任何真正是使用Unix或类Unix系统工作的人都必须熟练掌握的工具。vim是
25