《嵌入式 Linux应用程序开发标准教程(第2版)》——2.1 Linux常用命令

本节书摘来异步社区《嵌入式 Linux应用程序开发标准教程(第2版)》一书中的第2章,第2.1节,作者:华清远见嵌入式培训中心,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.1 Linux常用命令

嵌入式 Linux应用程序开发标准教程(第2版)
在安装完Linux再次启动之后,就可以进入到与Windows类似的图形化界面了。这个界面就是Linux图形化界面X窗口系统(简称X)的一部分。要注意的是,X窗口系统仅仅是Linux上面的一个软件(或者也可称为服务),它不是Linux自身的一部分。虽然现在的X窗口系统已经与Linux整合得相当好了,但毕竟还不能保证绝对的可靠性。另外,X窗口系统是一个相当耗费系统资源的软件,它会大大地降低Linux的系统性能。因此,若是希望更好地享受Linux所带来的高效及高稳定性,建议读者尽可能地使用Linux的命令行界面,也就是shell环境。

当用户在命令行下工作时,不是直接同操作系统内核交互信息的,而是由命令解释器接受命令,分析后再传给相关的程序。shell是一种Linux中的命令行解释程序,就如同command.com是DOS下的命令解释程序一样,为用户提供使用操作系统的接口。它们之间的关系如图2.1所示。用户在提示符下输入的命令都由shell先解释然后传给Linux内核。

小知识

shell是命令语言、命令解释程序及程序设计语言的统称。它不仅拥有自己内建的shell命令集,同时也能被系统中其他应用程序所调用。
shell的一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。关于shell编程的详细讲解,感兴趣的读者可以参见其他相关书籍。
Linux中运行shell的环境是“系统工具”下的“终端”,读者可以单击“终端”以启动shell环境。这时屏幕上显示类似“[david@localhost home]$”的信息,其中,david是指系统用户,localhost是计算机名,而home是指当前所在的目录。

b786d375c29234cacbfb79ce6fe0e4f01015d35b

由于Linux中的命令非常多,要全部介绍几乎是不可能的。因此,本书按照命令的用途进行分类讲解,并且对每一类中最常用的命令进行详细讲解,同时列出同一类中的其他命令。由于同一类的命令都有很大的相似性,因此,读者通过学习本书中所列命令,可以很快地掌握其他命令。

命令格式说明。

格式中带[]的表明为可选项,其他为必选项。
选项可以多个连带写入。
本章后面选项参数列表中加粗的含义是:该选项是非常常用的选项。

2.1.1 用户系统相关命令

Linux是一个多用户的操作系统,每个用户又可以属于不同的用户组,下面,首先来熟悉一下Linux中的用户切换和用户管理的相关命令。

1.用户切换(su)
(1)作用。

变更为其他使用者的身份,主要用于将普通用户身份转变为超级用户,而且需输入相应用户密码。

(2)格式。

su [选项] [使用者]

其中的使用者为要变更的对应使用者。

(3)常见参数。

主要选项参数如表2.1所示。

da63e4ea46c3b90e85e538e79e84772265895902

(4)使用示例。

[david@localhost ~]$ su - root
Password: 
[root@localhost ~]#```
示例通过su命令将普通用户变更为root用户,并使用选项“-”携带root环境变量。

(5)使用说明。

在将普通用户变更为root用户时建议使用“-”选项,这样可以将root的环境变量和工作目录同时带入,否则在以后的使用中可能会由于环境变量的原因而出错。
在转变为root权限后,提示符变为#。
图标小知识

环境变量实际上就是用户运行环境的参数集合。Linux是一个多用户的操作系统。而且在每个用户登录系统后,都会有一个专有的运行环境。通常每个用户默认的环境都是相同的,而这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制,其方法就是修改相应的系统环境变量。

常见的环境变量如下。

PATH是系统路径。
HOME是系统根目录。
HISTSIZE是指保存历史命令记录的条数。
LOGNAME是指当前用户的登录名。
HOSTNAME是指主机的名称,若应用程序要用到主机名,通常是从这个环境变量中来取得的。
SHELL是指当前用户用的是哪种shell。
LANG/LANGUGE是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
MAIL是指当前用户的邮件存放目录。 设置环境变量方法如下。
通过echo显示字符串(指定环境变量)。
通过export设置新的环境变量。
通过env显示所有环境变量。
通过set命令显示所有本地定义的shell变量。
通过unset命令来清除环境变量。
读者可以试着用“env”命令查看“su - root”(或“su –”)和“su root”的区别。
2.用户管理(useradd和passwd)
Linux中常见用户管理命令如表2.2所示,本书仅以useradd和passwd为例进行详细讲解,其他命令类似,请读者自行学习使用。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/19ba510028408286b88677f42a5774036513c70d.png" width="" height="">
</div>

(1)作用。

① useradd:添加用户账号。

② passwd:更改对应用户的账号密码。

(2)格式。

① useradd:useradd [选项] 用户名。

② passwd:passwd [选项] [用户名]。

其中的用户名为修改账号密码的用户,若不带用户名,默认为更改当前使用者的密码。

(3)常用参数。

① useradd主要选项参数如表2.3所示。
    
<div style="text-align: center"><img src="https://yqfile.alicdn.com/0a50a730cb1e9292db07dbaafc2250341d00f69d.png" width="" height="">
</div>

(4)使用实例。

[root@localhost ~]# useradd david
[root@localhost ~]# passwd david
New password: (输入密码)
Retype new password: (再输入一次密码,以确认输入的正确性)
passwd: all authentication tokens updated successfully
[root@localhost ~]# su – david
[david@localhost ~]$
[david@localhost ~]$ pwd(查看当前目录)
/home/david (该用户的工作目录)`
实例中先添加了用户名为david的用户,接着又为该用户设置了账号密码。从su的命令可以看出,该用户添加成功,其工作目录为“/home/david”。

(5)使用说明。

在添加用户时,这两个命令是一起使用的,其中,useradd必须用root的权限。而且useradd指令所建立的账号,实际上是保存在“/etc/passwd”文本文件中,文件中每一行包含一个账号信息。
在默认情况下,useradd所做的初始化操作包括在“/home”目录下为对应账号建立一个同名的主目录,并且还为该用户单独建立一个与用户名同名的组。
adduser只是useradd的符号链接(关于符号链接的概念在本节后面会有介绍),两者是相同的。
passwd还可用于普通用户修改账号密码,Linux并不采用类似Windows的密码回显(显示为*号),所以输入的这些字符用户是看不见的。密码最好包括字母、数字和特殊符号,并且设成6位以上。
3.系统管理命令(ps和kill)
Linux中常见的系统管理命令如表2.4所示,本书以ps和kill为例进行讲解。

2b84865c79cdc7c0853939a0704a449d6cda2f8e

(1)作用。

① ps:显示当前系统中由该用户运行的进程列表。

② kill:输出特定的信号给指定PID(进程号)的进程,并根据该信号完成指定的行为。其中可能的信号有进程挂起、进程等待、进程终止等。

(2)格式。

① ps:ps [选项]。

② kill:kill [选项] 进程号(PID)。

kill命令中的进程号为信号输出的指定进程的进程号,当选项是默认时为输出终止信号给该进程。

(3)常见参数。

① ps主要选项参数如表2.5所示。

aa711b27feedbf7281b7a6cbb9f3eca171ff52d8

② kill主要选项参数如表2.6所示。

5c617e10a712aa7ecdadf10a560cfc686957dea7

(4)使用实例。

[root@localhost root]# ps –ef
UID    PID PPID C STIME TTY     TIME CMD
root    1   0 0 2005 ?    00:00:05 init
root    2   1 0 2005 ?    00:00:00 [keventd]
root    3   0 0 2005 ?    00:00:00 [ksoftirqd_CPU0]
root    4   0 0 2005 ?    00:00:00 [ksoftirqd_CPU1]
root   7421   1 0 2005 ?    00:00:00 /usr/local/bin/ntpd -c /etc/ntp.
root   21787 21739 0 17:16 pts/1   00:00:00 grep ntp
[root@localhost root]# kill -9 7421 (杀死进程)
[root@localhost root]# ps -ef|grep ntp
root   21789 21739 0 17:16 pts/1  00:00:00 grep ntp```
该实例中首先查看所有进程,并终止进程号为7421的ntp进程,之后再次查看时已经没有该进程号的进程。

