OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3051|回复: 0

《DFZU2EG_4EV MPSoC开发板之嵌入式Linux 驱动开发指南》第二章 Ubuntu系统入门(中)

[复制链接]

1070

主题

1081

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4443
金钱
4443
注册时间
2019-5-8
在线时间
1199 小时
发表于 2023-5-8 15:13:58 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2023-5-6 15:06 编辑

第二章 Ubuntu系统入门

1)实验平台:正点原子 DFZU2EG_4EV MPSoC开发板

2) 章节摘自【正点原子】DFZU2EG_4EV MPSoC开发板之嵌入式Linux 驱动开发指南 V1.0


4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-MPSOC.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)Linux技术交流QQ群:299746173

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

2.4 APT下载工具
对于长时间使用Windows的我们,下载安装软件非常容易,Windows下有很多的下载软件,Ubuntu同样有不少的下载软件,本节我们讲解Ubuntu下我们用的最多的下载工具:APT下载工具,APT下载工具可以实现软件自动下载、配置、安装二进制或者源码的功能。APT下载工具和我们前面讲解的“install”命令结合在一起构成了Ubuntu下最常用的下载和安装软件方法。它解决了Linux平台下一安装软件的一个缺陷,即软件之间相互依赖。

APT采用的C/S模式,也就是客户端/服务器模式,我们的PC机作为客户端,当需要下载软件的时候就向服务器请求,因此我们需要知道服务器的地址,也叫做安装源或者更新源。

打开“软件和更新”设置,打开方式如下图所示:                     

image001.png
图2.4.1.1 打开软件和更新设置


打开以后的界面如下图所示:
image003.png
图2.4.1.2 软件和更新设置

在上图中的“Ubuntu软件”选项卡下面的“下载自”就是APT工具的安装源,因为我们是在中国,所以需要选择中国的服务器,否则的话可能会导致下载失败!这个也就是网上说的Ubuntu安装成功以后要更新源。

在我们使用APT工具下载安装或者更新软件的时候,首先会在下载列表中与本机软件对比,看一下需要下载哪些软件,或者升级哪些软件,默认情况下APT会下载最新的软件包,被安装的软件包所依赖的其它软件也会被下载安装。说了这么多,APT下载工具究竟怎么用呢?APT工具常用的命令如下:

1、更新本地数据库
如果想查看本地哪些软件可以更新的话可以使用如下命令:
  1. sudo apt-get update
复制代码
这个命令会访问源地址,并且获取软件列表并保存在本电脑上,过程如下图所示:
image005.png
图2.4.1.3更新本地数据库

2、检查依赖关系
有时候本地某些软件可能存在依赖关系,所谓依赖关系就是A软件依赖于B软件。通过如下命令可以查看依赖关系,如果存在依赖关系的话APT会提出解决方案:
  1. sudo apt-get check
复制代码
上述命令的执行结果如下图所示:
image007.png
图2.4.1.4检查依赖关系

3、软件安装
这个是重点了,安装软件,使用如下命令:
  1. sudo apt-get install package-name
复制代码
可以看出上述命令是由“apt-get”和“install”组合在一起的,“package-name”就是要安装的软件名字,“apt-get”负责下载软件,“install”负责安装软件。比如我们要安装软件Ubuntu下的串口工具“minicom”,我们就可以使用如下命令:
  1. sudo apt-get install minicom
复制代码
执行上述命令以后就会自动下载和安装minicom软件,如下图所示:
image009.png
图2.4.1.5安装minicom软件

上图就是安装minicom这个软件的过程,在安装的过程中,会有如下所示询问:
  1. 您希望继续执行吗?[Y/n]
复制代码
如果希望继续执行的话就输入y,如果不希望继续执行的话就输入n。安装完成以后我们直接在终端输入如下命令打开minicom这个串口软件:
  1. minicom -s
复制代码
打开以后的minicom软件如下图所示:
image011.png
图2.4.1.6 minicom软件

关于minicom的使用大家可以上网搜索一下,这里就不详细讲解了,要退出minicom可以直接按下ESC键。

注:推荐使用apt替代apt-get。

4、软件更新
有时候我们需要更新软件,更新软件的话使用命令:
  1. sudo apt-get upgrade package-name
复制代码
其中package-name为要升级的软件名字,比如我们升级刚刚安装的minicom这个软件,如下图所示:
image013.png
图2.4.1.5 更新minicom软件

从上图可以看出,minicom已经是最新的了,不用更新,不过有其它软件需要更新,因此会自动更新其它的软件。

5、卸载软件
如果要卸载某个软件的话使用如下命令:
  1. sudo apt-get remove package-name
复制代码
其中package-name是要卸载的软件,比如卸载前面安装的minicom这个软件,操作如下图所示:
image015.png
图2.4.1.6 卸载软件

