在Linux中,万事万物皆文件,普通文件是文件,目录是文件,硬件设备也是文件,因此学习了解Linux中的文件非常重要。

  Linux中有三种文件类型:

(1) 普通文件:又分为文本文件和二进制文件

(2) 目录文件:目录文件存储了一组相关文件的位置、大小等与文件有关的信息。

(3) 设备文件:I/O设备在Linux中也被看成文件,与普通文件一样处理,这样使文件与设备的操作尽可能统一。

一、Linux文件属性

  Linux的文件有很多属性,要查看文件的属性可以用ls -l命令,为了后续的讲解中有操作的权限,下面的内容均以root的权限操作终端,要进入root权限很简单,在Ubuntu(以下所有的截图都是在Ubuntu下截取的)下键入root -s,然后输入密码即可获取root权限。

我们可以看到获取root权限后后面变成#,这就是获取到root权限的标志。

OK,我们输入ls -al,可以看到用户目录下的所有文件(包括隐藏文件和目录文件)的详细信息。

  每一行都有一堆东东,这代表什么什么呢?菜鸟表示看不懂囧rz,别急小胡一开始也什么都看不懂,耐心看接下来的内容,看完我保证你觉得so easy啦!

  在正式介绍这些东东之前,小胡先给大家讲讲ls这个命令。

  命令:ls

  作用:显示指定目录的目录和文件。

  常见参数选项:

      -l   列出指定目录下的文件的详细属性

      -a  列出指定目录下所有文件,包括隐藏文件,也就是.开头的文件

      -d  列出指定目录下的所有目录,注意是目录而不是文件

      -k  以K字节的形式表示文件大小

      -i   显示文件的索引节点

      -R 显示指定目录及子目录下的内容

      -t   以创建或最后一次更改时间排序

      -S  以文件大小排序

  注意这些参数是可选的,如果只是键入ls,那么只会显示当前目录下的所有文件(不包含隐藏文件)。可选参数之间是可以复用的,例如我们用ls -l来显示当前目录下所有文件的详细信息,用ls -a显示当前目录下的所有文件(包含隐藏文件),如果我们又想显示隐藏文件又想显示文件信息,那么我们可以使用ls -la或ls -la(参数不分先后),同样的道理,当我们想按时间顺序显示所有文件信息时,就可以使用ls -tl或ls -lt,其他命令的组合以此类推,根据需要自由组合,下面展示一些命令的截图,多打打吧,很快就知道怎么用了。

  啰啰嗦嗦讲完了ls命令,相信大家都能用了吧!如果在操作是忘了有什么参数或某个参数的作用是什么,那么键入man ls,里面有详细的解析哦。OK,接下来我们步入正题,使用ls将文件属性显示出来了,那么没一行里面的信息代表什么意思呢?别急,且听小胡娓娓道来!

  我们按照每一列,一个个进行讲解。

第一列代表文件的类型与权限

  在第一列中,第一个字母表示这个文件是目录、文件还是链接文件。

  d  表示目录

-  表示文件

l  表示链接文件(linkfile)

b  表示设备文件里面的可供存储的接口设备

  c  表示设备文件里面的串行端口设备,例如键盘、鼠标

  p  管道文件

  s  Socket文件

  后面的9个字符,我们以3个为一组,在每一组中,r代表读权限,w代表写权限,x代表可执行权限。第一组代表文件所有者的权限,第二组代表文件所有者所在用户组的权限,第三组代表其他用户的权限,我们以上图倒数第三行的paas.sql文件为例,看第一个字母我们知道它是一个真正的文件,文件所有者有读写权限,所有者所在用户组有读写权限,其他用户只有读权限,所有人都没有文件的可执行权限。

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

  通俗地讲,就是这个文件有多少文件别名,这个有点类似于编程语言中的引用变量,别名虽然不同,但是它们指向的是同一个文件。

第三列表示文件所有者的用户名

第四列表示文件所在用户组的组名

第五列表示这个文件的容量大小,默认单位是B

第六列表示这个文件的创建日期或者最近的修改日期

第七列很明显就是文件名称了

