当前位置: 首页 > news >正文

第10章 无持久存储的文件系统 (1)

目录

前言

10.1 proc文件系统

10.1.1 /proc 内容


本专栏文章将有70篇左右,欢迎+关注,查看后续文章。

前言

即存在于内存中的文件系统。如:

        proc:

        sysfs:

                即/sys目录。

                内容不一定是ASCII文本,可能是二进制。

                收集内核对象kobject的拓扑信息。

        debugfs:

                作用:快速向应用层导出,或从应用层导入值

                原理:使用了 libfs+顺序文件。

10.1 proc文件系统

procfs,即 process data filesystem。

proc 文件系统作用:

        1. cat 文件时,动态生成相关信息。

        2. echo " " > 文件,修改系统配置。

10.1.1 /proc 内容

proc 信息分为几类:

        1. 内存管理

        2. 进程信息

        3. 文件系统

        4. 设备驱动

        5. 系统总线

        6. 电源管理

        7. 系统控制参数

1. 特定于进程的数据

cat /proc/3883/         数字为进程 PID

        cmdline:开启该进程的命令,如 ./a.out 1 2

        environ:该进程设置的环境变量。

        maps:进程本身,及其使用的库的内存映射(可用于定位进程crash)

        status

        fd: 进程打开的文件描述符,都是链接文件。

                如:

                        /proc/2820/fd/1 -> /dev/null

                        /proc/2820/fd/4 -> socket:[10030]

        cwd:进程当前的工作目录。

        exe:链接指向进程的二进制程序。

                如:

                        /proc/2820/exe -> /bin/cbsd

举例:

cat   /proc/906/status

        Name:      systemd         对应可执行文件名字。

        Umask:     0022             该进程创建文件的默认权限掩码。

        State:       S (sleeping)

        Tgid:         906                线程组ID。

        Ngid:        0                     下一个可用的线程组ID。

        Pid:          906                 进程ID。

        PPid:         1                    父进程ID。

        TracerPid: 0                    跟踪该进程的调试器进程ID。

        Uid:         0 0 0 0

                实际用户ID、有效用户ID、保存的设置用户ID、文件系统用户ID。

        Gid:         0 0 0 0

                进程的实际组ID、有效组ID、保存的设置组ID、文件系统组ID。

        FDSize:     1024                进程的文件描述符限制大小。

        Groups:

        NStgid:          906         NS=namespace

        NSpid:          906

        NSpgid:         906

        NSsid:           906

        VmPeak:       1311540 kB

                进程使用的虚拟内存峰值。

        VmSize:         1071592 kB

                进程使用的虚拟内存当前值。

                不等于实际使用物理内存(如部分数据可存储在交换区)。

        VmLck:         0 kB

                锁定的内存区域大小。

                即不被swap到磁盘,也无法回收。

        VmHWM:         244276 kB         进程使用的物理内存峰值。

        VmRSS:         239916 kB          进程当前使用物理内存值。

        RssAnon:         36428 kB          进程的匿名内存的大小(如堆、栈、共享内存)

        RssFile:          10140 kB           进程文件缓存页大小。

        RssShmem:     0 kB                  进程使用的共享内存的总大小。

        VmData:         628048 kB         数据段大小。

        VmStk:          136 kB                 栈大小。

        VmExe:         32 kB                   代码段大小。

        VmLib:          57908 kB              库大小。

        VmPTE:        2388 kB               页表的大小。

        VmSwap:       0 kB                     使用swap的大小。

        Threads:         1

        SigQ:           0/13035                         当前未处理信号数量 / 进程可接收信号最大数量。

        SigPnd:       0000000000000000         等待处理的信号位掩码。

        ShdPnd:      0000000000000000         共享的挂起信号掩码。

        SigBlk:         0000000000000000         进程阻塞信号掩码。

        SigIgn:         0000000000001000         进程忽略的信号掩码。

        SigCgt:         0000000000002000         进程可接收并可处理的信号。

        CapInh:         00000000a80425fb         从父进程继承的能力。

        CapPrm:        00000000a80425fb         进程当前的能力集合。

        CapEff:          00000000a80425fb         当前实际拥有的能力集合

        CapBnd:         00000000a80425fb         进程不能超出的能力集合。

        CapAmb:                      0000000000000000         可接受的能力集合。

        NoNewPrivs:                0

                是否设置Privileges位,即不可增加特权。若设置,execve程序不能有更高权限。

        Seccomp:                     0                         安全计算模式,限定进程可使用的系统调用

        Cpus_allowed:              f                          允许允许的CPU掩码。

        Cpus_allowed_list:        0-3

        Mems_allowed:         00000000,00000001         允许使用的内存节点的掩码。

        Mems_allowed_list:                         0

        voluntary_ctxt_switches:               397

                主动放弃CPU的次数,如进程阻塞I/O。

        nonvoluntary_ctxt_switches:         253

                被迫放弃CPU的次数,如时间片用完。

