Linux从零学习记录(三)

 

目录

第五章:Linux的文件权限与目录配置

5.1 用户与用户组

5.2 Linux文件权限概念

1.Linux文件属性

2.如何修改文件属性与权限                 

3.目录与文件的权限意义     

  4.Linux文件种类与扩展名

5.3目录配置

1.Linux目录配置的依据——FHS

2.目录树

 


第五章:Linux的文件权限与目录配置

5.1 用户与用户组

1. 文件拥有者:影响系统下文件权限的分配,机制安全。

2. 用户组概念:

        用户组最有用的功能之一,就是当你在团队进行协同工作的时候。

        用户的意义:每个用户有独立的权限,可以互相访问,但对不同用户有特定权限;

        用户组的概念:因为共享一个组,所以组内用户可以在该环境下行使相同的权限。

 3. 其他人的概念:

        在Linux中,任何一个文件都有用户(user)、所属群组(group)及其他人(others)三种身份的个别权限,如图所示:

其中超级管理员(root),可以行使所有组的权限。

Linux用户身份与用户组记录的文件:

  • 在Linux系统中,默认情况下,所有的系统上的账号与一般身份用户,还有那个root的相关信息,都记录在/etc/passwd 这个文件内;

  • 至于个人的密码则是记录在 /etc/shadow 这个文件内;

  •  此外,Linux所有的组名都记录在/etc/group中。

Tips:Linux的用户基本操作

$ useradd [username] #创建用户

$ passwd [username]  #创建用户密码

$ passwd -d [username]  #清除用户密码

$ su [username] #切换用户

$ exit  #如果你切换为一个用户,此命令可以一层一层退出用户的登录状态 例 root -> Tom -> Mark 这时用exit会返回Tom的登陆状态

$ userdel -r [username] #删除用户(递归进行)

5.2 Linux文件权限概念

1.Linux文件属性

在当前根目录下输入

$ ls -al

可以看到目录下文件的大致情况

从左至右的文件属性分别是:【权限】【链接】【拥有者】【用户组】【文件容量】【修改日期】【文件名】

实例中,文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。

每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。 

363003_1227493859FdXT              

从左至右用 0-9 这些数字来表示。

第 0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。

第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;

第 2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限。

eg:若有一个文件的类型与权限数据为【-rwxr-xr--】,请说明其意义是什么?

将整个类型与权限数据分开查看,并将十个字符整理成为如下所示:

【-】【rwx】【r-x】【r--】

   1      234       567     890

其中:

1为:代表这个文件名为目录或文件,本例中为文件(-);

234为:拥有者的权限,本例中为可读、可写、可执行(rwx);

567为:同用户组的用户权限,本例中为可读可执行;

890为:其他用户权限,本例中为可读(r),就是只读。

2.如何修改文件属性与权限                 

常用的几个命令是:

  • chgrp:修改文件所属用户组
  • chown:修改文件拥有者
  • chmod:修改文件的权限,SUID,SGID,SBIT等的特性

chgrp-修改用户组

在系统中测试,使用如下命令更改了rightest.txt文件的用户组权限,之后查看发现所属用户组的root更改为了neos。

chown-修改文件拥有者

还是之前的例子,这次使用chown作为命令输入,可以发现前面的拥有者也从root变为了neos。

chmod-修改文件权限           

命令行结构为:

$ chmod [-R] xyz 文件或目录

1.数字类型修改文件权限:

 Linux 系统中,文件的基本权限由 9 个字符组成,以 rwxrw-r-x 为例,我们可以使用数字来代表各个权限,各个权限与数字的对应关系如下:

r --> 4
w --> 2
x --> 1

由于这 9 个字符分属 3 类用户,因此每种用户身份包含 3 个权限(r、w、x),通过将 3 个权限对应的数字累加,最终得到的值即可作为每种用户所具有的权限。

拿 rwxrw-r-x 来说,所有者、所属组和其他人分别对应的权限值为:

