linux-basic(6)linux的文件权限与目录配置

【6.1】用户与用户组
1)linux用户身份与用户组记录的文件

/etc/passwd 默认情况下所有系统上的账号都记录在该文件;
/etc/shadow 用户密码记录在该文件下;
/etc/group linux的所有组名记录在该文件下;
注意:这3个文件是 linux系统里面账号,密码,用户组信息的集中地;不要随便删除这3个文件;




【6.2】linux文件权限概念
【6.2.1】linux文件属性
【荔枝】 ls -al

ls 显示文件的文件名与相关属性;-al则表示列出所有的文件详细的权限与属性,包括隐藏文件,就是文件名第一个字符为 . 的文件;


【荔枝】 drwxrwxr-x.  2 pacoson pacoson    1024 3月   1 07:23 .abrt 
【第一列】

第一个字符代表这个文件是『目录、文件或链接文件等等』:
当为[ d ]则是目录,例如上表档名为『.gconf』的那一行;
当为[ - ]则是文件,例如上表档名为『install.log』那一行;
若是[ l ]则表示为连结档(link file);
若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。


其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

【第二列】表示有多少文件名连结到此节点(i-node);
【第三列】表示这个文件(或目录)的『拥有者账号』,即所有者账号;
【第四列】表示这个文件的所属用户组;
【第五列】表示文件容量大小,单位为B;
【第六列】表示文件的创建日期或者最近修改日期;


【荔枝】ls -l
1)ls -l --full-time:显示出完整的时间格式;


2)使用 LANG=en_US 来修改语言;


3)想要让系统默认的语言变成英文的话,你可以修改系统配置文件 /etc/sysconfig/i18n ;



【第七列】为该文件的文件名;


【补充】
1)man ls 或 info ls 可以查看ls命令的基础用法;




【补充】ls命令(列出所有子目录与文件)  https://blog.csdn.net/xingpidong/article/details/53505468


功能:ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。
语法:ls [选项] [目录或是文件] 
对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出 其文件名以及所要求的其他信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。
参数:
  • - a 显示指定目录下所有子目录与文件,包括隐藏文件。 
  • - A 显示指定目录下所有子目录与文件,包括隐藏文件。但不列出“.”和 “..”。
  • - b 对文件名中的不可显示字符用八进制逃逸字符显示。
  • - c 按文件的修改时间排序。 
  • - C 分成多列显示各项。
  • - d 如果参数是目录,只显示其名称而不显示其下的各文件。往往与l选项一起使 用,以得到目录的详细信息。
  • - f 不排序。该选项将使lts选项失效,并使aU选项有效。
  • - F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记 “@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。 
  • - i 在输出的第一列显示文件的i节点号。 
  • - l 以长格式来显示文件的详细信息。这个选项最常用。
  • 每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小 建立或最近修改的时间 名字
  • 对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。 
  • 对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。
  • 目录中的总块数显示在长格式列表的开头,其中包含间接块。 
  • - L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。
  • - m 输出按字符流格式,文件跨页显示,以逗号分开。 
  • - n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和 GID号来表示,而不是实际的名称。
  • - o 与l选项相同,只是不显示拥有者信息。
  • - p 在目录后面加一个“/”。
  • - q 将文件名中的不可显示字符用“?”代替。 
  • - r 按字母逆序或最早优先的顺序显示输出结果。 
  • - R 递归式地显示指定目录的各个子目录中的文件。 
  • - s 给出每个目录项所用的块数,包括间接块。 
  • - t 显示时按修改时间(最近优先)而不是按名字排序。若文件修改时间相同,则 按字典顺序。修改时间取决于是否使用了c或u选顶。缺省的时间标记是最后一次修 改时间。
  • - u 显示时按文件上次存取的时间(最近优先)而不是按名字排序。即将-t的时间 标记修改为最后一次访问的时间。
  • - x 按行显示出各排序项的信息。
  • -----------------------------------------------------------------------------------------------------
  • 用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:
  • - 普通文件
  • d 目录 
  • l 符号链接
  • b 块设备文件
  • c 字符设备文件
  • 后面的9个字符表示文件的访问权限,分为3组,每组3位。
  • 第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字 符分别表示对文件的读、写和执行权限。 
  • 各权限如下所示:
  • r 读 
  • w 写 
  • x 执行。对于目录,表示进入权限。
  • s 当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。
  • t 设置标志位(留在内存,不被换出)。如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。 
  • - 没有设置权限。
【6.2.2】如何改变文件属性与权限
1)几个常用于用户组,所有者,各种身份的权限的修改的命令:

  • chgrp:改变文件所属用户组;被改变的组名必须在 /etc/group 文件中有记录才行;
  • chown:改变文件所有者;
  • chmod:改变文件的权限;
【荔枝】chgrp [-R] dir/file , 其中-R递归持续更改,连同其子目录下的所有文件和目录;



分析)可以看到 chgrp 没有-R参数的话,只改变目录的组所有者;