mlock系统调用:

        作用:将进程指定的虚拟内存区域锁定在物理内存中,防止被交换出去。

RSS:常驻集大小(Resident Set Size)

        当前驻留在物理内存中的大小。不包括被换出到交换空间(Swap)的部分。

当一个信号被设置为阻塞后,当进程收到该信号时不会立即处理,而是挂起信号,直到解除信号阻塞状态后才能处理。

如何阻塞SIGINT信号?

        sigaddset(&block_set, SIGINT);

        sigprocmask(SIG_BLOCK, &block_set, NULL);

信号在内核中状态:

        1. 递达:Delivery。收到信号,并执行信号处理函数。

        2. 未决 / 挂起:Pending。进程正处理一个信号时,收到的其余信号被挂起。

        3. 阻塞:Block。进程解除信号阻塞,立即执行信号处理函数。即延时接收。

运用场景:

        挂起信号:优先处理某些紧急信号,推迟处理其他信号。

        阻塞信号:临时忽略某信号。例如在某些关键性操作期间,可防止信号干扰进程。

进程常见能力包括:

        CAP_CHOWN:

                更改文件的所有者的的能力。 即可执行chown

        CAP_DAC_READ_SEARCH:

                读取任意文件和目录的能力。

        CAP_NET_RAW:

                使用原始网络套接字的能力。

                !ns_capable(net->user_ns, CAP_NET_RAW)

        CAP_SYS_ADMIN: 管理系统的能力

        CAP_SYS_RESOURCE:

                允许进程配置系统资源。如nice setrlimit mlock

        CAP_SYS_PTRACE:

                跟踪其他进程的能力。

        CAP_IPC_LOCK:

                锁定内存的能力。

内核如何判断进程的能力:

        与current->cred->cap_effective掩码计算。

相关命令:

        sudo    setcap    cap_net_raw   +   ep   /usr/bin/ping

        sudo    getcap

2. 系统信息

iomem:即IO内存。

IO内存的使用方法:

        1. request_mem_region(start, size, "name"); 请求一块物理地址内存区域。

        2. ioremap; 将物理地址映射到虚拟地址空间。

/proc/iomem

        IO内存信息,包括系统物理地址布局。

/proc/ioports

        IO端口信息。

/proc/buddyinfo

        不同大小阶的页大小,都有多少可用。

/proc/slabinfo

        slab分配器信息。

        内容举例:

                # name : tunables : slabdata

                kmalloc-16 0 0 16 256 1 : tunables 0 0 0 : slabdata 0 0 0

                kmalloc-192 29 30 192 30 1 : tunables 0 0 0 : slabdata 1 1 0

                ext4_inode_cache 35 35 1000 7 2 : tunables 0 0 0 : slabdata 5 5 0

                active_objs: 该slab缓存当前活动对象数量。

                num_objs: 可用总对象数。

                objsize: 单个对象大小。

                objperslab: 每个slab缓存中包含对象数。

                pagesperslab:每个slab缓存中占用的页数。

