VS2017 使用指南

article/2025/10/13 7:59:32

文章目录

    • VS2017项目构成
      • 1. 解决方案资源管理器
      • 2. 子系统
      • 3. 运行
    • VS2017项目执行步骤
    • 路径宏
    • 项目属性
      • Release和Debug的区别
      • win32和win64的区别
    • 大型项目开发的文件夹管理
    • 头文件的路径问题
      • 引用头文件的原理
      • 结论
    • DLL动态链接
      • 如何查看程序调用的动态链接文件?
      • 外部依赖模块
      • 实战:opencv的使用
      • 实战:多项目开发
        • 启动项目设置和项目依赖关系设置
        • Project2.dll的导出和导入
    • 头文件与重复定义符号
    • VS2017 Debug
      • 内存溢出
      • 内存泄漏
    • 远程调试
    • 整理

本文参考自 Visual Studio_luoyu510183的博客,在此表示感谢。

VS2017项目构成

1. 解决方案资源管理器

在这里插入图片描述

2. 子系统

子系统的配置方式为 属性页->链接器->系统->子系统

在这里插入图片描述

点击子系统后,下方会出现微软的官方解释:当双击exe文件后,子系统会告知操作系统运行的入口函数,默认是int main(),可以在 属性页->链接器->高级->入口点 进行设置。

补充:链接器->常规 和 链接器->输入 也很重要,当我们使用外部一些封装好的库函数的接口(ddl或者lib文件),就需要进行配置。链接器->调试可以设置调试的pdb文件,因为编译是单向的,于是VS通过将cpp文件和obj文件建立字典,即pdb文件,由此实现调试。

3. 运行

可以右键项目->生成解决方案,也可以点击“本地Windows调试器”,直接生成并运行调试我们的代码,后者更加常用。

VS2017项目执行步骤

VS的项目生成大概需要四步:分析、编译、链接和生成。

  • 分析,主要检查语法错误,在"错误列表"中查看

  • 编译,将解决方案资源管理器中的cpp文件都编译为obj文件,这里执行了gcc中的预处理、编译、汇编三个步骤

  • 链接,以main.cpp为根节点(可右击项目->属性->链接器->高级,设置入口点),将所有与之相关的obj文件链接起来,一方面将没有用到的编译内容进行了删减,另一方面对外部变量和函数进行了匹配(例如定义在其他文件中或者ddl文件中的变量,诸如extern int a),"连接错误"往往就是这里的问题;

    注意:所有在cpp文件下的变量定义和函数定义都是全局的,整个项目都共享(只是项目,不是解决方案),所以同一个项目的全局变量的命名不能冲突。

  • 生成,在Debug文件下生成了可执行文件,但是这是一个调试程序,里面有大量对VS的依赖,在没有安装对应版本的VS的电脑上无法运行,需要进行独立打包才能在其他电脑上运行。

路径宏

VS中目录的设置都是宏的形式,和C++ define一样,只是所有的路径都是相对路径,更加灵活。

VS配置属性中的常规->输出目录,是生成exe文件的Debug文件夹;配置属性中的调试->工作目录,是调试时候的目录,两者一般不同。在程序中如果用相对路径寻找一个文件,在调试的时候,是以后者为出发点查找,但是如果双击exe文件,则是以前者为出发点查找,这就会出现调试时没有问题,但是双击exe会显示文件找不到的问题——此时,就需要修改两个路径宏,使之相同。

项目属性

点击属性页的右上角的"配置管理器",可以看到不同项目的运行配置方式:

在这里插入图片描述

在配置属性的常规目录下,我们可以看到

在这里插入图片描述

VS将这些配置字段和值保存成xml文件的格式,这个思路在开发中经常会用到,保存的文件后缀名为.vcxproj如下所示

在这里插入图片描述

Release和Debug的区别

一般来讲,写代码和调试代码使用Debug模式,发布代码使用release模式,前者编译时可以放弃优化,保持代码的原始性,后者则会对代码做较大的优化,不利于调试查看。

两者在变量的初始化上也有较大不同,例如int a,release模式下初始值为0,debug模式下初始值为0xcccccccc或者0xcdcdcdcd

win32和win64的区别

为了保证代码的可移植性,一般使用win32即可,如果代码中涉及到较多的int64和double类型,使用win64会在速度上有优势。

大型项目开发的文件夹管理

