Ubuntu 基本操作-嵌入式 Linux 入门
在 Ubuntu 基本操作 里面基本就分为两部分:
- 安装 VMware 运行 Ubuntu
- 熟悉 Ubuntu 的各种操作、命令
如果你对 Ubuntu 比较熟悉的话,安装完 VMware 运行 Ubuntu 之后就可以来学习下一章节了。
1. 安装 VMware 运行 Ubuntu
我们首先来看看怎么去安装 VMware 来运行 Ubuntu,为什么要做这些事情,我们先讲清楚原因。
一般来说我们都是在 windows 电脑上面来操作,然后你可以通过网络去访问一个服务器(linux 服务器),做 linux 开发的时候,为什么一定要用 linux 服务器,在 linux 服务器里面,你可以去编译 u-boot,可以去编译内核,可以去编译应用程序或者各种驱动程序,那么为什么这些操作必须放在 linux 服务器里面呢,为什么不能够在 windows 里面操作呢,就比如说在 linux 里面有一些链接文件,那对于 windows 来说,它根本就不支持 linux 里面的链接文件的文件格式,也不支持 Linux 里面的设备节点,所以很多的时候这种工作必须在 Linux 里面来做。
那么我们作为一个学习者,我们并没有 Linux 服务器,那怎么办?我们可以在 windows 里面来安装一个虚拟机 VMware,这个是虚拟机,它可以模拟出一台电脑,在这台模拟出来的电脑上面安装 Ubuntu,Ubuntu 是一个 Linux 系统,跟 windows 是并列的关系,我们在这台虚拟的电脑上面来运行 Ubuntu,以后在这个 Ubuntu 里面来编译 u-boot 内核、应用程序和驱动程序。
所以我们第一步干嘛呢,安装 VMware;第二步,使用 VMware 来打开 Ubuntu。
1.1 安装 VMware
首先从 VMware 官网(www.vmware.com)下载 Workstation Player 安装包,或者使用我们提供的安装包。(在 <开发板配套资料> 01_100ask_stm32mp157_pro_2022.08\02_开发工具\【Windows】VMwareWorkstation 安装包安装包中,VMWare 安装软件是:VMware-workstation-full-16.2.3-19376536.exe,一路点击安装)
VMWare 安装完成后,有两个软件,它们都可以使用,建议使用第 2 个:
① Vmware Workstation Pro:这是收费的,可以试用 30 天。
② Vmware Workstation 16 Player:这是免费的。
注意:本文是在 Windows 10 上安装 VMware。
1.2 安装 Ubuntu
在 <开发板配套资料> 中,有 Ubuntu 映像文件。(01_100ask_stm32mp157_pro_2022.08\02_开发工具\100ask-vmware_ubuntu18.04)在某个磁盘分区里解压文件,这个分区最好有 200G 的空闲空间。
1.3 使用 VMware 运行 Ubuntu
- 启动 Vmware Workstation 16 player,这个 player 是不需要注册号的,是可以免费使用。
- 点击打开虚拟机,打开 D:\ubuntu18.04\ubuntu18.04_x64.vmx
- 点击获取所有权,点击启动按钮就可以打开虚拟机了,我已复制该虚拟机。
这个软件模拟出来一台电脑,这个电脑上面去运行这个 Ubuntu,用户名密码是 123456,在里面你就可以像操作 windows 一样来操作 Ubuntu 了。
你不想再使用这个 Ubuntu 了之后,你可以点击关闭按钮关机,你也可以点击停止按钮挂起,确定。挂起之后,以后你再次打开这个虚拟机的时候,选中它,点击播放虚拟机,它就会恢复之前被挂起的状态。
如果你对 Linux 系统还不熟悉,对 Ubuntu 操作还不熟悉,那么你就需要去看第二篇里面的后续内容,可以看文档,也可以看视频。如果你已经熟悉了 Linux 的操作,那么下一章节里面 <配置 VMware 使用双网卡> 这个一定要看,下一章节里面我们一开始还需要去配置 VMware 里面的网络。
2. Ubuntu 的基本操作
从现在开始我们来介绍一下 Ubuntu 的简单操作。我们首先介绍一下怎么去操作桌面,然后再去介绍一下使用各种命令。
2.1 Ubuntu 下打开终端
我们之前已经使用 VMware 打开了 Ubuntu。我们以后会使用到各种 Linux 命令,那么在哪里输入命令呢?
- 使用右键打开终端。你可以在桌面上点击右键 open terminal,打开终端,这时候你就可以在里面输入各种命令了,这所谓的终端跟 windows 里面的命令行是类似的,在 windows 里面我们同样可以打开所谓的命令行(快捷键 Ctrl + R),你同样可以在里面执行各种 dos 命令,比如 dir,你看在 windows 里面,你要列出这些目录的话,是 dir 命令,在 linux 里面是 ls 命令,有点差别。
- 用搜索框打开终端。我们现在回到 Ubuntu,你可以使用右键来打开终端,你也可以点击左下角,找到终端 terminal。
- 快捷键打开终端。我们还可以使用快捷键“Ctrl+Alt+T” 来打开终端。
以后我们将会在终端里面输入各种命令,但是这节我们先来体验一下桌面。
2.2 Ubuntu 系统初体验
其实 Ubuntu 发展到现在,它的桌面操作跟 windows 是非常的类似。但是
2.2.1 Ubuntu 和 Windows 的最大差别:目录
对于 Windows 我们可以打开此电脑,Windows 中每个盘符都对应某个分区,在这个分区里面你可以存放目录与文件,如图所示:
那这些盘符对于哪些分区呢,你可以打开创建并格式化硬盘分区工具,就可以看到左下方有磁盘,磁盘 0 里面前面是分区表,C 盘就对应这个磁盘里面的第一个分区,D 盘对应第二个分区,E 盘对应第三个分区;另外一个磁盘呢,你看这里有 J、K、I、L,从这里你可以看到每一个盘符都对应磁盘里面的某一个分区,Windows 这种表现方法非常的直观。但是对于 Ubuntu 呢,它就不大一样了,在 Ubuntu 里面我们可以打开文件浏览器,打开其他位置,computer,从这里你可以看到它里面有各种目录。
对于 Windows,你在此电脑里面看到的是各种盘符,但是在 Ubuntu 里面,刚才我们看到了在 computer 里面,你看到的是各种目录,你看不到任何的盘符。
好,回到 Windows,在 Windows 里面我们去访问某个文件的时候,你可以使用绝对路径。比如
C:\abc\def\hello.txt
从这个绝对路径我一下就可以知道:它位于 C 盘,它位于某一个分区里面。但是对于 Ubuntu 呢,在 Ubuntu 里面它没有盘符的概念,就比如说你想去访问某个文件的时候,比如
/abc/def/hello.txt
第一个斜杠表示它位于根目录,位于根目录下面的 abc 子目录,在 abc 子目录下面又有 def 子目录,在 df 下面有 hello.txt,从这个路径你看不出它位于哪一个分区。在 Ubuntu 中,以树状的结构表示文件夹与文件。
注意:
Windows 的绝对路径中,目录使用 “” 分隔。
Linux 的绝对路径中,目录使用 “/” 分隔。
以前在 Windows 有 C 盘、D 盘 和 E 盘,这是并列的关系;但是在 Ubuntu 里面,它是一个树状的关系。就比如说,地面上有一个树,它可以分叉,在叉里面又可以继续分叉,这就是所谓的根,这个根用斜杠来表示。我们来比划一下,在根下面有 abc 目录,还可以有其他目录,有 home 目录,有 bin 目录,有 boot 目录等等等等;在 abc 目录下面又可以有什么呢,有 def 目录,或者说还有其他目录,在 def 目录下面又有什么呢,有 hello.txt,那么我怎么找到这个 hello.txt,它就是根目录下面的 abc 子目录,abc 目录下面又有 def 目录,再下面有 hello 这个文件,这就是树状结构的意思。再比如说这 home 目录下面可能又有其他子目录,有 book 一个用户名,有其他用户名 xxx,在 book 下面又有某一个文件,那么你就可以这么访问:根目录下面找到 home 目录,找到 book 目录,在 book 目录下面你可能有一个 1.txt。
/abc/def/hello.txt
/home/book/1.txt
从这些绝对路径的表示方法里面,你看不到任何分区的信息。那么我怎么才能知道我这个文件处于哪个分区呢?那么你就可以打开 Disks 工具,从这里我们就可以看出来,我这 Ubuntu 里面只有一个磁盘,这个磁盘里面的第一个分区:
/dev/sda1
- dev:设备
- sd:表示磁盘
- a:表示第一个磁盘
- 1:表示这个磁盘里面的第一个分区
sda 这个磁盘的第一个分区,它挂载在根目录下面。
看到这里,我们又听到了一个新的概念叫挂载。就比如说对于 Windows,你可以认为 C 盘挂载了那个磁盘里面的第一个分区,D 盘挂载了那个磁盘里面第二个分区;对于 Ubuntu 呢,你看,对于这个磁盘里面的第一个分区,它作为根文件系统挂载就挂载在了根下面,以后你去访问这个根的时候,访问的就是这个分区,就比如说你在这个根下面创建了一个 hello.c,这个文件就会放在这个磁盘的第一个分区里。那同样道理,如果你想去访问根目录下面的 home,访问这个 book,你访问这个目录的时候,访问的也是这个磁盘的第一个分区。
我们再来看看这个磁盘的第二个分区挂载在哪里,你点击这个磁盘里面的第二个分区,你发现,这个磁盘 dev/sda 的第二个分区挂载在 boot 目录下面,也就是说我以后去访问根目录下面的 boot 目录,我去访问里面的文件的时候,这些文件位于这个磁盘的第二个分区,为什么呢?因为这个第二个分区挂载在 boot 目录下面。
从这里你可以看到它没有像 Windows 那么直接那么直观,在 Windows 里面我就知道了,我访问 C 盘访问的是第一个分区,我访问 D 盘访问的是第二个分区;但在 Linux 这里呢你得先确认一下第二个分区挂载在哪里,然后你才可以知道,我去访问这个挂载目录的时候,我访问的就是这个分区里面的文件。
我们再来看看,第三个分区这个不用管,这是交换分区,它并没有挂载在某一个目录下面。这里第四个分区挂载在 home 目录下面。我们现在又可以推翻前面说的话了,你刚才不是说我访问 home 目录的时候,也是去访问第一个分区吗,那现在不是了,我现在看完了整个分区的挂载信息之后才发现,第四个分区挂载在 home 目录下面,那么我以后去访问根目录下面的 home 目录的时候,我就访问里面的 book 目录,或者访问这个目录下面的直接有某一个文件的话,
/home/book
/home/1.txt
这些目录,这些文件它都是放在这个分区里面,因为这个分区挂载在 home 目录下面,你访问 home 目录下面的所有的文件夹,所有文件的时候都是去访问这个分区。
我们引入了这种分区挂载在某个目录的这么一个概念,那么自然就会引发另外一个问题,就比如说,我现在第一个分区 /dev/sda 表示某个磁盘,这个设备的第一个分区挂载在了 home 目录下面,我现在假设 /dev/sda 这个分区里面它本来就有 home 目录,home 目录下面我本来就有一个 1.txt,如果我没有去挂载其他分区的话,以后我去访问这个文件的时候,我访问的就是 /dev/sda 这个分区里面的文件,这是第一步。
那第二步呢,我又把 /dev/sda4 这个磁盘的第四个分区我挂载在 home 目录下面,一旦挂载成功之后,我以后访问这个 home 目录,我访问的就是 /dev/sda4 这个分区,那意味着这些之前的这些文件就不可见了。之前 sda1 的 home 目录不可见了,因为我把你的 home 目录挂载了另外一个分区,我以后访问这个 home 目录的时候,我访问的是这个第四个分区,不再访问你之前的第一个分区了。
实际上就我个人的习惯来说,我认为 Windows 里面的表现方法更加直观,更加方便。
我们现在来看看对于 Ubuntu 它的文件系统是怎么组织的呢?
- 对于 Windows 你可以打开 C 盘,它都有一些约定俗成的规则,你看里面有 program 目录,就表示说里面存放有 Windows 的应用程序,有用户目录表示里面存放的是各个用户的单独的数据,还有 Windows 目录里面存放的应该就是系统的驱动啊等等等等。
- 同样道理,对于 Ubuntu,对于 Linux 它也有一套规则。这套规则叫做循 FHS 标准(Filesystem Hierarchy Standard,文件系统层次标准)。它定义了文件系统中目录、文件分类存放的原则、定义了系统运行所需的最小文件、目录的集合,并列举了不遵循这些原则的例外情况及其原因。FHS 并不是一个强制的标准,但是大多的 Linux、Unix 发行版本遵循 FHS。
我们简单来看看在一个 Ubuntu 里面它有哪些文件。打开 Files->other Locations->computer,你可以看到这些目录它们有什么含义呢,我们来看一看。
首先,我们可以执行各种程序,这些程序放在哪里,放在 bin 目录下面,放在 sbin 目录下面。这些 bin 目录下面放的那些应用程序(命令)是所有用户都可以使用的;这个 sbin 呢,这个 s 就是系统的意思,在 sbin 目录下面放的是基本的系统命令,只有系统管理员才可以使用。总之,这两个目录里面存放的都是命令,或者说就是各种 app 了,只不过它们的权限不一样。那么对于其他无关紧要的应用程序呢,我们可以放在 usr 目录下的 bin 目录或者 usr 目录下面的 sbin 目录,注意了这个 usr 它并不是用户的意思,它是 Unix 软件资源,里面存放的是一些资源,这些资源并不是系统启动必须的资源,就比如说你甚至还可以在里面放游戏,放头文件,头文件根本不是系统启动必须的,游戏呢也根本就不是系统启动必须的。现在我们看到了,usr/bin 目录或者 usr/sbin 目录放的是非必需的 APP。
再来看看其他目录,这些应用程序它都用到库呀,那库放在哪里,根目录下面的 lib 目录可以存放库,usr 目录下面的 lib 目录也可以存放库。
咱们再从头往下看看,boot 目录下面一般来说放一些启动文件,就比如说内核呀等等等等;device 里面存放的是各种设备文件,这是 Linux 独有的,就比如说我们之前讲到了 dev/sda 表示第一个磁盘,dev/sda1 表示这个磁盘的第一个分区,这些文件就存放在 dev 目录下面,它们叫做设备文件,用来表示某些硬件的;还有 etc,是配置文件;home 是家目录,家目录下面有各种子目录,就比如说这个 book 子目录对应着 book 用户,跟 Windows 里面的这个用户目录是类似的,你看在 Windows 里面这个用户目录下面有各种用户,每一个文件夹对应一个用户,对于 Ubuntu,对 Linux 也是类似的,home 目录下面每一个文件夹对应一个用户。
其他的无关紧要,这里还有 proc、sys,这是一些默认的文件夹,在这些文件夹里面,你可以去挂载一些虚拟的文件系统,什么叫做虚拟的文件系统呢?我们在根目录下面挂载了这个磁盘的第一个分区,在 home 目录下面挂载了这个磁盘的第四个分区,它们对应真实的存储设备,但是对于这些 proc、sys 目录,它们挂载的是某一些虚拟的文件系统,对于这些虚拟的文件系统,它并没有真实的存储设备,你可以去访问这些目录,观察到内核的一些信息。就比如说这个 proc 目录,它存放的什么呢,存放的是 process 各个进程的一些信息,这进程的信息是内核帮你提供的,它并不保存在磁盘上,我们可以去看看,打开 proc 目录,你可以看到各种数字,各种数字就对应着某一个进程,你可以进去看看,里面有它所打开的文件,我们看不了,我们是 book 用户,没有权限访问这些目录,我们现在简单的知道这些 proc 或者 sys 目录,它对应的是虚拟的文件系统,比如说 proc 目录下面你可以看到各个进程,在 sys 目录下面你可以看到其他更多的信息,就比如说设备的信息、驱动得信息等等,以后我们再介绍。
再一路往下看,你之前说这个 usr 目录它是 Unix 软件资源,它存放的是可分享的不可变动的数据,那么可以变动的数据在哪里呢。所谓可以变动的数据就是程序运行的过程中生成了各种临时文件,就比如我们在 Windows 里面会有各种缓存,在我的用户目录下面会看到各种缓存的数据,就比如说我打开了这个文件之后,它可能会有一些临时文件,这些临时文件都是可以删除的,这些可以删除的临时文件就是可变动的文件,对 Ubuntu 来说它也有类似的文件,只不过它们都放在 var 目录下面,var,可变的意思,它可以放一些临时的可变的文件,就比如说缓存、log 等等这些文件。
我们现在对 Ubuntu 的整个文件系统,对这些目录稍微简单的介绍了一下。总之,Ubuntu 发展到现在跟 Windows 是非常的类似。
2.2.2 Linux 文件属性
2.3 2.3 Linux 常用命令
2.3.1 Linux 命令行介绍
我们先来演示一个最简单的命令。在 Ubuntu 中打开终端,执行:
ls -a
我要提几个问题:
- 你输入
ls -a
的时候,回车,谁来解析你的输入?
1. Linux Shell 简介
Ubuntu 系统中或者 Linux 系统中有一个程序叫做 Shell,由这个程序来接收你的输入。根据你的输入,找到一个应用程序,就比如说这个应用程序是 bin 目录里面的应用程序,它根据你的输入找到 bin 目录里面的 ls 这个程序,然后去执行这个程序,它执行这个程序的时候,它会传入 -a 这个参数。根据这个演示过程,我们引入两个问题:
- 谁来接收你的输入?谁来解析你的输入?这是 Shell 来做的。
- 需要解析你的输入之后,它去哪里找到应用程序?
在回答这两个问题之前,我们先来看看:
2. Linux 命令的提示符
在 Ubuntu 中打开终端后,即可看到类似下图的提示符:
~:表示路径,就比如说你可以进入根目录,你看这个路径就变成了根目录。~ 表示家目录,当前用户的家目录,然后进入 ~,那就变成了家目录。这家目录什么意思呢,你看 home 目录下面有某些文件夹,这些文件夹每个文件夹都会对应一个用户。
我们可以在这个界面里面输入各种命令,这些命令的格式是怎样的呢?
3. Linux 命令的格式
一般来说,Linux 命令由三部分组成:
① command 命令;就比如说我们 ls 命令
② options 选项;这些选项一般来说使用一个减号开头
③ parameter 参数;
说明:
① [ ]中括号表示 该部分可选,可有可无,需要根据命令的实际需要而添加;
② 命令、选项、参数都以空格分隔,不管几个空格都算一个空格;
③ 命令输入完毕后,按回车“Enter”键启动;
就比如说我们可以来执行 ls -l 然后某一个目录(/,根目录):
ls -l /
你看,命令,可选的一些选项,还有参数,回车,它就可以列出根目录下面那些文件的详细信息。
- ls 表示列出那些信息。
- -l 表示详细的信息。
你列出哪一个目录的详细信息呢?你可以指定命令、选项、参数之间用空格来隔开。
再来看看这行文字,它为什么用一个中括号来表示呀,中括号的意思就是这些项目它是可选的,你可以填也可以不填,那如果用尖括号的话,就是表示说你必须填好。我们来找一个命令来演示一下:
fdisk
你看它说什么呢:错误的用法。为什么是错误的用法,因为你想去格式化某个磁盘,你就必须指定某个磁盘。来看看:
fdisk --help
命令,可选的参数,它会告诉你怎么去用。
fdisk 加上各种选项,然后你必须指定某个磁盘,这个尖括号就表示说这个参数这个项目不可以省略;中括号就表示说这些项目是可以省略的,就比如说我可以来执行:
sudo fdisk /dev/sda
因为权限不够,我们加上 sudo,密码是 123456,它就可以成功的打开这个磁盘,在里面你可以输入各种命令来操作这个磁盘。
密码输入过程是不可见的。你看着什么都没有输进去其实已经打进去了。
现在我们大概知道了命令的格式是怎样的。现在回到我们之前说的那几个问题,我们以后可以执行各种命令,再次演示下我们最简单的命令:ls -l
在我们输入过程中,我们从键盘给电脑发送字符,谁来接收这个字符,谁把它显示出来,我们输入了 ls,它就接收到了 ls,并且把 ls 显示出来了,我们回车之后,他会去找到 ls 这个应用程序来执行它,并且执行这个程序的时候,把 -l 这个参数传递给他,你看不同的参数,有不一样的行为,那么是谁在背后做这些事情,谁在背后从键盘接收数据,并且把这些数据给显示出来,当你回车的时候,谁来帮你找到应用程序并且执行它,并且把这些执行结果给显示出来,这个背后的程序就是 Shell,我们这节讲的就是 Shell。
Shell 就是一个应用程序,我们可以通过键盘、串口给它发送命令,回车后它接收到这些命令之后,就会去执行这些命令。就比如说我们以 ls -l
命令为例:
① 接收键盘数据并回显。
比如:我们使用键盘给 Shell 程序发送字母 l,它收到后会在屏幕上显示出来。
② 解析输入的字符串,寻找程序,执行程序。
当我们使用键盘给 Shell 程序发送回车是,它就知道字符输入结束了。
- shell 会解析字符串,这些字符串用空格分为好几部分:
- 第一部分就是程序名、命令名(应用程序)
- 其他部分是参数
- shell 会根据第一部分去寻找该程序,去哪里找?去 PATH 环境变量所指示的位置找。
(你当然也可以指定绝对路径、相对路径,shell 就会直接去这些路径找到程序。) - 找到程序后,会启动该程序,并传入参数。
这环境变量是什么意思?我们来执行一条命令:
echo $PATH
你看这 PATH 里面它的值是这些,里面是各个字符串,各个字符串之间用冒号隔开,我们的 shell 程序就是去这些目录逐个寻找,看看有没有 ls,找到之后就去执行它。在 shell 中执行程序时,你也可以使用绝对路径、相对路径来指定程序的位置,这个时候 shell 就会去这些路径中寻找应用程序,它就不会去 PATH 环境变量所指示的位置来寻找。
你可以执行:
env
看到各种变量,用 env 显示出来的这些变量就是环境变量,= 前面是环境变量,= 后面是这个变量的值。我们可以用 echo 来显示出某一个环境变量:
echo
那么怎么设置 PATH 环境变量呢?
我们先不去介绍,先来演示一下一个应用程序,我事先已经写了一个 hello 应用程序。
#include <stdio.h>/* 执行命令: ./hello weidongshan * argc = 2* argv[0] = ./hello* argv[1] = weidongshan*/int main(int argc, char **argv)
{if (argc >= 2)printf("Hello, %s!\n", argv[1]);elseprintf("Hello, world!\n");return 0;
}
你看如果你输入的参数超过两个的话,它就会打印 "Hello, %s!\n", argv[1]
,如果只输入 hello 而不带其他参数的话,它就会打印 "Hello, world!\n"
。
相关文章:

