深度解读Linux的3种“拷贝”命令

您所在的位置:网站首页 linux中如何复制代码 深度解读Linux的3种“拷贝”命令

深度解读Linux的3种“拷贝”命令

#深度解读Linux的3种“拷贝”命令| 来源: 网络整理| 查看: 265

概述

Linux 下有 3 种“拷贝”,分别是 ln,cp,mv,这 3 个命令貌似都能 copy 出一个新的文件出来。

细心的小伙伴看到我给 “拷贝” 打上了双引号?因为 Linux 的这 3 个命令有极大的区别,虽然用户看起来是拷贝出了新文件。

你是否曾经遇到过以下问题,想通原因了吗?:

ln 创建链接文件,软链接可以跨文件系统,硬链接跨文件系统会报错,为什么?;

mv 好像有时候快,有时候非常慢,有些时候还会残留垃圾,为什么?;

cp 拷贝数据有时快,有时候非常慢,源文件和目标文件所占物理空间竟然不一致?

本篇文章看完,希望你以上问题不再有疑问,从容使用 ln,mv,cp 命令。

温馨提示:

以下我们只讨论文件的简单操作,关于目录操作或者复杂参数的操作不在我们本次主题以内,我们忽略;

coreutils 库的代码版本用的是 8.3;

我们来看下简单的 3 个命令操作。首先在执行以下命令之前,准备一个不小的 test 的普通文件(比如 1G )。

“拷贝”命令一:ln

# 创建一个软链接文件

ln -s 。/test 。/test_soft_link

# 创建一个硬连接文件

ln 。/test 。/test_hard_link

你会发现当前目录出现了两个新文件 test_soft_link ,test_hard_link 。并且你会发现拷贝速度好快?为什么呢?

“拷贝”命令二:mv

把 test 文件“拷贝”到 。/backup/ 目录

mv 。/test 。/backup/

更神奇的是,好像 copy 一个 1 G 的文件,速度也贼快?

“拷贝”命令三:cp

把 test 文件“拷贝”到 。/backup/ 目录

cp 。/test 。/backup/

上面我们看到,好像 ln,mv,cp 这 3 个命令都是“拷贝”?好像都进行了数据复制出了新的文件?

答案:当然不是。这 3 个看起来都是复制出了新文件,但其实天壤之别。我们一个个来揭秘。

在揭秘这 3 个命令之前,我们必须先复习文件的基础知识点,Linux 的文件和目录的关系。

Linux 的文件和目录

在 深度剖析 Linux cp 的秘密 一文中,我们详细剖析了文件系统的形态。有几个关键知识点:

文件系统内有 3 个关键区域:超级块区域,inode 区域,数据 block 区域;

其中一个 inode 和一个文件对应,包含了文件的元数据信息;

一个 inode 有唯一的编号,可以理解成就是单调递增的整数。比如 1,2,3,4,5,6,,,,;

关于上面,我们注意到 inode 其实标识的是一个平坦的结构,inode 索引到数据 data 区域,每个 inode 都有唯一编号。

问题来了:Linux 的目录是一个倒挂的树形结构呀,为什么上面说 inode 是平坦的结构?如下:

f4c02e48-be64-11eb-9e57-12bb97331649.png

Linux 的文件确实是树形结构,inode 也确实是平坦的结构。你会感觉到因为是因为之前故意忽略了一个几个东西:目录文件和 dentry 项。这是两个非常重要的概念,我们逐个解释下。

文件系统中其实有两种文件类型,分为:

普通文件(这里把链接文件包含在普通文件以内)

目录文件

可以通过 inode-》i_mode 字段,使用 S_ISREG,S_ISDIR 这两个宏来判断是哪个类型。普通文件很容易理解,就是普通的数据文件,inode 里面存储元数据,inode 可以索引到 block,block 里面存储用户的数据。目录文件 inode 存储元数据,block 里面存储的是目录条目。目录条目是什么样子的东西?

举个形象的例子:在当前 testdir 目录下,有 dir1,dir2,dir3 这三个文件。假设 dir1 的 inode 编号是 1024,dir2 是 1025,dir3 是 1026。

那么现实是这样的:

testdir 这个目录首先会对应有一个 inode,inode-》i_mode 的类型是目录,并且还会有 block 块,通过 inode-》i_blocks 能索引到这些 block;