(5)使用说明。

ps在使用中通常可以与其他一些命令结合起来使用,主要作用是提高效率。
ps选项中的参数w可以写多次,通常最多写3次,它的含义为加宽3次,这足以显示很长的命令行了。例如:ps –auxwww。
图标小知识

管道是Linux中信息通信的重要方式。它是把一个程序的输出直接连接到另一个程序的输入,而不经过任何中间文件。管道线是指连接两个或更多程序管道的通路。在shell中字符”|”表示管道线。如前例子中的ps –ef|grep ntp所示,ps –ef的结果直接输入到grep ntp的程序中(关于grep命令在后面会有详细的介绍)。grep、pr、sort和wc都可以在上述管道线上工作。读者可以灵活地运用管道机制提高工作效率。
4.磁盘相关命令(fdisk)
Linux中与磁盘相关的命令如表2.7所示,本书仅以fdisk为例进行讲解。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/301b93eabe6039f7842d62e43a860ec215fc7f9e.png" width="" height="">
</div>

(1)作用。

fdisk可以查看硬盘分区情况,并可对硬盘进行分区管理,这里主要介绍如何查看硬盘分区情况,另外,fdisk也是一个非常好的硬盘分区工具,感兴趣的读者可以另外查找资料学习如何使用fdisk进行硬盘分区。

(2)格式。

fdisk [-l]

(3)使用实例。

[root@localhost ~]# fdisk -l
Disk /dev/hda: 40.0 GB, 40007761920 bytes
240 heads, 63 sectors/track, 5168 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
  Device Boot   Start     End   Blocks  Id System
/dev/hda1  *      1     1084   8195008+  c W95 FAT32 (LBA)
/dev/hda2       1085     5167  30867480  f W95 Ext'd (LBA)
/dev/hda5       1085     2439  10243768+  b W95 FAT32
/dev/hda6       2440     4064  12284968+  b W95 FAT32
/dev/hda7       4065     5096   7799526  83 Linux
/dev/hda8       5096     5165   522081  82 Linux swap
Disk /dev/sda: 999 MB, 999816704 bytes
4 heads, 8 sectors/track, 61023 cylinders
Units = cylinders of 32 * 512 = 16384 bytes
Disk identifier: 0x00000000

Device Boot   Start     End   Blocks  Id System
/dev/sda1  *      1    61024   976379+  b W95 FAT32


可以看出,使用“fdisk –l”列出了文件系统的分区情况。

(4)使用说明。

使用fdisk必须拥有root权限。
IDE硬盘对应的设备名称分别为hda、hdb、hdc和hdd,SCSI硬盘对应的设备名称则为sda、sdb…。此外,hda1代表hda的第一个硬盘分区,hda2代表hda的第二个分区,依此类推。
通过查看/var/log/messages文件,可以找到Linux系统已辨认出来的设备代号。
5.文件系统挂载命令(mount)
(1)作用。

挂载文件系统,它的使用权限是超级用户或/etc/fstab中允许的使用者。正如1.2.1节中所述,挂载是指在分区和目录之间建立映射关系的过程,而挂载点是指挂载在文件树中的位置。使用mount命令可以把文件系统挂载到相应的目录下,并且由于Linux中把设备都当成文件一样使用,因此,mount命令也可以挂载不同的设备。

通常,在Linux下“/mnt”目录是专门用于挂载不同的文件系统的,它可以在该目录下新建不同的子目录来挂载不同的设备文件系统。

(2)格式。

mount [选项] [类型] 设备文件名挂载点目录

其中的类型是指设备文件的类型。

(3)常见参数。

mount常见参数如表2.8所示。


<div style="text-align: center"><img src="https://yqfile.alicdn.com/a123e6718432f5cd53ae0fad11407dac10aa5b52.png" width="" height="">
</div>

(4)使用实例。

使用mount命令主要通过以下几个步骤。

① 确认是否为Linux可以识别的文件系统,Linux可识别的文件系统只要是以下几种。

Windows 95/98常用的FAT32文件系统:vfat。
Windows NT/2000的文件系统:ntfs。
OS/2用的文件系统:hpfs。
Linux用的文件系统:ext2、ext3、nfs。
CD-ROM光盘用的文件系统:iso9660。
② 确定设备的名称,可通过使用命令“fdisk -l”查看。

③ 查找挂载点。

必须确定挂载点已经存在,也就是在“/mnt”下的相应子目录已经存在,一般建议在“/mnt”下新建几个如“/mnt/windows”,“/mnt/usb”的子目录,现在有些新版本的Linux(如Fedora、Ubuntu、红旗Linux、中软Linux、MandrakeLinux)都可自动挂载文件系统,Red Hat Linux仅可自动挂载光驱。

④ 挂载文件系统如下所示。

[root@locaohost ~]# mkdir -p /mnt/win/c
[root@locaohost ~]# mount -t vfat /dev/hda1 /mnt/win/c
[root@localhost ~]# cd /mnt/win/c
24.s03e01.pdtv.xvid-sfm.rmvb Documents and Settings Program Files
24.s03e02.pdtv.xvid-sfm.rmvb Downloads           Recycled

C盘是原先笔者Windows系统的启动盘。可见,在挂载了C盘之后,可直接访问Windows下的C盘的内容。

⑤ 在使用完该设备文件后可使用命令umount将其卸载。

[root@localhost ~]# umount /mnt/win/c
[root@localhost ~]# cd /mnt/win/c
[root@localhost ~]# ls /mnt/win/c`
可见,此时目录“/mnt/win/c”下为空。Windows下的C盘已被成功卸载。

小知识

