分类
linux nas

linux / \的区别.前一篇blog遇到\@appstore 可能是个小门槛.没有认真研究过命令.搞不通.拜朋友知道有点了解了.

今天在检查root目录时发现有一个名为“\”的文件,觉得很奇怪,从来没见过,就准备用Vim打开看看,很自然地输入命令查看一下,结果居然打不开。

[root@localhost ~]# ll总用量 48-rw-r--r--. 1 root root     0  7月  9 2015 \-rw-------. 1 root root  1414  6月 30 22:51 anaconda-ks.cfg-rw-r--r--. 1 root root 30147  6月 30 22:51 install.log-rw-r--r--. 1 root root  7800  6月 30 22:50 install.log.syslog[root@localhost ~]# vim \> 

稍微思考了一下就明白了,不是打不开,问题出在这个文件名“ \ ”上面。

  反斜线符号“ \ ”在Bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符。如果在反斜线之后一个换行字符立即出现,转义字符使行得以继续,遇到命令很长时使用反斜线很有效;反斜线从输入流中被移除并有效地忽略。

例一:

[root@localhost ~]# echo $HOME/root[root@localhost ~]# echo \$HOME$HOME

例子中,反斜线去除了“ $ ”字符的特殊意义,保留字面值,从而不输出home目录路径。


例二:

[root@localhost ~]# mv test.c \> ..mv: 无法获取"test.c" 的文件状态(stat): 没有那个文件或目录

例子中,反斜线使行得以继续,命令可以正常输入。

  到这里就明白了怎么查看文件名为“ \ ”的文档了,只要输入命令

[root@localhost ~]# vim \\

这个问题解决了,但是又想到了与反斜线对应的,也是经常用到一个符号:正斜线(“ / ”),再来看看这两个符号的区别。

  在知乎上看到这么个说法:反斜线“\”是电脑出现了之后为了表示程序设计里的特殊含义才发明的专用标点。就是说,除了程序设计领域外,任何地方都不应该有使用反斜杠的时候,请永远使用正斜线“/”。

  粗略想想还真差不多是这么回事,但是马上就想到一朵奇葩:Windows系统中用反斜线“\”来表示目录,但是Linux下用正斜线“/”来表示。估计不少人刚从Windows转到Linux下时都犯过这种错。

  Windows:

    “/”是表示参数,“\”是表示本地路径。

  Linux和Unix:

    “/”表示路径,“\”表示转义,“-”和“–”表示参数。

  网络:

    由于网络使用Unix标准,所以网络路径用“/”。  

  但是为什么Windows要用” / “,难道只是为了显示和Linux的不同吗?显然不是的,里面历史原因很复杂 ,同样在知乎找到了答案。

  Windows 用反斜杠(“\”)的历史来自 DOS,而 DOS 的另一个传统是用斜杠(“/”)表示命令行参数,比如:  cd %SystemDrive%
  dir /s /b shell32.dll

  既然 DOS 这边斜杠被占用了,只好找一个最接近的。那就是它了。而在 UNIX 环境中,我们用减号(“-”)和双减号(“–”)表示命令行参数。
  用斜杠表示命令行参数是兼容性原因。这个问题最初起源自 IBM。IBM 在最初加入 DOS 开发时贡献了大批工具,它们都是用斜杠处理命令行参数的。而这个传统源自于 DEC/IBM,比如当年的 VMS 就是用斜杠处理命令行参数,它的目录分隔符是美元符(“$”)。顺便说一句,这个传统也被部分地继承进了 DOS 和 Windows 体系,日文版的 Windows 就把反斜杠在屏幕上显示为“¥”,虽然实际上还是反斜杠。
  如今的 Windows 内核在处理路径时确实可以同时支持斜杠和反斜杠。很多时候我们看到用斜杠时出错,是因为应用程序层面的原因。比如 cmd.exe 就不支持用斜杠表示路径,而PowerShell.exe 支持,也正因为这个原因,PowerShell 开始转而使用减号作为命令行参数的起始符。

MSDN上有一篇 blog 说得很清楚:http://blogs.msdn.com/b/larryosterman/archive/2005/06/24/432386.aspx

分类
linux

PacVim:一个学习vim命令的游戏

之前docker的版本一共200M左右 按照这个无法安装成功。然后去centos下了一个虚拟机用的 iso文件。用群晖自带虚拟机。只能安装centos7 centos8 提示错误。然后一路照着教程安装。安装了带有桌面系统centos gnome 好像是这个单词。

