VMware安装Centos7超详细过程(图文)

本文提供了一份详细的VMware安装Centos7的图文教程,包括软硬件准备、虚拟机配置、安装过程及网络配置等内容,适用于初学者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:https://www.jianshu.com/p/ce08cdbc4ddb?utm_source=tuicool&utm_medium=referral

 

本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1.软硬件准备

软件:推荐使用VMwear,我用的是VMwear 12

镜像:CentOS7 ,如果没有镜像可以在官网下载 :http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso

这里也放上百度云盘下载地址:

链接:https://pan.baidu.com/s/12oBtfjqTe0BAsXacZ4LEag 
提取码:ex9a 
 

硬件:因为是在宿主机上运行虚拟化软件安装centos,所以对宿主机的配置有一定的要求。最起码I5CPU双核、硬盘500G、内存4G以上。

2.虚拟机准备

1.打开VMwear选择新建虚拟机

2.典型安装与自定义安装

典型安装:VMwear会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好。

自定义安装:自定义安装可以针对性的把一些资源加强,把不需要的资源移除。避免资源的浪费。

这里我选择自定义安装。

3.虚拟机兼容性选择

这里要注意兼容性,如果是VMwear12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMwear10创建的虚拟机在VMwear12中打开则不会出现兼容性问题。

4.选择稍后安装操作系统

5.操作系统的选择

这里选择之后安装的操作系统,正确的选择会让vm tools更好的兼容。这里选择linux下的CentOS

 

6.虚拟机位置与命名

虚拟机名称就是一个名字,在虚拟机多的时候方便自己找到。

VMwear的默认位置是在C盘下,我这里改成F盘。

7.处理器与内存的分配

处理器分配要根据自己的实际需求来分配。在使用过程中CPU不够的话是可以再增加的。这次只做安装CentOS演示,所以处理器与核心都选1.

内存也是要根据实际的需求分配。我的宿主机内存是8G所以我给虚拟机分配2G内存。

8.网络连接类型的选择,网络连接类型一共有桥接、NAT、仅主机和不联网四种。

桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上。

NAT:NAT模式就是虚拟机要联网得先通过宿主机才能和外面进行通信。

仅主机:虚拟机与宿主机直接连起来

桥接与NAT模式访问互联网过程,如下图所示

桥接与NAT区别

这里选择桥接模式

9.其余两项按虚拟机默认选项即可

10.磁盘容量

磁盘容量暂时分配100G即可后期可以随时增加,不要勾选立即分配所有磁盘,否则虚拟机会将100G直接分配给CentOS,会导致宿主机所剩硬盘容量减少。

勾选将虚拟磁盘拆分成多个文件,这样可以使虚拟机方便用储存设备拷贝复制。

11.磁盘名称,默认即可

12.取消不需要的硬件

点击自定义硬件

选择声卡、打印机等不需要的硬件然后移除。

13.点击完成,已经创建好虚拟机。

3.安装CentOS

1.连接光盘

右击刚创建的虚拟机,选择设置

先选择CD/DVD,再选择使用ISO映像文件,最后选择浏览找到下载好的镜像文件。启动时连接一定要勾选上后确定。

2.开启虚拟机

3.安装操作系统

开启虚拟机后会出现以下界面

  1. Install CentOS 7 安装CentOS 7
  2. Test this media & install CentOS 7 测试安装文件并安装CentOS 7
  3. Troubleshooting 修复故障

选择第一项,安装直接CentOS 7,回车,进入下面的界面

选择安装过程中使用的语言,这里选择英文、键盘选择美式键盘。点击Continue

首先设置时间

时区选择上海,查看时间是否正确。然后点击Done

选择需要安装的软件

选择 Server with Gui,然后点击Done

选择安装位置,在这里可以进行磁盘划分。

选择i wil configure partitioning(我将会配置分区),然后点击done

如下图所示,点击加号,选择/boot,给boot分区分200M。最后点击Add

然后以同样的办法给其他三个区分配好空间后点击Done

然后会弹出摘要信息,点击AcceptChanges(接受更改)

设置主机名与网卡信息

首先要打开网卡,然后查看是否能获取到IP地址(我这里是桥接),再更改主机名后点击Done。

最后选择Begin Installation(开始安装)

设置root密码

设置root密码后点击Done

