首页 文章 精选 留言 我的

精选列表

搜索[图数据库],共10000篇文章
优秀的个人博客,低调大师

手绘流程图,教你WSL2与Docker容器无缝互相迁移

摘要:本文主要介绍WSL2与Docker容器无缝迁移镜像。 本文分享自华为云社区《WSL2与Docker容器,无缝互相迁移》,作者: tsjsdbd 。 注:本文提到的WSL都是指WSL2 WSL与Docker WSL非常像windows版的Docker,可以直接启动“容器”(故意加引号,下面有解释),并且在容器世界里面,可以执行各种Linux操作。像下面这样,是不是和Docker很像? ps:上面提到的“容器”,实际是安全容器(即:虚机),WSL2内部架构如下: 虽WSL和Docker很像,但是它对WSL镜像有要求,就是得从 MS的应用商店下载: 这个就稍显不那么方便,毕竟你可能已经有很多现成的Docker容器了,这里又得重新安装一遍。 我是Windows上有WSL,我的Linux开发机上有Docker,那我怎么在WSL里面跑Docker呢? WSL运行Docker容器 常见的WSL里面运行Docker,是这样子的: 就是把WSL当做一台新的开发机,然后在WSL里面,安装Docker软件。 这样子,也能解决问题。就是稍微麻烦了一点点。那能不能WSL直接运行Docker镜像呢? 答案是可以的: 参考:https://docs.microsoft.com/en-us/windows/wsl/use-custom-distro 这种方法下,是类似这个样子的: 具体操作如下: 在Docker里面,将容器导出来 //查看正在运行的容器 docker ps //根据容器ID,导出镜像包 docker export $ContainerID > ./tsjsdbd.tar 然后再WSL里面,将Docker镜像导入: wsl --import <DistributionName> <InstallLocation> <FileName> 示例 比如,我这里用Docker运行了一个busybox容器: docker run -it busybox /bin/sh 然后查询容器ID: docker ps CONTAINER ID IMAGE c1e9e8f77336 busybox 导出: docker export c1e9e8f77336 > tsjsdbd_busybox.tar 然后我把这个 镜像文件,拷贝到我的windows电脑上。 并在wsl里面导入: wsl --import tsjsdbd_busybox ./busybox ./tsjsdbd_busybox.tar 导入后查看: wsl -l 这时,我启动这个 busybox 镜像。 wsl -d tsjsdbd_busybox OK,这时我已经在WSL容器里面了,这是一个busybox的Docker容器镜像。 Docker运行WSL镜像 从上面的操作可以看出来,WSL和Docker的镜像是相通的。所以WSL系统,也可以导出给Docker直接运行。类似这个样子: 具体操作如下: 先查看下当前跑了哪些wsl容器: wsl -l -v NAME STATE VERSION * Ubuntu-18.04 Stopped 2 tsjsdbd_busybox Running 2 导出指定的wsl镜像 wsl --export tsjsdbd_busybox ./mybox.tar 其中 “tsjsdbd_busybox” 就是你希望导给Docker运行的WSL容器(里面可能安装了一些你需要的软件)。导出的tar包,就可以看做是WSL镜像了(可以直接导入给Docker) 最后,在Docker里面,导入这个镜像: docker import - mybox < mybox.tar 可以查询此镜像 docker images |grep mybox 并启动 docker run -it mybox /bin/sh WSL镜像与Docker镜像 大体上,我给个示意: 所以WSL确实挺香的。 WSL启动GUI界面 整体方案是利用 X11 Server,原理参考: 《Docker运行带UI界面的应用,并将它的界面投射到你的Windows电脑》 https://bbs.huaweicloud.com/blogs/281862 X11 Server,一般网上推荐 VcXsrv,我自己用下来,感觉 MobaXterm 更傻瓜一些。所以我都用 MobaXterm 的。 附:安装WSL 1. 系统要求 Windows 10,版本 2004 以上。 比如我的是 20H2,是OK的。 点击:开始-设置-关于,查询自己的版本 2. 判断wsl2是否已有 打开 power shell,输入 wsl -l -o 如OK,则不用后续步骤了(说明你的windows版本已经比较高)。 不行,则手动执行后续步骤 3. 允许开发者模式 4. 启动WSL2功能 启用WSL2 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 启用虚拟机平台 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 启用Hyper-V dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart 设置WSL2为默认 wsl --set-default-version 2 5. 重启,安装wsl补丁 wsl_update_x64.msi 执行以上补丁包。 补丁包下载地址: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi 附:高阶版 GPU,GUI界面 Windows版本高的(win10 21H2),可以在WSL2里面跑CUDA https://docs.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl 再高一点(win11),可以原生支持带GUI界面的Linux程序。 https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-apps 点击关注,第一时间了解华为云新鲜技术~

