自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 lvm磁盘管理常用方法

绿色的方框是lv,可以理解为逻辑分区,例如vg一共500G,就可以分成5个100G的lv,也就是5个100G的分区,在lv上就可以制作文件系统了。如果是新安装的系统,那么在Ubuntu安装界面就有lvm的分区,不需要额外的操作,进入系统后也可以进行lv大小的调整。创建一个test的lv,并且给他31G的空间,创建完成后就可以进行文件系统格式化了,挂载后就可以正常使用了。黄色的框就是vg,可以理解为pv的集合,磁盘需要多大空间就从vg里面拿,从vg里面,给刚才新建的lv增加10G的空间。

2023-05-20 17:02:36 193

原创 linux 开机自动挂载加密磁盘

解释crypt: 是cryptsetup luksOpen /dev/mapper/ubuntu--vg-test crypt /dev/mapper/ubuntu--vg-test: lv 名字 解释/dev/mapper/crypt :解密后的映射路径/mnt/xxx: 挂载路径ext4:文件格式 defaults: 是 /etc/fstab 文件中的一个文件系统挂载选项,它是一组预定义的选项,用于指定文件系统的挂载方式。使用 defaults 挂载选项,可以启用文件系统的默认设置,这些设置

2023-05-20 16:25:06 579

原创 cryptsetup 使用tresor加密模式加密磁盘

如果想使用tresor加密磁盘,首先需要kernel中添加tresor的补丁,cryptsetup原生支持kernel支持的加密模式,想看自己的kernel都支持那种加密模式,可以cat /proc/crypt进行查看。

2023-05-20 16:16:39 194

原创 cryptsetup 使用说明 中文翻译

-perf-submit_from_crypt_cpus 使用 dm-crypt submit_from_crypt_cpus 性能兼容选项。--serialize-memory-hard-pbkdf 使用全局锁对内存困难的 PBKDF 进行串行化(OOM 解决方法)--perf-same_cpu_crypt 使用 dm-crypt same_cpu_crypt 性能兼容选项。open [--type ] [] - 以 打开设备。

2023-05-20 16:04:26 723

原创 go语言基础 事务:transaction

原子性,一致性,隔离性,持久性 手动开启事务:db.Begin()-->Tx 一组sql操作 tx.Exec(),tx.Prepare()... 手动提交提交,回滚 tx.Commit(),tx.Rollback()package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mys...

2018-05-07 18:56:18 9128

原创 go语言基础 反射 reflect

反射reflectstruct reflect.TypeOf(i interface{})-->Type 获取结构体的字段的类型,字段名 方法的类型,方法的名字package mainimport ( "fmt" "reflect")type Person struct { Name string Age int Sex string}fun...

2018-05-07 18:56:11 341

原创 go语言基础 链接MySQL

插入操作:step1:导包 "database/sql" _ "github.com/go-sql-driver/mysql"step2:打开数据库,建立连接 db,_:=sql.Open("mysql","root:xxx@tcp(127.0.0.1:3306)/my1802?charset=utf8") // xxx是密码step3:操作数据库: stmt_:=db.Prepare("sql ...

2018-05-05 15:35:30 327

原创 MySQL DQL语言数据查询语言

