嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(下)

简介: 嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令

摘录如下:

假设某主机上的网络接口配置和路由表如下:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:C2:8D:7E
      inet addr:192.168.10.223  Bcast:192.168.10.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:100
      RX bytes:0 (0.0 b)  TX bytes:420 (420.0 b)
      Interrupt:10 Base address:0x10a0
eth1      Link encap:Ethernet  HWaddr 00:0C:29:C2:8D:88
      inet addr:192.168.56.136  Bcast:192.168.56.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:603 errors:0 dropped:0 overruns:0 frame:0
      TX packets:110 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:100
      RX bytes:55551 (54.2 Kb)  TX bytes:7601 (7.4 Kb)
      Interrupt:9 Base address:0x10c0
lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      UP LOOPBACK RUNNING  MTU:16436  Metric:1
      RX packets:37 errors:0 dropped:0 overruns:0 frame:0
      TX packets:37 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:3020 (2.9 Kb)  TX bytes:3020 (2.9 Kb)
$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    *               255.255.255.0   U     0      0        0 eth0
192.168.56.0    *               255.255.255.0   U     0      0        0 eth1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         192.168.10.1     0.0.0.0         UG    0      0        0 eth0


上述route命令输出信息中各项的含义请看下表:

Destination 目标网段或者主机
Gateway 网关地址,”*” 表示目标是本主机所属的网络,不需要路由
Genmask 网络掩码
Flags 标记。一些可能的标记如下:
  U - 路由是活动的
  H - 目标是一个主机
  G - 路由指向网关
  R - 恢复动态路由产生的表项
  D - 由路由的后台程序动态地安装
  M - 由路由的后台程序修改
  ! - 拒绝路由
Metric  路由距离,到达指定网络所需的中转数
Ref 路由项引用次数
Use 此路由项被路由软件查找的次数
Iface 该路由表项对应的输出接口


在上面的例子中,这台主机有两个网络接口:


① 一个网络接口连到192.168.10.0/24网络

② 另一个网络接口连到192.168.56.0/24网络。


如果要发送的数据包的目的地址是192.168.56.3,跟第一行的子网掩码做与运算得到192.168.56.0,与第一行的目的网络地址不符,再跟第二行的子网掩码做与运算得到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去,由于192.168.56.0/24正是与eth1接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。


如果要发送的数据包的目的地址是202.10.1.2,跟前三行路由表条目都不匹配,那么就要按缺省路由条目,从eth0接口发出去,首先发往192.168.10.1路由器,再让路由器根据它的路由表决定下一跳地址。


可以使用route命令管理路由。

示例:

1)添加路由:首先得确定网关IP,假设为192.168.1.1

$ sudo  route  add  default  gw  192.168.1.1
$ ping 8.8.8.8   // 验证
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=19.8 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=53 time=19.8 ms


2)删除路由:

$ sudo  route  del  default  gw  192.168.1.1


1.3.7 vi编辑器


vi是一个命令,也是一个命令行下的编辑器,它有如下功能:

a. 打开文件、新建文件、保存文件

b. 光标移动

c. 文本编辑

d. (多行间|多列间)复制、粘贴、删除

e. 查找和替换


很多人不习惯在命令行下编辑文件,实际开发中也不会经常在命令行下编辑文件。但是在Linux系统中对文件做些简单修改时,使用vi命令的效率非常高。并且在很多时候,比如现场调试时,并没有GUI形式的编辑工具,vi是唯一选择。


模式


vi编辑器有三种模式,各个模式侧重点不一样:

a. 一般模式(光标移动、复制、粘贴、删除)

b. 编辑模式(编辑文本)

c. 命令行模式(查找和替换)

vi编辑器的三种模式间切换如下图所示


注意:

a. 当不知道处于何种模式时,按ESC键返回到一般模式。

b. wq(write quit)

c. i(insert)


1670848011697.jpg


文件的打开、新建、保存


打开文件、新建文件,命令如下(如果文件存在则打开文件,否则新建文件并打开):

$ vi  文件名


修改结束之后,输入“:” 进入命令行模式,再输入“wq”保存退出:

:wq  保存并退出文件