block 里面存储的内容很简单,是一个个目录条目,内核的名字缩写为 dirent,每一个 dirent 本质就是一个 文件名字 到 inode 编号的映射,所以,testdir 这个目录文件的 block 里存了 3 条记录 [dir1, 1024],[dir2, 1025],[dir3, 1026];

f4cb1358-be64-11eb-9e57-12bb97331649.png

所以,目录到底是什么呢?就存储形态而已,目录也是文件,存储的是 名字 到 inode number 的映射表。dirent 其实就是 directory entry 的缩写。

好像还没讲到树形结构?

其实已经讲了一半了,树形结构的数据结构基础已经有了,就是目录文件和 dirent 的实现。

假设叶子结点的为普通文件

针对开篇的图,其实磁盘上存储了 3 个目录文件

f4e58710-be64-11eb-9e57-12bb97331649.png

这个时候,读者朋友你是不是都可以用笔画出一个树形结构了,内存的树形结构也是这么来的。通过磁盘的映射数据构造出来。在内存中,这个树形结构的节点用 dentry 来表示(通常翻译成目录项,但是笔者认为这个翻译很容易让人误解)。

以下是笔者从内核精简出来的 dentry 结构体,通过这个总结到几个信息:

dentry 绑定到唯一一个 inode 结构体;

dentry 有父,子,兄弟的索引路径,有这个就足够在内存中构建一个树了,并且事实也确实如此;

struct dentry {

// 。。。

struct dentry *d_parent; /* 父节点 */

struct qstr d_name; // 名字

struct inode *d_inode; // inode 结构体

struct list_head d_child; /* 兄弟节点 */

struct list_head d_subdirs; /* 子节点 */

};

所以,看到现在理解了吗?父、子 指针,这就是经典的树形结构需要的字段呀。目录文件类型为树形结构提供了存储到磁盘持久化的一种形态,是一种 map 表项的形态,每一个表项我们叫做 dirent 。文件树的结构在内存中以 dentry 结构体体现。

划重点:仔细理解下 dirent 和 dentry 的概念和形态,仔细理解磁盘的数据形态和内存的数据结构形态,后面要考的。

ln 命令

ln 是 Linux 的基础命令之一,是 link 的缩写,顾名思义就是跟链接文件相关的一个命令。一般语法如下:

ln [OPTION]。。。 TARGET LINK_NAME

ln 可以用来创建一个链接文件,有趣的是,链接文件有两个不同的类别:

软链接文件

硬链接文件

1 什么是软链接文件?

无论是软链接还是硬链接都是“链接”文件,也就是说,通过这个链接文件都能找到背后的那个“源文件”。首先说结论:

软链接文件是一个全新的文件,有独立的 inode,有自己的 block ,而这个文件类型是“链接文件”的类型而已;

这个软链接文件的内容是一段 path 路径,这个路径直接指向源文件;

所以,你明白了吗?软链接文件就是一个文件而已,文件里面存储的是一个路径字符串。所以软链接文件可以非常灵活,链接文件本身和源解耦,只通过一段路径字符串寻路。

所以,软链接文件是可以跨文件系统创建的。

f50c735c-be64-11eb-9e57-12bb97331649.png

有兴趣的小伙伴可以去看源码实现,在 coreutils 库里,调用栈如下:

main -》 do_link -》 force_symlinkat -》 symlinkat

也就是说最终调用的是系统调用 symlinkat 来完成创建,而这个 symlinkat 系统调用在内核由不同的文件系统实现。举个例子,如果是 minix 文件系统,那么对应的函数就是 minix_symlink。minix_symlink 这个函数上来就是新建一个 inode ,然后在对应的目录文件中添加一个 dirent 。来来来,我们看一眼 minix_symlink 的主干代码:

static int minix_symlink(struct inode * dir, struct dentry *dentry,

const char * symname)

{

// 。。。

// 新建一个 inode,inode 类型为 S_IFLNK 链接类型

inode = minix_new_inode(dir, S_IFLNK | 0777, &err);

if (!inode)

goto out;

// 填充链接文件内容

minix_set_inode(inode, 0);

err = page_symlink(inode, symname, i);

if (err)

goto out_fail;

// 绑定 dentry 和 inode

err = add_nondir(dentry, inode);

//。。。

}