1.基本查询 select 字段,字段 。。。from 表名 as,distinct。。。2.条件查询 select 。。。from 表名 where[查询条件] 比较运算符:>,<,>=,<=,=,!=,<> 逻辑运算符:and or not, &&,||,! 排序:order by 聚合函数:max(),min(),count(),sum(...

2018-05-05 15:35:21 272

原创 go语言基础 读写工具 ioutil包

大家有没有觉得用os包下读写文件很麻烦呀,先要打开文件,然后读取文件,然后再用[]byte数组在一点一点去读去写,下面我来给大家介绍一个很好用的方法,iotuil包,这里面方法不多但是都是很方便的方法,都是封装好的,文件不用打开,直接拿来用就可以了ioUtil包 ReadFile(filename)-->[]byte data  ***** 读取指定文件中的所有内容,返回一个切片,err返...

2018-05-05 15:35:12 780

原创 MySQL基础 DML语言 (数据操纵语言) DDL语言 (数据定义语言)DQL语言 (数据查询语言)

DDL语言,数据定义语言 创建数据库,创建数据表,修改表结构,删除表。。。创建数据库create database if not exists 数据库名 default charset utf8 collate utf8_general_ci;创建数据表create table if not exists 表名( 字段名 字段类型 约束 默认值, 字段名 字段类型....);修改表alter ta...

2018-05-05 15:35:01 217

原创 MySQL 约束 结果集合并

约束:默认值default非空not null唯一unique主键primary key auto_increment 外键foreign key 主表,从表-- 单行注释/*多行注释结果集合并1. 要求被合并的表中,列的类型和列数相同2. UNION,去除重复行3. UNION ALL, 不去除重复行...

2018-05-05 15:34:52 346

原创 go语言基础 TCP编程 结合Goroutine 多个客户端访问一个服务器

我们平时可以多个用户往一个服务器中上传文件,这是可以通过TCP编程来做到的,我们只要结合go语言的并发,就可以做到先是服务器package mainimport ( "net" "os" //"fmt" "io" "fmt")func main() { tcpaddr, _ := net.ResolveTCPAddr("tcp", "

2018-05-05 15:34:36 1617

原创 go语言基础 TCP编程 客户端和服务器

TCP编程的操作步骤:服务器和客户端 服务端: step1:指定自己的ip(本机ip)和端口 net.ResolveTCPAddr("tcp4",string)-->TCPAddr   step2:获取监听器,监听端口 listener,err:=net.ListenTCP(tcpAddr)   step3:接收客户端的连接请求 listener.Accept()-->conn ...

2018-05-05 15:34:27 585

原创 go语言基础 网络编程socket编程基本概念

1.网络编程 socket -->TCP,UDP TCP:面向连接编程 类比于打电话 数据安全,效率低(反复的确认,3次握手) UDP:面向无连接编程 类比于写信 数据不安全,效率高(只负责发送数据。。)2.网络编程的三要素1.ip 计算机在互联网中的地址,唯一标识。2.port 网络应用程序:端口 0-65535 0-1024,公共端口号 可以使用的一些端口  54321,95...

2018-05-05 15:34:19 178

原创 go语言基础 select语句

select语句,专门用于通道的使用 select { case 通道的读写 }哪个case可以执行就执行哪个。如果有多个case可以执行,随机选择一个case执行。如果没有case可以执行,有defaute执行defaulte,如果没有defaute进入阻塞package mainimport ( "fmt" "time")func main() { /* 分支...

2018-05-05 15:34:12 308

原创 go语言基础 生产者和消费者模型

生产者和消费者模型的概念 生产者:一个goroutine,向通道中发送数据 消费者:一个goroutine,从通道中接收数据 可以是N个生产者对应N个消费者。这是一个生成者对应两个消费者package mainimport "fmt"func main() { /* 一条goroutine,生产数据,理解为生产者 两条goroutine,获取数据,理解为消费者 ...

2018-05-05 15:33:56 376

原创 go语言基础 定向通道

定向通道 默认的通道是双向的:make(chan T) 可读,可写 发送数据:chan <- data 读取数据:<- chan 定向的,也叫单向的通道 只读:只能接收 <- chan T 只写:只能发送 chan <- T 用于参数的传递 函数中:只有读的操作,可以传只读的通道package mainimport "fmt"func main()...

2018-05-04 09:07:21 222

原创 go语言基础 缓存通道 channel

缓存的通道 非缓存的通道,发送和接收都是阻塞 带缓存的通道,有一块缓存区可以继续发送和接收数据。 make(chan T, size) 缓存区中已经满了,才会阻塞程序 ch1:=make(chan int, 5) ch1 <- 100//不阻塞,因为有缓存 ch1 <- 200// ch1 <- 300 ch1 <- 400 ch1 <- 500 ...//缓存区已满...

2018-05-04 09:07:11 2040 2

原创 go语言基础 通道 channel

1.通道的概念: Channel,通道,专门用于goroutine之间传递消息 也是一种引用类型的数据:可以作为参数,也可以作为返回值 语法: 1.创建:make(chan T) 2.使用: 发送数据:写 chan <- data 接收数据:读 data := <- chan 通道的阻塞: 不带缓存:发送和接收都是阻塞的。 发送是阻塞的,直到有另一个gor...

2018-05-04 09:07:01 404

原创 go 语言基础 读取文件os包 获取文件信息

os包 Stat()-->FileInfo 获取文件的信息: Name() 文件名 IsDir() 判断是否是目录 ModTime()修改时间 Mode()文件权限  Size() 文件大小package mainimport ( "fmt" "os")func main() { /* 文件操作: */ fileInf...

2018-05-04 09:06:18 3144

原创 go语言基础 写出数据 Writer() os包

第一步 首先打开一个文件,如果该文件不存在就创建一个,并且写入权限OpenFile(filename,flag,perm)-->*File,err  ***** filename:文件名字  flag,获取file的打开模式: O_RDONLY  只读 O_WRONLY  只写 O_RDWR      可读可写 O_CREATE    创建文件 perm,如果文件不存在...

2018-05-04 09:05:51 3290

原创 go语言基础 文件读取Read os包

os.Open()-->返回值*File,err  ***** 打开后可以File.Read([]byte)-->count,err,读取数据,读取完毕err会显示EOF,来证明整个文件读取完毕,打开文件后不要忘记关闭哈可以利用defer,延迟 最后关闭derer File.close 关闭文件package mainimport ( "os" "fmt" "io...

2018-05-04 09:05:33 3447

原创 go语言基础 filepath包

filepath包 Abs() 获取绝对路径:程序中以当前工程为参照。 IsAbs() 判断是否是绝对路径 绝对路径:Absolute 从跟盘符开始描述 相对路径:Relative 相对于参照物 fmt.Println(filepath.IsAbs("aa.txt"))//false fmt.Println(filepath.IsAbs("C:\\liu\\pro\\aa.t...

2018-05-04 09:05:25 240

原创 go语言基础 seek 光标位置 os包

语法:os.Open()-->*File,err  *****File.Seek(offset, whence),设置光标的未知 offset,偏移量 whence,从哪开始:0从头,1当前,2末尾package mainimport ( "os" "fmt")func main() { /* seek(offset int, whence int...

2018-05-04 09:05:15 8222

原创 go语言基础 文件创建,打开,删除 os包

os包下,文件目录可以创建,打开,删除等等一些操作,废话不多我们上代码package mainimport ( "os" "fmt" "path/filepath")func main() { //1.创建一个目录,仅创建一层 //err:=os.Mkdir("C:\\liu\\pro\\aa", 0666) //fmt.Println(err) ...

2018-05-04 09:05:06 1369

原创 go语言基础 文件拷贝 copy io包

io包下有个方法copy,拷贝文件这个比较复杂,go语言中有个更加简单的方法,这个就了解下复制的过程就可以了package mainimport ( "fmt" "os" "io")func main() { //destName:="C:\\Ruby\\aa.jpeg" //目标文件 destName :="image\\bb.jpeg" srcN...

2018-05-04 09:04:50 5491

原创 go语言基础 利用递归遍历文件夹

我们可以利用递归和ioutil.ReadDir(遍历当前所有文件),IsDir(判断是否是目录)方法,来遍历整个文件夹package mainimport ( "io/ioutil" "fmt")func main() { dirname:="C:\\liu\\pro" //1层:mmm,3个子内容 //fileInfos,_:=ioutil.ReadDi...

2018-05-03 08:51:20 1414

原创 go语言基础 断点续传

我们可以利用读写来复制文件,也可以在复制的同时,再新建一个临时文件保存读写的进度,如果有意外发生,我们还可以通过临时文件中的进度,来继续复制文件package mainimport ( "os" "fmt" "strconv" "io")func main() { /* 思路:断点续传,边复制,边记录复制的数据量 */ srcName:...

2018-05-03 08:51:10 1635

原创 go语言基础 同步等待组 sync.WaitGroup

为了能让子Goroutine执行完毕之后,主程序在结束,我们可以给利用sync.WaitGroup方法,这样就主程序就不会提前结束了。package mainimport ( "fmt" "sync")var wg sync.WaitGroup // 创建同步等待组对象func main() { /* WaitGroup:同步等待组 可以使用Add(...

2018-05-03 08:50:57 1778

原创 go语言基础 共享资源竞争 互斥锁sync.Mutex

共享资源竞争: 多个goroutine操作同一个共享数据,存在不安全。i:=1go func(){ //第一个Goroutine 我们叫他g1 if i>0{ //①第一次g1执行到这里的时候,资源被g2抢走 i-- fmt.Pringtln(i) //输出i=0 }}// ③然后g1抢回资源 执行结束 此时i已经等于0go func(){ ...

2018-05-03 08:50:46 362

原创 go语言基础 并发

.并发性、并行性 Concurrency并发性 同时可以执行多条路径,但是同一时间点上,只能执行1个。 parallelism并行性 多条路径同时执行,真正的并行多核支持。2.进程,线程,协程-->多任务进程process:正在执行的程序。线程thread:进程中的一条执行路径。。协程coroutine:轻量级的线程。 高并发3.go语言中的goroutine,就是go的协程的实现。4.启动...

2018-05-03 08:50:34 132

原创 go 语言基础 进程Process 线程Thread 协程Goroutine

进程,Process何为进程,简单来讲进程就是我们计算机里启动的程序,每启动一个程序,就启动了一条进程如图片所示,这个叫活动监视器,后面还有个括号,写着所有进程,所以这些程序就是所谓的进程,如果进程结束,那么所有线程,协程也都会结束那我们知道了进程 ,那线程又是什么呢线程 Thread还是这张图,细心的朋友应该已经看到了,每个程序后面都会有一列是线程,对没错,线程就是每个程序里单出来的一条线,一个...

2018-05-03 08:50:15 1985

原创 go语言基础 时间time包

time包下有很多跟时间有关系的方法,以前我们介绍的随机数就是利用了time包下的一个方法,接下来我再来介绍一些常用方法日期和时间 Now()-->Time,获取当前的日期 Date()-->Time,获取指定的日期 time-->string,        string-->time        格式化打印当前时间,要按照go语言特定的格式输入也就是2006 1 2 ...

2018-05-03 08:49:34 2620

原创 go 语言基础 字符串string与其他类型转换 strconv包

strconv包下有一些可以转换类型的函数,以后遇到类型不匹配,可以直接调包,用来转换类型,接下来我就来介绍一下常用的字符串和基本类型之间的转换 int,uint,float,bool = XXX string-->基本类型 strconv.ParseXXX() 基本类型-->string strconv.FormatXXX()        字符串直接转成整型     strco...

2018-05-03 08:49:23 400

原创 go语言基础 数学包 math

介绍几个math包下常用的方法,知道这些方法后以后就不用自己去实现,直接调用就好package mainimport ( "fmt" "math")func main() { /* math包: */ i := -100 fmt.Println(math.Abs(float64(i))) //绝对值 fmt.Println(math.Ce...

2018-05-03 08:49:12 41314 2

原创 go语言 defer 延迟关键字

defer  延迟 延迟执行,函数,方法 如果有多个延迟,按照后进先出的规则: 先延迟的后执行,后延迟的先执行 package mainimport "fmt"func main(){// 程序的入口/*defer,延迟,等到其他的程序执行结束才执行 defer函数用于最后执行。defer函数有多个,按照后进先出的规则: -->栈的结构: 先延迟的后执行...

2018-05-03 08:48:57 123

原创 go语言基础 恐慌和恢复 panic和recover

panic和recover panic(),恐慌,直接打断程序的正常执行。。。 recover(),恢复,会在函数中捕获panic()然后跳过panic执行下面的程序 必须在defer的函数中使用recoverpackage mainimport "fmt"func main() { /* go中的异常处理: 用defer panic recover ...

2018-05-02 09:15:12 992

原创 go语言基础 实现error接口

Error是个接口,有两种可以自定义错误信息的方法第一种errors.New(string) 在errors包下,有封装号好了的方法直接在里面写上错误信息就可以err = errors.New("写错了")第二种 就是声明一个结构体,直接实现Error接口里的方法package mainimport "fmt"//1.定义一个结构体,实现error接口type RectError str...

2018-05-02 09:14:47 1424

原创 go语言基础 错误 error

错误error 表示程序中的错误。 用法:用于函数多返回值。func 函数名(参数列表)(返回值,error){}xx,err:=函数名()if err == nil,函数执行无误,结果有效,可以继续向下执行else err != nil,有错误产生了,函数执行过程中有问题。 error的类型:interface,系统的内置接口类型type error interface{ Error() str...

2018-05-02 09:14:28 203

原创 go语言基础 空接口

空接口:一个接口中没有任何的方法。    任意的对象都可以是该接口的实现类。空接口类型的数组:    那么该数组中就可以存储任意类型的数据。空接口作为参数:可以传入任意类型的数据。package mainimport "fmt"//定义一个接口:// 一个或多个方法的集合,叫接口,如果一个方法都没有,叫空接口//实现类:对于空接口,type Animal3 interface { ...

2018-05-02 09:14:15 1592

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除