从上图中可以看出软件minicom被卸载掉了。关于APT下载工具就讲解到这里,我们用的最多的就是“sudo apt-get install package-name”来下载和安装软件。有关Ubuntu其它的安装软件的方法打开可以自行上网查阅学习,这里就不一一详解了。

2.5 Ubuntu下文本编辑
2.5.1 Gedit编辑器
进行文本编辑是最常用的操作,Windows下我们会使用记事本来完成,或者其它一些优秀的文本编辑器,比如notepad++,Ubuut下有一个自带的文本编辑器,那就是Gedit。Gedit是一个窗口式的编辑器,关于Gedit的使用前面我们已经讲解了。本节我们重点讲解的是另外一个编辑器:VI/VIM编辑器。

2.5.2 VI/VIM编辑器
我们如果要在终端模式下进行文本编辑或者修改文件就可以使用VI/VIM编辑器,Ubuntu自带了VI编辑器,但是VI编辑器对于习惯了Windows下进行开发的人来说不方便,比如竟然不能使用键盘上的上下左右键调整光标位置。因此我推荐大家使用VIM编辑器,VIM编辑器是VI编辑器升级版本,VI/VIM编辑器都是一种基于指令式的编辑器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作。

我们需要先安装VIM编辑器,命令如下:
  1. sudo apt-get install vim
复制代码
安装完成以后就可以使用VIM编辑器了,VIM编辑器有3中工作模式:输入模式、指令模式和底行模式,通过切换不同的模式可以完成不同的功能,我们就以编辑一个文本文档为例讲解VIM编辑器的使用。打开终端,输入命令:vi test.txt,如下图所示:
image017.png
图 2.5.1新建test.txt文档

在终端中输入上图中所示的命令以后就会创建一个test.txt文档,并且用VIM打开了,如下图所示:
image019.png
图2.5.2 VIM打开的test.txt文档

我们试着在上图中输入数字,发现根本没法输入,这不是因为你的键盘坏了。因为VIM默认是以只读模式打开的文档,因此我们要切换到输入模式,切换到输入模式的命令如下:
i      在当前光标所在字符的前面,转为输入模式。
I     在当前光标所在行的行首转换为输入模式。
a    在当前光标所在字符的后面,转为输入模式。
A   在光标所在行的行尾,转换为输入模式。
o    在当前光标所在行的下方,新建一行,并转为输入模式。
O   在当前光标所在行的上方,新建一行,并转为输入模式。
s     删除光标所在字符。
r    替换光标处字符。

最常用的就是“a”,我们在图 2.5.2中按下键盘上的“a”键,这时候终端左下角会提示“插入”字样,表示我们进入到了输入模式,如下图所示:
image021.png
图 2.5.3切换到插入模式

上图表明我们可以正常输入文本了,我们可以输入图 2.5.4所示文本:
image023.png
图2.5.4输入文本

在上图中我们在test.txt中输入了字母、数字和中文,我们输入完成以后需要保存文本啊,Windows下的记事本可以使用快捷键Ctrl+S来保存,VIM是否也可以使用Ctrl+S来保存呢?你会发现当你按下Ctrl+S键以后你的终端不能操作了!!!这是因为在Ubuntu下Ctrl+S快捷键不是用来完成保存的功能的,而是暂停该终端!所以你一旦在使用终端的时候按下Ctrl+S快捷键,那么你的终端肯定不会再有任何反应,如果你按下Ctrl+S关闭了当前终端的话可以按下Ctrl+Q来重新打开终端。
既然Ctrl+S不能保存文本文档,那么有没有其它方法保存文本文档呢?肯定是有的,我们需要从VIM现在的输入模式切换到指令模式,方式就是按下键盘的ESC键,按下ESC键以后终端坐下角的“插入”字样就会消失,此时你就不能在输入任何文本了,如果想再次输入文本的话就按下“a”键重新进入到输入模式。指令模式顾名思义就是输入指令的模式,这些指令是控制文本的指令,我们将这些指令进行分类,如下所示:
1、移动光标指令:
h(或左方向键) 光标左移一个字符。
l(或右方向键)          光标右移一个字符。
j(或下方向键)  光标下移一行。
k(或上方向键) 光标上移一行。
nG                      光标移动到第n行首。
n+                       光标下移n行。
n-                        光标上移n行。

2、屏幕翻滚指令
Ctrl+f                屏幕向下翻一页,相当于下一页。
Ctrl+b                屏幕向上翻一页,相当于上一页。
3、复制、删除和粘贴指令
cc                        删除整行,并且修改整行内容。
dd                       删除改行,不提供修改功能。
ndd                           删除当前行向下n行。
x                         删除光标所在的字符。
X                        删除光标前面的一个字符。
nyy                            复制当前行及其下面n行。
p                         粘贴最近复制的内容。