VS默认的项目文件夹目录并不适合大型项目的代码管理,特别是需要用到云开发的时候,典型的就是Github 和 Azure。首先要明确,服务器只保存用户数据,不保存VS的生成文件,直白的说,就是如何上传最小的文件让用户下载下来可以编译运行,因此只需要上传:

  1. 用户源码,.cpp文件和.h文件
  2. 项目配置文件和解决方案文件,前者包括项目名.vcxproj项目名.vcxproj.filters项目名.vcxproj.user,后者就是.sln文件
  3. 素材媒体文件
  4. 第三方库文件

所以重新调整了之前的解决方案路径:

在这里插入图片描述

分为四个大文件:

  • 第三方库
  • 各个项目的配置文件夹
  • 媒体文件夹
  • 代码文件夹
    • 头文件夹
    • 源文件夹
      • 项目1
      • 项目2

其实就是将原来的Debug,Release文件夹都不要,只需要将配置文件.vcxproj、头文件.h和源文件.cpp整理昊即可,之后创建新的cpp文件和头文件也要放在对应的目录下面,而不要使用默认路径。

头文件的路径问题

VS通过intelllisense功能自动补全(编辑->Intellisense)。

引用头文件的原理

我们知道C++有两种引用头文件的方法:

#include "iostream"
#include <iostream>

但是VS的intellisense在前者不会自动补全,后者却能够自动补全,管理后者搜索路径的设置就在 项目属性->VC++目录->包含目录中,如下图所示,可见搜索路径包括自定义的搜索路径和从项目属性管理器中继承的值,例如下面的项目就自动继承了$(VC_IncludePath)$(WindowsSDK_IncludePath)这两个值:

在这里插入图片描述

可以通过打开“属性管理器”查看第二种方法链接的一部分lib文件,如下图所示:

在这里插入图片描述

该项目显示有三个属性:Core Windows Libraries,Multi-byte Character Support,Microsoft.Cpp.Win32.user,分别代表链接的C++ lib文件、多字节 lib文件、win32 lib文件,以**.props**的格式存储,其中,以Core Windows Libraries的props文件如下所示:

在这里插入图片描述

debug所作的就是将这三个属性表(.props文件)拼接成一份属性页

但是,Toolset.props并没有通过属性管理器中,而是在.vcxproj中加载的,.vcxproj加载这个属性表的代码片段 如下图所示:

在这里插入图片描述

Toolset.props中导入 $(VC_IncludePath)$(WindowsSDK_IncludePath)的代码如下图所示:

在这里插入图片描述

总结:#include <>通过属性管理器中的props和.vcxproj中加载的Toolset.props管理链接的lib文件地址,底层都是通过加载.props文件实现的。

结论

#include " "的搜索路径在属性页->C/C++ ->常规->附加包含目录,而#include < >的搜索路径保存在属性页->VC++ -> 包含目录,因此如果不想头文件和Windows标准文件混在一起,可以使用#include "",并在属性页中配置搜索路径。

DLL动态链接

如何查看程序调用的动态链接文件?

通过任务管理器的资源监视器,我们在CPU中找到运行程序的进程,选定VSDebugConsole以后,在下面的“关联的模块中”会出现这个程序所依赖的dll文件,如下图所示:

在这里插入图片描述

外部依赖模块

外部依赖模块的链接分为静态链接和动态链接。

动态链接,诸如dll文件,当程序启动的时候在PATH路径下查找所需要的dll文件并加载到内存中。

静态链接,诸如lib文件,在链接期就被编译进当前的项目文件中了,但是静态链接编译出来的文件比较大,而且不够灵活,所以用的比较少。

所以如果出现dll文件无法找到的问题,往往需要检查PATH路径是否正确,或者将dll文件和调用dll的exe文件放在一起。

实战:opencv的使用

首先,下载opencv,需要说明的是,流行的第三方库往往是Cmake项目,基于源码使用Cmake生成的VS项目,然后再编译出所需要的dll、lib和pdb文件。下载解压之后的opencv文件夹包括build和source两个文件夹,前者是我们会用到的,后者是debug源码时会用到的。

在这里插入图片描述

打开build文件夹,其中的include放置头文件,而x64放置生成的对应于64位系统的lib、pdb和dll文件,分别对应链接、调试和运行,如果是x86则是32位系统的。