划重点:软链接文件是新建了一个文件,文件类型是链接文件,文件内容就是一段字符串路径。分配新的 inode,内存对应新的 dentry ,当然了,也新增了一个 dirent 。软链文件可以跨越不同的文件系统。

2 什么是硬链接文件?

现在我们知道了,软链接文件怎么找到源文件的?通过路径找到的,路径就存储在软链接文件中。硬链接文件又怎么办到的呢?

硬链接很神奇,硬链接其实是新建了一个 dirent 而已。下面是重点:

硬链接文件其实并没有新建文件(也就是说,没有消耗 inode 和 文件所需的 block 块);

硬链接其实是修改了当前目录所在的目录文件,加了一个 dirent 而已,这个 dirent 用一个新的 name 名字指向原来的 inode number;

f5163dce-be64-11eb-9e57-12bb97331649.png

重点来了,由于新旧两个 dirent 都是指向同一个 inode,那么就导致了一个限制:不能跨文件系统。因为,不同文件系统的 inode 管理都是独立的。

感兴趣的同学可以试下,跨文件系统创建硬链接就会报告如下错误:Invalid cross-device link

sh-4.4# ln /dev/shm/source.txt 。/dest.txt

ln: failed to create hard link ‘。/dest.txt’ =》 ‘/dev/shm/source.txt’: Invalid cross-device link

有兴趣的小伙伴可以去看源码实现,在 coreutils 库里,调用栈如下:

main -》 do_link -》 force_linkat -》 linkat

也就是说最终调用的是系统调用 linkat 来完成创建,而这个 linkat 系统调用在内核由不同的文件系统实现。举个例子,如果是 minix 文件系统,那么对应的函数就是 minix_link。这个函数从内存上来讲是把一个 dentry 和 inode 关联起来。从磁盘数据结构上来讲,会在对应目录文件中增加一个 dirent 项。

划重点:硬链接只增加了一个 dirent 项,只修改了目录文件而已。不涉及到 inode 数量的变化。新的 name 指向原来的 inode。

mv 命令

mv 是 move 的缩写,从效果上来看,是把源文件搬移到另一个位置。

你是否思考过 mv 命令内部是怎么实现的呢?

是把源文件拷贝到目标位置,然后删除源文件吗?所以,说 mv 貌似也是“拷贝”?

其实,并不是,准确的说不完全是。

对于 mv 的讨论,要拆分成源和目的文件是否在同一个文件系统。

1 源 和 目的 在同一个文件系统

mv 命令的核心操作是系统调用 rename ,rename 从内核实现来说只涉及到元数据的操作,只涉及到 dirent 的增删(当然不同的文件系统可能略有不同,但是大致如是)。通常操作是删除源文件所在目录文件中的 dirent,在目标目录文件中添加一个新的 dirent 项。

划重点:inode number 不变,inode 不变,不增不减,还是原来的 inode 结构体,所以数据完全没有拷贝。

mv 的调用栈如下,感兴趣的可以自己调试。

main -》 renameat2

main -》 movefile -》 do_move -》 copy -》 copy_internal -》 renameat2

我们用例子来直观看下,首先准备好一个 source.txt 文件,用 stat 命令看下元数据信息:

sh-4.4# stat source.txt

File: source.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 78h/120d Inode: 3156362 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

我们看到 inode 编号是:3156362 。然后执行 mv 命令:

sh-4.4# mv source.txt dest.txt

然后 stat 看下 dest.txt 文件的信息:

sh-4.4# stat dest.txt

File: dest.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 78h/120d Inode: 3156362 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

发现没?inode 编号还是 3156362 。

2 源 和 目的 在不同的文件系统

还记得之前我们提过,由于硬链接是直接在目录文件中添加一个 dirent,名字直接指向源文件的 inode ,不同文件系统都是独立的一套 inode 管理系统,所以硬链接不能跨文件系统。

那么问题来了,mv 遇到跨文件系统的场景呢,怎么处理?是否还是 rename ?

举个例子,如下命令,源和目的是不同的文件系统。我虚拟机的挂载点如下:

sh-4.4# df -h

Filesystem Size Used Avail Use% Mounted on

overlay 59G 3.5G 52G 7% /

tmpfs 64M 0 64M 0% /dev

shm 64M 0 64M 0% /dev/shm

我故意挑选 /home/qiya/testdir 和 /dev/shm/ ,这两个目录分别对应了 “/” 和 “/dev/shm/” 的挂载点的文件系统,分属两个不同的文件系统。我们先提前看下源文件的信息(主要是 inode 信息):