上面就是VI/VIM的命令模式下最常用的一些命令,还有一些不常用的我没有列出来,感兴趣的可以自行上网查阅。从上面的命令可以看出,并没有保存文本的命令,那是因为保存文档的命令是在底行模式中,我们要先进入到指令模式,进入底行模式的方式是先进入指令模式下,然后在指令模式下输入“:”进入底行模式,如下图所示:
image025.png
图 2.5.5 “:”底行模式

在上图中当进入底行模式以后会在终端的左下角就会出现符号“:”,我们可以在“:”后面输入命令,常用的命令如下:
x    保存当前文档并且退出。
q    退出。
w   保存文档。
q!   退出VI/VIM,不保存文档。

如果我们要退出并保存文本的话需要在“:”底行模式下输入“wq”,如下图所示:
image027.png
图 2.5.6保存并退出VIM

在“:”底行模式下输入“wq”以后按下回车键就保存test.txt并退出VI/VIM编辑器,退出以后我们可以使用命令“cat”来查看刚刚新建的test.txt文档的内容,如下图所示:
image029.png
图 2.5.7查看文档内容

从上图中可以看出,test.txt中的内容就是我们用VIM输入的内容,至此我们就完整的进行了一遍VI/VIM创建文档、编辑文档和保存文档。

在上面讲解进入VIM的底行模式的时候使用了在指令模式下输入“:”的方法,还可以在指令模式下输入“/”进入底行模式,输入“/”以后如下图所示。
image031.png
图 2.5.8“/”底行模式

在“/”底行模式下我们可以在文本中搜索指定的内容,比如搜索test.txt文件中“嵌入式”三个字,使用方法如下图所示:
image033.png
图 2.5.9搜索文本

在“/”后面输入要搜索的内容,然后按下回车键就会在test.txt中找到与字符串“嵌入式”匹配的部分,如下图所示:
image035.png
图 2.5.10查找到指定内容

从上图中可以看出,在test.txt中找到了“嵌入式”这个词,并且标记出来位置。我们以后要在一个文档中搜素是否存在某个字符串的时候就可以使用这种方法。有关VI/VIM编辑器的讲解就到这里,我们完整的练习了一遍如何使用VIM创建文档、编辑文档、保存文档和在文档中搜索字符串。有关更多更详细的VIM编辑器的操作大家自行上网查阅相关文档和博客。

2.6 Linux文件系统
操作系统的基本功能之一就是文件管理,而文件的管理是由文件系统来完成的。Linux支持多种文件系统,本节我们就来讲解Linux下的文件系统、文件系统类型、文件系统结构和文件系统相关Shell命令。

2.6.1 Linux文件系统简介以及类型
1、Linux文件系统简介
操作系统就是处理各种数据的,这些数据在硬盘上就是二进制,人类肯定不能直接看懂这些二进制数据,要有一个翻译器,将这些二进制的数据还原为人类能看懂的文件形式,这个工作就是由文件系统来完成的,文件系统的目的就是实现数据的查询和存储,由于使用场合、使用环境的不同,Linux有多种文件系统,不同的文件系统支持不同的体系。文件系统是管理数据的,而可以存储数据的物理设备有硬盘、U盘、SD卡、NAND FLASH、NOR FLASH、网络存储设备等。不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理NAND FLASH的话使用YAFFS文件系统,管理硬盘、SD卡的话就是ext文件系统等等。

我们在使用Windows的时候新买一个硬盘回来一般肯定是将这个硬盘分为好几个盘,比如C盘、D盘等。这个叫磁盘的分割,Linux下也支持磁盘分割,Linux下常用的磁盘分割工具为:fdisk,fdisk这个工具我们后面会详细讲解怎么用,因为我们移植Linux的时候需要将SD卡分为两个分区来存储不同的东西。在Windows下我们创建一个新的盘符以后都要做格式化处理,格式化其实就是给这个盘符创建文件系统的过程,我们在Windows格式化某个盘的时候都会让你选择文件系统,如下图所示:
image037.png
图 2.6.1格式化磁盘

上图就是格式化磁盘的时候选择的文件系统,Windows下一般有FAT、NTFS和exFAT这些文件系统。同样的,在Linux下我们使用fdisk创建好分区以后也是要先在创建好的分区上面创建文件系统,也就是格式化。

在Windows下有磁盘分区的概念,比如C,D,E盘等,在Linux下没有这个概念,因此Linux下你找不到像C、D、E盘这样的东西。前面我们说了Linux下可以给磁盘分割,但是没有C、D、E盘那怎么访问这些分区呢?在Linux下创建一个分区并且格式化好以后我们要将其“挂载”到一个目录下才能访问这个分区。Windows的文件系统挂载过程是其内部完成的,用户是看不到的,Linux下我们使用mount命令来挂载磁盘。挂载磁盘的时候是需要确定挂载点的,也就是你的这个磁盘要挂载到哪个目录下。