然后设置头文件include的搜索目录,将opencv的include文件夹添加到C/C++的附加包含目录中:

在这里插入图片描述

之后,设置链接的lib文件路径,添加opencv对应VS版本的lib文件的文件夹路径到属性页->链接器->常规->附件库目录下,再将lib文件添加到属性页->链接器->输入->附加依赖项中,这两步操作如下图所示:

在这里插入图片描述
在这里插入图片描述

注意:这里的附加库目录要根据VS版本选择合适的include文件夹,附加依赖项则要分清release和debug版本——其实如果设置好了附加库目录,此处的附加依赖项似乎并不是必须的,因为代码中还能够直接加载,之所以这么做,是为了让项目的依赖项更加明了,而不用去cpp文件里找加载的依赖项。

之后就可以愉快的写代码了。

如果调试代码的时候,如果出现**“无法解析的外部符号”错误**,可以按照上面的方法检查一遍链接器设置,如果报“找不到opencv_world4000d.dll文件”错误(如果你前面配置合适这个问题并不会出现,但是有时候必须自己下载一些丢失的dll文件),此时本地确实没有该文件,可以按照debug和release两种途径有两种方法:

  1. debug

    将附加依赖库文件夹lib的同级bin文件夹设置为环境变量

    在这里插入图片描述

  2. release

    属性页->生成事件->生成后事件->命令行添加诸如xcopy "F:\SDK\opencv_400alpha\opencv\build\x64\vc14\bin\opencv_world400d.dll" "$(SolutionDir)$(Platform)\$(Configuration)" /y,即将找不到的dll文件夹复制一份到exe的目录下面,当然debug模式也可以使用该方法,这样的好处是,程序的依赖项目都集中在生成目录下,方便最后打包。

    在这里插入图片描述

实战:多项目开发

多项目开发的主旨是尽可能的实现代码的模块化,减少对其它项目的依赖性,最好能够独立实现它设计的功能。

启动项目设置和项目依赖关系设置

右键解决方案-》添加-》新建项目-》空项目,将新建项目的项目属性页修改为动态库(.dll)。

在这里插入图片描述

在这里插入图片描述

此时,我们会发现解决方案资源管理器中的启动项目Project1为高亮显示,而其他项目是普通的。右击解决方案,可以设置启动项目是单项目还是多项目:

在这里插入图片描述

这里要注意一点:调试的时候只会生成启动项目,如本文中的例子,Project1是启动项目,虽然Project1会使用Project2的生成DLL,但是我们进行本地Windows调试器调试的时候Project2是默认不生成的。虽然解决方案的“生成解决方案”会生成其他非启动项目Project2,但是这是不可行的。因为生成解决方案的生成顺序是和项目添加顺序相关,即不能完全保证Project1在Project2生成之后开始生成。为什么要保证这个顺序?因为Project1需要在链接期间使用Project2的.lib文件。(总结:调试只能生成启动项目,而生成解决方案并不能保证生成项目的顺序)

如何让VS能够保证这种生成顺序关系呢?就是添加项目依赖项,也在解决方案属性页里面:

在这里插入图片描述

应该注意两点:Project依赖于Project2,表明Project2会先于Project1生成,这样Project1使用的Project2的lib文件就是最新的,否则会出现找不到lib文件的错误;千万不能出现项目相互依赖的情况。

总之,多项目开发一定要注意启动项目的设置和项目依赖关系的设置

Project2.dll的导出和导入

在Project2中添加文件Cryptint.cpp,并实现一个对整数的加密函数CryptInt

#include "Project2/cryptint.h" //去掉试试
int CryptInt(int a)
{return (a-1)*2%100;
}

因此还需要添加一个头文件CryptInt.h,声明函数:

#pragma once//函数描述:对一个int变量进行加密后,将加密后的数据返回
//传参a: 需要加密的int变量
//返回值: 加密后的int数值
int CryptInt(int a);

但是这样只能在当前项目Project2中被引用,要想跨项目调用,必须将函数接口导出到dll文件的导出列表中,因此首先在Project2的 属性页》C/C++》预处理器》预处理器定义中添加本项目的项目标识符PROJECT2,然后修改CryptInt.h

#pragma once
// 导出接口的宏定义,根据预处理器定义不同,做到了同一份header不同的声明
#ifdef PROJECT2
#define CRYPT_API __declspec(dllexport)  // 如果是project2引用,则导出dll
#else
#define CRYPT_API __declspec(dllimport)  // 如果是其他文件引用,则导入dll
#endif // PROJECT2CRYPT_API int CryptInt(int a);