优秀的个人博客,低调大师

5000字 | 24张图带你彻底理解Java中的21种锁

本篇主要内容如下: 帮你总结好的锁: 序号 锁名称 应用 1 乐观锁 CAS 2 悲观锁 synchronized、vector、hashtable 3 自旋锁 CAS 4 可重入锁 synchronized、Reentrantlock、Lock 5 读写锁 ReentrantReadWriteLock,CopyOnWriteArrayList、CopyOnWriteArraySet 6 公平锁 Reentrantlock(true) 7 非公平锁 synchronized、reentrantlock(false) 8 共享锁 ReentrantReadWriteLock中读锁 9 独占锁 synchronized、vector、hashtable、ReentrantReadWriteLock中写锁 10 重量级锁 synchronized 11 轻量级锁 锁优化技术 12 偏向锁 锁优化技术 13 分段锁 concurrentHashMap 14 互斥锁 synchronized 15 同步锁 synchronized 16 死锁 相互请求对方的资源 17 锁粗化 锁优化技术 18 锁消除 锁优化技术 1、乐观锁 乐观锁 乐观锁是一种乐观思想,假定当前环境是读多写少,遇到并发写的概率比较低,读数据时认为别的线程不会正在进行修改(所以没有上锁)。写数据时,判断当前 与期望值是否相同,如果相同则进行更新(更新期间加锁,保证是原子性的)。 Java中的乐观锁: CAS,比较并替换,比较当前值(主内存中的值),与预期值(当前线程中的值,主内存中值的一份拷贝)是否一样,一样则更新,否则继续进行CAS操作。 如上图所示,可以同时进行读操作,读的时候其他线程不能进行写操作。 2、悲观锁 悲观锁 悲观锁是一种悲观思想,即认为写多读少,遇到并发写的可能性高,每次去拿数据的时候都认为其他线程会修改,所以每次读写数据都会认为其他线程会修改,所以每次读写数据时都会上锁。其他线程想要读写这个数据时,会被这个线程block,直到这个线程释放锁然后其他线程获取到锁。 Java中的悲观锁: synchronized修饰的方法和方法块、ReentrantLock。 如上图所示,只能有一个线程进行读操作或者写操作,其他线程的读写操作均不能进行。 3、自旋锁 mark 自旋锁是一种技术: 为了让线程等待,我们只须让线程执行一个忙循环(自旋)。 现在绝大多数的个人电脑和服务器都是多路(核)处理器系统,如果物理机器有一个以上的处理器或者处理器核心,能让两个或以上的线程同时并行执行,就可以让后面请求锁的那个线程“稍等一会”,但不放弃处理器的执行时间,看看持有锁的线程是否很快就会释放锁。 自旋锁的优点: 避免了线程切换的开销。挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给Java虚拟机的并发性能带来了很大的压力。 自旋锁的缺点: 占用处理器的时间,如果占用的时间很长,会白白消耗处理器资源,而不会做任何有价值的工作,带来性能的浪费。因此自旋等待的时间必须有一定的限度,如果自旋超过了限定的次数仍然没有成功获得锁,就应当使用传统的方式去挂起线程。 自旋次数默认值:10次,可以使用参数-XX:PreBlockSpin来自行更改。 自适应自旋: 自适应意味着自旋的时间不再是固定的,而是由前一次在同一个锁上的自旋时间及锁的拥有者的状态来决定的。有了自适应自旋,随着程序运行时间的增长及性能监控信息的不断完善,虚拟机对程序锁的状态预测就会越来越精准。 Java中的自旋锁: CAS操作中的比较操作失败后的自旋等待。 4、可重入锁(递归锁) 可重入锁 可重入锁是一种技术: 任意线程在获取到锁之后能够再次获取该锁而不会被锁所阻塞。 可重入锁的原理: 通过组合自定义同步器来实现锁的获取与释放。 再次获取锁:识别获取锁的线程是否为当前占据锁的线程,如果是,则再次成功获取。获取锁后,进行计数自增, 释放锁:释放锁时,进行计数自减。 Java中的可重入锁: ReentrantLock、synchronized修饰的方法或代码段。 可重入锁的作用: 避免死锁。 面试题1: 可重入锁如果加了两把,但是只释放了一把会出现什么问题? 答:程序卡死,线程不能出来,也就是说我们申请了几把锁,就需要释放几把锁。 面试题2: 如果只加了一把锁,释放两次会出现什么问题? 答:会报错,java.lang.IllegalMonitorStateException。 5、读写锁 读写锁是一种技术: 通过ReentrantReadWriteLock类来实现。为了提高性能, Java 提供了读写锁,在读的地方使用读锁,在写的地方使用写锁,灵活控制,如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率。读写锁分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由 jvm 自己控制的。 读锁: 允许多个线程获取读锁,同时访问同一个资源。 读锁 写锁: 只允许一个线程获取写锁,不允许同时访问同一个资源。 写锁 如何使用: /** *创建一个读写锁 *它是一个读写融为一体的锁,在使用的时候,需要转换 */ privateReentrantReadWriteLockrwLock=newReentrantReadWriteLock(); 获取读锁和释放读锁 //获取读锁 rwLock.readLock().lock(); //释放读锁 rwLock.readLock().unlock(); 获取写锁和释放写锁 //创建一个写锁 rwLock.writeLock().lock(); //写锁释放 rwLock.writeLock().unlock(); Java中的读写锁:ReentrantReadWriteLock 6、公平锁 公平锁 公平锁是一种思想: 多个线程按照申请锁的顺序来获取锁。在并发环境中,每个线程会先查看此锁维护的等待队列,如果当前等待队列为空,则占有锁,如果等待队列不为空,则加入到等待队列的末尾,按照FIFO的原则从队列中拿到线程,然后占有锁。 7、非公平锁 非公平锁 非公平锁是一种思想: 线程尝试获取锁,如果获取不到,则再采用公平锁的方式。多个线程获取锁的顺序,不是按照先到先得的顺序,有可能后申请锁的线程比先申请的线程优先获取锁。 优点: 非公平锁的性能高于公平锁。 缺点: 有可能造成线程饥饿(某个线程很长一段时间获取不到锁) Java中的非公平锁:synchronized是非公平锁,ReentrantLock通过构造函数指定该锁是公平的还是非公平的,默认是非公平的。 8、共享锁 共享锁 共享锁是一种思想: 可以有多个线程获取读锁,以共享的方式持有锁。和乐观锁、读写锁同义。 Java中用到的共享锁: ReentrantReadWriteLock。 9、独占锁 独占锁 独占锁是一种思想: 只能有一个线程获取锁,以独占的方式持有锁。和悲观锁、互斥锁同义。 Java中用到的独占锁: synchronized,ReentrantLock 10、重量级锁 重量级锁 重量级锁是一种称谓: synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的,监视器锁本身依赖底层的操作系统的 Mutex Lock来实现。操作系统实现线程的切换需要从用户态切换到核心态,成本非常高。这种依赖于操作系统 Mutex Lock来实现的锁称为重量级锁。为了优化synchonized,引入了轻量级锁,偏向锁。 Java中的重量级锁: synchronized 11、轻量级锁 轻量级锁 轻量级锁是JDK6时加入的一种锁优化机制: 轻量级锁是在无竞争的情况下使用CAS操作去消除同步使用的互斥量。轻量级是相对于使用操作系统互斥量来实现的重量级锁而言的。轻量级锁在没有多线程竞争的前提下,减少传统的重量级锁使用操作系统互斥量产生的性能消耗。如果出现两条以上的线程争用同一个锁的情况,那轻量级锁将不会有效,必须膨胀为重量级锁。 优点: 如果没有竞争,通过CAS操作成功避免了使用互斥量的开销。 缺点: 如果存在竞争,除了互斥量本身的开销外,还额外产生了CAS操作的开销,因此在有竞争的情况下,轻量级锁比传统的重量级锁更慢。 12、偏向锁 偏向锁 偏向锁是JDK6时加入的一种锁优化机制: 在无竞争的情况下把整个同步都消除掉,连CAS操作都不去做了。偏是指偏心,它的意思是这个锁会偏向于第一个获得它的线程,如果在接下来的执行过程中,该锁一直没有被其他的线程获取,则持有偏向锁的线程将永远不需要再进行同步。持有偏向锁的线程以后每次进入这个锁相关的同步块时,虚拟机都可以不再进行任何同步操作(例如加锁、解锁及对Mark Word的更新操作等)。 优点: 把整个同步都消除掉,连CAS操作都不去做了,优于轻量级锁。 缺点: 如果程序中大多数的锁都总是被多个不同的线程访问,那偏向锁就是多余的。 13、分段锁 分段锁 分段锁是一种机制: 最好的例子来说明分段锁是ConcurrentHashMap。ConcurrentHashMap原理:它内部细分了若干个小的 HashMap,称之为段(Segment)。默认情况下一个 ConcurrentHashMap 被进一步细分为 16 个段,既就是锁的并发度。如果需要在 ConcurrentHashMap 添加一项key-value,并不是将整个 HashMap 加锁,而是首先根据 hashcode 得到该key-value应该存放在哪个段中,然后对该段加锁,并完成 put 操作。在多线程环境中,如果多个线程同时进行put操作,只要被加入的key-value不存放在同一个段中,则线程间可以做到真正的并行。 线程安全:ConcurrentHashMap 是一个 Segment 数组, Segment 通过继承ReentrantLock 来进行加锁,所以每次需要加锁的操作锁住的是一个 segment,这样只要保证每个 Segment 是线程安全的,也就实现了全局的线程安全 14、互斥锁 互斥锁 互斥锁与悲观锁、独占锁同义,表示某个资源只能被一个线程访问,其他线程不能访问。 读-读互斥 读-写互斥 写-读互斥 写-写互斥 Java中的同步锁: synchronized 15、同步锁 同步锁 同步锁与互斥锁同义,表示并发执行的多个线程,在同一时间内只允许一个线程访问共享数据。 Java中的同步锁: synchronized 16、死锁 死锁 死锁是一种现象:如线程A持有资源x,线程B持有资源y,线程A等待线程B释放资源y,线程B等待线程A释放资源x,两个线程都不释放自己持有的资源,则两个线程都获取不到对方的资源,就会造成死锁。 Java中的死锁不能自行打破,所以线程死锁后,线程不能进行响应。所以一定要注意程序的并发场景,避免造成死锁。 17、锁粗化 锁粗化 锁粗化是一种优化技术: 如果一系列的连续操作都对同一个对象反复加锁和解锁,甚至加锁操作都是出现在循环体体之中,就算真的没有线程竞争,频繁地进行互斥同步操作将会导致不必要的性能损耗,所以就采取了一种方案:把加锁的范围扩展(粗化)到整个操作序列的外部,这样加锁解锁的频率就会大大降低,从而减少了性能损耗。 18、锁消除 锁消除 锁消除是一种优化技术: 就是把锁干掉。当Java虚拟机运行时发现有些共享数据不会被线程竞争时就可以进行锁消除。 那如何判断共享数据不会被线程竞争? 利用逃逸分析技术:分析对象的作用域,如果对象在A方法中定义后,被作为参数传递到B方法中,则称为方法逃逸;如果被其他线程访问,则称为线程逃逸。 在堆上的某个数据不会逃逸出去被其他线程访问到,就可以把它当作栈上数据对待,认为它是线程私有的,同步加锁就不需要了。 19、synchronized synchronized synchronized是Java中的关键字:用来修饰方法、对象实例。属于独占锁、悲观锁、可重入锁、非公平锁。 1.作用于实例方法时,锁住的是对象的实例(this); 2.当作用于静态方法时,锁住的是 Class类,相当于类的一个全局锁, 会锁所有调用该方法的线程; 3.synchronized 作用于一个非 NULL的对象实例时,锁住的是所有以该对象为锁的代码块。它有多个队列,当多个线程一起访问某个对象监视器的时候,对象监视器会将这些线程存储在不同的容器中。 每个对象都有个 monitor 对象, 加锁就是在竞争 monitor 对象,代码块加锁是在代码块前后分别加上 monitorenter 和 monitorexit 指令来实现的,方法加锁是通过一个标记位来判断的。 20、Lock和synchronized的区别 自动挡和手动挡的区别 Lock: 是Java中的接口,可重入锁、悲观锁、独占锁、互斥锁、同步锁。 1.Lock需要手动获取锁和释放锁。就好比自动挡和手动挡的区别 2.Lock 是一个接口,而 synchronized 是 Java 中的关键字, synchronized 是内置的语言实现。 3.synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而 Lock 在发生异常时,如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象,因此使用 Lock 时需要在 finally 块中释放锁。 4.Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用 synchronized 时,等待的线程会一直等待下去,不能够响应中断。 5.通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。 6.Lock 可以通过实现读写锁提高多个线程进行读操作的效率。 synchronized的优势: 足够清晰简单,只需要基础的同步功能时,用synchronized。 Lock应该确保在finally块中释放锁。如果使用synchronized,JVM确保即使出现异常,锁也能被自动释放。 使用Lock时,Java虚拟机很难得知哪些锁对象是由特定线程锁持有的。 21、ReentrantLock 和synchronized的区别 Lock、ReentrantLock、shnchronzied ReentrantLock是Java中的类 : 继承了Lock类,可重入锁、悲观锁、独占锁、互斥锁、同步锁。 划重点 相同点: 1.主要解决共享变量如何安全访问的问题 2.都是可重入锁,也叫做递归锁,同一线程可以多次获得同一个锁, 3.保证了线程安全的两大特性:可见性、原子性。 不同点: 1.ReentrantLock 就像手动汽车,需要显示的调用lock和unlock方法, synchronized 隐式获得释放锁。 2.ReentrantLock 可响应中断, synchronized 是不可以响应中断的,ReentrantLock 为处理锁的不可用性提供了更高的灵活性 3.ReentrantLock 是 API 级别的, synchronized 是 JVM 级别的 4.ReentrantLock 可以实现公平锁、非公平锁,默认非公平锁,synchronized 是非公平锁,且不可更改。 5.ReentrantLock 通过 Condition 可以绑定多个条件 彩蛋: 讲了那么多锁,都跟阻塞相关,宝宝想听阻塞呀! 我是悟空,一只努力变强的码农!我要变身超级赛亚人啦! 你好,我是悟空哥,7年项目开发经验,全栈工程师,开发组长,超喜欢图解编程底层原理。正在编写两本PDF,分别是 1、Spring Cloud实战项目(佳必过),2、Java并发必知必会。我还手写了2个小程序,Java刷题小程序,PMP刷题小程序,点击我的公众号菜单打开!另外有111本架构师资料以及1000道Java面试题,都整理成了PDF,可以关注公众号 悟空聊架构 回复 悟空 领取优质资料。 转发->在看->点赞->收藏->评论!!!是对我最大的支持! - END - 本文分享自微信公众号 - 悟空聊架构(PassJava666)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

