在LINUX操作系统中有一个重要的概念:一切皆为文件。除了我们常说的文本文件、执行文件,所有资源都可以看作是文件,包括硬盘、鼠标、打印机等硬件设备。Linux把每个硬件都看成是一个设备文件,这种思想的好处就是隐藏了不同硬件设备的细节,为内核提供统一的I/O操作接口,简化了系统的设计和编程。
?
Linux有7种文件类型,可以用“ls -l”命令查看文件属性列,该列的第一个字符就是下面括号里的字符。
(1)普通文件(-),就是一般存取的文件,例如[-rwxr-xr-x]
(2)目录文件(d),就是目录,例如[drwxr-xr-x]
(3)链接文件(l),基于其他文件,类似Windows的快捷方式,例如[lrwxr-xr-x]
(4)字符设备文件(c),键盘、打印机之类的接口设备,例如[crwxr-xr-x]
(5)块设备文件(b),硬盘之类的接口设备,例如[brw-rw----]
(6)套接字文件(s),通常用于网络连接,例如[srw-rw----]
(7)管道文件(p),通常用于进程之间的通信,例如[prwxr-xr-x]
每个文件都属于一个UID和一个GID
每个进程都使用一个UID和一个或多个GID运行,通常被运行进程的用户决定
三种存取权限对象:
进程使用和文件相同的UID来运行(用户,user)
进程使用和文件相同的GID来运行(组群,group)
所有其它的进程(其他,other)
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:
chown (change owner) : 修改所属用户与组。
chmod (change mode) : 修改用户的权限。
LINUX系统中所有文件目录权限以三个为一组的字母表示,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;
第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。
1、chgrp:更改文件属组
语法:chgrp [-R] 属组名 文件名
参数选项
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。2、chown:更改文件属主,也可以同时更改文件属组
语法:
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名3、chmod:更改文件9个属性
语法: chmod [-R] xyz 文件或目录
参数选项
-R : 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更
文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
w:2
x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx--- 分数则是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定,也可以直接用 chmod 754 文件名设置。示例:
解释权限
-rwxr-x--- 1 andersen trusted 2948 Oct 11 14:27 myscript
·所属用户andersen具备读取、写入、和执行权限
·组群trusted中的成员具备读取和执行权限
·其它用户没有任何权限-rw---(600)--只有属主有读写权限。
-rwx-r-r- (644)-只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------(700)--只有属主有读、写、执行权限。
-rwxr-xr-x(755)-属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx-x-x(711)-属主有读、写、执行权限;而属组用户和其他用户只有执行权执行权限。
-rw-rw-rw-(666)--所有用户都有文件读、写权限,这种做法不可取。
-rwxrwxrwx(777)--所有用户都有读、写、执行权限,更不可取的做法。
cat ?由第一行开始显示文件内容
tac ?从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
nl ? 显示的时候,顺道输出行号!
more 一页一页的显示文件内容
less 与 more 类似,但是比 more 更好的是,他可以往前翻页!
head 只看头几行
tail 只看尾巴几行
你可以使用 man [命令]来查看各个命令的使用文档,如 :man cp。
Linux的目录设计为树型结构,最上面一层为根目录“/”。从根目录往下看,大致有下图所示的树状目录结构。?
根目录下常用的目录有(ls -l /):
/:?? ??? ?根目录,目录结构中最顶层的一个目录;
/bin:?? ?存放用户的常用命令;
/boot: 存放系统的内核文件,以及系统启动时用到的文件;
/dev:?? ?存放硬盘、鼠标之类的设备文件;
/etc:?? ?存放系统的一些配置文件;
/home:?? ?普通用户的主目录;
/lib:?? ?用来存放目录/bin和/sbin中程序所需的库文件;
/lost+found:用于系统故障时保存文件;
/media: 外部设备挂载点,使用该目录挂载光盘、移动硬盘;
/mnt:?? ? 同上;?/opt:?? ?主要用来安装第三方软件;
/proc:?? ?用来保存CPU、内存等系统信息;
/root:?? ?超级用户root的家目录;
/sbin:?? ?用来存储超级用户的命令;
/selinux :存放系统安全方面的一些配置文件;
/srv:?? ?某些系统服务启动后,所需访问的数据目录;
/tmp:?? ?临时目录,所有用户都有读写权限;
/usr:?? ?存放与系统用户相关的文件和目录,例如应用程序、库文件等;
/var: ?存放一些不断改变的文件,例如系统日志、登录信息等
绝对路径:
路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
相对路径:
路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd ../man 这就是相对路径的写法。
路径切换:
特殊符号表示
?. ? 当前目录
?.. ?上级目录
?~ ? 家目录
返回上级目录:
# cd ..?
返回家目录:
# cd ~
或者
# cd
ls(英文全拼:list files): 列出目录及文件名
cd(英文全拼:change directory):切换目录
pwd(英文全拼:print work directory):显示目前的目录
mkdir(英文全拼:make directory):创建一个新的目录
rmdir(英文全拼:remove directory):删除一个空的目录
cp(英文全拼:copy file): 复制文件或目录
rm(英文全拼:remove): 删除文件或目录
mv(英文全拼:move file): 移动文件与目录,或修改文件与目录的名称
你可以使用 man [命令] 来查看各个命令的使用文档,如 :man cp。
·umask可用来设定权限编码,权限编码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
·文件的默认权限是目录的默认权限减去执行权限
·umask使用umask命令来设置.
root用户的umask是022,新建目录的默认权限是777减去umask,p7n.022=755,新建文件的默认权限是666减去umask,即666-022=644
·不具特权的用户的umask是002,新建目录的默认权限是777减去m,即777-002=775,新建文件的默认权限是666减去umask,即666-002-664
系统默认umask可在/etc/profile配置文件中永久设置生效。
?
·setuid表示在运行程序时执行者实际上是以文件的所有者(属上)身份运行的,目的是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限,suid对目录无效.
·setgid表示在运行程序时执行者实际上是以文件的属组身份运行的,如果sgid是设置在某个目录上,则在该目录内所建立的文件或目录的用户组,将会是此目录的用户组。
·[root@station20~]#ls -l /usr/bin/passwd /etc/passwd
-rw-r--r--. 1 root root 1938 Apr 30 07:30/etc/passwd
-rwsr-xr-x.1 root root 31768 Jan 28 2010/usr/bin/passwd?
·setuid就是:让普通用户拥有可以执行“只有root权限才能执行”的特殊权限,
·setgid同理指”组“就是:让普通用户拥有可以执行“只有组成员权限才能执行”的特殊权限
·作为普通用户是没有权限修改/etc/passwd文件的,但给/usr/bin/passwd以setuid
后,普通用户就可以通过执行passwd命令,临时的拥有root权限,去修改/etc/passw中对应自己账号的那部分内容,如更改自己的密码.
Linux 系统传统的权限控制方式,无非是利用 3 种身份(文件所有者,所属群组,其他用户),并分别搭配 3 种权限(读 r,写 w,访问 x)。但在实际应用中,以上这 3 种身份根本不够用,无法实现对某个单独的用户设定访问权限,这种情况下,就需要使用 ACL 访问控制权限。
ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。也可以这么说,设定文件的访问权限,除了用传统方式(3 种身份搭配 3 种权限),还可以使用 ACL 进行设定。
getfacl 命令用于查看文件或目录当前设定的 ACL 权限信息。该命令的基本格式为:
[root@localhost ~]# getfacl 文件名
setfacl 命令可直接设定用户或群组对指定文件的访问权限。此命令的基本格式为:
setfacl -m:给用户或群组添加 ACL 权限
setfacl -d:设定目录ACL 权限
setfacl -R:设定递归 ACL 权限
setfacl -x:删除指定的 ACL 权限
setfacl -b:删除指定文件的所有 ACL 权限
1、创建一个共享目录
在“/home”下创建一个目录名为sysadms,
要求所属组为sysadm组,
组成员可以读写,其它用户没有任何权限,
同组成员在目录下创建的文件的所属组也为sysadm组。
# mkdir ?/home/sysadms
# chgrp ?sysadm ?/home/sysadms/
# chmod ?g=rwx ?/home/sysadms/
# chmod ?o=--- ?/home/sysadms/
# chmod ?g+s ?/home/sysadms/