在这里插入图片描述

此时生成解决方案,在生成目录下会出现一个Project2.dll文件。接下来就需要在Project1中设置头文件路径(引用目录)和lib路径(附加库目录和附加依赖项)了,此处的步骤和配置opencv相似,然后在Project1中可以直接#include "Project2/cryptint.h",然后使用CryptInt函数了。

头文件与重复定义符号

有时候我们会遇到头文件相互包含的问题,例如a.cpp中导入了b1.h和b2.h,但是b1.h和b2.h同时导入了c.h,此时一个cpp文件包含了多个相同的头文件,就会报编译错误。为了避免头文件重复包含,需要在头文件开头加上#pragma once

但是,上述方法仅能检测一个cpp文件的重复定义,对于多个文件并不管用,假设同一个项目下的a.cpp和b.cpp分别引用了b1.h,而且b1.h中同时定义了int变量m,此时就会报错:重复定义了变量m,这是初学者经常容易犯的错误,即在头文件中定义变量和函数,此时的错误属于链接错误

对于头文件造成的同一个项目下不同cpp文件重复定义变量和函数的解决方法——头文件中只能写入声明,而不是定义,需要将头文件写成以下形式:

#pragma once
extern int testint;
extern int testfunc(); //对于函数,不强制加extern

VS2017 Debug

VS调试分为主动调试被动调试——主动调试:即编译并运行,就是“本地Windows调试器”;被动调试:这个需求比较灵活,一般是程序已经发布了release版本,直接双击exe运行而不依赖于VS了,而exe运行过程中可能会报错,可能状态异常,这时候我们需要通过VS去链接到这个exe进程进行调试。

VS的调试页面如下所示:

在这里插入图片描述

其提供了切换线程、堆栈、输入地址查看连续内存对应的数据、诊断工具查看CPU占用率和每行代码的内存创建情况、调用堆栈查看函数崩溃时所在的行号、监视器查看变量的值等功能,这些都可以在调试菜单》窗口中打开。

内存溢出

内存溢出:也就是内存访问越界,一般出现于数组和指针的使用中。这是一个比较致命的bug。一般情况下,程序都会立即崩溃,提示“0x???内存读取访问权限冲突”,也可能不会崩溃,但是你的程序总是会有时候运行异常。

这时候我们可以使用VS的条件断点找到该变量被修改的时刻, 有两种方法:

在这里插入图片描述

或者 新建数据断点

在这里插入图片描述
在这里插入图片描述

第二种方法, 还可以设置条件表达式断点, 但是会严重拖慢程序的运行速度, 因此不建议使用.

在这里插入图片描述

内存泄漏

内存泄漏:相较于内存溢出,它的危害要小一些。泄漏就是申请的内存没有合理回收,导致出现不可使用的内存片段,大量的泄漏最终还是会导致程序无法申请到新的内存而崩溃。(分区的概念,可以参考csapp)

例如下面的程序,new了新的数组后并没有及时delete,在test结束运行后,堆区里的数据仍然没有被释放,这块区域也就处于完全不可用的状态,内存就会越用越少:

#include <stdio.h>double test(){double *t = new double[2];return t[1];
}int main(){double k = test();return (int)k;
}

我们可以通过内存占用率》堆分析 快速定位堆上没有及时释放的内存:

  1. 在main函数的开始,截取当前的堆快照

    在这里插入图片描述

  2. 在main函数的最后,再截取一次堆快照,此时如果堆的大小增加了,则说明发生了内存泄漏
    在这里插入图片描述

  3. 点击右下角的堆快照,可以查看没有被释放的对象类型,以及new该对象时的代码行号,点击行号,VS就会自动定位到定义该对象的那一行:
    在这里插入图片描述
    在这里插入图片描述

远程调试

这里原作者首先介绍了Windows蓝屏时的处理机制, 并以此为例子, 说明了如何基于Windows标准库上报和分析崩溃信息(dump文件)。

整理

原作者并没有将该系列的文章整理成专栏,所以翻阅有些麻烦,为了方便查找,整理如下:

(一) VS项目创建

(二) VS项目介绍

(三) VS常用的项目属性介绍

