虚拟机的安装

虚拟机的安装



一、虚拟机软件的安装

  • VMware Workstation

我们以安装VMware为例,注意第5步界面的安装位置和文件夹的设置,其他的界面直接下一步即可。

VMware官方网址:https://www.vmware.com/products/workstation-pro.html

下面是安装VMware的具体步骤:

1、首先,您需要从VMware官方网站下载适用于您的操作系统的VMware安装程序。
2、打开下载的安装程序,运行它以开始安装过程。
3、在安装向导中,您将看到许可协议。请阅读并接受该协议。
4、接下来,您需要选择安装类型。通常,您可以选择默认安装选项,但也可以根据需要进行自定义安装。
5、在接下来的步骤中,您需要选择安装位置和文件夹。您可以选择默认位置,或者选择其他位置。
6、安装程序还会要求您选择是否创建桌面快捷方式和开始菜单项。根据您的喜好进行选择。
7、安装程序将开始复制文件并进行必要的配置。这可能需要一些时间,请耐心等待。
8、安装完成后,您可以选择启动VMware应用程序。
9、第一次启动时,您可能需要进行一些初始设置,例如接受许可协议、注册产品等。
10、完成设置后,您就可以开始使用VMware了。
11、下载完后一定要检查的(下载完成后,点击我的电脑,搜索网络连接,查看是否有vm8虚拟网络,如果没有则说明下载出错、则需要卸载、重新下载)

请添加图片描述


二、虚拟机的创建(以Centos7操作系统为例)

  1. 点击“创建新的虚拟机”

请添加图片描述
2. 选择自定义创建虚拟机

请添加图片描述

  1. 选择虚拟机的硬件兼容性

请添加图片描述

  1. 暂时不选择系统镜像文件我们选择稍后安装

请添加图片描述

  1. 选择操作系统类型和版本

请添加图片描述

  1. 命名虚拟机
    修改虚拟机的名称以及安装的位置(选择放虚拟机的路径尽量不要出现中文目录,位置尽量再剩余空间比较大的盘符)

请添加图片描述

  1. 配置处理器
    根据自己电脑处理器的情况进行选择配置

请添加图片描述

  1. 配置内存
    选择内存的大小,可以使用推荐的大小(如果自己内存大也可以自己设置)

请添加图片描述

  1. 网络类型设置
    选择NAT模式

请添加图片描述

  1. I/O控制器类型选择

请添加图片描述

  1. 磁盘类型选择

请添加图片描述

  1. 磁盘选择
    创建新虚拟磁盘

请添加图片描述

  1. 指定磁盘容量

请添加图片描述

  1. 指定磁盘文件(注意文件的位置)

请添加图片描述

  1. 点击完成

请添加图片描述

  1. 设置安装镜像
    请添加图片描述
    请添加图片描述

三、Linux系统的安装

  1. 下载操作系统镜像源
1.阿里源: [https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.6a04f5adE2kP](https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.6a04f5adE2kP)

根据自己的需要安装对应的版本(以DVD版为例)

Alt


  1. 点击开启虚拟机开始开始安装操作系统

请添加图片描述

  1. 修改网卡的名称
    为eth0开头:(centos7.x操作系统默认的网卡名称为ens开头)在企业中为了统一网卡名称。
    光标移动到第一行按键盘上TAB键在下面命令行输入以下命令
    biosdevname=0 net.ifnames=0
1、biosdevname=0 net.ifnames=0

请添加图片描述

  1. 选择语言

请添加图片描述

  1. 修改时区

请添加图片描述
请添加图片描述

  1. 修改支持的语言

请添加图片描述
请添加图片描述

  1. 选择最小化安装以及我们需要的工具

请添加图片描述
请添加图片描述

  1. 进行磁盘分区
 1. 第一个区是/boot分区,大约200~500M就够用了。它的作用是安装grub、存放Linux kernel以及initrd映像。这些都是启动时必需的东西,单独存在boot区便于管理。
 2. 第二个区是swap分区。这是因为Linux的swap分区格式为内存交换做过专门优化;你不设swap分区也行,或者指定主分区上的一个文件也行,但性能方面都比不过专门的swap分区。这个区建议使用最快的硬盘(但如果用SSD的话,最好选用MLC甚至SLC,不然内存不足时读写量太大,容易把SSD写废)。
 3. 第三个区就是/分区,这里安装了Linux系统以及你自己的用户文件,请把你硬盘上的剩余空间都留给它。

  通俗的来说:
  a. /boot 内含启动文件和内核。
     	启动文件:用于决断你需要启动哪个百操作系统或者启动哪个内核。
    	内核:简单的讲,程序与硬件度间的桥梁,你使用应用程序通过内核,控制整个计算机。
  b. SWAP 作为虚拟内存文件的专门分区。作用类似windows的pagesfile.sys。
    	你可以单独划这个分区,问而用一个文件来代替这个分区。但单独的分区效率会高一些,所以通常都独立划分这个分区。
  c. / 根分区
    	硬盘不论分几个区。所有的文件都在根目录下。

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  1. 学习阶段不保存日志了损坏了直接创建一个新的