2、Linux文件系统类型
前面我们说了,在Windows下有FAT、NTFS和exFAT这样的文件系统,在Linux下又有哪些文件系统呢,Linux下的文件系统主要有ext2、ext3、ext4等文件系统。Linux还支持其他的UNIX文件系统,比如XFS、JFS、UFS等,也支持Windows的FAT文件系统和网络文件系统NFS等。这里我们主要讲一下Linux自带的ext2、ext3和ext4文件系统。

ext2文件系统:
ext2是Linux早期的文件系统,但是随着技术的发展ext2文件系统已经不推荐使用了,ext2是一个非日志文件系统,大多数的Linux发行版都不支持ext2文件系统了。

ext3文件系统:
ext3是在ext2的基础上发展起来的文件系统,完全兼容ext2文件系统,ext3是一个日志文件系统,ext3支持大文件,ext3文件系统的特点有如下:
高可靠性:使用ext3文件系统的话,即使系统非正常关机、发生死机等情况,恢复ext3文件系统也只需要数十秒。
数据完整性:ext3提高了文件系统的完整性,避免意外死机或者关机对文件系统的伤害。
文件系统速度:ext3的日志功能对磁盘驱动器读写头进行了优化,文件系统速度相对与ext2来说没有降低。
数据转换:从ext2转换到ext3非常容易,只需要两条指令就可以完成转换。用户不需要花时间去备份、恢复、格式化分区等,用ext3文件系统提供的工具tune2fs即可轻松的将ext2文件系统转换为ext3日志文件系统。ext3文件系统不需要经过任何修改,可以直接挂载成ext2文件系统。

ext4文件系统:
ext4文件系统是在ext3上发展起来的,ext4相比与ext3提供了更佳的性能和可靠性,并且功能更丰富,ext4向下兼容ext3和ext2,因此可以将ext2和ext3挂载为ext4。那么我们安装的Ubuntu使用的哪个版本的文件系统呢?在终端中输入如下命令来查询当前磁盘挂载的是啥文件系统:
  1. df  -T –h
复制代码
结果如下图所示:
image039.png
图2.6.2 Ubuntu使用的文件系统

在图 2.6.2中,框起来的就是我们安装Ubuntu的这个磁盘,在Linux下一切皆为文件,“/dev/sda1”就是我们的磁盘分区,可以看出这个磁盘分区类型是ext4,它的挂载点是“/”,也就是根目录。

2.6.2 Linux文件系统结构
在Windows下直接打开C盘,我们进入的就是C盘的根目录,打开D盘进入的就是D盘的根目录,比如C盘根目录如下:
image041.png
图 2.6.3 C盘根目录

在Linux下因为没有C、D盘之说,因此Linux只有一个根目录,没有C盘根目录、D盘根目录之类的。其实如果你的Windows只有一个C盘的话那么整个系统也就只有一个根目录。

Windows下的C盘根目录就是“C:”,在Linux下的根目录就是“/”,你没有看错,Linux根目录就是用“/”来表示的,打开Ubuntu的文件浏览器,文件浏览器在左侧的导航栏,图标如下图所示:
image043.png
图 2.6.4文件浏览器

打开以后的文件浏览器如图 2.6.5所示:
image045.png
图2.6.5文件浏览器

直接打开文件浏览器以后,我们默认不是处于根目录中的,不像Windows,我们直接打开C盘就处于C盘根目录下。Ubuntu是支持多用户的,Ubuntu为每个用户创建了一个根目录,比如我电脑现在登陆的是“zuozhongkai”这个用户,因此默认进入的是“zuozhongkai”这个用户的根目录。我们点击图 2.6.5中左侧的“其他位置”,打开以后如图 2.6.6所示:
image047.png
图2.6.6根目录“/”

图2.6.6就是Ubuntu的根目录“/”,这时候肯定就有人有疑问,刚刚说Ubuntu会给每个用户创建一个根目录,那这些用户的根目录在哪里?是不是和根目录“/”是一个地位的?其实所谓的给每个用户创建一个根目录只是方便说而已,这个所谓的用户根目录其实就是“/”下的一个文件夹,以我的“zuozhongkai”这个用户为例,其用户根目录就是:/home/zuozhongkai。只要你创建了一个用户,那么系统就会在/home这个目录下创建一个以这个用户名命名的文件夹,这个文件夹就是这个用户的根目录。

用户可以对自己的用户根目录下的文件进行随意的读写操作,但是如果要修改根目录“/”下的文件就会提示没有权限。打开终端以后默认进入的是当前用户根目录,比如我们打开终端以后输入“ls”命令查看当前目录下有什么文件,结果如图 2.6.7所示:
image049.png
图2.6.7目录查看