Ubuntu 基本操作-嵌入式 Linux 入门
在 Ubuntu 基本操作 里面基本就分为两部分: 安装 VMware 运行 Ubuntu熟悉 Ubuntu 的各种操作、命令 如果你对 Ubuntu 比较熟悉的话,安装完 VMware 运行 Ubuntu 之后就可以来学习下一章节了。 1. 安装 VMware 运行 Ubuntu 我们首先来看看怎么去安装 V…...
Pytorch可形变卷积分类模型与可视化
E:. │ archs.py │ dataset.py │ deform_conv_v2.py │ train.py │ utils.py │ visual_net.py │ ├─grad_cam │ 2.png │ 3.png │ ├─image │ ├─1 │ │ 154.png │ │ 2.png │ │ │ ├─2 │ │ 143.png │…...
Mysql 表逻辑分区原理和应用
MySQL的表逻辑分区是一种数据库设计技术,它允许将一个表的数据分布在多个物理分区中,但在逻辑上仍然表现为一个单一的表。这种方式可以提高查询性能、简化数据管理,并有助于高效地进行大数据量的存储和访问。逻辑分区基于特定的规则ÿ…...

架构面试题汇总:网络协议34问(七)
码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 网络协议是实现各种设备和应用程序之间顺畅通信的基石。无论是构建分布式系统、开发Web应用,还是进行网络通信&#x…...