最后成功了。

前言

       我们都知道Vim是Linux下一种文本编辑器,可以用来看代码、改代码。但是Vim是无图形界面的编辑器,一切操作全靠指令,指令繁多且复杂,对于新手而言,学习起来很费劲。

       偶然的机会,发现一款有趣的命令行游戏PacVim,通过这款游戏可以提高Vim操作技能。出于好奇,下载并安装了这款游戏,亲身体验了几次,还是挺有意思的。


PacVim介绍

PacVim这款游戏其实是受PacMan(中文名:吃豆人)游戏启发而开发出来的。二者很相似,游戏任务都是躲避怪物,吃完豆豆。所不同的是,PacVim全程使用vim指令来操作,游戏的目的也是通过这种方式来提高Vim水平。


PacVim安装

  • 安装Ncurses库

在centos7下安装如下:

yum install ncurses-devel
  • 升级GCC版本

注意:linux下要请注意,编译PacVim需要gcc 8.x或更高版本,如果版本太低,可能无法正确编译和安装。我用Centos 7 编译安装(gcc version 4.8.5 20150623 (Red Hat 4.8.5-16))。

以下是升级GCC版本步骤:

1. 安装scl源

yum install centos-release-scl scl-utils-build

2. 列出scl可用源

yum list all --enablerepo='centos-sclo-rh' yum list all --enablerepo='centos-sclo-rh' | grep "devtoolset-"

3. 安装8版本的gcc、gcc-c++、gdb工具链(toolchian)

yum install -y devtoolset-8-toolchain scl enable devtoolset-8 bash gcc --version
  • 安装PacVim游戏

这款游戏源码托管在GitHub上,只需下载后编译安装即可。

git clone https://github.com/jmoon018/PacVim.git cd PacVim sudo make  sudo make install
  • 启动游戏

安装成功后,执行如下命令启动游戏

pacvim [LEVEL_NUMER] [MODE]

其中:

– LEVEL_NUMER:表示关卡号

– MODE:表示难度,n – 一般模式, h – 困难模式

游戏总共10关,0~9数字表示。例如,选择第5关一般模式,可以这样启动游戏:

pacvim 5 n

游戏规则

PacVim 的使用与 PacMan 非常相似。

你必须跑过屏幕上所有的字符,同时避免鬼魂(红色字符)。

PacVim有两个特殊的障碍:

  1. 你不能移动到墙壁中(黄色)。你必须使用 vim 动作来跳过它们。
  2. 如果你踩到波浪字符(青色的 ~),你就输了!

你有三条生命。每次打赢 0、3、6、9 关时你都会获得新生命。总共有 10 关,从 0 到 9,打赢第 9 关后,游戏重置为第 0 关,但是鬼魂速度变快。

获胜条件

使用 vim 命令将光标移动到字母上并高亮显示它们。所有字母都高亮显示后,你就会获胜并进入下一关。

失败条件

如果你碰到鬼魂(用红色 G 表示)或者波浪字符,你就会失去一条命。如果命小于 0 条,你将会输掉整个游戏。

这是实现的命令列表:


参考资料

更新升级GCC版本:

https://my.oschina.net/michaelshu/blog/3024970

原文链接 https://blog.csdn.net/hq86937375/article/details/90408694

分类
docker linux nas

end Kernel panic – not syncing:Fatal exception Vmware安装CentOS虚拟机时报错

Vmware安装CentOS虚拟机时报错end Kernel panic – not syncing:Fatal exception

今天安装虚拟机的时候,出现end Kernel panic – not syncing:Fatal exception

错误页面
错误图片如上

解决

我是用Vmware10安装的CentOS8镜像,出现了这个错误,更改为CentOS7镜像可以顺利安装。
个人猜测是Vmware10版本过低,不匹配CentOS8版本。

更新Vmware10为Vmware12即可,或者将CentOS8镜像更改为CentOS7镜像也可解决问题。

我是通过使用CentOS7解决。

原文链接:https://blog.csdn.net/qq_38991369/article/details/102705317

然后准备去下centos7版本 发现 有

ISOPackagesOthers
x86_64RPMsCloud | Containers | Vagrant
ARM64 (aarch64)RPMsCloud | Containers | Vagrant
IBM Power BE (ppc64)RPMsCloud | Containers | Vagrant
IBM Power (ppc64le)RPMsCloud | Containers | Vagrant
ARM32 (armhfp)RPMsCloud | Containers | Vagrant
i386RPMsCloud | Containers | Vagrant
Release NotesRelease EmailDocumentation