可以看出图 2.6.7中的文件和图 2.6.5中的一模一样,都是“zuozhongkai”这个账户的根目录。我们来看一下根目录“/”下都有哪些文件,在终端中输入如下命令:
  1. cd  /      //进入到根目录“/
  2. ls            //查看根目录“/”下的文件以及文件夹
复制代码
执行上述两行命令以后,终端如所示:
image051.png
图2.6.8查看根目录“/”

图2.6.8中列举出了根目录“/”下面的所有文件夹,这里我们仔细观察一下,当我们进入到根目录“/”里面以后终端提示符“$”前面的符号“~”变成了“/”,这是因为当我们在终端中切换了目录以后“$”前面就会显示切换以后的目录路径。我们来看一下根目录“/”中的一些重要的文件夹:
/bin       存储一些二进制可执行命令文件,/usr/bin也存放了一些基于用户的命令文件。
/sbin     存储了很多系统命令,/usr/sbin也存储了许多系统命令。
/root     超级用户root的根目录文件。
/home   普通用户默认目录,在该目录下,每个用户都有一个以本用户名命名的文件夹。
/boot     存放Ubuntu系统内核和系统启动文件。
/mnt     通常包括系统引导后被挂载的文件系统的挂载点。
/dev      存放设备文件,我们后面学习Linux驱动主要是跟这个文件夹打交道的。
/etc       保存系统管理所需的配置文件和目录。
/lib        保存系统程序运行所需的库文件,/usr/lib下存放了一些用于普通用户的库文件。
/lost+found  一般为空,当系统非正常关机以后,此文件夹会保存一些零散文件。
/var      存储一些不断变化的文件,比如日志文件
/usr       包括与系统用户直接有关的文件和目录,比如应用程序和所需的库文件。
/media  存放Ubuntu系统自动挂载的设备文件。
/proc    虚拟目录,不实际存储在磁盘上,通常用来保存系统信息和进程信息。
/tmp     存储系统和用户的临时文件,该文件夹对所有的用户都提供读写权限。
/opt       可选文件和程序的存放目录。
/sys       系统设备和文件层次结构,并向用户程序提供详细的内核数据信息。

2.6.3 文件操作命令
本节我们来学习一下在终端进行文件操作的一些常用命令:
1、创建新文件命令—touch
在前面学习VIM的时候我们知道可以用vi指令来创建一个文本文档,本节我们就学习一个功能更全面的文件创建命令—touch。touch不仅仅可以用用来创建文本文档,其它类型的文档也可以创建,命令格式如下:
  1. touch      [参数]     [文件名]
复制代码
使用touch创建文件的时候,如果[文件名]的文件不存在,那就直接创建一个以[文件名]命名的文件,如果[文件名]文件存在的话就仅仅修改一下此文件的最后修改日期,常用的命令参数如下:
-a   只更改存取时间。
-c   不建立任何文件。
-d<日期>    使用指定的日期,而并非现在日期。
-t<时间>            使用指定的时间,而并非现在时间。
进入到用户根目录下,直接使用命令“cd ~”即可快速进入用户根目录,进入用户根目录以后使用touch命令创建一个名为test的文件,创建过程如图 2.6.9所示:
image053.png
图2.6.9 touch命令操作

2、文件夹创建命令—mkdir
既然可以创建文件,那么肯定也可以创建文件夹,创建文件夹使用命令“mkdir”,命令格式如下:
  1. mkdir     [参数]    [文件夹名目录名]
复制代码
主要参数如下:
-p   如所要创建的目录其上层目录目前还未创建,那么会一起创建上层目录。

我们在用户根目录下创建两个分别名为“testdir1”和“testdir2”的文件夹,操作如图 2.6.10所示:
image055.png
图2.6.10创建文件夹

在图 2.6.10中,我们使用命令“mkdir”创建了“testdir1”和“testdir2”这两个文件夹。

3、文件及目录删除命令—rm
既然有创建文件的命令,那肯定有删除文件的命令,要删除一个文件或者文件夹可以使用命令“rm”,此命令可以完成删除一个文件或者多个文件及文件夹,它可以实现递归删除。对于链接文件,只删除链接,原文件保持不变,所谓的链接文件,其实就是Windows下的快捷方式文件,此命令格式如下:
  1. rm  [参数]     [目的文件或文件夹目录名]
复制代码
命令主要参数如下:
-d   直接把要删除的目录的硬连接数据删成0,删除该目录。
-f   强制删除文件和文件夹(目录)。
-i    删除文件或者文件夹(目录)之前先询问用户。
-r   递归删除,指定文件夹(目录)下的所有文件和子文件夹全部删除掉。
-v   显示删除过程。
我们使用rm命令来删除前面使用命令“touch”创建的test文件,操作过程如图 2.6.11所示:
image057.png
图2.6.11删除文件