lida,一个超级厉害的 Python 库!
目录 前言 什么是 lida 库? lida 库的安装 基本功能 1. 文本分词 2. 词性标注 3. 命名实体识别 高级功能 1. 情感分析 2. 关键词提取 实际应用场景 1. 文本分类 2. 情感分析 3. 实体识别 总结 前言 大家好,今天为大家分享一个超级厉害的 Python …...
K好数 C语言 蓝桥杯算法提升ALGO3 一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K 4,L 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输…...

2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)
活动 - AcWing 深海资源考察探险队的潜艇将到达深海的海底进行科学考察。 潜艇内有多个深海机器人。 潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动。 深海机器人在移动中还必须沿途采集海底生物标本。 沿途生物标本由最先遇到它的深海机器人完成采…...
Vue/cli项目全局css使用
第一步:创建css文件 在合适的位置创建好css文件,文件可以是sass/less/stylus...第二步:响预处理器loader传递选项 //摘自官网,引入样式 // vue.config.js module.exports {css: {loaderOptions: {// 给 sass-loader 传递选项sa…...

【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM
BitNet:用1-bit Transformer训练LLM 《BitNet: Scaling 1-bit Transformers for Large Language Models》 论文地址:https://arxiv.org/pdf/2310.11453.pdf 相关博客 【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM 【自然语言…...

