结构体是否可以比较

在@@Golang@@项目开发中,有时会有比较结构体是否相等的情况,通过@@Golang@@的语言特性可以总结为两点结论:只有相同类型的结构体才可以比较,结构体是否相同不但与属性类型个数有关,还与属性顺序相关;结构体是相同的,但是结构体属性中有不可以比较的类型,如 @@map@@, @@slice@@, @@channel@@, @@function@@ 则结构体不能用 == 比较。下面通过一个示例来看看,结构体哪些可以比较哪些不可以比较。 先来看一段示例代码: 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 …

阅读全文

网络安全(六)| 路由器(Route)

路由器是连接两个或多个分组交换网络或子网络的设备。它有两个主要功能:通过将数据包转发到其预定的 IP 地址从而管理这些网络之间的流量,以及允许多个设备使用同一互联网连接。 路由器分为几种类型,但大多数路由器在 LAN(局域网)和 WAN(广域网)之间传递数据。LAN 是一组限制在特定地理区域的连接设备。一个 LAN 通常只需要一个路由器。 与之相反,WAN 是一个分布在广大地理区域的大型网络。例如,在全国各地多个地点运营的大型组织和公司将需要为每个地点建立单独的 LAN,然后与其他 LAN 连接,形成一个 WAN。由于 WAN 分布在一个大的区域内,它通常需要多个路由器和交换机*。 网络交换机 …

阅读全文

网络安全(五)| IP 路由(IP Routing)

网络路由是选择一个或多个网络上的路径的过程。路由原理可以应用于从电话网络到公共交通的任何类型的网络。在诸如互联网等数据包交换网络中,路由选择互联网协议 (IP) 数据包从其起点到目的地的路径。这些互联网路由决定由称为路由器的专用网络硬件做出。 如上图所示,对于要从计算机 A 到达计算机 B 的数据包,它应该通过网络 1、3 和 5 还是通过网络 2 和 4?数据包通过网络 2 和 4 的路径会更短,但是网络 1、3 和 5 在转发数据包时可能比 2 和 4 更快。这些都是网络路由器不断做出的选择类型。 路由如何工作? 路由器通过参考内部路由表来决定如何沿网络路径路由数据包。路由表记录了数据包应 …

阅读全文

网络安全(四)| 网络安全(Network security)

网络安全是一类使内部网络免受攻击和数据泄露的实践和技术。它包括访问控制、网络攻击防护、恶意软件检测和其他安全措施。 “网络安全”最常用于指对大型企业网络的保护。 网络定义 网络是由两个或多个连接的计算设备组成的群体。网络的规模涵盖小型的个人区域网络 (PAN) 和局域网 (LAN) 到大型的广域网 (WAN),这些网络跨越很远的距离连接小型网络。 如今,几乎所有企业都依赖某种类型的网络来提高生产力,无论是允许员工访问互联网的 LAN、连接各个办公地点的 WAN,还是在云中执行这些功能的网络即服务 (NaaS)。 有哪些常见的网络安全风险? 像任何重要的企业资产一样,网络可能以各种方式受到损害。 …

阅读全文

网络安全(三)| 安全访问服务边缘(SASE)

安全访问服务边缘简称 SASE,是一种基于云的 IT 模型,它将软件定义的网络与网络安全功能捆绑在一起,并从单一服务提供商交付。“SASE”一词由全球研究和咨询公司 Gartner 在 2019 年提出。 SASE 方法可以更好地控制和了解访问公司网络的用户、流量和数据,这些功能对于现代全球分布的组织来说至关重要。使用 SASE 构建的网络灵活且可扩展,能够通过任何设备连接分布在全球各地的员工和办公室。 SASE 包括哪些安全功能? SASE 将软件定义的广域网 (SD-WAN) 功能与一些网络安全功能相结合,所有这些功能都从一个云平台提供。通过这种方式,SASE 让员工能够从任何地方进行身分 …

阅读全文

网络安全(二)| 网络即服务(NaaS)

网络即服务 (NaaS) 是一种云服务模式,在这种模式中,客户从云供应商那里租用网络服务。NaaS 允许客户操作他们自己的网络,而不需要维护他们自己的网络基础设施。与其他云服务一样,NaaS 供应商使用软件运行网络功能,其本质上允许公司完全在没有硬件的情况下建立自己的网络。他们只要有互联网连接即可。 NaaS 可以取代虚拟专用网络 (VPN)、多协议标签交换 (MPLS) 连接或其他传统的网络配置。它还可以取代内部网络硬件,如防火墙设备和负载平衡器。作为一种较新的路由流量和应用安全策略的模式,NaaS 对企业网络架构产生了重大影响。 NaaS 的发展过程 当大多数企业配置他们的网络基础设施时, …

阅读全文

网络安全(一)| 企业网络(Enterprise networking)

网络是一组相互连接的计算机,而企业网络就是这样一个为满足大型企业的需求而构建的组。企业网络由局域网 (LAN) 组成,局域网又连接到广域网 (WAN) 和云。 在企业环境中,数据中心、分支机构、公共和私有云、物联网 (IoT) 设备以及组织的个人员工都需要可靠的网络连接。这些连接让企业能够交换数据、运行业务流程并分析网络上发生的事情——从本质上讲,网络使运行业务成为可能。 与互联网不同,企业网络并非对所有想连接的人开放。企业网络将连接限制在特定的用户、设备和设施。它们通常使用虚拟专用网络 (VPN) 或传输层安全性 (TLS) 加密对通过它们的数据进行加密。 企业网络也因其规模而不同于其他类型 …

阅读全文

Golang设计模式(二) | 工厂模式