/proc/meminfo

        MemTotal:         16218688 kB         实际管理的内存 = 物理内存 - 预留内存。

        MemFree:         2576640 kB           空闲内存。

        MemAvailable: 8374184 kB

                可用内存。已使用,但回收后仍可用,所以大于MemFree。

        Buffers:         50828 kB         块设备占用页缓存大小,如超级块所用的缓存页。

        Cached:         8665304 kB     普通文件页缓存大小。

        SwapCached: 2096 kB         交换分区缓存的大小,即用于匿名页换入换出的缓存。

        Active:             7965496 kB

                active(file) + active(anon) 内存页总和(最近使用的内存页)。

        Inactive:         4651356 kB

                Inactive(file)和Inactive(anon)内存页总和(最近未使用的页)。

        Active(anon):         3603464 kB         最近使用的匿名页。

        Inactive(anon):      1225800 kB         最近未使用的匿名页。

        Active(file):             4362032 kB         最近使用的文件页。

        Inactive(file):           3425556 kB        最近未使用的文件页。

        Unevictable:         25840 kB         不可回收页,如内核进程或驱动使用。

        Mlocked:               25840 kB         页被进程锁定,不能被移动交换回收。

        SwapTotal:            8388604 kB     交换分区总大小。

        SwapFree:            8384060 kB     未使用的交换分区大小。

        Dirty: 8 kB

        Writeback:             0 kB                 正回写页。

        AnonPages:         4198028 kB      匿名页的大小。

        Mapped:               1579700 kB      驱动映射和共享内存。

        Shmem:               130352 kB         共享内存。

        Slab:                     360424 kB        slab缓存大小。

        SReclaimable:       312900 kB        slab中可回收内存大小。

        SUnreclaim:         47524 kB           slab中不可回收内存。

        KernelStack:         4136 kB            当前内核线程的栈大小。

        PageTables:         6812 kB             页表占用内存大小。

        NFS_Unstable:    0 kB                   NFS客户端使用。

        VmallocTotal:        34359738367 kB         vmalloc虚拟地址空间大小。

        VmallocUsed:         329676 kB

        VmallocChunk:       34359396996 kB         vmalloc区域最大连续空闲块的大小。

        HardwareCorrupted:         0 kB

        ShmemPmdMapped:        0 kB

        CmaTotal:                 524288 kB         连续内存区域的总大小。

        CmaFree:                 357464 kB         连续内存区域中可用大小。

        HugePages_Total:         0                   大页。

        Hugepagesize:       2048 kB

        DirectMap4k:         144344 kB

        DirectMap2M:         8146944 kB

        DirectMap1G:         8388608 kB         管理的大内存,1G页对应一个页表,可减少页表。

        

kswapd线程周期性把Active list中符合条件页移到Inactive list中。

/proc/vmstat 内存页使用统计

        nr_free_pages               30248

        nr_inactive_anon           0

        nr_active_anon              2684

        nr_inactive_file               2534

        nr_active_file                  1462

        nr_unevictable                 0

        nr_mlock                         0

        nr_anon_pages               2689

CMA(Contiguous Memory Allocator)

        内核启动时预留CMA的内存大小和位置(由内核启动参数或设备树配置)。

        使用方法:

                驱动申请使用CMA内存时,内核从预留的CMA内存池中分配一块连续物理内存,并返回虚拟地址,供驱动设备DMA操作。

        使用场景:

                USB,网络包处理,图形子系统等。

        内核参数:cma = 256M

/proc/kallsyms

        内核符号表,及其虚拟地址(内核虚拟地址空间)。

        原理:

                编译时,将所有函数和全局变量的地址组成一个数据块,并链接到vmlinux。

                cat /proc/kallsyms 时读取该数据块。

        编译选项:

                CONFIG_KALLSYMS

System.map文件:

        80004000 A swapper_pg_dir 内核虚拟地址空间中的地址。

System.map如何生成?

        linux-3.x/ scripts/ mksysmap,该脚本中执行 nm vmlinux > System.map 生成。

