Ubuntu 用户系统

  1. Ubuntu是一个多用户系统,我们可以给不同的使用者创建不同的用户账号,每个用户使用各自的账号登陆,使用用户账号的目的一是方便系统管理员管理,控制不同用户对系统的访问权限,另一方面是为用户提供安全性保护。 <br /> 我们前面在安装Ubuntu系统的时候被要求创建一个账户,当我们创建好账号以后,系统会在目录/home下以该用户名创建一个文件夹,所有与该用户有关的文件都会被存储在这个文件文件夹中。同样的,创建其它用户账号的时候也会在目录/home下生成一个文件夹来存储该用户的文件,图中就是我的电脑上“xinluyao”这个账户的文件夹。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617176051957-014d3f1c-a0d3-4045-a6c9-12bf1c79e16b.png#align=left&display=inline&height=65&margin=%5Bobject%20Object%5D&name=image.png&originHeight=65&originWidth=557&size=29118&status=done&style=none&width=557)<br />装系统的时候创建的用户其权限比后面创建的用户大一点,但是没有root用户权限大,Ubuntu下用户类型分为以下3类: <br />● 初次创建的用户,此用户可以完成比普通用户更多的功能。 <br />● root用户,系统管理员,拥有至高无上的权利。<br />● 普通用户,安装完操作系统以后被创建的用户。 <br />以上三种用户,每个用户都有一个ID号,称为UID,操作系统通过UID 来识别是哪个用户,用户相关信息可以在文件/etc/passwd中查看到,如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617176072302-456b3770-5bc2-485f-9ee2-14fa1863a153.png#align=left&display=inline&height=290&margin=%5Bobject%20Object%5D&name=image.png&originHeight=290&originWidth=557&size=155125&status=done&style=none&width=557)<br /> 从配置文件passwd中可以看到,每个用户名后面都有两个数字,比如用户“xinluyao”后面“1000:1000”,第一个数字是用户的ID,另一个是用户的GID,也就是用户组ID。Ubuntu里面每个用户都属于一个用户组里面,用户组就是一组有相同属性的用户集合。

权限管理

  1. 在使用Windows的时候我们很少接触到用户权限,最多就是打开某个软件出问题的时候会选择以“管理员身份”打开。Ubuntu下我们会常跟用户权限打交道,权限就是用户对于系统资源的使用限制情况,root用户拥有最大的权限,可以为所欲为,装系统的时候创建的用户拥有root用户的部分权限,其它普通用户的权限最低。对于我们做嵌入式开发的人一般不关注用户的权限问题,因为嵌入式基本是单用户,做嵌入式开发重点关注的是文件的权限问题。<br /> 对于一个文件通常有三种权限:读(r)、写(w)和执行(x),使用命令“ls -l”可以查看某个目录下所有文件的权限信息,如图所示: <br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617176161121-dbaa75cc-2308-4db9-92c2-ec9620c52ef6.png#align=left&display=inline&height=158&margin=%5Bobject%20Object%5D&name=image.png&originHeight=158&originWidth=557&size=76169&status=done&style=none&width=557)<br />在图中我们以文件test.c为例讲解,文件examples.desktop文件信息如下: <br />-rw-r--r-- 1 xinluyao xinluyao 8980 12 月 4 21:12 examples.desktop <br /> 其中“-rw-r--r--”表示文件权限与用户和用户组之间的关系,第一位表示文件类型,上一小节已经说了。剩下的9位以3位为一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其它用户权限。后面的“xinluyao xinluyao”分别代表文件拥有者(用户)和该用户所在的用户组,因此文件examples.desktop的权限情况如下: <br />①、文件examples.desktop的拥有者是用户xinluyao,其对文件examples.desktop的权限是“rw-”,也就是对该文件拥有读和写两种权限。<br />②、用户xinluyao所在的用户组也叫做xinluyao,其组内用户对于文件examples.desktop的权限是“rw-”,也是拥有读和写这两种权限。 <br />③、其它用户对于文件examples.desktop的权限是“r--”,也就是只读权限。 <br /> 对于文件,可读权限表示可以打开查看文件内容,可写权限表示可以对文件进行修改,可执行权限就是可以运行此文件(如果是软件的话)。对于文件夹,拥有可读权限才可以使用命令ls查看文件夹中的内容,拥有可执行权限才能进入到文件夹内部。 <br /> 如果某个用户对某个文件不具有相应的权限的话就不能进行相应的操作,比如根目录“/”下的文件只有root用户才有权限进行修改,如果以普通用户去修改的话就会提示没有权限。比如我们要在根目录“/” 创建一个文件mytest,使用命令“touch mytest”,因为权限不够,只有root用户才能在根目录“/”下创建文件。我们可以使用命令“sudo”命令暂时切换到root用户,这样就可以在根目录“/”下创建文件mytest了,如图所示:<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/12927549/1617176211301-4bac6ad7-1682-49be-aaed-53243cc39c12.png#align=left&display=inline&height=96&margin=%5Bobject%20Object%5D&name=image.png&originHeight=96&originWidth=557&size=39192&status=done&style=none&width=557)<br /> 在图中我们使用命令“sudo”以后就可以在根目录“/”创建文件mytest,在进行其它的操作的时候,遇到提示权限不够的时候都可以使用sudo命令暂时以root用户身份去执行。上面我们讲了,文件的权限有三种:读(r)、写(w)和执行(x),除了用r、w 和 x表示以外,我们也可以使用二进制数表示,三种权限就可以使用3位二进制数来表示,一种权限对应一个二进制位,如果该位1就表示具备此权限,如果该位为0就表示没不具备此权限,如下表所示:
