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 –full-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服务器来挂载网络山的指定目录。

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

时间: 2016-03-26

linux文件目录默认权限(详解)

1.文件的默认权限是没有x的,即文件的最大默认权限为666(-rw-rw-rw) 2.由于进入目录和目录的x权限有关,故目录的最大默认权限为777(drwxrwxrwx) 查看默认权限需要使用umask命令: [123@123 ~]$ umask           //数字方式显示 0022 [123@123 ~]$ umask -S        //符号方式显示 u=rwx,g=rx,o=rx以数字范式显示有4个数字,只看后3个即可,第一个为特殊权限使用 [123@123 ~]$ touc

Linux 文件和目录权限详细介绍

Linux文件和目录权限解读 如何设置Linxu文件和目录的权限 字符表示法   1)ls -l:查看所在目录所有文件的权限 2)chmod u=r file:把file文件的当前(用户user)的权限赋值为可写模式 3)chmod g=wrx file:把file文件的当前(组gruop)的权限赋值为可写,可读,可执行模式 4)chmod g-x file:把file文件的当前(组group)的权限减去可执行模式 5)chmod o+w file:把file文件的当前(所有人other)的权限

linux修改目录和文件权限的简单命令解释

今天遇到的问题,如何一个用户如www的权限复制给我的用户? 目录的权限表示:dwrxr--r-- 其中第一个字符 d代表目录, -代表字符 w代表可写,r代表可读 x代表可执行 数字为4,2,1其中第一组是文件或者目录所有者权限,第二组代表当前用户所在用户组,第三组是其他用户组的权限所以控制文件的权限是精确到组的 用 chmod 权限 目录 复制代码 代码如下: chmod 777 testchmod u+w test

Linux中文件权限目录权限的意义及权限对文件目录的意义

linux中目录与文件权限的意义 一.文件权限的意义 r:可以读这个文件的具体内容: w:可以编辑这个文件的内容,包括增加删除文件的具体内容: x:文件就具有了可执行的权限-------注意:这里和window不一样,在win中,文件的可执行权限是通过扩展名表现出来的,如exe.bat等,但是在linux中文件的可执行权限是通过这个x决定的,与文件名没有什么关系. 二.目录权限的意义 r:可以查看此目录下的完整文件列表信息. w:可以对此目录下的所有的文件及目录进行相关的更改,也就是可以更改这个

Linux 下目录文件权限(命令)的查看和修改

Linux 下目录文件权限的查看和修改 在我的服务器下面有这几个文件夹 同时用ls -l也可以查看到这几个文件的权限. 看其中的assets文件一共有十位数,其中: 最前面那个 - 代表的是类型 中间那三个 rwx 代表的是所有者(user)拥有的权限 然后那三个 rwx 代表的是组群(group)拥有的权限 最后那三个 rwx 代表的是其他人(other)拥有的权限 r 表示文件可以被读(read) w 表示文件可以被写(write) x 表示文件可以被执行(如果它是程序的话) -表示相应的权

linux文件上传,给文件或目录添加apache权限的方法

在LAMP环境中,测试一个简单的php文件上传功能时,发现/var/log/apache2/error.log中出现如下php警告: 1. [Tue Jan 31 09:40:27 2012] [error] [client 127.0.0.1] PHP Warning: move_uploaded_file(/home/leotody/32883679.jpeg): failed to open stream: Permission denied in /var/www/upload_file

linux下建站目录分配权限的经验技巧总结

前言 在网上搜索网站文件夹权限配置一般都是是: 文件夹权限最小权限755 文件最小权限644 文件的可读可写可执行很容易理解,但文件夹的权限就需要好好梳理梳理啦,下面是自己的一些经验分享给大家,需要的一起来看看详细的介绍: 前期工作 先创建一个文件夹 test mkdir test 在该目录下创建一个1.txt文件并写入111 cat > 1.txt 111 现在退出该目录来一个一个分析改目录权限 不要用root用户来创建文件夹,因为文件权限配置对root用户无效 目录的可执行权限 chmod

简析Linux中如何改变文件或目录的访问权限

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作. 文件或目录的访问权限分为只读,只写和可执行三种.以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作.可执行权限表示允许将该文件作为一个程序执行.文件被创建时,文件所有者自动拥有对该文件的读.写和可执行权限,以便于对文件的阅读和修改.用户也可根据需要把访问权限设置为需要的任何组合. 有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户.其他用户.所有者一般是文件的

详解Linux系统中设置SFTP服务用户目录权限的方法

前言 在工作或者学习的时候,我们常常会遇到这样的需求,限制一个Linux用户,让他只能在指定的目录下进行添加.修改.删除操作,并且只能使用sftp登录服务器,不能用ssh操作.这些可以通过配置sftp服务实现. 方法如下 提供sftp服务的有vsftpd和internal-sftp,这里用的是系统自带的internal-sftp,操作步骤如下: 1.创建新用户ui,禁止ssh登录,不创建家目录 useradd -s /sbin/nologin -M www 2.设置用户密码 passwd www