所有者 = rwx = 4+2+1 = 7
所属组 = rw- = 4+2 = 6
其他人 = r-x = 4+1 = 5

所以,此权限对应的权限值就是 765。

2.符号类型修改文件权限

既然文件的基本权限就是 3 种用户身份(所有者、所属组和其他人)搭配 3 种权限(rwx),chmod 命令中用 u、g、o 分别代表 3 种身份,还用 a 表示全部的身份(all 的缩写)。另外,chmod 命令仍使用 r、w、x 分别表示读、写、执行权限。
使用字母修改文件权限的 chmod 命令,其基本格式如下图所示。

chmod 命令基本格式

其中

who用户类型说明
uuser文件所有者
ggroup文件所有者所在组
oothers所有其他用户
aall所用用户, 相当于 ugo

由此更改文件rightest.txt的权限

           

还可以为用户添加和去掉权限

Operator说明
+为指定的用户类型增加权限
-去除指定用户类型的权限
=设置指定用户权限的设置,即将用户类型的所有权限重新设置

例如

命令说明
chmod a+r file给file的所有用户增加读权限
chmod a-x file删除file的所有用户的执行权限
chmod a+rw file给file的所有用户增加读写权限
chmod +rwx file给file的所有用户增加读写执行权限
chmod u=rw,go= file对file的所有者设置读写权限,清空该用户组和其他用户对file的所有权限(空格代表无权限)
chmod -R u+r,go-r docs对目录docs和其子目录层次结构中的所有文件给用户增加读权限,而对用户组和其他用户删除读权限
chmod 664 file对file的所有者和用户组设置读写权限, 为其其他用户设置读权限
chmod 0755 file相当于u=rwx (4+2+1),go=rx (4+1 & 4+1)。0 没有特殊模式。
chmod 4755 file4设置了设置用户ID位,剩下的相当于 u=rwx (4+2+1),go=rx (4+1 & 4+1)。
find path/ -type d -exec chmod a-x {} \;删除可执行权限对path/以及其所有的目录(不包括文件)的所有用户,使用'-type f'匹配文件
find path/ -type d -exec chmod a+x {} \;允许所有用户浏览或通过目录path/

3.目录与文件的权限意义     

权限对文件的重要性   

文件是实际含有数据的地方,包括一般文本文件、数据库文件、二进制可执行文件(binary program)等。因此权限对于文件来说,它的意义是这样的:

  • r(read):可读取此文件的实际内容,如读取文本文件的文字内容等;
  • w(write):可以编辑、新增或是修改该文件的内容(但不含删除该文件);
  • x(execute):该文件具有可以被系统执行的权限。

权限对目录的重要性

目录主要的内容在于记录文件名列表,文件名与目录有强烈的关联。

  • r(read contents in directory):表示具有读取目录结构的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据,所以你就可以利用ls命令将目录的内容列表显示出来。
  • w(modify contents of directory):表示你具有改动该目录结构列表的权限,也就是:1) 建立新的文件与目录;2)删除已经存在的文件与目录(不论该文件的权限是什么);3)将已存在的文件或目录进行更名;4)移动该目录内的文件、目录位置。
  • x(access directory):表示用户能否进入该目录成为工作目录的用途(如 cd)。

例子:

  • 先用root的身份建立所需要的文件与目录环境

      在tmp中建立一个名为testing的目录,该目录的权限为744且目录拥有者为root。另外,在testing目录下再建立一个空文件,文件名亦为testing。

  • 测试一般用户的读写权限

       使用普通账户neos来进行读取目录和进入目录,可以查询文件名但权限不足,前置属性变为问号。

  • 修改用户权限后查看变化

先用root将该目录的权限交给neos,然后用neos尝试读写删除操作

        

 

  4.Linux文件种类与扩展名

一、文件种类:

1.普通文件(regular file)第一个字符为[ - ]

包括:①纯文本档(ASCII):这是Linux系统中最多的一种文件类型,称为纯文本档。是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。

②二进制文件(binary): 你的Linux中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的。