这些版本 vagrant 好像就是虚拟机专用版本.container 就是docker可以用的版本.cloud 云端版本.

写到这 我有想起来查一下 docker和虚拟机的对比.

看到这个资料 决定还是用docker试试.

概要

Docker是近年来新兴的虚拟化工具,它可以和虚拟机一样实现资源和系统环境的隔离。本文将主要根据IBM发表的研究报告,论述docker与传统虚拟化方式的不同之处,并比较物理机、docker容器、虚拟机三者的性能差异及差异产生的原理。 

docker与虚拟机实现原理比较

如下图分别是虚拟机与docker的实现框架。 
虚拟机实现框架 docker实现框架 
比较两图的差异,左图虚拟机的Guest OS层和Hypervisor层在docker中被Docker Engine层所替代。虚拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的Hypervisor层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。 
虚拟机实现资源隔离的方法是利用独立的OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现的。例如,为了虚拟CPU,Hypervisor会为每个虚拟的CPU创建一个数据结构,模拟CPU的全部寄存器的值,在适当的时候跟踪并修改这些值。需要指出的是在大多数情况下,虚拟机软件代码是直接跑在硬件上的,而不需要Hypervisor介入。只有在一些权限高的请求下,Guest OS需要运行内核态修改CPU的寄存器数据,Hypervisor会介入,修改并维护虚拟的CPU状态。 
Hypervisor虚拟化内存的方法是创建一个shadow page table。正常的情况下,一个page table可以用来实现从虚拟内存到物理内存的翻译。在虚拟化的情况下,由于所谓的物理内存仍然是虚拟的,因此shadow page table就要做到:虚拟内存->虚拟的物理内存->真正的物理内存。 
对于IO设备虚拟化,当Hypervisor接到page fault,并发现实际上虚拟的物理内存地址对应的是一个I/O设备,Hypervisor就用软件模拟这个设备的工作情况,并返回。比如当CPU想要写磁盘时,Hypervisor就把相应的数据写到一个host OS的文件上,这个文件实际上就模拟了虚拟的磁盘。 
对比虚拟机实现资源和环境隔离的方案,docker就显得简练很多。docker Engine可以简单看成对Linux的NameSpace、Cgroup、镜像管理文件系统操作的封装。docker并没有和虚拟机一样利用一个完全独立的Guest OS实现环境隔离,它利用的是目前linux内核本身支持的容器方式实现资源和环境隔离。简单的说,docker利用namespace实现系统环境的隔离;利用Cgroup实现资源限制;利用镜像实现根目录环境的隔离。 
通过docker和虚拟机实现原理的比较,我们大致可以得出一些结论: 
(1)docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有优势,具体的效率对比在下几个小节里给出。在IO设备虚拟化上,docker的镜像管理有多种方案,比如利用Aufs文件系统或者Device Mapper实现docker的文件管理,各种实现方案的效率略有不同。 
(2)docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。我们知道,引导、加载操作系统内核是一个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。另外,现代操作系统是复杂的系统,在一台物理机上新增加一个操作系统的资源开销是比较大的,因此,docker对比虚拟机在资源消耗上也占有比较大的优势。事实上,在一台物理机上我们可以很容易建立成百上千的容器,而只能建立几个虚拟机。

docker与虚拟机计算效率比较

在上一节我们从原理的角度推测docker应当在CPU和内存的利用效率上比虚拟机高。在这一节我们将根据IBM发表的论文给出的数据进行分析。以下的数据均是在IBM x3650 M4服务器测得,其主要的硬件参数是: 
(1)2颗英特尔xeon E5-2655 处理器,主频2.4-3.0 GHz。每颗处理器有8个核,因此总共有16个核。 
(2)256 GB RAM. 
测试中是通过运算Linpack程序来获得计算能力数据的。结果如下图所示: 
此处输入图片的描述 
图中从左往右分别是物理机、docker和虚拟机的计算能力数据。可见docker相对于物理机其计算能力几乎没有损耗,而虚拟机对比物理机则有着非常明显的损耗。虚拟机的计算能力损耗在50%左右。 
为什么会有这么大的性能损耗呢?一方面是因为虚拟机增加了一层虚拟硬件层,运行在虚拟机上的应用程序在进行数值计算时是运行在Hypervisor虚拟的CPU上的;另外一方面是由于计算程序本身的特性导致的差异。虚拟机虚拟的cpu架构不同于实际cpu架构,数值计算程序一般针对特定的cpu架构有一定的优化措施,虚拟化使这些措施作废,甚至起到反效果。比如对于本次实验的平台,实际的CPU架构是2块物理CPU,每块CPU拥有16个核,共32个核,采用的是NUMA架构;而虚拟机则将CPU虚拟化成一块拥有32个核的CPU。这就导致了计算程序在进行计算时无法根据实际的CPU架构进行优化,大大减低了计算效率。