【荔枝】chgrp -R 目录 可以改变目录的子目录或文件的组所有者;


【荔枝】

chown [-R] 账号名称 文件或目录
chown [-R] 账号:组名 文件或目录
-R表示递归更改,即连同子目录下的所有文件都更改;

【补充】事实上,chown与可以使用 chown user.group file; chown 也可以单纯的修改所属用户组, 如 chown .sshd install.log 就是修改用户组,即那个小数点的用途;

2)什么时候使用 chown 或 chgrp 呢?
由于复制行为cp 会复制执行者的属性与权限,所以需要修改文件的所有者与用户组;

3)改变权限chmod
3.1)数字类型改变文件权限

linux文件的基本权限有9个,分别是 owner, group, others 3个身份都有 read, write, execute 权限;数字表示 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

【荔枝】chmod [-R] xyz 文件或目录
选项与参数:

  • xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
  • -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更。


3.2)符号类型改变文件权限
分别用 u, g, o 表示 user, group, others 3种身份;此外 a代表全部身份;权限矩阵如下:


【荔枝】通过符号设置权限



【补充】增加或减少权限:  也可以通过 + - 来设置权限, 如: chmod a+w 文件或目录; chmod a-x 文件或目录;


【6.2.3】目录与文件的权限意义
1)权限对文件的重要性

文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等等。
在Linux底下,我们的文件是否能被执行,则是藉由是否具有『x』这个权限来决定的!跟档名是没有绝对的关系的!

2)权限对目录的重要性
文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦! 

2.1)所以如果是针对目录时,那个 r, w, x 对目录是什么意义呢?
  • r: 读取目录下文件列表的权限;即利用ls命令 显示目录结构列表;
  • w: 具有更改该目录结构列表的权限;如:
  • 建立新的文件与目录;
  • 删除已经存在的文件与目录(不论该文件的权限为何!)
  • 将已存在的文件或目录进行更名;
  • 搬移该目录内的文件、目录位置。
  • x: 目录的x代表的是用户能否进入该目录成为工作目录的用途! 工作目录表示你目前所在的目录;变换目录的命令是cd;
注意1:如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。
注意2:要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给! 为什么w不能随便给,我们来看下一个例子:

【荔枝】目录的w权限不能随便给
1)一般用户的读取权限 


上面的练习我们知道了只有r确实可以让用户读取目录的文件名列表,不过详细的信息却还是读不到的, 同时也不能将该目录变成工作目录(用 cd 进入该目录之意)。


2)目录所有者的读取权限


透过上面这个简单的步骤,你就可以清楚的知道, x 在目录当中是与『能否进入该目录』有关, 至于那个 w 则具有相当重要的权限,因为他可以让使用者删除、更新、新建文件或目录, 是个很重要的参数啊!这样可以理解了吗?! ^_^

【6.2.4】linux文件种类与扩展名
1)文件种类

  • 普通文件, 纯文本文件,二进制文件,数据格式文件;
  • 目录;
  • 连接文件;
  • 设备与设备文件:块设备文件,字符设备文件,套接字,管道;
  • linux文件扩展名:
  • linux
2)扩展名: 底下有数种常用的扩展名:
  • *.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh ;
  • *Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰!
  • *.html, *.php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的文件可使用网页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢!
3)linux文件长度限制: 在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件的档名长度限制为:
  • 单一文件或目录的最大容许文件名为 255 个字符;
  • 包含完整路径名称及目录 (/) 之完整档名为 4096 个字符。
4)linux文件名限制
由于Linux在文字接口下的一些指令操作关系,一般来说,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些:
* ? > < ; & ! [ ] | \ ' " ` ( ) { }
因为这些符号在文字接口下,是有特殊意义的!另外,文件名的开头为小数点『.』时, 代表这个文件为『隐藏档』喔!同时,由于指令下达当中,常常会使用到 -option 之类的选项, 所以你最好也避免将文件档名的开头以 - 或 + 来命名啊!

【6.3】linux目录配置
1)Filesystem Hierarchy Standard (FHS)标准的出炉了:
主要目的是希望让使用者可以了解到已安装软件通常放置于那个目录下, 所以他们希望独立的软件开发商、操作系统制作者、以及想要维护系统的用户,都能够遵循FHS的标准。

2)事实上,FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否允许使用者随意更动, 而将目录定义成为四种交互作用的形态,用表格来说有点像底下这样:


3)我们要了解的是,什么是那四个类型?
  • 可分享的:可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据, 是能够分享给网络上其他主机挂载用的目录;
  • 不可分享的:自己机器上面运作的装置文件或者是与程序有关的socket文件等, 由于仅与自身机器有关,所以当然就不适合分享给其他主机了。
  • 不变的:有些数据是不会经常变动的,跟随着distribution而不变动。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;
  • 可变动的:经常改变的数据,例如登录文件、一般用户可自行收受的新闻组等。