总结:我们还是以上图的paas.sql作为例子,权限说过了,它有一个文件名,所有者是codeman,所有者所在用户组名也是codeman,文件大小为2272B创建或最后一次修改时间是12月18号17点11分,文件名是paas.sql。

  我们注意到上面显示的文件时间没有显示年份,这里我们可以使用—full-time来显示详细的时间,截图如下。

  关于为什么要设置Linux文件权限?

  相信很多初学者都有这样的疑问,小胡一开始使用Linux的时候也不例外。特别是当初做一个项目,在lamp环境下开发,然后调试的时候经常会出现没有权限访问文件的问题,觉得很烦啊,然后上网搜了一下命令直接权限全开,其实这样做很蠢耶!我们都知道Linux是在Unix之后产生的,它的设计遵循了Unix的系统架构标准,Unix是为多用户多任务而设计出来的,当同一台主机被多人访问时,如何保护每个用户的隐私成了非常关键的问题,因此Unix有了用户、用户组、其他用户这三个级别的权限,保证了每个使用者每个用户组的隐私,非常有用,除此之外,我们都知道Linux的安全性远比windows高得多,一个很重要的原因就是因为有个文件权限机制,任何操作都必须要有权限,所以比较安全!

二、如何改变文件属性和权限

  通过上面的讲解相信大家对文件权限已经有一些概念了,接下来小胡会给大家介绍如何改变文件的属性和权限。

  主要用到的命令有三个:

chgrp:改变文件所属用户组

chown:改变文件所有者

chmod:改变文件的权限

改变所属用户组:chgrp

# chgrp  [-R]   dirname/filename

PS.-R表示进行递归的持续更改,也即连同目录下的子目录和文件也修改用户组,如果用户组不存在,那么将报错,要查看系统中有哪些用户组可以查看/etc/group。

如上图所示,我们在用户目录下创建了一个test.txt文件,查看一下文件信息,它是属于root用户组,然后使用chgrp改变test.txt所属用户组为codeman,再查看一下文件属性,我们可以看到现在文件所属的用户组已经变成codeman了。

改变文件所有者:chown

#chown  [-R]   dirname/filename

PS.用法同上,同样地也需要系统中已经存在的用户才能更改,要查看系统中有哪些用户可以查看/etc/passwd

改变文件的权限:chmod

文件权限设置的方法有两种

(1) 数字类型改变文件权限

  通过上面的学习,我们知道,文件权限对应用户、用户组、其他人一共有三组权限,我们使用4代表r,2代表w,1代表x。三个数字加起来的和就代表一组权限,三个数字就代表了一个文件的完整权限。

  # chmod   [-R]   777   dirname/filename

(2) 符号类型改变文件权限

使用u表示user,g表示group,o表示others,a表示all

使用+表示加入,-表示除去,=表示设置

使用r表示读,w表示写,x表示执行

eg:

# chmod   u=rwx,go=rx   dirname/filename

 等同于 chmod  755  dirname/filename

当ugo设置的权限相同时,可以写在一起,如ugo=rwx,也可以写成a=rwx

添加、除去某项权限以此类推。

三、目录与文件的权限意义

(1)  权限对文件的重要性

  r(read):可读取此文件的实际内容

  w(write):可以编辑、新增获取修改文件的内容(但不含删除该文件)

  x(execute):在windows中通过文件扩展名来判断文件是否可执行,而Linux中文件能否被执行由

        是否具有x权限来决定,文件是否可执行与扩展名没有关系。

(2)  权限对目录的重要性

  r(read contents in directory):表示具有读取目录结构列表的权限

  w(modify contents in directory):表示具有更改改目录结构列表的权限

  x(access directory):表示用户能否进入该目录成为工作目录

实际应用:

  要注意文件权限和目录权限的区别,很多时候要成功对文件进行读写执行除了要对这个文件具有权限外,还需要考虑用户对该文件所处的目录的权限,如果对目录无权限那即使对文件有权限,也无法对文件成功进行操作。

Eg:

我们在用户目录以root权限用mkdir命令创建了一个testing文件夹,用touch命令文件夹下有一个testing的文件,分别赋予744和600的权限,然后切换用户为codeman,这样一般用户就对testing目录具有可读权限了,按照前面讲的,那应该拥有读取testing目录下文件属性的权限,但是由于一般用户对testing文件没有任何权限,所有显示文件属性列表时出现一堆问号。由于没有对testing目录的可执行权限,所以一般用户也无法切换工作目录至testing。