工厂模式(Factory Pattern)是面向对象编程中的常用模式。在 Golang 项目开发中,你可以通过使用简单工厂模式、抽象工厂模式、工厂方法模式,来使代码更简洁明了。 简单工厂模式返回结构体类型;而抽象工厂模式返回接口类型;工厂方法返回一个闭包,下面具体的看看每一种工厂模式的使用。 Golang 中的结构体,可以理解为面向对象编程中的类,例如 Student 结构体(类)实现了 SayHello 方法。 1 2 3 4 5 6 7 8 9 type Student struct { name string // 可以使用uint8类型表示例sex别, …

阅读全文

Golang设计模式(一) | 单例模式

单例模式(Singleton Pattern),是最简单的一个模式。在 Go 中,单例模式指的是全局只有一个实例,并且它负责创建自己的对象。单例模式不仅有利于减少内存开支,还有减少系统性能开销、防止多个实例产生冲突等优点。 因为单例模式保证了实例的全局唯一性,而且只被初始化一次,所以比较适合『全局共享一个实例,且只需要被初始化一次的场景』,例如数据库实例、全局配置、全局任务池等。 单例模式又分为饿汉方式和懒汉方式。饿汉方式指全局的单例实例在包被加载时创建,而懒汉方式指全局的单例实例在第一次被使用时创建。你可以看到,这种命名方式非常形象地体现了它们不同的特点。 接下来,我就来分别介绍下这两种方 …

阅读全文

Linux服务器设置时间

Linux服务器新安装系统时区有可能不正确,直接导致的结果就是所有产生的数据所使用的时间都不是本地时间,对数据的影响比较大,因为时区不正嘛,所以也就会出来这种情况。Linux服务器的时间设置,可以通过手动配置也可以通过网络进行同步,还可以通过修改系统的时区来达到我们的预期。 修改时区 通过修改时区的方式有两种方式,一种是即时生效,一种是重启生效。 即时生效 可以使用系统预置的时区文件中的 Shanghai 文件,对 /etc/localtime 文件进行覆盖操作: 1 $ sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 修改之后 …

阅读全文

MacOS使用VMware安装rockylinux

在MacOS系统下安装rockylinux首先就是需要安装一个虚拟机,MacOS系统虚拟机产品有 VMware、VirtualBox、PD可供选择使用,VirtualBox 是开源免费产品,不过在MacOS下个人使用的过程中感觉不够完美,PD 和 VMware 是收费产品,现阶段 PD 对 M1 处理器支持的比较好,不过好在 VMware 有一个 VMware Fusion Player 版本,可供个人使用,一直在使用感觉还不错,并且可以使用 vmrun 终端工具管理虚拟机非常方便。安装 VMware Fusion Player 之后需要安装 rockylinux,虚拟机安装@@Linux@@ …

阅读全文

撞库攻击

撞库攻击可能会使个人和企业数据面临严重风险。在这里,我们将进一步了解撞库攻击,如何进行检测和防范,以及为什么它们对企业和个人都构成如此大的威胁。 什么是撞库? 撞库攻击是网络犯罪分子试图使用一组帐密同时访问多个帐户。撞库之所以如此有效,是因为近三分之二的互联网用户重复使用他们的密码。网络犯罪分子在几分钟或几个小时的时间内即可将被盗的帐密输入数千个网站,从社交媒体帐户到公司专有软件等,都会受到影响。 撞库攻击的原理是什么? 撞库攻击取决于密码的重复使用。由于有很多人将密码重复用于多个帐户,因此仅凭一组帐密足以暴露其大部分或全部帐户。网络犯罪分子利用僵尸网络等工具在多个设备上执行多条战线攻击,只需 …

阅读全文

漏洞原理

文件上传漏洞 导致该漏洞的原因在于代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。 1、前端JavaScript过滤绕过 如果想要在一个开启了JavaScript验证的网站上传一句话木马,我们可以给浏览器设置代理,127.0.0.1,端口为8080.利用BurpSuite软件代理->打开intercept(拦截)->将木马的后缀名改为jpg格式->点击forward将数据包发回,这样就可以上传成功。最后用菜刀连接。 还有一种方法就是在地址栏输入:about:config,搜索javascript:enabled,双击关闭,也可以成 …

阅读全文

Go 私有库访问设置

私有库是那些不想公开的库,不开源或不共享的存储库,比如公司内部开发的go包,或自己个人Github服务器上的私有go包,通过go get直接下载私有包是不被允许的,要通过一些设置才可以访问私有存储库。 配置Git 1 $ git config --global url.git@github.com:.insteadOf https://github.com/ 最终会将上面执行的命令添加到git配置文件中,具体如下所示: 1 2 3 $ cat ~/.gitconfig [url "git@github.com:"] insteadOf = https://github.com/ …

阅读全文

Slice 具体使用

删除Slice的一个元素 1 2 3 func remove(slice []int, index int) []int { return append(slice[:index], slice[index+1:]...) } 清空Slice的所有元素 1 2 3 func remove(slice []int) []int { return slice[:0] }

阅读全文

Go系列教程(三十六) | 写入文件(Write File)

在这一章我们将学习如何使用 Go 语言将数据写到文件里面。并且还要学习如何同步的写到文件里面。 这章教程包括如下几个部分: 将字符串写入文件 将字节写入文件 将数据一行一行的写入文件 追加到文件里 并发写文件 请在本地运行所有本教程的程序,因为 playground 对文件的操作支持的并不好。 将字符串写入文件 最常见的写文件就是将字符串写入文件。这个写起来非常的简单。这个包含以下几个阶段。 创建文件 将字符串写入文件 我们将得到如下代码。 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 package …

阅读全文

Go系列教程(三十五) | 读取文件(Read file)

文件读取是所有编程语言中最常见的操作之一。本教程我们会学习如何使用 Go 读取文件。 本教程分为如下小节。 将整个文件读取到内存 使用绝对文件路径 使用命令行标记来传递文件路径 将文件绑定在二进制文件中 分块读取文件 逐行读取文件 将整个文件读取到内存 将整个文件读取到内存是最基本的文件操作之一。这需要使用 ioutil 包中的 ReadFile 函数。 让我们在 Go 程序所在的目录中,读取一个文件。我已经在 GOPATH(译注:原文是 GOROOT,应该是笔误)中创建了文件夹,在该文件夹内部,有一个文本文件 test.txt,我们会使用 Go 程序 filehandling.go 来读取 …

阅读全文

Go系列教程(三十四) | 反射(Reflection)

反射是 Go 语言的高级主题之一。我会尽可能让它变得简单易懂。 本教程分为如下小节。 什么是反射? 为何需要检查变量,确定变量的类型? reflect 包 reflect.Type 和 reflect.Value reflect.Kind NumField() 和 Field() 方法 Int() 和 String() 方法 完整的程序 我们应该使用反射吗? 让我们来逐个讨论这些章节。 什么是反射? 反射就是程序能够在运行时检查变量和值,求出它们的类型。你可能还不太懂,这没关系。在本教程结束后,你就会清楚地理解反射,所以跟着我们的教程学习吧。 为何需要检查变量,确定变量的类型? 在学习反射时, …

阅读全文

Go系列教程(三十三) | 函数是一等公民(Functions Are First Class Citizens)

什么是头等(第一类)函数? 支持头等函数(First Class Function)的编程语言,可以把函数赋值给变量,也可以把函数作为其它函数的参数或者返回值。Go 语言支持头等函数的机制。 本教程我们会讨论头等函数的语法和用例。 匿名函数 我们来编写一个简单的示例,把函数赋值给一个变量。 1 2 3 4 5 6 7 8 9 10 11 12 13 package main import ( "fmt" ) func main() { a := func() { fmt.Println("hello world first class function") } …

阅读全文

Go系列教程(三十二) | panic 和 recover(Panic and Recover)

什么是 panic? 在 Go 语言中,程序中一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。 但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 panic 来终止程序。当函数发生 panic 时,它会终止运行,在执行完所有的延迟函数后,程序控制返回到该函数的调用方。这样的过程会一直持续下去,直到当前协程的所有函数都返回退出,然后程序会打印出 panic 信息,接着打印出堆栈跟踪(Stack Trace),最后程序终止。在编写一个示例程序后,我们就能很好地理解这个概念了。 在本教程里,我们还会接着讨论,当程序发生 panic 时, …

阅读全文

Go系列教程(三十一) | 自定义错误(Custom Error)

在上一教程里,我们学习了 Go 中的错误是如何表示的,并学习了如何处理标准库里的错误。我们还学习了从标准库的错误中提取更多的信息。 在本教程中,我们会学习如何创建我们自己的自定义错误,并在我们创建的函数和包中使用它。我们会使用与标准库中相同的技术,来提供自定义错误的更多细节信息。 使用 New 函数创建自定义错误 创建自定义错误最简单的方法是使用 errors 包中的 New 函数。 在使用 New 函数 创建自定义错误之前,我们先来看看 New 是如何实现的。如下所示,是 errors 包 中的 New 函数的实现。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 …

阅读全文

Go系列教程(三十) | 错误处理(Error Handle)

什么是错误? 错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。 在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。 就像其他的内建类型(如 int、float64 等),错误值可以存储在变量里、作为函数的返回值等等。 示例 现在我们开始编写一个示例,该程序试图打开一个并不存在的文件。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package main import ( "fmt" "os" ) func main() { f, err …

阅读全文

Go系列教程(二十九) | 延迟调用(Defer)

什么是 defer? defer 语句的用途是:含有 defer 语句的函数,会在该函数将要返回之前,调用另一个函数。这个定义可能看起来很复杂,我们通过一个示例就很容易明白了。 示例 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 package main import ( "fmt" ) func finished() { fmt.Println("Finished finding largest") } func largest(nums []int) { defer …

阅读全文

Go系列教程(二十八) | 多态(Polymorphism)

Go 通过接口来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部方法,那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 使用接口实现多态 一个类型如果定义了接口的所有方法,那它就隐式地实现了该接口。 所有实现了接口的类型,都可以把它的值保存在一个接口类型的变量中。在 Go 中,我们使用接口的这种特性来实现多态。 通过一个程序我们来理解 Go 语言的多态,它会计算一个组织机构的净收益。为了简单起见,我们假设这个虚构的组织所获得的收入来源于两个项目:fixed billing 和 time and material。该组织的 …

阅读全文

Go系列教程(二十七) | 组合替代继承(Combination Replaces Inheritance)

Go 不支持继承,但它支持组合(Composition)。组合一般定义为“合并在一起”。汽车就是一个关于组合的例子:一辆汽车由车轮、引擎和其他各种部件组合在一起。 通过嵌套结构体进行组合 在 Go 中,通过在结构体内嵌套结构体,可以实现组合。 组合的典型例子就是博客帖子。每一个博客的帖子都有标题、内容和作者信息。使用组合可以很好地表示它们。通过学习本教程后面的内容,我们会知道如何实现组合。 我们首先创建一个 author 结构体。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package main import ( "fmt" ) type …

阅读全文

Go系列教程(二十六) | 结构体(Struct)

Go 支持面向对象吗? Go 并不是完全面向对象的编程语言。Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘录如下。 可以说是,也可以说不是。虽然 Go 有类型和方法,支持面向对象的编程风格,但却没有类型的层次结构。Go 中的“接口”概念提供了一种不同的方法,我们认为它易于使用,也更为普遍。Go 也可以将结构体嵌套使用,这与子类化(Subclassing)类似,但并不完全相同。此外,Go 提供的特性比 C++ 或 Java 更为通用:子类可以由任何类型的数据来定义,甚至是内建类型(如简单的“未装箱的”整型)。这在结构体(类)中没有受到限制。 在接下来的教程里,我们会讨论如何使用 Go …

阅读全文

Go系列教程(二十五) | Go互斥锁(Mutex)

本教程我们学习 Mutex。我们还会学习怎样通过 Mutex 和信道来处理竞态条件(Race Condition)。 临界区 在学习 Mutex 之前,我们需要理解并发编程中临界区(Critical Section)的概念。当程序并发地运行时,多个 Go 协程不应该同时访问那些修改共享资源的代码。这些修改共享资源的代码称为临界区。例如,假设我们有一段代码,将一个变量 x 自增 1。 1 x = x + 1 如果只有一个 Go 协程访问上面的代码段,那都没有任何问题。 但当有多个协程并发运行时,代码却会出错,让我们看看究竟是为什么吧。简单起见,假设在一行代码的前面,我们已经运行了两个 Go 协 …

阅读全文

Go系列教程(二十四) | Go Select

什么是 select? select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case 语句都是信道操作。我们好好看一些代码来加深理解吧。 示例 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 package main import ( "fmt" "time" ) func …

阅读全文

Go系列教程(二十三) | Go缓冲信道和工作池(Buffered Channels and Worker Pools)

什么是缓冲信道? 在上一教程里,我们讨论的主要是无缓冲信道。我们在信道的教程里详细讨论了,无缓冲信道的发送和接收过程是阻塞的。 我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况,才会阻塞向缓冲信道(Buffered Channel)发送数据。同样,只有在缓冲为空的时候,才会阻塞从缓冲信道接收数据。 通过向 make 函数再传递一个表示容量的参数(指定缓冲的大小),可以创建缓冲信道。 1 ch := make(chan type, capacity) 要让一个信道有缓冲,上面语法中的 capacity 应该大于 0。无缓冲信道的容量默认为 0,因此我们在上一教程创建信道时,省略 …

阅读全文

Go系列教程(二十二) | Go信道(channels)

在上一教程里,我们探讨了如何使用 Go 协程(Goroutine)来实现并发。我们接着在本教程里学习信道(Channel),学习如何通过信道来实现 Go 协程间的通信。 什么是信道? 信道(通道)可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流到另一端,通过使用信道,数据也可以从一端发送,在另一端接收。 信道的声明 所有信道都关联了一个类型。信道只能运输这种类型的数据,而运输其他类型的数据都是非法的。 chan T 表示 T 类型的信道。 信道的零值为 nil。信道的零值没有什么用,应该使用 make 内置函数,来像对 Map 和 Slice 初始化那样,来定义信道。 定义:指对 …

阅读全文

Go系列教程(二十一) | Go协程(goroutine)

在前面的教程里,我们探讨了并发,以及并发与并行的区别。本教程则会介绍在 Go 语言里,如何使用 Go 协程(Goroutine)来实现并发。 Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。 Go 协程相比于线程的优势 相比线程而言,Go 协程的成本极低。堆栈大小只有若干 kb,并且可以根据应用的需求进行增减。而线程必须指定堆栈的大小,其堆栈是固定不变的。 Go 协程会复用(Multiplex)数量更少的 OS 线程。即使程序 …

阅读全文

Go系列教程(二十) | 并发入门(Concurrency Getting Started)

Go 是并发式语言,而不是并行式语言。 在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别。 并发是什么? 并发是指立即处理多个任务的能力。举个例子就能很好地说明这一点。 我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然松了。于是他停下来,系一下鞋带,接下来继续跑。这个例子就是典型的并发。这个人能够一下搞定跑步和系鞋带两件事,即立即处理多个任务。 并行是什么?并行和并发有何区别? 并行是指同时处理多个任务。这听起来和并发差不多,但其实完全不同。 我们同样用这个跑步的例子来帮助理解。假如这个人在慢跑时,还在用他的 iPod 听着音乐。在这里,他是在跑步的同时听音乐,也 …

阅读全文

Wireshark文档 | Wireshark 过滤器

Wireshark 和 TShark 共享一个强大的过滤引擎,有助于消除数据包跟踪中的噪音,让您只看到您感兴趣的数据包。如果数据包满足过滤器中表达的要求,则它会显示在数据包列表中。显示过滤器让您可以将协议中的字段与特定值进行比较,将字段与字段进行比较,并检查指定的字段或协议是否存在。 检查字段或协议是否存在 最简单的过滤器允许您检查协议或字段是否存在。如果您想查看所有包含 IP 协议的数据包,过滤器将是ip。要查看包含令牌环 RIF 字段的所有数据包,请使用tr.rif。 将过滤器中的协议或字段视为隐式具有“存在”运算符。 比较运算符 字段也可以与值进行比较。比较运算符可以通过类似英文的缩写或 …

阅读全文

CentOS7 安装 Git LFS

Git 大文件存储 (LFS) 使用 Git 内部的文本指针替换音频样本、视频、数据集和图形等大文件,同时将文件内容存储在 GitHub.com 或 GitHub Enterprise 等远程服务器上。 1 $ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash 执行这个命令将会自动为您系统添加YUM源,具体的安装过程如下所示: 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 …

阅读全文

CentOS7 安装 Docker

要在 CentOS 上开始使用 Docker Engine,请确保满足先决条件,然后安装 Docker。 先决条件 操作系统要求 要安装 Docker 引擎,您需要 CentOS 7 或 8 的维护版本。不支持或测试存档版本。 必须启用 centos-extras 储存库。默认情况下启用此存储库,但如果您已禁用它,则需要重新启用它。 推荐使用 overlay2 存储驱动。 卸载旧版本 旧版本的 Docker 被称为 docker 或 docker-engine。如果安装了这些,请卸载它们以及相关的依赖项。 1 2 3 4 5 6 7 8 $ sudo yum remove docker \ …

阅读全文

MYSQL创建新用户并赋于权限

为应用程序创建特定的用户特定的数据库,不要直接使用root用户直接在应用程序中执行数据库操作,如果条件允许请将root用户设置为禁止远程登录,以提高系统的安全性,通常情况下,在开发或测试时可以将环境中的MYSQL设置为允许远程登录,以提高开发或上线效率,生产环境下是严禁MYSQL数据库远程登录的,应用程序应该通过内部网络进行通信完成数据的相关操作。特定的用户只对特定数据库有权限,退一万步讲,即使特定用户的密码被破解,也不会对同一节点下的数据库造成什么影响,还有千万不要使用弱口令,下文中的 @@helloworld@@ 是演示说明使用,可以忽略不计~ Step1.以root用户登录MYSQL 1 …

阅读全文

Docker环境构建Gitea版本库服务

Gitea是一个开源软件包,用于托管使用Git以及其他协作特性(如bug跟踪、wiki和代码审查)的软件开发版本控制。它支持自托管,但也提供一个免费的公共第一方实例托管在滴滴的中国云,它是Gogs的分支,Gitea使用Go语言编写,可以托管在Go支持的所有平台上,包括Linux、macOS和Windows。项目由Open Collective资助。以上来自维基百科 建立一个管理Gitea服务的项目 项目目录结构如下: 1 2 3 4 5 $ tree ├── docker-compose.yaml └── etc ├── localtime └── timezone 项目目录正如你所见是不是特 …

阅读全文

Git 推送LSF(大文件)到远程

项目中包含大上件时 推送已有项目到新仓库时报错 1 2 3 4 5 6 7 8 9 10 11 12 $ git push -u origin master 枚举对象中: 1585, 完成. 对象计数中: 100% (1585/1585), 完成. 使用 4 个线程进行压缩 压缩对象中: 100% (1466/1466), 完成. 写入对象中: 100% (1585/1585), 13.66 MiB | 6.49 MiB/s, 完成. 总共 1585(差异 667),复用 0(差异 0),包复用 0 remote: Resolving deltas: 100% (667/667), done.

阅读全文

Mac下使用FreeRDP

FreeRDP是一个远程桌面协议(RDP)的实现,开源免费软件,在Apache许可下发布。要在MacOS系统下安装使用还是有些特别需要注意的地方,记录一下在Mac系统的安装具体步骤方便遇到类似问题的开发者进行参考。 Section1.安装openssl并配置环境变量 如果没有安装openssl请打开 terminal 或 item2 (以下统称终端)执行以下brew命令安装: 1 $ brew install openssl 配置openssl库包配置路径环境变量 编辑 ~/.bashrc 或 ~/.zshrc 配置文件,导出PKG_CONFIG_PATH环境变量,具体如下: 1 export …

阅读全文

Go语言调用C语言代码

Go 语言除了语法精炼、并发支持好外,还有一个优点就是可以调用 C 代码。可以直接在 Go 源代码里写 C 代码,也可以引 C 语言的外部库。这样在性能遇到瓶颈的地方可以重写,或者某些功能 Go 和第三方还缺失,但 C 语言有现成的库就可以直接用了。官方 Cgo 这块目前有一篇博客 https://blog.golang.org/c-go-cgo 和 命令行文档 https://golang.org/cmd/cgo/ 对 Cgo 进行了说明,其中某些地方还不够明确或者没有提到的地方。 Section1:Go语言内联C语言代码 下面例子是直接将 C 代码内嵌在 Go 源代码里,引入了一个不存在的 …

阅读全文

Golang 字符串处理,删除文件中的指定行

在Go语言中字符串处理操作,可用的内建包有strings、bytes、strconv、regexp、fmt等等吧,不管在任何语言中字符串处理、数组处理在日常开发中都是非常频繁的,当然了,Go语言中用的最多的是不数组而是slice切片,写这篇文章的目的不是记录标准库的常规操作,而是记录一些配合标准库处理字符串的技巧性操作,这篇文章不会一下记录所有的字符串处理场景,但是会持续性的更新,希望我这些遇到的字符串处理案例可以对您的开发工作有所帮助~ 完成这个字符串场景处理需要使用到正则表达式,Go语言提供的标准库为regexp,以及文件操作。具体思路这样子的,读取文件内容,使用正则表达式去匹配指定字符串 …

阅读全文

Golang Float64和字节数组之间的交换

Go语言是强类型语言,不支持类型的隐式类型转换,所有类型都需要显示进行转换,那么bytes数组如何转换为Float64,以及Float64将转换为bytes数组,也就是它们之间的互相转换如何做到。这两种类型的转换不能直接转换需要转换为中间类型然后再转换为对应的类型。 bytes数组转换为Float64 1 2 3 4 5 6 7 8 9 10 11 12 package converter import ( "encoding/binary" "math" ) func BytesToFloat64(bytes []byte) float64 { bits := …

阅读全文

Linux 卸载 RPM 安装包

Step1、执行以下命令发现安装包的名称 1 $ rpm -qa | grep package_name 例如要卸载LibreOffice软件的RPM安装包,首先需要执行上面的命令进行查看已经安装了哪些包 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ rpm -qa | grep "libreoffice" libreoffice7.0-freedesktop-menus-7.0.6-2.noarch libreoffice7.0-7.0.6.2-2.x86_64 libreoffice7.0-math-7.0.6.2-2.x86_64 …

阅读全文

Linux 安装 LibreOffice

LibreOffice是由文档基金会开发的自由及开放源代码的办公室套件。LibreOffice套件包含文字处理器、电子表格、演示文稿程序、矢量图形编辑器和图表工具、数据库管理程序及创建和编辑数学公式的应用程序。 Section1、下载LibreOffice 到LibreOffice官网进行下载。 如上图所示选择操作系统类型为Linux(64-bit)(rpm),然后下载 7.0.6 LTS 版本,然后上传到服务。如果您不想这么操作,可以在跳转的下载页面复制下载链接到服务器上使用wget工具进行下载,都是可以的,怎么方便怎么来嘛~ 1 bash-4.4# wget …

阅读全文

从Linux转换PDF到Word

如果您在 GNU / Linux 上将其与 Wine 一起使用,那么您肯定已经知道如何使用 Microsoft 办公套件中包含的功能将原生 Microsoft Office 文档转换为 PDF。即使您使用 LibreOffice 或其他办公套件,由于已经包含此类套件的工具,您也可以轻松地将文档转换为 PDF 以更舒适的方式共享它。在您不得不使用其他工具来执行此操作之前,某些插件已经出现,最后它们已经集成到套件中。 但这不是我们在本文中将要解释的,而是我们感兴趣的是相反的过程,即将 PDF 转换为 Word 文档或 LibreOffice,无论是 .doc、.docx 等。 虽然它不是典型的作为 …

阅读全文

Golang交叉编译

Golang项目开发完成后最终是要放到服务器上去跑的,那么就需要编译出对应平台及CPU构架类型的可执行程序上传到服务器。由于业务需要构建多个平台,每一次都需要多次构建,非常不方便,于是乎可以将其在Shell脚本中自动化的快速构建多个不台平台程序,这样可以省去不必要的没有意义的操作。 查看Golang支持的平台及CPU框架 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 $ go tool dist list …

阅读全文

MacOS环境在终端使用Libreoffice的soffice命令

由于业务需要,需要将PDF文档转换为Word文档,这种类似的工具软件比较多,如OpenOffice、LibreOffice、Abiword等,都是可以的,使用的话主要是在服务器上使用,本地一般用个WPSOffice就够用了,因为要在本地开发调试,所以为了方便起见需要在MacOS系统安装 LibreOffice ,安装之后你会发现这个工具,没有默认支持终端下使用命令的功能。在程序中完成文档的格式转换就需要调用命令,需要手动去设置shell脚本访问 soffice 这个命令,当然,你也可以使用全路径就调用这个 soffice 命令,当然,话有说回来既然就能看到这篇博文说明你也在找类型的解决方案,来 …

阅读全文

ElasticSearch日常开发使用

:::tip 在CentOS上安装Headless Chromium的分步指南。 ::: 索引操作 索引(也就是index)的常用的相关操作包括:新建索引、删除索引、 如何新建索引? 新建索引, 可以直接向 ElasticSearch 服务器发送 PUT 请求。例如,下面的例子是新建一个名为 users 的索引。 1 curl -XPUT "http://localhost:9200/users?pretty=true" 服务器将返回一个JSON对象,其中 acknowledged 代表是否操作成功,shards_acknowledged 是否分片成功,index 表示操作的索 …

阅读全文

CentOS安装无头Chrome

无头Chrome就像是在没有UI(浏览器)的情况下运行chrome浏览器一样,也就是说,它在无头环境中运行,这对于运行自动化测试非常有用。 那么,无头Chrome可以为我们做些什么呢? 最令人兴奋的事情之一就是能够测试最新和最强大的Web平台功能,例如ES6模块,服务工作者和流。使用无头chrome,您可以编写应用程序并使用最新的渲染功能测试这些应用程序。它解锁的另一件事是这些很棒的功能,例如网络限制,设备仿真和代码覆盖。 使用无头chrome,您甚至无需编写任何代码即可执行测试,那不是很爽! 您可以仅通过命令行执行它们。 1 2 3 4 $ google-chrome-stable \ …

阅读全文

Makefile快速入门

可以这么理解Makefile是用于管理项目的一种工具,它来自GNU,比如您呢好在项目下使用docker-compose工具运行容器,这个时候呢,您一般会输入docker-compose -f docker-compose.yaml up -d 进行项目容器的启动,如果您要把这个容器及网卡等一系列与这个容器服务相关的服务也停止掉的话,您会执行 docker-compose down 命令进行操作,这很好,您如果不嫌麻烦的话您可以先停止掉依赖的网卡了(如果有的话),然后再停止掉容器,这样也是可以的,不过呢,您有没有感觉这么一来,就会很麻烦,Makefile给我们来解决这些个麻烦,您只需要在项目目录 …

阅读全文

格式化curl返回的JSON数据

在开发的过程中会使用CURL命令请求API接口,而一般情况下API接口也是返回JSON数据,但是如果直接使用 curl -X GET https://news-at.zhihu.com/api/4/news/latest 这种方式访问API接口的话,你会发现终端输出的是一行JSON数据,如果可以美化一下JSON数据在终端输出岂不美哉~ 二、格式化CURL返回的JSON数据有两种方式 分别是 PYTHON格式化 和 NODEJS格式化。 2.1、PYTHON格式化 在CURL命令后面添加 | python -m json.tool 即可。 1 2 3 4 5 6 7 8 9 10 11 12 …

阅读全文

Git如何删除远程分支

当远程分支不再使用或者需要废弃时,你可以通过登录到远程仓库进行删除分支操作,但是这样不够方便快捷,我们可以通过在本地执行一个Git命令即可快速将远程分支删除掉。 Step1、查看远程分支 要删除远程分支首先要查询一下远程到底有哪些分支可以执行以下命令,进行查询: 1 $ git branch -r 具体输出如下所示: 1 2 3 4 5 6 $ git branch -r origin/gin origin/master origin/middleware origin/step1 (END) 在清楚的知道了远程有哪分支后,就可以执行删除命令了,请参考 。 Step2、删除远程分支 具体的命令 …

阅读全文

使用Shell脚本新建博文生成多个语言Markdown文件

在使用Hugo写博客的时候,添加一遍博文,如果内容是支持多语言的话,添加每种语言markdown文件都需要执行一次Hugo命令,着实非常不方便,于是乎写一个Shell脚本就可以解决这个非常不愉快的操作体验,具体可以写一个Shell脚本去一次性的完成这个重复而没有任何意义的操作。仔细分析一下这个要写的Shell脚本,其实非常简单就可以实现: 定义一个目录常量,定义一语言数组,让用户输入三个参数,其中前两个是必传参数,最后一个参数是可选参数,依次表示,要生成的markdown文件存放目录,markdown文件名,以及是否要使用日期目录。 1 2 3 4 5 6 7 8 9 10 11 12 13 …

阅读全文

解决Github打不开问题

解决过程 通过 https://www.ipaddress.com/ 查询获取Github官方的CDN地址,分别查询 github.com,assets-cdn.github.com,github.global.ssl.fastly.net 这几个域名对应的DNS解析地址,添加到 /etc/hosts 文件。例如: 1 2 3 4 5 6 7 # Github.com 140.82.114.3 github.com 199.232.69.194 github.global.ssl.fastly.net 185.199.108.153 assets-cdn.github.com …

阅读全文

Docker日常开发使用

Section1.容器操作 Section1.1.如何将容器保存为镜像 1 $ docker commit -m <Version Description> -a <Author> <容器ID|容器名称> <组织名称>/<镜像名称>:<版本号> Section1.2.如何查看容器前10行实时日志? 1 $ docker logs -f -t --tail 10 <容器ID|容器名称> Section1.3.如何批量删除所有已停止运行的容器 方式有很多,来看一种比较常见也比较好理解的方式: 1 $ docker …

阅读全文

TCPDUMP抓包工具

Feature1、抓取默认网卡的所有数据包 1 $ tcpdump Feature2、抓取指定IP的所有数据包 1 $ tcpdump host 10.10.11.215 意思是抓取本服务器与IP10.10.11.215设备之间的通信数据包. Feature3、抓取指定IP及端口的所有数据包 1 $ tcpdump host 10.10.11.215 and port 7001 意思是抓取本服务器与IP 10.10.11.215 设备的 7001 端口之间的通信数据包. Feature4、抓取指定IP及端口的所有数据包并保存为文件以供wireshark工具分析 1 $ tcpdump host …

阅读全文

shell编程快速入门

变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/bin/bash # 1. 变量的定义和使用 username=helloshaohua echo "1. $username" # 2. 另一种定义方式 course="linux shell program" echo 2. ${course} # 3. 只读变量 readonly course # course="Go program" # available.sh: line 13: course: readonly …

阅读全文

如何用Docker优雅地管理你的Nginx

如果你只有一台服务器,并且有多个服务需要NGINX代理提供服务,还想使用Docker服务跑你的NGINX服务器,那么你就应该单独管理你的NGINX服务容器,而不应该在其它应用部署时强耦合到项目下的docker-compose.yaml进行相应的部署,那应该如何优雅的管理你的NGINX服务呢? 那既然你能看到这篇博文,相信它必定对你管理NGINX服务容器有一定的启发~ 单独建立一个Docker下的NGINX管理项目 例如你可以建立一个如下目录结构的项目,项目名称随意,如docker-nginx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ tree . ├── …

阅读全文

Golang请求第三方API接口发送POST请求的几种方式

在项目中如果要用到第三方服务,第三方服务肯定会有一服务接口文档,难免不会有一些API接口是必须要通过POST方式请求,那么在Golang中如何发送POST请求到其它第三服务呢? 如果说有3种或4种方式,这种说法也不太确切,这个具体要看第三方服务接口接收数据的格式,如果只接收XML数据格式那你也就只能通过XML格式发送请求数据到第三方API接口,来看几种常用的POST请求方式~ 模拟第三方服务 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 package main import ( …

阅读全文

Nuxt部署到Docker环境

记录一下Nuxt博客项目部署到Docker环境的过程,这可能对将要部署Nuxt应用到Docker环境的你有所帮助~ 编写Dockerfile文件 在你的Nuxt项目目录下编写Dockerfile如下示例: 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 FROM node:12.16.2 # 创建容器工作目录 RUN mkdir -p /app WORKDIR /app # 拷贝package.json文件到容器工作目录, # 注意这个地方为什么没有拷 …

阅读全文

修改Docker容器时区

在启动Docker时并且上生产环境的时候必须要修改容器时区,要不然你产生的数据记录时间是比北京时间晚了8个小时的,因为Docker容器内默认采用的是UTC时间,但是时间是不对的,所以要修改容器时区为北京时间,时区为 Asia/shanghai,才可以~ 修改Docker容器时区的方式有三种:第一种使用Dockerfile制作镜像时配置,第二种启动单个容器时配置,第三种你的容器已经启动的情况进行修改。 第一种、使用Dockerfile制作镜像时配置时区 优点是使用该镜像启动的新容器不需要再次修改,其原理就是将宿主主机的时区文件软链到容器内并且在容器内重写时区文件。在编写Dockerfile时添加 …

阅读全文

如何解决Go测试相对路径问题?来来掰扯掰扯

写这篇文章的初衷是想总结一下Go项目开发中关于解决测试相对路径问题的思考,你可能在Go项目中遇到了这个问题,测试通过了运行服务之后,访问已运行的服务发现它依然存在问题找不到相关资源,那你简单的将资源路径改对了,去重启服务之后资源也能找到了,好开心有木有? 不好意思你不要开心这早好不好,敢不敢不再跑跑你的测试,咦~ 怎么又找不到资源了,what the hell,怎么搞好嘛~ 来来一起搞搞看好了~ 为什么会出现这种情况 原因是这样子的,比如这么说吧,在你的项目目录下有一个api目录,其中有一个markdown.go这个Go文件,在这个Go文件中定义了名为GetMarkdown的API接口,这个接 …

阅读全文

如何解决Golang包循环引入问题?

Go不允许存在包的循环引入,你是不是也在项目开发时遇到过 import cycle not allowed 编译错误呢? 你找到好的解决方案了没有呢? 下文也许可能会对你解决这个问题有所帮助~ 何为包的循环引入 如在项目中有bar包和foo包,假如bar包用到了foo包代码,并且foo包也用到了bar包代码,那么这时就会产生编译错误import cycle not allowed意为"不允许循环引入"。 假定示例项目结构如下: 1 2 3 4 5 6 7 8 9 $ depend git:(master) tree . ├── bar │ └── bar.go ├── …

阅读全文

Golang 搭建的服务器局域网不能访问?

在Go项目中如果你想在局域网访问Go运行的服务器,那么就不应该指定其地址为 localhost:port 或者 127.0.0.1:port,应该指定为 :port 或 0.0.0.0:port 的形式!为什么呢? 说整明白这是怎么回事,这时候就是考验你网络基础的时候了,上大学的时候计算机专业都是有学过的哦(《计算机网络》想起来了吧),来复习一下几个概念: 本地环回地址 域名解析 默认路由 何为本地环回地址 运用本地环回机制,便可在主机上运行网络服务,期间不须安装实体网络接口卡(也就是物理网卡),也无须将该服务开放予主机所在的网络。例如,在设置好本地安装的网站后, …

阅读全文

RESTFul接口设计时,添加记录时已存在资源应该返回什么状态码?

RESTFul接口设计时,添加记录时如果已存在资源时应该返回什么状态码比较合适? 400? 合适吗? 添加记录 RESTFul接口设计时,对于添加记录或者说是资源时,HTTP请求类型应该是POST方式,那么如果这个资源同名了,应该返回409比较合适,原意为资源冲突,当然话又说过来,对于添加资源更加严谨的流程应该是前端用户输入资源名称后去调用后端API接口检测是否存在同名资源,这样也有利于提高用户体验(这个要看具体的设计,不过一般也都会采用这样机制),这里仅仅讨论的是后端处理已有资源时应该返回什么样的状态码比较合适的问题~,个人觉得 Conflict 还是比较合适的,你有更好的想法,请留言一起探 …

阅读全文

RESTFul接口设计时,退出登录是使用GET请求还是使用POST请求?

退出登录就是用户注销其在系统中的登录身份(或者说状态),那么在开发的时候这个退出(logout)接口应该定义成什么样的请求类型呢?是GET还是POST? 关于注销登录 在各个系统中对于处理注销登录的机制也大同小异,说到注销登录就不得不说一下登录的机制,登录的机制在早期的后端开发中一般情况下是使用SESSION机制,进行标识一个用户登录状态。时下最流行的前后端分离开发模式,后端程序一般都会使用JWT做为认证机制,不管怎么说吧,这些登录机制就是在系统中进行标识用户登录状态,用户注销登录的时候,请求注销接口携带一个用户唯一标识如用户手机号,后端程序根据这个唯一标识去找到登录时在系统签发的唯一标识(一 …

阅读全文

[转载]Mysql Explain

在日常工作中,我们有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。(QEP:sql生成一个执行计划query Execution plan)。 1 2 3 4 5 6 7 mysql> explain select * from …

阅读全文

Goland 代码自动换行

IntelliJ家族的IDE在设置代码自动换行时菜单是一致的,你如果用过其中一个特定的IDE如 IDEA,那么对于其它的IntelliJ家族编辑器也同样适用~ 代码自动换行 分为单个文件或整个项目! 单个文件 设置菜单依次是: View -> Active Editor -> Soft-Wrap 整个项目 设置菜单依次是: Goland -> Preferences... -> Editor -> General -> Soft-Wrap,这个可以个性化定制对特定扩展名的文件进行设置自动换行!

阅读全文

NuxtJS读取.env配置文件

在VUE项目中读取项目根目录下的.env文件可以直接通过 process.env.VUE_APP_EXAMPLE 的访问读取到 .env 配置文件的中 VUE_APP_EXAMPLE 配置项的具体值,在Nuxt项目中还直接这么干是读取不到滴~ 那么在Nuxt项目中怎么读取 .env 的配置项呢?直接安装一个 dotenv 依赖包就可以解决! 安装dotenv 1 $ yarn add dotenv 加载env配置文件 修改nuxt.config.js,引入dotenv模块 1 const env = require('dotenv').config(); …

阅读全文

获取当前查询记录的上一条记录和下一条记录ID

比如有这么一个需求,获取当前文章记录数据并且返回当前记录的上一条记录ID和下一条记录ID,用于前端文章详情页的上一篇和下一篇文章获取,其实也特别的简单,顺便记录一下! 简略数据源如下: 查询分析 要获取当前查询记录ID为1000的记录的上一条记录ID: 999,可以在ID小于1000的范围内获取ID最大值;获取下一条记录ID: 1001,可以在大于1000的范围内获取ID最小值,那么这个事件也就算是完成了! 注意:获取上一条记录ID和下一条记录ID的临界点就是当前查询记录ID为1000的记录哦~ 获取上一条记录ID 1 2 3 4 5 6 7 mysql> select max(id) …

阅读全文

Golang JSON RPC 使用

JSON-RPC,是一个无状态且轻量级的远程过程调用传送协议,其传递内容主要以JSON数据为主,相较于一般的 RESTFul 通过 URL 地址,如 GET /student 调用远程服务器,JSON-RPC直接在内容中定义了想要调用的方法名称如,@@{“id”: 123456, “method”: “Service.Division”, “params”: [{“A”: 88, “B”: 6}]}@@,这也令开发者不会陷于该使用 PUT …

阅读全文

axios如何获取HTTP响应头数据?

说到如何获取HTTP响应头数据,就不得到说一下对于CORS请求,默认情况下,浏览器只能访问 Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma 这些Header头,那如果想访问服务器端自定义的Header头应该如何处理呢? 如果像axios这种请求工具想获取到HTTP自定义响应头如 X-Access-Token, 那么服务端首先应该对响应头 Access-Control-Expose-Headers 字段进行定义,如:Access-Control-Expose-Headers: …

阅读全文

Golang格式化文件大小到可视化大小

在Golang中一个文件大小一般是int64类型的整数,这个类型的对程序而言是好的,不过如果提供前端展示性的数据的话,直接返回过去多少有点太那什么了……这个还需要你和前端同学协商,不官怎么说总得有一方去处理,那这么Go在如何优雅的处理这个转换过程序呢? 可定义如下函数以进行转换操作: 1 2 3 4 5 6 7 8 9 10 11 12 13 // ByteCountBinary format byte size to human readable format. func ByteCountBinary(size int64) string { const …

阅读全文

MacOS 检测远程服务端口是否可用

远程服务开放端口是否是可用,比如说阿里云ECS有一个自定义端口8859对外开放服务,但是如果说只在ECS中使用 firewall 开放了端口,ECS的安全组没有配置其8859规则的话,外部网络是无法访问到ECS内部8859提供的服务的,也就是说对于阿里云ECS来说开放一个端口,你需要做两件事情,第一是在ECS内部添加开放商品,第二是在阿里云控制台对ECS实例添加安全组规则! 如果你在ECS内部开放了端口,你可以会忘记到阿里云ECS安全组添加开放端口无则,这时候你在本地系统中怎么连接都不能成功,你这时可能会非常之疑惑,唉,我明明在ECS内部开放了端口为什么就是不行呢?真是见鬼了,哈哈😄,稍安勿 …

阅读全文

NGINX服务器如何配置HTTPS

超文本传输协议安全(HTTPS)是HTTP的安全版本,HTTP是用于在Web浏览器和网站之间发送数据的主要协议。HTTPS被加密,以提高数据传输的安全性。当用户传输敏感数据(例如通过登录银行帐户,电子邮件服务或健康保险提供商)时,这一点尤其重要。 任何网站,尤其是那些需要登录凭据的网站,都应使用HTTPS。在现代网络浏览器(例如Chrome)中,未使用HTTPS的网站与带有HTTPS的网站的标记有所不同。在网址栏中寻找绿色的挂锁,以表示该网页是安全的。Web浏览器非常重视HTTPS。Google Chrome浏览器和其他浏览器将所有非HTTPS网站标记为不安全。 获取证书 你可以到阿里云获取赛 …

阅读全文

CentOS7 相关操作

记录一下CentOS7日常操作,以便后期查看,温故之用,好记性不如烂笔头哦!🎉🎉🎉 开机启动服务 添加服务到chkconfig配置 1 $ chkconfig --add servername 开启服务开机启动 1 $ chkconfig docker on 资源管理 查看系统内存大小及使用情况 1 $ free -h 查看系统磁盘大小及使用情况 1 $ df -h 文件处理 查看文件的前几行 1 $ head -n number file 查看文件的后几行 1 $ tail -n number file 从文件后几行开始实时查看文件内容 这个很常用,一般文件都是追加写,而不是从头插入写,尤其 …

阅读全文

CentOS7开放端口号

在基于RHEL7的服务器,提供了一个firewall的动态管理的防火墙,其支持IPv4和IPv6,还支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。 加入开放端口到配置文件 1 $ firewall-cmd --zone=public --add-port=80/tcp --permanent 参数说明: --zone=public: 添加时区 --add-port=80/tcp: 添加端口 --permanent: 永久生效 重新加载防火墙配置文件 以 root 身份输入以下命令,重新加载防火墙,并不中断用户连接,即不丢失状态信息. …

阅读全文