命令“rm”也可以直接删除文件夹,我们可以试一下删除前面创建的testdir1文件夹,先直接使用命令“rm testdir1”测试一下是否可以删除,结果如图 2.6.12所示:
image059.png
图2.6.12删除文件夹

在图 2.6.12中可以看出,直接使用命令“rm”是无法删除文件夹(目录)的,我们需要加上参数“-rf”,也就是强制递归删除文件夹(目录),操作结果如图 2.6.13所示:
image061.png
图2.6.13带参数删除文件夹

从图 2.6.13可以看出,当在命令“rm”中加入参数“-rf”以后就可以删除掉文件夹“testdir1”了。

4、文件夹(目录)删除命令—rmdir
上面我们讲解了如何使用命令“rm”删除文件夹,那就是要加上参数“-rf”,其实Linux提供了直接删除文件夹(目录)的命令—rmdir,它可以不加任何参数的删除掉指定的文件夹(目录),命令格式如下:
  1. rmdir [参数] [文件夹(目录)]
复制代码
命令主要参数如下:
-p   删除指定的文件夹(目录)以后,若上层文件夹(目录)为空文件夹(目录)的话就将其一起删除。

我们使用命令“rmdir”删除掉前面创建的“testdir2”文件夹,操作过程如图 2.6.14所示:
image063.png
图 2.6.14命令rmdir删除文件夹

5、文件复制命令—cp
在Windows下我们可以通过在文件上点击鼠标右键来进行文件的复制和粘贴,在Ubuntu下我们也可以通过点击文件右键进行文件的复制和粘贴。但是本节我们来讲解如何在终端下使用命令来进行文件的复制,Linux下的复制命令为“cp”,命令描述如下:
  1. cp   [参数]     [源地址]        [目的地址]
复制代码
主要参数描述如下:
-a   此参数和同时指定“-dpR”参数相同
-d   在复制有符号连接的文件时,保留原始的连接。
-f   强行复制文件,不管要复制的文件是否已经存在于目标目录。
-I   覆盖现有文件之前询问用户。
-p   保留源文件或者目录的属性。
-r或-R 递归处理,将指定目录下的文件及子目录一并处理

我们在用户根目录下,使用前面讲解的命令“mkdir”创建两个文件夹:test1和test2,过程如图 2.6.15所示。
image065.png
图2.6.15创建test1和test2两个文件夹

进入上面创建的test1文件夹,然后在test1文件夹里面创建一个a.c文件,操作过程如图 2.6.16所示:
image067.png
图2.6.16创建a.c文件

我们先将图 2.6.16中的a.c这个文件做个备份,也就是复制到同文件夹test1里面,新的文件命名为b.c。然后在将test1文件夹中的a.c和b.c这两个文件都复制到文件夹test2中,操作如图 2.6.17所示
image069.png
图2.6.17拷贝文件

在图 2.6.17中,我们添加了一些高级使用技巧,首先是拷贝a.c和b.c文件到test2文件夹中,我们使用了通配符“*”,“*.c”就表示test1下的所有以“.c”结尾的文件,也就是a.c和b.c。“../test2”中的“../”表示上级目录,因此“../test2”就是上级目录下的test2文件夹。

上面都是文件复制,我们接下来学习一下文件夹复制,我们将test2文件夹复制到同目录下,新拷贝的文件夹命名为test3,操作如图 2.6.18所示:
image071.png
图2.6.18拷贝文件夹

6、文件移动命令—mv
有时候我们需要将一个文件或者文件夹移动到另外一个地方去,或者给一个文件或者文件夹进行重命名,这个时候我们就可以使用命令“mv”了,此命令格式如下:
  1. mv   [参数]     [源地址]        [目的地址]
复制代码
主要参数描述如下:
-b   如果要覆盖文件的话覆盖前先进行备份。
-f   若目标文件或目录与现在的文件重复,直接覆盖目标文件或目录。
-I   在覆盖之前询问用户。

使用上面讲解“cp”命令的时候创建了三个文件夹,在上面创建的test1文件夹里面创建一个c.c文件,然后将c.c这个文件重命名为d.c。最后将d.c这个文件移动到test2文件夹里面,操作如下图所示:
image073.png
图 2.6.19移动文件操作

我们再将test1中的d.c文件移动到test2文件夹里面,操作如下图所示:
image075.png
图 2.6.20移动文件操作

2.6.4 文件压缩和解压缩
文件的压缩和解压缩是非常常见的操作,在Windows下我们有很多压缩和解压缩的工具,比如zip、360压缩等等。在Ubuntu下也有压缩工具,本节我们学习Ubuntu下图形化以及命令行这两种压缩和解压缩操作。

1、图形化压缩和解压缩
图形化压缩和解压缩和Windows下基本一样,在要压缩或者解压的文件上点击鼠标右键,然后选择要进行的操作,我们先讲解一下如何进行文件的压缩。首先找到要压缩的文件,然后在要压缩的文件上点击鼠标右键,选择“压缩”选项,如下图所示:
image077.png
图 2.6.21文件压缩

