Linux文件权限与目录管理详解

一、Linux文件系统的三种身份

1)、文件所有者
2)、同组用户
同一个用户组的用户可以访问该用户组的文件;
每个账号可以加入多个用户组。
在同一个用户组的文件也可以设置不同的权限,可以不让本组用户查看。
3)、其他人
除了文件主、同组用户以外的人就是其他人。
PS: /etc/passwd 记录所有用户的账号
/etc/shadow 记录所有用户的密码
/etc/group 记录所有的组名

二、文件属性

ls -al 显示所有的文件名和相关属性(包括以.开头的隐藏文件)

total 72
drwxr-xr-x+ 28 chaibozhou staff  952 4 23 08:08 .
drwxr-xr-x  5 root    admin  170 4 13 21:24 ..
-r--------  1 chaibozhou staff   9 3 21 12:00 .CFUserTextEncoding
-rw-r--r--@ 1 chaibozhou staff 10244 4 23 11:25 .DS_Store
drwx------  5 chaibozhou staff  170 4 23 14:13 .Trash
-rw-------  1 chaibozhou staff  3205 4 23 16:37 .bash_history
drwxr-xr-x  6 chaibozhou staff  204 4 4 15:51 .config

第一列:文件的类型和权限
d:目录文件
-:普通文件
l:链接文件
b:用于存储数据的设备文件
c:用于传输数据的设备文件:鼠标、键盘

接下来都是三个字符为一组,分别表示文件所有者的权限、同组用户的权限、其他用户的权限,而且r、w、x的顺序是固定不变的。

第二列:有多少文件名连接到此节点

第三列:这个文件/目录的所有者账号
第四列:这个文件所属的用户组
第五列:这个文件的大小,单位是B
第六列:这个文件的创建日期或修改日期
若想要现实完整的日期时间,可以在ls上加上参数:ls -l Cfull-time
PS:在Linux的命令中,如果参数以-开头,则表示后面的参数是简写;如果以--开头,则表示后面的参数是完整的。这里的full-time就是一个完整的参数。
PS:如果当初使用中文安装Linux的话,显示完整的日期应该会以中文显示,但中文无法在命令窗口中显示,此时就会出现乱码,此时只能设置一下,让日期用英文显示:LANG=en_US
第七列:文件名

三、Linux权限的重要性

1、保护系统文件的功能
通常系统文件只有root管理员才有读、写、执行的权限。
2、为团队开发提供数据共享的功能
同一个开发团队可以设置成同组用户,从而能够共享文件。

四、改变文件属性与权限的命令

1、chgrp:改变文件所属的用户组
chgrp [-R] 新用户组 目录或文件 : 将这个路径下的文件的用户组改成“新用户组“
PS:这个新用户组一定得是/etc/group下有的,否则会报错。
PS:若最后一个参数是目录,则表示只将这个目录下的文件的用户组改成这个。
PS:-R表示若最后一个参数是目录,则将当前目录下的文件连同子目录下的所有文件的用户组都改成这个。
2、chown:改变文件主
chown [-R] 用户名 文件或目录 : 将这个目录下的所有文件的文件主都改成这个用户名。
PS:这个用户名必须是/etc/passwd下有的才行。
这个命令可以既修改文件主又修改用户组:chown [-R] 用户名:用户组名 目录/文件
chown [-R] 用户名.用户组名 目录/文件
PS:由于用户名可以存在小数点,当出现含有小数点的用户名时,系统会发生误判,所以我们一般都使用:来连接用户名和用户组名。
还可以仅修改用户组名:chown [-R] .用户组名 目录/文件
什么时候需要改变文件的文件主和用户组?
当我们把一个文件拷贝给别人的时候,假设这个文件只能文件主读取,由于拷贝会把文件的权限和所有的属性都一同复制,那么当另外一个人拿到拷贝后的文件后仍然无法访问;所以在拷贝完成之后,第一个人应当修改文件的属性和权限。

cp  原目录/原文件  新目录/新文件
1、chmod:改变文件的权限
改变文件的权限有两种办法,分别是:用数字进行权限的修改、用符号进行权限的修改。
a)用数字进行权限的修改
前面我们已经知道,权限有9个字母组成,并且每三个为一组,分别表示:文件主的权限、同组用户的权限、其他人的权限。在这种方式中,r=4、w=2、x=1,将每一组的三个值加起来,组成一个三位数即可。例如:
文件主:rwx = 4+2+1=7;
同组用户:rwx=4+2+1=7;
其他人:---=0+0+0=0;
所以命令如下:

