chap6Linux的文件权限与目录配置
- 用户身份
- 文件所有者
- 用户组
- 其他人
- 用户身份与用户组记录的相关文件
- 账号信息一般记录在/ect/passwd文件内
- 个人密码一般记录在/ect/shadow文件内
- 用户组组名一般记录在/ect/group文件内
- 文件权限
- 当屏幕出现“Permission Deny”时,肯定是权限设置错误
- 文件属性
- 可以利用ls命令查看目录下的文件及其属性
- 如:-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log
- 第一个列表共10个字符表示文件类型及其权限
- 第一个字符代表哦文件类型
- [d]代表目录文件
- [-]代表文件一般文件
- [l]代表连接文件(linkfile)
- [b]代表设备文件中的可存储接口设备,如硬盘
- [c]代表设备文件中的串行端口设备,如键盘、鼠标
- 剩下九个字符每三个一组,分别为文件所有者、用户组、其他人对该文件的权限
- [r]即read,表示可以读取文件的内容 或者 目录的文件列表
- [w]即write,表示可以编辑修改文件内容 或者 目录下的文件名甚至创建、删除文件
- [x]即execute,表示文件可被执行 或者 目录可被访问(作为工作目录)
- [-]即表示不具有对应的权限
- 第二个列表表示有多少文件名连接到此节点(i-node)
- 第三个列表表示所有者
- 第四个列表表示所属的用户组
- 第五个列表表示容量大小,默认单位为B(byte)
- 第六个列表表示创建时间 或者 最后修改时间
- 若为当年,则显示格式为 月/日/时间
- 若为往年,则显示格式为 月/日/年
- 若要完整显示,可以使用“ls -l --full-time”命令即可显示具体的年月日时间
- 第七个列表表示文件名
- 权限的重要性
- 文件属性与权限的修改
- 改变所属用户组:chgrp
- 全称“change group”
- 要被改变的组名必须在/ect/group文件内存在才行,否则会显示错误
- 基本语法:chgrp [-R] groupname dirname/filename
- -R:表示进行递归(recursive)的持续更改,即连同子目录下的所有文件、目录
- 如:chgrp users install.log表示将文件install.log所属的用户组修改为users
- 改变文件所有者:chown
- 全称“change owner”
- 不仅可以修改文件所有者,也可以修改所属用户组
- 用户名必须在/ect/passwd文件中存在的才行
- 基本语法:chown [-R] username:groupname dirname/filename
- -R:递归
- 如:chown root:root install.log表示将文件install.log所有者和用户组修改为root
- chown root install.log表示只修改所有者
- chown :root install.log表示只修改所属用户组
- 此处用户名和用户组名之间也可以用“.”,但是账号中可能会出现“.”,可能会造成系统误判,应尽量避免
- 文件复制:cp命令(copy)
- 基本语法:cp 源文件 目标文件
- 如:cp file1 file2表示将file1复制为file2
- cp命令会复制执行者的属性与权限
- 所以复制文件后要注意修改文件的属性与权限
- 改变权限:chmod
- 修改方式有两种——
- 1、数字法
- 基本语法:chmod [-R] xyz dirname/filename
- x、y、z分别代表所有者、用户组、其他人的权限代码
- 代码的确定:
- 权限分数:r为4,w为2,x为1
- 代码为权限分数之和
- 如7代表rwx,6代表rw-,3代表-wx,以此类推
- 如:chmod 777 .bashrc表示将文件.bashrc的权限修改为rwxrwxrwx
- 2、符号法
- 基本语法:chmod [u,g,o,a] [+,-,=] [r,w,x] dirname/filename
- u即user,g即group,o即others,a即all
- +即加入,-即除去,=即设置
- +-对于未指定的权限不作修改
- =对于未指定的权限设置为-
- r即read,w即write,x即execute,不给予的权限无需-
- 如:chmod u=rwx,go=rx .bashrc
- u,g,o的设置可以用逗号,隔开
- 采用相同设置时可以写在一块儿,如go=rx
- 文件在传送过程中,文件的属性、权限有可能会被改变,需要我们手动修改
- 目录与文件的权限意义
- 文件(权限体现在“文件内容”)
- 文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件(binary program)等
- r(read):可读取此文件的实际内容,如读取文本文件的文字内容
- w(write):可以编辑、新增或是修改该文件的内容(但不能删除文件)
- x(execute):该文件具有可以被系统执行的权限,但能否执行成功与文件内容有关
- windows下的执行权限是以扩展名如.exe, .bat, .com等来体现的
- linux下的执行权限是由是否具有“x”权限来体现的
- 目录(权利体现在“文件名”)
- 目录主要的内容是记录文件名列表,文件名与目录有强烈的关联
- r(read contents in directory)
- 表示具有读取目录结构列表的权限,即能用ls命令获取目录下的文件名数据
- w(modify contents of directory)
- 表示具有更改该目录结构列表的权限,包括
- 新建新的文件和目录
- 删除已经存在的文件与目录(与文件权限无关)
- 将已存在的文件或目录重命名
- 转移该目录内的文件、目录的位置
- x(access directory)
- 表示具有进入该目录,将其作为工作目录的权限
- 工作目录即为当前目录,可以用cd命令来跳转
- 注意:仅有r权限,没有x权限,只能查询到目录下的文件名,但不能进入该目录
- 要开放目录给人浏览时,至少应给予r和x权限,而w权限不应随便给出
- 修改系统默认语言
- 修改系统配置文件“/ect/sysconfig/i18n”
- 将LANG变量值改为en_US等即可
- 文件类型
- 普通文件(regular file)[-]
- 纯文本文件(ASCII)
- Linux系统中最多的一种文件类型
- 其内容为可以直接读取到的数据
- 可以用cat命令将一个文件的内容直接读出
- 二进制文件(binary)
- 系统仅可以认识和执行二进制文件(binary file)
- Linux下的可执行文件(除了scripts、文字批处理文件)就是这种格式的
- 数据格式文件(data)
- 某些程序运行中读取的数据文件
- 可以用last命令将一个文件的内容读出
- 目录文件(directory)[d]
- 连接文件(link)[l]
- 设备与设备文件(device)
- 与系统外设及存储等相关的一些文件,通常集中在/dev目录下,分为以下两种:
- 1、块(block)设备文件[b]
- 存储数据,以提供系统随机访问的接口设备
- 例如硬盘、软盘
- 2、字符(character)设备文件[c]
- 串行端口的接口设备
- 例如键盘、鼠标等
- 特征是“一次性读取”,不能够截断输出
- 套接字(sockets)[s]
- 被称为数据接口文件,通常被用在网络上的数据连接
- 我们可以启动一个程序来监听客户端的请求,客户端可以通过这个socket来进行数据的通信
- 管道(FIFO, pipe)[p]
- 主要用于解决多个程序同时访问一个文件所造成的错误问题
- FIFO全称first-in-first-out
- Linux文件名长度限制
- 文件名、目录名的最大限制为255(2^8-1)字符
- 完整路径的最大限制为4096(2^12)个字符
- Linux命名习惯与windows不同,我们需要一看就知道文件的作用是什么,所以我们的文件名通常很长,引用时巧妙借助[Tab]进行补全即可
- 命名限制
- 尽量避开特殊字符,如* ? > < ; & ! [ ] | \ ' " ` ( ) { }
- 另外,小数点“.”表示隐藏文件
- 而参数时常用到+-,命名时开头应尽量避开
- Linux目录配置
- 配置标准:Filesystem Hierarchy Standard(FHS)
- 根据文件目录是否可变动、是否可分享划分
- 仅对以下三个目录进行了定义
- /(root, 根目录):与开机系统有关
- /usr(UNIX software resource):与软件安装/执行有关
- /var(variable):与系统运作过程有关
- 根目录(/)
- 不仅所有目录都是由根目录衍生出来的,而且与开机、还原、系统修复等操作有关
- 系统出错时,根目录也必须要包含有能够修复文件系统的程序
- 所以FHS希望,根目录不要放在非常大的分区(因为分区越大放入的数据越多,发生错误的机会越大)
- FHS建议,根目录所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较好,根目录所在的文件系统也较不容易发生问题
- 根目录(/)下常见子目录如下:
- /bin:放置在单用户维护模式下还能被操作的命令
- /boot:主要放置开机会用到的文件
- /dev:任何设备与接口设备都是以文件的形式存在于这个目录中
- /etc:系统的主要配置文件几乎都在该目录下
- /home:系统默认的用户主文件夹(home directory)
- 主文件夹有以下两种代号
- 1、~:代表当前用户的主文件夹
- 2、~zk:代表用户zk的主文件夹
- /lib:放置的是开机时会用到的函数,以及在/bin或/sbin下面命令会调用的函数库
- /media:放置的是可删除设备,包括软盘、光盘、DVD等设备都暂时挂载于此
- /mnt:挂载某些额外设备
- /opt:第三方软件放置的目录
- /root:系统管理员的主文件夹
- /root并不在/home/目录下,原因是在进入单用户维护模式而仅挂载根目录时就拥有root的主文件夹,操作方便
- /sbin:开机过程所需要的,包括开机、修复、还原系统所需要的命令,这些命令只有root用户能够直接使用!!
- /srv:可视为“service”的缩写,是一些网络服务启动后,所需要取用的数据目录
- /tmp:一般用户或者是正在执行的程序暂时放置文件的地方
- 以下为FHS没有定义,但是也非常重要的目录:
- /lost+found:当文件系统发生错误时,将一些丢失的片段放置到该目录下
- /proc:该目录本身是一个虚拟的文件系统,放置的数据都在内存中而不占任何硬盘空间
- /sys:也是一个虚拟的文件系统,主要记录与内核相关的信息,包括目前已加载的内核模块与内核检测到的硬件设备信息等,并不占任何硬盘空间
- 开机过程中只用有目录会被挂载,其他分区都是在开机完成后才陆续进行挂载行为
- 以下五个目录必须必须必须放在与根目录同分区下
- /etc:配置文件
- /bin:重要执行文件
- /dev:所需要的设备文件
- /lib:执行文件所需的函数库与内核所需的模块
- /sbin:重要的系统执行文件
- /usr:可分享、不可变动
- usr是UNIX Software Resource的缩写,意为“UNIX操作系统软件资源”
- 所有系统默认的软件都会放置在该目录下
- 类似于windows的c:\windows\和c:\program files\这两个目录的综合
- 系统刚安装完毕时,这个目录会占用最多的硬盘容量
- 常见子目录如下:
- /usr/X11R6/:为X Window系统重要数据放置的目录,11表示X版本为第11版,6表示该版的第6次释出
- /usr/bin/:绝大部分用户可使用命令都在于此
- /usr/include/:C/C++等程序语言的头文件(header)与包含文件(include)放置于此
- /usr/lib/:包含各应用软件的函数库、目标文件(object file),以及一般用户惯用的执行文件或脚本(script)
- 如果使用的是X86_64的系统,那可能会有/usr/lib64/目录的产生
- /usr/local/:系统管理员在本机自行安装的软件,建议安装到此目录下,这样比较便于管理
- /usr/sbin/:非系统正常运行所需要的系统命令
- /usr/share/:放置共享文件的地方,几乎都是文本文件,此目录下常见有以下子目录:
- /usr/share/man:在线帮助文件
- /usr/share/doc:软件杂项的文件说明
- /usr/share/zoneinfo:与时区有关的时区文件
- /usr/src/:即source,一般源码建议放置在此
- /var
- 该目录在系统运行后才会渐渐占用硬盘容量空间
- 该目录主要针对常态性变动的文件,包括缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件,包括程序文件(lock file, run file)或者例如MySQL数据库文件等
- 常见子目录如下:
- /var/cache/:应用程序本身运行过程中产生的一些暂存文件
- /var/lib/:程序本身执行过程中,需要使用到的数据文件放置的目录
- /var/lock/:给某些只能被单一应用程序使用的设备或者文件资源上锁,确保该设备只会给单一软件所使用
- /var/log/:这是登录文件放置的目录
- /var/mail/:放置个人电子邮件信箱的目录
- 该目录与/var/spool/mail/目录互为连接文件
- /var/run/:某些程序或是服务启动后,会将他们的PID放置在该目录下
- /var/spool/:通常放置一些队列数据,“队列”就是排队等待其他程序使用的数据,这些数据在使用后通常会删除
- 目录树(directory tree)
- 特性
- 目录树的起始点为根目录(/, root)
- 每一个目录不只能使用本地端的文件系统,也可以使用网络上的文件系统
- 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二的
- 根目录下有一个/selinux的特殊目录
- 该目录内容也是内存中的数据,不占用硬盘空间
- 该目录是Secure Enhance Linux(SELinux)的执行目录
- 根据FHS定义,/var应独立出来,这样对于系统数据还有一些安全性保护,因为/var死掉时,根目录还活着,能够进入救援模式
- 绝对路径与相对路径
- 路径(path)分为绝对路径(absolute)与相对路径(relative)
- 绝对路径:由根目录(/)开始写起的文件名或目录名称
- 相对路径:相对于当前路径的写法
- .:代表当前目录,也可以用 ./ 来表示
- ..:代表上一层目录,也可以用 ../ 来表示
- 版本查看