在Linux下如何使用U盘呢?
一般U盘为SCSI格式的硬盘,其格式为vfat格式,其设备号可通过“fdisk –l”进行查看,假若设备名为“/dev/sda1”,则可用如下命令将其挂载:

mount -t vfat /dev/sda1 /mnt/usb

若想设置在开机时自动挂载,在文件“/etc/fstab”中加入相应的设置行即可。

2.1.2 文件相关命令

Linux中有关文件的操作非常重要,也非常常用,本节将对Linux系统的文件操作命令进行详细讲解。

1.cd
(1)作用。

改变当前工作目录。

(2)格式。

cd [路径]

其中的路径为要改变的工作目录,可为相对路径或绝对路径。

(3)使用实例。

[root@localhost ~]# cd /home/david/
[root@localhost david]# pwd
[root@localhost david]# /home/david/```
该实例中变更工作目录为“/home/david/”,在后面的“pwd”(显示当前目录)的结果中可以看出。

(4)使用说明。

该命令将当前目录改变至指定路径的目录。若没有指定路径,则回到用户的主目录(例如:“/home/david”为用户david的主目录)。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。
该命令可以使用通配符。
使用“cd –”可以回到前次工作目录。
“./”代表当前目录,“../”代表上级目录。
2.ls
(1)作用。

列出目录和文件的信息。

(2)格式。

ls [选项] [文件]

其中文件选项为指定查看指定文件的相关内容,若未指定文件,默认查看当前目录下的所有文件。

(3)常见参数。

ls主要选项参数见表2.9所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/79f16051f80c6ac1a191f1603a6b80721a24c44e.png" width="" height="">
</div>

(4)使用实例。

[david@localhost test]$ ls -l
total 220
drwxr-xr-x  2 root   root     4096 Mar 31 2005 bin
drwxr-xr-x  3 root   root     4096 Apr 3 2005 boot
-rw-r--r--  1 root   root      0 Apr 24 2002 test.run
`
该实例查看当前目录下的所有文件,并通过选项“-l”显示出详细信息。

显示格式说明如下。

文件类型与权限 链接数 文件属主 文件属组 文件大小 修改的时间 名字

(5)使用说明。

在ls的常见参数中,-l(长文件名显示格式)的选项是最为常见的。可以详细显示出各种信息。
若想显示出所有“.”开头的隐藏文件,可以使用-a,这在嵌入式开发中很常用。
注意

Linux中的可执行文件不是与Windows一样通过文件扩展名来标识的,而是通过设置文件相应的可执行属性来实现的。
3.mkdir
(1)作用。

创建一个目录。

(2)格式。

mkdir [选项] 路径

(3)常见参数。

mkdir主要选项参数如表2.10所示。

d9fabd42d42c4089d954a34b3a5a59287b239d99

(4)使用实例。

[david@localhost ~]$ mkdir -p ./hello/my
[david@localhost ~]$ cd hello/my
[david@localhost my]$ pwd(查看当前目录命令)
/home/david/hello/my```
该实例使用选项“-p”一次创建了./hello/my多级目录。

[david@localhost my]$ mkdir -m 777 ./why
[david@localhost my]$ ls -l
total 4
drwxrwxrwx  2 root   root     4096 Jan 14 09:24 why`
该实例使用改选项“-m”创建了相应权限的目录。对于“777”的权限在本节后面会有详细的说明。

(5)使用说明。

该命令要求创建目录的用户在创建路径的上级目录中具有写权限,并且路径名不能是当前目录中已有的目录或文件名称。

4.cat
(1)作用。

连接并显示指定的一个或多个文件的有关信息。

(2)格式。

cat[选项]文件1文件2…

其中的文件1、文件2为要显示的多个文件。

(3)常见参数。

cat命令的常见参数如表2.11所示。

edb5046192b337a64d8d958852c7edac4f29d61f

(4)使用实例。

[david@localhost ~]$ cat -n hello1.c hello2.c
   1 #include <stdio.h>
   2 void main()
   3 {
   4     printf("Hello!This is my home!\n");
   5 }
   6 #include <stdio.h>
   7 void main()
   8 {
   9     printf("Hello!This is your home!\n");
  10 }```
在该实例中,指定对hello1.c和hello2.c进行输出,并指定行号。

5.cp、mv和rm
(1)作用。

① cp:将给出的文件或目录复制到另一文件或目录中。

② mv:为文件或目录改名或将文件由一个目录移入另一个目录中。

③ rm:删除一个目录中的一个或多个文件或目录。

(2)格式。

① cp:cp [选项] 源文件或目录 目标文件或目录。

② mv:mv [选项] 源文件或目录 目标文件或目录。

③ rm:rm [选项] 文件或目录。

(3)常见参数。

① cp主要选项参数如表2.12所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/0acc584375d77b0b68ea224ab9b567ce16527af7.png" width="" height="">
</div>

② mv主要选项参数如表2.13所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/a3dac154478fec6ce95dd331783c549f597bdcce.png" width="" height="">
</div>

③ rm主要选项参数如表2.14所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/8defbb277b0542988ddeab7737da77d0feba9078.png" width="" height="">
</div>

(4)使用实例。

① cp

[root@www hello]# cp -a ./my/why/ ./ 
[root@www hello]# ls
my why`
该实例使用-a选项将“/my/why”目录下的所有文件复制到当前目录下,而此时在原先目录下还有原有的文件。

② mv

[root@www hello]# mv -i ./my/why/ ./
[root@www hello]# ls
my why```
该实例中把“/my/why”目录下的所有文件移至当前目录,则原目录下文件被自动删除。

③ rm

[root@www hello]# rm –r -i ./why
rm: descend into directory './why'? y
rm: remove './why/my.c'? y
rm: remove directory './why'? y`
该实例使用“-r”选项删除“./why”目录下所有内容,系统会进行确认是否删除。

(5)使用说明。

① cp:该命令把指定的源文件复制到目标文件,或把多个源文件复制到目标目录中。

② mv

该命令根据命令中第二个参数类型的不同(是目标文件还是目标目录)来判断是重命名还是移动文件,当第二个参数类型是文件时,mv命令完成文件重命名,此时,它将所给的源文件或目录重命名为给定的目标文件名;
当第二个参数是已存在的目录名称时,mv命令将各参数指定的源文件均移至目标目录中;
在跨文件系统移动文件时,mv先复制,再将原有文件删除,而连至该文件的链接也将丢失。
③ rm

如果没有使用- r选项,则rm不会删除目录;
使用该命令时一旦文件被删除,它是不能被恢复的,所以最好使用-i参数。
6.chown和chgrp
(1)作用。

① chown:修改文件所有者和组别。

② chgrp:改变文件的组所有权。

(2)格式。

① chown:chown [选项]...文件所有者[所有者组名] 文件

其中的文件所有者为修改后的文件所有者。

② chgrp:chgrp [选项]... 文件所有组 文件

其中的文件所有组为改变后的文件组拥有者。

(3)常见参数。

chown和chgrp的常见参数意义相同,其主要选项参数如表2.15所示。

874ee84c97e9a67d237d3fec266785aaa5f93e83

(4)使用实例。

在笔者的系统中一个文件的所有者原先是这样的。

[root@localhost test]#$ ls -l
-rwxr-xr-x  15 apectel david     4096 6月 4 200X uClinux-dist.tar```
可以看出,这是一个文件,文件拥有者是apectel,具有可读写和执行的权限,它所属的用户组是david,具有可读和执行的权限,但没有可写的权限,同样,系统其他用户对其也只有可读和执行的权限。

