分类: linux

  • 删除linux网卡命令

    在Linux操作系统中删除网络接口的命令是ifconfigip命令。下面将详细说明如何使用这两个命令来删除Linux网卡。

    使用ifconfig命令删除网卡:

    1. 打开终端或控制台窗口。
    2. 输入ifconfig命令,查看当前系统中的网卡接口列表,确认要删除的网卡接口的名称,一般以ethenp开头。
    3. 输入以下命令以删除网卡接口: “ sudo ifconfig down # 关闭网卡接口 sudo ifconfig del # 删除网卡接口 “ 请将“替换为要删除的网卡接口的名称。
    4. 输入密码(如果有)以确认操作。

    使用ip命令删除网卡:

    1. 打开终端或控制台窗口。
    2. 输入ip link show命令,查看当前系统中的网卡接口列表,确认要删除的网卡接口的名称,一般以ethenp开头。
    3. 输入以下命令以删除网卡接口: “ sudo ip link set down # 关闭网卡接口 sudo ip link delete # 删除网卡接口 “ 请将“替换为要删除的网卡接口的名称。
    4. 输入密码(如果有)以确认操作。

    需要注意的是,删除网卡接口后将无法使用该接口进行网络连接。请确保在执行删除操作之前备份重要数据,并确保不会影响系统的正常运行。

    此外,还可以通过编辑/etc/network/interfaces文件或/etc/sysconfig/network-scripts/ifcfg-文件来删除网卡接口的配置信息,但这种操作比较复杂,需要对网络配置文件有一定的了解。强烈建议在进行此类操作之前备份相关配置文件,以防止意外数据丢失。

  • rpm 安装教程

    下面讲解一下,如何使用 rpm 命令对 RPM 二进制包进行安装、卸载和升级操作。我们以安装 apache 程序为例。

    RPM包默认安装路径

    通常情况下,RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到下表所示的目录中。

    RPM 包默认安装路径
    安装路径 含 义
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行的命令安装目录
    /usr/lib/ 程序所使用的函数库保存位置
    /usr/share/doc/ 基本的软件使用手册保存位置
    /usr/share/man/ 帮助文件保存位置

    RPM 包的默认安装路径是可以通过命令查询的。

    除此之外,RPM 包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需要进行手工配置才能被系统识别),得不偿失。

    与 RPM 包不同,源码包的安装通常采用手动指定安装路径(习惯安装到 /usr/local/ 中)的方式。既然安装路径不同,同一 apache 程序的源码包和 RPM 包就可以安装到一台 Linux 服务器上(但同一时间只能开启一个,因为它们需要占用同一个 80 端口)。

    实际情况中,一台服务器几乎不会同时包含两个 apache 程序,管理员不好管理,还会占用过多的服务器磁盘空间。

    RPM 包的安装

    安装 RPM 的命令格式为:

    [root@localhost ~]# rpm -ivh 包全名

    注意一定是包全名。涉及到包全名的命令,一定要注意路径,可能软件包在光盘中,因此需提前做好设备的挂载工作。

    此命令中各选项参数的含义为:

    • -i:安装(install);
    • -v:显示更详细的信息(verbose);
    • -h:打印 #,显示安装进度(hash);

    例如,使用此命令安装 apache 软件包,如下所示:

    1. [root@localhost ~]# rpm -ivh \
    2. /mnt/cdrom/Packages/httpd-2.2.1515.el6.centos.1.i686.rpm
    3. Preparing…
    4. ####################
    5. [100%]
    6. 1:httpd
    7. ####################
    8. [100%]

    注意,直到出现两个 100% 才是真正的安装成功,第一个 100% 仅表示完成了安装准备工作。

    此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示:

    [root@localhost ~]# rpm -ivh a
    .rpm b
    .rpm c
    .rpm

    如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:

    • -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
    • -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报”某个文件已经存在”的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
    • -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
    • -force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
    • -test:测试安装。不会实际安装,只是检测一下依赖性。
    • -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。

    apache 服务安装完成后,可以尝试启动:

    [root@localhost ~]# service 服务名 start|stop|restart|status

    各参数含义:

    • start:启动服务;
    • stop:停止服务;
    • restart:重启服务;
    • status: 查看服务状态;

    例如:

    [root@localhost ~]# service httpd start #启动apache服务

    服务启动后,可以查看端口号 80 是否出现。命令如下:

    1. [root@localhost ~]# netstat -tlun | grep 80
    2. tcp 0 0 :::80 :::* LISTEN

    RPM包的升级

    使用如下命令即可实现 RPM 包的升级:

    [root@localhost ~]# rpm -Uvh 包全名

    -U(大写)选项的含义是:如果该软件没安装过则直接安装;若已经安装则升级至最新版本。

    [root@localhost ~]# rpm -Fvh 包全名

    -F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。

    RPM包的卸载

    RPM 软件包的卸载要考虑包之间的依赖性。例如,我们先安装的 httpd 软件包,后安装 httpd 的功能模块 mod_ssl 包,那么在卸载时,就必须先卸载 mod_ssl,然后卸载 httpd,否则会报错。

    软件包卸载和拆除大楼是一样的,本来先盖的 2 楼,后盖的 3 楼,那么拆楼时一定要先拆除 3 楼。

    如果卸载 RPM 软件不考虑依赖性,执行卸载命令会包依赖性错误,例如:

    1. [root@localhost ~]# rpm -e httpd
    2. error: Failed dependencies:
    3. httpd-mmn = 20051115 is needed by (installed) mod_wsgi-3.21.el6.i686
    4. httpd-mmn = 20051115 is needed by (installed) php-5.3.33.el6_2.8.i686
    5. httpd-mmn = 20051115 is needed by (installed) mod_ssl-1:2.2.1515.el6.
    6. centos.1.i686
    7. httpd-mmn = 20051115 is needed by (installed) mod_perl-2.0.410.el6.i686
    8. httpd = 2.2.1515.el6.centos.1 is needed by (installed) httpd-manual-2.2.
    9. 1515.el6.centos.1 .noarch
    10. httpd is needed by (installed) webalizer-2.21_023.3.el6.i686
    11. httpd is needed by (installed) mod_ssl-1:2.2.1515.el6.centos.1.i686
    12. httpd= 0:2.2.1515.el6.centos.1 is needed by(installed)mod_ssl-1:2.2.1515.el6.centos.1.i686

    RPM 软件包的卸载很简单,使用如下命令即可:

    [root@localhost ~]# rpm -e 包名

    -e 选项表示卸载,也就是 erase 的首字母。

    RPM 软件包的卸载命令支持使用“-nocteps”选项,即可以不检测依赖性直接卸载,但此方式不推荐大家使用,因为此操作很可能导致其他软件也无法征程使用。

  • 正则表达式 – 修饰符

    正则表达式中常用的模式修正符有i、g、m、s、U、x、a、D、e 等。它们之间可以组合搭配使用。

    修饰符 含义 描述
    i ignore – 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A 和 a 没有区别。
    g global – 全局匹配 查找所有的匹配项。
    m more – 多行匹配 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
    s 特殊字符圆点 . 中包含换行符 \n 默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

    i 不区分(ignore)大小写

    例如: /abc/i 可以匹配 abc、aBC、Abc

    g 全局(global)匹配

    如果不带g,正则过程中字符串从左到右匹配,找到第一个符合条件的即匹配成功,返回

    如果带g,则字符串从左到右,找到每个符合条件的都记录下来,知道字符串结尾位置

    例如:

    var str = ‘aaaaaaaa’

    var reg1 = /a/; str.match(reg1) // 结果为:[“a”, index: 0, input: “aaaaaaaa”]

    var reg2 = /a/g; str.match(reg2) // 结果为:[“a”, “a”, “a”, “a”, “a”, “a”, “a”, “a”]

    m 多(more)行匹配

    若存在换行\n并且有开始^或结束$符的情况下,和g一起使用实现全局匹配,

    因为存在换行时默认会把换行符作为一个字符任务匹配字符串是个单行,

    g只匹配第一行,添加m之后实现多行,每个换行符之后就是开始

    var str = “abcggab\nabcoab”;

    var preg1 = /^abc/gm; str.match(preg1) // 结果为:[“abc”, “abc”]

    var preg2 = /ab$/gm; str.match(preg2) // 结果为:[“ab”, “ab”]

    s 特殊字符圆点 . 中包含换行符

    默认的圆点 . 是 匹配除换行符 \n 之外的任何单字符,加上s之后, . 中包含换行符

    $str = “abggab\nacbs”;

    $preg = “/b./s”;

    preg_match_all($preg, $str,$matchs);

    print_r($matchs);//Array ( [0] => Array ( [0] => bg [1] => b [2] => bs ) )

    U 只匹配最近的一个字符串;不重复匹配;

    $mode=”/a(.*?)c/”;

    $preg=”/a.*c/U”;//这两个正则返回相同的值

    $str=”abcabbbcabbbbbc” ;

    preg_match($mode,$str,$content); echo $content[0];//abc

    preg_match($preg,$str,$content); echo $content[0];//abc

    修正符:x 将模式中的空白忽略; 修正符:A 强制从目标字符串开头匹配; 修正符:D 如果使用$限制结尾字符,则不允许结尾有换行; 修正符:e 配合函数preg_replace()使用, 可以把匹配来的字符串当作正则表达式执行;

  • 正则表达式-元字符

    正则表达式-元字符

    字符 描述
    \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。
    ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
    $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
    * 匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
    + 匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
    ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
    {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
    {n,} n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
    {n,m} m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
    ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
    . 匹配除“\ n”之外的任何单个字符。要匹配包括“\ n”在内的任何字符,请使用像“(.|\n)”的模式。
    (pattern) 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。
    (?:pattern) 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
    (?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
    (?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
    (?<=pattern) 反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
    (?<!pattern) 反向否定预查,与正向否定预查类拟,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
    x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
    [xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
    [^xyz] 负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。
    [a-z] 字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
    [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
    \b 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
    \B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
    \cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
    \d 匹配一个数字字符。等价于[0-9]。
    \D 匹配一个非数字字符。等价于[^0-9]。
    \f 匹配一个换页符。等价于\x0c和\cL。
    \n 匹配一个换行符。等价于\x0a和\cJ。
    \r 匹配一个回车符。等价于\x0d和\cM。
    \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
    \S 匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
    \t 匹配一个制表符。等价于\x09和\cI。
    \v 匹配一个垂直制表符。等价于\x0b和\cK。
    \w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
    \W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
    \xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。.
    \num 匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
    \n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
    \nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
    \nml 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
    \un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。
  • 正则表达式 – 语法

    正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。

    1.正则表达式基本语法

    两个特殊的符号’^’和’$’。他们的作用是分别指出一个字符串的开始和结束。例子如下:

    "^The":表示所有以"The"开始的字符串("There","The cat"等); "of despair$":表示所以以"of despair"结尾的字符串; "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了; "notice":表示任何包含"notice"的字符串。

    象最后那个例子,如果你不使用两个特殊字符,你就在表示要查找的串在被查找串的任意部分——你并 不把它定位在某一个顶端。

    其它还有’*’,’+’和’?’这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示“没有或 更多”,“一次或更多”还有“没有或一次”。下面是几个例子:

    "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……); "ab+":表示一个字符串有一个a后面跟着至少一个b或者更多; "ab?":表示一个字符串有一个a后面跟着零个或者一个b; "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b。

    你也可以使用范围,用大括号括起,用以表示重复次数的范围。

    "ab{2}":表示一个字符串有一个a跟着2个b("abb"); "ab{2,}":表示一个字符串有一个a跟着至少2个b; "ab{3,5}":表示一个字符串有一个a跟着3到5个b。

    请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。还有,你可能注意到了,’*’,’+’和 ‘?’相当于"{0,}","{1,}"和"{0,1}"。 还有一个’¦’,表示“或”操作:

    "hi¦hello":表示一个字符串里有"hi"或者"hello"; "(b¦cd)ef":表示"bef"或"cdef"; "(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c";

    ‘.’可以替代任何字符:

    "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字; "^.{3}$":表示有任意三个字符的字符串(长度为3个字符);

    方括号表示某些字符允许在一个字符串中的某一特定位置出现:

    "[ab]":表示一个字符串有一个"a"或"b"(相当于"a¦b"); "[a-d]":表示一个字符串包含小写的’a’到’d’中的一个(相当于"a¦b¦c¦d"或者"[abcd]"); "^[a-zA-Z]":表示一个以字母开头的字符串; "[0-9]%":表示一个百分号前有一位的数字; ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

    你也可以在方括号里用’^’表示不希望出现的字符,’^’应在方括号里的第一位。(如:"%[^a-zA-Z]%"表 示两个百分号中不应该出现字母)。

    为了逐字表达,你必须在"^.$()¦*+?{\"这些字符前加上转移字符’\’。

    请注意在方括号中,不需要转义字符。

    2.正则表达式验证控制文本框的输入字符类型

    1.只能输入数字和英文的:

    <input onkeyup="value=value.replace(/[\W]/g,”) " onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))" ID="Text1" NAME="Text1">

    2.只能输入数字的:

    <input onkeyup="value=value.replace(/[^\d]/g,”) " onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d]/g,”))" ID="Text2" NAME="Text2">

    3.只能输入全角的:

    <input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,”)" onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\uFF00-\uFFFF]/g,”))" ID="Text3" NAME="Text3">

    4.只能输入汉字的:

    <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,”)" onbeforepaste="clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\u4E00-\u9FA5]/g,”))" ID="Text4" NAME="Text4">

    3.正则表达式的应用实例通俗说明


    //校验是否全由数字组成

    /^[0-9]{1,20}$/

    ^ 表示打头的字符要匹配紧跟^后面的规则

    $ 表示打头的字符要匹配紧靠$前面的规则

    [ ] 中的内容是可选字符集

    [0-9] 表示要求字符范围在0-9之间

    {1,20}表示数字字符串长度合法为1到20,即为[0-9]中的字符出现次数的范围是1到20次。 /^ 和 $/成对使用应该是表示要求整个字符串完全匹配定义的规则,而不是只匹配字符串中的一个子串。


    //校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串

    /^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/

    ^[a-zA-Z]{1} 表示第一个字符要求是字母。

    ([a-zA-Z0-9]|[.]){4,19} 表示从第二位开始(因为它紧跟在上个表达式后面)的一个长度为4到9位的字符串,它要求是由大小写字母、数字或者特殊字符集[.]组成。


    //校验用户姓名:只能输入1-30个以字母开头的字串

    /^[a-zA-Z]{1,30}$/


    //校验密码:只能输入6-20个字母、数字、下划线

    /^(\w){6,20}$/

    \w:用于匹配字母,数字或下划线字符


    //校验普通电话、传真号码:可以“+”或数字开头,可含有“-” 和 “ ”

    /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/

    \d:用于匹配从0到9的数字;

    “?”元字符规定其前导对象必须在目标对象中连续出现零次或一次

    可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等


    //校验URL

    /^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的长度为length(“https://”) + n )

    \ / :表示字符“/”。

    . 表示所有字符的集

    • 等同于{1,},就是1到正无穷吧。
  • Minio文件镜像同步配置

    背景

    项目中由于会使用到minio对象存储,在需要满足项目多点灾备的情况下,记录下使用mirror和replicate来实现minio同步和镜像的相关功能,作为后续配置参考。

    mirror和replicate的区别

    mc mirror 用于在两个minio server中的桶之间进行数据同步。mc mirror 命令类似于 Unix rsync 命令,会对源和目标地址进行比较,并只将新增或修改的内容从源复制到目标,可以实现将源目录快速同步到目标目录。

    mc replicate 用于配置 Minio 服务器上的桶(replication rules)用于在区域间自动复制对象。这通常用于地理冗余和跨区域数据复制。最大的优势是在源桶和目标桶之间实现自动、异步的对象复制。

    1
    mc replicate add <source-bucket> --priority <arg> --remote-bucket <arg> --storage-class <value> --tags <value> --prefix <string> --arn <string>

    replicate配置

    两者的主要区别在于mc replicate 适用于设置自动跨区域复制规则,而 mc mirror 则更适合于手动的、一次性的数据迁移或备份。

    配置别名(源节点和备节点)

    alias主要的作用是方便好记,方便后续配置。

    1
    2
    3
    mc alias set minio-server http://10.8.40.1:9000 minio password --api s3v4 
    mc alias set minio-backup http://10.8.40.2:9000 minio password --api s3v4 
    mc alias ls

     

    创建bucket(源节点)

    1
    2
    3
    4
    mc mb -p minio-server/ucap 
    mc mb -p minio-backup/ucap 
    mc version enable minio-server/ucap 
    mc version enable minio-backup/ucap

    配置双向同步的主主复制(源节点)

    1
    2
    3
    4
    5
    #主节点上配置 
    mc replicate add --remote-bucket http://minio:password@10.8.40.2:9000/ucap --replicate "delete,delete-marker,existing-objects" --sync minio-server/ucap --limit-upload 200Mi  
    
    #备份节点配置-如果是灾备,只有执行1条即可。 
    mc replicate add --remote-bucket http://minio:password@10.8.40.1:9000/ucap --replicate "delete,delete-marker,existing-objects" --sync minio-backup/ucap --limit-upload 200Mi

    测试效果

    用以下方法测试在多点写入,是否都可以访问。

    1
    2
    3
    4
    5
    6
    mc cp /etc/hosts minio-server/ucap 
    mc cp /etc/alias minio-backup/ucap 
    curl http://10.8.40.1:9000/ucap/hosts 
    curl http://10.8.40.2:9000/ucap/hosts 
    curl http://10.8.40.1:9000/ucap/alias 
    curl http://10.8.40.2:9000/ucap/alias

     

    replicate相关状态查看

    命令 描述
    mc replicate add 添加服务器端复制配置规则
    mc replicate edit 修改现有的服务器端复制配置规则
    mc replicate ls 列出服务器端复制配置规则
    mc replicate status 显示服务器端复制状态
    mc replicate resync 重新复制所有以前复制的对象
    mc replicate export 导出服务器端复制配置
    mc replicate import 以 JSON 格式导入服务器端复制配置
    mc replicate rm 删除服务器端复制配置规则

    mirror后续再补…..

    mirror后续再补…..

  • nps内网穿透代理服务器

    nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理p2p等,并带有功能强大的web管理端。

    背景

     

    web

    1. 做微信公众号开发、小程序开发等—-> 域名代理模式

    2. 想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,—-> tcp代理模式

    3. 在非内网环境下使用内网dns,或者需要通过udp访问内网机器等—-> udp代理模式

    4. 在外网使用HTTP代理访问内网站点—-> http代理模式

    5. 搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备—-> socks5代理模式

    特点

     
    • 协议支持全面,兼容几乎所有常用协议,例如tcp、udp、http(s)、socks5、p2p、http代理…
    • 全平台兼容(linux、windows、macos、群辉等),支持一键安装为系统服务
    • 控制全面,同时支持服务端和客户端控制
    • https集成,支持将后端代理和web服务转成https,同时支持多证书
    • 操作简单,只需简单的配置即可在web ui上完成其余操作
    • 展示信息全面,流量、系统信息、即时带宽、客户端版本等
    • 扩展功能强大,该有的都有了(缓存、压缩、加密、流量限制、带宽限制、端口复用等等)
    • 域名解析具备自定义header、404页面配置、host修改、站点保护、URL路由、泛解析等功能
    • 服务端支持多用户和用户注册功能

    没找到你想要的功能?不要紧,点击进入文档查找吧

    快速开始

     

    安装

     

    GETHUB: https://github.com/ehang-io/nps/releasesreleases:

    GETEE: https://gitee.com/houlijiang/common/tree/master/nps

    下载对应的系统版本即可,服务端和客户端是单独的

    服务端启动

     

    下载完服务器压缩包后,解压,然后进入解压后的文件夹

    • 执行安装命令

    对于linux|darwin sudo ./nps install

    对于windows,管理员身份运行cmd,进入安装目录 nps.exe install

    • 默认端口

    nps默认配置文件使用了80,443,8080,8024端口

    80与443端口为域名解析模式默认端口

    8080为web管理访问端口

    8024为网桥端口,用于客户端与服务器通信

    • 启动

    对于linux|darwin sudo nps start

    对于windows,管理员身份运行cmd,进入程序目录 nps.exe start

    安装后windows配置文件位于 C:\Program Files\nps,linux和darwin位于/etc/nps

    如果发现没有启动成功,可以查看日志(Windows日志文件位于当前运行目录下,linux和darwin位于/var/log/nps.log)

    • 访问服务端ip:web服务端口(默认为8080)
    • 使用用户名和密码登陆(默认admin/123,正式使用一定要更改)
    • 创建客户端

    客户端连接

     
    • 点击web管理中客户端前的+号,复制启动命令
    • 执行启动命令,linux直接执行即可,windows将./npc换成npc.exe用cmd执行

    如果需要注册到系统服务可查看注册到系统服务

    配置

     
    • 客户端连接后,在web中配置对应穿透服务即可
    • 更多高级用法见完整文档
  • NPS-比frp还简单易用的内网穿透及端口映射工具

    为什么要使用NPS

    1. 1. frp手动编写映射规则配置文件。nps在浏览器中可视化配置。
    2. 2. frp新增映射规则需要重启客户端。nps无需重启客户端,所有配置均在服务端进行配置立即生效。
    3. 3. frp需要手动设置开机自启。nps安装后自动注册到系统服务,随系统启动而启动。

    教程内容比较多,总体下来部署非常快,除去安装的过程需要命令操作安装完成后就完全脱离了终端操作。

    搭建教程

    客户端与服务端下载地址:https://github.com/ehang-io/nps/releases github镜像 下载地址 https://githubfast.com/ehang-io/nps/releases/ 一定要选择适合自己服务器内核的版本!一定要选择适合自己服务器内核的版本!一定要选择适合自己服务器内核的版本! 要是不知道自己的服务器是什么内核,linux用arch命令查看,显示aarch64 的就是arm64内核

    在Linux上搭建

    下载服务端文件

    mkdir nps && cd nps
    # 下载服务端
    wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_server.tar.gz
    # 解压
    tar -zxvf linux_amd64_server.tar.gz

    编辑配置文件

    vim conf/nps.conf

    常用配置:

    • • http_proxy_port:域名代理http代理监听端口。
    • • https_proxy_port:域名代理https代理监听端口。
    • • https_just_proxy:为false时仅代理https转发,为true则可以配置站点的ssl证书。
    • • web_port:web管理端口。
    • • web_username:web界面管理账号。
    • • web_password:web界面管理密码。

    安装服务端

    # 进行安装
    ./nps install
    # 启动nps
    nps start

    安装完成后,nps的配置文件会存放在 /etc/nps目录下。

    在windows上搭建

    下载服务端文件并存放解压:

    https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_server.tar.gz

    编辑配置文件

    使用记事本或者你任意喜欢的文本编辑器编辑 conf/nps.conf文件,配置文件的内容与Linux中部署是一样的道理。

    安装服务端

    我们需要使用 管理员权限来运行cmd终端:

    640

    进入到存放 nps目录的地方执行命令安装:

    nps.exe install
    640-1

    如果跟我一样出现:

    load config file error the target config file: C:\Program Files\nps\conf\nps.conf don't exist

    相似的错误,只需要将 nps下的conf目录完整的拷贝至 C:\Program Files\nps\目录下,然后重新执行nps.exe install来安装,安装完成后使用以下命令来启动。

    # 需要使用管理员模式下的cmd执行启动
    net start nps

    访问web控制台

    通过访问 http://127.0.0.1:8080来进入到控制台登录界面,使用配置的web_usernameweb_password来进行登录。

    创建客户端

    一台需要映射的机器视作一个客户端,我们需要先在控台创建好客户端,才能对需要穿透的主机进行穿透。我们点击左侧的 客户端进入到客户端管理界面。点击新增客户端添加一个需要映射客户端的基本信息:

    640-2

    填写 备注基本就可以了,填写完成点击新增按钮即可添加成功,新增完会自动回到客户端列表,此时刷新即可看到新增的客户端:

    640
    1. 1. ID:id是用来区分主机的,胚子的域名绑定和端口映射都是跟id挂钩的。
    2. 2. 备注:用于方便区分不同的机器。
    3. 3. 版本:内网机器安装的客户端版本。
    4. 4. 唯一验证密钥:内网机器安装的客户端通过这个密码可以找到与平台挂钩的映射配置,唯一且只能被一个客户端引用。

    配置端口映射

    在每个客户端后面也就是右侧中有两个按钮,在 隧道中可以配置端口映射规则,进入到隧道我们新增一个隧道:

    640-1

    依次来看:

    1. 1. 模式:映射的端口走的什么协议,比如(TCP,UDP)等等。一般映射网站也可以使用TCP协议。
    2. 2. 客户端ID:这个映射规则被哪个客户端所使用,一般情况下也可以直接修改现有规则的客户端ID将规则移动到指定客户端下。
    3. 3. 备注:给自己看的,用于分别映射用途。
    4. 4. 服务端端口:即搭建NPS服务器的自身端口,不可重复使用同一个端口。
    5. 5. 目标(IP:端口):指内网客户端需要映射的端口,如(127.0.0.1:3389),也可以是内网其他机器如(192.168.1.100:3389)。

    点击下方 新增按钮即可立即生效。

    配置域名访问

    如果内网存在网站这种服务,想要使用域名访问内网的网站则可以配置 主机映射,同样的在客户单列表中选择指定的客户端右侧的主机按钮进入到域名配置页面,点击新增按钮:

    640

    继续来看每一个作用重复的内容不再赘述:

    1. 1. 主机:即需要是什么域名来访问咱们的服务,填写域名即可。
    2. 2. 模式:这里分(http、https)。
    3. 3. URL路由:则是区分不同的路由访问不同的服务类似nginx代理(http://a.com/a、http://a.com/b)。

    如果经常使用域名访问服务,还是比较推荐使用域名泛解析 *来解析道NPS服务器的IP上。

    安装客户端

    Linux上安装

    mkdir npc && cd npc
    wget https://github.com/ehang-io/nps/releases/download/v0.26.10/linux_amd64_client.tar.gz
    tar -zxvf linux_amd64_client.tar.gz
    # 安装命令
    ./npc install -server=127.0.0.1:8024 -vkey=8x95ia9d2zjwjvco -type=tcp
    # 启动客户端开始映射
    npc start
    1. 1. -server:这里是你NPS服务器的IP地址。
    2. 2. -vkey:是指定客户端的唯一验证密钥,即安装成功后可以看到当前客户端处于在线状态。

    windows上安装

    下载客户端文件并存放解压:

    https://github.com/ehang-io/nps/releases/download/v0.26.10/windows_amd64_client.tar.gz

    同理,以 管理员权限打开cmd进入存放客户单的目录下执行:

    # 安装命令
    npc.exe install -server=127.0.0.1:8024 -vkey=8x95ia9d2zjwjvco -type=tcp
    # 启动映射
    net start npc

    这里需要注意:在windwos上可能会被杀毒软件误杀,找回文件放入白名单即可。


    至此,所有的安装和配置过程均已结束。后面添加映射规则只需要前往 web控制台操作即可,每一条规则添加完成后都是立即生效的无需重启任何服务。服务端和客户端如若出现电脑重启的情况也没关系,等系统启动后映射服务会自动启动,无需担心穿透失联。

  • 畅网微控 X86-P1软路由N3160迷你主机 如何安装系统

    畅网微控 X86-P1软路由N3160迷你主机 如何安装系统

    第一步:制作U盘启动 下载安装 Ventoy ,注意 分区类型选择:GPT

    58d00a39c003d340d585cbfc8f641ca4

    下载地址:https://github.com/ventoy/Ventoy/releases/download/v1.0.99/ventoy-1.0.99-windows.zip

    第二步:制作完成把相应的系统iso镜像拷贝到U盘

    5bbf07f8e61574783b012a8eeca05a2a

    第三步:启动主机 ,按 F11  进入选择启动引导页面,

    4884121aa5b58ca3c2bdb467ad7fe3f6
  • Linux实例的/etc/fstab文件配置错误导致系统启动异常

    问题描述

    通过远程连接软件无法登录Linux实例,通过使用管理终端连接Linux实例远程连接时,发现系统出现进入到急救模式(emergency mode)的信息,且出现报错。

    • CentOS实例报如下错误。

    • Ubuntu实例报如下错误。

       
      An error occurred while mounting /alidata.
      Press S to skip mounting or M for manual recovery

      具体信息以下图所示。Ubuntu进入维护模式

    问题原因

    一般是因为/etc/fstab文件中写入了错误的文件系统,或者磁盘的分区信息不正确。/etc/fstab文件主要用于保存服务器的磁盘挂载信息,如果该配置文件中写入不正确的挂载信息或者该文件自身存在访问错误,例如:权限配置、文件丢失等,系统启动时就可能出现异常,导致启动失败。

    解决方案

    说明
    • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

    • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

    • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

    本节主要解决CentOS和Ubuntu系统因为/etc/fstab配置文件错误导致启动失败的解决方法。

    说明

    本文相关配置及说明适用于CentOS6.5、CentOS7.0、Ubuntu12.04和Ubuntu14.04等操作系统。在其它操作系统版本上的配置可能有所差异,具体情况请参阅相应操作系统官方文档。

    CentOS实例

    本文主要介绍以下两种方法解决该问题,推荐您使用方法一

    方法一

    1. 通过使用管理终端连接Linux实例远程连接ECS实例。系统提示进入急救模式时,输入实例登录密码。

    2. 执行以下命令,将根分区的挂载模式变更为读写。

       
      mount / -o remount,rw
    3. 执行blkid命令,查看ECS实例上磁盘的分区情况以及文件系统。如下图所示,ECS实例数据盘分区为/dev/xvdb1,文件系统类型为ext4。

    4. 执行以下命令,检查磁盘的分区信息与文件系统和上一步返回的结果是否一致。

       
      vim /etc/fstab
    5. 如果不一致,按以下步骤进行修改。

      1. 将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。

         
        /dev/xvdb1 /mydata ext4 defaults,nofail 0 0
        说明

        建议您在挂载的时候添加nofail参数,在启动实例时,若设备不存在会直接忽略它,从而不发生报错。

      2. Esc键退出编辑模式,并输入:wq!,按Enter键保存并退出。

    6. 执行reboot命令,重启系统,确认能成功登录系统。

    方法二

    1. 在ECS控制台重启实例(或者强制重启示例),然后使用VNC连接实例,当系统启动至内核选项界面时,按e键进入修改grub引导文件。

    2. 将光标定位至Linux内核参数行,删除其余内核参数,添加rw init=/bin/bash参数,如下图所示,然后按Ctrlx键,进入单用户模式。

    3. 参见方法一的第3步至第6步,修改/etc/fstab配置后,重启实例即可。

    Ubuntu实例

    方法一

    1. 通过使用管理终端连接Linux实例远程连接ECS实例。

    2. S键跳过磁盘挂载,进入系统。

    3. 执行如下命令,变更根分区的挂载模式为读写。

       
      mount / -o remount,rw
    4. 执行blkid命令,查看ECS实例上磁盘的分区情况以及文件系统。如下图所示,ECS实例数据盘分区为/dev/xvdb1,文件系统为ext4。

    5. 执行如下命令,检查磁盘的分区信息与文件系统和上一步返回的结果是否一致。

       
      vim /etc/fstab
    6. 如果不一致,按以下步骤修改。

      1. 将光标移到异常的参数行,按i键进入编辑模式,写入正确的分区信息,如下所示。

         
        /dev/xvdb1 /mydata ext4 defaults,nofail 0 0
        说明

        建议您在挂载的时候添加nofail参数,在启动实例时,若设备不存在会直接忽略它,从而不发生报错。

      2. Esc键退出编辑模式,并输入:wq!,按Enter键保存并退出。

    7. 执行reboot命令,重启系统,确认能成功登录系统。

    方法二

    具体操作请参见CentOS实例的方法二

    相关文档