首页 文章 精选 留言 我的

精选列表

搜索[基础搭建],共10000篇文章
优秀的个人博客,低调大师

PowerShell中的基础数据类型

PowerShell是一个面向对象的语言,在申明变量的时候不强制要求申明数据类型,使用$开头来申明变量即可。 基本数据类型 PowerShell本身是基于.Net开发出来的,所以在.Net中的基本数据类型,在PowerShell中也可以使用,只是在PowerShell中用”[]”来标识具体的数据类型。比如[int],[long],[string],[bool],[double]等。 使用-is来判断某个变量是否指定的数据类型,和C#中的is关键字是一样的。比如: $a=10; $a -is[int] $a -is[double] 第二行返回True,第三行返回False。 我们也可以在定义变量时指定数据类型。比如我们要定义decimal类型的10,那么可以写为: [decimal] $c=10 $c.GetType() 可以看到我们的类型为Decimal。 数据类型转换 关于默认数据类型转换,PowerShell和C#的行为有所不同。PowerShell会根据第一个变量的类型作为目标类型,然后将运算后面的联系转换为第一个类型。比如我们申明两个变量: $a=10; $b= " 10 "; 如果我们使用加法运算: $a+ $b 该运算会返回20,因为第一个变量是int类型的,所以后面的变量都会转换为int类型。如果我们调整变量的顺序: $b+ $a 该运算返回的结果为1010,因为第一个变量是string类型。习惯了C#的默认类型转换,那么我们可以强制进行类型转换后再进行运算。强制类型转换的方法也是与C#相同。 比如我们要按int类型来计算,那么我们第二个加法可以改为: [int] $b+ $a 我们也可以使用-as命令,那么第二个加法改为: ( $b -as[int])+ $a List/Array类型 我们平时使用的各种Get-XXX命令,很多都是返回对应类型的Array,比如Get-Process. 如果我们要定义一个集合,那么可以使用”@(对象1,对象2,对象3…)”的格式申明集合。比如我们定义一个字符串集合: $a=@('a','bb','ccc') 其实不使用@和括号也是可以的,只需要用逗号分割各个Item即可。 $a='aaa','bb','c' 如果是申明一个空的集合,就必须写为: $a=@() 与C#不同的是,在PowerShell中,往集合中添加元素,可以使用+=符号。 $a=@() $a+= " abc " $a+= " dddd " Write-Host $a 如果要移除某个元素,那么就不简单了,需要使用Where查询(简写为?),找出要保留的元素,然后将保留的元素集合再重新赋值会变量。比如对于字符串集合,我们要移除字符c,那么操作如下: $a=@('aaa','bb','c') $a= $a|?{ $_ -ne'c'} Write-Host $a 访问某个元素使用[idx]即可和C#相同。至于对集合的各种操作,可以参见我上一篇博文。 Hashtable/Dictionary类型 哈希表就是一个Key-Value对的集合。哈希表的创建格式如下: @{Key1=Value1;Key2=Value2;…} 这里Key一般是字符串,但是并不需要用引号引起来(当然,使用了引号更好),Value可以是任意类型。比如我们创建一个员工和部门的Hashtable,命令如下: $a=@{Devin= " IT ";Edward= " Finance ";Jeneen= " Sale "} 使用keys属性可以获得哈希表的Key列表,使用values属性可以获得Value列表。 如果要往哈希表中添加元素,可以使用.Add(Key,Value)方法。比如添加一个员工: $a.Add( " Julia ", " Logisitcs ") 这里需要注意的是Key必须要带引号。而且哈希表的Key是不允许重复的,如果已经存在相同的值,添加会报错。可以先判断Key是否存在,然后再添加: if( -not $a.ContainsKey( " Julia ")) { $a.Add( " Julia ", " Logisitcs ") } 如果要移除某个Key对应的元素,那么可以调用.Remove(Key)函数即可。 $a.Remove( " Julia ") 如果要访问某个Key对应的值,有两种方法: $a[ " Devin "] $a.Devin 需要注意的是,直接对哈希表进行Sort-Object是没有效的,我们必须先调用GetEnumerator方法,把哈希表转换后在执行Sort。 $a.GetEnumerator()|Sort-ObjectName 本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/p/4521367.html,如需转载请自行联系原作者

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

c语言基础学习02_helloworld