sh-4.4# stat /dev/shm/source.txt

File: /dev/shm/source.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 7fh/127d Inode: 163990 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

我们执行以下 mv 命令:

sh-4.4# mv /dev/shm/source.txt /home/qiya/testdir/dest.txt

然后看下目的文件信息:

sh-4.4# stat dest.txt

File: dest.txt

Size: 0 Blocks: 0 IO Block: 4096 regular empty file

Device: 78h/120d Inode: 3155414 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)

对比有没有发现,inode 的信息是不一样的,inode number 是不一样的(是不是跟上面同一文件系统下的 mv 现象不一致)什么原因呢?我下面一一道来,从原理出剖析。

当系统调用 rename 的时候,如果源和目的不在同一文件系统时,会报告 EXDEV 的错误码,提示该调用不能跨文件系统。

#define EXDEV 18 /* Cross-device link */

所以,rename 是不能用于跨文件系统的,这个时候怎么办?

划重点:这个时候操作分成两步走,先 copy ,后 remove 。

第一步:走不了 rename ,那么就退化成 copy ,也就是真正的拷贝。读取源文件,写入目标位置,生成一个全新的目标文件副本;

这里调用的 copy_reg 的函数封装(要知道这个函数是 cp 命令的核心函数,在 深度剖析 Linux cp 的秘密 有深入剖析过 );

ln,mv,cp 是在 coreutils 库里的命令,公用函数本身就是可以复用的;

第二步:删除源文件,使用 rm 函数删除;

思考问题:mv 跨文件系统的时候,如果第一步成功了,第二步失败了(比如没有删除权限)会怎么样?

会导致垃圾。也就是说,目标处创建了一个新文件,源文件并没有删除。这个小实验有兴趣的可以试下。

cp 命令

cp 命令才是真正的数据拷贝命令,即拷贝元数据,也会拷贝数据。cp 命令也是我之前花了万字篇幅分析的命令,详细可见:深度剖析 Linux cp 的秘密。这里就不再赘述,下面提炼出关于拷贝的 3 种模式。

涉及到数据拷贝的,关键有个 --sparse 参数,可以控制拷贝数据的 IO 次数。

1 auto 模式

重点:跳过文件空洞。是 cp 默认的模式

cp src.txt dest.txt

f599f0c4-be64-11eb-9e57-12bb97331649.gif

2 always 模式

重点:跳过文件空洞,还会跳过全 0 数据,是空间最省的模式。

cp --sparse=always src.txt dest.txt

fa37965e-be64-11eb-9e57-12bb97331649.gif

3 never 模式

重点:无脑拷贝,从头拷贝到尾,不识别物理空洞和全 0 数据,是速度最慢的一种模式。

cp --sparse=never src.txt dest.txt

faa6e70c-be64-11eb-9e57-12bb97331649.gif

复用之前画的这 3 张图,很形象的体现了 cp 的行为。

总结

目录文件是一种特殊的文件,可以理解成存储的是 dirent 列表。dirent 只是名字到 inode 的映射,这个是树形结构的基础;

常说目录树在内存中确实是一个树的结构,每个节点由 dentry 结构体表示;

ln -s 创建软链接文件,软链接文件是一个独立的新文件,有一个新的 inode ,有新的 dentry,文件类型为 link,文件内容就是一条指向源的路径,所以软链的创建可以无视文件系统,跨越山河;

ln 默认创建硬连接,硬链接文件只在目录文件里添加了一个新 dirent 项 《新name:原inode》,文件 inode 还是和原文件同一个,所以硬链接不能跨文件系统(因为不同的文件系统是独立的一套 inode 管理方式,不同的文件系统实例对 inode number 的解释各有不同);

ln 命令貌似创建出了新文件,但其实不然,ln 只跟元数据相关,涉及到 dirent 的变动,不涉及到数据的拷贝,起不到数据备份的目的;

mv 其实是调用 rename 调用,在同一个文件系统中不涉及到数据拷贝,只涉及到元数据变更( dirent 的增删 ),所以速度也很快。但如果 mv 的源和目的在不同的文件系统,那么就会退化成真正的 copy ,会涉及到数据拷贝,这个时候速度相对慢一些,慢成什么样子?就跟 cp 命令一样;