System.map不包含驱动模块中符号。

/proc/kallsyms包含模块等所有符号(即使没有EXPORT_SYMBOL)。

/proc/interrupts

        中断统计信息,包括中断号,中断次数,所属中断控制器。

3. 网络信息

/proc/net/udp

/proc/net/tcp

        包含socket fd、本地地址和端口号、远程地址和端口号、状态,发送队列等信息。

/proc/net/arp         ARP表信息。

        IP address HW type Flags HW address Mask Device

        192.168.150.123 0x1 0x2 6c:b3:11:3f:47:fb * br0

        Flags 0x2:表示该ARP已验证,可使用。

/proc/net/dev 所有网卡统计信息。

        fifo:因队列满的丢包数。

        frame:因帧错误的丢包数。

        carrier:因载波问题的丢包数。

4. 系统控制参数

/proc/sys/ 可写,从而控制系统。

        debug/ dev/ fs/ /kernel/ net/ vm/

cat /proc/sys/vm/swappiness

        查看页交换积极程度。

相关文章:

第10章 无持久存储的文件系统 (1)

目录 前言 10.1 proc文件系统 10.1.1 /proc 内容 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 前言 即存在于内存中的文件系统。如: proc: sysfs: 即/sys目录。 内容不一定是ASCII文本,可能是二进…...

如何把命令行创建python虚拟环境与pycharm项目管理更好地结合起来

1. 问题的提出 我在linux或windows下的某个目录如“X”下使用命令行的方式创建了一个python虚拟环境(参考文章),对应的目录为myvenv, 现在我想使用pycharm创建python项目myproject,并且利用虚拟环境myvenv,怎么办&…...

keepalived+lvs高可用负载均衡集群配置方案

配置方案 一、配置主备节点1. 在主备节点上安装软件2. 编写配置文件3. 启动keepalived服务 二、配置web服务器1. 安装并启动http服务2. 编写主页面3.配置虚拟地址4. 配置ARP 三、测试 服务器IP: 主负载均衡服务器 master 192.168.152.71备负载均衡服务器 backup 192…...

Azure OpenAI Swagger Validation Failure with APIM

题意:Azure OpenAI Swagger 验证失败与 APIM 问题背景: Im converting the Swagger for Azure OpenAI API Version 2023-07-01-preview from json to yaml 我正在将 Azure OpenAI API 版本 2023-07-01-preview 的 Swagger 从 JSON 转换为 YAML。 My S…...

haproxy高级功能配置

介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用…...

XXL-JOB分布式定时任务框架快速入门

文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置…...

直流电机及其驱动

直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转。 直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作 TB6612是一款双…...

Java-判断一个字符串是否为有效的JSON字符串

在 Java 中判断一个字符串是否为有效的 JSON 字符串,可以使用不同的库来进行验证。常见的库 包括 org.json、com.google.gson 和 com.alibaba.fastjson 等。这里我将展示如何使用 com.alibaba.fastjson 库来实现一个简单的工具类,用于判断给定的字符串…...

FPGA开发板的基本知识及应用

FPGA开发板是一种专门设计用于开发和测试现场可编程门阵列(Field-Programmable Gate Array, FPGA)的硬件平台。FPGA是一种高度可配置的集成电路,能够在制造后被编程以执行各种数字逻辑功能。FPGA开发板通常包含一个FPGA芯片以及一系列支持电路和接口,以便…...

JVM知识总结(性能调优)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 性能调优 何时进行JVM调优? 遇到以下情况&#xff0c…...

基于Ascend C的Matmul算子性能优化最佳实践

矩阵乘法是深度学习计算中的基础操作,对于提升模型训练和推理速度至关重要。昇腾AI处理器是一款专门面向AI领域的AI加速器,其AI Core采用达芬奇架构,以高性能Cube计算引擎为基础,针对矩阵运算进行加速,可大幅提高单位面…...

SQL注入之EVAL长度限制突破技巧