(四) VS项目文件夹路径和生成步骤

(五) 项目开发的文件夹管理

(六) 头文件的路径问题和属性管理器

(七) DLL动态链接

(八) DLL动态链接实战 opencv

(九) DLL动态链接实战 多项目开发

(十) 头文件与重复定义符号

(十一) VS调试内存泄漏

(十二) VS调试内存溢出

.net/luoyu510183/article/details/83962476)

(九) DLL动态链接实战 多项目开发

(十) 头文件与重复定义符号

(十一) VS调试内存泄漏

(十二) VS调试内存溢出

(十三) 远程调试,分析崩溃信息


http://chatgpt.dhexx.cn/article/Xe8omZs6.shtml

相关文章

【visual studio 2017】基本使用过程,新手教学

文章目录 1 软件安装2 解决方案3 编译&#xff08;生成&#xff09;4 执行&#xff08;调试&#xff09;5 视图6 工具7 查找与替换8 debug release9 dll动态文件库调用10 软件使用常用技巧 1 软件安装 官网链接&#xff1a;https://visualstudio.microsoft.com/zh-hans/downlo…

Linux挂载磁盘命令

需求&#xff1a; 只有一个硬盘&#xff0c;创建多个挂载点 参考&#xff1a;linux如何实现挂载—linux_是小明同学啊的博客-CSDN博客_linux挂载 1 查看当前挂载情况 执行 df -h&#xff0c; 查看当前 / 根目录下挂载的分区名&#xff0c;在下图中为倒数第三行&#xff0c; …

Linux “挂载” 的概念

0、前言 截至到写这个稿子&#xff0c;始终对挂载的概念有点模糊&#xff0c;到底是硬盘挂载到目录&#xff1f;还是目录挂载到硬盘呢&#xff1f;今天终于从《鸟哥的Linux私房菜》中推断出了答案&#xff0c;而且也恍然大悟地理解了之前书中一句晦涩难懂的话。 1、挂载的概念…

linux下挂载新的磁盘

1、前提条件 虚拟机上已经新增了新的磁盘。 物理机上已经接好了新的硬盘。 2、挂载步骤 查看系统磁盘情况。使用以下命令&#xff1a;&#xff08;如果没出现新增磁盘&#xff0c;重启系统&#xff09; fdisk -l可以看到新增的磁盘/dev/sdb下还没有进行分区。 对新增的磁…

Linux挂载光驱

文章目录 一、什么是挂载二、如何挂载三、卸载光驱 提示&#xff1a;以下是本篇文章正文内容&#xff0c;仅供参考 一、什么是挂载 挂载&#xff1a;将光驱与某个目录关联起来&#xff0c;即为挂载。挂载的目录必须事先存在。 二、如何挂载 挂载使用mount命令。 1.首先将光…

Linux挂载新磁盘详细教程

Linux挂载新磁盘详细教程 一、查看新磁盘名称 lsblk 二、开始分区 新建分区 fdisk /dev/sda输入m&#xff0c;获取帮助 输入n新建一个分区&#xff0c;输入p建立分区&#xff0c;其余默认就好 然后输入w保存 再次输入 lsblk 查看&#xff0c;下图为新建好的分区&#xff…

什么是挂载,Linux挂载如何实现详解

挂载 指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录&#xff08;最好是空目录&#xff09;&#xff0c;访问此目录就等同于访问设备文件。 Linux 系统中“一切皆文件”&#xff0c;所有文件都放置在以根目录为树根的树形目录结构中。在 inux 看来&#xff0c…

Linux挂载磁盘分区

Linux系统一般都会有未挂载的磁盘&#xff0c;如果我们想使用这些为挂载的磁盘就需要挂载到指定目录才能使用。 一、有多个磁盘&#xff0c;将未分区的磁盘挂载 1、进入root用户 su – 2、查看已挂载磁盘的使用情况&#xff1a; df –h 可以看到系统已经挂载了sda磁盘&…

Linux挂载(永久)硬盘

命令 fdisk-l&#xff0c;查看未挂载硬盘 可以看到 /dev/vdb 没有挂载 使用fdisk 创建分区&#xff0c;fdisk /dev/vdb n表示new&#xff0c; p表示主分区&#xff0c; 1是分区号&#xff0c; 指定开始扇区&#xff0c;回车使用默认&#xff0c;即扇区开始位置&#xff0c;…

