八、改变文件权限命令
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件 作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的 任何组合。
有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。
每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如:
$ ls -l sobsrc. tgz
-rw-r--r-- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz
横线代表空许可。r代表只读,w代表写,x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。
例如:
- rw- r-- r--
普通文件 文件主 组用户 其他用户
是文件sobsrc.tgz 的访问权限,表示sobsrc.tgz是一个普通文件;sobsrc.tgz的属主有读写权限;与sobsrc.tgz属主同组的用户只有读权限;其他用户也只有读权限。
确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。
下面分别对这些命令加以介绍。
chmod 命令
chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。
该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
1. 文字设定法
chmod [who] [+ | - | =] [mode] 文件名?
命令中各选项的含义为:
操作对象who可是下述字母中的任一个或者它们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。
操作符号可以是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。
设置mode所表示的权限可用下述字母的任意组合:
r 可读。
w 可写。
x 可执行。
X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t 保存程序的文本到交换设备上。
u 与文件属主拥有一样的权限。
g 与和文件属主同组的用户拥有一样的权限。
o 与其他用户拥有一样的权限。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example
使同组和其他用户对文件example 有读权限。
2. 数字设定法
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式为:
chmod [mode] 文件名?
例子:
(1)文字设定法:
例1:$ chmod a+x sort
即设定文件sort的属性为:
文件属主(u) 增加执行权限
与文件属主同组用户(g) 增加执行权限
其他用户(o) 增加执行权限
例2:$ chmod ug+w,o-x text
即设定文件text的属性为:
文件属主(u) 增加写权限
与文件属主同组用户(g) 增加写权限
其他用户(o) 删除执行权限
例3:$ chmod u+s a.out
假设执行chmod后a.out的权限为(可以用ls – l 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而使系统遭到入侵。
例4:$ chmod a–x mm.txt
$ chmod –x mm.txt
$ chmod ugo–x mm.txt
以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。
(2)数字设定法:
例1: $ chmod 644 mm.txt
$ ls –l
即设定文件mm.txt的属性为:
-rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt
文件属主(u)inin 拥有读、写权限
与文件属主同组人用户(g) 拥有读权限
其他人(o) 拥有读权限
例2: $ chmod 750 wch.txt
$ ls –l
-rwxr-x--- 1 inin users 44137 Nov 12 9:22 wchtxt
即设定wchtxt这个文件的属性为:
文件主本人(u)inin 可读/可写/可执行权
与文件主同组人(g) 可读/可执行权
其他人(o) 没有任何权限
chgrp命令
功能:改变文件或目录所属的组。
语法:chgrp [选项] group filename?
该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。
该命令的各选项含义为:
- R 递归式地改变指定目录及其下的所有子目录和文件的属组。
例1:$ chgrp - R book /opt/local /book
改变/opt/local /book/及其子目录下的所有文件的属组为book。
chown 命令
功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。
语法:chown [选项] 用户或组 文件
说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。
该命令的各选项含义如下:
- R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。
- v 显示chown命令所做的工作。
例1:把文件shiyan.c的所有者改为wang。
$ chown wang shiyan.c
例2:把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users。
$ chown - R wang.users /his
九、压缩备份命令
用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩。下面分别介绍备份与压缩的命令。
tar命令
tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。 tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于 备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。
语法:tar [主选项+辅选项] 文件或者目录
使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。
主选项:
c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。
r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。
t 列出档案文件的内容,查看已经备份了哪些文件。
u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。
x 从档案文件中释放文件。
辅助选项:
b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。
f 使用档案文件或设备,这个选项通常是必选的。
k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。
m 在还原文件时,把所有文件的修改时间设定为现在。
M 创建多卷的档案文件,以便在几个磁盘中存放。
v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。
w 每一步都要求确认。
z 用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。
例1:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar。
$ tar cvf usr.tar /home
例2:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz 。
$ tar czvf usr.tar.gz /home
例3:把usr.tar.gz这个备份文件还原并解压缩。
$ tar xzvf usr.tar.gz
例4:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。
$ tar tvf usr.tar | more
要将文件备份到一个特定的设备,只需把设备名作为备份文件名。
例5:用户在/dev/fd0设备的软盘中创建一个备份文件,并将/home 目录中所有的文件都拷贝到备份文件中。
$ tar cf /dev/fd0 /home
要恢复设备磁盘中的文件,可使用xf选项:
$ tar xf /dev/fd0
如果用户备份的文件大小超过设备可用的存贮空间,如软盘,您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设备,当使 用M选项向一个软驱进行存档时,tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。
$ tar cMf /dev/fd0 /home
要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有x和M选项的tar命令。在必要时您会被提醒放入另外一张软盘。
$ tar xMf /dev/fd0
gzip命令
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。
语法:gzip [选项] 压缩(解压缩)的文件名
各选项的含义:
-c 将输出写到标准输出上,并保留原有文件。
-d 将压缩文件解压。
-l 对每个压缩文件,显示下列字段:
压缩文件的大小
未压缩文件的大小
压缩比
未压缩文件的名字
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 测试,检查压缩文件是否完整。
-v 对每一个压缩和解压的文件,显示文件名和压缩比。
-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。
假设一个目录/home下有文件mm.txt、sort.txt、xx.com。
例1:把/home目录下的每个文件压缩成.gz文件。
$ cd /home
$ gzip *
$ ls
m.txt.gz sort.txt.gz xx.com.gz
例2:把例1中每个压缩的文件解压,并列出详细的信息。
$ gzip -dv *
mm.txt.gz 43.1%-----replaced with mm.txt
sort.txt.gz 43.1%-----replaced with sort.txt
xx.com.gz 43.1%-----replaced with xx.com
$ ls
mm.txt sort.txt xx.com
例3:详细显示例1中每个压缩的文件的信息,并不解压。
$ gzip -l *
compressed uncompr. ratio uncompressed_name
277 445 43.1% mm.txt
278 445 43.1% sort.txt
277 445 43.1% xx.com
$ ls
mm.txt.gz sort.txt.gz xx.com.gz
例4:压缩一个tar备份文件,如usr.tar,此时压缩文件的扩展名为.tar.gz
$ gzip usr.tar
$ ls
usr.tar.gz
unzip命令
用MS Windows下的压缩软件winzip压缩的文件如何在Linux系统下展开呢?可以用unzip命令,该命令用于解扩展名为.zip的压缩文件。
语法:unzip [选项] 压缩文件名.zip
各选项的含义分别为:
-x 文件列表 解压缩文件,但不包括指定的file文件。
-v 查看压缩文件目录,但不解压。
-t 测试文件有无损坏,但不解压。
-d 目录 把压缩文件解到指定目录下。
-z 只显示压缩文件的注解。
-n 不覆盖已经存在的文件。
-o 覆盖已存在的文件且不要求用户确认。
-j 不重建文档的目录结构,把所有文件解压到同一目录下。
例1:将压缩文件text.zip在当前目录下解压缩。
$ unzip text.zip
例2:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。
$ unzip -n text.zip -d /tmp
例3:查看压缩文件目录,但不解压。
$ unzip -v text.zip
zgrep命令
这个命令的功能是在压缩文件中寻找匹配的正则表达式,用法和grep命令一样,只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话,便可用zgrep命令。
Linux系统提供了一组称为mtools的可移植工具,可以让用户轻松地从标准的DOS软盘上读、写文件和目录。它们对DOS和Linux环境之间交 换文件非常有用。它们是不具备共同的文件系统格式的系统之间交换文件的有力手段。对于一个MS-DOS的软盘,只要把软盘放在软驱中,就可以利用 mtools提供的命令来访问软盘上的文件。
mtools的主要命令如下:
mcd 目录名 改变MSDOS目录;
mcopy 源文件 目标文件 在MSDOS和Unix之间复制文件;
mdel 文件名 删除MSDOS文件;
mdir 目录名 显示MSDOS目录;
mformat 驱动器号 在低级格式化的软盘上创建MSDOS文件系统;
rnlabel 驱动器号 产生MSDOS卷标;
mmd 目录名 建立MSDOS目录;
mrd 目录名 删除MSDOS目录;
mren 源文件 目标文件 重新命名已存在的MSDOS文件;
mtype 文件名 显示MSDOS文件的内容。
这些命令和对应的不加 m的 MSDOS命令非常相似。
例1:在Linux环境下看DOS盘最上层的目录的内容:
$ mdir a:
Volume in drive A has no label
Volume Serial Number is 15F6-3362
Directory of A:/
SS6 CPP 331 09-24-99 7:41 ss6.cpp
CH9
11-20-99 16:22 ch9
XXQ 0 11-20-99 16:24 xxq
95CZXTA DOC 36,864 06-15-98 22:51 95czxta.doc
95CZXTB DOC 39,936 06-16-98 7:18 95czxtb.doc
HTCA DOC 27,136 01-08-99 0:13 htca.doc
HTCB DOC 27,136 01-08-99 0:12 htcb.doc
6 file(s) 131,403 bytes
1 dir(s) 1,295,872 bytes free
例2:将DOS盘上的文件xxq复制到当前目录下,并用ls命令进行验证。
$ mcopy a:/htca.doc
$ ls –l htca.doc
-rw-r— -r- - 1 xxq xxq 27136 Jan 1 01:80 htca.doc