详解Linux系统中Oracle数据库程序的启动和关闭方式

在单机环境下,要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle Oracle数据库有以下几种启动方式: 1. startup nomount 非安装启动,这种方式启动下可执行:重建控制文件.重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件. 2. startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档. 数据库介质恢复. 使数据文件联机或脱机, 重新

详解Linux系统中的tempfs与/dev/shm

tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,即 tmpfs 使用内存或 swap 分区来存储文件. Linux 内核中的 VM 子系统负责在后台管理虚拟内存资源 Virtual Memory,即 RAM 和 swap 资源,透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页,tmpfs 文件系统需要 VM 子系统的页面来存储文件.tmpfs 自己并不知道这些页面是在交换分区还是在 RAM 中:做这种决定是 VM 子系统的工作.tmpfs 文件系统所知道的就是它

详解Linux系统中网卡MAC地址克隆方法

怎么临时性地改变 MAC 地址? 你可以在 Linux 运行的时候改变 MAC 地址.需要注意的是当 MAC 地址转换的那一会时间,你的网络会掉线.当电脑重启时 MAC 地址又会变回原来的.下面介绍几种方法来改变你的 MAC 地址. 方法一:iproute2 $sudo ip link set dev eth0 down $sudo ip link set dev eth0 address 00:00:00:00:00:01 $sudo ip link set dev eth0 up 方法二:m

详解Linux命令中的正则表达式

命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊查找,就需要使用正则表达式.正则表达式是一套由多个元字符组成的模糊查找模式,使用正则表达式可以快速查找和定位文本中指定的内容. 1.单字符匹配符.  正则表达式主要由一些元字符和匹配模式组成 单字符匹配符可以匹配任意单个字符,这个字符的功能和文件名匹配符中的?功能相同 使用正则表达式查找文本,首先需要使用元字符组成一个查找模式 (1)使用查找模式时,通常将其放入两个斜杠//中,然后再放入命令,例如要在一个文本中查找匹配模式/.i...

教你如何在windows与linux系统中设置MySQL数据库名、表名大小写敏感

在 MySQL 中,数据库和表其实就是数据目录下的目录和文. 因而,操作系统的敏感性决定数据库和表命名的大小写敏感.这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix/Linux 系统中是大小写敏感的. MySQL大小写敏感可以通过配置文件的lower_case_table_names参数来控制. WINDOWS: 编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_names=0 (备注:为0时大小

详解Linux系统无法上网解决方案

1.linux系统iso镜像文件最好不要使用lived版本的,之前安装这个版本linux系统,每次新建文件夹,下载的资源在重启之后都没法使用,后来下载就好了. 2.但是下载如此版本出现一个问题,使用ifconfig命令来查看系统的ip地址,一开始出现的是如下情况,没有ipv4地址,如下图 3,如果没有ipv4地址则使用命令,首选选择linux的连接为桥连接 右键centos64位点击设置,出现如下图 如果不是桥连接,点击网络适配器进行选择. 标箭头的一定要设置成这样. ,dhclient eth

详解Android系统中的root权限获得原理

前言 一直很好奇Android Root的原理,恰好最近碰到了一个跟Android默认带Root权限的问题,这里顺便记录一下Android系统root的原理. 原理 Android是基于Llinux内核的开源操作系统,与Ubuntu系统类似,所以在Android里获取root权限其实和在Linux系统下获取root权限是一回事.在Linux系统下获取root权限的方法是在命令行执行sudo或者su,接下来输入提权密码就可以获取root权限了.Android系统其实也是这样,例如应用层程序开发,在

详解Linux内核中的container_of函数

前言 在linux 内核中,container_of 函数使用非常广,例如 linux内核链表 list_head.工作队列work_struct中. 在linux内核中大名鼎鼎的宏container_of() ,其实它的语法很简单,只是一些指针的灵活应用,它分两步: 第一步,首先定义一个临时的数据类型(通过typeof( ((type *)0)->member )获得)与ptr相同的指针变量__mptr,然后用它来保存ptr的值. 第二步,用(char *)__mptr减去member在结构体

详解安卓系统中的Android.mk文件

概述     Android.mk文件用来向编译系统描述如何编译你的源代码.更确切地说,该文件其实就是一个小型的Makefile.由于该文件会被NDK的编译工具解析多次,因此应该尽量减少源码中声明变量,因为这些变量可能会被多次定义从而影响到后面的解析.这个文件的语法允许把源代码组织成模块,每个模块属于下列类型之一: APK程序:一般的Android程序,编译打包生成apk文件.     JAVA库:java类库,编译打包生成jar包文件.     C\C++应用程序:可执行的C/C++应用程序.