③数据格式文件(data):有些程序在运作的过程当中会读取某些特定格式的档案,那些特定格式的档案可以被称为数据文件 (data file)。一般用cat看到的都是乱码。

2.目录(directory): 第一个字符为[ d ] 

3.连接文件(link)第一个字符为[ l ]

4.设备和设备文件

  快设备文件,即一些存储文件,如硬盘、软盘等,第一个字符为[ b ]

  字符设备文件,即一些串行端口的接口文件,如键盘、鼠标等,第一个字符为[ c ]

5.套接字(sockets)第一个字符为[ s ]

   还被称为数据接口文件,这种类型的文件通常被用在网络上的数据连接。我们可以启动一个程序来监听客户端的请求,而客户端就可以通过数据接口文件来进行数据通信。

6.管道(FIFO,pipe)第一个字符为[ p ]

  FIFO也是一种特殊的文件类型,他主要的目的解决多个程序同时访问一个文件所造成的错误问题,first-in-first-out。

注意:设备文件最好不要随便修改,链接文件说白了就是win下的快捷方式。

 

二、linux的扩展名

基本上,Linux的文件是没有所谓的『扩展名』的,我们刚刚就谈过,一个Linux文件能不能被执行,与x有关,与文件名根本一点关系也没有。这个观念跟Windows 的情况不相同!在Windows 底下,能被执行的档案扩展名通常是 .com .exe .bat 等,而在Linux底下,只要你的权限当中具有 x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行!

但是能执行与能执行成功是不同的。虽然扩展名不起作用但是我们还是希望可以由扩展名了解此文件是什么东西。所以。。。

.sh : 脚本或者批处理文件(scripts)

.Z  .tar  .tar.gz  .zip  .tgz : 经过打包的压缩文件。

.html  .php :网页相关文件。

三、linux的文件名限制

 

在 Linux底下,使用默认的 Ext2/Ext3 文件系统时,针对文件名长度限制为:

  • 单一文件或者目录的最大容量文件名为 255 个字符;
  • 包括完整路径名称及目彔 (/)的完整文件名为 4096 个字符。

此外尽量避免用特殊字符,因为他们在命令行模式下有特殊的含义。

5.3目录配置

1.Linux目录配置的依据——FHS

FHS(Filessystem Hierarchy Standard) 的重点在于规范每个特定的目录下应该要放置什么样子的数据。

  FHS依据文件系统使用的频繁与否是否允许用户随意改动,而将目录定义成为四种交互作用的形态。

 可分享的(shareable)不可分享的(unshareable)
不变的(static)/usr(软件放置处)/etc(配置文件)
/opt(第三方软件)/boot(开机与内核文件)
可变动的(variable)/var/mail(用户邮件信箱)/var/run (程序相关)
/var/spool/news(新闻组)/var/lock(程序相关)

  a.可分享的: 可以分享给其他系统挂载使用的目录,所以包括执行文件与用户的邮件等数据,是能够分享给网络上其他主机挂载用的目录。

  b.不可分享的: 自己机器上面运行的设备文件或者是与程序有关的socket文件等,由于仅与自身机器有关,所以当然就不合适分享给其他主机了
  c.不变的:  有些数据是不会经常变动的,跟随着distribution而不变动。例如函数库、文件说明文件、系统管理员所管理的主机服务配置文件等。

  d.可变动的: 经常改变的数据,例如登录文件,新闻组等

 

  FHS针对目录树架构定义出三层目录该放什么数据:

    /(root, 根目录): 与开机系统有关;

    /usr(UNIX software resource): 与软件安装/执行有关

    /var (variable): 与系统运作过程有关

1、 根目录(/)的意义与内容

根目录与开机、还原、系统修复等操作有关。

FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内, 保持根目录越小越好,如此不但性能较好, 根目录所在的文件系统也较不容易发生问题。

FHS定义出根目录(/)下面应该要有下面这些子目录的存在:

  目录     应放置文件内容
/bin系统有很多放置执行文件的目录,但/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

