Linux基本操作符(2)

W...Y的主页 😊

代码仓库分享 💕 


关于Linux的操作符,在上篇博客中我们已经讲述了一些,都是Linux最基本的操作符。今天我们继续了解一些关于对文件及目录增删查改的操作符,话不多说我们直接上内容。

目录

rm指令的回顾以及拓展 

man指令

cp指令

 nano指令

mv指令

​编辑 对指令进行重命名

alias指令

echo指令

cat指令 

more指令

less指令

​编辑 head指令

tail指令


rm指令的回顾以及拓展 

在上篇博客中,我们已经了解rm指令是将目录或文件进行删除的一个指令。在我们想要删除时,我们只需要将文件或目录跟在rm指令后面即可。当我们删除一个不为空的目录时,我们需要在rm指令后加上-r进行递归删除。root账号会在递归时进行询问,而其余子账号在递归删除时不会进行询问。但是在rm后加 -i就会询问(无论是root还是其余账号)。要想要强制删除在rm后加 -f即可。

上面就是使用普通用户进行文件的删除时的流程,如果没有-i,删除时Linux就不会进行询问。

这就好比Windows中的回收站一样,当我们需要清空回收站时,系统就会询问我们需要永久删除这几个项目吗?这样做就非常的严谨。但是我们还是得注意,Windows中的删除并不是真正的删除,而是先将不需要的空间进行标记,让后来的文件进行覆盖。Linux则是直接的删除我们的文件。

 当我们创建一系列无用的文件及目录,我们想要全部删除应该怎么办?我们要使用rm一个一个删除吗?有没有什么快捷的方法呢?