要求: PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell? widows小皮环境搭建: 使用phpstudy搭建一个网站。 随后在该eval文件夹下创建一个webshell.php文件,并在其输入代码环境 解题思路: 通…...

稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈

时间序列预测是许多领域的重要问题,包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中,提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻,但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…...

详谈系统中的环境变量

目录 前言1. 指令背后的本质2. 环境变量背后的本质3. 环境变量到底是什么4. 命令行参数5. 本地变量 与 内置命令6. 环境变量的相关命令 前言 相信在 it 行业学习或者工作的小伙伴们,基本都配置过环境变量(windows环境下),如果你也…...

RAG与LLM原理及实践(11)--- Milvus hybrid search 源码分析及思想

目录 背景 hybrid search 源码分析 WeightedRanker 源码 hybrid search 核心 参数详解 基本入参 扩展入参 aysnc方式代码调用案例 说明 源码逻辑 prepare 调用过程 stub 调用结果 stub 调用过程 blocking 与 async 调用方式 深入内部core weightedRanker 的ch…...

JavaScript模拟空调效果

JavaScript模拟空调效果https://www.bootstrapmb.com/item/15074 在JavaScript中模拟空调效果主要依赖于前端界面的交互和状态变化,因为实际的温度调节、风扇速度调整等硬件操作无法直接通过JavaScript在浏览器中实现。不过,我们可以通过JavaScript来模…...

14.2 Pandas数据处理

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

python学习7---多进程

一、介绍 多进程是指在同一程序中创建多个独立的进程来执行任务。每个进程都有自己独立的内存空间,相互之间不干扰。 因为GIL锁的存在,对于CPU密集型任务(例如计算密集型操作),使用多进程可以提高程序的效率。 优点&am…...

基于Spring + Vue的旅游景区项目+源代码+文档说明

文章目录 源代码下载地址项目介绍项目功能界面预览 项目备注源代码下载地址 源代码下载地址 点击这里下载源码 项目介绍 基于Spring Vue的旅游景区项目 项目功能 民宿管理员:订单数量统计,订单交易额统计,客房统计饼图,酒店…...

Java后端面试题

Redis缓存穿透、雪崩、击穿,布隆过滤器 一致性hash 一致性hash sharding-jdbc实现一致性hash #一致性hash, 应用在mysql数据库的分库分表上, 现在已经完成了分库分表, 现在的问题出现了, 需要继续新增数据库节点, 请…...

【Git】远程仓库新建分支后,拉到本地开发

1. 在远程仓库上创建分支 2. git fetch origin:在本地同步远程仓库的分支(获取远程仓库所有分支的所有修改) 3. git remote -a:查看所有分支(远程+本地) 4. git checkout -b 本地名 远程仓库…...

React H5设置企业级v6版本路由的配置

路由配置是项目开发的必要一环,尤其是目前流行SPA,下面看看如何使用v6版本路由进行合理的H5路由配置 一、基本页面结构(目录根据开发要求建,下面仅用于展示配置路由) 二、具体文件实现 1. index.tsx import React f…...

【微信小程序】全局配置

1. 全局配置文件及常用的配置项 2.window (1).小程序窗口的组成部分 (2). 了解 window 节点常用的配置项 (3). 设置导航栏的标题 (4). 设置导航栏的背景色 (5). 设置导航栏的标题颜色 (6). 全局开启下拉刷新功能 (7). 设置下拉刷新时窗口的背景色 (8).设置下拉刷新时 loading …...

25届秋招网络安全面试资料库

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…...

Adobe Dimension DN v4.0.2 解锁版下载安装教程 (专业的三维3D建模工具)

前言 Adobe Dimension(简称DN)是一款3D设计软件,三维合成和渲染工具,2D平面的二维转为3D立体的三维合成工具,用于3Dmax\C4D\MAYA等三维软件生成的效果图,在3D场景中排列对象、图形和光照。3D应用程序使用的…...

Python中*args 和 **kwargs作参数时有什么区别