系统主要的配置文件几乎都放置在这个目录内, 例如人员的账号密码文件、各种服务的起始文件等。一般来说,这个目录下的各文件属性是可以让一般用户查阅的,但是只有root有权利修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有etc/inittab, /etc/init.d, /etc/modprobe.conf, /etc/X11, /etc/fstab, /etc/sysconfig等,另外,其下重要的目录有:

  a. /etc/init.d/: 所有服务的默认启动脚本都是放在这里的,例如要启动或者关闭 iptables的话: “/etc/init.d/iptables start” 、 "/etc/init.d/iptables stop"

  b. /etc/xinetd.d/: 这就是所谓的super daemon 管理的各项服务的配置文件目录

  c. /etc/X11/: 与X Window有关的各种配置文件都在这里, 尤其是xorg.conf 这个XServer的配置文件

/home

这是系统默认的用户主文件夹(home directory).在你创建一个一般用户账号时,默认的用户主文件夹都会规范到这里来。比较重要的是,主文件夹有两种代号:

  ~: 代表目前这个用户的主文件夹

  ~dmtsai: 则代表dmtsai的主文件夹

/lib系统的函数库非常多, 而/lib放置的则是在开机时会用到的函数库,以及在/bin或/sbin下面的命令会调用的函数库而已。什么是函数库? 你可以将它想成是“外挂”,某些命令必须要有这些“外挂”才能够顺利完成程序的执行之意。尤其重要的是/lib/modules/这个目录,因为该目录会放置内核相关的模块(驱动程序)
/media/media放置的就是可删除的设备。包括软盘、光盘、DVD等设备都暂时挂载于此。常见的文件名有/media/floppy, /media/cdrom等
/mnt如果你想要暂时挂载某些额外的设备,一般建议你可以放置到这个目录中。在比较早的时候,这个目录的用途与/media相同。只是有了/media之后,这个目录就用来暂时挂在用了
/opt/opt,第三方软件放置的目录。
/root系统管理员(root)的主文件夹。之所以放在这里,是因为如果进入单用户维护模式而仅挂载根目录时,该目录就能够拥有root的主文件夹,所以我们会希望root的主文件夹与根目录放置在同一个分区中
/sbinLinux有非常多的命令是用来设置系统环境的,这些命令只有root才能够利用来“设置”系统,其他用户最多只能用来“查询”而已。放在/sbin下面的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的命令。至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(systen binary), 则放置到/usr/local/sbin/当中了。常见的命令包括fdisk, fsck, ifconfig, init,mkfs等
/srvsrv 可以视为“service”的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。常见的服务例如www,FTP等,举例来说,www服务需要的网页数据就可以放置在/srv/www/里面
/tmp这是让一般用户或者正在执行的程序暂时放置文件的地方。这个目录是任何人都能够访问,所以你需要定期清理一下。当然,重要数据不可放置在此目录。因为FHS甚至建议在开机时,应该要将/tmp下的数据都删除

    

事实上FHS针对根目录所定义的标准仅有上面列举的数据。下面是几个在linux当中也是非常重要的目录:

      目录应放置文件内容