=============================================================================涉及到的知识点有:include有两种用法、{}大括号用法解释、C语言自定义名字的要求、c语言库函数printf的解释、编译错误有两种、调用system函数、c语言编译过程、操作系统结构、指令集中的cpu架构 、QT常用快捷键、vs常用快捷键 =============================================================================将windows的可执行文件上传到linux,看能够执行吗?sftp> put a.exe 出现下面错误:没有权限;拒绝访问-bash: ./a.exe: Permission denied那我们提升下a.exe的权限试试chmod u+x a.exe 则出现下面错误:不能执行二进制文件:执行格式错误-bash: ./a.exe: cannot execute binary file: Exec format error说明windows的可执行文件不能再linux系统下执行 fatal error 致命错误 =============================================================================#include的意思是头文件包含,使用c语言库函数需要提前包含所用到的库函数对应的头文件c语言中如果要用到printf函数,在使用前必须 #include <stdio.h>-----------------------------------------------------------------------------include有两种用法:1、#include <文件名> 说明需要包含的文件在系统目录下2、#include “文件名” 说明需要包含的文件在当前目录下-----------------------------------------------------------------------------可执行代码必须放在{}大括号里面; 在c语言中一行只写一个分号是可以的,表示是空语句。c语言中一组大括号里也可以再有多组大括号。-----------------------------------------------------------------------------int a; //定义一个变量。extern int b; //声明一个变量。-----------------------------------------------------------------------------C语言自定义名字的要求:可以使用大小写字母、下划线、数字,但第一个字母必须是字母或者下划线。且字母区分大小写。(注意:BASIC语言不区分大小写)----------------------------------------------------------------------------- printf 是c语言库函数,功能是:向标准输出设备输出一个字符串(注意:标准输出设备不仅仅指的是控制台、屏幕,还有打印机等等什么的。)printf 函数只能用在控制台程序里面(就是字符界面下的),不能用在图形界面下,即不能把一个字符串输出到窗口里面。可以通过命令 man 3 printf 来查看。 -----------------------------------------------------------------------------编译错误有两种warning 不影响编译,只是警告。error 编译器彻底罢工了,不干活了。----------------------------------------------------------------------------- 第一种写法: int main(){ return 0;} 第二种写法: void main(){ return ; //或者可以这句话不用写} 对c语言,两种写法都对,但对于C++来讲,只支持第一种写法。-----------------------------------------------------------------------------在main函数中return 0; 代表程序执行成功,return -1; 代表程序执行失败。-----------------------------------------------------------------------------c语言文件的扩展名是.c,C++文件的扩展名就是cpp linux系统并不用后缀名来区分文件;Linux不像Windows一样区分文件后缀的,所以是可以改的,而且不影响使用的。 1,mv可以移动文件,也可以用作更改文件名。 2,修改命名:mv fileName.type fileName.newType就可以更改文件后缀了。 3,但是一些特定的文件不要随意更改,例如配置文件。=============================================================================在使用system之前需要包含stdlib.h这个头文件,调用system函数,可以在c语言的代码中执行另外一个程序-----------------------------------------------------------------------------如果在命令行执行一个程序,那么这个程序的调用者就是操作系统; 如果在代码中通过system,执行一个程序,那么这个程序的调用者就是自己写的代码本身。 c语言所有的库函数调用,只能保证语法是一致的,但不能保证执行结果是一致的,同样的,库函数在不同的操作系统下执行结果可能是一样的,也可能是不一样的。 不同平台下的c语言的库函数只能保证调用语法一样,但不能保证执行结果也是一样的。(因为c语言对硬件的要求、对操作系统的要求太多啦!)所以用C语言在不同的平台写代码的时候,可能会有一些移植的工作量。-----------------------------------------------------------------------------POSIX是一个标准,只要符合这个标准的函数,在不同的系统下执行的结果就可以一致。如果有符合posix标准的函数,尽量使用。 Unix和Linux很多库函数都是支持POSIX的,但windows支持的比较差。(曾经微软说过要表示大力支持,但说得多做得少!)所以说,如果将Unix代码移植到Linux一般代价很小,如果把windows代码移植到Unix或者linux就比较麻烦。-----------------------------------------------------------------------------system 返回的是一个整数。即system的返回值就是所被调用程序中main函数的return的值。 =============================================================================c语言编译过程1、预编译 --> 2、编译 --> 3、链接-----------------------------------------------------------------------------预编译命令:gcc -o cc1.c c1.c -E 或者 gcc -o cc1.c -E c1.c 或者 gcc -E c1.c -o cc1.c(注意:-o 作用是指定输出文件的名字,如果不加-o的话,则生成的文件名字总叫a.out)预编译c1.c,预编译之后得到的文件的名字叫cc1.c。(注意:编译后的名字可以随意起,但是呢我们知道预编译后的文件还是文本的.c文件,所以为了好区分起名字为 xxx.c)在c语言中#开头的语句又叫预编译指令。#include <stdio.h>预编译的功能之一:会把include包含的头文件内容做一个简单的替换,即替换到.c文件里面去。......//此处省略1万行......预编译的功能之二:会把代码中的注释去掉。-----------------------------------------------------------------------------编译的命令:gcc -o cc1.o cc1.c -c 或者 gcc -o cc1.o -c cc1.c 或者gcc -c cc1.c -o cc1.o编译cc1.c,编译之后得到的文件名字叫cc1.o.编译的功能是:把文本的c语言编译为二进制指令。-----------------------------------------------------------------------------链接的命令:gcc -o c1 cc1.o 或者 gcc cc1.o -o c1(注意:gcc没有单独的链接参数) 将系统库函数与cc1.o进行链接(简言之合并),得到可执行的程序,该程序的名字叫c1。 我们想知道在linux系统下到底链接来了什么库来呢?(即可执行程序需要用到什么库呢?)使用命令 ldd c1 查看。 (注意;用c语言写的代码依赖的库最少,如果使用其他语言依赖的库更多哦!!需要装好多包包。)那么在windows系统下的可执行程序需要用到什么库呢?使用一个小软件Depends.exe可以查看的到。 =============================================================================操作系统结构 1、用户模式 我们目前写的程序都是在用户模式下运行的。2、内核模式 操作系统本身、设备驱动等这些软件是在内核模式下运行的。-----------------------------------------------------------------------------一个CPU的一个寄存器可以放8个二进制位。例如:0000 00001111 1111则这个CPU就是8位的CPU。-----------------------------------------------------------------------------一个CPU的一个寄存器可以放16个二进制位。0000 0000 0000 00001111 1111 1111 1111则这个CPU就是16位CPU。-----------------------------------------------------------------------------总线有三种:数据总线、地址总线、控制总线。总线在大多数时候和CPU的寄存器位数是相同的。 8位CPU的总线是8位。1111 1111f f256BYTE(255字节) 16位CPU的总线是16位。1111 1111 1111 1111f f f f65536BYTE(64k字节) 32位CPU的总线是32位。1111 1111 1111 1111 1111 1111 1111 1111f f f f f f f f32位CPU管理内存有一个最大值,4G字节 = 4 x 1024M = 4 x 1024 x 1024 x 1024Byte(字节)。 64位CPU的总线是64位。1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111f f f f f f f f f f f f f f f f理论上64位CPU管理内存是:2^64个字节,但同时又取决于综合的指标:比如主板、操作系统的支持等等。但至少是远远大于4G的。 如果寄存器是64位,但总线是32位,这种cpu叫准64位CPU。(即里面可以做到很宽,但是外面的工艺却达不到) 若在64位的CPU架构上运行了64位的软件操作系统,那么这个系统是64位的;若在64位的CPU架构上运行了32位的软件操作系统,那么这个系统是32位的。-----------------------------------------------------------------------------指令集中的cpu架构 精简指令集RISC(服务器端用的)比如:SPARC、ARM属于精简指令集。 复杂指令集CISC(比如Inter的CPU)比如:X86属于典型的复杂指令集。-----------------------------------------------------------------------------cpu内部里面所有的计算都得在寄存器里面来完成。 cpu内部的寄存器还有名字哦:8位cpu(x86构架) 16位CPU 32位CPU 64位CPU a ax,al,ah eax rax b bx,bl,bh ebx rbx c cx ecx rcx d dx edx rdx-----------------------------------------------------------------------------使用Qt时,再用到system函数时,会出现一个控制台的窗口。为什么呢?答:因为system函数在windows系统下就是一个基于控制台的函数(就是字符界面的函数),所以即使在图形界面下调用system也会出现一个控制台窗口。那么如何在图形界面下调用该函数又不显示控制台呢?答:可以换另外一个函数啊!该函数是 WinExec("notepad",SW_NORMAL); 但是该函数需要包含一个头文件是 #include <windows.h>。 QT常用快捷键Ctrl + I 自动格式化代码Ctrl + / 注释代码/取消注释代码Ctrl + r 不调试运行代码Ctrl + b 编译代码但不运行代码Alt + enter 自动完成类函数定义F9 设置断点F5 调试运行F10 next调试F11 step调试-----------------------------------------------------------------------------vs常用快捷键Ctrl + F5 不调试运行代码Ctrl + k,Ctrl + f 自动格式化代码Ctrl + k,Ctrl + c 注释代码Ctrl + k,Ctrl + u 取消注释代码Ctrl + Shift + b 编译,不运行代码F5 调试运行F9 设置断点 注意:C语言以分号结尾的,而不是以行结尾的。=============================================================================我的GitHub地址: https://github.com/heizemingjun 我的博客园地址: http://www.cnblogs.com/chenmingjun 我的蚂蚁笔记博客地址: http://blog.leanote.com/chenmingjun Copyright ©2018 黑泽明军 【转载文章务必保留出处和署名,谢谢!】

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