注意:如果文件不存在,也需要输入“:wq”才可以保存新文件,否则不会新建文件。


在编辑完成时,返回一般模式,方法如下:

a. 输入“:w”则保存文件,如果已经保存文件,输入“:q”则退出文件

b. 直接输入“:wq”保存并退出

c. 如果不想保存被修改的内容,则输入“:q!”强制退出。


这些命令列表如下:

命令 描述

x 保存当前文档并且退出。

q 退出。

w 保存文档 。

q! 退出 vi/vim,不保存文档。


编辑文件


打开文件后,默认处于“一般模式”,这时可以输入以下字母:

指令 描述

i 在当前光标所在字符的前面,转为编辑模式。

I 在当前光标所在行的行首转换为编辑模式。

a 在当前光标所在字符的后面,转为编辑模式。

A 在光标所在行的行尾,转换为编辑模式。

o 在当前光标所在行的下方,新建一行,并转为编辑模式。

O 在当前光标所在行的上方,新建一行,并转为编辑模式。

快速移动光标


在一般模式下,可以使用下面快捷键移动光标或是翻页:

移动光标


h (或左方向键) 光标左移一个字符。

l (或右方向键) 光标右移一个字符。

j (或下方向键) 光标下移一行。

k (或上方向键) 光标上移一行。

nG或ngg 光标移动到第 n行首。

n+ 光标下移 n行。

n- 光标上移 n行。


屏幕翻滚

Ctrl + f 屏幕向下翻一页,相当于下一页。

Ctrl + b 屏幕向上翻一页,相当于上一页。


详细介绍如下:

1)快速的定位到某一行:文件头、文件尾、指定某一行

ngg //光标移至第n行的行首(n为数字,想要跳转的行),

1gg //就跳到第一行的行首,就是文件头

2gg //就跳到第二行的行首

G //转至文件结尾


2)在某一行如何快速定位到某一列:

0 //(数字零)光标移至当前行行首

$ //光标移至当前行行末

fx //搜索当前行中下一个出现字母x的地方


注意:当你不知道vi当前处于何种模式时,使用esc键返回到一般模式。


文本复制、粘贴、删除、撤销


在一般模式下,可以执行以下命令。

复制、删除和粘贴

cc 删除整行,并且修改整行内容。

dd 删除该行,不提供修改功能。

ndd 删除当前行向下 n行。

x 删除光标所在的字符。

X 删除光标前面的一个字符。

nyy 复制当前行及其下面 n行。

p 粘贴最近复制的内容。

s 删除光标所在字符。

r 替换光标处字符。


复制

yy //复制当前行(y:yank(复制))

nyy //复制当前行及其后的n-1行(n是数字)


粘贴

p //粘贴(p:paste)


删除

dd //删除光标所在行(d:delete)

ndd //删除当前行及其后的n-1行(n是数字)

x //删除光标所在位置的字符


撤销

u //撤销上一步操作


文本查找和替换


在一般模式下,可以执行以下命令。


查找

/pattern //从光标开始处向文件尾搜索pattern,后按下n或N


注意:

n 在同一个方向重复上一次搜索命令

N 在反方向重复上一次搜索命令


注意:

在/pattern之前先跳到第一行则进行全文件搜索。


替换


:%s/p1/p2/g //将文件中所有的p1均用p2替换

:%s/p1/p2/gc //替换时需要确认

“s“ 全称:substitute替换;

“g“ 全称:global全局;

“c“ 全称:confirm,确认


参考请点击


vi编辑器使用示例


本例创建一个名为hello.txt的文件,添加如下2行文件字,再回退去删除第2行的字母“X”:


www.100ask.net

wiki.100askX.net


首先执行以下命令,如果当前目录下没有hello.txt它就会新建并打开该文件,否则直接打开该文件:

vi  hello.txt


界面如下:

1670848023584.jpg

输入字符“i”,它表示“insert”,即在光标前输入字符,界面如下:

1670848030205.jpg

在上述界面中,可以输入字符了,可以使用回车键、删除键、箭头键等等,跟一般得文本工具没什么差别,如下:

1670848036990.jpg

无论当前是否处于编辑模式,都可以使用箭头键移动光标。

