ubuntu--Linux使用

Linux使用

Linux 系统简介

linux

Linux 就是一个操作系统,与 Windows 和 Mac OS 一样是操作系统

操作系统在整个计算机系统中的角色 :

操作系统

Linux 主要是 系统调用内核 那两层。使用的操作系统还包含一些在其上运行的应用程序,比如vim、google、vscode等。

Linus Torvalds

Linux 之父,芬兰赫尔辛基大学

对,这就是现在的林纳斯·托瓦兹,他喜欢在演讲当中骂脏话,还有竖中指

Linux 与 Windows 的不同

Linux
  • 稳定的系统
  • 安全性和漏洞的快速修补
  • 多用户
  • 用户和用户组的规划
  • 相对较少的系统资源占用
  • 可定制裁剪,移植到嵌入式平台(如安卓设备)
  • 可选择的多种图形用户界面(如 GNOME,KDE)
Windows
  • 特定的支持厂商
  • 足够的游戏娱乐支持度
  • 足够的专业软件支持度

基本概念及操作

linux 终端

终端的概念

通常我们在使用 Linux 时,并不是直接与系统打交道,而是通过一个叫做 Shell 的中间程序来完成的,在图形界面下为了实现让我们在一个窗口中完成用户输入和显示输出,Linux 系统还提供了一个叫做终端模拟器的程序(Terminal)。

image-20200728195948642

注意的的终端(Terminal)和 控制台(Console)是有区别的。

终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登录就是通过不同的 /dev/tty 设备完成的,

Linux 默认提供了 6 个 界面的 “terminal”来让用户登录。

在物理机系统上你可以通过使用Ctrl+Alt+F1~F6进行切换

image-20200728200241440

image-20200728200301134

image-20200728200348370

image-20200728200409866

image-20200728200426011

image-20200728200441720

Shell

不同发行版的各种终端模拟器,而是这个 Shell( 壳 )。