smart_Activity互相跳转——基础

让我们看一下原代码: packagecom.smart.activity; importandroid.app.Activity; importandroid.content.ComponentName; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.Button; publicclassMainextendsActivity{ //ANDROID系统,组件与组件之间是通过,INTENT进行通信的。 @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); Buttonbutton=(Button)this.findViewById(R.id.button); button.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ //打开新的Activity //第一种方法调用 Intentintent=newIntent(Main.this,SmartActivity.class); //打开应用的组件 Main.this.startActivity(intent); //第二种方法调用 //Intentintent=newIntent(); //intent.setClass(Main.this,SmartActivity.class); //第三种方法调用 //Intentintent=newIntent(); //intent.setComponent(newComponentName(Main.this,SmartActivity.class)); //意思是讲三种方法调查用,意是一样的, //一般来讲用第一种 } }); } } packagecom.smart.activity; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.Button; publicclassSmartActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ //关于这行代码,是完成界面的代码 super.onCreate(savedInstanceState); setContentView(R.layout.smart); Buttonbutton2=(Button)this.findViewById(R.id.button2); button2.setOnClickListener(newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ //打开新的Activity //第一种方法调用 Intentintent=newIntent(SmartActivity.this,Main.class); //打开应用的组件 SmartActivity.this.startActivity(intent); //第二种方法调用 //Intentintent=newIntent(); //intent.setClass(Main.this,SmartActivity.class); //第三种方法调用 //Intentintent=newIntent(); //intent.setComponent(newComponentName(Main.this,SmartActivity.class)); //意思是讲三种方法调查用,意是一样的, //一般来讲用第一种 } }); } } 本文转自 llb988 51CTO博客,原文链接:http://blog.51cto.com/llb988/490078,如需转载请自行联系原作者

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

确定取消经典之作——基础

让我们看一下效果图 packagecom.smart; importandroid.app.Activity; importandroid.app.AlertDialog; importandroid.content.DialogInterface; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; /** *不知道看的朋友,认识,如何,我觉得挺经典的按钮之作 *如有问题,请发自llb988@126.com **/ publicclassMainextendsActivityimplementsOnClickListener{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); //得到按钮ID Buttonbutton=(Button)findViewById(R.id.button); //进行监听 button.setOnClickListener(this); } @Override//断送确定与取消方法 publicvoidonClick(Viewv){ newAlertDialog.Builder(this).setIcon(R.drawable.question).setTitle("是否删除文件").setPositiveButton("确定",newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ newAlertDialog.Builder(Main.this).setMessage("文件已删除").create().show(); } }).setNegativeButton("取消",newDialogInterface.OnClickListener(){ @Override publicvoidonClick(DialogInterfacedialog,intwhich){ newAlertDialog.Builder(Main.this).setMessage("您选择取消按钮,文件未被删除").create().show(); } }).show(); } } 本文转自 llb988 51CTO博客,原文链接:http://blog.51cto.com/llb988/489541,如需转载请自行联系原作者

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

Toast使用方法——简单基础

Toast内容显示图 packagecom.smart; importandroid.app.Activity; importandroid.content.DialogInterface; importandroid.os.Bundle; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.TextView; importandroid.widget.Toast; publicclassMainextendsActivityimplementsOnClickListener{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main);//得到参数 ButtonbtnTextToast=(Button)findViewById(R.id.btnTextToast); ButtonbtnImageToast=(Button)findViewById(R.id.btnImageToast); btnTextToast.setOnClickListener(this);//绑定器 btnImageToast.setOnClickListener(this); } //点击方法事件 @Override publicvoidonClick(Viewv){ switch(v.getId()){ caseR.id.btnTextToast: //使用TOAST方法显示结果内容 ToasttextToast=Toast.makeText(this,"新年好,我的朋友们,\n哈,哈,哈!",Toast.LENGTH_LONG); textToast.show(); break; caseR.id.btnImageToast: Viewview=getLayoutInflater().inflate(R.layout.toast,null); TextViewtextView=(TextView)view.findViewById(R.id.smart); //使用TOAST方法显示结果内容 textView.setText("新年好,我的朋友们,\n哈,哈,哈!"); Toasttoast=newToast(this); toast.setDuration(Toast.LENGTH_LONG); toast.setView(view); toast.show(); break; } } } 本文转自 llb988 51CTO博客,原文链接:http://blog.51cto.com/llb988/489546,如需转载请自行联系原作者

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

android中进度条—基础

本文转自 llb988 51CTO博客,原文链接:http://blog.51cto.com/llb988/486075,如需转载请自行联系原作者 android progrssbar 进度条即计算机在处理文件时,实时的,以图片形式显示处理文件的速度,完成度,剩余未完成文件的大小,和可能需要处理时间,一般以水平或者是图形条状显示 类代码 package com.smart; import android.app.Activity; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.ProgressBar; public class Main extends Activity implements OnClickListener { // 各位在导入包的时候,记住要导入import android.view.View.OnClickListener; private ProgressBar progressbarHorizontal; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.main); setProgressBarIndeterminateVisibility(true); progressbarHorizontal = (ProgressBar) findViewById(R.id.progressBarHorizontal); Button button1 = (Button) findViewById(R.id.button1); Button button2 = (Button) findViewById(R.id.button2); // 绑定器 button1.setOnClickListener(this); button2.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { // 处理“增加进度"按钮事件 case R.id.button1: progressbarHorizontal.setProgress((int) (progressbarHorizontal .getProgress() * 1.18)); progressbarHorizontal .setSecondaryProgress((int) (progressbarHorizontal .getSecondaryProgress() * 1.18)); break; // 处理“减少进度"按钮事件 case R.id.button2: progressbarHorizontal.setProgress((int) (progressbarHorizontal .getProgress() * 0.88)); progressbarHorizontal .setSecondaryProgress((int) (progressbarHorizontal .getSecondaryProgress() * 0.88)); break; } } } main.xml 代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SMART圆形进度条1" /> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleSmallTitle"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SMART圆形进度条2" /> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SMART圆形进度条3" /> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleLarge" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SMART水平进度条4" /> <ProgressBar android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:max="100" android:progress="30" /> <ProgressBar android:id="@+id/progressBarHorizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:max="100" android:progress="30" android:secondaryProgress="60" android:layout_marginTop="20dp" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="进度增加" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="进度减小" /> </LinearLayout> </LinearLayout>

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

openstack学习笔记九 cinder基础配置

cinder 就是 云硬盘 配置cinder步骤 1 安装软件包,然后到keystone注册 创建必要的用户名 密码 服务 endpoint 2 设置配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 yum install openstack-cinder-y keystoneuser-create--namecinder--passhequan keystoneuser-role-add--usercinder--roleadmin--tennatservices keystoneservice-create--namecinder-- type volume--descriptioncinderxxx 例子关于cul keystoneservice-list |d1271040fa9144318a836a0b476d1e66|cinder|volume|CinderService| keystoneendpoint-list| grep d1271040fa9144318a836a0b476d1e66 |8e18c46fc51c4a6287ea740a37537a59|RegionOne|http: //115 .29.107.17:8776 /v1/ %(tenant_id)s|http: //115 .29.107.17:8776 /v1/ %(tenant_id)s|http: //115 .29.107.17:8776 /v1/ %(tenant_id)s|d1271040fa9144318a836a0b476d1e66| keystoneendpoint-create--service- id d1271040fa9144318a836a0b476d1e66--publicul 'http://115.29.107.17:8776/v1/%(tenant_id)s' --internalurl 'http://115.29.107.17:8776/v1/%(tenant_id)s' --adminurl 'http://115.29.107.17:8776/v1/%(tenant_id)s' [root@hequan~(keystone_admin)] #cd/etc/cinder/ [root@hequancinder(keystone_admin)] #ls api- paste .inipolicy.jsonrootwrap.d cinder.confrootwrap.confvolumes [root@hequancinder(keystone_admin)] #cpcinder.confcinder.conf.bak##备份 [root@hequan~(keystone_admin)] #cp/usr/share/cinder/cinder-dist.conf/etc/cinder/cinder.conf##复制配置文件 [root@hequancinder(keystone_admin)] #chownroot.cindercinder.conf##记得修改权限 [root@hequancinder(keystone_admin)] #openstack-db--init-servicecinder--passwordhequan--rootpw123456##创建数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [root@hequancinder(keystone_admin)] #vimcinder.conf [DEFAULT] logdir= /var/log/cinder state_path= /var/lib/cinder lock_path= /var/lib/cinder/tmp volumes_dir= /etc/cinder/volumes iscsi_helper=lioadm rootwrap_config= /etc/cinder/rootwrap .conf auth_strategy=keystone [database] connection=mysql: //cinder :hequan@115.29.107.17 /cinder [keystone_authtoken] admin_tenant_name=services admin_user=cinder admin_password=hequan auth_host=115.29.107.17 auth_port=35357 auth_protocol=http [root@hequancinder(keystone_admin)] #grep^rabbit/etc/keystone/keystone.conf rabbit_host=localhost rabbit_port=5672 rabbit_hosts=localhost:5672 rabbit_use_ssl=False rabbit_userid=guest rabbit_password=guest rabbit_virtual_host=/ rabbit_ha_queues=False ##把这些写到上面的配置文件里,通信用 [root@hequancinder(keystone_admin)] #systemctllist-unit-files|grepcinder openstack-cinder-api.serviceenabled ##用户接口 openstack-cinder-backup.serviceenabled ##备份 openstack-cinder-scheduler.serviceenabled ##调度 openstack-cinder-volume.serviceenabled ##后端存储卷 [root@hequancinder(keystone_admin)] #systemctlis-activeopenstack-cinder-api.service active [root@hequancinder(keystone_admin)] #systemctlstartopenstack-cinder-api.serviceopenstack-cinder-backup.serviceopenstack-cinder-scheduler.serviceopenstack-cinder-volume.service [root@hequancinder(keystone_admin)] #systemctlenableopenstack-cinder-api.serviceopenstack-cinder-backup.serviceopenstack-cinder-scheduler.serviceopenstack-cinder-volume.service 再创建一个cinderv2和上面一样 |8fe36f49892447679bc5433b21591906|cinderv2|volumev2|CinderServicev2| |75a8f5bbf35a42a0bfcd2e6a0d4cea9c|RegionOne|http: //115 .29.107.17:8776 /v2/ %(tenant_id)s|http: //115 .29.107.17:8776 /v2/ %(tenant_id)s|http: //115 .29.107.17:8776 /v2/ %(tenant_id)s|8fe36f49892447679bc5433b21591906| 2 修改配置 1 2 3 4 5 [root@hequancinder(keystone_admin)] #cinderlist +----+--------+------------------+------+------+-------------+----------+-------------+-------------+ |ID|Status|MigrationStatus|Name|Size|VolumeType|Bootable|Multiattach|Attachedto| +----+--------+------------------+------+------+-------------+----------+-------------+-------------+ +----+--------+------------------+------+------+-------------+----------+-------------+-------------+ 1 2 3 4 5 6 创建VG [root@hequancinder(keystone_admin)] #pvcreate/dev/xvdb [root@hequancinder(keystone_admin)] #vgcreatecinder-volumes/dev/xvdb [root@hequancinder(keystone_admin)] #vgs VG #PV#LV#SNAttrVSizeVFree cinder-volumes100wz--n-20.60g20.60g 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [root@hequancinder(keystone_admin)] #cindercreate--display-namevoll1 +---------------------------------------+--------------------------------------+ |Property|Value| +---------------------------------------+--------------------------------------+ |attachments|[]| |availability_zone|nova| |bootable| false | |consistencygroup_id|None| |created_at|2016-07-27T15:14:07.000000| |description|None| |encrypted|False| | id |7f778803-41cd-492f-b3b7-baa349b9c3dc| |metadata|{}| |migration_status|None| |multiattach|False| |name|voll| |os-vol-host-attr:host|None| |os-vol-mig-status-attr:migstat|None| |os-vol-mig-status-attr:name_id|None| |os-vol-tenant-attr:tenant_id|ddac36f63e4547e0a8619574dbc41534| |os-volume-replication:driver_data|None| |os-volume-replication:extended_status|None| |replication_status|disabled| |size|1| |snapshot_id|None| |source_volid|None| |status|creating| |user_id|9382216e2ea540a2af70216577dbed00| |volume_type|None| +---------------------------------------+--------------------------------------+ [root@hequancinder(keystone_admin)] #cinderlist +--------------------------------------+-----------+------------------+------+------+-------------+----------+-------------+-------------+ |ID|Status|MigrationStatus|Name|Size|VolumeType|Bootable|Multiattach|Attachedto| +--------------------------------------+-----------+------------------+------+------+-------------+----------+-------------+-------------+ |7f778803-41cd-492f-b3b7-baa349b9c3dc|available|-|voll|1|-| false |False|| +--------------------------------------+-----------+------------------+------+------+-------------+----------+-------------+-------------+ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ##添加到上面的配置cinder.conf中作为单独字段 [lvm] iscsi_helper=lioadm volume_group=cinder-volumes ##那个组决定默认存储 iscsi_ip_address=115.29.107.17 volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver ##云硬盘默认存储LVM volumes_dir= /var/lib/cinder/volumes iscsi_protocol=iscsi volume_backend_name=lvm [root@hequancinder(keystone_admin)] #lvs LVVGAttrLSizePoolOriginData%Meta%MoveLogCpy%SyncConvert volume-7f778803-41cd-492f-b3b7-baa349b9c3dccinder-volumes-wi-a-----1.00g [root@hequancinder(keystone_admin)] #lvscan ACTIVE '/dev/cinder-volumes/volume-7f778803-41cd-492f-b3b7-baa349b9c3dc' [1.00GiB]inherit 1 2 3 4 5 6 更换名字 volume_group=vg0 [root@hequancinder(keystone_admin)] #vgrenamecinder-volumesvg0##更改名字 [root@hequan~] #vgs VG #PV#LV#SNAttrVSizeVFree vg0120wz--n-20.60g9.60g 1 2 3 4 5 6 7 8 9 10 11 待测试ceph做后端存储具体ceph配置可看我前一篇glance volume_driver=cinder.volume.drivers.rbd.RBDDriver rbd_pool=cinder #ceph卷名字 rbd_ceph_conf= /etc/ceph/ceph .conf rbd_flatten_volume_from_snapshot= false rbd_max_clone_depth=5 rbd_stone_chunk_size=4 rados_connect_timeout=-1 glance_api_version=2 setfacl-mu:cinder:r-- /etc/ceph/ceph .client.admin.keyring ##cinder可读 本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1830981,如需转载请自行联系原作者

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

openstack学习笔记二 网络设置基础

租用这个服务的机构,我们称之"租户/tenant/项目/project" 租户 用户 vxlan划分租户 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@h1~] #ipaddr 1:lo:<LOOPBACK,UP,LOWER_UP>mtu65536qdiscnoqueuestateUNKNOWN link /loopback 00:00:00:00:00:00brd00:00:00:00:00:00 inet127.0.0.1 /8 scopehostlo valid_lftforeverpreferred_lftforever 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscmqstateUPqlen1000 link /ether 00:50:56:a0:b6:6bbrdff:ff:ff:ff:ff:ff inet192.168.1.201 /24 brd192.168.1.255scopeglobaleth0 valid_lftforeverpreferred_lftforever 3:ovs-system:<BROADCAST,MULTICAST>mtu1500qdiscnoopstateDOWN link /ether 36:26:25:65:14:9cbrdff:ff:ff:ff:ff:ff 4:br-ex:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscnoqueuestateUNKNOWN link /ether de:4c:6d:9c:15:4dbrdff:ff:ff:ff:ff:ff 5:br-int:<BROADCAST,MULTICAST>mtu1500qdiscnoopstateDOWN link /ether ce:0b:9b:b5:c1:4dbrdff:ff:ff:ff:ff:ff 6:br-tun:<BROADCAST,MULTICAST>mtu1500qdiscnoopstateDOWN link /ether ae:75:26:fb:f8:42brdff:ff:ff:ff:ff:ff 你想把哪个网络作为数据包的出口,那么你就应该把那个网卡桥接到 br-ex openvswitch 简称 ovs 配置网卡 重点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@h1network-scripts] #catifcfg-eth0 DEVICE=eth0 DEVICETYPE=ovs TYPE=OVSPort OVS_BRIDGE=br-ex ONBOOT= yes BOOTPROTO=none [root@h1network-scripts] #catifcfg-br-ex DEVICE=br-ex DEVICETYPE=ovs TYPE=OVSBridge ONBOOT= yes BOOTPROTO=none IPADDR=192.168.1.201 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=202.106.0.20 1 2 3 4 5 6 7 8 9 10 查看网卡 2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscmqmasterovs-systemstateUPqlen1000 link /ether 00:50:56:a0:b6:6bbrdff:ff:ff:ff:ff:ff 3:ovs-system:<BROADCAST,MULTICAST>mtu1500qdiscnoopstateDOWN link /ether d2:18:7d:5e:5e:b9brdff:ff:ff:ff:ff:ff 5:br-ex:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscnoqueuestateUNKNOWN link /ether 00:50:56:a0:b6:6bbrdff:ff:ff:ff:ff:ff inet192.168.1.201 /24 brd192.168.1.255scopeglobalbr-ex valid_lftforeverpreferred_lftforever 管理员登陆http://192.168.1.201/dashboard 选择系统--网络--创建网络 创建,点击网络名称put-ex 下一步 创建一个项目,创建一个新的用户,新用户关联项目。 用新的用户登录,创建网络 先创建网络,然后创建路由,连到网络上,最后添加端口 本文转自 295631788 51CTO博客,原文链接:http://blog.51cto.com/hequan/1795705,如需转载请自行联系原作者

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