图种再现?Lazarus组织将恶意代码隐藏在.BMP图像中

最近在一起针对韩国实体的鱼叉式网络钓鱼活动中发现,与朝鲜有关的APT组织Lazarus将恶意代码隐藏在了.BMP图像文件中以逃避检测。 隐藏在.BMP图像种的恶意代码可以在受害者的系统上安装一个远程访问木马(RAT),使攻击者可以窃取敏感信息。 来自Malwarebytes的研究人员表示,此次网络钓鱼活动是由分发带有恶意文件的电子邮件开始的,并且研究人员于4月13日发现了该文件。 此次钓鱼邮件所创建的诱骗文件声称是韩国某个城市的博览会的参与申请表,并提示用户在首次打开时启用宏。 该宏首先调用MsgBoxOKCancel函数,向用户弹出一个消息框,声称是微软Office的旧版本。在后台,该宏调用一个压缩为zlib文件的可执行HTA文件,该文件被包含在一个整体的PNG图像文件中。 该宏还通过调用WIA_ConvertImage函数将PNG格式的图像转换为BMP格式。专家指出,将PNG文件格式转换为BMP文件格式会自动解压从PNG嵌入到BMP的恶意zlib对象,因为BMP文件格式是未压缩的图形文件格式。利用这个技巧,攻击者可以避免检测到图像内的嵌入对象。 之后用户会触发感染链的攻击代码,最终投放一个名为 "AppStore.exe "的可执行文件。 然后,该有效载荷继续提取附加在自己身上的加密的第二阶段有效载荷,在运行时进行解码和解密,接着与远程服务器建立通信,接收额外的命令,并将这些命令的结果传回服务器。 此次活动与过去的Lazarus行动有许多相似之处,例如第二阶段的有效载荷使用了与Lazarus相关的BISTROMATH RAT所使用的类似的自定义加密算法。 Lazarus APT组织背景 Lazarus APT组织至少从2009年就开始活跃,一般认为该组织与朝鲜有关。其攻击方式主要是利用恶意软件。 该组织参与了众多网络间谍活动和破坏活动,拥有丰厚的“战绩”。一般认为该组织与大规模的WannaCry勒索软件攻击有关,此外,2016年的大量SWIFT攻击和索尼影业遭受的黑客攻击也被认为与该组织有所联系。 根据卡巴斯基2020年发布的报告,近两年,该组织持续针对加密货币交易所来演变其TTP。