那肯定是有的,我们可以使用rm -rf ./*或者rm -rf *都行直接删除即可。

这个*如同命令一样,是一种通配符,指在指定路径下的所有文件及目录! 

但是又会有人说,这样会不会删除掉隐藏文件呢?答案是不会。

那有人就会吐槽,说好删除当前路径下的所有文件,怎么隐藏的文件却删不了。因为这样才能将隐藏文件更好的隐藏起来。那要怎么删除隐藏文件呢?这时我们就得记住其隐藏文件的名字,一个一个进行删除才行。

man指令

在学习Linux指令时,就如同我们学习一门语言,经常会遇到一些我们没见过或者忘记的指令,我们需要进行了解它们是什么作用,Linux会给我们提供一个在线手册,我们就可以使用man指令进行查阅。

语法: man [选项] 命令 

比如ls命令的作用: 如果找不到,我们也可以使用我们平时的搜索引擎,百度、酷狗、chatgdp都行。

man也是条指令,那我们连man的指令也不知道时,我们就可以查找man man。

常用选项
-k 根据关键字搜索联机帮助
num 只在第num章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按
下q退出,他会继续往后面搜索,直到所有章节都搜索完毕

解释一下,面手册分为8章
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文
件)
3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig

当我们在man后不加num时,我们搜索的指令会从第一个开始寻找,到第八个结束,直到找到为止才停止。 在后面加上1 其实与不加是相同的。

在举个例子,我们想要查询c库中的printf函数的作用,我们直接使用man去查找:

我们发现printf在1号手册中就查找成功了,它在Linux中是一个指令,并不是函数。但当我们使用num调整查找的优先级时:

 我们可以看出,printf也是C库中的输出函数。

我们的云服务器是比较干净的,如果没有man手册,我们就需要进行安装。安装条件必须在root账号下进行。输入yum install -y man-pages即可。

cp指令

cp指令中的cp就是copy的简写,即拷贝。而拷贝在Windows中就是复制粘贴的意思。我们想要将文件复制到另一个文件夹时,我们通常会在Windows中进行复制粘贴的选项。

语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。


常用选项:
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理

首先我们得强调一点,在同级目录下,不允许存在同名文件或者同名目录!如果创建的目录与已有的文件或目录同名Linux会报错。

在介绍cp拷贝指令时,为了更清楚直观的看到拷贝过去的内容,我们先来介绍另一个指令nano。 

 nano指令

什么是nano指令,用Windows的话说来说就是一个记事本。输入我们想要输入的文本进行记录。我们可以使用nano加上一个文件名来创建一个文本。

ctrl+x为退出,退出后选择y是保存n为取消保存,与Windows大同小异。 

当我们退出后,我们可以看到在此路径下就已经有这个文件了。

 我们使用cat指令(后面马上会说到)就可以看到文本中的内容了。

如果没有nano指令的,我们可以输入yum install -y nano 指令进行添加。


nano讲完,我们再回到cp指令中。我们想要把我们刚创建好的test.txt文件放入上级目录中去,我们就可以使用cp指令。

 我们成功将test.txt拷贝到上级目录中去了,并且上级目录中的test.txt文件内容与原文件的内容相同。

如果我们想要将test.txt拷贝到当前目录可以吗?

肯定是不行的,因为同一路径下文件或目录是不能重名的。如果非要进行拷贝也不是没有办法。我们可以修改文件名字。 那cp难道只能拷贝普通文件吗?就不可以拷贝目录吗?

我们来试一下:我们将此路径下的dir目录拷贝到上级,看是否可行。

这时此路径下的文件即目录。

 linux会进行报错,目录不是文件。还是有办法的,我们可以类别rm指令。

在cp后面加上-rf就可以对目录进行操作处理。 我们可以看出拷贝的结构完全相同。

当我们想要在同路径下进行拷贝时,与文件拷贝相同需要一个不重名的目录。假如我们不小心重名了,虽然会进行报错,但是dir目录中的结构将发生改变,所以这样做非常危险。

我们应该这样做:

 这样做才是正确且安全的。

如果我们想要将dir的目录拷贝到一个指定路径下,并且更改名字该怎么做。

现在在/home/why路径下已经有我们拷贝的dir目录了,并且将dir目录的名字改成了mydir。 

 并且mydir目录与dir目录的内容相同。

所以我们可以保证文件名拷贝到新的路径后不变,也可以指定路径,拷贝过去后内容相同但文件名不同,只要保证同级别的目录不影响即可。

现在我想将lesson3中的所有内容全部拷贝到copy目录下,应该怎么做呢?

 我们可以看出只要在后面加入绝对路径与*通配符即可表示在当前路径下的所有文件即目录。

最后我相信大家还有一个疑问,拷贝会不会拷贝隐藏文件呢?答案是不会,假设隐藏文件被拷贝过去,我们就会知道隐藏文件的存在,失去了”隐藏“的意义。第二点,每个目录下都会有.   .. 这样的隐藏文件,如果拷贝过去就会导致目标名重复问题。

mv指令

mv指令是由move(移动)缩写得来的命令,意思就是文件的移动。拿Windows类比的化就是剪切功能。在Linux系统下经常用来备份文件或者目录。

语法: mv [选项] 源文件或目录 目标文件或目录
功能:
1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中

常用选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

 

这时mydir目录中的文件,现在将copy中的文件全部删除后,再使用mv指令将mydir目录进行剪切到copy目录中去。 

原本的mydir目录不见了,已经全部剪切包含到copy目录中去了。 这样我们就成功的将mydir进行转移。mv指令不仅可以转移目录,也可以转移文件。

将在lesson3中的test.txt.bak剪切到上一级copy目录中去。

还记得test.txt中nano的内容吗?就是上文展示过的一段简单的程序。现在我们想将刚刚移动到copy中的 test.txt.bak文件再转回到lesson3目录中去,并且改一下名字应该怎么做呢?

我们此时在lesson3的目录中,想要找到copy目录必须使用../找到上一级在进行寻找目标文件。找到后直接输入想要修改的名字即可,就会转移到我们当前用户所在的路径下。

mv除过可以进行移动文件与目录,还可以进行改名操作。当想要目标文件对应的是一个存在的目录或路径,Linux就会将文件进行移动。如果对应的不存在将会进行目标文件名称的修改。

现在我们将目标文件test.txt进行重命名:

 对指令进行重命名

对指令进行重命名就是为了更好的让人们从Windows系统中转换到Linux系统中来。大家都知道我们在Windows中删除一个文件就是放到回收站中,但是放入回收站不代表真正被删除,想要恢复就可以直接恢复。但是在Linux中的rm命令删除就是真正的删除,无法恢复。而Windows中的回收站其实也是一个目录,将我们即将删除的文件全部放进去。所以我们为了更贴合Windows,就像将Linux中的rm命令进行重命名为mv,然后放入一个目录中去。

重命名更像我们C语言中的typedef,可以将命令进行重定义。而我们应该怎样去进行重命名呢?

我们目前学到的许多命令全部都是放在/usr/bin/目录中。

命令的本质其实就是二进制可执行文件。

下面我们可以创建一个小的脚本文件,进行重命名操作。

我们先创建一个test.c文件,使用nano写一个非常简单的程序。

#include <stdio.h>
int main()
{printf("hello linux\n");return 0;
}

然后使用gcc命令让文件进行编译,会生成一个a.out文件,我们将其改名为mycmd。然后将mycmd复制到/usr/bin目录下。我们在Linux打出mycmd后就会出现hello Linux。

 这就是非常小的一个脚本。注意:当我们使用非root账户时,我们不能将编译文件转入/usr/bin目录中去,我们得切换成root账号进行转移。

alias指令

alias英语翻译过来就是别名的意思,在这里更像c语言中的typedef。将命令进行重命名。

我们将ll命令重命名为why,当我们输入why时与输入ll的指令结果是相同的。

那如何将这个重命名进行删除呢?我们直接关闭xshell,然后再打开就没有刚才的重命名了。

echo指令

我们刚刚学过nano指令,再文本中可以输入我们想要的内容进行存储。而echo指令与nano指令有些相似,却又不同。

当我们直接想将文本输入在屏幕上时,我们可以使用echo指令进行打印:

 当我们想要与nano有相同的作用时,我们可以这样写:

将需要的文本进行写入,然后使用>进行连接,再加上需要的文件名即可。

那>是什么符号呢?输出重定向。原本echo指向的输出就是屏幕,而我们将其输出改为到一个文件中去。

所以我们又多了一种可以创建新文件的方法,只要向文件中输入的内容为空,就是创建新文件。

 这就是我们的新方法。

那我们如果不断地去输出内容,会怎么样呢?

原本的hello linux被替换成了hello。就如同原本的文本内容被重新创建再将最新内容写入。这与C语言中往文本中写数据的”r“模式非常类型,我们可以去类比理解。那这样我们也可以将我们原本的file.txt文件清空。

总结:
>:输出重定向,每次都会清空原始文件,然后再写入。

作用:1.新建空文件。

2.清空目标文件。

那有什么办法可以让我们写的文本内容不会被覆盖,继续往下写呢?如同C语言文本输入的”a“模式。那肯定是有的。

我们在>符号那里做文章,将>改为>>即可。我们将>>称为追加重定向。在我们原本的文章中进行继续输出,不会覆盖原本的内容。

cat指令 

在上面的指令中,其实我们已经多次使用到cat指令,它就是将文件的内容进行打印的。

语法:cat [选项][文件]
功能: 查看目标文件的内容
常用选项:

-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行 

我们可以使用echo以及追加重定向符号,在file.txt文件中在多加入一些内容。

cat -b是对非空输出行进行编号:

 cat -n是对所有输出行进行编号:

如果有多行空格,我们只想输出一行空格意思一下,剩下的全部省略我们就可以使用cat -s进行操作: 组合也可使用:

当我们想要反转文本内容时,我们只需要将cat指令倒过来,输入tac即可将文本内容反转。

 

这些就是cat指令的基本用法!!!

 其实cat后面不仅可以跟文件名,也可以什么都不跟。cat指令完后直接回车。

你输入什么,cat就给我们打印什么。看上去挺无聊的。但是我们可以进行翻译一下:cat文件从键盘文件读取什么,就向显示器文件写入什么。所以cat是默认从键盘文件读入的。那我们能不能与echo一样更换一下输入方呢?

 把本来应该从键盘文件中读入的内容更改为普通文件中进行输入,所以<为输入重定向。就如同C语言中的”r“模式一样。


more指令

当我们读取一个短文件时,我们可以使用cat指令进行读取,但是读取长文件时就不那么方便,我们就可以使用more指令进行读取。

语法:more [选项][文件]
功能:more命令,功能类似 cat
常用选项:
-n 对输出的所有行编号
q 退出more

首先我们应该创建一个大文件,使用i=0;while [ $i -le 1000 ]; do echo "hello $i"; let i++; done > file.txt即可在当前目录下创建一个file.txt文件。

当我们创建了个大文件后,我们想要查看其文件使用cat指令会刷屏非常的难受,这时我们使用more指令,就可以读取大文件。

more指令会将内容先打满整个屏幕,然后停止打印,剩下的内容需要我们一行一行点击回车进行逐行打印,方便我们阅读。

但是more指令有缺陷,只能使用回车。无法使用上下键,无法向上翻阅。所以我们并不推荐使用more,这里可以做一个了解。我们更推荐使用less指令。

less指令

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。  

语法: less [参数] 文件
功能:
less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。       

选项:
-i  忽略搜索时的大小写
-N  显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit 

我们使用less与使用more的功能一样看大文件,可以向上向下观看。现在我们说点more没有的功能。

当我们想进行搜索文件中的内容时,我们只需要输入内容即可跳转到对应的内容去。

 head指令

当面对一个大文件时,我们只想看一下文件的头部内容,就可以使用head指令进行操作。

语法: head [参数]... [文件]...
功能:
head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项:
-n<行数> 显示的行数

head会默认截取文件头部的前十行内容进行打印。

我们想要读取自己想要的行数,即可在head后加-n,n代表自己想要的行数。 

tail指令

tail指令与head指令是相对的,一个是从头开始进行,一个是从尾部进行。

tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.
语法: tail[必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项: -f 循环读取
-n<行数> 显示行数

tail指令默认也是后10行。

如果想要选择自己需要的行数,在tail后加-n,n代表想要行数即可。

 

拓展:要是我们想要读取文本中间的内容,我们必须利用tail与head的搭配,进行截取即可。


以上就是本次Linux基本操作符全部内容,对你有帮助的一键三连支持一下博主吧!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/92121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git/GitHub/Idea的搭配使用

目录 1. Git 下载安装1.1. 下载安装1.2. 配置 GitHub 秘钥 2. Idea 配置 Git3. Idea 配置 GitHub3.1. 获取 GitHub Token3.2. Idea 根据 Token 登录 GitHub3.3. Idea 提交代码到远程仓库3.3.1. 配置本地仓库3.3.2. GitHub 创建远程仓库1. 创建单层目录2. 创建多层目录3. 删除目…

大数据-玩转数据-Flink Sql 窗口

一、说明 时间语义&#xff0c;要配合窗口操作才能发挥作用。最主要的用途&#xff0c;当然就是开窗口然后根据时间段做计算了。Table API和SQL中&#xff0c;主要有两种窗口&#xff1a;分组窗口&#xff08;Group Windows&#xff09;和 含Over字句窗口&#xff08;Over Win…

卤制品配送经营商城小程序的用处是什么

卤制品也是食品领域重要的分支&#xff0c;尤其对年轻人来说&#xff0c;只要干净卫生好吃价格合理&#xff0c;那复购率宣传性自是不用说&#xff0c;而随着互联网发展&#xff0c;传统线下门店也须要通过线上破解难题或进一步扩大生意。 而商城小程序无疑是商家通过线上私域…

字符串函数与内存函数讲解

文章目录 前言一、字符串函数1.求字符串长度strlen 2.长度不受限制的字符串函数(1)strcpy(2)strcat(3)strcmp 3.长度受限制的字符串函数(1)strncpy(2)strncat(3)strncmp 4.字符串查找(1)strstr(2)strtok 5.错误信息报告(1)strerror(2)perror 二、内存函数1.memcpy2.memmove3.me…

Neural Networks for Fingerprint Recognition

Neural Computation ( IF 3.278 ) 摘要&#xff1a; 在采集指纹图像数据库后&#xff0c;设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时&#xff0c;算法输出两个图像来自同一手指的概率估计值。在一个实验中&#xff0c;神经网络使用几百对图像进行训练&…

第 365 场 LeetCode 周赛题解

A 有序三元组中的最大值 I 参考 B B B 题做法… class Solution { public:using ll long long;long long maximumTripletValue(vector<int> &nums) {int n nums.size();vector<int> suf(n);partial_sum(nums.rbegin(), nums.rend(), suf.rbegin(), [](int x…

golang工程——protobuf使用及原理

相关文档 源码&#xff1a;https://github.com/grpc/grpc-go 官方文档&#xff1a;https://www.grpc.io/docs/what-is-grpc/introduction/ protobuf编译器源码&#xff1a;https://github.com/protocolbuffers/protobuf proto3文档&#xff1a;https://protobuf.dev/programmin…

加入PreAuthorize注解鉴权之后NullPointerException报错

记录一次很坑的bug&#xff0c;加入PreAuthorize注解鉴权之后NullPointerException报错&#xff0c;按理来说没有权限应该403报错&#xff0c;但是这个是500报错&#xff0c;原因是因为controller层的service注入失败&#xff0c;然而我去掉注解后service注入成功&#xff0c;并…

使用VSCODE 调试ros2具体设置

vscode 调试 ROS2 张得帅&#xff01; 于 2023-09-09 15:39:39 发布 456 收藏 1 文章标签&#xff1a; vscode ros2 版权 1、在下列目录同层级找到.vscode文件夹 . ├── build ├── install ├── log └── src 2、 安装ros插件 3、创建tasks.json文件&#xff0c;添…

二十七、[进阶]MySQL默认存储引擎InnoDB的简单介绍

1、MySQL体系结构 MySQL大致可以分为连接层、服务层、引擎层、存储层四个层&#xff0c;这里需要注意&#xff0c;索引的结构操作是在存储引擎层完成的&#xff0c;所以不同的存储引擎&#xff0c;索引的结构是不一样的。 &#xff08;1&#xff09;体系结构示意图 &#xff0…

国庆10.01

TCPselect 代码 服务器 #include<myhead.h> #include<sqlite3.h> #define PORT 6666 //端口号 #define IP "192.168.0.104" //IP地址//键盘事件 int jp(fd_set tempfds,int maxfd) {char buf[128] ""; //用来接收数据char buf1[128] …

【算法|贪心算法系列No.2】leetcode2208. 将数组和减半的最少操作次数

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

Spring注册Bean系列--方法1:@Component

原文网址&#xff1a;Spring注册Bean系列--方法1&#xff1a;Component_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring注册Bean的方法&#xff1a;Component。 注册Bean的方法我写了一个系列&#xff0c;见&#xff1a;Spring注册Bean(提供Bean)系列--方法大全_IT利刃出鞘…

开绕组电机零序Bakc EMF-based无感控制以及正交锁相环inverse Park-based

前言 最近看论文遇到了基于反Park变换的锁相环&#xff0c;用于从开绕组永磁同步电机零序电压信号中提取转子速度与位置信息&#xff0c;实现无感控制。在此记录 基于零序Back EMF的转子估算 开绕组电机的零序反电动势 e 0 − 3 ω e ψ 0 s i n 3 θ e e_0-3\omega_e\psi_…

​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书 ​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

借助 ControlNet 生成艺术二维码 – 基于 Stable Diffusion 的 AI 绘画方案

背景介绍 在过去的数月中&#xff0c;亚马逊云科技已经推出了多篇博文&#xff0c;来介绍如何在亚马逊云科技上部署 Stable Diffusion&#xff0c;或是如何结合 Amazon SageMaker 与 Stable Diffusion 进行模型训练和推理任务。 为了帮助客户快速、安全地在亚马逊云科技上构建、…

【QT开发(6)】0926-QT 中加入 fastDDS 通信库的程序使用说明

在智能驾驶中&#xff0c;DDS有可能被广泛使用&#xff0c;因此推出这篇说明教程。 1、基于【QT开发&#xff08;5&#xff09;】教程的项目文档进行开发 2、安装DDS 查看《【eProsima Fast DDS&#xff08;1&#xff09;】安装eProsima Fast DDS》 至少安装: foonathan_m…

LeetCode每日一题:2136. 全部开花的最早一天(2023.9.30 C++)

目录 2136. 全部开花的最早一天 题目描述&#xff1a; 实现代码与解析&#xff1a; 贪心 原理思路&#xff1a; 2136. 全部开花的最早一天 题目描述&#xff1a; 你有 n 枚花的种子。每枚种子必须先种下&#xff0c;才能开始生长、开花。播种需要时间&#xff0c;种子的生…

Java八股文

JAVA八股文 这里写目录标题 **JAVA八股文**面向对象三大特征接口与抽象类的区别重载与重写与equals异常处理机制HashMap原理红黑树乐观锁和悲观锁HashTable与HashMap的区别ArrayList和LinkedList的区别如何保证ArrayList的线程安全什么是线程上下文切换sleep()和wait()的区别yi…

Nginx简介与Docker Compose部署指南

Nginx是一款高性能的开源Web服务器和反向代理服务器&#xff0c;以其卓越的性能、可伸缩性和灵活性而闻名。它在全球范围内广泛用于托管Web应用程序、负载均衡、反向代理和更多场景中。在本文中&#xff0c;我们将首先介绍Nginx的基本概念&#xff0c;然后演示如何使用Docker C…