docker与虚拟机内存访问效率比较

内存访问效率的比较相对比较复杂一点,主要是内存访问有多种场景: 
(1)大批量的,连续地址块的内存数据读写。这种测试环境下得到的性能数据是内存带宽,性能瓶颈主要在内存芯片的性能上; 
(2)随机内存访问性能。这种测试环境下的性能数据主要与内存带宽、cache的命中率和虚拟地址与物理地址转换的效率等因素有关。 
以下将主要针对这两种内存访问场景进行分析。在分析之前我们先概要说明一下docker和虚拟机的内存访问模型差异。下图是docker与虚拟机内存访问模型: 
此处输入图片的描述 
可见在应用程序内存访问上,虚拟机的应用程序要进行2次的虚拟内存到物理内存的映射,读写内存的代价比docker的应用程序高。 
下图是场景(1)的测试数据,即内存带宽数据。左图是程序运行在一块CPU(即8核)上的数据,右图是程序运行在2块CPU(即16核)上的数据。单位均为GB/s。 
此处输入图片的描述 此处输入图片的描述 
从图中数据可以看出,在内存带宽性能上docker与虚拟机的性能差异并不大。这是因为在内存带宽测试中,读写的内存地址是连续的,大批量的,内核对这种操作会进行优化(数据预存取)。因此虚拟内存到物理内存的映射次数比较少,性能瓶颈主要在物理内存的读写速度上,因此这种情况docker和虚拟机的测试性能差别不大; 
内存带宽测试中docker与虚拟机内存访问性能差异不大的原因是由于内存带宽测试中需要进行虚拟地址到物理地址的映射次数比较少。根据这个假设,我们推测,当进行随机内存访问测试时这两者的性能差距将会变大,因为随机内存访问测试中需要进行虚拟内存地址到物理内存地址的映射次数将会变多。结果如下图所示。 
此处输入图片的描述此处输入图片的描述 
左图是程序运行在一个CPU上的数据,右图是程序运行在2块CPU上的数据。从左图可以看出,确实如我们所预测的,在随机内存访问性能上容器与虚拟机的性能差距变得比较明显,容器的内存访问性能明显比虚拟机优秀;但出乎我们意料的是在2块CPU上运行测试程序时容器与虚拟机的随机内存访问性能的差距却又变的不明显。 
针对这个现象,IBM的论文给出了一个合理解释。这是因为当有2块CPU同时对内存进行访问时,内存读写的控制将会变得比较复杂,因为两块CPU可能同时读写同一个地址的数据,需要对内存数据进行一些同步操作,从而导致内存读写性能的损耗。这种损耗即使对于物理机也是存在的,可以看出右图的内存访问性能数据是低于左图的。2块CPU对内存读写性能的损耗影响是非常大的,这个损耗占据的比例远大于虚拟机和docker由于内存访问模型的不同产生的差异,因此在右图中docker与虚拟机的随机内存访问性能上我们看不出明显差异。

docker与虚拟机启动时间及资源耗费比较

上面两个小节主要从运行在docker里的程序和运行在虚拟机里的程序进行性能比较。事实上,docker之所以如此受到开发者关注的另外一个重要原因是启动docker的系统代价比启动一台虚拟机的代价要低得多:无论从启动时间还是从启动资源耗费角度来说。docker直接利用宿主机的系统内核,避免了虚拟机启动时所需的系统引导时间和操作系统运行的资源消耗。利用docker能在几秒钟之内启动大量的容器,这是虚拟机无法办到的。快速启动、低系统资源消耗的优点使docker在弹性云平台和自动运维系统方面有着很好的应用前景。

docker的劣势

前面的内容主要论述docker相对于虚拟机的优势,但docker也不是完美的系统。相对于虚拟机,docker还存在着以下几个缺点: 
1.资源隔离方面不如虚拟机,docker是利用cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。 
2.安全性问题。docker目前并不能分辨具体执行指令的用户,只要一个用户拥有执行docker的权限,那么他就可以对docker的容器进行所有操作,不管该容器是否是由该用户创建。比如A和B都拥有执行docker的权限,由于docker的server端并不会具体判断docker cline是由哪个用户发起的,A可以删除B创建的容器,存在一定的安全风险。 
3.docker目前还在版本的快速更新中,细节功能调整比较大。一些核心模块依赖于高版本内核,存在版本兼容问题