/lost+found这个目录时使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些丢失的片段放置到这个目录下。这个目录通常会在分区的最顶层存在,例如你加装一块硬盘与/disk中,那在这个系统下就会自动产生一个这样的目录“/disk/lost+found”
/proc这个目录本身是一个虚拟文件系统(virtual filesystem)。它放置的数据都是内存当中,例如系统内核,进程(process),外部设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不占任何硬盘空间!比较重要的文件例如/proc/cpuinfo, /proc/dma, /proc/interrupts,/proc/ioports, /proc/net/*等
/sys这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录与内核相关的信息。包括目前已加载的内核模块与内核检测到的硬件设备信息等。这个目录同样不占硬盘容量。

  除了这些目录的内容之外,另外要注意的是,因为根目录与开机有关,开机过程中仅有根目录会被挂载,其他分区则是在开机完成之后才会持续进行挂载的行为。根目录下与开关过程有关的目录就不能够与根目录放到不同的分区去。如下面几个目录:

  /etc: 配置文件

  /bin: 重要的执行文件

  /dev: 所需要的设备文件

  /lib: 执行文件所需要的函数库与内核所需的模块

  /sbin: 重要的系统执行文件

 

 2、/usr 的意义与内容

依据FHS的基本意义,/usr里面放置的数据属于可分享的与不可变动的, usr是UNIX Software Resource的缩写,也就是“UNIX 操作系统软件资源”所放置的目录,而不是用户的数据。所有系统默认的软件(distribution 发布者提供的软件)都会放置到/usr下面。

  目录应放置文件内容
/usr/X11R6为X Window系统重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且该版的第6次释出之意
/usr/bin/绝大部分的用户可使用命令都放在这里。请注意到它与/bin的不同之处(是否与开机过程有关)
/usr/includeC/C++等程序语言的头文件(header)与包含文件(include)放置处,当我们以tarball方式(*.tar.gz的方式安装软件)安装某些数据时,会使用到里头的许多包含文件
/usr/lib包含各应用软件的函数库、目标文件(Object file), 以及不被一般用户惯用的执行文件或脚本(script)。某些软件会提供会提供一些特殊的命令来进行服务器的设置,这些命令也不会经常被系统管理员操作,那就会被摆放到这个目录下。要注意的是, 如果你使用的是X86—64的Linux系统,那可能会有/usr/lib64木兰产生
/usr/local系统管理员在本机自行安装自己下载的软件(非distribution默认提供者), 建议安装到此目录,这样会比较便于管理。/usr/local去,该目录下也是具有bin,etc,include,lib的子目录
/usr/sbin非系统正常运行所需要的系统命令。最常见的就是某些网络服务器软件的服务命令(daemon)
/usr/share

放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,因为几乎都是文本文件再次目录下常见的还有这些子目录:

  a. /usr/share/man: 再线帮助文件

  b. /usr/share/doc: 软件杂项的文件说明

  c. /usr/share/zoneinfo: 与时区有关的时区文件

/usr/src一般源码建议放置到这里,至于内核源码则建议放置到/usr/src/linux/目录下

 

3、/var的意义与内容

如果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。因为/var目录主要针对常态性变动的文件, 包括缓存(cache)、登录文件(log file)以及某些软件运行所产生的文件,包括程序文件(lock file, run file), 或者例如MySQL数据库文件等。

      目录应放置文件内容
/var/cache应用程序本身运行过程中会产生的一些暂存文件
/var/lib程序本身执行的过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。举例来说,MySQL的数据库放置到/var/lib/mysql/, 而rpm的数据库则放到/var/lib/rpm目录下
/var/lock某些设备或者是文件资源一次只能被一个应用程序所用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,因此就得要将该设备上锁(lock),以确保该设备只会给单一软件所使用
/var/log这是登录文件放置的目录。里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登录者的信息)等
/var/mail放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中。通常这两个目录是互为连接文件。
/var/run某些程序或者服务启动后,会将他们的PID放置在这个目录下。
/var/spool这个目录通常放置一些对列数据,所谓的“队列”就是排队等待其他程序使用的数据,这些数据被使用后通常都会被删除。举例来说,系统收到新新件会放置到/var/spool/mail中,但用户收下该信件后该信件原则上会被删除。信件如果暂时寄不出去会被放到/var/spool/mqueue中,等到被送出去后就被删除。


2.目录树

   在Linux下面,所有的文件与目录都是由根目录开始的。那是所有目录与文件的源头。然后再一个一个分支下来,有点像树枝状。因此我们也称这种目录配置方式为“目录树”,它主要的特征有:

    a. 目录树的起始点为根目录(/,root);

    b. 没一个目录不只能使用本地端的文件系统,也可以使用网络上的文件系统。举例来说,可以利用Network File System(NFS)服务器挂载某特定目录等;

    c. 每一个文件在此目录树中的文件名(包含完整路径)都是独一无二。

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值