首先使用chown将文件所有者改为root。

[root@localhost test]# chown root uClinux-dist.tar
[root@localhost test]# ls –l
-rwxr-xr-x  15 root   david     4096 6月 4 200X uClinux-dist.tar`
可以看出,此时,该文件拥有者变为了root,它所属文件用户组不变。

接着使用chgrp将文件用户组变为root。

[root@localhost test]# chgrp root uClinux-dist.tar
[root@localhost test]# ls –l
-rwxr-xr-x  15 root   root     4096 6月 4 200X uClinux-dist.tar

(5)使用说明。

使用chown和chgrp必须拥有root权限。

小知识

在进行有关文件的操作时,若想避免输入冗长的文件,在文件名没有重复的情况下可以使用输入文件前几个字母+键的方式,即:cd /uC会显示cd /uClinux-list。
7.chmod
(1)作用。

改变文件的访问权限。

(2)格式。

chmod可使用符号标记进行更改和八进制数指定更改两种方式,因此它的格式也有两种不同的形式。

① 符号标记:chmod [选项]…符号权限[符号权限]…文件

其中的符号权限可以指定为多个,也就是说,可以指定多个用户级别的权限,但它们中间要用逗号分开表示,若没有显式指出则表示不作更改。

② 八进制数:chmod [选项] …八进制权限 文件…

其中的八进制权限是指要更改后的文件权限。

(3)选项参数。

b4c9964f53518d0a0cff915ef48ea13f30f63b93

(4)使用实例。

chmod涉及文件的访问权限,在此对相关的概念进行简单的回顾。

在1.3.1节中已经提到,文件的访问权限可表示成:-rwx rwx rwx**。在此设有3种不同的访问权限:读(r)、写(w)和运行(x)。3个不同的用户级别:文件拥有者(u)、所属的用户组(g)和系统里的其他用户(o)。在此,可增加一个用户级别a(all)来表示所有这3个不同的用户级别。

① 第一种符号连接方式的chmod命令中,用加号“+”代表增加权限,用减号“−”代表删除权限,等于号“=”代表设置权限。

例如,原先笔者系统中有文件uClinux20031103.tgz,其权限如下所示。

[root@localhost test]# ls –l
-rw-r--r--  1 root   root   79708616 Mar 24 2005 uClinux20031103.tgz
[root@localhost test]# chmod a+rx,u+w uClinux20031103.tgz
[root@localhost test]# ls –l
-rwxr-xr-x  1 root   root   79708616 Mar 24 2005 uClinux20031103.tgz```
可见,在执行了chmod之后,文件拥有者除拥有所有用户都有的可读和执行的权限外,还有可写的权限。

② 对于第二种八进制数指定的方式,将文件权限字符代表的有效位设为“1”,即“rw-”、“rw-”和“r--”的八进制表示为“110”、“110”、“100”,把这个二进制串转换成对应的八进制数就是6、6、4,也就是说该文件的权限为664(三位八进制数)。这样对于转化后八进制数、二进制及对应权限的关系如表2.17所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/d01932e261c7a6bb1cbdb6433007b0df2465c898.png" width="" height="">
</div>

同上例,原先笔者系统中有文件genromfs-0.5.1.tar.gz,其权限如下所示。

[root@localhost test]# ls –l
-rw-rw-r--  1 david   david    20543 Dec 29 2004 genromfs-0.5.1.tar.gz
[root@localhost test]# chmod 765 genromfs-0.5.1.tar.gz
[root@localhost test]# ls –l
-rwxrw-r-x  1 david   david    20543 Dec 29 2004 genromfs-0.
5.1.tar.gz`
可见,在执行了chmod 765之后,该文件的拥有者权限、文件组权限和其他用户权限都恰当地对应了。

(5)使用说明。

使用chmod必须具有root权限。
boll想一想

chmod o+x uClinux20031103.tgz是什么意思?它所对应的八进制数指定更改应如何表示?
8.grep
(1)作用。

在指定文件中搜索特定的内容,并将含有这些内容的行标准输出。

(2)格式。

grep [选项] 格式 [文件及路径]

其中的格式是指要搜索的内容格式,若默认“文件及路径”则默认表示在当前目录下搜索。

(3)常见参数。

grep主要选项参数如表2.18所示。

f6e2b491d9bff73af24af8caf0422926651808fe

(4)使用实例。

[root@localhost test]# grep "hello" / -r
Binary file ./iscit2005/备份/iscit2004.sql matches
./ARM_TOOLS/uClinux-Samsung/linux-2.4.x/Documentation/s390/Debugging390.txt:hello world$2 = 0
…```
在本例中,“hello”是要搜索的内容,“/ -r”是指定文件,表示搜索根目录下的所有文件。

(5)使用说明。

在默认情况下,“grep”只搜索当前目录。如果此目录下有许多子目录,“grep”会以如下形式列出:“grep:sound:Is a directory”。这会使“grep”的输出难以阅读。但有以下两种解决的方法。
① 明确要求搜索子目录:grep –r(正如上例中所示);

② 忽略子目录:grep -d skip。

当预料到有许多输出时,可以通过管道将其转到“less”(分页器)上阅读:如grep "h" ./ -r |less分页阅读。
grep特殊用法。 grep pattern1|pattern2 files:显示匹配pattern1或pattern2的行; grep pattern1 files|grep pattern2:显示既匹配pattern1又匹配pattern2的行;
0115小知识

在文件命令中经常会使用pattern正则表达式,它是可以描述一类字符串的模式(Pattern),如果一个字符串可以用某个正则表达式来描述,就称这个字符和该正则表达式匹配。这和DOS中用户可以使用通配符“*”代表任意字符类似。在Linux系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替换”操作等。

正则表达式的主要参数如下。

\:忽略正则表达式中特殊字符的原有含义;
^:匹配正则表达式的开始行;
$:匹配正则表达式的结束行;
<:从匹配正则表达式的行开始;
>:到匹配正则表达式的行结束;
[ ]:单个字符,如[A]即A符合要求;
[-]:范围,如[A-Z],即A、B、C一直到Z都符合要求;
。:所有的单个字符;
*:所有字符,长度可以为0。
9.find
(1)作用。

在指定目录中搜索文件,它的使用权限是所有用户。

(2)格式。

find [路径][选项][描述]

其中的路径为文件搜索路径,系统开始沿着此目录树向下查找文件。它是一个路径列表,相互用空格分离。若默认路径,那么默认为当前目录。

其中的描述是匹配表达式,是find命令接受的表达式。

(3)常见参数。

