硬件工具
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 用户。 创建和删除用户
可以通过 useradd 命令来创建新用户,可以通过 useradd -help 或者 man 学习其用法,如下图所示。 如下图所示。 如下图所示,使用命令“ useradd xunwei”添加用户 xunwei,然后使用命令“cat/etc/passwd”。 如下图所示,在/etc/passwd 下可以看到/home/xunwei 用户。 使用“userdel xunwei”命令可以删除用户 xunwei。
另外可以在 root 用户下使用 passwd 修改密码。
Linux 用户的组织
在 linux 中,所有的用户都存在于“/etc/passwd”中。如下图所示,使用命令“more/etc/passwd”,这个文件的结构非常直观。每一行是一个新用户,参数用冒号隔开。 用户的组织文件,非常直观,每一行代表一个一个用户,例如超级用户
“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”查看。 如下图所示,可以看到新建的组 mygroup。 第一列是组的名字。第二列是一个密码。同样,“x”说明真正的密码存放在 /etc/gshadow映像文件中。第三列是组的一个数字索引。在第三列之后将是以逗号隔开的组的成员的用户 ID。 用户和组的联系
虽然在这里不能详尽地论述访问控制,不过您应该对用户和组对文件的访问权限有初步的了解。如果您以长格式列出一个目录下的文件,您看到的将如下显示。
-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 中一切皆文件,有大家常规理解的文件,后面有一些特殊的文件,所有的文件权限都是一模一样的。
如下表所示,表示不同用户和组的权限。 修改权限的命令是 chmod,下面举个例子。
在 root 用户下,如下图所示,使用命令“vim /home/topeet/testchmod.c”,新建一个文件“testchmod.c”。 如下图所示,然后保存退出 vim。 然后使用命令“ls -al /home/topeet/testchmod.c”查看文件的详细信息,如下图所示,新建的文件默认权限为“-rw-r--r--”,也就是创建的所有者用户 root 可以读写,然后组用户和其它用户都只能读。 键盘上使用“Ctrl+Alt+t”,再开一个终端,默认进入的是 topeet 用户,在这个用户下使用命令“ vim /home/topeet/testchmod.c ”打开文件,如下图所示。 打开之后,如下图所示,可以看到只能读。 再回到前面的 root 用户,如下图所示,使用命令
“chmod 777 /home/topeet/testchmod.c”。 然后再使用命令“ls -al /home/topeet/testchmod.c”查看文件权限。 第一个 7 表示,这对文件所有用户 root 的权限,400+200+100,
第二个 7 表示,这对文件所在组用户的权限,040+020+010,
第三个 7 表示,这对文件所有用户的权限,004+002+001,
用户可以使用其它组合测试,然后使用 ls 命令查看权限。
4. linux 绝对路径和相对路径
在 linux 中,会经常用到相对路径和绝对路径的概念。
绝对路径
绝对路径是从”/”目录开始的,“/”也称为根目录。
例如在入门实验中,arm-2009q3 编译器的路径就是绝对路径,如下图所示。 另外还可以使用命令 pwd 来查看当前目录的绝对路径,例如在 helloworld 的源码位置,
如下图所示。 一般性的识别方法是以”/”开头的路径就是绝对路径。 相对路径
相对路径一般是以“.”或者“../”或者“../../”开头的路径,或者路径前没有”/”。表示在相对于用户的“当前路径”的目录位置。
如下图所示,例如在绝对路径/home/linuxsystemcode 下。 接着想进入当前目录下的 helloworld 目录下,可以使用命令“cd helloworld”,如下图所示。 如下图所示,假如用户在/home/topeet 目录下,想进入
/home/linuxsystemcode/helloworld 目录,则可以使用命令
“cd ../linuxsystemcode/helloworld/”。
这里“../”表示当前目录的上一级目录,“../../”表示当前目录的上两级目录,如果不带任何点点,则表示在当前目录下的目录。 5. 代码运行返回信息
注意这里的代码运行返回信息,也包括操作系统中代码返回信息。
这部分不要着急去完全搞明白,最重要的是脑子中有这样一些基本概念,在后面的学习中会逐渐使用到,经过了实际操作慢慢就会明白。 启动信息
开发板启动之后,在控制台会打印系统的信息,包括硬件基本信息,如下图所示,uboot引导部分会打印硬件信息,如下图所示,内存,各种时钟信息等等大部分都会在 uboot 运行的时候打印出来。 引导到内核之后,会打印驱动注册和运行信息,如下图所示,这部分是电源管理驱动的部分打印。 学习到了一定程度,这些信息会非常重要。特别是在实际开发中,如果你写一个驱动,没有设计好打印信息,下一个接手的程序员,在运行的过程中出现了 bug,那么下一个程序员需要花大量的时间去查找到底 bug 在什么地方。这些基本信息,可以帮助接手的程序员,快速了解基本功能,以及查找问题。
4.7.2 程序运行错误
在执行程序的时候,大家最常见的是权限错误,除了权限错误以外,还有变量的一些错误。这部分信息,是系统提供的,虽然程序可以编译通过,但是在实际运行过程中还是会出一些问题,在后面的视频教程中,给大家现场写代码调试的时候,会出现一些小错误,这些小错误会引起内存错误。
如下图所示,是运行 helloworld 的权限错误,修改一下权限就可以正常运行了。 在编写和调试程序的时候,如果运行不正常,一定要看程序返回信息。这是一个必经过程,也是一个良性循环的过程,出了问题,自己能够动手解决了,这样英文进步了,调试程序的能力提高了,对于易错点有加深了印象。
函数返回值错误
函数返回值错误,大家应该不会陌生,在后面的实验中,调用的各种函数一般都会根据返回值来判断是否出了问题,如果出错打印一段信息,如果没有出错打印一段信息。
这部分是程序员控制的,在 linux 中通常使用 printf 函数来打印,由于在教材后半部分,大量的用到了这种方法,这里就不再举例。
现在一定要有这样一个概念,否则学习到后面大家会觉得这样会十分啰嗦,但是这样的啰嗦是在程序中必不可少的。而且实际工作中,调试程序也是通过一行一行的打印信息来修正 Bug的。
特殊变量错误
当程序运行发生错误的时候,库函数都会设置状态指示符。这些状态指示符,可以被设置和测试。在头文件“errno.h”中包含一些错误编码,根据错误编码可以了解最近一次出错的信息,另外在头文件“stdio.h”中定义了错误打印函数 perror。
如下图所示,使用命令“man 3 perror”查看一下打印错误的函数。 如下图所示,可以看一下 man 文档中关于函数 perror 的使用。 另外 perror 函数还可以以另外一种方式打印。
代码:fprintf(stderr,”%s:%s\n”,s,”error message”)
等同于上面的函数 perror。在学习后面的各种接口函数的时候,如果接口函数运行出错,系统都会设置 error,这个error 可以通过 perror 或者 fprintf 函数打印出来。 关于 perror 这部分内容是属于 C 语言基础的,在和不少用户接触的过程中发现少部分对于这部分不了解。如果对这部分不太熟悉,可以找一本 C 语言的书籍来看一下。 本文转自迅为:http://www.topeetboard.com
|