chmod [-R] 770 文件/目录

b)用符号进行权限的修改
chmod  u/g/o/a  +/-/=  r/w/x  文件/目录
例子:文件主能够读、写、执行;同组用户和其他用户能够读、执行。
chmod  u=rwx,go=rx  文件名
假设原先不知道文件的属性,现在只想让所有的人能够执行这个文件,则:
chmod  a+x  文件/目录
假设原先不知道文件的属性,现在只想让同组用户和其他用户无法写,则:
chmod  go-w  文件/目录
目录与文件权限的意义

一个文件具有rwx,仅仅表示用户可以对这个文件内容进行读、写、执行,即读取文件内容、向文件中写入内容、执行文件。但并不具备删除这个文件的权限。

一个目录具有rwx:
r:表示具有读取目录结构的权限,也就是我可以通过ls这个命令来查看目录的结构,但是,我是无法通过cd进入到这个目录下的。
w:表示具有更改目录结构的权限,即能够创建/删除/重命名/移动文件/目录。
x:表示某一用户能够通过cd进入到这个目录下。
PS:一个目录是否有x权限是非常重要的,如果没有x权限,表示不能进入到这个目录下,也就是不能执行这个目录下的所有程序。例:有一个目录文件如下

drwxr--r--  3  root  root  4096  日期  .ssh
这个目录文件的同组用户和其他用户只能通过ls查看目录的结构,不能cd到这个目录中去,也不能执行这里面的所有程序。

在架站时,要将服务器中的一些资源给外界访问,但如果一个目录只开放了r权限,那么只能ls这个目录的结构,却不能进入到这个目录中访问里面的数据。若要把目录中的数据开放给别人浏览的话,至少要开放r和x权限,但w权限不能轻易开放。例如:

假设有个账号user1,她的主文件夹是:/home/user1,user1对此目录文件具有rwx权限,在这个文件夹下有一个data文件,权限如下:-rwx―― 1 root root ……,则:
user1对于这个文件来说属于其他用户,不具备任何权限;但是对于这个文件夹来说,具有rwx,能够通过ls查看文件夹的目录结构,能够通过cd进入该文件夹,能够在这个文件夹下创建、删除、重命名、移动文件。

使用root账号在/temp下创建一个目录/dir,该目录的权限为744;再在/dir下创建文件test。
分析:对于dir这个目录,文件主rwx,同组用户和其他用户只能r;即:文件主能够ls这个目录结构,能够cd到这个目录,能够在这个目录中创建、删除、重命名、移动文件;而同组用户和其他用户只能ls这个目录结构。
PS:创建目录:mkdir 目录名
PS:创建空文件:touch 文件名

#用root身份进行以下操作
cd /temp
mkdir dir
chmod 744 dir
touch dir/test
chmod 600 dir/test #对于这个文件,文件主4+2:读和写,同组用户和其他用户啥也不能干
#现在切换身份至chai
su - chai #切换身份的命令:su - 用户名
cd /temp
ls -l dir #现在身份是chai,对于这个目录来说,是其他用户,那么只有r权限,也就是只能ls这个目录的结构,无法cd到这个目录中去
cd dir #直接报错:permission denied
exit #退出到刚才的身份
chown chai /temp/dir #将dir这个目录的文件主改为chai,此时chai具有rwx权限
cd /temp/dir #此时chai可以cd到dir中,可以在dir中创建、删除、重命名、移动文件
rm test #删除test文件

五、Linux文件种类

普通文件-
1. 纯文本文件
可以通过cat /chai来查看chai这个普通文件。
2. 二进制文件
Linux中的可执行文件(scripts和文字批处理文件不算)。
刚才的cat就是二进制文件。
3. 数据格式文件
就是程序运行时会被读取的具有特定格式的文件,如配置文件。
例如:用户在登陆Linux时,登陆日志会被记录在/var/log/wtmp这个文件中,这个文件就是一个数据格式文件。
PS:数据格式文件要用last去读,若用cat读会出现乱码。

目录文件d

连接文件l
就是Windows下的快捷方式。

设备文件
1. 块设备文件b
用于存储数据的设备文件,如:硬盘、软盘。
2. 字符设备文件c
用于数据传输的设备文件,如:键盘、鼠标。
3. 套接字s
这个设备文件在/var/run中。
4. 管道p
用于解决多个程序同时访问一个文件所造成的错误问题。

六、Linux扩展名