请添加图片描述
请添加图片描述

  1. 修改ip以及子网掩码

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  1. 修改root用户的密码

请添加图片描述请添加图片描述

  1. 下载完成重启虚拟机

请添加图片描述

四、虚拟机中出现的问题以及解决方案

1.VMware 必须管理员身份运行

问题描述:每次必须右击,管理员身份运行,虚拟机才能正常打开,而双击运行就会报错。

请添加图片描述
解决方案:
1: 右击 VMware, 点击 “属性”,然后点击, “兼容性”。
2:勾选 “以管理员身份运行该程序”

请添加图片描述

2.虚拟机无法连接外网排错
  1. 确保windows可以正常上网
  2. 需要检查虚拟机的IP地址配置是否正确
ip ad    #查看ip信息的命令

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:1f:4d:be brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.200/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f66f:763a:981f:5cea/64 scope link noprefixroute 
       valid_lft forever preferred_lft forev
  1. 检查虚拟机的网关配置是否正确
ip route

default via 10.0.0.2 dev eth0 proto static metric 100 
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.200 metric 100 
  1. 检查虚拟机路由器网关配置是否正确

     a. 如果不通,检查虚拟机的ip地址和网关配置是否正确
     b.检查NAT服务是否正常开启状态
    

a、 编辑—>vmnet8—>子网和虚拟机必须在同一网段(模式得正确)
10.0.0.0 255.255.255.0
编辑–>虚拟网络编辑器–>更改设置–>NAT–>网关请添加图片描述

测试虚拟机和网关之间是否可以通信
在虚拟机中ping 网关
查看网卡配置的网关:
cat /etc/sysconfig/network-scripts/ifcfg-eth0

b、此电脑–>管理–>服务和应用程序–>服务
和VMware相关的服务全部开启请添加图片描述

  1. 检查DNS配置是否正确
 ping www.baidu.com
 ping: www.baidu.com: Name or service not known
 ping 114.114.114.114
 PING 114.114.114.114(114.114.114.114)56(84)bytes of data64 bytes from 114,114.114,114:icmp seg=2 ttl=128 time=15.5 ms

	# ping 外网IP地址
	# ping 223.5.5.5
	# ping 8.8.8.8
	# ping 114.114.114.114

cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 223.5.5.5

总结

以上就是今天要讲的内容,本文仅简单介绍了虚拟机软件的安装、虚拟机的创建、操作系统的安装、虚拟机中出现的一些问题的排错方式和解决方案。