在上图中我们要对test2这个文件夹进行压缩,点击“压缩”以后会弹出下图所示界面让选择压缩后的文件名和压缩格式。
image079.png
图 2.6.22压缩命名和格式选择

在上图中,设置好压缩以后的文件名,然后选择压缩格式,可选的压缩格式如下图所示:
image081.png
图 2.6.23可选压缩格式

从上图中可以看出,可以选择的压缩格式只有三个。这是因为这三个压缩格式与所有系统兼容。挑选一个格式进行压缩,比如我选择的“.zip”这个格式,压缩完成以后如下图所示:
image083.png
图 2.6.24压缩完成的文件

上面就是使用图形化进行文件压缩的过程,我们接下来对刚刚压缩的test2.zip进行解压缩,鼠标放到test2.zip上然后点击鼠标右键,选择“提取到此处”,如下图所示:
image085.png
图 2.6.25解压缩文件

点击上图中的“提取到此处”以后,系统就会自动进行解压缩,上面就是在Ubuntu中使用图形化工具进行文件的压缩和解压缩。

2、命令行进行文件的压缩和解压缩
上面我们学习了如何使用图形化工具在Ubuntu下进行文件的压缩和解压缩,本节我们学学如何使用命令行进行压缩和解压缩,我们后面的开发中所有涉及到压缩和解压缩的操作都是在命令行下完成的。命令行下进行压缩和解压缩常用的命令有三个:zip、unzip和tar,我们依次来学习:
、命令zip
zip命令看名字就知道是针对.zip文件的,用于将一个或者多个文件压缩成一个.zip结尾的文件,命令格式如下:
  1. zip  [参数]    [压缩文件名.zip]    [被压缩的文件]
复制代码
主要参数函数如下:
-b<工作目录>         指定暂时存放文件的目录。
-d   从 zip 文件中删除一个文件。
-F  尝试修复已经损毁的压缩文件。
-g  将文件压缩入现有的压缩文件中,不需要新建压缩文件。
-h  帮助。
-j    只保存文件的名,不保存目录。
-m       压缩完成以后删除源文件。
-n<字尾符号> 不压缩特定扩展名的文件。
-q  不显示压缩命令执行过程。
-r 递归压缩,将指定目录下的所有文件和子目录一起压缩。
-v  显示指令执行过程。
-num    压缩率,为1~9的数值。

上面讲解了如何使用图形化压缩工具对文件夹test2进行压缩,这里我们使用命令“zip”对test2文件夹进行压缩,操作如下图所示:
image087.png
图 2.6.26使用zip进行文件压缩

上图就是使用zip命令进行test2文件夹的压缩,我们使用的命令如下:
  1. zip  -rv  test2.zip  test2
复制代码
上述命令中,-rv表示递归压缩并且显示压缩命令执行过程。

命令unzip
unzip命令用于对.zip格式的压缩包进行解压,命令格式如下:
  1. unzip      [参数]     [压缩文件名.zip]
复制代码
主要参数如下:
-l    显示压缩文件内所包含的文件。
-t 检查压缩文件是否损坏,但不解压。
-v  显示命令显示的执行过程。
-Z        只显示压缩文件的注解。
-C  压缩文件中的文件名称区分大小写。
-j    不处理压缩文件中的原有目录路径。
-L  将压缩文件中的全部文件名改为小写。
-n   解压缩时不要覆盖原有文件。
-P<密码>   解压密码。
-q   静默执行,不显示任何信息。
-x<文件列表>         指定不要处理.zip中的哪些文件。
-d<目录>    把压缩文件解到指定目录下。

对上面压缩的test2.zip文件使用unzip命令进行解压缩,操作如下图所示:
image089.png
图 2.6.27命令unzip使用演示

、命令tar
我们前面讲的zip和unzip这两个是命令只适用于.zip格式的压缩和解压,其它压缩格式就用不了了,比如Linux下最常用的.bz2和.gz这两种压缩格式。其它格式的压缩和解压使用命令tar,tar将压缩和解压缩集合在一起,使用不同的参数即可,命令格式如下:
  1. tar   [参数]     [压缩文件名]        [被压缩文件名]
复制代码
常用参数如下:
-c   创建新的压缩文件。
-C<目的目录>  切换到指定的目录。
-f<备份文件>          指定压缩文件。
-j    用tar生成压缩文件,然后用bzip2进行压缩。
-k   解开备份文件时,不覆盖已有的文件。  
-m  还原文件时,不变更文件的更改时间。
-r   新增文件到已存在的备份文件的结尾部分。
-t    列出备份文件内容。
-v   显示指令执行过程。
-w  遭遇问题时先询问用户。
-x   从备份文件中释放文件,也就是解压缩文件。
-z   用tar生成压缩文件,用gzip压缩。
-Z  用tar生成压缩文件,用compress压缩。