cp 命令才是真正的数据拷贝命令,速度可能相对慢一些,但是 cp 命令有 --spare 可以优化拷贝速度,针对空洞和全 0 数据,可以跳过,从而针对稀疏文件可以节省大量磁盘 IO;

编辑:jq

原文标题:深度剖析 Linux 的 3 种“拷贝”命令

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

扫一扫,分享给好友

复制链接分享 评论

发布评论请先 登录

相关推荐

施耐德发布能源改革宏观洞察报告 美国国防部授权甲骨文执行绝密任务 甲骨文近日宣布,美国国防部 (DoD) 已授权甲骨文云基础设施(OCI) 托管绝密/敏感分区信息 (.... 发表于 03-21 16:34 • 17次 阅读 盘点 5 款值得收藏的 Linux 开发板 [quote]导读:我给大家整理了 5 款值得收藏的 Linux 开发板,有些已经涨价很多了。至于未来还能不能继续“理财”,大家自行判断... 发表于 03-21 15:54 • 204次 阅读 盘点 5 款值得收藏的 Linux 开发板 贸泽电子携手Bourns推出全新电子书 高通升级产品路线图 近日,Oracle很高兴地宣布 Oracle Advanced HCM Controls 是Orac.... 发表于 03-21 14:24 • 82次 阅读 详解测量系统的能力指数 无论在六西格玛还是在体系的质量工具的培训中,绝大部分涉及测量系统分析的内容都可称为类型2的量具研究。.... 发表于 03-21 14:06 • 0次 阅读 详解测量系统的能力指数 卡尔曼滤波器的基本原理 卡尔曼滤波器是一种基础预测定位算法。原理非常简单易懂。 的头像 机器视觉智能检测 发表于 03-21 13:47 • 113次 阅读 GD的抗干扰能力为何不如STM32 GD32是国内开发的一款单片机,据说开发的人员是来自ST公司的,GD32也是以STM32作为模板做出.... 的头像 电子工程世界 发表于 03-21 13:42 • 116次 阅读 如何使用计算机视觉技术识别棋子及其在棋盘上的位置 本期我们将一起学习如何使用计算机视觉技术识别棋子及其在棋盘上的位置 的头像 机器视觉智能检测 发表于 03-21 13:16 • 93次 阅读 如何使用 go 实现红黑树 二叉查找树也叫二叉搜索树,也叫二叉排序树,它具有以下特点:1. 如果左子树不为空,则左子树上的结点的.... 的头像 Linux爱好者 发表于 03-21 11:54 • 105次 阅读 Go语言的默认机制 不过麻烦的事情来了。我们写一个程序,就是想在别人的电脑上运行的。然而,Go语言的默认机制,会泄漏我们.... 的头像 Linux爱好者 发表于 03-21 11:50 • 123次 阅读 测试自动化的两种方法 许多测试自动化工具提供了记录和回放功能,允许用户交互式地记录用户操作,并回放任何次数,并将实际结果与.... 的头像 汽车电子硬件设计 发表于 03-21 10:56 • 81次 阅读 数据波动的异常判别方法 在各种业务指标中,数据往往不是静止不变的,尤其是当一些核心的指标发生了变化、波动时,就需要判断这样的.... 的头像 数据分析与开发 发表于 03-21 09:32 • 62次 阅读 电磁流量计的工作原理及应用现状 在对流动物体进行测量时,准确性是很难保证的。在钢铁厂生产的过程中,粉尘产生量是非常大的,而且 振动、.... 发表于 03-21 08:56 • 2次 阅读 虹科Flow如何帮助企业优化数据管道性能 本期虹科云课堂直播课程即将接近尾声。【虹科云课堂】虹科Flow——数据管道的可观察性解决方案”直播课.... 的头像 广州虹科电子科技有限公司 发表于 03-20 15:15 • 310次 阅读 与OpenHarmony相关的三场技术直播 因为突发的疫情,我们的生活按下了“慢行键”,大家现在的工作状态如何呢?anyway,希望大家都保持积.... 的头像 发烧友研习社 发表于 03-20 13:44 • 235次 阅读 SONiC正在成为云架构中领先的开放网络操作系统 SONIC是一个基于 Linux 的开源网络操作系统,能够在多个厂商的交换机和专用集成电路(ASIC.... 的头像 是德科技KEYSIGHT 发表于 03-20 13:16 • 206次 阅读 为什么辛苦做的测试数据要重测 A同学兴奋地捧着一组测试数据来到经理这汇报,正准备接受胜利的褒奖,可是一盆冷水当头泼下 “你的数据得.... 的头像 是德科技KEYSIGHT 发表于 03-19 10:34 • 184次 阅读 曙光智算赋能科研突破与业务拓新 全世界“人类基因组计划”带来一场现代生命科学革命。在中国有这样一些“低调”却不简单的企业,正依托强大.... 的头像 中科曙光 发表于 03-18 16:34 • 387次 阅读 ADI为Linux发行版扩充器件驱动 Ti Group选择是德科技5G测试平台 Keysight Technologies, Inc.(纽约证券交易所代码:KEYS)是一家领先的技.... 发表于 03-18 14:51 • 1043次 阅读 占位面积很小的自定义进度指示器progressbutton 概述 1、描述:progressbutton是占位面积很小的自定义进度指示器。默认实现提供了一个pi.... 发表于 03-18 14:45 • 4次 阅读 解析每个按钮点击事件所上报的数据 项目介绍: 项目名称:打点数据上报 所属系列:openharmony的第三方组件适配移植 功能:可以.... 发表于 03-18 11:00 • 7次 阅读 关于Linux命令行烧写固件 说明:如果已经安装旧版本的烧写工具,请先点击“驱动卸载”按钮下载驱动,然后再点击 “驱动安装”按钮安.... 的头像 HarmonyOS官方合作社区 发表于 03-18 10:57 • 124次 阅读 为什么要尽量避免使用IN和NOT IN呢? 单独查询 select id1 from test2 是一定会报错: 消息 207,级别 16,状态.... 的头像 Android编程精选 发表于 03-18 09:46 • 109次 阅读 推荐两个工作流的springboot项目 今天主要推荐两个工作流的springboot项目,开源项目中有具体的部署操作文档,核心表结构说明,都.... 的头像 Android编程精选 发表于 03-18 09:31 • 116次 阅读 四维图新旗下世纪高通为奥运交通保障提供智能化地图服务 日前,北京冬残奥会闭幕式在国家体育场“鸟巢”顺利举行,标志这一世界高水平体育赛事的精彩落幕。奥运会期.... 的头像 四维图新NavInfo 发表于 03-18 09:02 • 245次 阅读 i.MX6ULL驱动开发3—GPIO寄存器配置原理 介绍了字符设备驱动的两种新旧开发方式,并使用一个虚拟的字符驱动来学习字符设备的开发的流程。 的头像 码农爱学习 发表于 03-18 08:17 • 174次 阅读 i.MX6ULL驱动开发3—GPIO寄存器配置原理 硅表面清洁程序对硅氧化的影响 本文报告了证明硅的预氧化清洗对5种不同清洗程序的氧化动力学的影响的实验结果。这些清洗处理包括简单地冲.... 发表于 03-17 16:06 • 6次 阅读 硅表面清洁程序对硅氧化的影响 基于后向散射场数据的舰船目标高分辨雷达成像技术 摘要: 为使高分辨雷达图像更精确反映舰船目标的结构、形状特点,研究了基于后向散射场数据的舰船目标高分.... 发表于 03-17 15:47 • 6次 阅读 Hi3861开发板串口看不到命令行是为什么?   1)开发板启动,只有教程中的AT命令能使用,敲回车报ERROR;   2)开发板没有linux常用命令吗(ls、pwd、cd)?还... 发表于 03-17 15:41 • 820次 阅读 雷蛇启用三个渠道的商户收单机构 伊顿公司入选富时社会责任指数系列 近日,全球动力管理公司伊顿(纽交所代码:ETN)再次入选富时社会责任指数系列(FTSE4Good I.... 发表于 03-17 15:13 • 1224次 阅读 树莓派32 位和 64 位在实际测试中表现如何 上周,树莓派发布了用户期待已久的 64 位 Raspberry Pi OS,从理论上来说 64 位的.... 的头像 Linux爱好者 发表于 03-17 14:28 • 266次 阅读 介绍assert的使用方法 很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使.... 的头像 Linux爱好者 发表于 03-17 14:06 • 193次 阅读 如何使用 Compose 进行构建 适用于 Wear OS 的 Compose 已推出了开发者预览版,使用 Compose 构建 Wea.... 的头像 谷歌开发者 发表于 03-17 13:44 • 208次 阅读 CFI的基本概念 控制流劫持是一种危害性极大的攻击方式,攻击者能够通过它来获取目标机器的控制权,甚至进行提权操作,对目.... 的头像 Linux阅码场 发表于 03-17 13:36 • 147次 阅读 华为与Zain KSA签署谅解备忘录 曙光计算服务构建算力网络体系 目前,河南师范大学某课题组已经完成tracer2d算法在Fortran环境下的测试运行,证实了tra.... 发表于 03-17 10:39 • 185次 阅读 OpenHarmony应用开发为什么不首选C/C++作为应用开发语言呢 OpenHarmony本来就是C和C++开发的,支持C/C++语言环境。应用开发为什么不首选C/C++作为应用开发语言。 1、相对于其他开... 发表于 03-17 10:30 • 889次 阅读 i.MX6ULL嵌入式Linux开发6-系统烧写到eMMC 本篇主要介绍了Linux移植的系统打包烧录的EMMC的方法,使用MfgTool工具,将**uboot.... 的头像 码农爱学习 发表于 03-17 09:17 • 1568次 阅读 i.MX6ULL嵌入式Linux开发6-系统烧写到eMMC 东软通过TISAX评审 华为获新加坡资媒局授予数据保护信任标志 全球领先的ICT (信息与通信)基础设施和智能终端提供商华为在新加坡的子公司华为国际(Huawei .... 的头像 lhl545545 发表于 03-17 09:15 • 1762次 阅读 RFE递归特征消除特征排序 本文主要从股市数据变量的特征分布及特征重要性两个角度对数据进行分析。 的头像 Linux爱好者 发表于 03-16 17:26 • 667次 阅读 在CPU上如何同时尝试 getrandom Jason Donenfeld 是 WireGuard 的主要开发者,同时他也是 Linux 内核随.... 的头像 Linux爱好者 发表于 03-16 17:19 • 572次 阅读 基础算法:差分数组详解 前文说前缀和主要适用的场景是原始数组不会被修改的情况下,频繁查询某个区间的累加和。 的头像 算法与数据结构 发表于 03-16 15:57 • 456次 阅读 如何用 Markdown 来做 PPT 相信绝大多数朋友做 PPT(幻灯片 / Slides / Deck 等各种称呼了)都是用的 Powe.... 的头像 数据分析与开发 发表于 03-16 14:10 • 131次 阅读 时间序列分析和预测基础理论知识 今天给大家带来一篇实战案例,本案例旨在运用之前学习的时间序列分析和预测基础理论知识,用一个基于交通数.... 的头像 数据分析与开发 发表于 03-16 14:05 • 152次 阅读 重复值处理的常用方法 重复值处理主要涉及两个部分,一个是找出重复值,第二个是删除重复值,也就是根据自己设定的条件进行删除操.... 的头像 数据分析与开发 发表于 03-16 13:55 • 157次 阅读 关于指数对比度增强FPGA实现 对比度增强是个广泛的话题,前文中关于直方图均衡的方法,其实就是一种对比度增强。而对比度增强,就是提高.... 的头像 FPGA技术江湖 发表于 03-16 11:46 • 165次 阅读 详解Nginx高性能的HTTP和反向代理服务器 Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 Ngi.... 的头像 Linux爱好者 发表于 03-16 11:23 • 181次 阅读 一文深入理解操作系统的进程调度 想深入理解操作系统的进程调度,需要先获得一些准备知识,这样后面就不懵圈啦: 的头像 Linux爱好者 发表于 03-16 10:58 • 153次 阅读 如何编译已有的C++去生成可在OpenHarmony系统使用的动态库文件呢 原有Linux环境下的C++ 项目,可通过在CMakeList文件中设置使用的工具链,编译出各平台开发板上可使用的so文件。 请问,我现... 发表于 03-16 10:42 • 641次 阅读 如何打造数据驱动型企业?亚马逊云科技来答疑解惑 我们经常被问及什么是数据驱动型组织?数据驱动可以加速哪些业务成果?什么是维持数据驱动型创新所需的运营.... 的头像 华夏大视野 发表于 03-16 10:22 • 156次 阅读 CPU负荷重服务器数据延迟高怎么办 满载的应该是大脑而非机器。“东数西算”工程背景下,各应用场景对数据处理能力的考量和需求日新月异。这带.... 发表于 03-16 10:19 • 9次 阅读 曙光助力车企应对海量多类型数据 龙芯中科推出智慧访客解决方案 近日,全球光学解决方案的领导者艾迈斯欧司朗(瑞士证券交易所股票代码:AMS)宣布推出全新AS7343.... 发表于 03-16 10:15 • 590次 阅读 如何鉴别Linux服务器是否被入侵 随着开源产品的越来越盛行,作为一个Linux运维工程师,能够清晰地鉴别异常机器是否已经被入侵了显得至.... 的头像 马哥Linux运维 发表于 03-16 10:08 • 210次 阅读 LAN8720A无法接收数据是为什么?怎么解决?   1.环境使用RT-Studio创建的标准F2工程,已经修改了HSE时钟。   RT版本:4.0.3   STM32CubeMX版本6.4 ... 发表于 03-16 09:34 • 837次 阅读 如何用python爬取抖音app数据 记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。 的头像 马哥Linux运维 发表于 03-16 09:07 • 186次 阅读 Linux namespace和cgroups简介 先放结论,namespace 是用来做资源隔离, cgroup 是用来做资源限制。 的头像 马哥Linux运维 发表于 03-16 09:03 • 204次 阅读 解析数据结构的常用七大排序算法 为了让大家掌握多种排序方法的基本思想,本篇文章带着大家对数据结构的常用七大算法进行分析:包括直接插入.... 的头像 C语言编程学习基地 发表于 03-16 08:22 • 152次 阅读 润和鸿蒙系列开发板资料总结(原理图+源代码+教程) 1、润和 HH-SCDAYU200 鸿蒙开发套件 简介:基于Rockchip RK3568,集成双核心架构GPU以及高效能NPU;板载四核6... 发表于 03-15 16:40 • 11085次 阅读 润和鸿蒙系列开发板资料总结(原理图+源代码+教程) 怎样去处理OpenHarmony执行hb命令报错的问题呢 在执行hb命令的时候报错: 重新安装环境,在安装hb的时候出现下面的问题警告: 处理方式:在openharmony 代码根目录下使用... 发表于 03-15 14:33 • 620次 阅读 有没有能用在51单片机平台上的语音芯片? 最近看了一下云知声的蜂鸟M系列的离线语音,但是研究了半天不知道能不能移植到51单片机的平台上(就是通过串口通讯),后来又看... 发表于 03-11 17:08 • 1673次 阅读 Tina Linux 系统介绍 Tina Linux是全志科技基于Linux内核开发的针对智能硬件类产品的嵌入式软件系统。Tina Linux基于openwrt-14.07 版本的软件开... 发表于 03-11 15:05 • 4617次 阅读 YoC开发环境设置手册 一、前言 根据开发用户组的不同,YoC 支持在 Linux 命令行环境和 Windows CDK IDE 中进行开发。本节介绍如何在 W... 发表于 03-09 07:02 • 839次 阅读 AM4379 AM437x ARM Cortex-A9 微处理器 (MPU) TI AM437x高性能处理器基于ARM Cortex-A9内核。 这些处理器通过3D图形加速得到增强,可实现丰富的图形用户界面,还配备了协处理器,用于进行确定性实时处理(包括EtherCAT,PROFIBUS,EnDat等工业通信协议)。该器件支持高级操作系统(HLOS)。基于Linux的® 可从TI免费获取。其它HLOS可从TI的设计网络和生态系统合作伙伴处获取。 这些器件支持对采用较低性能ARM内核的系统升级,并提供更新外设,包括QSPI-NOR和LPDDR2等存储器选项。 这些处理器包含功能方框图中显示的子系统,并且后跟相应的“说明”中添加了更多信息说明。 处理器子系统基于ARM Cortex-A9内核,PowerVR SGX™图形加速器子系统提供3D图形加速功能以支持显示和高级用户界面。 可编程实时单元子系统和工业通信子系统(PRU-ICSS与ARM内核分离,允许单独操作和计时,以实现更高的效率和灵活性.PRU-ICSS支持更多外设接口和EtherCAT,PROFINET,EtherNet /IP,PROFIBUS,以太网Powerlink,Sercos,EnDat等... 发表于 09-25 11:51 • 532次 阅读 AM4379 AM437x ARM Cortex-A9 微处理器 (MPU)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3