安装及管理docker
文章目录 1.Docker介绍2.Docker安装3.免sudo设置4. 使用docker命令5.Images6.运行docker容器7. 管理docker容器8.创建image9.Push Image 1.Docker介绍 Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机&#…...

【MySQL】表的增删改查——MySQL基本查询、数据库表的创建、表的读取、表的更新、表的删除
文章目录 MySQL表的增删查改1. Create(创建)1.1 单行插入1.2 多行插入1.3 替换 2. Retrieve(读取)2.1 select查看2.2 where条件2.3 结果排序2.4 筛选分页结果 3. Update(更新)3.1 更新单个数据3.2 更新多个…...
C/C++蓝桥杯之日期问题
问题描述:小明正在整理一批文献,这些文献中出现了很多日期,小明知道这些日期都在1960年1月1日至2059年12月31日之间,令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日…...

【理解指针(二)】
文章目录 一、指针的运算(1)指针加整数(2)指针减指针(指针关系运算) 二、野指针(1)野指针的成因(1.1)指针未初始化(1.2)指针的越界访问…...
使用AI纠正文章
我写了一段关于哲学自学的读书笔记,处于好奇的目的,让AI帮我纠正语法和逻辑。我的原文如下: 泰勒斯第一次提出了水是万物本源的说法,对于泰勒斯为什么提出这样的观点,或者是这样的观点是怎么来的,我们无从所…...
拼多多API批量获取商品详情信息
随着电子商务的蓬勃发展,淘宝作为中国最大的在线购物平台之一,每天需要处理海量的商品上架和交易。为了提高工作效率,自动化上架商品和批量获取商品详情信息成为了许多商家和开发者的迫切需求。本文将详细介绍淘宝的API接口及其相关技术&…...

