Linux 增量文件传输工具 rsync 的常用方法
1. 什么是 rsync ?rsync 是一个提供快速增量文件传输的开源实用程序。
rsync 可以在本地与远程机器之间同步文件或目录,并且只传输已更改或新增的部分,从而大幅度减少数据传输的时间和带宽消耗。
本文仅介绍 rsync 的常用方法,个人认为已足够覆盖工作中的各类场景,更多高级功能读者可自行查阅 rsync 官方文档,
2. rsync 的基本命令官方文档中将 rsync 命令的使用分了三类:
1. 本地使用:
1rsync [OPTION...] SRC... [DEST]
2. 通过远程 shell 访问:
1234Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
3. 通过 rsync daemon 访问(后面会具体说什么是 rsync daemon):
123456Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] r ...
Golang 使用 urfave/cli 开发命令行工具的基本方法
1. 从一个项目模板开始首先创建一个目录,目录结构如下:
123go-cli-example└── cmd └── cmd.go
我这里项目名字为 “go-cli-example”。
在项目根目录执行 go mod 初始化操作,我这里为:
1go mod init go-cli-example
我这里是随意起的项目名字,如果你的是正常的可维护项目,“go-cli-example” 可能应当替换为形如 “github.com/gukaifeng/go-cli-example” 这样。
我这里 cmd.go 就是入口文件了,我们先从一个 urfave/cli 模板开始:
123456789101112131415161718192021package cmdimport ( "fmt" "os" "github.com/urfave/cli/v2")func main() { app := &cli.App{ Name: "greet", Usage: "say ...
使用 mdtest 测试文件系统元数据性能
1. 什么是 IOR 和 mdtest ?IOR(Integrated Benchmark of Parallel I/O)是一种基准测试应用程序,旨在测试并评估并行文件系统的性能。它包含多个测试模式,可以测量一系列文件 I / O 操作的速度和可扩展性。IOR 主要使用 MPI 软件库来实现并行 I/O 操作。它可以测试并行读取和写入各种文件访问模式(例如单个大文件、多个小文件)时的并行文件系统性能。
mdtest 是一款基准测试程序,用来测试文件系统元数据操作的性能。它可以模拟大规模目录和文件的创建、重命名、删除等操作,通常是在高性能计算环境中使用。使用 mdtest 可以帮助用户评估存储系统文件操作的性能,以便更好地优化存储系统的设计和配置。它通常作为文件系统测试套件中的一部分,如 IOR、IOZone 和 FIO 等工具。
IOR 通常被用来测试大文件的读写性能。例如,可以使用 IOR 测试并行文件系统的顺序读写能力、随机访问能力、并行度和带宽。这对于优化大规模应用程序和大规模数据中心中存储层的性能非常重要。
MDTest 通常被用来测试并行文件系统在处理许多小文件时的性 ...
fio 测试存储系统 I/O 性能
1. 什么是 fio ?fio(Flexible I/O Tester)是一个用于测试和评估 I/O 负载和性能的工具,具有高度的可配置性和灵活性。它可以模拟不同类型的负载,包括随机和顺序读写,随机和顺序混合读写,随机和顺序的深度嵌套目录结构等,同时可以产生各种不同的 I/O 负载模式,例如随机性、对齐和分配大小、顺序性等特征,以便更好地模拟实际应用程序中的 I/O 负载。fio 在评估和比较存储系统方面非常有用,例如硬盘驱动器、固态硬盘、闪存存储器、网络存储器等。 - ChatGPT
本文主要介绍在 Linux 上使用 fio 测试磁盘/文件系统的性能,fio 的其他功能本文不关注。对磁盘和文件系统的测试可以认为是一回事,因为文件系统挂载后在使用方面与本地磁盘没有什么区别,所以本文不会仔细区分这两个场景。
本文所使用的是系统为 CentOS 8.4.2105,其他发行版与本文可能会有出入,本文不做解释,可自行查看文档 fio - Flexible I/O tester。
2. 安装 fio安装 fio 有几种常用方法,可以直接通过包管理工具(如 yum、dnf 等)安装,或者是手动 ...
CubeFS 快速单机部署试用
注意:
CubeFS 是一个分布式文件系统,是应当部署在集群上的。
本文仅针对纯小白第一次上手,目的是让纯小白可以快速部署好 CubeFS 并使用。
本文不会对 CubeFS 的各种配置项做说明解释,只是给出一个固定的操作过程,使 CubeFS 快速运转起来。
真实的集群中的 CubeFS 的配置要复杂一些,但不会在本文中介绍。
本文也是我作为纯小白,第一次试用 CubeFS 的过程记录。
1. 编译 CubeFS1.1. 安装依赖123456yum install -y gcc-c++ \ go \ cmake \ zlib-devel \ bzip2-devel \ maven
这些依赖 yum 中的版本已经足够了,所以就直接这样装了,自己手动装更高版本也可以。
1.2. 克隆源码仓库克隆 CubeFS 源码仓库:
1git clone https://github.com/cubefs/cubefs.git
进入 CubeFS 源码 ...
Golang 分割字符串的几种方法
1. 按单个分隔字符串分割按单个分隔符或分隔字符串分割可使用 Split() 函数,声明如下:
1func Split(s, sep string) []string
1func Split(s, sep []byte) [][]byte
两个方法是一样的,只是操作的字符串类型一个是 string 一个是 []byte。
我们以操作 string 的方法为例:
1234567891011121314package mainimport ( "fmt" "strings")func main() { fmt.Printf("%q\n", strings.Split("a,b,,,c", ",")) fmt.Printf("%q\n", strings.Split("a man a plan a canal panama", "a ")) fmt.Printf("%q\n", strings.Split ...
Golang 中正则表达式 regexp 的基本用法
Golang 中使用正则一般就是使用 regexp 包。
这里只介绍一些常用操作,已经可以满足大部分开发需求,更多内容请详见官方文档 regexp package。
1. 正则表达式的语法我们知道想要使用正则匹配,就需要严格按照正则语法设定正则匹配字符串,即 Pattern。
正则语法篇幅较长,这里就不介绍了,并且 Golang 官方的正则语法文档已经非常全面了,可以自己看看 regexp/syntax。
2. regexp 的用法regexp 包的主要使用方式有两种:
直接使用 regexp 包内的全局函数进行模式匹配。
先将 Pattern 封装进 Regexp 类中,再通过 Regexp 类提供的方法来进行正则匹配相关操作。
第 1 种方式能做的事很少,一共仅有 4 个方法,但却是正则操作里很常用方法。第 2 种方式相对复杂,但提供了非常多的方法,几乎能够满足正则匹配各种场景下的所有需求。
两种方式没有优劣之分,一般来说,简单需求用方式 1,方式 1 无法满足的时候用方式 2,就可以了。
下面第 3 小节对应方式 1,第 4小节对应方式 2。
3. 使用 regexp 包内的 ...
Linux 中限制用户的可用资源 - ulimit 详解
1. ulimit 命令的作用ulimit 命令是系统自带的,用于修改 Shell 的资源限制。
具体来说,ulimit 命令用于限制一个 Shell 以及由这个 Shell 创建的所有进程的可用资源总量。
注意是限制一个 Shell,不是一个用户。比如你 SSH 登录到服务器,你当前所处的就是一个 Shell,退出后这个限制就失效了。
2. ulimit 命令的用法ulimit 命令的用法如下:
1ulimit [Options] [limit]
options:选项。除了 -S、-H、-a,每个选项代表一个资源,具体在下面说。
limit:指定资源的限制值。
-
选项 options 可取值如下:
有三个选项是通用的:
-S:使用软资源限制,允许资源超出,资源超出后仅警告。
-H:使用硬资源限制,资源严格控制,不允许超出。
-a:列出当前所有的资源限制。
其他选项,每个代表一种系统资源:
-b:Socket 的 buffer 大小。
-c:创建的核心文件(core files)的最大大小
-d:进程的数据段(data segment)最大大小。
-e:最大调度优先级(即命 ...
Linux 修改 SELinux 设定
1. 为什么要修改防火墙设定我们有些时候做一些操作会遇到一些莫名其妙的问题 ~
比如使用 systemctl 启动某些服务时被拒绝(root 用户也不行):
1Failed to enable unit: Access denied
或者有些时候直接提示找不到 unit:
1Failed to start xxx.service: Unit not found
但是查看 /etc/systemd/system/ 等 unit 存放目录,我们的 xxx.service 就安静的躺在那里。。。
-
这些问题可能是由于 Linux 防火墙 SELinux 的设定引起的。
2. SELinux 的工作模式SELinux 有三种工作模式,分别为:
enforcing:强制模式,一切违背 SELinux 政策的行为都将被禁止。
permissive:宽容模式,违背 SELinux 政策的行为可以进行,但会被记录到日志中。
disbaled:完全禁用 SELinux。
3. 修改 SELinux 的设定3.1. 临时修改临时修改可使用 setenforce 命令:
1setenforce [ E ...
Linux 创建新用户并赋权
本文所述内容需要在 root 用户或有 root 权限的用户下操作。
这里假定你已经以 root 用户登录到了 Linux。
1. 创建新用户新建一个用户:
1adduser <new_username>
给新用户设置密码:
1passwd <new_username>
-
例如我这里创建一个名为 gukaifeng 的用户,那么命令如下:
1adduser gukaifeng # 新建一个名为 gukaifeng 的用户
1passwd gukaifeng # 为 gukaifeng 用户设置密码
-
上面的命令已经自动创建好用户目录了,例如我这里的 /home/gukaifeng。
这一步完成后,我们的新用户就可以正常登录使用了。
-
为了说起来方便,下面的步骤我都以新用户名为 “gukaifeng” 为例。
2. 给新用户添加 sudo 权限这里给出两个方法可以做到这一点,我建议使用方法二。
2.1. (不推荐)直接修改 /etc/sudoers权限配置文件为 /etc/sudoers,这个文件默认是没有写权限的,所以我们需要先给其添加写权限: ...