关于文件和目录权限的部分就说到这,有什么纰漏之处欢迎指正!

运维系列之一 Linux的文件与目录权限解析的更多相关文章

  1. Linux文件及目录权限解析

    Linux系统9位基础权限体系 文件权限   * r权限 可读          对文件具有读取及查看文件内容的全新啊   * w权限 可写        对文件具有新增.修改文件内容的权限     ...

  2. 【Linux】文件、目录权限及归属

    访问权限: 可读(read):允许查看文件内容.显示目录列表 可写(write):允许修改文件内容,允许在目录中新建.移动.删除文件或子目录 可执行(execute):允许运行程序.切换目录 归属: ...

  3. Linux系统——文件和目录权限

    文件及目录权限(七进制表示) r  读权限(4),允许查看文件内容 w 写权限(2),允许修改文件内容 x  可执行权限(1),允许运行程序 - 无权限(0) 属主:拥有该文件的用户账号 属组:拥有该 ...

  4. [置顶] Linux下文件和目录权限说明

    在Linux下使用ls -l或者ll命令可以查看文件和文件夹的权限.结果显示类似于: drwxrwxrwx,这里分为四组,分别为文件类型,文件所有者的权限(读写执行),文件所有者所在组用户的权限(读写 ...

  5. Linux更改文件及目录权限问题

    1. 快速实例学习: 修改某个目录下的所有文件的权限,包括子目录中的文件,例子如下: # /home/user 注:仅把/home/user目录的权限设置为rwxrwxrwx # /home/user ...

  6. Linux的文件、目录权限管理

    查看文件夹的详细信息 [root@s25linux ~]# ll /tmp总用量 4drwxr-xr-x. 2 root root   6 2月 17 11:00 hehe   #文件夹 解读它的信息 ...

  7. saltstack自动化运维系列⑤之saltstack的配置管理详解

    saltstack自动化运维系列⑤之saltstack的配置管理详解 配置管理初始化: a.服务端配置vim /etc/salt/master file_roots: base: - /srv/sal ...

  8. SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 邮件作为一种非常便利的预警实现方式,在及时性和易用性 ...

  9. SQL Server自动化运维系列——监控跑批Job运行状态(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在上一篇文章中已经分析了SQL SERVER中关于邮 ...

随机推荐

  1. fprintf与stderr、stdout的使用

    #include <stdio.h> void main() { fprintf(stderr,"soyo8888!"); fprintf(stdout,"s ...

  2. MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式。

    原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...

  3. 搭建Git服务器(转载)

    转自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360 ...

  4. oracle基础学习---------1

    1.SQL执行时间的开关 set timing on --->开         set timing off--->关 2.创建数据表.以已存在的表创建(也就是复制一个表.但表内没有数据 ...

  5. Django day25 序列化组件(*****)

    序列化:将变量从内存中存储或传输的过程称之为序列化 1.序列化组件是干什么用的? 对应着表,写序列化的类 2.如何使用序列化组件 Serializer 1) 重命名:用source:xx = seri ...

  6. jquery实现图片预加载提高页面加载速度

    使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...

  7. Mac OS下配置 ADB环境变量

    前提已经安装了Android sdk. 步骤打开终端Terminal, 输入open -e ~/.bash_profile, 若之前没有该文件,会自动创建.添加内容 export PATH=${PAT ...

  8. --NSArray与NSMutableArray用copy修饰还是strong(转)

    一.NSMutableArray 被copy.strong修饰后的变化: 把NSMutableArray用copy修饰有时就会crash,因为对这个数组进行了增删改操作,而copy后的数组变成了不可变 ...

  9. Aspose Cells dll 实现数据简单下载

    Workbook workbook = new Workbook(); //工作簿                     Worksheet sheet = workbook.Worksheets[ ...

  10. 【洛谷2257/BZOJ2820】YY的GCD(数论/莫比乌斯函数)

    题目: 洛谷2257 预备知识:莫比乌斯定理(懵逼乌斯定理) \(\mu*1=\epsilon\)(证bu明hui略zheng) 其中(我校学长把\(\epsilon(x)\)叫单位函数但是为什么我没 ...