[选项]主要参数如表2.19所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/0b21b86c3e4940218b1aae054ca557ce34a743fa.png" width="" height="">
</div>

(4)使用实例。

[root@localhost test]# find ./ -name hello*.c
./hello1.c
./iscit2005/hello2.c`
在该实例中使用了-name的选项支持通配符。

(5)使用说明。

若使用目录路径为“/”,通常需要查找较多的时间,可以指定更为确切的路径以减少查找时间。
find命令可以使用混合查找的方法,例如,想在/etc目录中查找大于500000字节,并且在24小时内修改的某个文件,则可以使用-and(与)把两个查找参数链接起来组合成一个混合的查找方式,如“find /etc -size +500000c -and -mtime +1”。
10.locate
(1)作用。

用于查找文件。其方法是先建立一个包括系统内所有文件名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。因此其速度比find快很多。

(2)格式。

locate [选项]```
(3)locate主要选项参数如表2.21所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/f846dec784f9106273cbb28e617b9391e924e4b1.png" width="" height="">
</div>

(4)使用实例。

[root@localhost test]# locate issue -U ./
[root@localhost test]# updatedb
[root@localhost test]# locate -r issue*
./ARM_TOOLS/uClinux-Samsung/lib/libpam/doc/modules/pam_issue.sgml
./ARM_TOOLS/uClinux-Samsung/lib/libpam/modules/pam_issue
./ARM_TOOLS/uClinux-Samsung/lib/libpam/modules/pam_issue/Makefile
./ARM_TOOLS/uClinux-Samsung/lib/libpam/modules/pam_issue/pam_issue.c
`
实例中首先在当前目录下建立了一个数据库,并且在更新了数据库之后进行正则匹配查找。通过运行可以发现locate的运行速度非常快。

(5)使用说明。

locate命令所查询的数据库由updatedb程序来更新,而updatedb是由cron daemon周期性建立的,但若所找到的档案是最近才建立或刚改名的,可能会找不到,因为updatedb默认每天运行一次,用户可以由修改crontab配置(etc/crontab)来更新周期值。

11.ln
(1)作用。

为某一个文件在另外一个位置建立一个符号链接。当需要在不同的目录用到相同的文件时,Linux允许用户不用在每一个需要的目录下都存放一个相同的文件,而只需将其他目录下的文件用ln命令链接即可,这样就不必重复地占用磁盘空间。

(2)格式。

ln[选项] 目标 目录

(3)常见参数。

-s建立符号链接(这也是通常惟一使用的参数)。
(4)使用实例。

[root@localhost test]# ln -s ../genromfs-0.5.1.tar.gz ./hello
[root@localhost test]# ls -l
total 77948
lrwxrwxrwx  1 root  root  24 Jan 14 00:25 hello -> ../genromfs-0.5.1.tar.gz```
该实例建立了当前目录的hello文件与上级目录之间的符号链接,可以看见,在hello的ls –l中的第一位为“l”,表示符号链接,同时还显示了链接的源文件。

(5)使用说明。

ln命令会保持每一处链接文件的同步性,也就是说,不论改动了哪一处,其他的文件都会发生相同的变化。
ln的链接分软链接和硬链接两种。
软链接就是上面所说的ln -s ** **,它只会在用户选定的位置上生成一个文件的镜像,不会重复占用磁盘空间,平时使用较多的都是软链接。

硬链接是不带参数的ln ** **,它会在用户选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。

####2.1.3 压缩打包相关命令
Linux中打包压缩的相关命令如表2.22所示,本书以gzip和tar为例进行讲解。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/71880582670e985fc7f7956fc343f09643c66f79.png" width="" height="">
</div>

1.gzip
(1)作用。

对文件进行压缩和解压缩,而且gzip根据文件类型可自动识别压缩或解压缩。

(2)格式。

gzip [选项] 压缩(解压缩)的文件名。

(3)常见参数。

gzip主要选项参数如表2.23所示。

<div style="text-align: center"><img src="https://yqfile.alicdn.com/6860ef794fb98572ac1d018eae83a8e83dbb751e.png" width="" height="">
</div>

(4)使用实例。

[root@localhost test]# gzip portmap-4.0-54.i386.rpm
[root@localhost test]# ls
portmap-4.0-54.i386.rpm.gz
[root@localhost test]# gzip -l portmap-4.0-54.i386.rpm
compressed  uncompressed ratio uncompressed_name
   21437       25751 16.9% portmap-4.0-54.i386.rpm`
该实例将目录下的“hello.c”文件进行压缩,选项“-l”列出了压缩比。

(5)使用说明。

使用gzip压缩只能压缩单个文件,而不能压缩目录,其选项“-d”是将该目录下的所有文件逐个进行压缩,而不是压缩成一个文件。
2.tar
(1)作用。

对文件目录进行打包或解包。

在此需要对打包和压缩这两个概念进行区分。打包是指将一些文件或目录变成一个总的文件,而压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?这是由于在Linux中的很多压缩程序(如前面介绍的gzip)只能针对一个文件进行压缩,这样当想要压缩较多文件时,就要借助它的工具将这些堆文件先打成一个包,然后再用原来的压缩程序进行压缩。

(2)格式。

tar [选项] [打包后文件名]文件目录列表。

tar可自动根据文件名识别打包或解包动作,其中打包后文件名为用户自定义的打包后文件名称,文件目录列表可以是要进行打包备份的文件目录列表,也可以是进行解包的文件目录列表。

(3)主要参数。

tar主要选项参数如表2.24所示。

4b0a23a259a0d439eeadbf8cacbf45704fbeecfd

(4)使用实例。

[root@localhost home]# tar -cvf david.tar david
./david/
./david/.bash_logout
./david/.bash_profile
./david/.bashrc
./david/.bash_history
./david/my/
./david/my/1.c.gz
./david/my/my.c.gz
./david/my/hello.c.gz
./david/my/why.c.gz
[root@localhost home]# ls -l david.tar
-rw-r--r--  1 root   root    10240 Jan 14 15:01 david.tar```
该实例将“david”目录下的文件加以打包,其中选项“-v”在屏幕上输出了打包的具体过程。

[david@localhost david]# tar -zxvf linux-2.6.11.tar.gz
linux-2.6.11/
linux-2.6.11/drivers/
linux-2.6.11/drivers/video/
linux-2.6.11/drivers/video/aty/
`
该实例用选项“-z”调用gzip,与“-x”联用时完成解压缩。

(5)使用说明。

tar命令除了用于常规的打包之外,使用更为频繁的是用选项“-z”或“-j”调用gzip或bzip2(Linux中另一种解压工具)完成对各种不同文件的解压。

表2.25对Linux中常见类型的文件解压命令做一个总结。

e1ed65e006ad8d670e482d29e014f7a6dbf8665e
2.1.4 文件比较合并相关命令

1.diff
(1)作用。

比较两个不同的文件或不同目录下的两个同名文件功能,并生成补丁文件。

(2)格式。

diff[选项] 文件1 文件2

diff比较文件1和文件2的不同之处,并按照选项所指定的格式加以输出。diff的格式分为命令格式和上下文格式,其中上下文格式又包括了旧版上下文格式和新版上下文格式,命令格式分为标准命令格式、简单命令格式及混合命令格式,它们之间的区别会在使用实例中进行详细讲解。当选项默认时,diff默认使用混合命令格式。

(3)主要参数。

diff主要选项参数如表2.26所示。

0cd81bcb5feeee23c7c43682a1b7f71b8bb8cf61

(4)使用实例。

以下有两个文件hello1.c和hello2.c。

/* hello1.c */
#include <stdio.h>
void main()
{
      printf("Hello!This is my home!\n");
}
/* hello2.c */
#include <stdio.h>
void main()
{
      printf("Hello!This is your home!\n");
}```
以下实例主要讲解了各种不同格式的比较和补丁文件的创建方法。