点击USER CREATION 创建管理员用户

输入用户名密码后点击Done

等待系统安装完毕重启系统即可

 

以上就是本文的全部内容,希望对大家的学习有所帮助。

以下为我自己整理的克隆虚拟机和设置固定IP的方法,记录一下,以防忘记:

桥接模式网络配置

1、配置ip地址等信息在/etc/sysconfig/network-scripts/ifcfg-ens33文件里做如下配置:

 命令:

vi   /etc/sysconfig/network-scripts/ifcfg-ens33

修改如下:

TYPE="Ethernet"   # 网络类型为以太网
BOOTPROTO="static"  # 手动分配ip
NAME="ens33"  # 网卡设备名,设备名一定要跟文件名一致
DEVICE="ens33"  # 网卡设备名,设备名一定要跟文件名一致
ONBOOT="yes"  # 该网卡是否随网络服务启动
IPADDR="192.168.220.101"  # 该网卡ip地址就是你要配置的固定IP,如果你要用xshell等工具连接,220这个网段最好和你自己的电脑网段一致,否则有可能用xshell连接失败
GATEWAY="192.168.220.2"   # 网关
NETMASK="255.255.255.0"   # 子网掩码
DNS1="8.8.8.8"    # DNS,8.8.8.8为Google提供的免费DNS服务器的IP地址

2、配置网络工作

在/etc/sysconfig/network文件里增加如下配置

命令:

vi /etc/sysconfig/network


修改:

NETWORKING=yes # 网络是否工作,此处一定不能为no

3、配置公共DNS服务(可选)

在/etc/resolv.conf文件里增加如下配置

nameserver 8.8.8.8

4、关闭防火墙

systemctl stop firewalld # 临时关闭防火墙
systemctl disable firewalld # 禁止开机启动

5、重启网络服务

service network restart

 下面是克隆虚拟机:

先查看虚拟机的网关

2、将要克隆的虚拟机关机,右键点击要克隆的虚拟机:

右键点击虚拟机,选择“管理”、“克隆”

然后下一步

再下一步

选择第二个“创建完整克隆”,后下一步

给自己的克隆机命名、选择位置后点击“完成”。

然后就开始克隆了,时间不会太久,整个过程大概1~2分钟。

完成克隆后点击关闭即克隆成功了。此时是可以在虚拟机列表中看到刚刚克隆的虚拟机“Clone”的。如下:

此时这个克隆出来的虚拟机和原虚拟机各个配置都是一样的,我们接下来要对网络、主机名等进行配置。

修改配置文件/etc/sysconfig/network-scripts/ifcfg-ens33中的IPADDR

IPADDR="192.168.220.102"

修改主机名:

hostnamectl set-hostname   xxxx(你要的主机名字)

 修改hosts文件,将名字和IP建立联系

输入命令“vi /etc/hosts”后,在配置文件中加入


127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.220.103(你锁修改的主机IP)   xxxxxxxx(你要的主机名字)

重启:reboot 