4)事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义: 
  • / (root, 根目录):与开机系统有关;
  • /usr (unix software resource):与软件安装/执行有关;
  • /var (variable):与系统运作过程有关。
5)所以在FHS的要求方面,他希望根目录不要放在非常大的分割槽内, 因为越大的分割槽妳会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。
因此FHS标准建议:根目录(/)所在分割槽应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。

6)FHS定义出根目录(/)底下应该要有底下这些次目录的存在才好:
/bin 因为/bin放置的是在单人维护模式下还能够被操作的指令。 在/bin底下的指令可以被root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。


/boot  linux内核文件等开机所需配置文件等; linux kernel 常用文件名为 vmlinuz, 如果使用 grub 引导装载程序,还会存在 /boot/grub 这个目录;


/dev 在Linux系统上,任何装置与接口设备都是以文件的型态存在于这个目录当中的。
 你只要透过存取这个目录底下的某个文件,就等于存取某个装置啰~ 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等


/etc 配置文件;


/home 系统默认的用户主文件夹;


/lib 函数库;尤其重要的是/lib/modules/这个目录, 因为该目录会放置核心相关的模块(驱动程序)喔!


/media 这个/media底下放置的就是可移除的装置啦! 包括软盘、光盘、DVD等等装置都暂时挂载于此。常见的档名有:/media/floppy, /media/cdrom等等。
/mnt 
/opt 这个是给第三方软件放置的目录;
/root 系统管理员root的主文件夹;

/sbin  放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。 


/srv service的缩写;是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP等等。

/tmp 临时文件暂时放置的目录;
/lost+found 这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片段放置到这个目录下。
/proc  这个目录本身是一个『虚拟文件系统(virtual filesystem)』喔!他放置的数据都是在内存当中, 例如系统核心、行程信息(process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的文件例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。


/sys 这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录与核心相关的信息。 包括目前已加载的核心模块与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量喔!



【补充】这五个目录千万不可与根目录分开在不同的分区:


  • /usr 是 UNIX Software Resource 的缩写;即unix 操作系统软件资源所放置的目录,而不是用户数据;因为是所有系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,因此这个目录有点类似Windows 系统的『C:\Windows\ + C:\Program files\』这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。
  • /usr/bin/  绝大部分的用户可使用指令都放在这里!
  • /usr/include/  c/c++等程序语言的档头(header)与包含档(include)放置处,当我们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档喔!
  • /usr/lib/  包含各应用软件的函式库、目标文件(object file),以及不被一般使用者惯用的执行档或脚本(script)。  
  • /usr/local/  系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录, 这样会比较便于管理。
  • /usr/sbin/  非系统正常运作所需要的系统指令。最常见的就是某些网络服务器软件的服务指令(daemon)啰!
  • /usr/share/  放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据, 因为几乎都是文本文件嘛!在此目录下常见的还有这些次目录:
  • /usr/share/man:联机帮助文件
  • /usr/share/doc:软件杂项的文件说明
  • /usr/share/zoneinfo:与时区有关的时区文件;
  • /usr/src/  一般源码码建议放置到这里,src有source的意思。至于内核源码码则建议放置到/usr/src/linux/目录下。
  • /var   因为/var目录主要针对常态性变动的文件,包括缓存(cache)、登录档(log file)以及某些软件运作所产生的文件, 包括程序文件(lock file, run file),或者例如MySQL数据库的文件等等。常见的次目录有:
    • /var/cache/ 程序运行时产生的临时文件放置的目录;
    • /var/lib/ 程序执行需要使用的数据文件放置的目录;
    • /var/lock/  一些装置或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该装置时, 就可能产生一些错误的状况,因此就得要将该装置上锁(lock),以确保该装置只会给单一软件所使用。
    • /var/log/  登录文件放置的目录; 比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。
    • /var/mail/  放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中! 通常这两个目录是互为链接文件啦!
    • /var/run/  某些程序或者是服务启动后,会将他们的PID放置在这个目录下喔!
    • /var/spool/  这个目录通常放置一些队列数据,所谓的『队列』就是排队等待其他程序使用的数据啦!

【6.3.2】目录树
1)特性如下:

目录树的启始点为根目录 (/, root);
每一个目录不止能使用本地端的 partition 的文件系统,也可以使用网络上的 filesystem 。举例来说, 可以利用 Network File System (NFS) 服务器挂载某特定目录等。
每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的。

2)selinux目录比较特殊: 这个目录的内容数据也是在内存中的信息, 同样的不会占用任何的硬盘容量。这个/selinux是Secure Enhance Linux(SELinux)的执行目录, 而SELinux是Linux核心的重要外挂功能之一,他可以用来作为具体权限的控管,主要针对程序(尤其是网络程序)的访问权限来限制。


【补充】整体目录树


【6.3.4】centos的查看
1) 当前distribution使用的是哪个linux标准;如下:

uname -r 命令进行查看;
lsb == linux standard base , Linux标准库 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值