*args 和 **kwargs 是 Python 函数定义中用于处理可变数量的参数的语法,初学者对于二者总是傻傻区分不了,今天我们就来详细解读一下这两个在参数传递时有什么不同。 首先要明白单个星号可以解包元组或者列表,两个星号可以解包字典。如&#…...

[CSS3]2D与3D变换技术详解

文章目录 2D变换(2D Transform)3D变换(3D Transform)结语 CSS3中的2D变换与3D变换是指通过transform属性对HTML元素进行几何操作,使其在二维或三维空间中进行移动、旋转、缩放和倾斜等变换。这些变换为前端开发者提供了…...

大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光

大恒相机通过Line2或Line3直接给出3.3V触发,形成分时曝光 一、分时曝光需求二、3.3V信号分时曝光设计 写在前面 上班了,没多少时间再去精度论文了,大多是项目上的事情。 一、分时曝光需求 一般的12V光源通过光源控制器与大恒相机Line1线连接…...

electronjs实现打开的网页密码自动保存

在 Electron 中实现自动保存网页密码的功能涉及到几个步骤,以下是一个基本的实现思路: 1. 监听登录事件 首先,你需要监听用户的登录事件。当用户在一个网页上登录后,通常会有一个 POST 请求发送到服务器验证凭据。你可以监听这个…...

观测云的自动化监控:CRD 资源与自动发现

在云原生技术快速发展的今天,Kubernetes已成为企业容器化应用的中心舞台。随着应用的规模化和动态化,传统的监控方法已经难以满足需求。自动化监控,以其高效性和准确性,成为云原生监控的新趋势。观测云平台通过与Kubernetes的深度…...

余姚哪里有做淘宝网站的/推广网站的方法

将CentOS系统光盘放入光驱,如果是VM虚拟机,选择加载ISO镜像在VM选项卡--设置--硬件-CD/DVD/--使用ISO映像文件,选择你ISO的路径1.手动挂载光驱先建立挂载目录,#mkdir /media/cdrom挂载光驱#mount /dev/cdrom /media/cdrom2.开机自…...

城乡建设与管理委员会网站/百度seo新站优化

控制图(Control Chart)又称管理图、休哈特图。是一种将显著性统计原理应用与控制生产过程的图形方法(GB/T 4091-2001《常规控制图》),是用来区分过程中的偶然波动和异常波动,并判断过程是否处于SPC统计过程状态的一种工具。SPC控制图应用步骤1. 选定SPC控…...

接给别人做网站的活/手机做网页的软件

前言 接着上一篇 根据 InstanceKlass 查找 vtable 的数据, 其中留下了一些 存在疑问的地方, 呵呵 本文主要就是探讨这几点疑问的地方 同样适用上面的方式, 可以很轻松的定位到 vtable 的最后一个元素 对应的类是 Test02LoopUpVTable 方法名称的 常量池索引是 74??, 参照最…...

国外优秀设计网站推荐/b2b平台

双碳计算中涉及到的单位换算 在双碳(碳中和与碳排放)计算当中,经常会对吸收或者排放的碳 C或二氧化碳 CO₂进行定量表达,比如常用植被NPP(Net Primary Productivity,净初级生产力)来表示植被吸…...

百容千域可以免费做网站吗/深圳网站设计公司哪家好

VMsvga2目前并不支持Yosemite,如果安装的话进入桌面除了顶部菜单,全部黑屏。通过顶部菜单打开的大部分应用都会立刻奔溃关闭。参考以下步骤可以解决问题: 1、下载VMsvga2的uninstall.sh并移动到共享目录 2、双击桌面的VM Shared Folders基本就…...

自己做传奇网站/宁波seo关键词优化制作

STS介绍Spring Tool Suite(sts)就是一个基于Eclipse的开发环境, 用于开发Spring应用程序。它提供了一个现成的使用环境来实现, 调试, 运行, 和部署你的Spring应用程序。包括为关键的的服务器和云计算,Git, Maven, Aspe…...