4412开发板
PC 机
U 盘或者 TF 卡
软件工具
Ubuntu12.04.2 以及虚拟机
Arm-2009q3 编译器
Notepad++编辑器
超级终端
Vim 编辑器
1.Linux 用户管理
Linux 中的用户管理与 Windows 中的用户管理很相似,但又很不相同。
两个系统都是多用户系统,基于用户身份来控制他们对资源的访问。两个操作系统都允许将用户分组管理以简化访问控制,以避免为众多用户分别设置权限。不过,相同之处也仅此而已。超级用户
在 Linux 中,超级用户称为 root。root 用户可以控制所有的程序,访问所有文件,使用系统上的所有功能。对 root 用户来说没有不可以做的事情。就管理的角度而言,root 的权限是至高无上的。所以,root 帐号一定要通过安全的密码保护起来,这一点非常重要。
其他用户也可以被赋予 root 特权,但一定要谨慎行事。通常您可以配置一些特定的程序由某些用户以 root 身份去运行,而不必赋予他们 root 权限。
如下图所示,在虚拟机的 Ubuntu 系统下,使用命令“su root”,然后输入密码即可登录“root”用户。Ubuntu 默认按装之后并没有 root 账户,需要开启 root 用户,具体参考对应《使用手册》3.3.2 小节 Ubuntu 中启用 root 用户。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133521ddi58qudl5uxf5i8.jpg.thumb.jpg)
可以通过 useradd 命令来创建新用户,可以通过 useradd -help 或者 man 学习其用法,如下图所示。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133527hvm3m0j0enoqtqmt.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133527k5ijyupd5idqijqc.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133527fctjldb43n7wc5c6.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133528hdnv74bndjmdrn3x.jpg.thumb.jpg)
另外可以在 root 用户下使用 passwd 修改密码。
Linux 用户的组织
在 linux 中,所有的用户都存在于“/etc/passwd”中。如下图所示,使用命令“more/etc/passwd”,这个文件的结构非常直观。每一行是一个新用户,参数用冒号隔开。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133528ydbueu7yndoxpu2y.jpg.thumb.jpg)
“root:x:0:0:root:/root:/bin/bash”。
第一列是用户名;第二列是用户的密码;第三列是用户的数字 ID;第四列是用户的主组的ID;第五列是用户的全名或者是注释;第六列是用户主目录的位置,这个目录通常位于 /home目录下,目录名与用户 ID 相同;第七列是用户的默认控制台 shell。
上面第二列的 x,并不代表密码就是 x,这里只是隐藏了,另外只有超级用户可以修改其它用户的密码。
2. Linux 组
Linux 中的组与 Windows 中的组很类似。可以创建一个组,然后将成员添加到这个组的列表中。可以以组为单位来分配资源。隶属于同一个组的成员可以访问同一资源。
4.4.1 用户组的操作
使用控制台命令 groupadd 创建组很简单,如下图所示,使用命令“groupadd mygroup”创建“mygroup”组,然后使用命令“cat /etc/group”查看。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133528c1b80ymmzdm88b0a.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133528a89u8thuazifiu3a.jpg.thumb.jpg)
虽然在这里不能详尽地论述访问控制,不过您应该对用户和组对文件的访问权限有初步的了解。如果您以长格式列出一个目录下的文件,您看到的将如下显示。
-rw-r--r-- 1 userid mygroup 703 Jun 23 22:12 myfile现在暂时忽略其他的列,只去看第三、四和最后一列。第三列是文件主人的名字,userid。
第四列是关联到这个文件的组,mygroup。最后一列是文件名。每个文件只能属于一个主人和一个组。可以为不能归于这两类的其他用户 (Other)设置权限。可以认为 Other 相当于Windows 中的 Everyone 组。
一个文件只能属于一个主人,这在操作系统中很常见,但是,文件只能属于一个组,初次使用这一规则的管理员可能会觉得受到了限制。事实并不如此。由于用户可以同时是多个组的成员,所以只需要创建新的组就可以安全使用资源。在 Linux 中,往往是基于所需要的资源访问权限而不是根据业务单位来定义组。如果系统的资源逻辑上是有组织的,那么可以创建更多的组来更好地控制对资源的访问。
在 Linux 中管理用户和组的方式与 Windows 中本质上是相同的,但是 Linux 中只能有惟一的组可以关联到一个系统资源。应该这样认识 Linux 中的组管理:不要吝惜对组的使用,在复杂的环境中,不要害怕创建很多组。应该根据资源访问权限而不是基于业务单位去创建组。用户和组信息分别存储在 /etc/passwd 文件和 /etc/group 文件中。您的系统可能还会有 /etc/shadow 和 /etc/gshadow 文件,它们存储的是为了安全而经过加密的密码。直接编
辑这些文件来管理用户和组不是不可以,但您一定要谨慎行事。
所有的用户和组的管理都可以在控制台中完成,可以写成脚本。也可以使用 Webmin 等工具以图形化的方式管理用户和组。3.Linux 权限
Linux 的中,每个文件都有文件所有者和所有组以及权限位。
每一个权限位描述了所有者、所属组以及其它人对文件的读、写和执行的权限。这三类每一个对应 3 个位,共 9 位。
Linux 中一切皆文件,有大家常规理解的文件,后面有一些特殊的文件,所有的文件权限都是一模一样的。
如下表所示,表示不同用户和组的权限。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133529owskjekezzgaoos3.jpg.thumb.jpg)
在 root 用户下,如下图所示,使用命令“vim /home/topeet/testchmod.c”,新建一个文件“testchmod.c”。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133529cdldccpmv4k4lzis.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133529n9uqscw5b0z9a47z.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133530efr77i0su38377qo.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133530yupd8rwd144rrlfi.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133530u6e0lxl6begloeo7.jpg.thumb.jpg)
“chmod 777 /home/topeet/testchmod.c”。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133530lnu5ug77ey72omc5.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133531v32ew890ex3s0qwp.jpg.thumb.jpg)
第二个 7 表示,这对文件所在组用户的权限,040+020+010,
第三个 7 表示,这对文件所有用户的权限,004+002+001,
用户可以使用其它组合测试,然后使用 ls 命令查看权限。
4. linux 绝对路径和相对路径
在 linux 中,会经常用到相对路径和绝对路径的概念。
绝对路径
绝对路径是从”/”目录开始的,“/”也称为根目录。
例如在入门实验中,arm-2009q3 编译器的路径就是绝对路径,如下图所示。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133531l8vwq55cq22v8gcw.jpg.thumb.jpg)
如下图所示。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133531w66ca93f1z9ghc10.jpg.thumb.jpg)
相对路径一般是以“.”或者“../”或者“../../”开头的路径,或者路径前没有”/”。表示在相对于用户的“当前路径”的目录位置。
如下图所示,例如在绝对路径/home/linuxsystemcode 下。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133531o1afz8zl81761q8p.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133532iz4z66444a7v4d9b.jpg.thumb.jpg)
/home/linuxsystemcode/helloworld 目录,则可以使用命令
“cd ../linuxsystemcode/helloworld/”。
这里“../”表示当前目录的上一级目录,“../../”表示当前目录的上两级目录,如果不带任何点点,则表示在当前目录下的目录。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133532gpwzwaxb2b40kpxw.jpg.thumb.jpg)
注意这里的代码运行返回信息,也包括操作系统中代码返回信息。
这部分不要着急去完全搞明白,最重要的是脑子中有这样一些基本概念,在后面的学习中会逐渐使用到,经过了实际操作慢慢就会明白。启动信息
开发板启动之后,在控制台会打印系统的信息,包括硬件基本信息,如下图所示,uboot引导部分会打印硬件信息,如下图所示,内存,各种时钟信息等等大部分都会在 uboot 运行的时候打印出来。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133532cffkfhg3yg4g0og8.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133532ttponfloegiipmmq.jpg.thumb.jpg)
4.7.2 程序运行错误
在执行程序的时候,大家最常见的是权限错误,除了权限错误以外,还有变量的一些错误。这部分信息,是系统提供的,虽然程序可以编译通过,但是在实际运行过程中还是会出一些问题,在后面的视频教程中,给大家现场写代码调试的时候,会出现一些小错误,这些小错误会引起内存错误。
如下图所示,是运行 helloworld 的权限错误,修改一下权限就可以正常运行了。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133533dcuwu59h84msm9az.jpg.thumb.jpg)
函数返回值错误
函数返回值错误,大家应该不会陌生,在后面的实验中,调用的各种函数一般都会根据返回值来判断是否出了问题,如果出错打印一段信息,如果没有出错打印一段信息。
这部分是程序员控制的,在 linux 中通常使用 printf 函数来打印,由于在教材后半部分,大量的用到了这种方法,这里就不再举例。
现在一定要有这样一个概念,否则学习到后面大家会觉得这样会十分啰嗦,但是这样的啰嗦是在程序中必不可少的。而且实际工作中,调试程序也是通过一行一行的打印信息来修正 Bug的。
特殊变量错误
当程序运行发生错误的时候,库函数都会设置状态指示符。这些状态指示符,可以被设置和测试。在头文件“errno.h”中包含一些错误编码,根据错误编码可以了解最近一次出错的信息,另外在头文件“stdio.h”中定义了错误打印函数 perror。
如下图所示,使用命令“man 3 perror”查看一下打印错误的函数。
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133533yue2h203occychoy.jpg.thumb.jpg)
![](http://bbs.21ic.com/data/attachment/forum/201911/18/133533qfajnfnjjovyajke.jpg.thumb.jpg)
代码:fprintf(stderr,”%s:%s\n”,s,”error message”)
等同于上面的函数 perror。在学习后面的各种接口函数的时候,如果接口函数运行出错,系统都会设置 error,这个error 可以通过 perror 或者 fprintf 函数打印出来。关于 perror 这部分内容是属于 C 语言基础的,在和不少用户接触的过程中发现少部分对于这部分不了解。如果对这部分不太熟悉,可以找一本 C 语言的书籍来看一下。本文转自迅为:http://www.topeetboard.com