第2章 Linux系统基本命令 联系客服

发布时间 : 星期三 文章第2章 Linux系统基本命令更新完毕开始阅读61d9260aba1aa8114431d917

(1)作用。

用于查看和配置网络接口的地址和参数,包括IP 地址、网络掩码、广播地址, 它的使用权限是超级用户。 (2)格式。

ifconfig有两种使用格式,分别用于查看和更改网络接口。

? ifconfig [选项] [网络接口]:用来查看当前系统的网络配置情况。 ? ifconfig 网络接口 [选项] 地址:用来配置指定接口(如eth0、eth1)的IP

址、网络掩码、广播地址等。 (3)常见参数。 (4)使用实例

[root@localhost ~]# ifconfig eth0 210.25.132.142 netmask 255.255.255.0 [root@localhost ~]# ifconfig

eth0 Link encap:Ethernet HWaddr 00:08:02:E0:C1:8A inet addr:210.25.132.142 Bcast:210.25.132.255 Mask:255.255.255.0

inet6 addr: fe80::208:2ff:fee0:c18a/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1722 errors:0 dropped:0 overruns:0 frame:0 TX packets:5 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000

RX bytes:147382 (143.9 KiB) TX bytes:398 (398.0 b) Interrupt:11 …

ifconfig 改变了接口eth0 的IP 地址、子网掩码等,在之后的ifconfig查看中可以看出确实发生了变化。 2.ftp (1)作用。

该命令允许用户利用ftp 协议上传和下载文件。 (2)格式。

ftp [选项] [主机名/IP]。

ftp 相关命令包括使用命令和内部命令,其中使用命令的格式如上所列,主要用于登录到ftp服务器。内部命令是指成功登录后进行的一系列操作,下面会详细列出。若用户缺省―主机名/IP‖,则可在转入到ftp内部命令后继续选择登录。

17

(3)常见参数。 ftp常见选项参数如表

bin/ type binary 使用二进制文件传输方式(嵌入式开发中的常见方式) get remote-file[local-file] 将远程主机的文件remote-file传至本地硬盘的local-file put local-file[remote-file] 将本地文件local-file传送至远程主机

2.3. Linux 启动过程详解

在了解了Linux 的常见命令之后,下面详细讲解Linux 的启动过程。Linux 的启动过程包含了Linux 工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识。

2.3.1. 概述

用户开机启动Linux 过程如下:

(1)当用户打开PC(intel CPU)的电源时,CPU 将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址。这时BIOS 进行开机自检,并按BIOS 中设置的启动设备(通常是硬盘)进行启动,接着启动设备上安装的引导程序lilo 或grub 开始引导Linux(也就是启动设备的第一个扇区),这时,Linux 才获得了启动权。

(2)第二阶段,Linux 首先进行内核的引导,主要完成磁盘引导、读取机器系统数据、实模式和保护模式的切换、加载数据段寄存器以及重置中断描述符表等。 (3)第三阶段执行init程序(也就是系统初始化工作),init程序调用了rc.sysinit和rc等程序,而rc.sysinit和rc在完成系统初始化和运行服务的任务后,返回init。 (4)第四阶段,init 启动mingetty,打开终端供用户登录系统,用户登录成功后进入了shell,这样就完成了从开机到登录的整个启动过程。

Linux 启动总体流程如图2-1 所示,其中的4 个阶段分别由同步棒隔开。第一阶段不涉及Linux 自身的启动过程,下面分别对第二和第三阶段进行详细讲解。

18

图2-1 Linux

启动总体流程图

2.3.2. 内核引导阶段

在grub 或lilo 等引导程序成功完成引导Linux 系统的任务后,Linux 就从它们手中接管了CPU 的控制权。用户可以从www.kernel.org 上下载最新版本的源码进行阅读,其目录为:linux-2.6.*.*/arch/i386/boot。在启动过程中主要用到该目录下的几个文件:bootsect.S、setup.S以及compressed子目录下的head.S等。Linux 的内核通常是压缩过的,包括上述提到的那几个重要的汇编程序,它们都是在压缩内核vmlinuz 中的。Linux 中提供的内核包含了众多驱动和功能,容量较大,压缩内核可以节省大量的空间,压缩的内核在启动时可以对自身进行解包。 (1)bootsect阶段

当grub 读入vmlinuz 后,会根据bootsect(512 字节)把它自身和setup程序段读到以不大于0x90000 开始的的内存里(注意:在以往的引导协议里是放在0x90000,但现在有所变化),然后grub 会跳过bootsect 那512 字节的程序段,直接运行setup里的第一跳指令。就是说bzImage 里bootsect 的程序没有再被执行了,而bootsect.S在完成了指令搬移以后就退出了。之后执行权就转到了setup.S的程序中。 (2)setup阶段。

setup.S的主要功能是利用ROM BIOS中断读取机器系统数据,并将系统参数(包括内存、磁盘等)保存到以0x90000~0x901FF开始的内存中。此外,setup.S还将video.S中的代码包含进来,检测和设置显示器和显示模式。最后,它还会设置CPU 的控制寄存器CR0(也称机器状态字),从而进入32 位保护模式运

19

行,并跳转到绝对地址为0x100000(虚拟地址0xC0000000+0x100000)的位置。当CPU跳到0x100000 时,将执行―arch/i386/kernel/head.S‖中的startup_32。 (3)head.S阶段。

当运行到head.S 时,系统已经运行在保护模式,而head.S 完成的一个重要任务就是将内核解压。内核是通过压缩的方式放在内存中的,head.S通过调用misc.c中定义的decompress_kernel()函数,将内核vmlinuz 解压到0x100000。接下来head.S程序完成寄存器、分页表的初始化工作,但要注意的是,这个head.S程序与完成解压缩工作的head.S 程序是不同的,它在源代码中的位置是arch/i386/kernel/head.S。在完成了初始化之后,head.S就跳转到start_kernel()函数中去了。

(4)main.c阶段。

start_kernel()是―init/main.c‖中定义的函数,start_kernel()调用了一系列初始化函数,进行内核的初始化工作。要注意的是,在初始化之前系统中断仍然是被屏蔽的,另外内核也处于被锁定状态,以保证只有一个CPU用于Linux 系统的启动。在start_kernel()的最后,调用了init()函数,也就是下面要讲述的init阶段。

2.3.3. init阶段

在加载了内核之后,由内核执行引导的第一个进程是init进程,该进程号始终是―1‖。init 进程根据其配置文件―/etc/inittab‖主要完成系统的一系列初始化的任务。由于该配置文件是init进程执行的惟一依据,因此先对它的格式进行统一讲解。inittab文件中除了注释行外,每一行都有如下格式:

(1)id。

id 是配置记录标识符,由1~4 个字符组成,对于getty 或mingetty 等其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。

(2)runlevels。

runlevels是运行级别记录符,一般使用0~6 以及S和s。其中,0、1、6运行级别为系统保留:0 作为shutdown 动作,1 作为重启至单用户模式,6 为重启;S 和s意义相同,表示单用户模式,且无需inittab 文件,因此也不在inittab 中出

20