Linux并没有扩展名,一个Linux的文件是否可以执行,取决于这个文件的属性中是否有x这个权限。
但是为了增强文件的可读性,我们还是给文件增加了“扩展名“。
*.sh表示脚本或批处理文件。
*Z、*.tar、*.tar.gz、*.zip、*.tgz他们都是压缩文件。
PS:从网上下载的文件的权限是有可能发生改变的,所以当我们下载的文件无法运行时查看一下它的权限是否有x。

七、Linux对文件的限制

Linxu默认采用Ext2/Ext3文件系统,对文件名的长度限制为:
单个文件名或目录名最大长度255个字符;
完整的文件或目录名最大长度为4096个字符。
文件命名时要避免一些特殊字符。

八、Linux目录配置标准

由于开发Linux distribution的厂商非常多,所以要对这些厂商开发的文件系统规范化,因此就出现了文件系统配置规范:Filesystem Hierarchy Standard=FHS。

FHS对目录规范的四种类型:

1、可分享的目录
表示这个目录可以分享给网络上的其他主机挂载使用。
2、不可分享的目录
只能在自己机器上运行的设备文件或者与程序有关的socket文件,由于只与自己的机器有关,所以自然就不能分享给其他主机了。
3、不变的目录
不管什么样的distributions,这些目录是固定不变的,而且目录里面的文件数据基本不发生变化。一般这些目录中存放函数库、系统配置文件等。
4、可变的目录
这些目录中文件的数据一直会发生变化,如日志文件。
根目录是整个系统最重要的目录,其他所有的饿目录都是由根目录衍生而来的,同时根目录也与开机、还原、系统修复等操作有关。

FHS建议:根目录要足够的小,而且应用程序不要和根目录放在同一个分区中。

FHS建议根目录下必须要有这些目录:
- /bin:在bin目录下的命令可以被所有账号使用,一般的命令是:cat、chmod、chown、date、mv、mkdir、cp、bash
- /boot:放开机会用到的文件
- /dev:任何设备都是以文件的形式存放在这个目录当中
- /etc:系统主要的配置文件都放在这个目录中。这个目录下的文件属性是可以给一般用户查阅的,但只有root才可以修改,FHS建议:这个目录下不要放置可执行文件。
- /home:系统默认的用户主文件夹。
~表示当前登陆用户的主文件夹
~chai表示指定用户的主文件夹
- /lib:存放开机时用到的库函数及/bin、/sbin目录下的命令会使用到的库函数。
- /media:放置可删除的设备文件。如:软盘、光盘。
- /mnt:如果要临时挂载一些额外的设备就放在这个文件夹下。
- /opt:放置第三方软件的目录
- /root:系统管理员的主文件夹
- /sbin:放置开机过程中需要的,包括开机、修复、还原系统所需要的命令
- /srv:是service的缩写,存放网络服务所需的一些数据。
- /tmp:一般用户执行程序暂时存放数据的地方。任何人都可以访问,所以要定时清理一下。FHS建议distributions开机时要将这个目录清空。

其他重要的目录:
- /lost+found:使用ext2/ext3文件系统才会产生的一个目录。当文件系统发生错误时,一些丢失的片段就会放在这个目录中。
- /proc:是一个虚拟文件系统,也就是它的数据都是存放在内存中的,不占用硬盘空间。
- /sys:也是一个虚拟文件系统,记录内核相关信息。

开机的时候只有根目录被挂载了,其他的目录所在的分区都是在系统启动完成之后才被挂载的。因此与开机过程有关的目录就必须要和根目录放在同一个分区中。必须与根目录放在同一个分区中的目录有:

/etc:配置文件
/bin:重要的执行文件
/dev:所需要的设备文件
/lib:执行文件所需要的库函数与内核所需要的模块
/sbin:重要的系统执行文件

/usr目录
=UNIX Software Resource,是操作系统关键资源放置的目录。
FHS建议:所有软件开发者都应将数据放置在这个目录的子目录下,而不要自行创建独立的目录。
这个目录就相当于Windows下的c:\program files。

/var目录
/usr放置安装程序时所需要的较大容量的文件,而/var下存放在程序执行过程中渐渐才会占用硬盘的目录。如:缓存、日志等。

每一个目录不只能挂载本地的文件系统,还可以使用网络上的文件系统。可以利用Network File System服务器=NFS服务器来挂载网络山的指定目录。

以上就是本文的全部内容,希望对大家的学习有所帮助。

代码技巧

转载请关注公众号:代码技巧 回复:授权

本文链接地址:https://www.oudahe.com/p/49189/