Mocha BSM基础架构管理——IT资产管理

业务需求与挑战 一般企业领导在做出购买设备的决策的时候总是很头痛,心里总是有这些问题: • 到底现在库存里有多少设备? • 有多少设备在维修? • 有没有设备借给别的部门? • 有多少设备已经报废了? • 企业装了哪些软件? • 有多少设备超过了折旧年限? • 某一个厂家的设备好不好用,返修率高吗? • 这些年来的IT资产投入有多大? 企业永远在面临着——追踪一个动态的IT资产,IT资产天天都在变,如果用手工统计是跟不上的。设备的管理不规范,到底谁领用了设备,设备在哪里成为一个企业的一大困惑。这些难题让企业的IT领导工作难上加难。 关键功能与亮点 以Portal为中心的灵活展现 轻易地通过浏览器访问,不用在终端装任何的客户端软件。Portal也能界面整合任何第三方IT资产相关的系统。 设备与软件管理 自动发现IT资产,追踪永远动态的企业IT资产。发现的设备包括: • 通过Agentless方式,发现Unix或者Linux服务器 • 通过SNMP方式,发现网络设备 • 通过WMi方式,发现Windows设备 IT资产生命周期管理 包括库存、领用、维修、借调、折旧、报废在内的全生命周期管理 支持非标准的IT资产 用户可以自定义不同的IT资产类别,所以系统可以支持不同种类的IT资产,甚至非IT资产。 IT资产变更管理 IT资产都有很多的配件,包括CPU,内存。这些配件都很容易丢失,Mocha ITAM追踪这些配件的变更,一旦发生变更,就可以发短信给相关的负责人。 软件管理 追踪企业安装的不同软件,可以设定不同的软件分类。 支持流程化管理 所有相关IT资产的领用,维修等都能通过流程来支持。 其他关键功能 • 供应商、厂家管理; •追踪对供应商和厂家的满意度; • 服务合同管理; • 追踪不同服务合同与设备的关联关系,以及服务合同的服务期限,在合同到期之前提醒相关的负责人; • 提供了丰富的报表功能以及补丁管理。 我们给客户带来什么 摩卡IT资产管理除了解决企业客户所面临的困惑,并且带来以下价值: • 让企业客户知道他们拥有什么IT资产; • 让企业客户知道IT资产在哪里; • 让企业客户知道IT资产是怎么被用。 在整个过程中,Mocha ITAM帮企业到了以下: • 提高整个IT资产投资回报率。IT资产得到很好的跟踪,不会再被闲置,用起来的整体效率提高了; • IT部门领导在做IT资产方面的决策就更容易了,更加科学,都是以具体数字为依据; • 通过IT资产管理的规范化和流程化管理,降低了IT资产的成本; • 提高IT部门对IT资产方面服务的响应,IT资产现在很容易就能追踪得到; • 降低不必要的成本以及风险。 更多相关信息,请点击 [url]http://www.mochabsm.com[/url] 本文转自赖永锋51CTO博客,原文链接:http://blog.51cto.com/mochasoft/86446 ,如需转载请自行联系原作者

资源下载

更多资源
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等操作系统。

用户登录
用户注册