① 主要格式比较。

首先使用旧版上下文格式进行比较。

[root@localhost david]# diff -c hello1.c hello2.c
* hello1.c  Sat Jan 14 16:24:51 2006
--- hello2.c  Sat Jan 14 16:54:41 2006


1,5 *
 #include
 void main()
 {
!    printf("Hello!This is my home!n");
 }
--- 1,5 ----
 #include
 void main()
 {
!    printf("Hello!This is your home!n");
 }`
可以看出,用旧版上下文格式进行输出时,在显示每个有差别行的同时还显示该行的上下3行,区别的地方用“!”加以标出,由于示例程序较短,上下3行已经包含了全部代码。

接着使用新版的上下文格式进行比较。

[root@localhost david]# diff -u hello1.c hello2.c 
--- hello1.c  Sat Jan 14 16:24:51 2006
+++ hello2.c  Sat Jan 14 16:54:41 2006
@@ -1,5 +1,5 @@
 #include <stdio.h>
 void main()
 {
-    printf("Hello!This is my home!\n");
+    printf("Hello!This is your home!\n");
 }```
可以看出,在新版上下文格式输出时,仅把两个文件的不同之处分别列出,而相同之处没有重复列出,这样大大方便了用户的阅读。

接下来使用命令格式进行比较。

[root@localhost david]# diff -e hello1.c hello2.c
4c
     printf("Hello!This is your home!n");`
可以看出,命令符格式输出时仅输出了不同的行,其中命令符“4c”中的数字表示行编号,字母的含义为:a表示添加,b表示删除,c表示更改。因此,-e选项的命令符表示:若要把hello1.c变为hello2.c,就需要把hello1.c的第4行改为显示出的“printf(“Hello!This is your home!n”);”。

选项“-f”和选项“-e”显示的内容基本相同,就是数字和字母的顺序相交换了,从以下的输出结果可以看出。

[root@localhost david]# diff -f hello1.c hello2.c 
c4
     printf("Hello!This is your home!\n");```
在diff选项默认的情况下,输出结果如下所示。

[root@localhost david]# diff hello1.c hello2.c  
4c4

<    printf("Hello!This is my home!n");

    printf("Hello!This is your home!n");`
可以看出,diff默认情况下的输出格式充分显示了如何将hello1.c转化为hello2.c,即通过“4c4”实现。

② 创建补丁文件(也就是差异文件)是diff的功能之一,不同的选项格式可以生成与之相对应的补丁文件,如下面的例子所示。

[root@localhost david]# diff hello1.c hello2.c >hello.patch
[root@localhost david]# vi hello.patch 
4c4
<    printf("Hello!This is my home!\n");
---
>    printf("Hello!This is your home!\n");```
可以看出,使用默认选项创建补丁文件的内容和前面使用默认选项的输出内容是一样的。

小知识

上例中所使用的“>”是输出重定向。通常在Linux上执行一个shell命令行时,会自动打开3个标准文件:标准输入文件(stdin),即通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),前两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,并且将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。这就是通常使用的标准输入/输出方式。

直接使用标准输入/输出文件存在以下问题:首先,用户输入的数据只能使用一次。当下次希望再次使用这些数据时就不得不重新输入。同样,用户对输出信息不能做更多的处理,只能等待程序的结束。

为了解决上述问题,Linux系统为输入、输出的信息传送引入了两种方式:输入/输出重定向机制和管道(在1.3.1的小知识中已有介绍)。其中,输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。同样,输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就可以不显示在屏幕上,而是写入到指定文件中。就如上述例子中所用到的把“diff hello1.c hello2.c”的结果重定向到hello.patch文件中。这就大大增加了输入/输出的灵活性。
2.patch
(1)作用。

命令跟diff配合使用,把生成的补丁文件应用到现有代码上。

(2)格式。

patch [选项] [待patch的文件[patch文件]]。

常用的格式为:patch -pnum [patch文件],其中的-pnum是选项参数,在后面会详细介绍。

(3)常见参数。

patch主要选项参数如表2.27所示。


<div style="text-align: center"><img src="https://yqfile.alicdn.com/d83f98ebb9c68ff0ca174ca2fe089f83b37edad4.png" width="" height="">
</div>

以下对-punm选项进行说明。

首先查看以下示例(对分别位于xc.orig/config/cf/Makefile和xc.bsd/config/cf/Makefile的文件使用patch命令)。

diff -ruNa xc.orig/config/cf/Makefile xc.bsd/config/cf/Makefile`
以下是patch文件的头标记。

--- xc.orig/config/cf/Imake.cf Fri Jul 30 12:45:47 1999
+++ xc.new/config/cf/Imake.cf Fri Jan 21 13:48:44 2000```
这个patch如果直接应用,那么它会去找“xc.orig/config/cf”目录下的Makefile文件,假如用户源码树的根目录是默认的xc而不是xc.orig,则除了可以把xc.orig移到xc处之外,还有什么简单的方法应用此patch吗?NUM就是为此而设的:patch会把目标路径名剥去NUM个“/”,也就是说,在此例中,-p1的结果是config/cf/Makefile,-p2的结果是cf/Makefile。因此,在此例中就可以用命令cd xc;patch _p1 < /pathname/xxx.patch完成操作。

(4)使用实例。

[root@localhost david]# diff hello1.c hello2.c >hello1.patch
[root@localhost david]# patch ./hello1.c < hello1.patch
patching file ./hello1.c
[root@localhost david]# vi hello1.c

include

