Ubuntu 系统是和 Windows 系统一样的大型桌面操作系统,因此功能非常强大。
本节的目的是掌握后续嵌入式开发所需的 Ubuntu 基本技能,比如系统的基本设置、常用的 shell 命令、vim 编译器的基本操作等等……
Ubuntu 的图形化界面操作和 Windows 下基本一致;
这里着重提一下:
1. 界面分辨率设置:通过右上角设置按键设置对应的分辨率
2. 输入法设置:可以通过 win + 空格;或者右上角设置 中文输入法;
1. Ubuntu(Linux) 终端操作
从这里,我们开始学习 Ubuntu 操作系统的重点 —— 终端操作;
Ubuntu 界面右击 :打开终端;
上述字符串中:@ 前面的 “quest - qaozus” 是当前的用户名字,@ 后面的 zhangshao - virtual - machine 是机器的名字;最后面的 $ 表示当前用户是普通用户,我们可以在提示符后面输入命令,比如输入命令:ls
ls 命令用于打印出当前所在目录中所有文件和文件夹;
guest-qaozus@zhangshao-virtual-machine:~$ ls
examples.desktop 公共的 模板 视频 图片 文档 下载 音乐 桌面
guest-qaozus@zhangshao-virtual-machine:~$
1.1 Shell 操作
首先先来介绍一个什么叫做 Shell ?
在学习 Linux 的过程中会频繁的看到 Shell 这个词语。简单来说 Shell 就是敲命令;
国内把 Linux 下通过命令行输入命令叫做 “敲命令”,国外人给这个动作起了个洋气的名字:Shell;
因此以后看到 Shell 这个词语第一反应就是在终端敲命令,将多个 Shell 命令按照一定的格式放到一个文本中,那么这个文本就叫做 Shell 脚本;
严格意义上讲,Shell 是一个应用程序,它负责接收用户输入的命令,然后根据命令做出相应的动作,Shell 负责将应用层或者用户层输入的命令传递给系统内核,由操作系统内核来完成相应的工作,然后将结果反馈给应用层或者用户。
上面我们提到了 Shell 就是 “敲命令”,那么既然是命令,肯定是有格式的,Shell 命令的格式如下:
command -option [argument] // command:Shell 命令名称 // option: 选项,同一种命令可能会有不同的选项,不同的选项其实现的功能不同 // argument:Shell 命令是可以带参数的,也可以不带参数运行
同样以 ls 命令为例,下面三种 ls 命令,不同格式其结果也不同;
ls ls -l ls /usr // 切记:输入ls之后需要输入一个空格; // ls:用来打印当前目录下的所有文件和文件夹 // ls -l:打印当前目录下所有文件和文件夹,但是此命令会列出所有文件和文件夹的详细信息 // ls /usr:用来打印出目录 /usr 下的所有文件和文件夹
Shell 命令是支持自动补全功能的;因为 Shell 命令非常多,如果不做自动补全的话就需要用户去记忆这些命令的全部字母;
也就是输入命令的前一部分字母,然后按下 TAB 键,如果只有一个命令匹配的话那么会自动补全这个命令剩下的字母。如果有多个命令匹配的话,再按一下 TAB 键就会列出所有匹配的命令;
1.2 常用的 Shell 命令
嵌入式开发用的最多的就是 Shell 命令,Shell 命令是所有 Linux 系统发行版所通用的;
1. 目录信息查看命令:ls
文件浏览是最基本的操作,Shell 下文件浏览命令为 ls,格式如下:
ls [选项] [路径]
ls:用于显示指定目录下的内容,列出指定目录下包含的所有的文件以及子目录,它的主要参数有:
-a:显示所有文件以及子目录,包括以 ‘.’(点) 开头的隐藏文件
-l:显示文件的详细信息,比如文件的形态、权限、所有者、大小等信息
-t:将文件按照创建时间排序列出
-A:和 -a 一样,但是不列出 “.”(点) (当前目录) 和 “..”(父目录)
-R:递归列出所有文件,包括子目录中的文件
Shell 命令里面的参数是可以组合在一起用的,比如组合 “-al” 就是显示所有文件的详细信息,包括以 “.” 开头的隐藏文件;
2. 目录切换命令 cd
要想在 Shell 中切换到其他的目录,使用的命令是 cd,命令格式如下:
cd [路径]
路径就是我们要进入的目录路径:
cd / :进入根目录 / 下,Linux 系统的根目录为 /
cd /usr :进入到目录 /usr 下
cd .. :进入到上一级目录
cd ~ :切换到当前用户主目录
首先 cd 切换路径到目录 /usr 下,然后 ls 查看该目录下的文件;
3. 当前路径显示命令 pwd
pwd 命令用来显示当前工作目录的绝对路径,不需要任何的参数;
4. 系统信息查看命令 uname
要查看当前系统信息,可以使用命令 uname,命令格式如下:
uname [选项]
可选的选项参数如下:
-r:列出当前系统的具体内核版本号
-s:列出系统内核名称
-o:列出系统信息
5. 清屏命令 clear
clear 命令用于清除终端上的所有内容,只留下一行提示符;
6. 切换用户执行身份命令 sudo
Ubuntu(Linux)是一个允许多用户的操作系统,其中权限最大的是超级用户 root,有时候我们执行一些操作的时候需要用 root 用户身份才能执行,比如安装软件。通过 sudo 命令可以暂时将身份切换到 root 用户。当使用 sudo 命令的时候是需要输入密码的,这里要注意输入密码是没有任何提示的!
sudo [选项] [命令]
-h:显示帮助信息
-l:列出当前用户可执行与不可执行的命令
-p:改变询问密码的提示符
假设我们现在要创建一个新的用户 Test,创建新用户的命令为:adduser,创建新用户的权限只有 root 用户才有,我们在装系统的时候创建的那个用户是没有这个权限的。所有创建新用户的话需要使用 sudo 命令以 root 用户执行 adduser 这个命令;
我们一开始直接使用 adduser test 来添加用户的时候提示我们只有 root 才能将用户或组添加到系统。
所以我们要在前面加上 sudo 命令,表示以 root 用户执行 adduser 操作;
7. 添加用户命令 adduser
在上一个命令中已经使用过了 adduser,此命令需要 root 身份去运行。
adduser [参数] [用户名]
常用的参数如下:
-system:添加一个系统用户
-home DIR:DIR表示用户的主目录路径
-uid ID:ID表示用户的uid
-ingroup GRP:表示用户所属的组名
8. 删除用户命令 deluser
既然有创建用户的命令,那么一定也有删除用户的命令,删除用户的命令 deluser:
deluser [参数] [用户名]
-system:当用户是一个系统用户的时候才能删除
-remove-home:删除用户的主目录
-remove-all-file:删除与用户相关的所有文件
-backup:备份用户信息
同样的,命令 deluser 也要使用 sudo 来以 root 用户运行;
9. 切换用户命令 su
在学习 sudo 命令的时候说道,sudo 是以 root 命令身份执行一个命令,并没有更改当前的用户身份(可以简单的理解是:就是当前的 Shell 语句变成了 root 身份,下一条语句又会变回普通用户的身份);但是命令 su 可以直接将当前的用户身份切换到 root 身份(这个意思就是说:不只是当前的 Shell 语句,下一条语句不加 sudo 也是在 root 身份下运行的),表示可以尽情的实现任何操作了!因为已经获取到了系统的最高权限!!!
su [选项] [用户名]
-c -command:执行指定的命令,执行完毕后恢复原用户身份
-login:改变用户身份,同时改变工作目录和 PATH 环境变量
-m:改变用户身份的时候不改变环境变量
-h:显示帮助信息
此时表示切换到了 root 身份!
注意:由于 root 用户的权限太大,稍微不注意就可以删除掉系统文件,导致系统崩溃,因此强烈建议,不要以 root 用户运行 Ubuntu。当用到 root 身份执行某些命令的时候使用 sudo 命令即可;
10. 显示文件内容命令 cat
查看文件内容是最常见的操作,在 windows 下可以直接使用记事本查看一个文本文件内容,Linux 下也有类似记事本的软件,叫做 gedit,找到一个文本文件,双击打开,默认使用的就是 gedit;
Shell 下命令 cat 也是实现读取文件内容的:
cat [选项] [文件]
-n:由 1 开始对所有输出的行进行编号
-b:和 -n 类似,但是不对空白行编号
-s:当遇到连续两个行以上空白行的话就合并为一个行空白行
11. 显示和配置网络属性命令 ifconfig
ifconfig 是一个跟网络属性配置和显示密切相关的命令,通过此命令可以查看当前网络属性,也可以通过此命令配置网络属性,比如设置网络 IP地址;
ifconfig interface options | address
interface:网络接口名称,比如 eth0 等
up:开启网络设备
down:关闭网络设备
add:IP 地址,设置网络 IP 地址
netmask add:子网掩码
12. 系统帮助命令 man
Ubuntu 系统中有很多命令,这些命令都有不同的格式,不同的格式对应不同的功能,要完全记住这些命令和格式几乎是不可能的,必须要有一个帮助手册;
Ubuntu 提供了一个命令来帮助用户完成这个功能,就是 man 命令,通过 man 命令可以查看其他命令的语法格式、主要功能、主要参数说明等,man 命令格式如下:
man [命令名]
13. 系统重启命令 reboot
通过 Ubuntu 主界面右上角的齿轮按钮来选择关机或者重启系统,同样我们也可以使用 Shell 命令 reboot 来重启系统,直接输入命令 reboot 然后点击回车键即可
14. 系统关闭命令 poweroff
使用 poweroff 命令可以直接关闭系统,在终端输入命令 poweroff ,然后按下回车键即可关闭 Ubuntu 系统
15. 软件安装命令 install
Ubuntu 系统类似于 Windows 系统,如何在 Ubuntu 下安装软件,因为 Ubuntu 安装软件不像 Windows 下那样,直接点击 .exe 文件就可以安装了。
Ubuntu 下很多软件是需要自行下载源码的,下载源码以后自行编译,编译完成以后使用命令 install 来安装。
install [选项]... [-T] 源文件 目标文件 或:install [选项]... 源文件 目录 或:install [选项]... -t 目录 源文件... 或:install [选项]... -d 目录...
install 命令是将文件(通常是编译后的文件)复制到目的位置
1.3 APT 下载工具
对于长时间使用 Windows 的我们,下载安装软件非常容易,Windows 下有很多的下载软件, Ubuntu 同样有不少的下载软件。
本节我们学习用的最多的下载工具:APT 下载工具,APT 下载工具可以实现软件自动下载、配置、安装二进制或者源码的功能。
APT 下载工具和我们前面讲解的 install 命令结合在一起构成了 Ubuntu 下最常用的下载和安装软件方法
APT 采用 C/S 模式,也就是客户端/服务器模式,我们的 PC 机作为客户端,当需要下载软件的时候就向服务器请求,因此我们需要知道服务器的地址,也叫做安装源或者更新源。
APT 工具常用的命令如下:
1. 更新本地数据库
如果想要查看本地哪些软件可以更新的话可以使用如下命令:
sudo apt - get updata
这个命令会访问源地址,并且获取软件列表并保存在本电脑上;
2. 检查依赖关系
有时候本地某些软件可能会存在依赖关系,所谓依赖关系就是 A 软件依赖于 B 软件。通过如下命令可以查看依赖关系,如果存在依赖关系的话 APT 会提出解决方案:
sudo apt - get check
3. 软件安装
安装软件,使用如下命令:
sudo apt - get install package - name
可以看出上述命令是由 apt - get 和 install 组合在一起的,package - name 就是要安装的软件名字,apt - get 负责下载软件,install 负责安装软件。
比如我们要安装软件 Ubuntu 下的串口工具 “minicom”,我们就可以使用如下命令:
sudo apt - get install minicom
执行上述命令以后就会自动下载和安装 minicom 软件;
4. 软件更新
有时候我们需要更新软件,更新软件的话使用命令:
sudo apt - get upgrade package - name
其中 package - name 为要升级的软件名字,比如我们升级刚刚安装的 minicom 这个软件
5. 卸载软件
如果要卸载某个软件的话使用如下命令:
sudo apt - get remove package - name
其中 package - name 是要卸载的软件;
1.4 Ubuntu 下文本编辑
进行文本编辑最常用的就是:Gedit。Gedit 是一个窗口式的编译器;本节我们学习:VI/VIM编译器。
VIM 编译器是 VI 编译器的升级版本,VI/VIM 编译器都是一种基于指令式的编译器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作;
安装 VIM
sudo apt-get install vim
// 如果出现没有权限访问 root 的话,只需要将客人模式转换成个人用户,输入密码即可;
安装完成以后就可以使用 VIM 编译器了,VIM 编译器有 3 种工作模式:输入模式、指令模式和底行模式,通过切换不同的模式可以完成不同的功能;
在终端输入 test.txt 就会创建一个 vim 的文档;
此时创建的文档是根本无法输入的。因为默认的 VIM 默认是以只读模式打开的文档,因此我们要切换到输入模式,切换到输入模式的命令如下:
- i 在当前光标所在字符的前面吗,转为输入模式
- I 在当前光标所在行的行首转换为输入模式
- a 在当前光标所在字符的后面,转为输入模式
- A 在光标所在行的行尾,转换为输入模式
- o 在当前光标所在行的下方,新建一行,并转为输入模式
- O 在当前光标所在行的上方,新建一行,并转为输入模式
- s 删除光标所在字符
- r 替换光标处字符
最常用的就是 a ,当我们在键盘上按下 a 的时候,终端会提示 插入 的字样,表示我们进入到了输入模式;
此时也表示我们可以正常的输入文本了;
注意:Ctrl + s 可以在 Windows 系统下保存文档,但是在 Ubuntu 下是不可以保存的;
Ubuntu 下保存文档需要:从现在的输入模式切换到指令模式,方式是按下键盘的 ESC 键,按下 ESC 键以后终端左下角的插入字样就会消失,此时就不可以输入文本了,如果此时还需要输入文本,那么就需要重新输入 a 进入输入模式;
指令模式:顾名思义就是输入指令的模式,这些指令是控制文本的指令;
1. 移动光标指令
h(或左方向键) 光标左移一个字符
I(或右方向键) 光标右移一个字符
j(或下方向键) 光标下移一行
k(或上方向键) 光标上移一行
nG 光标移动到第 n 行首
n+ 光标下移 n 行
n- 光标上移 n 行
2. 屏幕翻滚指令
Ctrl + f 屏幕向下翻一页,相当于下一页
Ctrl + b 屏幕向上翻一页,相当于上一页
3. 复制、删除和粘贴指令
cc 删除整行,并且修改整行内容
dd 删除整行,不提供修改功能
ndd 删除当前行向下 n 行
x 删除光标所在的字符
X 删除光标前面的一个字符
nyy 复制当前行及下面 n 行
p 粘贴最近复制的内容
通过上面的内容,可以看到,还是没有保存文本的命令;
因为保存文本的命令在底行模式中,我们要先进入指令模式,进入底行模式的方式是先进入指令模式下,然后在指令模式下输入 :,进入底行模式;
进入底行模式以后终端的左下角就会出现符号:(冒号),我们可以在冒号的后面输入命令,常用的命令如下:
- x 保存当前文档并退出
- q 退出
- w 保存文档
- q! 退出 VI/VIM,不保存文档
当我们保存文档以后,可以使用 cat 来查看刚刚新建的 test.txt 文档的内容;
除了可以在指令模式下输入:冒号进入底行模式之外,还可以在指令模式下输入 “/” 进入底行模式
在底行模式下,我们可以文本搜索指定的内容,比如说搜索 test.txt 文件中的 “嵌入式” 三个字,按下回车键就可以找到与字符串 “嵌入式” 匹配的部分;
1.5 Linux 文件系统
1.5.1 Linux 文件系统简介
操作系统的基本功能之一就是文件管理,而文件的管理是由文件系统来完成的。Linux 支持多种文件系统,本节我们来学习 Linux 下的文件系统、文件系统类型、文件系统结构和文件系统相关的 Shell 命令;
操作系统就是处理各种数据的,这些数据在硬盘上就是二进制,人类是不能直接看懂这些二进制数据的,要先有一个翻译器,将这些二进制的数据还原为人类能看懂的文件形式,这个工作就是由文件系统来完成的,文件系统的目的就是实现数据的查询和存储,由于使用场合、使用环境的不同,Linux 有多种文件系统,不同的文件系统支持不同的体系。文件系统是管理数据的,而可以存储数据的物理设备有硬盘、U盘、SD卡等。不同的存储设备其物理结构不同,不同的物理结构就需要不同的文件系统去管理,比如管理 NAND FLASH 的话使用 YAFFS 文件系统,管理硬盘、SD卡的话就是 ext 文件系统等等;
将一个磁盘分为 C 盘、D盘等等,称作磁盘的分割,Linux 下也支持磁盘分割,Linux 下常用的磁盘分割工具为:fdisk;在 Windows 下我们创建一个新的盘符以后都要做格式化处理,格式化其实就是给这个盘符创建文件系统的过程;同样的,在 Linux 下我们使用 fdisk 创建好分区以后也是要先在创建好的分区上面创建文件系统,也就是格式化。
Windows 下有磁盘分区的概念,可以分为 C、D 盘,但是 Linux 下没有这个概念,因此在 Linux 下找不到像 C、D、E盘这样的东西;在Linux下创建好一个分区并且格式化以后我们要将其 “挂载” 到一个目录下才能访问这个分区。Windows 的文件系统挂载过程是其内部完成的,用户是看不到的,Linux 下我们使用 mount 命令来挂载磁盘。挂载磁盘的时候是需要确定挂载点的,也就是你的这个磁盘要挂载到哪个目录下。
1.5.2 Linux 文件系统类型
Windows 下有 FAT、NTFS 和 exFAT 这样的文件系统,在 Linux 下又有哪些文件系统呢?
Linux 下的文件系统主要是:ext2、ext3 和 ext4 等文件系统。Linux 还支持其他的 UNIX 文件系统,比如 XFS、JFS、UFS等,也支持 Windows 的 FAT 文件系统和网络文件系统 NFS 等。
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 使用的哪个版本的文件系统呢?可以在终端中输入命令查询:
df -T -h
框起来的就是我们安装的 Ubuntu 这个磁盘,在 Linux 下一切皆为文件,“/dev/sdal” 就是我们的磁盘分区,可以看出这个磁盘分区类型是 ext4,它的挂载点是 “/”,也就是根目录;