(请详细解析相关概念和描述,联网解析,中文解析)看看关于LinkedList源码开头的注释 • Doubly-linked list implementation of the {@code List} and {@code Deque} • interfaces. Implements all optional list operations, and permits all • elements (including {@code null}). * • <p>All of the operations perform as could be expected for a doubly-linked • list. Operations that index into the list will traverse the list from • the beginning or the end, whichever is closer to the specified index. * • <p><strong>Note that this implementation is not synchronized.</strong> • If multiple threads access a linked list concurrently, and at least • one of the threads modifies the list structurally, it <i>must</i> be • synchronized externally. (A structural modification is any operation • that adds or deletes one or more elements; merely setting the value of • an element is not a structural modification.) This is typically • accomplished by synchronizing on some object that naturally • encapsulates the list. 从这段注释中,我们可以得知 LinkedList 是通过一个双向链表来实现的,它允许插入所有元素,包括 null,同时,它是线程不同步的。 LinkedList集合底层结构是带头尾指针的双向链表。 LinkedList是非线程安全的。 LinkedList集合中存储元素的特点:有序可重复,元素带有下标,从0开始,以1递增。 LinkedList集合的优点:在指定位置插入/删除元素的效率较高;缺点:查找元素的效率不如ArrayList。
04-04
<think>好的,我现在需要帮助用户解析Java LinkedList的源码注释,特别是关于双向链表、线程安全性和插入删除效率的部分。用户提到了几个引用,我需要结合这些引用来组织回答。 首先,用户提供的引用中有关于LinkedList的基本结构,比如双向链表,继承自AbstractSequentialList,以及线程不安全的问题。引用[3]提到LinkedList是双向链表,可以作为堆栈、队列等使用,这应该作为开头部分的结构描述。 接下来是线程安全性。引用[2]和[4]都说明了LinkedList是线程不安全的,需要外部同步,或者使用Collections.synchronizedList。引用[4]还详细解释了modCount和ConcurrentModificationException的产生机制,这部分需要详细说明,尤其是迭代器遍历时多线程修改的问题。 然后是插入和删除效率。引用[1]指出在指定位置插入时LinkedList比ArrayList高效,因为不需要数组复制。但可能用户需要更详细的解释,比如节点操作的时间复杂度和具体方法,比如add和remove。引用[5]中的remove方法解析,通过遍历找到元素后调用unlink,说明删除操作的时间复杂度是O(n),但unlink本身是O(1)。需要区分按索引和按元素删除的不同情况。 源码注释中的关键点可能需要提取,比如线程不安全、双向链表结构、允许null值等。用户还希望中文解析,所以需要用简洁的中文解释这些概念。 此外,用户的问题还包括生成相关问题,需要根据内容提出相关问题,比如结构特点、线程安全保证、与ArrayList的比较、应用场景等。 需要确保回答结构清晰,分点说明,引用正确的来源,并在末尾添加相关问题。同时注意使用中文,避免使用Markdown格式,但根据用户系统指令,可能允许适当的分段和代码块。 最后检查是否覆盖了用户的所有需求:源码注释中的概念、双向链表、线程安全、插入删除效率,以及引用相关的内容。确保每个部分都有对应的引用支持,例如线程安全部分引用[2][4],插入删除效率引用[1][5],结构部分引用[3]。</think>### Java LinkedList 源码注释解析 #### 1. **双向链表结构** LinkedList 是基于双向链表实现的集合类,每个节点(`Node`)包含前驱指针(`prev`)、后继指针(`next`)和存储的数据(`item`)。这种结构使得插入和删除操作的时间复杂度为 $O(1)$(仅操作指针),但查找元素需要 $O(n)$ 时间(需遍历链表)[^3]。 源码注释中明确说明: > `LinkedList` 实现了 `List` 和 `Deque` 接口,可作为队列、堆栈或双端队列使用。 #### 2. **线程安全性** LinkedList **非线程安全**,多线程环境下需通过外部同步控制(如 `Collections.synchronizedList`)保证安全[^2][^4]。源码注释指出: > 若多个线程并发修改链表,需通过外部同步机制保证一致性。迭代器遍历时若其他线程修改链表结构,会触发 `ConcurrentModificationException`。 具体机制: - **`modCount` 与 `expectedModCount`**: 迭代器初始化时会记录 `modCount`(链表结构修改计数器)。遍历过程中若发现 `modCount != expectedModCount`,说明链表被外部修改,立即抛出异常。 #### 3. **插入与删除效率** - **插入效率**: 在指定索引位置插入元素时,LinkedList 只需调整相邻节点的指针($O(1)$),而 ArrayList 需要复制数组($O(n)$)。因此,频繁插入场景下 LinkedList 更高效[^1]。 源码中 `add(int index, E element)` 方法通过 `node(index)` 找到目标位置节点后直接插入新节点。 - **删除效率**: `remove(Object o)` 方法需遍历链表找到目标元素($O(n)$),但实际删除操作(`unlink(Node<E> x)`)仅需修改指针($O(1)$)[^5]。例如删除首个匹配的 `null` 值: ```java for (Node<E> x = first; x != null; x = x.next) { if (x.item == null) { unlink(x); // 断开前后指针,更新链表头尾 return true; } } ``` #### 4. **其他关键注释说明** - **允许 `null` 值**:LinkedList 允许存储 `null`,在 `remove` 和 `contains` 方法中需特殊处理。 - **继承关系**:继承自 `AbstractSequentialList`,实现了链式存储的抽象逻辑[^3]。 --- ###
评论 179
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值