有壳就有核,核就是指 UNIX/Linux 内核,Shell` 是 指“ 提供给使用者使用界面 ”的软件(命令解析器). Shell 隐藏了操作系统底层的细节。

UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言

Ubuntu 终端默认使用的是 bash

命令行操作体验

在 linux 中,最最重要的就是命令,这就包含了 2 个过程,输入输出

  • 输入:输入当然就是打开终端,然后按键盘输入,然后按回车
  • 输出:输出会返回你想要的结果,比如你要看什么文件,就会返回文件的内容。执行失败会告诉你哪里错了,执行成功就没有输出

linux 的哲学就是:没有结果就是最好的结果

 # 查看当前目录下的文件
ls

#创建一个名为 test 的文件
touch test

#进入一个目录
cd /etc/

#查看当前所在目录
pwd

image-20200728185847192

重要快捷键:

Tab

使用Tab键来进行命令补全补全目录补全命令参数 , 当你忘记某些全称时 , 只要输入它的开头的一部分,然后按下Tab键就可以看见提示或者帮助完成

Ctrl+c

当你在 Linux 命令行中无意输入不知道的命令,或 使用错误命令,导致在终端里出现了你无法预料的情况,比如,屏幕上只有光标在闪烁却无法继续输入命令,或 不停地输出一大堆垃圾结果。

想要立即停止 , 就可以使用Ctrl+c键来 发送 SIGINT 信号给前台进程组中的所有进程,强制终止程序的执行

tail

image-20200728185953563

其他常用快捷键

按键作用
Ctrl+d键盘输入结束或退出终端
Ctrl+s暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a将光标移至输入行头,相当于Home
Ctrl+e将光标移至输入行末,相当于End
Ctrl+k删除从光标所在位置到行末
Alt+Backspace向前删除一个单词
Shift+PgUp将终端显示向上滚动
Shift+PgDn将终端显示向下滚动

利用历史输入命令

可以使用键盘上的方向上键,恢复你之前输入过的命令

使用通配符

通配符是一种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(比如文件名、参数名)。

# 回到用户家目录
cd /home/cpucode

image-20200728190318106

# 进入目录
cd code/

# 查看目录
ls

# 进入目录
cd test/

# 查看目录
ls
# 创建 2 个文件,后缀都为 txt
touch test.txt test2.txt
# 使用通配符找所有的 .txt文件
ls *.txt

image-20200728190434413

# 创建多个文件
touch test_{1..6}_cpucode.txt

image-20200728190610224

Shell 常用通配符:

字符含义
*匹配 0 或多个字符
?匹配任意一个字符
[list]匹配 list 中的任意单一字符
[^list]匹配 除 list 中的任意单一字符以外的字符
[c1-c2]匹配 c1-c2 中的任意单一字符 如:[0-9][a-z]
{string1,string2,...}匹配 string1 或 string2 (或更多)其一字符串
{c1..c2}匹配 c1-c2 中全部字符 如{1…10}

在命令行中获取帮助

在 Linux 环境中,如果你遇到困难,可以使用man命令,它是Manual pages的缩写。

Manual pages 是 UNIX 或类 UNIX 操作系统中在线软件文档的一种普遍的形式, 内容包括计算机程序(包括 系统调用)、正式的标准惯例,甚至是抽象的概念。用户可以通过执行man命令调用手册页。

# 查看 man 命令本身的使用方式
man man

image-20200728190737552

image-20200728190723177

为了便于查找,man 手册被进行了分册(分区段)处理,

区段说明
1一般命令
2系统调用
3库函数,涵盖了 C 标准函数库
4特殊文件(通常是/dev 中的设备)和驱动程序
5文件格式和约定
6游戏和屏保
7杂项
8系统管理命令和守护进程

在 man 后面加上相应区段的数字

man 1 ls

image-20200728190820767

显示第一区段中的ls命令 man 页面:

image-20200728190834722

所有的手册页遵循一个常见的布局,为了通过简单的 ASCII 文本展示而被优化,而这种情况下可能没有任何形式的高亮或字体控制。

一般包括以下部分内容:

NAME(名称)

该命令或函数的名称,接着是一行简介。

SYNOPSIS(概要)

对于命令,正式的描述它如何运行,以及需要什么样的命令行参数。对于函数,介绍函数所需的参数,以及哪个头文件包含该函数的定义。

DESCRIPTION(说明)

命令或函数功能的文本描述。

EXAMPLES(示例)

常用的一些示例。

SEE ALSO(参见)

相关命令或函数的列表。

常见的例子包括

  • OPTIONS(选项)
  • EXIT STATUS(退出状态)
  • ENVIRONMENT(环境)
  • BUGS(程序漏洞)
  • FILES(文件)
  • AUTHOR(作者)
  • REPORTING BUGS(已知漏洞)
  • HISTORY(历史)
  • COPYRIGHT(版权)

man

# 搜索
/<关键字>
# 切换到下一个关键字所在处
n
# 为上一个关键字所在处
shift + n
# (空格键)翻页
Space
# (回车键)向下滚动一行
Enter
# (vim 编辑器的移动键)
# 向上滚动一行
k
# 向下滚动一行
j
# 显示使用帮助
h
# 退出
q

查看 命令的具体参数的作用 :

ls --help

image-20200728190925414

输出图形字符

# 更新一下源
sudo apt-get update

image-20200728191549620

# 安装 figlet软件
sudo apt-get install figlet

image-20200728192301137

# 显示cpucode
figlet cpucode

image-20200728192237837

# 卸载 figlet
sudo apt autoremove figlet

image-20200728192344308

# 再次使用无效
figlet cpucode

image-20200728192516058

用户及文件权限管理

Linux 用户管理

Linux 是一个可以实现多用户登录的操作系统

比如“小明”和“小亮”都可以同时登录同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件。

但实际上他们的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于 Linux 的 用户管理权限机制,不同用户不可以轻易地查看、修改彼此的文件。

查看用户

请打开终端,输入命令:

who am i
# 或
who mom likes

第一 : 打开当前伪终端的用户的用户名(要查看当前登录用户的用户名,去掉空格直接使用 whoami 即可),

第二 : pts/0pts 表示伪终端,所谓是相对于 /dev/tty 设备而言的,这是“ 真终端 ” , 终端时的那七个使用 [Ctrl+Alt+F1~F7 进行切换的 /dev/tty 设备

第三 : 当前伪终端的启动时间

image-20200728222026631

who 命令常用参数 :

参数说明
-a打印能打印的全部
-d打印死掉的进程
-mam imom likes
-q打印当前登录用户数及用户名
-u打印当前登录用户登录信息
-r打印运行等级
创建用户

Linux 系统里, root 账户拥有整个系统至高无上的权限,如 : 删库跑路。

root 是 Linux 和 UNIX 系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权力,可以肆意操作

比如 : 安卓手机(基于 Linux 内核)获得 root 权限之后就相当于获得了手机的最高权限,可以对手机中的任何文件操作。

一般登录ubuntu系统时都是以普通账户的身份登录的,要创建用户需要 root 权限,这里就要用到 sudo 这个命令了。

su,su- 与 sudo

Linux 环境下输入密码是不会显示

su <user> 可以切换到用户 user,执行时需要输入目标用户的密码,

sudo <cmd> 可以以特权级别运行 cmd 命令,需要当前用户属于 sudo 组,且需要输入当前用户的密码。

su - <user> 命令也是切换用户,但是同时用户的环境变量和工作目录也会跟着改变成目标用户所对应的。

创建 test 用户 :

sudo adduser test

image-20200729134646084

重新设置 test的用户密码 :

sudo passwd test

image-20200729134659023

查看新用户在 /home 目录下创建一个工作目录:

ls /home

image-20200729134740919

切换用户:

su -l test

image-20200729134838360

查看用户终端:

who am i

查看用户名

whoami

查看当前路径

pwd

image-20200729134919367

退出当前用户跟退出终端一样,可以使用 exit 命令 或者 使用快捷键 Ctrl+D

image-20200729135013163

image-20200729134934701

用户组

Linux 里面每个用户都有一个归属(用户组),用户组简单地理解就是一组用户的集合,它们共享一些资源和权限,同时拥有私有资源 .

比如 家,你的姐姐弟弟(不同的用户)属于同一个家(用户组),你们可以共同拥有这个家(共享资源),爸妈对待你们都一样(共享权限),你的私密的东西 ,别人未经允许不能查看(私有资源和权限)。

一个用户是可以属于多个用户组的,如 : 你既属于家庭,又属于学校 或 公司。

查看 用户的用户组

groups 命令

groups test

groups

其中冒号之前表示用户,后面表示该用户所属的用户组。

这里可以看到 test用户属于 test用户组,每次新建用户如果不指定用户组的话,默认会自动创建一个与用户名相同的用户组(差不多就相当于家长的意思)。

默认情况下在 sudo 用户组里的可以使用 sudo 命令获得 root 权限。

test 用户也可以使用 sudo 命令,为什么这里没有显示在 sudo 用户组里呢?

可以查看下 /etc/sudoers.d/test 文件 :

etc/sudoers.d

etc/sudoers.d

我们在 /etc/sudoers.d 目录下创建了这个文件,

从而给 test 用户赋予了 sudo 权限:

查看 /etc/group 文件

cat /etc/group | sort

image-20200826150625793

这里 cat 命令用于读取指定文件的内容并打印到终端输出,后面会详细讲它的使用。 | sort 表示将读取的文本进行一个字典排序再输出,然后你将看到如下一堆输出,你可以在最下面看到 shiyanlou 的用户组信息:

没找到?没关系,你可以使用 grep 命令过滤掉一些你不想看到的结果:

cat /etc/group | grep -E "test"
cat /etc/group | grep -E "cpucode"

image-20200826150524508

/etc/group 文件格式说明

/etc/group 的内容包括用户组(Group)、用户组口令、GID(组 ID) 及该用户组所包含的用户(User),每个用户组一条记录。格式如下:

group_name : password : GID : user_list

password 字段为一个 x,表示密码不可见

这里需要注意,如果用户的 GID == 用户组的 GID,那么最后一个字段 user_list 就是空的,

这里的 GID 是指用户默认所在组的 GID,可以使用 id 命令查看。

id

将其它用户加入 sudo 用户组

默认情况下新创建的用户是不具有 root 权限的,也不在 sudo 用户组,可以让其加入 sudo 用户组从而获取 root 权限:

su -l test
sudo ls

image-20200826152836633

会提示 test 不在 sudoers 文件中,意思就是 test 不在 sudo 用户组中

使用 usermod 命令可以为用户添加用户组,同样使用该命令你必需有 root 权限,你可以直接使用 root 用户为其它用户添加用户组,或者用其它已经在 sudo 用户组的用户使用 sudo 命令获取权限来执行该命令。

这里我用 cpucode 用户执行 sudo 命令将 test 添加到 sudo 用户组,让它也可以使用 sudo 命令获得 root 权限

切换回 cpucode 用户 :

su - cpucode

image-20200826153604518

exit

image-20200826153640481

或 直接关闭当前终端打开一个新的终端

groups test
sudo usermod -G sudo test
groups test

image-20200826153314463

然后你再切换回 test 用户,现在就可以使用 sudo 获取 root 权限了

su - test
sudo ls /

image-20200826154039642

删除用户和用户组
sudo deluser test --remove-home

使用 --remove-home 参数在删除用户时候会一并将该用户的工作目录一并删除。

如果不使用那么系统会自动在 /home 目录为该用户保留工作目录

cat /etc/group | grep "test"
ls /home

这个地方有一个错误, 我搜索一下, 并不知道这个原因, 如果你知道, 希望你能告诉我, 谢谢 !

image-20200826155822302

找到原因 :

删除这个用户

sudo userdel -r test

杀死这个进程

sudo kill -9 17490

image-20200826160747068

image-20200826160709455

linux文件权限

文件权限就是文件的访问控制权限,即哪些用户和组群可以访问文件以及可以执行什么样的操作。

Unix/Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,对文件和目录有不同的访问权限。

\为了保护系统的安全性,Unix/Linux 系统除了对用户权限作了严格的界定外,还在用户身份认证、访问控制、传输安全、文件读写权限等方面作了周密的控制。

在 Unix/Linux 中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录。

查看文件权限

ls 命令,用它来列出并显示当前目录下的文件

ls -l

image-20200826161048127

image-20200826162424821

文件类型和权限 :

img

  • 文件类型

关于文件类型,就必需时刻牢记 Linux 里面一切皆文件,就是因为这一点才有了设备文件( /dev 目录下有各种设备文件,大都跟具体的硬件设备相关)这一说。

socket:网络套接字

pipe : 管道

软链接文件:链接文件是分为两种的,另一种是“ 硬链接 ”(软链接 等同于 Windows 上的快捷方式)。

  • 文件权限

读权限,表示你可以使用 cat <file name> 之类的命令来读取某个文件的内容;

写权限,表示你可以编辑和修改某个文件的内容;

执行权限,通常指可以运行的二进制程序文件或者脚本文件,如同 Windows 上的 exe 后缀的文件,不过 Linux 上不是通过文件后缀名来区分文件的类型。

你需要注意的一点是,一个目录同时具有读权限和执行权限才可以打开并查看内部文件,而一个目录要有写权限才允许在其中创建其它文件,这是因为目录文件实际保存着该目录里面的文件的列表等信息。

所有者权限,这一点相信你应该明白了,至于所属用户组权限,是指你所在的用户组中的所有其它用户对于该文件的权限,

比如,你有一个 iPad,那么这个用户组权限就决定了你的兄弟姐妹有没有权限使用它破坏它和占有它。

  • 链接数

链接到该文件所在的 inode 结点的文件名数目(关于这个概念涉及到 Linux 文件系统的相关概念知识,不在本课程的讨论范围,感兴趣的用户可以查看 硬链接和软链接的联系与区别)。

  • 文件大小

以 inode 结点大小为单位来表示的文件大小,你可以给 ls 加上 -lh 参数来更直观的查看文件的大小。

明白了文件权限的一些概念,我们顺带补充一下关于 ls 命令的一些其它常用的用法:

  • 显示除了 .(当前目录)和 ..(上一级目录)之外的所有文件,包括隐藏文件(Linux 下以 . 开头的文件为隐藏文件)。
$ ls -a

image-20200826161337430

当然,你可以同时使用 -a-l 参数:

ls -al

image-20200826161413484

查看某一个目录的完整属性,而不是显示目录里面的文件属性:

ls -dl <目录名>

显示所有文件大小,并以普通人类能看懂的方式呈现:

ls -asSh

image-20200826161435442

其中小 s 为显示文件大小,大 S 为按文件大小排序,若需要知道如何按其它方式排序,可以使用 man ls 命令查询。

image-20200826161523882

image-20200826161536552

变更文件所有者
修改文件权限

\

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Glow模型【图解版加代码】

论文&#xff1a;Glow: Generative Flow with Invertible 1x1 Convolutions 代码&#xff1a;pytorch版本&#xff1a;rosinality/glow-pytorch: PyTorch implementation of Glow (github.com) 正版是TensorFlow版本 openai的 参考csdn文章&#xff1a;Glow-pytorch复现gith…

spoon工具的常用基础操作

一些常用转换工具 1、emp表输入->excel表输出 emp表输入&#xff0c;可以进行预览查看数据有没有过来excel表输出 成功执行后&#xff0c;可以到保存的excel位置进行查看。 2、excel输入->表输出 运行转换后可以在oracle进行查看是否有成功创建这个表 3、对部门最高…

十_信号11 - 函数sigsetjmp() 和 siglongjmp()

也就是说&#xff0c;正常情况下&#xff0c;当捕捉到一个信号&#xff0c;并调用该信号的信号处理程序时&#xff0c;被捕捉的信号会被加入到当前进程的信号屏蔽字中&#xff0c;以防止在本次信号处理程序还没有完成的时候&#xff0c;再次触发该信号&#xff0c; 发生重入。 …

罕见!史诗级“大堵船”

新加坡港口的停泊延误时间已延长至7天&#xff0c;积压的集装箱数量达到惊人的450000标准箱&#xff0c;远超新冠疫情暴发时期的数轮高点。业内认为&#xff0c;近期东南亚恶劣的天气情况加剧了该区域港口拥堵。 5月31日&#xff0c;上海航运交易所&#xff08;下称“航交所”…

针对硅基氮化镓高电子迁移率晶体管(GaN-HEMT)的准物理等效电路模型,包含基板中射频漏电流的温度依赖性

来源&#xff1a;Quasi-Physical Equivalent Circuit Model of RF Leakage Current in Substrate Including Temperature Dependence for GaN-HEMT on Si&#xff08;TMTT 23年&#xff09; 摘要 该文章提出了一种针对硅基氮化镓高电子迁移率晶体管&#xff08;GaN-HEMT&…

【算法】理解堆排序

堆排序&#xff0c;无疑与堆这种数据结构有关。在了解堆排序之前&#xff0c;我们需要先了解堆的建立与维护方法。 堆 堆&#xff08;二插堆&#xff09;可以用一种近似的完全二叉树来表示&#xff0c;该二叉树除了叶子结点之外&#xff0c;其余节点均具有两个子女&#xff0c…

HCIP--RIP协议的实验 + RIP笔记

RIP实验&#xff1a; 实验思路&#xff1a; 1.规划IP&#xff0c;配置环回&#xff0c;接口IP 2.在3个路由器上跑通rip; 2.在边界路由器上用rip协议 设置缺省路由&#xff1b; [r3]rip [r3-rip-1]default-route originate 3.在r1、r2的主干接口上设置路由汇总 RIPV2手工汇…

MySQL数据库的约束

MySQL对于数据库存储的数据, 做出一些限制性要求, 就叫做数据库的"约束". 在每一列的 列名, 类型 后面加上"约束". 一. not null (非空) 指定某列不能存储null值. 二. unique (唯一) 保证这一列的每行必须有唯一值. 我们可以看到, 给 table 的 sn 列插…

Ubuntu系统配置DDNS-GO【笔记】

DDNS-GO 是一个基于 Go 语言的动态 DNS (DDNS) 客户端&#xff0c;用于自动更新你的 IP 地址到 DNS 记录上。这对于经常变更 IP 地址的用户&#xff08;如使用动态 IP 的家庭用户或者小型服务器&#xff09;非常有用。 此文档实验环境为&#xff1a;ubuntu20.04.6。 在Ubuntu…

基于Django的博客系统之登录增加忘记密码(八)

需求 描述&#xff1a; 用户忘记密码时&#xff0c;提供一种重置密码的方法&#xff0c;以便重新获得账户访问权限。规划&#xff1a; 创建一个包含邮箱输入字段的表单&#xff0c;用于接收用户的重置密码请求。用户输入注册时使用的邮箱地址&#xff0c;系统发送包含重置密码…

量产导入 | 芯片测试介绍可靠性测试

作者:桃芯科技链接:https://picture.iczhiku.com/weixin/message1583129221975.html半导体芯片的defects、Faults 芯片在制造过程中,会出现很多种不同类型的defects,比如栅氧层针孔、扩散工艺造成的各种桥接、各种预期外的高阻态、寄生电容电阻造成的延迟等等,如下面图(1)…

Spring高手之路19——Spring AOP注解指南

文章目录 1. 背景2. 基于AspectJ注解来实现AOP3. XML实现和注解实现AOP的代码对比4. AOP通知讲解5. AOP时序图 1. 背景 在现代软件开发中&#xff0c;面向切面编程&#xff08;AOP&#xff09;是一种强大的编程范式&#xff0c;允许开发者跨越应用程序的多个部分定义横切关注点…

数据隐私重塑:Web3时代的隐私保护创新

随着数字化时代的不断深入&#xff0c;数据隐私保护已经成为了人们越来越关注的焦点之一。而在这个数字化时代的新篇章中&#xff0c;Web3技术作为下一代互联网的代表&#xff0c;正在为数据隐私保护带来全新的创新和可能性。本文将深入探讨数据隐私的重要性&#xff0c;Web3时…

解锁数据宝藏:高效查找算法揭秘

代码下载链接&#xff1a;https://gitee.com/flying-wolf-loves-learning/data-structure.git 目录 一、查找的原理 1.1 查找概念 1.2 查找方法 1.3平均查找长度 1.4顺序表的查找 1.5 顺序表的查找算法及分析 1.6 折半查找算法及分析 1.7 分块查找算法及分析 1.8 总结…

很多人讲不明白HTTPS,但是我能

很多人讲不明白HTTPS&#xff0c;但是我能 今天我们用问答的形式&#xff0c;来彻底弄明白HTTPS的过程 下面的问题都是 小明和小丽两个人通信为例 可以把小明想象成服务端&#xff0c;小丽想象成客户端 1. https是做什么用的&#xff1f; 答&#xff1a;数据安全传输用的。…

数学建模 —— 聚类分析(3)

目录 一、聚类分析概述 1.1 常用聚类要素的数据处理 1.1.1 总和标准化 1.1.2 标准差标准化 1.1.3 极大值标准化 1.1.4 极差的标准化 1.2 分类 1.2.1 快速聚类法&#xff08;K-均值聚类&#xff09; 1.2.2 系统聚类法&#xff08;分层聚类法&#xff09; 二、分类统计…

Ubuntu18.04安装pwntools报错解决方案

报错1&#xff1a;ModuleNotFoundError: No module named ‘setuptools_rust’ 报错信息显示ModuleNotFoundError: No module named setuptools_rust&#xff0c;如下图所示 解决方案&#xff1a;pip install setuptools_rust 报错2&#xff1a;pip版本低 解决方案&#xff…

【数据结构(邓俊辉)学习笔记】图02——搜索

文章目录 0. 概述1. 广度优先搜索1.1 策略1.2 实现1.3 可能情况1.4 实例1.5 多联通1.6 复杂度1.7 最短路径 2. 深度优先搜索2.1 算法2.2 框架2.3 细节2.4 无向边2.5 有向边2.6 多可达域2.7 嵌套引理 3 遍历算法的应用 0. 概述 此前已经介绍过图的基本概念以及它在计算机中的表…

设计模式(十四)行为型模式---访问者模式(visitor)

文章目录 访问者模式简介分派的分类什么是双分派&#xff1f;结构UML图具体实现UML图代码实现 优缺点 访问者模式简介 访问者模式&#xff08;visitor pattern&#xff09;是封装一些作用于某种数据结构中的元素的操作&#xff0c;它可以在不改变这个数据结构&#xff08;实现…

Visual Studio Installer 点击闪退

Visual Studio Installer 点击闪退问题 1. 问题描述2. 错误类型3. 解决方法4. 结果5. 说明6. 参考 1. 问题描述 重装了系统后&#xff08;系统版本&#xff1a;如下图所示&#xff09;&#xff0c;我从官方网站&#xff08;https://visualstudio.microsoft.com/ ) 下载了安装程…