linux挂载新磁盘

当一个新盘挂载的 linux 上&#xff0c;可以通过 fdisk -l 指令&#xff0c;查看挂载的磁盘信息&#xff0c;此时虽然已经挂载到主机上&#xff0c;但是主机还不能正常使用。 要想使用新磁盘&#xff0c;需要经过如下几步&#xff1a; 磁盘分区磁盘格式化挂载分区到某个目录 …

Linux:详细介绍如何挂载?及其命令

可以知道Linux中系统挂载目录默认是在mnt 或者 media 目录下&#xff1a;如下 在刚开始装上Linux操作系统时的镜像iOS 是包含了许多的安装包在**/dev/cdrom**。但是这些安装包与Linux系统还没有产生关系,cdrom对应的一个链接是sr0&#xff0c;所以也是 /dev/sr0 安装包在 /de…

Linux的目录挂载详解

挂载的基本概念 前面讲过&#xff0c;Linux 系统中“一切皆文件”&#xff0c;所有文件都放置在以根目录为树根的树形目录结构中。在 Linux 看来&#xff0c;任何硬件设备也都是文件&#xff0c;它们各有自己的一套文件系统&#xff08;文件目录结构&#xff09;。 因此产生的…

Linux系统挂载

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;目标检测系列——开山之作RCNN原理详解    目标检测系列——Fast R-CNN原理详解   目标检测系列——Faster R-CNN原理详解 &#x1f34a;近期目标&a…

Linux——常用命令(挂载)

1、mount&#xff1a;挂载设备或查看已挂载设备  后不加选项或加-l(小写L)选项&#xff1a;查询系统中已经挂载的设备  示例&#xff1a;查看已挂载设备  mount命令的选项&#xff1a;  Tip&#xff1a;   1️⃣mount -a会检查/etc/fstab配置文件&#xff0c;但并不能…

【Linux挂载磁盘】Linux系统挂载磁盘详细操作步骤

近期公司服务运行环境,从Windows服务器切换到了Linux服务器,于是开始了一波操作,整了两天终于整完了,记录一下腾讯云挂载数据盘的过程,因为云磁盘的大小只有600GB,然后就没有进行分区,直接整个挂载到/data的目录下; 先上版本: Linux版本:centos7 [rootVM-16-4-centos src]# ca…

什么是挂载?Linux挂载

首先先说一下在Linux中一切皆文件&#xff08;硬件设备也是文件&#xff09;&#xff0c;所有文件都是存放在以根目录为树形目录结构中&#xff1b;下面来说说一下什么是挂载 挂载&#xff1a;指的就是将设备文件中的顶级目录连接到 Linux 根目录下的某一目录&#xff08;最好是…

Linux常用命令——挂载命令(一)

挂载就是把设备文件名和已经建立的空目录链接起来的过程&#xff0c;就叫做挂载。 1、mount命令基本格式 linux所有存储设备都必须挂载才能使用&#xff0c;包括硬盘。 命令名称&#xff1a;mount命令所在路径&#xff1a;/bin/mount执行权限&#xff1a;所有用户 命令的具…

Linux三种挂载方式

挂载 一、手动挂载 #mount 设备名 挂载点例&#xff1a;将镜像光盘挂载到/mnt #mount /dev/sr0 /mnt二、开机自动挂载(永久挂载) 在/etc/fstab添加挂载信息 可以使用命令 先获取UUID 通过blkid查看UUID #blkid##可使用设备名&#xff0c;或UUID #vim /etc/fstab三、自动挂…

Linux挂载

1、挂载的定义 挂载是一个非常重要的功能&#xff0c;它将一个设备&#xff08;通常是存储设备&#xff0c;可以挂载光盘、硬盘、磁带、光盘镜像文件等&#xff09;挂接到一个已存在的目录上&#xff08;这个目录可以不为空&#xff0c;但挂载后这个目录下以前的内容将不可用。…

【Linux】磁盘分区和挂载

目录 Linux磁盘分区和挂载 linux分区 查看所有设备挂载情况 挂载案例 步骤1&#xff1a;新建一块硬盘 操作步骤2&#xff1a; 虚拟机硬盘分区 步骤3&#xff1a;虚拟机硬盘分区格式化 步骤4&#xff1a;将磁盘挂载到根目录下newdisk目录下 mount挂载 umount取消挂载 步骤…