<template> <div class="box bgc3 sku-sale-rank"> <!-- TODO: 分辨大怎么展示问UI --> <div class="header"> <div class="title"> 商品热榜<span class="sub-title">{{ start }} ~ {{ end }}</span> </div> </div> <div class="body"> <el-row v-for="(item, index) in skuSaleRank" :key="index"> <el-col :span="5"> <div :class="'top top' + (index + 1)"> {{ index + 1 }} </div> </el-col> <el-col :span="13"> <div class="sku-name" :title="item.skuName"> {{ item.skuName }} </div> </el-col> <el-col :span="6"> <div class="count">{{ item.count }}单</div> </el-col> </el-row> </div> </div> </template> <script setup> import dayjs from "dayjs"; // 定义变量 const skuSaleRank = ref([ { skuId: "0", skuName: "可口可乐", count: 9, amount: 0, }, { skuId: "0", skuName: "营养快线", count: 8, amount: 0, }, { skuId: "0", skuName: "阿萨姆奶茶", count: 6, amount: 0, }, { skuId: "0", skuName: "星巴克摩卡味", count: 2, amount: 0, }, { skuId: "0", skuName: "美汁源果粒橙", count: 1, amount: 0, }, { skuId: "0", skuName: "怡宝", count: 1, amount: 0, }, ]); const start = dayjs().startOf("month").format("YYYY.MM.DD"); const end = dayjs().endOf("day").format("YYYY.MM.DD"); </script> <style lang="scss" scoped> @import "@/assets/styles/variables.module.scss"; .sku-sale-rank { display: flex; flex-direction: column; height: calc((100vh - 120px) * 0.6); min-height: 538px; background: #ffffff; border-radius: 20px; .body { flex: 1; display: flex; flex-direction: column; justify-content: space-between; margin-top: 20px; .top { display: inline-block; width: 16px; height: 20px; margin-left: 10px; background: url("@/assets/user-task-stats/top.png"); text-align: center; font-size: 12px; font-weight: normal; color: #e9b499; line-height: 14px; } .top1 { width: 21px; height: 20px; background: url("@/assets/user-task-stats/top1.png"); color: #8e5900; } .top2 { width: 21px; height: 20px; background: url("@/assets/user-task-stats/top2.png"); color: #494949; } .top3 { width: 21px; height: 20px; background: url("@/assets/user-task-stats/top3.png"); color: #cf6d3d; } .sku-name { height: 20px; font-size: 14px; font-weight: 500; color: $--color-text-primary; line-height: 20px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .count { height: 20px; font-size: 14px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #737589; line-height: 20px; text-align: right; } } } </style> 基于后端接口export function getTopSelling() { return request({ url: "/manage/order/top-selling", method: "get", }); }改造前端代码,使其调用接口动态获取数据而不是写死
03-30
<think>嗯,用户给了一个Vue组件的代码,需要根据后端接口改造前端,动态获取数据而不是写死的。首先,我得先理解现有的代码结构。看起来这是一个显示商品销售排名的组件,模板部分用了Element UI的el-row和el-col来布局,数据是写死在ref里的。目标是要调用getTopSelling接口获取真实数据。 首先,我需要确定如何在Vue的setup函数中发起请求。用户已经导入了dayjs,所以日期处理应该没问题。接下来,需要引入API方法,比如从某个api模块导入getTopSelling。然后,使用onMounted钩子来在组件挂载时调用接口。 然后,数据方面,原本的skuSaleRank是ref里的静态数据,现在需要替换成接口返回的数据。因此,应该将skuSaleRank初始化为空数组,然后在接口成功返回后更新它。可能需要处理加载状态和错误情况,但用户没提到,可能暂时不需要,但最好加上加载中和错误提示会更友好。 接下来,接口返回的数据结构是否和现有结构匹配?比如,后端返回的数据是否有skuId、skuName、count这些字段?如果不同,需要进行映射。假设接口返回的数据结构一致,那直接赋值即可;否则需要调整字段名。 另外,日期部分,start是当月第一天,end是当天,这个逻辑应该保留,因为用户可能希望显示当前时间段的数据。但需要确认后端是否需要这些日期作为参数,或者接口是否已经处理了时间范围。根据接口定义,getTopSelling是GET请求,可能不需要参数,但可能需要传递start和end。需要检查接口文档,但用户提供的接口函数没有参数,所以可能不需要。 然后,模板部分,v-for循环skuSaleRank,显示排名、商品名和订单数。如果接口返回的数据正确,这部分应该不需要修改,只需要确保数据正确加载即可。 样式方面,可能不需要改动,但需要注意如果数据为空时的展示情况。比如,如果接口没有返回数据,可能需要显示“暂无数据”的提示,提升用户体验。 另外,需要考虑异步加载时的状态,比如在数据加载前显示加载中的提示,避免页面空白。可以使用v-if或v-show来控制显示。 还有错误处理,比如网络请求失败时,应该捕获错误并提示用户,但用户可能暂时不需要,但最好加上。 综上,步骤大概是:引入API,使用onMounted调用接口,处理响应数据,替换静态数据,处理加载和错误状态,确保模板正确渲染。同时检查字段映射是否正确,是否需要参数传递时间范围。</think>我将分步骤为您讲解如何改造这个组件为动态获取数据模式: $$ 改造步骤 = [接口调用, 数据绑定, 状态处理, 错误处理]^T $$ 一、接口调用层改造 1. 添加接口引入 ```javascript import { getTopSelling } from '@/api/order' // 假设接口文件路径 ``` 2. 创建数据获取逻辑 ```javascript const loading = ref(false) const fetchData = async () => { try { loading.value = true const { data } = await getTopSelling() skuSaleRank.value = data // 假设接口返回数组结构一致 } catch (e) { console.error('获取热销数据失败:', e) // 可添加ElMessage错误提示 } finally { loading.value = false } } ``` 二、生命周期处理 ```javascript onMounted(() => { fetchData() }) ``` 三、模板优化(添加加载状态) ```html <template> <div class="box ..."> <!-- 原有header保持不变 --> <div class="body"> <template v-if="loading"> <el-skeleton :rows="6" animated /> </template> <template v-else> <el-row v-for="(item, index) in skuSaleRank" :key="item.skuId"> <!-- 原有内容 --> </el-row> </template> </div> </div> </template> ``` 四、数据映射建议(若接口字段不一致) ```javascript // 如果接口返回字段不同,例如返回salesCount而不是count: skuSaleRank.value = data.map(item => ({ skuId: item.productId, skuName: item.name, count: item.salesCount, amount: item.totalAmount })) ``` 五、日期参数传递(根据接口需求) ```javascript // 如果接口需要时间参数: const params = { start: dayjs().startOf('month').format('YYYY-MM-DD'), end: dayjs().endOf('day').format('YYYY-MM-DD') } const { data } = await getTopSelling(params) ``` 六、最终代码结构示意图: $$ \begin{array}{ccc} \text{组件初始化} & \rightarrow & \text{onMounted} \\ & \downarrow & \\ \text{API调用} & \leftrightarrow & \text{数据处理} \\ & \downarrow & \\ \text{UI渲染} & \leftarrow & \text{状态更新} \\ \end{array} $$ 改造要点: 1. 使用`ref`保持响应式数据 2. 添加加载状态提升用户体验 3. 需要验证接口返回数据结构 4. 建议添加错误边界处理 5. 如果时间范围需要作为参数,需与后端确认格式 请根据实际接口返回数据结构调整字段映射,推荐使用Postman先验证接口返回格式。如果遇到跨域问题需要配置代理,可在vue.config.js中添加代理设置。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值