优秀的个人博客,低调大师

69张图:详细记录Ubuntu 20.04安装配置过程,我尽力了

背 景 简 介 放了好久的 Ubuntu18.04 没打开使用,最近打开发现有些文件找不到路径,也懒得去找哪里错了,刚好最新的 Ubuntu20.04 已经出来了,干脆重新装一个最新版本的得了。 话不多说,开干! 准备工作 Windows 10 专业版,64 位操作系统; VMware15 Pro,版本:15.0.0 build-10134415; Ubuntu 版本:ubuntu-20.04.1-desktop-amd64.iso 安装过程记录 打开 VMware15 软件,选择创建新的虚拟机; image-20200823165703432 默认选择自定义配置,下一步 image-20200823165845412 虚拟机硬件兼容性,直接使用默认即可,然后下一步 image-20200823170043197 选择:稍后安装操作系统,然后下一步 image-20200823170537017 系统选择:Linux,Ubuntu 64 位,然后下一步 image-20200823170635139 虚拟机名称可以根据自己需要修改,安装路径也可以自定义,不建议放 C 盘,然后下一步 image-20200823170813043 处理器配置需要根据自己电脑实际情况,进行配置(PS:内核总数越多,可以加快编译速度,提高效率)。配置完成后点击下一步 image-20200823171022325 虚拟机分配的内存,根据实际情况来,当然越大越好,系统运行速度什么的会更快。然后下一步 image-20200920113642154 网络类型使用默认,然后下一步。(PS:如果后续想要给 Ubuntu 设置静态 IP 地址,可以参考:https://blog.csdn.net/Fighting_Boom/article/details/102755385 image-20200823171707001 I/O 控制器类型,默认即可,下一步 image-20200823171743453 磁盘类型,默认即可,下一步 image-20200823171817907 选择磁盘:默认即可,下一步 image-20200823171921847 磁盘大小,根据需要,不过由于这个是虚拟大小(虚拟大小:你给 Ubuntu 分配这么多内存,实际可能用不到这么多,会以实际使用的内存大小为准,虚拟大小就相当于一个上限),因此可以适当大一点也无所谓。 其他使用默认即可,下一步 image-20200823172136779 文件名使用默认,路径与之前安装虚拟机的路径保持一致,然后下一步 image-20200823172315502 都设置完成后,可以再确认一遍信息,有问题点击 “自定义硬件” 进行修改,若无问题,点击 “完成” 。 image-20200823172523140 之后可以看到我们的虚拟机已经创建完成了 image-20200823172539979 接下来需要告诉此虚拟机,使用的系统镜像是哪一个了,依次选择:编辑虚拟机设置 -> CD/DVD(SATA) -> 连接 -> 使用 ISO 映像文件 -> 浏览,选择之前我们下载好的 Ubuntu 镜像文件,完毕之后,点击确定 image-20200823172744525 选择:开启此虚拟机,进行 Ubuntu 系统的安装,如下图,等待配置完成; image-20200823173023978 等待界面加载 image-20200823173219934 出现此界面,就可以正式开始安装了!根据需要,可以选择中文(简体),或者英文界面,我选择英文界面,然后点击安装 Ubuntu:Install Ubuntu image-20200823173430590 键盘布局使用默认的即可,然后继续:Continue image-20200823173609807 这一步第一个问题可以默认,即正常安装即可; 第二个问题,我都取消了勾选,暂不在安装时下载更新,也不下载其他第三方库,这样可以加快安装系统进度;还有一个就是,如果现在电脑没有联网,那就更不能选择在安装时下载更新了! 配置完成后,点击继续:Continue image-20200823173958437 这一步默认即可,然后选择现在安装:Install Now image-20200823174345273 是否要改写磁盘:默认,选择继续 Continue image-20200823174458776 时区选择上海,可以先点击地图,然后会有很多候选项, 找到 shanghai 这栏,选中即可,然后继续 Continue image-20200823182129159 设置用户名、计算机名、用户密码等,建议用户密码不要太复杂,后续要经常使用此密码,如果没啥特殊需要,尽量简单一点,方便后续使用。 我选择每次登录时都需要输入密码,然后确认配置信息无误后,点击继续 Continue image-20200823182429650 接下来就是正式的系统安装过程,不要乱动,等待系统自己完成安装;由于之前没有选择在安装时下载文件,此处安装过程应该不会很久,耐心等待即可。 image-20200823182610562 点击图标,还能看到命令行的安装过程,此时我们发现他好像还是在联网下载某些文件,我选择 Skip ,跳过此步骤,更新可以在安装完之后更新,在安装过程中更新下载文件,会安装的很慢。 image-20200823183142738 可以看到很快就安装完毕了,选择现在重启 Restart Now image-20200823183617854 此时提示我们:请删除安装介质,然后按ENTER键,这个时候我们需要去移除之前选择的系统镜像文件。此时发现,由于系统正在占用此镜像文件,无法移除,因此我选择先直接按下 Enter 键,进入系统界面;等后续配置完毕后,再移除镜像文件; 进入系统后,会出现这个界面,直接跳过,Skip image-20200823184318401 image-20200823184420595 用户使用信息 image-20200823185955080 定位信息, image-20200823190048670 发现可以安装的软件还挺多, image-20200823190135527 image-20200920144231945 安装过程到这里就结束了,剩下的就是进行一个个性化的配置。 安装 VMware Tools 这个工具,可以帮我们做很多东西,比如 Ubuntu 界面全屏显示等,根据软件提示,进行操作; image-20200920144546810 点击 安装 Tools,接着提示如下 image-20200920144915163 找到左边的 DVD选项,在文件夹内部右键,选择 Open in Terminal,这个是在此处打开终端; image-20200920144815699 然后根据提示,使用 tar解压缩安装程序,我使用如下命令 tar-zxvf<文件名> 但是貌似有错误,命令行错误如下 image-20200920145407664 直接去文件夹,使用右键,选择 Extract to(提取到),我选择当前文件夹, image-20200920145520576 image-20200920145540088 此时提示的错误就很明显了,告诉我没有足够的空间来提取文件; image-20200920145626751 好吧,那我换个提取路径,选择我提前建好的文件夹 tar-zxvf<文件名>-C/home/zhaoc/11-tools/11-VMware 通过命令行打印,以及去目标文件夹查看,可以看到提取成功 image-20200920150036195 接着我们进到解压后的文件夹,查看当前文件有哪些,按照之前的提示,运行一个 .pl的文件 image-20200920150213237 我使用 sudo命令,运行此文件,有如下提示,输入 yes,然后回车继续此安装;可以看到之前没有使用 sudo直接安装中断(失败)了; image-20200920150408128 接下来的提示,全部 回车,使用默认路径即可! image-20200920150455153 看到 Enjoy,就说明安装成功了~ image-20200920150839808 到这里 VMTools 就安装完毕了,有一个最大的好处就是,可以适应当前屏幕大小!大屏看着多舒服! image-20200920150945542 Ubuntu20.04 更换国内镜像源 一般安装好的系统,默认的镜像源都是国外的,使用起来速度很慢,接下来就尝试一种图形化的更换镜像源的方法! 找到设置,Settings image-20200920151138527 在左下角找到 About,接着点击 Software Updates image-20200920151343869 点击 Download from,然后选中 Other; image-20200920151506691 接着选择 Select Best Server,这样系统就会选择一个最合适的镜像源,稍等片刻即可! image-20200920151535667 正在进行下载测试,可以看到下边的提示:正在进行一个服务测试,来找到最适合你的本地镜像服务器; image-20200920151641198 查找结束,我直接选择默认的 image-20200920151827695 接着会提示输入密码,然后选择 Authenticate(认证); image-20200920151902620 接着选择 Close image-20200920152016369 此时会提示,已经更新了镜像源,因此需要更新一下软件源列表啥的,按照提示正常操作就好;选择 Reload,重新加载软件源列表; image-20200920152119746 等待加载完毕即可; 此时可以使用如下命令,进行软件的更新操作啦~ sudoapt-getupdatesudoapt-getupgrade 有一个小建议,就是后续安装软件,可以使用 aptitude进行安装,这个比 apt-get的好处在于,可以自己帮忙解决一些软件的依赖问题,如果无法解决,也会给出很好的建议,由我们进行选择如何处理; 安装方法如下 sudoapt-getinstallaptitude 使用方法如下,只是把对应的 apt-get替换为 aptitude即可! sudoaptitudeinstall<软件名> Ubuntu 系统备份 我们刚安装好的系统,为了避免后续玩崩溃,还是尽早做个备份!而 VMware 刚好就提供了一个叫做快照的功能,这个功能就相当于给当前的系统留下一个存档记录,后续如果有问题,可以随时恢复; 具体操作方法, 在这个地方,鼠标悬停,即可查看详细信息; 这三个从左到右依次为:拍摄此虚拟机的快照、将此虚拟机恢复到其父快照、管理此虚拟机的快照; image-20200920152926134 我们选择左边的,拍摄此虚拟机的快照;此时的操作,最好把所有打开的软件全部关闭,这样备份起来稍快一点; 接着我们填写对应的备份名称,以及相关的描述信息,即可点击拍摄快照,开始备份了! image-20200920153610839 在左下角可以看到当前保存的进度,如果系统很大,文件很多,相对就要慢一点。当然啦,跟电脑性能也是有关系滴~,耐心等待即可! image-20200920153712866 保存完的快照可以在最右边, 管理此虚拟机的快照中查看,后续有问题,直接回退即可,不需要再重新安装系统那么麻烦了! image-20200920154705372 总结 整个的安装过程、个性化配置过程,到这里就结束了,如果感觉对您有帮助,别忘了三连支持一下哦,谢谢您嘞! ---END--- 推荐阅读: B站面试经历 漫话:如何给女朋友解释什么是语法糖? 万字长文复习HTTP Feign调用丢失Header的解决方案 喜欢我可以给我设为星标哦 好文章,我 “在看” 本文分享自微信公众号 - 漫话编程(mhcoding)。如有侵权,请联系 support@oschina.cn 删除。本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册