杨辉三角(C语言)
杨辉三角 一.什么是杨辉三角 一.什么是杨辉三角 每个数等于它上方两数之和。 每行数字左右对称,由1开始逐渐变大。 第n行的数字有n项。 前n行共[(1n)n]/2 个数。 … 当前行的数上一行的数上一行的前一列的数 void yanghuisanjian(int arr[][20], int n) {for (int i…...

宏任务与微任务:JavaScript异步编程的秘密
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

vant van-field 密码输入框小程序里隐藏、显示密码bug总结
老规矩先上效果图: vant 输入框组件 密码的隐藏与显示功能: 注: 用password属性控制密码的显示与隐藏 不要用type属性,type属性在真机上有时会没有效果 1、当然如果只用typepassword 不需要切换显示、隐藏也可以使用。 2、如果用到了密码的显示与…...
代理ip应用场景
代理IP是一种网络技术,它允许用户通过中间来访问互联网资源,隐藏真实的IP地址代理IP的应用场景非常泛,以下是一些常见的应用场景: 1 隐私保护:使用代理IP可以隐藏用户的真实IP地址,保护个人隐私。在浏览网…...

C/C++指针详解
接下来我们来介绍一下什么是指针? 指针其实就是元素存放地址,更加形象的比喻:在酒店中如果你想要去注必须去付费不然不能住,在计算机也同样如此(但是不需要付费哦)每当我们使用一个变量或其他需要申请空间…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...