使用tar命令来进行.zip和.gz格式的文件压缩,操作如下图所示:
image091.png
图 2.6.28 tar命令进行压缩

在上图中,我们使用如下两个命令将test1文件夹压缩为.bz2和.gz这两个格式:
  1. tar -vcjf  test1.tar.bz2  test1
  2. tar -vczf  test1.tar.gz   test1
复制代码
在上面两行命令中,-vcjf表示创建bz2格式的压缩文件,-vczf表示创建.gz格式的压缩文件。学习了如何使用tar命令来完成压缩,我们再来学习使用tar命令完成文件的解压,操作如下图所示:
image093.png
图 2.6.29 tar解压缩命令

上图中我们使用如下所示两行命令完成.bz2和.gz格式文件的解压缩:
  1. tar   -vxjf       test1.tar.bz2
  2. tar   -vxzf      test2.tar.gz
复制代码
上述两行命令中,-vxjf用来完成.bz2格式压缩文件的解压,-vxzf用来完成.gz格式压缩文件的解压。关于Ubuntu下的命令行压缩和解压缩就讲解到这里,重点是tar命令,要熟练掌握使用tar命令来完成.bz2和.gz格式的文件压缩和解压缩。

2.5.5 文件查询和搜索
文件的查询和搜索也是最常用的操作,在嵌入式Linux开发中常常需要在Linux源码文件中查询某个文件是否存在,或者搜索哪些文件都调用了某个函数等等。本节我们就讲解两个最常用的文件查询和搜索命令:find和grep。

1、命令find
find命令用于在目录结构中查找文件,其命令格式如下:
  1. find        [路径]     [参数]     [关键字]
复制代码
路径是要查找的目录路径,如果不写的话表示在当前目录下查找,关键字是文件名的一部分,主要参数如下:
-name<filename>     按照文件名称查找,查找与filename匹配的文件,可使用通配符。
-depth                从指定目录下的最深层的子目录开始查找。
-gid<群组识别码>  查找符合指定的群组识别码的文件或目录。
-group<群组名称> 查找符合指定的群组名称的文件或目录。
-size<文件大小>     查找符合指定文件大小的文件。
-type<文件类型>    查找符合指定文件类型的文件。
-user<拥有者名称> 查找符合指定的拥有者名称的文件或目录。

find命令的参数有很多,常用的就这些,关于其它的参数大家可以自行上网查找,我们来看一下如何使用find命令进行文件搜索,我们搜索目录/etc中以“vim”开头的文件为例,操作如下图所示:
image095.png
图 2.6.30 find命令操作

从上图可以看出,在目录/etc下,包含以“vim*”开头的文件有/etc/vim、/etc/vim/vimrc等等,就不一一列出了。

2、命令grep
find命令用于在目录中搜索文件,我们有时候需要在文件中搜索一串关键字,grep就是完成这个功能的,grep命令用于查找包含指定关键字的文件,如果发现某个文件的内容包含所指定的关键字,grep命令就会把包含指定关键字的这一行标记出来,grep命令格式如下:
  1. grep [参数]     关键字    文件列表
复制代码
grep命令一次只能查一个关键字,主要参数如下:
-b   在显示符合关键字的那一列前,标记处该列第1个字符的位编号。
-c   计算符合关键字的列数。
-d<进行动作>  当指定要查找的是目录而非文件时,必须使用此参数!否则grep指令将回报信息并停止搜索。
-i   忽略字符大小写。
-v   反转查找,只显示不匹配的行。
-r   在指定目录中递归查找。

比如我们在目录/usr下递归查找包含字符“Ubuntu”的文件,操作如下图所示:
image097.png
图 2.6.31命令grep演示

2.5.6 文件类型
这里的文件类型不是说这个文件是音乐文件还是文本文件,在用户根目录下使用命令“ls -l”来查看用户根目录下所有文件的详细信息,如下图所示:
image099.png
图 2.6.32文件详细信息

在上图中,每个文件的详细信息占一行,每行最前面都是一个符号就标记了当前文件类型,比如test1的第一个字符是“d”,test1.tar.bz2文件第一个字符是“-”。这些字符表示的文件类型如下:
-     普通文件,一些应用程序创建的,比如文档、图片、音乐等等。
d    目录文件。
c    字符设备文件,Linux驱动里面的字符设备驱动,比如串口设备,音频设备等。
b    块设备文件,存储设备驱动,比如硬盘,U盘等。
l     符号连接文件,相当于Windwos下的快捷方式。
s     套接字文件。
p    管道文件,主要指FIFO文件。

我们后面学习Linux驱动开发的时候基本是在和字符设备文件和块设备文件打交道。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 11:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表