本帖最后由 正点原子运营 于 2024-1-18 16:46 编辑
第二章 Ubuntu系统入门
1)实验平台:正点原子 DFZU2EG_4EV MPSoC开发板
2) 章节摘自【正点原子】DFZU2EG_4EV MPSoC开发板之嵌入式Linux 驱动开发指南 V1.0
3)购买链接:https://detail.tmall.com/item.htm?id=692450874670
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-MPSOC.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)Linux技术交流QQ群:887820935
2.7 Linux用户权限管理
2.7.1 Ubuntu用户系统Ubuntu是一个多用户系统,我们可以给不同的使用者创建不同的用户账号,每个用户使用各自的账号登陆,使用用户账号的目的一是方便系统管理员管理,控制不同用户对系统的访问权限,另一方面是为用户提供安全性保护。 我们前面在安装Ubuntu系统的时候被要求创建一个账户,当我们创建好账号以后,系统会在目录/home下以该用户名创建一个文件夹,所有与该用户有关的文件都会被存储在这个文件文件夹中。同样的,创建其它用户账号的时候也会在目录/home下生成一个文件夹来存储该用户的文件,下图就是我的电脑上“zuozhongkai”这个账户的文件夹。 装系统的时候创建的用户其权限比后面创建的用户大一点,但是没有root用户权限大,Ubuntu下用户类型分为以下3类: ●初次创建的用户,此用户可以完成比普通用户更多的功能。 ●root用户,系统管理员,系统中的玉皇大帝,拥有至高无上的权利。 ●普通用户,安装完操作系统以后被创建的用户。 以上三种用户,每个用户都有一个ID号,称为UID,操作系统通过UID来识别是哪个用户,用户相关信息可以在文件/etc/passwd中查看到,如下图所示: 从配置文件passwd中可以看到,每个用户名后面都有两个数字,比如用户“zuozhongkai”后面“1000:1000”,第一个数字是用户的ID,另一个是用户的GID,也就是用户组ID。Ubuntu里面每个用户都属于一个用户组里面,用户组就是一组有相同属性的用户集合。
2.7.2 权限管理在使用Windows的时候我们很少接触到用户权限,最多就是打开某个软件出问题的时候会选择以“管理员身份”打开。Ubuntu下我们会常跟用户权限打交道,权限就是用户对于系统资源的使用限制情况,root用户拥有最大的权限,可以为所欲为,装系统的时候创建的用户拥有root用户的部分权限,其它普通用户的权限最低。对于我们做嵌入式开发的人一般不关注用户的权限问题,因为嵌入式基本是单用户,做嵌入式开发重点关注的是文件的权限问题。 对于一个文件通常有三种权限:读(r)、写(w)和执行(x),使用命令“ls -l”可以查看某个目录下所有文件的权限信息,如下图所示: 在上图中我们以文件test.c为例讲解,文件test.c文件信息如下: - <font face="Tahoma">-rw-rw-r-- 1 zuozhongkai zuozhongkai 0 12月 25 20:44 test.c</font>
复制代码其中“-rw-rw-r--”表示文件权限与用户和用户组之间的关系,第一位表示文件类型,上一小节已经说了。剩下的9位以3位为一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其它用户权限。后面的“zuozhongkai zuozhongkai”分别代表文件拥有者(用户)和该用户所在的用户组,因此文件test.c的权限情况如下: ①、文件test.c的拥有者是用户zuozhongkai,其对文件tesst.c的权限是“rw-”,也就是对该文件拥有读和写两种权限。 ②、用户zuozhongkai所在的用户组也叫做zuozhongkai,其组内用户对于文件test.c的权限是“rw-”,也是拥有读和写这两种权限。 ③、其它用户对于文件test.c的权限是“r--”,也就是只读权限。 对于文件,可读权限表示可以打开查看文件内容,可写权限表示可以对文件进行修改,可执行权限就是可以运行此文件(如果是软件的话)。对于文件夹,拥有可读权限才可以使用命令ls查看文件夹中的内容,拥有可执行权限才能进入到文件夹内部。 如果某个用户对某个文件不具有相应的权限的话就不能进行相应的操作,比如根目录“/”下的文件只有root用户才有权限进行修改,如果以普通用户去修改的话就会提示没有权限。比如我们要在根目录“/” 创建一个文件mytest,使用命令“touch mytest”,结果如下图所示: 在上图中,我以用户“zuozhongkai”在根目录“/”创建文件mytest,结果提示我无法创建“mytest”,因为权限不够,因为只有root用户才能在根目录“/”下创建文件。我们可以使用命令“sudo”命令暂时切换到root用户,这样就可以在根目录“/”下创建文件mytest了,如下图所示: 在上图中我们使用命令“sudo”以后就可以在根目录“/”创建文件mytest,在进行其它的操作的时候,遇到提示权限不够的时候都可以使用sudo命令暂时以root用户身份去执行。 上面我们讲了,文件的权限有三种:读(r)、写(w)和执行(x),除了用r、w和x表示以外,我们也可以使用二进制数表示,三种权限就可以使用3位二进制数来表示,一种权限对应一个二进制位,如果该位为1就表示具备此权限,如果该位为0就表示没不具备此权限,如下表所示: 如果做过单片机开发的话,就会发现和单片机里面的寄存器位一样,将三种权限r、w和x进行不同的组合,即可得到不同的二进制数和八进制数,3位权限可以组出8种不同的权限组合,如下表所示: 表2.7.2.2中权限所对应的八进制数字就是每个权限对应的位相加,比如权限rwx就是4+2+1=7。前面的文件test.c其权限为“rw-rw-r--”,因此其十进制表示就是:664。 另外我们也开始使用a、u、g和o表示文件的归属关系,用=、+和-表示文件权限的变化,如下表所示: 表 2.7.3权限修改字母表示方式 对于文件test.c,我们想要修改其归属用户(zuozhongkai)对其拥有可执行权限,那么就可以使用:u+x。如果希望设置归属用户及其所在的用户组都对其拥有可执行权限就可以使用:gu+x。
2.7.3 权限管理命令我们也可以使用Shell来操作文件的权限管理,主要用到“chmod”和“chown”这两个命令,我们一个一个来看。 1、权限修改命令chmod 命令“chmod”用于修改文件或者文件夹的权限,权限可以使用前面讲的数字表示也可以使用字母表示,命令格式如下: - <font face="Tahoma">chmod [参数] [文件名/目录名]</font>
复制代码主要参数如下: -c 效果类似“-v”参数,但仅回显更改的部分。 -f 不显示错误信息。 -R 递归处理,指定目录下的所有文件及其子文件目录一起处理。 -v 显示指令的执行过程。 我们先来学习以下如何使用命令“chmod”修改一个文件的权限,在用户根目录下创建一个文件test,然后查看其默认权限,操作如下图所示: 在上图中我们创建了一个文件:test,这个文件的默认权限为“rw-rw-r--”,我们将其权限改为“rwxrw-rw”,对应数字就是766,操作如下: 在上图中,我们修改文件test的权限为766,修改完成以后的test文件权限为“rwxrw-rw-”,和我们设置的一样,说明权限修改成功。 上面我们是通过数字来修改权限的,我们接下来使用字母来修改权限,操作如下图所示: 上面两个例子都是修改文件的权限,接下来我们修改文件夹的权限,新建一个test文件夹,在文件夹test里面创建a.c、b.c和c.c三个文件,如下图所示: 在上图中test文件夹下的文件a.c、b.c和c.c的权限均为“rw-rw-r--”,我们将test文件夹下的所有文件权限都改为“rwxrwxrwx”,也就是数字777,操作如下图所示: 2、文件归属者修改命令chown 命令chown用来修改某个文件或者目录的归属者用户或者用户组,命令格式如下: - <font face="Tahoma">chown [参数] [用户名.<组名>] [文件名/目录]</font>
复制代码其中[用户名.<组名>]表示要将文件或者目录改为哪一个用户或者用户组,用户名和组名用“.”隔开,其中用户名和组名中的任何一个都可以省略,命令主要参数如下: -c 效果同-v类似,但仅回显更改的部分。 -f 不显示错误信息。 -h 只对符号连接的文件做修改,不改动其它任何相关的文件。 -R 递归处理,将指定的目录下的所有文件和子目录一起处理。 -v 显示处理过程。 在用户根目录下创建一个test文件,查看其文件夹所属用户和用户组,如下图所示: 图 2.7.11 test文件信息查询 从上图中可以看出,文件test的归属用户为zuozhongkai,所属的用户组为zuozhongkai,将文件test归属用户改为root用户,所属的用户组也改为root,操作如下图所示: 图 2.7.12修改文件归属用户和归属组 命令shown同样也可以递归处理来修改文件夹的归属用户和用户组,用法和命令chown一样,这里就不演示了。
2.8 Linux磁盘管理
2.8.1 Linux磁盘管理基本概念Linux的磁盘管理体系和Windows有很大的区别,在Windows下经常会遇到“分区”这个概念,在Linux中一般不叫“分区”而叫“挂载点”。 “挂载点”就是将一个硬盘的一部分做成文件夹的形式,这个文件夹的名字就是“挂载点”,不管在哪个发行版的Linux中,用户是绝对看到不到C盘、D盘这样的概念的,只能看到以文件夹形式存在的“挂载点”. 文件/etc/fstab详细的记录了Ubuntu中硬盘分区的情况,如图2.8.1.1所示: 图2.8.1.1 文件fstab 在图2.8.1.1中有一行“/ was on /dev/sda1 during installation”,意思是根目录“/”是在/dev/sda1上的,其中“/”是挂载点,“/dev/sda1”就是我们装Ubuntu系统的硬盘。由于我们的系统是安装在虚拟机中的,因此图2.8.1.1没有出现实际的硬盘。可以通过如下命令查看当前系统中的磁盘: ls /dev/sd* 上述命令就是打印出所有以/dev/sd开头的设备文件,如图2.8.1.2所示: 图2.8.1.2 查看硬盘设备文件 在图2.8.1.2中有四个磁盘设备文件,其中sd表示是SATA硬盘或者其它外部设备,最后面的数字表示该硬盘上的第n个分区,比如/dev/sda1就表示磁盘sda上的第一个分区。图2.8.1.2中都是以/dev/sda开头的,说明当前只有一个硬盘。如果再插上U盘、SD卡啥的就可能会出现/dev/sdb,/dev/sdc等等。如果你的U盘有两个分区那么可能就会出现/dev/sdb1、dev/sdb2这样的设备文件。比如我现在插入我的U盘,插入U盘会提示U盘是接到主机还是虚拟机,如图2.8.1.3所示: 图2.8.1.3 U盘连接选择 设置好图2.8.1.3以后,点击“确定”按钮U盘就会自动连接到虚拟机中,也就是连接到Ubuntu系统中,我们再次使用命令“ls/dev/sd*”来查看当前的“/dev/sd*”设备文件,如图2.8.1.4所示: 图2.8.1.4 插入U盘后的设备文件 从图2.8.1.4可以看出,相比图2.8.1.2多了/dev/sdb和/dev/sdb1这两个文件,其中/dev/sdb就是U盘文件,/dev/sdb1表示U盘的第一个分区,因为我的U盘就一个分区。
2.8.2 磁盘管理命令本节我们学习以下跟磁盘操作有关的命令,这些命令如下: 1、磁盘分区命令fdisk 如果要对某个磁盘进行分区,可以使用命令fdisk,命令格如下: 主要参数如下: -b<分区大小> 指定每个分区的大小。 -l 列出指定设备的分区表。 -s<分区编号> 将指定的分区大小输出到标准的输出上,单位为块。 -u 搭配“-l”参数,会用分区数目取代柱面数目,来表示每个分区的起始地址。 比如我要对U盘进行分区,千万不要对自己装Ubuntu系统进行分区!!!可以使用如下命令: 结果如图2.8.2.1所示: 在图2.8.2.1中提示我们输入“m”可以查看帮助,因为fdisk还有一些字命令,通过输入“m”可以查看都有哪些子命令,如图2.8.2.2所示: 图2.8.2.2中常用的命令如下: p 显示现有的分区 n 建立新分区 t 更改分区类型 d 删除现有的分区 a 更改分区启动标志 w 对分区的更改写入到硬盘或者存储器中。 q 不保存退出。 由于我的U盘里面还有一些重要的文件,所以现在不能进行分区,所以就不演示fdisk的分区操作了,后面我们讲解裸机例程的时候需要将可执行的bin文件烧写到SD卡中,烧写到SD卡之前需要对SD卡进行分区,到时候再详细讲解如何使用fdisk命令对磁盘进行分区。 2、格式化命令mkfs 使用命令fdisk创建好一个分区以后,我们需要对其格式化,也就是在这个分区上创建一个文件系统,Linux下的格式化命令为mkfs,命令格式如下: - mkfs [参数] [-t 文件系统类型] [分区名称]
复制代码主要参数如下: fs 指定建立文件系统时的参数 -V 显示版本信息和简要的使用方法。 -v 显示版本信息和详细的使用方法。 比如我们要格式化U盘的分区/dev/sdb1为FAT格式,那么就可以使用如下命令: 3、挂载分区命令mount 我们创建好分区并且格式化以后肯定是要使用硬盘或者U盘的,那么如何访问磁盘呢?比如我的U盘就一个分区,为/dev/sdb1,如果直接打开文件/dev/sdb1会发现根本就不是我们要的结果。我们需要将/dev/sdb1这个分区挂载到一个文件夹中,然后通过这个文件访问U盘,磁盘挂载命令为mount,命令格式如下: - mount [参数] -t [类型] [设备名称] [目的文件夹]
复制代码命令主要参数有: -V 显示程序版本。 -h 显示辅助信息。 -v 显示执行过程详细信息。 -o ro 只读模式挂载。 -o rw 读写模式挂载。 -s-r 等于-o ro。 -w 等于-o rw。 挂载点是一个文件夹,因此在挂载之前先要创建一个文件夹,一般我们把挂载点放到“/mnt”目录下,在“/mnt”下创建一个tmp文件夹,然后将U盘的/dev/sdb1分区挂载到/mnt/tmp文件夹里面,操作如图2.8.2.3所示: 图2.8.2.3 挂载U盘 在图2.8.2.3中我们将U盘以fat格式挂载到目录/mnt/tmp中,然后我们就可以通过访问/mnt/tmp来访问U盘了。 4、卸载命令umount 当我们不在需要访问已经挂载的U盘,可以通过umount将其从卸载点卸除,命令格式如下: - umount [参数] -t [文件系统类型] [设备名称]
复制代码-a 卸载/etc/mtab中的所有文件系统。 -h 显示帮助。 -n 卸载时不要将信息存入到/etc/mtab文件中 -r 如果无法成功卸载,则尝试以只读的方式重新挂载。 -t <文件系统类型> 仅卸载选项中指定的文件系统。 -v 显示执行过程。[url=]全屏[/url] 上面我们将U盘挂载到了文件夹/mnt/tmp里面,这里我们使用命令umount将其卸载掉,操作如图2.8.2.4所示: 图2.8.2.4 卸载U盘 在图2.8.2.4中,我们使用命令umount卸载了U盘,卸载以后当我们再去访问文件夹/mnt/tmp的时候发现里面没有任何文件了,说明我们卸载成功了。 |