Linux(1. 基本操作_命令)
目录
关于超级用户root:
root用户可以做什么?
避免灾难:
格式约定:
浏览硬盘:
命令行补全和通配符:
命令行补全:
通配符:
常用基本命令:
查看目录和文件:
列出目录内容:ls命令
编辑
改变目录:cd命令
显示当前目录:pwd命令
列出目录内容:dir 和 vdir 命令:
查看文本文件:cat和more 命令
显示文件开头和结尾:head和tail命令
更好地阅读文本:less 命令
查找文件内容:grep 命令
文件在哪里:find 命令
定位文件:locate 命令
查找特定程序:whereis 命令
查看用户及版本信息:
who:
whoami:
uname:
寻求帮助:man 命令
获取命令简介:whatis 和 apropos 命令
whatis:
apropos:
小结:
关于超级用户root:
从字面意思来讲root就是“根”的意思,所有系统设置都需要用root用户来完成。所以超级用户也叫做根用户,这就相当与Windouws中的Administrator用户。
root用户可以做什么?
答案是任何事情,root用户是整个系统中拥有最高权限的用户可以对系统做任何事情。可以访问,修改,删除系统中的任何文件和目录。
另外,下面的这些受限权限一般来说只有root用户能够执行。
- 添加或删除用户
- 安装软件
- 添加或删除设备
- 启动和停止网络服务
- 某些系统调用(如对内核的申请)
- 关闭系统
避免灾难:
如上述提到的,root用户可以在系统中做任何事情,那么保证安全性就很重要。系统不会因为用户输入的命令足够愚蠢就不执行反而会乐滋滋地执行然后把自己完完整整地删除。
rm -rf // 删除根目录下的所有文件和目录
另外,一个安全可靠的root口令来保证安全也是很有必要的。
和普通用户一样,root账号可以用来直接登录系统,但由于任何一个误操作都有可能导致灾难性的后果显然是很糟糕的。
那么就应该在必要时才使用root账号,于是Linux提供了这样一个特性:用户可以使用不带参数的su命令将自己提升为root权限(当然需要口令),最后也可以用exit回到先前的用户状态。
另一个是sudo,可以让我们临时使用root身份运行一个程序并在执行完成后退回普通用户,后面还会讲。
(sudo的全称是super user do意思是超级用户去做)
格式约定:
Linux命令行界面有一个输入行用于输入命令,命令行以一个美元符“$”作为提示符表示用户可以输入命令了。
如果为普通用户标识符为“$”,如果是root身份那么标识符变为“#”。
浏览硬盘:
首先,进入根目录
cd / 进入根目录
ls 列出目录和文件
这样就可以现实根目录下的目录和文件。
同时我们也可以在根目录下输入tree详细列出目录,但是由于可能比较多会刷很久,如果先要中途停止可以按Ctrl+C来停止。
同时我们也可以通过不带参数(或者带~)的cd命令进入用户主目录
命令行补全和通配符:
命令行补全:
当输入文件名之类较长的名字时,我们可以使用命令行补全,输入前几个字符时按下Tab键可以自动将文件名补全。
例如在上面这种情况下按下Tab的效果为:
当以输入的字符开头的文件不止一个,可以按两下Tab键,Shell会以列表的形式给出所有以输入字符开头的文件。
例如在上面这种情况下按两下Tab的效果为:
通配符:
通配符是 * ? [ ]
*
(星号):
匹配零个或多个字符。
例如:
*.txt 匹配所有以 .txt 结尾的文件,如 file1.txt、document.txt。
data* 匹配所有以 data 开头的文件,如 data1、data_file。
?
(问号):
匹配单个字符。
例如:
file?.txt 匹配 file1.txt、fileA.txt,但不匹配 file10.txt。
?.log 匹配 a.log、b.log,但不匹配 abc.log。
[]
(方括号):
匹配方括号内的任意单个字符。
例如:
file[1-3].txt 匹配 file1.txt、file2.txt、file3.txt。
data[abc].csv 匹配 dataa.csv、datab.csv、datac.csv。
这些通配符在命令行中非常有用,尤其是在使用如 ls
、cp
、rm
等命令时,可以方便地选择多个文件
常用基本命令:
查看目录和文件:
列出目录内容:ls命令
ls命令是list的简化形式,选项非常的这里只介绍常用的选项。基本语法如下:
- 不带任何参数的Is 命令用于列出当前目录下的所有文件和子目录。例如:
在这个列表中,可以方便地区分目录和文件。默认情况下,目录显示为蓝色;普通文件显示为黑色;可执行文件显示为草绿色;淡蓝色则表示这个文件是一个链接文件(相当于 Windows 中的快捷方式)。
- 用户也可以使用带-F选项的ls命令:
可以看到,F选项会在每个目录后加上“/”,在可执行文件后加“*”,在链接文件后加上“@”。这个选项在某些无法显示颜色的终端上比较有用。
- 隐含文件:
以上文件就是主目录下的所有文件了吗?可以使用-a选项一探究竟。
可以看到很多头部带“.”的文件名。在Linux中,这些文件称作隐含文件,在默认情况下并不会显示。除非指定使用-a 选项显示所有文件
- 命令组合使用:
命令的选项可以组合使用,如果要指定多个选项,只需要使用一个短横线,无须给每个选项都加一个短横线。例如:
- l 选项:
这个选项可以用来查看文件的各种属性。例如:
上面共有8个信息栏,从左至右依次表示:
- 文件的权限标志(后面会详细介绍)。
- 文件的链接个数(后面会详细介绍)。
- 文件所有者的用户名。
- 该用户所在的用户组组名(所有者和用户组的概念后面写)。
- 文件的大小。
- 文件最后一次被修改时的日期。
- 文件最后一次被修改时的时间。
- 文件名。
在Is 命令后跟路径名可以查看该子目录中的内容。例如:
改变目录:cd命令
cd命令用于Linux文件直通的不同部分之间切换,输入cd命令,后面跟踪一个路径名作为参数就可以直接进入另一个子目录。其中cd后面以两个点(.)作为参数代表会到上级目录。
显示当前目录:pwd命令
pwd命令会显示当前所在位置也就是工作目录,例如:
列出目录内容:dir 和 vdir 命令:
Windows用户可能比较熟悉dir这个命令。Linux中也有dir命令,但是功能比Is命令少一些。
vdir命令相当于为1s命令加上小选项,可以默认情况下列出目永和文件的完整信息。
查看文本文件:cat和more 命令
cat命令:
cat 命令用于查看文件的内容(通常这是一个文本文件...),后跟文件名作为参数。例如
cat 命令后面可以跟多个文件名作为参数,当然也可以使用通配符。例如:
为了调试方便,常常需要显示代码行号。为此,cat 命令提供了-n 选项,可以在每一行代码前显示代码行号。
more命令:
cat命令会一次性将所有内容全部显示在屏幕上,这看起来是个“缺陷”。因为对一个长达几页其至几十页的文件而言,cat 命令显得毫无用处。为此,Linux 提供了more命令逐页地显示文件内容。
例如,以下是对一个含有一千行hello的txt文件使用more命令展示:
可以看到,more 命令会在最后显示一个百分比,表示已显示的内容占整个文件的比例,按空格键就可以向下翻动一页,按Enter键可以向下滚动一行,按Q键可以退出。
显示文件开头和结尾:head和tail命令
head 和 tail分别用于显示文件的开头和结尾。可-n 参数指定显示的行数。
注意,head 命令的默认输出包括文件名(放在==>和<==之间。tail命令的用法和head命令相同。
更好地阅读文本:less 命令
less 命令和 more 命令很相似,但less 命令的功能更强。
less 命令改进了 more 命令的很多细节,并添加了许多特性。总体来说,less 命令提供了下面这些增强功能。
- 使用方向键(键盘上的上、下、左、右键)在文本文件中前后或左右滚屏。
- 用行号或百分比作为书签来浏览文件。
- 实现复杂的检索、高亮显示等操作。
- 兼容常用的字处理程序(如Emacs 和 Vim)的键盘操作。
- 阅读到文件结束时less 命令不会退出。
- 屏幕底部的信息提示更容易控制使用,而且提供了更多的信息。
下面简单地介绍 less 命令的使用方法,以一千行hello文本为例。
可以看到,使用less 命令时会在屏幕底部显示一个冒号“ : ”等待用户输入命令。
如果想向下翻一页,可以按空格键。如果想向上翻一页,按B键。也可以用方向键向前后或者左右移动。
如果要在文件中搜索某一个字符串,可以使用正斜线“/”后面跟想要查找的内容,less 命令会把找到的第一个搜索目标高亮显示。要继续查找相同的内容,只要再次输入正斜线“”并按Enter键就可以了。
以下为输入 /666结果
使用带参数M 的less命令可以显示更多的文件信息,例加下而的输出。
可以看到,less 命令在输出信息的底部显示了这个文件的名称、当前页码、总的页网。以及表示当前位置在整个文件中的位置的百分比数值。最后按Q 键可以退出 less 命令并近回 Shell 提示符。
查找文件内容:grep 命令
有的时候用户不需要列出文件的全部内容,用户只是能我到包含某些信息的那一行内容。在这个时候使用more命令一行一行去会很麻烦,特别是当文件特别大时。
为了在文件中寻找某些信息,可以使用grep 命令(grep也可以指定多个文件索引)。
例如:
如果要查找含有空格的关键词,那么必须在关键词的两边加单引号,以便把空格包含进去
例如:
文件在哪里:find 命令
find 能够迅速在指定范围内查找到文件。find 命令的基本语法如下:
find [option] [path...] [expression]
例如,希望在/usr/bin/目录中查找zip 命令
可以看到,find 命令需要一个路径名作为查找范围,在这里是/usr/bin/。find 命令会深入这个路径的每一个子目录中去寻找,因此,如果指定“/”,就是查找整个文件系统。
-name选项指定了文件名,在这里是zip。可以使用通配符来指定文件名,如“find ~ -name *.c-print”将会列出用户主目录下所有的C程序文件。
-print 表示将结果输出到标准输出(在这里也就是屏幕)。注意,find命令会输出文件的绝对路径。
find 命令还能够指定文件的类型。在Linux 中,目录和设备都以文件的形式表现,可以使用 find 命令的-type 选项来定位特殊的文件类型。例如,在/etc/目录中查找名称为 init.d 的目录:
find命令的-type选项可供使用的参数:
参数 | 含义 |
b | 块设备文件 |
c | 字符设备文件 |
d | 目录文件 |
f | 普通文件 |
p | 命名管道 |
l | 符号链接 |
还可以通过指定时间来指导 find 命令查找文件。-atime n 命令用来查找在几天前最后一次使用的文件,-mtime n则用来查找在n天前最后一次修改的文件。但是在实际使用过程中,很少能准确确定n的大小。在这种情况下,可以用+n表示大于n,用-n 表示小于n。例如,在/usr/bin/中查找最近 100天内没有使用过的命令(也就是在 100 天或 100 天以前最后一次使用的命令)。
类似地,下面的命令用于查找在~目录中,最近一天内修改过的文件
定位文件:locate 命令
对于大批量的搜索而言find还是显慢了一些,特别是当用户完全不记得自己的文件放在哪里时,就需要使用locate 命令
locate的搜索结果几乎是一瞬间就出现了
(事实上,locate 命令并没有进入子目录进行搜索,它类似于 Google的桌面搜索,通过检索文件名数据库来确定文件的位置。locate 命令会自动建立整个文件名数据库,不需要用户插手。如果希望立刻生成该数据库文件的最新版本,那么可以使用 uplaredb 命令。运行 updatedb 命令需要有 root权限,更新整个数据库大概耗时 1min。)
查找特定程序:whereis 命令
whereis 命令主要用于查找程序文件,并提供这个文件的二进制可执行文件、源代码文件和使用手册页存放的位置。例如,查找find命令:
可以使用 -b 选项让 whereis命令只查找这个程序的二进制可执行文件。
如果whereis 命令无法找到文件,那么将返回一个空字符串。
查看用户及版本信息:
who:
who 命令可以查看当前系统中的登录用户及他们都工作在哪个控制台上。
whoami:
有时用户可能会忘记自己是以什么身份登录系统的,这种情况下使用 whoami 命令它会回答“我是谁”这个问题。
uname:
另一个常用的命令是uname,其用于显示当前系统的版本信息。
带-a选项的uname 命令会给出当前操作系统的所有有用信息。
大部分时候只需要知道内核版本信息,此时可以使用-r选项。
`
寻求帮助:man 命令
在 Linux 中获取帮助是一件非常容易的事情。Linux 几乎为每个命令和系统调用都翁写了帮助手册。使用man 命令可以方便地获取某个命令的帮助信息。(输入q 退出)
man find
man 命令在显示手册页时实际调用的是less 命令。可以通过方向键或K键(向上)、J 键(向下)上下翻动。空格键用于向下翻动一页。按 q 键退出手册页面。man 命令手册一般被分为9节,各部分的内容如下所示。
目录 | 内容 |
/usr/share/man/man1 | 普通命令和应用程序 |
/usr/share/man/man2 | 系统调用 |
/usr/share/man/man3 | 库调用,主要是libc()函数的使用文档 |
/usr/share/man/man4 | 设备驱动和网络协议 |
/usr/share/man/man5 | 文件的详细格式信息 |
/usr/share/man/man6 | 游戏 |
/usr/share/man/man7 | 文档使用说明 |
/usr/share/man/man8 | 系统管理命令 |
/usr/share/man/man9 | 内核源代码或模块的技术指标 |
获取命令简介:whatis 和 apropos 命令
whatis:
man 手册可以说是“长篇大论了”,用户只想要知道某个命令大概可以做哪些事,此时可以使用 whatis 命令。
whatis 命令可以从手册页中抽出一行简单的介绍性文字,帮助用户了解这个程序的大致用途。whatis 命令的原理同 locate 命令基本一致。
apropos:
apropos与 whatis 命令相反的,可以通过使用手册反查到某个命令。
举例来说,如果用户想要搜索一个文件而又想不起来应该使用哪个命令的时候,可以这样求助于 apropos:
可以看到,apropos 将命令简介(其实就是whatis 命令的输出信息)中包含 search的条目一并列出,用户可以从中找到自己想要的答案。
小结:
- 命令行是Linux的精华部分,所有的系统管理操作都可以在 Shell 下完成。口 有多种不同的 Shell 可供使用。目前 Linux中使用最广泛的是BASH。
- 可以使用命令行补全和通配符提高使用 Shell的效率。口 pwd命令用于显示当前的目录信息。
- cd命令用于在目录间切换,这是Linux 中使用最频繁的命令。口 Is 命令提供了大量选项供用户查看目录内容。
- dir和vdir 命令是Is命令的“袖珍”版本。
- 使用cat命令可以查看文本文件。more 命令可以分页显示一个较长的文本文件。口 使用 head和tail命令可以显示一个文件的开头和结尾。
- less 命令提供了查看文件的更高级功能。man 命令就是通过调用 less 命令显示帮助手册信息的。
- grep 命令是查找文件内容的利器,更高级的使用方法参见第20章。口 find 命令可以按需查找某个特定的文件(包括目录)。
- locate 命令通过事先建立数据库提高搜索文件的速度。
- 直接输入程序名称可以从终端运行程序。可以选择在后台执行程序,从而使当前Shell继续接受命令输入。
- whereis 命令可以查找某个特定程序所在的位置。
- 通过 who 命令可以查看当前有哪些登录用户。
- uname 命令用于显示当前系统的版本信息。
- Linux 提供了详细的帮助手册,可以通过 man 命令查看,这些手册通常被分为 9节,包含特定的主题。
- whatis 和 apropos 命令能够从 man 命令手册中提取简要的信息。
相关文章:

Linux(1. 基本操作_命令)
目录 关于超级用户root: root用户可以做什么? 避免灾难: 格式约定: 浏览硬盘: 命令行补全和通配符: 命令行补全: 通配符: 常用基本命令: 查看目录和文件ÿ…...

难点:Linux 死机定位(进程虚拟地址空间耗尽)
死机定位(进程虚拟地址空间耗尽) 一、死机现象 内存富裕,但内存申请失败。 死机时打印: 怀疑是: 1、内存碎片原因导致。 2、进程虚拟地址空间耗尽导致。 3、进程资源限制导致。 二、内存碎片分析 1、理论知识:如何分析内存碎片化情况 使用 /proc/buddyinfo: /proc/…...

小米路由器刷机istoreOS,愉快上网
istoreOS与openwrt openwrt是一个开源的路由器系统,市场上所有小米路由器的内部系统都是基于openwrt进行二次开发形成的,做了硬件适配和功能上的阉割,不太好用。 istoreos是小宝团队基于openwrt制作的一个发行版,更适合中国宝宝体质。页面简约华丽,完全兼容开源openwrt的…...

微信小程序 - 01 - 一些补充和注意点(补充ing...)
目录 一、节流二、在一个发请求的函数中,只有发生下拉动作,才执行关闭下拉代码 最近在学微信小程序,把学习过程中的一些补充和注意点总结一下,内容会比较简单,因为只涉及基础知识,供个人参考 一、节流 情…...

微服务实战——登录(普通登录、社交登录、SSO单点登录)
登录 1.1. 用户密码 PostMapping("/login")public String login(UserLoginVo vo, RedirectAttributes redirectAttributes, HttpSession session){R r memberFeignService.login(vo);if(r.getCode() 0){MemberRespVo data r.getData("data", new Type…...

windows 安装 ElasticSearch
1、下载安装包 下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-windows-x86_64.zip ElasticSearch 目录结构如下: 2、配置JDK环境 ES比较耗内存,建议虚拟机4G或以上内存,jvm1g以上的内存分…...

Oracle Linux 9 (CentOS Stream 9) 安装 node.js 20
Oracle Linux 的 node 默认版本为 16,运行dnf update也无法改变大版本,还需要进行额外操作1 查看支持的版本 sudo dnf module list nodejs输出如下 Last metadata expiration check: 3:37:22 ago on Fri 11 Oct 2024 09:08:18 PM JST. Oracle Linux 9 Ap…...

【Axure安装包与汉化包附带授权证书】
一、下载Axure安装包与汉化包附带授权证书 1.下载汉化包 【快传】: 点击链接即可保存 2.解压安装包 解压下载好的压缩包,能看到有lang也就是汉化包,AxureRP-Setup-RC.exe 也就是Axure9的安装程序,以及汉化说明和授权码。 二、安装Axure9…...

SSH隧道验证的原理及实现例子
SSH 隧道验证原理详解 **SSH 隧道(SSH Tunneling)**是通过 SSH 协议将数据在客户端和服务器之间加密传输的一种技术。它可以在不安全的网络上创建一个安全的、加密的通道,用于传输各种数据,例如通过不安全的网络远程登录、传输文…...

[计算机视觉]chapter1
一、什么是计算机视觉 计算机视觉就是用计算机编程,并设计算法来理解在这些图像中有什么。计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼…...

RTKLIB学习记录【postpos、execses_b、execses_r】
本文主要记录对RTKLIB源码中postpos、execses_b、execses_r 函数的源码解读,不涉及其中的天线、星历等文件读取的内容,且为个人理解,如果有误,欢迎交流讨论。 一、postpos 函数部分 /rxn2rtkp函数 → postpos函数传递参数&#x…...

docker,docker-desktop,docker-compose download
docker docker-compose download 百度网盘获取离线包链接release-notes 参考dockerdocker-composewlspowershell...

C#_带参数的委托进入队列执行
我们经常会遇到一些函数多个地方调用,但是只能单独执行的就需要把它放到队列中执行。 1.创建对应该方法的委托(传参和回参类型需要一致)。 //委托: public delegate void CameraTaskDelegate(byte cs, ref byte[] buffer);//对应函数: public void CameraSettingRead(by…...

【OpenCV】(二)—— 图片读取展示和保存
上一小节中我们成功安装了opencv,我们这次学习使用opencv最基础的功能,读取和展示图片,首先准备一张用于实验的样例图片【cat.jpg】如下: 然后就是创建一个python项目并导入相关依赖 import cv2读取图片 读取图片使用imread方法…...

【花卉识别系统】Python+卷积神经网络算法+人工智能+深度学习+图像识别+算法模型
一、介绍 花朵识别系统。本系统采用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,并基于前期收集到的5种常见的花朵数据集(向日葵、玫瑰、蒲公英、郁金香、菊花)进行处理后进行模型训练,最…...

k8s、prometheus、grafana数据采集和展示的链路流程
k8s集群中,容器级别的数据采集是由cAdvisor程序实现 cAdvisor # Container Advisor 容器顾问 cAdvisor程序是kubelet组件的一部分。 每个节点,包括master节点,都有一个kubelet系统服务, kukelet负责管理pod和容…...

sentinel dashboard改造落地设计实现解释(一)-分布式fetcher和metrics存储/搜索
背景 微服务是目前java主流架构,微服务架构技术栈有,服务注册中心,网关,熔断限流,服务同学,配置中心等组件,其中,熔断限流主要3个功能特性,限流,熔断,快速失败。Sentinel是阿里开源的熔断限流组件,sentinel dashboard是演示级别,表现在metrics采集是单机版,metri…...

LabVIEW提高开发效率技巧----时序分析
一、什么是时序分析? 时序分析是优化LabVIEW程序性能的重要步骤。它通过分析程序各个部分的执行时间,帮助开发者找到程序运行中的瓶颈,并进行有针对性的优化。在LabVIEW中,Profile Performance and Memory工具是进行时序分析的关…...

python不用ide也能进行调试
import pdb pdb.set_trace()import pdb 和 pdb.set_trace() 是 Python 中用于调试代码的工具。以下是它们的具体含义和用法: import pdb pdb 是 Python 的内置调试器模块,允许开发者在运行时进行代码调试。 通过 import pdb 语句,你可以引入…...

Django学习笔记之Django基础学习
Django笔记 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录…...

smartctl 设置硬盘的 write-caching
sg3 一、sg3查看缓存状态 您可以使用sg_modes命令来查看SAS盘和SATA盘的缓存状态。例如,要查看/dev/sdb设备的缓存状态,您可以执行以下命令: sg_modes -p 8,0 /dev/sdb 二、sg3关闭机械盘写缓存状态(仅适用于SAS盘)…...

【Spring AI】Java实现类似langchain的向量数据库RAG_原理与具体实践
介绍一下RAG: 检索增强生成(RAG)是一种技术,它结合了检索模型和生成模型来提高文本生成的质量。通过从企业私有或专有的数据源中检索相关信息,并将这些信息与大型语言模型相结合,RAG能够显著减少模型产生幻…...

linux下使用systemctl设置开机自动运行程序
本文介绍在Linux下,使用systemctl设置开机自动运行程序,实现创建一个systemd服务单元文件,并启用该服务的方法。 1、创建.service文件 在/etc/systemd/system/目录下创建一个以.service结尾的文件,例如myapp.service:…...

复位电路的亚稳态
复位导致亚稳态的概念: 同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输(数据在这个时间段内必须保持不变:1不能变为0,0也不能变为1),防止亚稳态; …...

针对考研的C语言学习(循环队列-链表版本以及2019循环队列大题)
题目 【注】此版本严格按照数字版循环队列的写法,rear所代表的永远是空数据 图解 1.初始化部分和插入部分 2出队 3.分部代码解析 初始化 void init_cir_link_que(CirLinkQue& q) {q.rear q.front (LinkList)malloc(sizeof(LNode));q.front->next NULL…...

系统架构设计师教程 第12章 12.4 信息系统架构案例分析 笔记
12.4 信息系统架构案例分析 ★★★★☆ 12.4.1 价值驱动的体系结构——连接产品策略与体系结构 1.价值模型概述 价值模型核心的特征可以简化为三种基本形式。 (1)价值期望值:表示对某一特定功能的需求,包括功能、质量和不同 级别质量的实用性。 (2)…...

web1.0,web2.0,web3.0 有什么区别 详解
Web 的发展经历了多个阶段,每个阶段都有其独特的特点和技术进步。下面是 Web 1.0、Web 2.0 和 Web 3.0 之间的主要区别和详细解释: Web 1.0 时间范围:大约在 1991 年至 1995 年。 Web 1.0 是互联网的最初形态,也被称为静态 Web…...

将图片添加到 PDF 的 5 种方法
需要一种称为 PDF 编辑器的特定工具才能将图片添加到 PDF。尽管大多数浏览器在查看和注释 PDF 文件方面都非常出色,但如果您使用图像到 PDF 技术,则只能将照片放入 PDF 中。无需修改即可将 PDF 文件恢复为原始格式的能力是使用此类软件程序甚至在线服务的…...

TiDB 优化器丨执行计划和 SQL 算子解读最佳实践
导读 在数据库系统中,查询优化器是数据库管理系统的核心组成部分,负责将用户的 SQL 查询转化为高效的执行计划,因而会直接影响用户体感的性能与稳定性。优化器的设计与实现过程充满挑战,有人比喻称这是数据库技术要持续攀登的珠穆…...

初学51单片机之I2C总线与E2PROM以及UART简单实例应用
这是I2C的系列的第三篇,这篇主要是写一个简单的程序来实践一下相关的内容。前面博主写过一个电子密码锁的程序初学51单片机之简易电子密码锁及PWM应用扩展_51单片机设计电子密码锁-CSDN博客 本篇主要是在此基础上修改下程序,让密码存储在E2PROM中&#…...