在编辑模式下,使用删除键(Backspace)删除字符。

不在编辑模式下时,使用“x”删除光标所在的字符,如下:

1670848043345.jpg

最后输入“:wq”保存并退出,“:”表示进入命令行模式,“wq”表示“write and quit”,即写入并退出。如果不想保存则可以输入“:q!”,它表示“退出、不保存”。

1670848049502.jpg

最后执行“cat hello.txt”命令验证一下:

1670848056422.jpg

注意:本教程没有教你怎么在Ubuntu中安装中文输入法,因为我们是在Windows编辑源码,或是提倡多英文写注释。如果你需要在Ubuntu下使用中文,请自行百度。


1.3.8 其他命令


file


查看文件类型。其格式如下:

file 文件名


使用gcc编译得到的程序是运行于PC的,但是很多初学者经常把这些程序放到ARM板子上去运行,这时一般都会提示:

xxx  not found


它并非“找不到”,而是格式不正确。

这时你可以执行“file xxx”查看它的类型,确定它是给PC还是给ARM编译的。


linux下一切皆文件

举例:

file ~/.bashrc  为ASCII编码的text文件类型
file ~/.vimrc      为UTF-8 Unicode编码的text类型
file ~/Pictures/* 如图形文件JPEG/PNG/BMP格式
file ~/100as/     为directory表明一个目录
file  /bin/pwd     出现ELF 64-bit LSB executable,即为ELF格式的可执行文件
file /dev/*          出现character special(字符设备文件)、block special(块设备文件)等


which和whereis


which命令和whereis命令作用是查找命令或应用程序的所在位置,其格式如下:

which   命令名/应用程序名
whereis  命令名/应用程序名。


示例:

$ which pwd     //定位到/bin/pwd
$ which gcc     //定位到/usr/bin/gcc 
$ whereis pwd   //可得到可执行程序的位置/bin和手册页的位置/usr/share/man/man1/pwd.1.gz


1.4 Ubuntu下包管理


1.4.1 软件包管理系统


像我们日常使用的windows提供的应用商店或者手机提供的应用市场那样,大多数现代的类 Unix 操作系统也都提供了一种中心化的机制用来搜索和安装软件。软件通常存放在存储库中,并通过包的形式对外进行分发。处理包的工作称为包管理。包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档。这个我们称为软件包管理系统,其除了安装软件外,它还提供了工具来更新已经安装的包。

大多数软件包系统都是围绕软件包文件的集合构建的。软件包文件通常是一个存档文件,它包含已编译的二进制文件和软件的其他资源,以及安装脚本。软件包文件同时也包含有价值的元数据,包括它们的依赖项,以及安装和运行它们所需的其他软件包的列表。

虽然这些包管理系统的功能和优点大致相同,但打包格式和工具会因平台(不同的Linux发行版)而异,如下表所示:

操作系统 格式 工具

Debian  .deb  apt, apt-cache, apt-get, dpkg
Ubuntu  .deb  apt, apt-cache, apt-get, dpkg
CentOS  .rpm  yum
Fedora  .rpm  dnf
FreeBSD Ports, .txz make, pkg


由上表可知,Debian 及其衍生版,如我现在使用的 Ubuntu,它们的包格式为 .deb。APT 这款先进的软件包管理工具提供了大多数常见的命令如:搜索存储库、安装软件包及其依赖项,并管理升级,等等。在系统中,我们还可以使用 dpkg 程序来安装单个的 deb 文件,APT 命令作为底层 dpkg 的前端,有时也会直接调用它。

目前发布的 debian 衍生版大多数都包含了 apt 命令,它提供了一个简洁统一的接口,可用于通常由 apt-get 和 apt-cache 命令处理的常见操作。这个命令是可选的,但使用它可以简化一些任务。


1.4.2 apt命令使用


上一小节介绍了软件包管理系统,本小节秉承上小节的内容,介绍软件包管理系统中apt命令。

我们习惯于使用windows系统以及智能手机,这两个下载和安装软件都是非常容易简单的。但是Ubuntu下该如何安装软件呢?Ubuntu安装软件不像Windows下那样,直接双击.exe文件就开始安装了。一般来说Ubuntu下很多软件是需要先自行提供源码,使用源码自行编译,编译完成以后使用命令”install”来安装到系统中。当然 Ubuntu下也有其它的软件安装方法,使用得最多的方法就是自行编译源码后进行安装,尤其是嵌入式 Linux开发。命令 ”install” 格式如下所示:

install [选项 ]... [-T] 源文件 目标文件
install [选项 ]... 源文件 ... 目录
install [选项 ]... -t 目录 源文件 ... 或: install [选项 ]... -d 目录 ...


“install” 命令是将文件 (通常是编译后的文件 )复制到目的位置,在上面得三种形式中,将源文件复制到目标文件或将多个源文件复制到一个已存在的目录中同时设置其所有权和权限模式。在第四种形式会创建指定的目录。命令“ install”通常和命令 apt-get”组合在一起使用的。

其实Ubuntu中我们可以直接安装很多的软件&游戏,但是对于刚刚接触Linux系统的我们往往会不知如何安装安装软件,其实我们利用软件包管理系统可以直接下载并安装所有通过认证的软件,其中Ubuntu下我们用的最多的下载工具: APT下载工具, APT下载工具可以实现软件自动下载、配置、安装二进制或者源码的功能。

APT下载工具和上面讲解到的 ”install” 命令结合构成了 Ubuntu下最常用的下载和安装软件方法。并且其解决了 Linux平台下一安装软件的一个缺陷:即软件之间相互依赖问题。


1.4.3 如何更换软件源


APT采用 C/S 模式,也就是客户端/服务器模式,一般来说我们的 PC机作为客户端,当需要下载

软件的时候就向服务器请求,因此我们需要知道服务器的地址,也叫做软件源或者更新源,这个一般默认使用的是国外的软件源(服务器)。因为我们是在中国,如果没有选择中国的服务器,可能会导致下载速度非常慢甚至是下载失败。所以我们需要修改软件源为国内的服务器,这里由两种方法可以进行修改:


我们使用的是桌面版的Ubuntu,先介绍在桌面环境中如何修改软件源:

打开系统设置,打开“软件和更新”设置,打开以后如下图所示:

上图中的“Ubuntu软件”选项卡下面的“下载自”就是APT工具的安装源。

2) 下面介绍一种更加方便常用的修改方式,我们直接修改配置文件

Ubuntu配置的默认源并不是国内的服务器,下载更新软件都比较慢。首先备份源列表文件sources.list:

首先备份源列表

sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup


打开sources.list文件修改选择合适的源,替换原文件的内容,保存编辑好的文件, 以阿里云更新服务器为例:

打开sources.list文件

sudo vim /etc/apt/sources.list

编辑 /etc/apt/sources.list文件, 在文件最前面添加阿里云镜像源:

阿里源

deb http://mirrors.aliyun.com/Ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/Ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/Ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/Ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/Ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/Ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/Ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/Ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/Ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/Ubuntu/ bionic-backports main restricted universe multiverse


在我们使用 APT工具下载安装或者更新软件的时候,首先会在下载列表中与本机软件进行对比,看一下需要下载哪些软件,或者升级哪些软件,默认情况下 APT会下载并安装最新的软件包,被安装的软件包所依赖的其它软件也会被下载安装或者更新,非常智能省心。


1.5 Ubuntu下如何使用编辑器


进行文本编辑是非常常用的操作,在windows系统为我们默认提供了记事本让我们可以进行文本编辑,Ubuntu系统下也为我们提供一些文本编辑工具来让我们使用,如gedit、vi/vim。


1.5.1 gedit 编辑器使用


gedit是一个窗口式的编辑器,只能在Ubuntu桌面环境下使用。


在GUI环境下打开gedit

我们一般在使用Ubuntu的文件管理器时,直接双击文本文件默认使用的就是“Gedit”编辑器。

或者单击右键需要编辑的文本文件,选择应用打开:


在终端里打开gedit

在终端里,可以直接运行gedit命令打开编辑器,也可以运行“gedit 文件名”打开指定文件,比如:

如果要修改其他用户的文件,比如/etc/fstab,如下:


gedit的使用

gedit跟Windows下记事本的用法没什么差别。

在编辑器中我们可以点击 ”Open” 按钮浏览最近打开过的文件列表并打开文件;点击 ”Save” 按钮可以保存当前正在编辑的文件;点击右侧的菜单栏进行更多的操作等等。

快捷键也跟windows下一样:

保存文件:Ctrl + s

另存为:Ctrl + Shift + s

搜索文本内容: Ctrl + f


1.5.2 vi编辑器使用


请参考前面介绍的vi命令。


1.6 强烈建议使用纯英文的Ubuntu


编译程序时,在纯英文环境下错误信息是以英文来描述的,比如:


这些错误信息在网上一贴,就有很多答案,百度找不到就用bing,再不行就用google,国内找不到可以找国外。

如果使用中文环境的话,错误信息是以中文来描述的,你只能在百度上搜答案。


1.7 默认不能使用root用户登录


我在开发过程中从没用过root用户,要使用root权限时可以在命令前加上“sudo”,比如“sudo ps -a”。

如果你就是喜欢用root用户,可以按下图操作,先给root用户设置密码,以后就可以用root用户登录了:


2. 使用MobaXterm远程登录Ubuntu


安装、运行MobaXterm,如下建立Session:

1670848189833.jpg

按上图操作后,在MobaXterm左侧就可以看到这项,双击它就可以登录Ubuntu,然后就可以执行各种Linux命令了:

1670848199350.jpg

注意: IP地址一定要是ubuntu桥接模式的网卡IP地址。


相关文章
|
26天前
|
JavaScript 安全 前端开发
【HarmonyOS开发】ArkTS基础语法及使用(鸿蒙开发基础教程)
【HarmonyOS开发】ArkTS基础语法及使用(鸿蒙开发基础教程)
283 4
|
2天前
|
索引
鸿蒙开发:ForEach中为什么键值生成函数很重要
在列表组件使用的时候,如List、Grid、WaterFlow等,循环渲染时都会使用到ForEach或者LazyForEach,当然了,也有单独使用的场景,如下,一个很简单的列表组件使用,这种使用方式,在官方的很多案例中也多次出现,相信在实际的开发中多多少少也会存在。
鸿蒙开发:ForEach中为什么键值生成函数很重要
|
15天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
44 14
Linux 10 个“who”命令示例
|
4天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
57 20
|
25天前
|
存储 数据安全/隐私保护
鸿蒙开发:自定义一个动态输入框
在鸿蒙开发中,如何实现这一效果呢,最重要的解决两个问题,第一个问题是,如何在上一个输入框输入完之后,焦点切换至下一个输入框中,第二个问题是,如何禁止已经输入的输入框的焦点,两个问题解决完之后,其他的就很是简单了。
48 13
鸿蒙开发:自定义一个动态输入框
|
28天前
|
小程序 测试技术 API
鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
本文详细介绍元服务的开发及上架全流程,涵盖元服务的特点、创建项目、服务卡片、签名打包、开发测试及上架审核等环节,帮助开发者轻松掌握从零开始开发并发布元服务的全过程。元服务以其轻量、免安装、易于使用等特点,成为未来服务提供的重要形式。
71 13
鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
|
4天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
26 7
|
15小时前
|
数据管理 API 调度
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
HarmonyOS Next 是华为新一代操作系统,专注于分布式技术的深度应用与生态融合。本文通过技术特点、应用场景及实战案例,全面解析其核心技术架构与开发流程。重点介绍分布式软总线2.0、数据管理、任务调度等升级特性,并提供基于 ArkTS 的原生开发支持。通过开发跨设备协同音乐播放应用,展示分布式能力的实际应用,涵盖项目配置、主界面设计、分布式服务实现及部署调试步骤。此外,深入分析分布式数据同步原理、任务调度优化及常见问题解决方案,帮助开发者掌握 HarmonyOS Next 的核心技术和实战技巧。
40 28
鸿蒙HarmonyOS应用开发 | 探索 HarmonyOS Next-从开发到实战掌握 HarmonyOS Next 的分布式能力
|
24天前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
31 9
|
22天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解
下一篇
DataWorks