void main()
{
    printf("Hello!This is your home!n");
}`
在该实例中,由于patch文件和源文件在同一目录下,因此直接给出了目标文件的目录,在应用了patch之后,hello1.c的内容变为了hello2.c的内容。

(5)使用说明。

如果patch失败,patch命令会把成功的patch行补上其差异,同时(无条件)生成备份文件和一个.rej文件。.rej文件里没有成功提交的patch行,需要手工打上补丁。这种情况在源码升级的时候有可能会发生。
在多数情况下,patch程序可以确定补丁文件的格式,当它不能识别时,可以使用-c、-e、-n或者-u选项来指定输入的补丁文件的格式。由于只有GNU patch可以创建和读取新版上下文格式的patch文件,因此,除非能够确定补丁所面向的只是那些使用GNU工具的用户,否则应该使用旧版上下文格式来生成补丁文件。
为了使patch程序能够正常工作,需要上下文的行数至少是2行(即至少是有一处差别的文件)。

2.1.5 网络相关命令

Linux下网络相关的常见命令如表2.28所示,本书仅以ifconfig和ftp为例进行说明。

4515cf17a577fb965ea36ea6d5ee5a23cdfb3e16

1.ifconfig
(1)作用。

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

(2)格式。

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

① ifconfig [选项] [网络接口]:用来查看当前系统的网络配置情况。

② ifconfig 网络接口 [选项] 地址:用来配置指定接口(如eth0、eth1)的IP地址、网络掩码、广播地址等。

(3)常见参数。

ifconfig第二种格式的常见选项参数如表2.29所示。

6db44b229a6a4692dd3af73f883d9b3a34b95079

(4)使用实例。

首先,在本例中使用ifconfig的第一种格式来查看网络接口配置情况。

[root@localhost ~]# ifconfig
eth0   Link encap:Ethernet HWaddr 00:08:02:E0:C1:8A
      inet addr:192.168.1.70 Bcast:192.168.1.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:26931 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3209 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:6669382 (6.3 MiB) TX bytes:321302 (313.7 KiB)
      Interrupt:11

lo     Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:2537 errors:0 dropped:0 overruns:0 frame:0
      TX packets:2537 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:2093403 (1.9 MiB) TX bytes:2093403 (1.9 MiB)```
可以看出,使用ifconfig的显示结果中详细列出了所有活跃接口的IP地址、硬件地址、广播地址、子网掩码、回环地址等。

[root@localhost workplace]# ifconfig eth0
eth0   Link encap:Ethernet HWaddr 00:08:02:E0:C1:8A
      inet addr: 192.168.1.70 Bcast:192.168.1.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:27269 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3212 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:6698832 (6.3 MiB) TX bytes:322488 (314.9 KiB)
      Interrupt:11`
在此例中,通过指定接口显示出对应接口的详细信息。另外,用户还可以通过指定参数“-a”来查看所有接口(包括非活跃接口)的信息。

接下来的示例指出了如何使用ifconfig的第二种格式来改变指定接口的网络参数配置。

[root@localhost ~]# ifconfig eth0 down
[root@localhost ~]# ifconfig
lo    Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:1931 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1931 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:2517080 (2.4 MiB) TX bytes:2517080 (2.4 MiB)```
在此例中,通过将指定接口的状态设置为DOWN,暂时停止该接口的工作。