字母 二进制 八进制
r 100 4
w 010 2
x 001 1
  1. 如果做过单片机开发的话,就会发现和单片机里面的寄存器位一样,将三种权限rw x进行不同的组合,即可得到不同的二进制数和八进制数,3位权限可以组出8种不同的权限组合,如下表所示:
权限 二进制数字 八进制数字
—- 000 0
—x 001 1
-w- 010 2
-wx 011 3
r— 100 4
r-x 101 5
rw- 110 6
rwx 111 7
  1. 上表中权限所对应的八进制数字就是每个权限对应的位相加,比如权限rwx就是4+2+1=7。前面的文件examples.desktop其权限为“rw-r--r--”,因此其十进制表示就是:644。<br />另外我们也开始使用augo表示文件的归属关系,用=、+和-表示文件权限的变化,如下表所示:
r 可读权限
w 可写权限
x 可执行权限
a 所有用户
u 归属用户
g 归属组
o 其他用户
= 具备权限
+ 添加某权限
- 去除某权限
  1. 对于文件examples.desktop,我们想要修改其归属用户(xinluyao)对其拥有可执行权限,那么就可以使用:u+x。如果希望设置归属用户及其所在的用户组都对其拥有可执行权限就可以使用:gu+x

权限管理命令

我们也可以使用Shell来操作文件的权限管理,主要用到“chmod”和“chown”这两个命令,我们一个一个来看。
(1)权限修改命令chmod
命令“chmod”用于修改文件或者文件夹的权限,权限可以使用前面讲的数字表示也可以使用字母表示,命令格式如下:
chmod [参数] [文件名/目录名]
主要参数如下:
-c 效果类似“-v”参数,但仅回显更改的部分。
-f 不显示错误信息。
-R 递归处理,指定目录下的所有文件及其子文件目录一起处理。
-v 显示指令的执行过程。
我们先来学习以下如何使用命令“chmod”修改一个文件的权限,在用户根目录下创建一个文件test,然后查看其默认权限,操作如图所示:
image.png
在图中我们创建了一个文件:mytest,这个文件的默认权限为“rw-r—r—”,我们将其权限改为“rwxrw-rw”,对应数字就是766,操作如下:
image.png
在上图中,我们修改文件test的权限为766,修改完成以后的test文件权限为“rwxrwrw-”,和我们设置的一样,说明权限修改成功。
上面我们是通过数字来修改权限的,我们接下来使用字母来修改权限,操作如图所示:
image.png
上面两个例子都是修改文件的权限,接下来我们修改文件夹的权限,新建一个test2文件夹,在文件夹test2里面创建a.c、b.c和c.c三个文件,如图所示:
image.png
在上图中test2文件夹下的文件a.c、b.c和d.c的权限均为“rw-r—r—”,我们将 test 文件夹下的所有文件权限都改为“rwxrwxrwx”,也就是数字777,操作如图所示:
image.png

(2)文件归属者修改命令 chown

命令chown用来修改某个文件或者目录的归属者用户或者用户组,命令格式如下:
chown [参数] [用户名.<组名>] [文件名/目录]
其中[用户名.<组名>]表示要将文件或者目录改为哪一个用户或者用户组,用户名和组名用“.”隔开,其中用户名和组名中的任何一个都可以省略,命令主要参数如下:
-c 效果同-v类似,但仅回报更改的部分。
-f 不显示错误信息。
-h 只对符号连接的文件做修改,不改动其它任何相关的文件。
-R 递归处理,将指定的目录下的所有文件和子目录一起处理。
-v 显示处理过程。
在用户根目录下创建一个test1文件,查看其文件夹所属用户和用户组,如图所示:
image.png
从图中可以看出,文件test1的归属用户为xinluyao,所属的用户组为xinluyao,将文件test1归属用户改为root用户,所属的用户组也改为 root,操作如图所示:
image.png
命令shown同样也可以递归处理来修改文件夹的归属用户和用户组,用法和命令chown一样,这里就不演示了。