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命令将一个文件的内容直接读出
          • 如:cat aaa.txt
      • 二进制文件(binary)
        • 系统仅可以认识和执行二进制文件(binary file)
        • Linux下的可执行文件(除了scripts、文字批处理文件)就是这种格式的
      • 数据格式文件(data)
        • 某些程序运行中读取的数据文件
        • 可以用last命令将一个文件的内容读出
          • 如:last /var/log/wtmp
    • 目录文件(directory)[d]
    • 连接文件(link)[l]
      • 类似windows下的快捷方式
    • 设备与设备文件(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:系统的主要配置文件几乎都在该目录下
          • FHS建议,不要放置可执行文件在此目录中
        • /home:系统默认的用户主文件夹(home directory)
          • 主文件夹有以下两种代号
          • 1、~:代表当前用户的主文件夹
          • 2、~zk:代表用户zk的主文件夹
        • /lib:放置的是开机时会用到的函数,以及在/bin或/sbin下面命令会调用的函数库
        • /media:放置的是可删除设备,包括软盘、光盘、DVD等设备都暂时挂载于此
        • /mnt:挂载某些额外设备
        • /opt:第三方软件放置的目录
        • /root:系统管理员的主文件夹
          • /root并不在/home/目录下,原因是在进入单用户维护模式而仅挂载根目录时就拥有root的主文件夹,操作方便
        • /sbin:开机过程所需要的,包括开机、修复、还原系统所需要的命令,这些命令只有root用户能够直接使用!!
        • /srv:可视为“service”的缩写,是一些网络服务启动后,所需要取用的数据目录
        • /tmp:一般用户或者是正在执行的程序暂时放置文件的地方
          • FHS建议开机时,应该将该目录下的数据都删除
        • 以下为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/:绝大部分用户可使用命令都在于此
          • 而/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)
      • 绝对路径:由根目录(/)开始写起的文件名或目录名称
      • 相对路径:相对于当前路径的写法
        • .:代表当前目录,也可以用 ./ 来表示
        • ..:代表上一层目录,也可以用 ../ 来表示
  • 版本查看
    • 查看Linux内核版本
      • uname -r命令
    • 查看其它版本信息
      • lsb release -a命令
\00