[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查看中可以看出确实发生了变化。

(5)使用说明。

用ifconfig命令配置的网络设备参数不重启就可生效,但在机器重新启动以后将会失效,除非在网络接口配置文件中进行修改。

2.ftp
(1)作用。

该命令允许用户利用ftp协议上传和下载文件。

(2)格式。

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

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

(3)常见参数。

ftp常见选项参数如表2.30所示。

bef3c0922d1340c60dca3cc4ceb85a783c31f3cf

ftp常见内部命令如表2.31所示。

729a24c080537e5535559fef202614e49ff77672 727fdeecec8870e96771dbbf8d02c4902d6afb59

(4)使用实例。

首先,在本例中使用ftp命令访问“ftp://study.byr.edu.cn”站点。

[root@localhost ~]# ftp study.byr.edu.cn
Connected to study.byr.edu.cn.
220 Microsoft FTP Service
500 'AUTH GSSAPI': command not understood
500 'AUTH KERBEROS_V4': command not understood
KERBEROS_V4 rejected as an authentication type
Name (study.byr.edu.cn:root): anonymous
331 Anonymous access allowed, send identity (e-mail name) as password.
Password:
230 Anonymous user logged in.
Remote system type is Windows_NT.```
0162注意

由于该站点可以匿名访问,因此,在用户名处输入anonymous,在Password处输入任意一个e-mail地址即可登录成功。

ftp> dir
227 Entering Passive Mode (211,68,71,83,11,94).
125 Data connection already open; Transfer starting.
11-20-05 05:00PM   

     Audio
12-04-05 09:41PM         BUPT_NET_Material
01-07-06 01:38PM         Document
11-22-05 03:47PM         Incoming
01-04-06 11:09AM         Material
226 Transfer complete.
以上使用ftp内部命令dir列出了在该目录下文件及目录的信息。

ftp> cd /Document/Wrox/Wrox.Beginning.SQL.Feb.2005.eBook-DDU
250 CWD command successful.
ftp> pwd
257 "/Document/Wrox/Wrox.Beginning.SQL.Feb.2005.eBook-DDU" is current directory.`
以上实例通过cd命令进入相应的目录,可通过pwd命令进行验证。

ftp> lcd /root/workplace
Local directory now /root/workplace
ftp> get d-wbsq01.zip
local: d-wbsq01.zip remote: d-wbsq01.zip
200 PORT command successful.
150 Opening ASCII mode data connection for d-wbsq01.zip(1466768 bytes).
WARNING! 5350 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
1466768 bytes received in 1.7 seconds (8.6e+02 Kbytes/s)```
接下来通过lcd命令首先改变用户的本地工作目录,也就是希望下载或上传的工作目录,接着通过get命令进行下载文件。由于ftp默认使用ASCII模式,因此,若希望改为其他模式如“bin”,直接输入bin即可,如下所示:

ftp> bin
200 Type set to I.
ftp> bye
221`
最后用bye命令退出ftp程序。

(5)使用说明。

若是需要匿名登录,则在“Name (...):”处键入anonymous,在“Password:”处键入自己的E-mail地址即可。
若要传送二进制文件,务必要把模式改为bin。

嵌入式Linux应用程序开发标准教程(第2)》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发Linux基础部分从Linux基础、基本操作命令讲起,为Linux初学者能快速入门提供了保证。接着系统地讲解了嵌入式Linux的环境搭建,以及嵌入式Linux的I/O与文件系统的开发、进程控制开发、进程间通信开发、网络应用开发、基于中断的开发、设备驱动程序的开发以及嵌入式图形界面的开发等,并且还安排了丰富的实验内容与课后实践,使读者能够边学边用,更快更好地掌握所学知识。   《嵌入式Linux应用程序开发标准教程(第2)》可作为高等院校电子类、电气类、控制类等专业高年级本科生、研究生学习嵌入式Linux的教材,也可供希望转入嵌入式领域的科研和工程技术人员参考使用,还可作为嵌入式培训班的教材和参考书。 第1章 Linux快速入门 1.1 嵌入式Linux基础 1.1.1 Linux发展概述 1.1.2 Linux作为嵌入式操作系统的优势 1.1.3 Linux发行本 1.1.4 如何学习Linux 1.2 Linux安装 1.2.1 基础概念 1.2.2 硬件需求 1.2.3 安装准备 1.3 Linux文件及文件系统 1.3.1 文件类型及文件属性 1.3.2 文件系统类型介绍 1.3.3 Linux目录结构 1.4 实验内容——安装Linux操作系统 1.5 本章小结 1.6 思考与练习 第2章 Linux基础命令 2.1 Linux常用命令 2.1.1 用户系统相关命令 2.1.2 文件相关命令 2.1.3 压缩打包相关命令 2.1.4 文件比较合并相关命令 2.1.5 网络相关命令 2.2 Linux启动过程详解 2.2.1 概述 2.2.2 内核引导阶段 2.2.3 init阶段 2.3 Linux系统服务 2.3.1 独立运行的服务 2.3.2 xinetd设定的服务 2.3.3 系统服务的其他相关命令 2.4 实验内容 2.4.1 在Linux下解压常见软件 2.4.2 定制Linux系统服务 2.5 本章小结 2.6 思考与练习 第3章 Linux下C编程基础 3.1 Linux下C语言编程概述 3.1.1 C语言简单回顾 3.1.2 Linux下C语言编程环境概述 3.2 常用编辑器 3.2.1 进入vi 3.2.2 初探emacs 3.3 gcc编译器 3.3.1 gcc编译流程解析 3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理器 3.5.1 makefile基本结构 3.5.2 makefile变量 3.5.3 makefile规则 3.5.4 make管理器的使用 3.6 使用autotools 3.6.1 autotools使用流程 3.6.2 使用autotools所生成的makefile 3.7 实验内容 3.7.1 vi使用练习 3.7.2 用gdb调试程序的bug 3.7.3 编写包含多文件的makefile 3.7.4 使用autotools生成包含多文件的makefile 3.8 本章小结 3.9 思考与练习 第4章 嵌入式系统基础 4.1 嵌入式系统概述 4.1.1 嵌入式系统简介 4.1.2 嵌入式系统发展历史 4.1.3 嵌入式系统的特点 4.1.4 嵌入式系统的体系结构 4.1.5 几种主流嵌入式操作系统分析 4.2 ARM处理器硬件开发平台 4.2.1 ARM处理器简介 4.2.2 ARM体系结构简介 4.2.3 ARM9体系结构 4.2.4 S3C2410处理器详解 4.3 嵌入式软件开发流程 4.3.1 嵌入式系统开发概述 4.3.2 嵌入式软件开发概述 4.4 实验内容——使用JTAG烧写NandFlash 4.5 本章小结 4.6 思考与练习 第5章 嵌入式Linux开发环境的搭建 5.1 嵌入式开发环境的搭建 5.1.1 嵌入式交叉编译环境的搭建 5.1.2 超级终端和minicom配置及使用 5.1.3 下载映像到开发板 5.1.4 编译嵌入式Linux内核 5.1.5 Linux内核源码目录结构 5.1.6 制作文件系统 5.2 U-Boot移植 5.2.1 Bootloader介绍 5.2.2 U-Boot概述 5.2.3 U-Boot源码导读 5.2.4 U-Boot移植主要步骤 5.3 实验内容——创建Linux内核和文件系统 5.4 本章小结 5.5 思考与练习 第6章 文件I/O编程 6.1 Linux系统调用及用户编程接口(API) 6.1.1 系统调用 6.1.2 用户编程接口(API) 6.1.3 系统命令 6.2 Linux中文件及文件描述符概述 6.3 底层文件I/O操作 6.3.1 基本文件操作 6.3.2 文件锁 6.3.3 多路复用 6.4 嵌入式Linux串口应用编程 6.4.1 串口概述 6.4.2 串口设置详解 6.4.3 串口使用详解 6.5 标准I/O编程 6.5.1 基本操作 6.5.2 其他操作 6.6 实验内容 6.6.1 文件读写及上锁 6.6.2 多路复用式串口操作 6.7 本章小结 6.8 思考与练习 第7章 进程控制开发 7.1 Linux进程概述 7.1.1 进程的基本概念 7.1.2 Linux下的进程结构 7.1.3 Linux下进程的模式和类型 7.1.4 Linux下的进程管理 7.2 Linux进程控制编程 7.3 Linux守护进程 7.3.1 守护进程概述 7.3.2 编写守护进程 7.3.3 守护进程的出错处理 7.4 实验内容 7.4.1 编写多进程程序 7.4.2 编写守护进程 7.5 本章小结 7.6 思考与练习 第8章 进程间通信 8.1 Linux下进程间通信概述 8.2 管道 8.2.1 管道概述 8.2.2 管道系统调用 8.2.3 标准流管道 8.2.4 FIFO 8.3 信号 8.3.1 信号概述 8.3.2 信号发送与捕捉 8.3.3 信号的处理 8.4 信号量 8.4.1 信号量概述 8.4.2 信号量的应用 8.5 共享内存 8.5.1 共享内存概述 8.5.2 共享内存的应用 8.6 消息队列 8.6.1 消息队列概述 8.6.2 消息队列的应用 8.7 实验内容 8.7.1 管道通信实验 8.7.2 共享内存实验 8.8 本章小结 8.9 思考与练习 第9章 多线程编程 9.1 Linux线程概述 9.1.1 线程概述 9.1.2 线程机制的分类和特性 9.2 Linux线程编程 9.2.1 线程基本编程 9.2.2 线程之间的同步与互斥 9.2.3 线程属性 9.3 实验内容——“生产者消费者”实验 9.4 本章小结 9.5 思考与练习 第10章 嵌入式Linux网络编程 10.1 TCP/IP概述 10.1.1 OSI参考模型及TCP/IP参考模型 10.1.2 TCP/IP协议族 10.1.3 TCP和UDP 10.2 网络基础编程 10.2.1 socket概述 10.2.2 地址及顺序处理 10.2.3 socket基础编程 10.3 网络高级编程 10.4 实验内容——NTP协议实现 10.5 本章小结 10.6 思考与练习 第11章 嵌入式Linux设备驱动开发 11.1 设备驱动概述 11.1.1 设备驱动简介及驱动模块 11.1.2 设备分类 11.1.3 设备号 11.1.4 驱动层次结构 11.1.5 设备驱动程序与外界的接口 11.1.6 设备驱动程序的特点 11.2 字符设备驱动编程 11.3 GPIO驱动程序实例 11.3.1 GPIO工作原理 11.3.2 GPIO驱动程序 11.4 块设备驱动编程 11.5 中断编程 11.6 按键驱动程序实例 11.6.1 按键工作原理 11.6.2 按键驱动程序 11.6.3 按键驱动的测试程序 11.7 实验内容——test驱动 11.8 本章小结 11.9 思考与练习 第12章 Qt图形编程基础 12.1 嵌入式GUI简介 12.1.1 Qt/Embedded 12.1.2 MiniGUI 12.1.3 Microwindows、TinyX等 12.2 Qt/Embedded开发入门 12.2.1 Qt/Embedded介绍 12.2.2 Qt/Embedded信号和插槽机制 12.2.3 搭建Qt/Embedded开发环境 12.2.4 Qt/Embedded窗口部件 12.2.5 Qt/Embedded图形界面编程 12.2.6 Qt/Embedded对话框设计 12.3 实验内容——使用Qt编写“Hello,World”程序 12.4 本章小结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值