参考文献

  1. Felter W, Ferreira A, Rajamony R, et al. An Updated Performance Comparison of Virtual Machines and Linux Containers[J]. technology, 2014, 28: 32.
  2. http://www.zhihu.com/question/20848931

原文链接 https://blog.csdn.net/albenxie/article/details/73478894

分类
linux nas

centos 准备装一个虚拟机玩vi的pacvim 学习vi

首先查看一下 群辉的linux是什么linux.选择安装什么版本的centos.

之前装了docker的centos只有200M 好多支持的安装包都没有 安装pacvi失败

试试这个方法 先ssh登陆群辉.

一、linux下如何查看已安装的centos版本信息:1.Linux查看当前操作系统版本信息  cat /proc/versionLinux version 2.6.32-696.el6.x86_64 (mockbuild@c1bm.rdu2.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC) ) #1 SMP Tue Mar 21 19:29:05 UTC 20172.Linux查看版本当前操作系统内核信息 uname -aLinux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 athlon i386 GNU/Linux3.linux查看版本当前操作系统发行信息 cat /etc/issue 或 cat /etc/centos-releaseCentOS release 6.9 (Final)4.Linux查看cpu相关信息,包括型号、主频、内核信息等 cat /etc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 60model name : Intel(R) Core(TM) i5-4590 CPU @ 3.30GHzstepping : 3microcode : 29cpu MHz : 3292.277cache size : 6144 KBphysical id : 0siblings : 4core id : 0cpu cores : 4apicid : 0initial apicid : 0fpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 avx2 smep bmi2 erms invpcidbogomips : 6584.55clflush size : 64cache_alignment : 64address sizes : 39 bits physical, 48 bits virtual5.Linux查看版本说明当前CPU运行在32bit模式下(但不代表CPU不支持64bit) getconf LONG_BIT64二、uname的使用uname命令用于打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。uname -a显示全部信息-m或–machine:显示电脑类型;-r或–release:显示操作系统的发行编号;-s或–sysname:显示操作系统名称;-v:显示操作系统的版本;-p或–processor:输出处理器类型或”unknown”;-i或–hardware-platform:输出硬件平台或”unknown”;-o或–operating-system:输出操作系统名称;–help:显示帮助;–version:显示版本信息。三、查看Linux版本1.查看系统版本信息的命令 lsb_release -a(使用命令时提示command not found,需要安装yum install redhat-lsb -y)[root@localhost ~]# lsb_release  -aLSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0- noarch:printing-4.0-amd64:printing-4.0-noarchDistributor ID: CentOSDescription:    CentOS Linux release 6.0 (Final)Release:        6.0Codename:       Final注:这个命令适用于所有的linux,包括RedHatSUSE、Debian等发行版。2.查看centos版本号 cat /etc/issueCentOS release 6.9 (Final)Kernel \r on an \m3.使用 file /bin/ls 转载https://www.cnblogs.com/vaelailai/p/7545166.html

http://mirrors.aliyun.com/centos/8.3.2011/isos/x86_64/

Index of /centos/8.3.2011/isos/x86_64/


../
CHECKSUM                                           18-Nov-2020 21:48                 319
CHECKSUM.asc                                       04-Dec-2020 15:48                1179
CentOS-8.3.2011-x86_64-boot.iso                    18-Nov-2020 21:01           716177408
CentOS-8.3.2011-x86_64-boot.iso.manifest           18-Nov-2020 21:13                 635
CentOS-8.3.2011-x86_64-boot.torrent                04-Dec-2020 16:01               27830
CentOS-8.3.2011-x86_64-dvd1.iso                    18-Nov-2020 21:43          9264168960
CentOS-8.3.2011-x86_64-dvd1.iso.manifest           18-Nov-2020 21:43              465895
CentOS-8.3.2011-x86_64-dvd1.torrent  
选了最大的dvd版本 本来想着需要很久.
但是没有想到阿里云镜像节点 用idm 慢速31M  8g多几分钟.有图为证.真快.

然后先传到nas上吧.

速度也不错.之前说过买了个intel千兆单口pci网卡.由于没有弄all in one 单口 替换之前的百兆.

待续