分类 软件技术 下的文章

CentOS7下编译安装Shadowsocks-libev

CentOS7下编译安装Shadowsocks-libev

前言:

Shadowsocks是一种基于Socks5代理方式的加密传输协议,也可以指实现这个协议的各种开发包。在中国大陆,本工具广泛用于解决长城防火墙的未知错误而导致的Google、YouTube、Facebook等正常境外网站不能正常访问。网上有大量热心网友提供了各种版本的一键安装脚本,用于支持那些非计算机从业人员快速方便的在服务器上搭建服务端。但是某些情况下,一键脚本的安全性难以保证;另一方面,使用一键脚本不能让我们具体了解到这个工具是如何工作的。而本文则提供了一步一步从源代码手动编译安装Shadowsocks-libev的过程。

阅读本文,您可能需要基本的Linux系统操作技术与网络技术基础。

步骤:

  1. 准备编译环境,在CentOS7下运行以下两条命令完成环境准备。

    yum install epel-release -y
    yum install gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y
  2. 安装Git,并从GitHub下载源码。

    yum install git -y
    cd /usr/local/src
    git clone https://github.com/shadowsocks/shadowsocks-libev.git
  3. 配置并编译源代码。

    cd shadowsocks-libev
    git submodule update --init --recursive
    sh autogen.sh
    ./configure --disable-documentation
    make
    make install
  4. 配置Shadowsocks服务端配置文件,文件位于 .../shadowsocks-libev/debian/config.json,将此文件复制到/etc/shadowsocks-libev/config.json

    mkdir /etc/shadowsocks-libev
    cp ./debian/config.json /etc/shadowsocks-libev/config.json
  5. 使用vi编辑器打开/etc/shadowsocks-libev/config.json

    vi /etc/shadowsocks-libev/config.json
  6. 按照自己的需求填写服务端参数。

    {
    "server":"0.0.0.0",    //服务端IP地址,Linux系统下0.0.0.0表示本地
    "server_port":8388,    //服务端端口号
    "local_port":1080,     //本地端口号
    "password":"barfoo!",   //密码
    "timeout":10,    超时时长(秒)
    "method":"chacha20-ietf-poly1305"     //加密方式
    }
    #加密方式据说有如下几种:
    aes-256-gcm
    aes-192-gcm
    aes-128-gcm
    aes-256-ctr
    aes-192-ctr
    aes-128-ctr
    aes-256-cfb
    aes-192-cfb
    aes-128-cfb
    camellia-128-cfb
    camellia-192-cfb
    camellia-256-cfb
    chacha20-ietf-poly1305
    chacha20-ietf
    chacha20
    rc4-md5
  7. shadowsocks-libev.default文件复制到/etc/sysconfig/shadowsocks-libev
    shadowsocks-libev.service文件复制到/usr/lib/systemd/system/目录。因为本例中编译安装的程序文件位置为/usr/local/bin/,需要修改一下文件中的启动命令。
cp /usr/local/src/shadowsocks-libev/rpm/SOURCES/systemd/shadowsocks-libev.default /etc/sysconfig/shadowsocks-libev
cp /usr/local/src/shadowsocks-libev/rpm/SOURCES/systemd/shadowsocks-libev.service /usr/lib/systemd/system/
vi /usr/lib/systemd/system/shadowsocks-libev.service

将以下一行:

ExecStart=/usr/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS

替换成以下内容,按ESC键输入:wq,按Enter键保存退出即可。

ExecStart=/usr/local/bin/ss-server -c "$CONFFILE" $DAEMON_ARGS
  1. 运行服务,检查服务是否正常运行,若服务运行正常,即显示:Active: active (running)

    systemctl start shadowsocks-libev
    systemctl status shadowsocks-libev
  2. 确定服务正常后,将服务添加到开机启动。这时我们在客户端中输入服务器的IP地址等配置信息后就可以使用了,若依然不可以,请检查配置信息是否填写正确,并检查服务端防火墙配置。

    systemctl enable shadowsocks-libev

防火墙配置:

若服务端与客户端配置均正确,依然无法建立连接,我们便需要检查是否服务端防火墙导致。若服务器系统配置了防火墙并已经启动,那么在配置防火墙开放对应服务端口前,自然是无法与服务器建立连接的。其实我们作为服务器的管理人员,自然应该知道自己服务器是否有开启防火墙的。

  1. 我们可以使用此网站检查某个端口是否可以访问。输入IP地址和端口号后点击Check即可检测。若提示Port XX is open on x.x.x.x 即表示端口已经打开。反之 close即表示端口没有反应。此时我们进一步检查防火墙。
  2. 检查防火墙服务是否运行,CentOS7默认将原来CentOS6时代的防火墙iptables升级为了firewalld。使用以下命令检查防火墙运行状态。若回显信息提示:running,则表示防火墙运行中。

    firewall-cmd --state
  3. 为Shadowsocks在防火墙中添加规则,开放对应端口的TCP和UDP通信。下以上文配置文件中的8388端口为例,具体按自己需求修改。到此为止,我们便完成了防火墙的配置。

    firewall-cmd --zone=public --add-port={8388/tcp,8388/udp} --permanent
    firewall-cmd --reload

本文到此结束。

参考:

  1. shadowsocks-libev-GitHub项目页

CentOS7部署MinIO服务器&VPS使用MinIO Client备份数据

CentOS7部署MinIO服务器&VPS使用MinIO Client备份数据

重要数据备份是很重要的,本博客也遇到了几次意外,但是都从备份中恢复了。以往都是定期手动备份站点目录和数据库,耗时又费力。在此探索一种新的方式,在一台存储空间较大的VPS(俗称大盘机)上部署MinIO服务端,客户机通过MinIO Client将文件备份到大盘机。

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

服务端部署

根据MinIO官方文档描述,MinIO服务端部署非常简单,几条命令即可完成安装,然后我们再创建一个systemd配置文件用于开机自启即可。

  1. 依次输入以下两行命令,下载二进制文件至/usr/local/bin,并赋予其可执行权限。

    wget -P /usr/local/bin https://dl.min.io/server/minio/release/linux-amd64/minio
    chmod +x /usr/local/bin/minio
  2. 依次输入以下两行命令,创建MinIO工作目录,尝试手动运行服务。记录回显的Endpoint、AccessKey、SecretKey等信息,尝试在浏览器中输入Endpoint中的地址,输入AccessKey和SecretKey登陆。检查正常后按Ctrl + C停止MinIO。若不成功,请检查MinIO是否正常运行,并检查系统防火墙配置是否放行9000端口。

    mkdir /srv/MinIO
    minio server /srv/MinIO
  3. CentOS7使用firewalld防火墙,使用以下第一条命令在防火墙规则中添加开放9000端口的TCP通信,另勿忘使用第二条命令重载防火墙。

    firewall-cmd --zone=public --add-port=9000/tcp --permanent
    firewall-cmd --reload
  4. 运行以下命令,在/etc/systemd/system/目录下创建minio.service配置文件,并使用vi编辑器打开。tips:Alt+.可快速输入上一命令中的变量。

    touch /etc/systemd/system/minio.service
    vi /etc/systemd/system/minio.service
  5. 在vi编辑器中输入以下内容,按ESC键,输入:wq,保存退出。

    [Unit]
    Description=MinIO object storage server
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/minio server /srv/MinIO
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target

6.运行以下命令,启动服务,并添加开机启动,此时通过浏览器应该能正常访问到网页即证明配置完成。

systemctl start minio
systemctl enable minio

客户端配置

客户端的配置依然很简单。

  1. 使用wget下载文件到,并赋予其可执行权限。

     wget -P /usr/local/bin/ https://dl.min.io/client/mc/release/linux-amd64/mc
     chmod +x /usr/local/bin/mc
  2. 使用以下命令添加上文部署好的MinIO对象存储服务器信息。其中,Alias是云存储服务的简称。API-SIGNATURE是可选参数。默认情况下,它设置为“S3v4”。

    mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> <API-SIGNATURE>

    ​ 例如:

     mc config host add MinIO http://10.145.87.224:9000 Do24SZ3JDWEKDWPZ5DV2O KL7Hjas76BdI4msWYEZh3FH*Sh4B+gH&SvGc3z5Ub
  3. 在我们上面添加的MinIO下,创建一个名为blog的存储桶(bucket)。

    mc mb MinIO/blog
  4. 运行以下命令将blog.lexsion目录下的文件同步到名为MinIO/blog的bucket里,并保持对目录修改的监听。此命令在本地修改/删除文件后会同步在bucket中修改/删除。测试正常后按Ctrl+C停止。

    mc mirror -w --overwrite --remove /www/wwwroot/blog.lexsion MinIO/blog
  5. 创建systemd配置文件,使用以下命令打开vi编辑器。

    vi /etc/systemd/system/minioc.service
  6. 在打开的编辑器中按i键进入编辑模式,输入如下内容,按ESC键,输入:wq按Enter键保存退出。

    [Unit]
    Description=MinIO Client Service
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/mc mirror -w --overwrite --remove /www/wwwroot/blog.lexsion MinIO/blog
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
  7. 运行服务,并添加到开机自启动。

    systemctl start minioc
    systemctl enable minioc

到此,本文就结束了。但是MinIO的功能远不止这些,大家有兴趣可以自行探索。

参考:

MinIO中文Docs.
https://docs.min.io/cn/
MinIO.Docs.English Ver.
https://docs.min.io/docs/
Centos7(Firewall)防火墙开启常见端口命令
http://www.5yun.org/10074.html
vim非完全学习手册
https://lexsion.com/index.php/archives/129/

CentOS7升级最新版Git

CentOS7升级最新版Git

前言

Git是一个快速、可扩展的分布式版本控制系统,具体用途这里不再赘述。有时,我们生产环境中的某些程序可能会对Git版本有要求。但是CentOS7中的Git版本是比较旧的1.8.3.1版本,且无法使用yum升级到最新版本。如果这时我们的程序需要2.x的Git,便会出现兼容性问题。这种情况下,我们就需要自行下载并编译安装了。

读懂实践本文,你可能需要在技能树中点亮以下技能:

  • Linux系统基础操作

操作

  1. 运行以下命令安装所有依赖软件包。
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 
yum install gcc perl-ExtUtils-MakeMaker
  1. 在/usr/src目录下创建一个Git目录,并进入。
mkdir -p /usr/src/Git
cd /usr/src/Git
  1. 打开Git下载页下载最新版的Git。页面按发布时间排序,我们直接点开最近的一个版本(我这2.23.0)。然后在“Source code(tar.gz)”上右击,复制其下载地址,然后使用wget下载文件。此命令由wget后空格加文件地址构成。
wget https://github.com/git/git/archive/v2.23.0.tar.gz
  1. 查看下载的文件名(比如我这里下载的文件名是v2.23.0.tar.gz),并使用tar工具解包,解包后查看解出的文件夹名称。这里我们发现文件加名为“git-2.23.0”
[root@lexsion]# ls
v2.23.0.tar.gz
[root@lexsion]# tar xzf v2.23.0.tar.gz
[root@lexsion]# ls
git-2.23.0  v2.23.0.tar.gz
  1. 进入解出的文件夹,使用make命令编译并安装新版Git工具。
cd git-2.23.0
make prefix=/usr/local/git all
make prefix=/usr/local/git install
  1. 移除旧版本Git,为新版Git添加软链接。
yum remove git
cd /usr/bin
ln -s  /usr/local/git/bin/git git
  1. 使用以下命令查看Git版本,确认是否安装成功。
git --version

以上就是CentOS7下,升级Git版本的过程。

参考

  1. centOS7升级git版本到2.7.3
  2. centos7升级git到最新版本
  3. Git-GitHub项目页

OpenSSL-使用OpenSSL生成CSR文件

OpenSSL-使用OpenSSL生成CSR文件

前言

在申请SSL证书之前,需要先生成CSR文件(CSR,Cerificate Signing Request,证书请求文件)。CSR是公钥证书的原始文件,它包含了服务器信息和单位信息,需要提交给CA认证中心。很多网站可以帮我们生成CSR文件,图形化的操作也非常方便,但毕竟不是我们本地生成,恐有key泄露的风险。为此,我找到了在Linux系统下通过OpenSSL工具生成该文件的方法。

读懂实践本文,你可能需要在技能树中点亮以下技能:

  • Linux系统操作基础

准备

  • 一台运行Linux系统的本地计算机或服务器

利用OpenSSL命令生成ECC CSR文件

我申请的SSL证书是ECC类型的(ECC,椭圆曲线加密),相对RSA类型的SSL证书,ECC类型有更好的性能,但其兼容性较RSA差。这里先介绍ECC类型SSL证书申请所用的CSR文件生成的过程。

  1. 使用以下命令在当前目录生成一个名为“Lexsion_ECC.key”的私钥文件,其加密方式为prime256v1。
openssl ecparam -out Lexsion_ECC.key -name prime256v1 -genkey
  1. 使用以下命令利用上面生成的私钥文件“Lexsion_ECC.key”生成一个CSR文件名为:Lexsion_ECC.csr
openssl req -new -key Lexsion_ECC.key -out Lexsion_ECC.csr

上文中“Lexsion_ECC.key”“Lexsion_ECC.csr”可自定义为需要的文件名。

利用OpenSSL命令生成RSA CSR文件

生成RSA CSR文件只需要一行命令。其中,Lexsion_RSA.csr为CSR文件,Lexsion_RSA.key为私钥文件。rsa:2048为加密强度,可按需求修改。

openssl req -out Lexsion_RSA.csr -new -newkey rsa:2048 -nodes -keyout Lexsion_RSA.key

最终的生成

无论是ECC算法还是RSA算法,生成CSR文件的过程中,都要求我们输入一些信息。我们只需要按照提示输入信息即可完成生成。

部分回显信息翻译:

Country Name (2 letter code) [XX]: #国家 ;两个字母表示,可留空。
State or Province Name (full name) []: #州或省;输入全称,可留空
Locality Name (eg, city) [Default City]: #所在城市;可留空
Organization Name (eg, company) [Default Company Ltd]: #组织名称;比如可填公司名称,可留空
Organizational Unit Name (eg, section) []: #组织部门名称;比如IT,可留空
Common Name (eg, your name or your server's hostname) []: #简称FQHN;填写单域名或泛域名,此处必填。
Email Address []: #邮箱地址;可不填写

A challenge password []: #密码;一般留空
An optional company name []: #可选公司名;可留空

按照提示输入完需要的信息后,key文件&csr文件会于当前所在目录产生。这时我们就可以把产生的CSR文件提交给CA了。私钥(key文件)非常重要,切记保存好,不能泄露。

参考

  1. openssl manpage
  2. 公钥加密算法那些事 | RSA 与 ECC 系统对比

Zebra GK888t打印机安装与配置

Zebra GK888t打印机安装与配置

前言

Zebra GK888t是一款支持热敏纸与热转印的热敏打印机。该机器支持宽度在1.00 英寸/25.4 毫米 至 4.24 英寸/108 毫米 打印介质。支持包括卷筒纸、连续纸、模切纸、连续热敏标签、tag材料等打印介质。支持安装宽度在1.33 英寸/33.8 毫米 至 4.3 英寸/110 毫米的碳带。带有串口、并口、USB口。该机器可用于零售、物流、仓储。

提到热敏打印,可能有人没有听说过,但这并不代表您一定没有接触过。目前看来,生活中最常见的热敏打印应用就是外卖订单。正如热敏的字面意思,热敏纸表面有对热敏感的涂层,如果您对热敏纸加热,纸张表面就会显现出颜色。通过对纸张不同位点的加热,就可以在纸上显现出颜色。上面的方案虽然成本较低,但是有一个缺点,打印出的内容难以稳定的长期保存。此方案一般用于对打印质量与时间要求不高的场合,比如快递面单,外卖单,销售小票等。另一种方案,将颜料预先均匀的涂敷在特定的材料表面制成碳带,将碳带与纸张重叠在一起,然后对需要上色的地方加热,使颜料转印到纸张上,这种技术就是热转印了。热转印相对前一种方案很明显提高了成本,但是这也带来了打印的质量的提升、更广泛的打印介质支持、长期保存也更加稳定。此方案常应用于需要长期保存的场景,比如仓储与资产管理标签的打印。

本文主要讲述热转印模式标签纸耗材安装、驱动安装、打印设置、浏览器调用AdobeReader等内容,硬件的连接不再赘述,Windows局域网共享的配置不在本文讨论范围内。本文旨在记录笔者配置过程,方便日后维护时查阅的同时在此分享。

目录

    1. 耗材安装
    1. 驱动安装
    1. 打印设置
    1. 浏览器调整

1:耗材安装

以下简单介绍耗材安装,详细内容可参考官方用户指南

标签纸安装

  1. 向打印机前方拉动松开锁片的控制杆,向上掀开机器至最大张角使顶盖锁撑起上部机构。向打印机后方旋转导纸板调节器并将导纸板向两侧张开;
    A01.png
  2. 向两侧掰开打印纸挂架;
    A02.png
  3. 将标签纸卡在打印纸挂架上;
    A03.png
  4. 拉出标签纸使标签纸从打印机前端伸出并检查纸卷是否能够自由转动,并确保标签纸的打印面是向上的;
    A04.png
  5. 将标签纸卡入两个导纸板下面,调整“调节旋钮”使导板应刚好触及标签纸的边缘,但不应影响其前后移动。
    A05.png

碳带安装

  1. 将碳带穿过碳带支架(注意区分碳带的正反面,从右侧看,碳带旋出方向应为顺时针,如图所示);
    B01.png
  2. 向右挤压弹簧,让碳带芯右端嵌于碳带供应轴右端;
    B02.png
  3. 将碳带芯左侧的缺口对准左侧供应轴的突起,旋转碳带芯,并锁入供应轴的左侧;
    B03.png
  4. 向右挤压弹簧,将空碳带芯右端嵌于拾取轴的右端;
    B04.png
  5. 将空碳带芯左侧的缺口对准左侧拾取轴突起,旋转并将其锁入拾取轴的左侧;
    B05.png
  6. 将碳带绕过热敏头缠绕到拾取轴,注意缠绕方向(从右侧看,绕入方向为顺时针);
    B06.png
  7. 调节拾取轴调节齿轮,将色带卷紧。
    B07.png

纸张校准

  1. 将撑起上部机构的顶盖锁往机器内侧按压,合上机体至听到咔啪声
  2. 打开电源,一直按住机器出纸键经过红灯快闪一次、两次、直到灯快闪三次时松手,机器将开始进行纸张校准。
  3. 校准完成后,短按一次出纸键,机器应出一张标签纸,此为校准成功。

驱动安装

驱动安装前应当将打印机通过USB数据线正确连接计算机,并将电源接好,本文不对此进行赘述。

  1. Zebra官网支持页面下载驱动安装程序
  2. 双击运行驱动安装程序,按提示点击Next>开始解包过程,在出现的页面中可点击Browse...自定义合适的文件存储位置;
    C01.png

C02.png

  1. 按照提示一路点击Next至完成解包,在提示完成解包的页面中去掉View release notes前的选框,再点击Finish。
    C03.png
  2. 此时会弹出驱动安装向导,点击下一步开始安装;
    C04.png
  3. 选择安装打印机并点击下一步;
    C05.png
  4. 选择ZDesiger GK888t,然后点击下一步;
    C06.png
  5. 选择端口,一般应为USB001,设置语言为简体中文,亦可在此页面上按需求修改打印机名称,完成后点击下一步;
  6. 在出现的完成页面中可看到两个其他安装选项,我们用不到,去掉两个复选框,点击完成结束安装向导。
    C07.png

打印设置

通过上面的操作完成了驱动程序的安装,下面将对打印机按需配置。比如,我司生产环境的需求是将浓度设置为:22,速度设为50.8mm,标签纸50*40mm,工作方式为热转印。

本地打印设置

  1. 以Windows7系统为例,打开 “开始菜单”,点击“设备和打印机”,在出现的窗口中找到我们新安装的打印机,如果没改过名字应该是Zdesigner GK888t;
  2. 在新装的打印机图标上右击,在右键菜单中选择“打印首选项”;
  3. 在打开的页面中,“选项”选项卡下,首先将标签格式设置为:毫米、纵向,将打印速度设置为50.8mm/s,打印浓度设为22,大小处宽度填写50、高度填写40。其他保持默认,点击应用;
    InkedD01.jpg
  4. 切换到“高级设置”选项卡下,操作模式选择撕纸,标签纸类型选择热转印,跟踪模式选择Web检测,调整均保持0不动,然后点击应用;
    InkedD02.jpg
  5. 切换到“抖动”选项卡,将抖动类型设置为“无”,点击应用,然后点击确定关闭“打印首选项”。
    InkedD03.jpg

Notes:

  1. 若使用Windows10操作系统,则打开打印首选项的方式为:在开始菜单右击,选择设置,然后点击“设备>打印机和扫描仪”;选中要操作的打印机,点击“管理>打印首选项”。
  2. 若需要局域网共享打印机,则需要打开“打印机属性”,在“共享”选项卡下勾选共享这台打印机,并点击应用,此处不做详细展开。
  3. 若发现“打印首选项”的语言为英文,可打开“打印机属性”,进入Languages选项卡选择自己需要的语言,点击应用、确定,但此方法无法应用于Windows10。

通过局域网连接打印设置

以下内容旨在记录通过局域网连接到打印机的过程,其不包含配置局域网共享的过程。在参考以下内容连接打印机前,应确保所有相关电脑已经配置局域网共享。

  1. 查询通过USB线缆连接打印机的电脑的IP地址,不同操作系统下该操作可能不同。以下假设电脑使用网线连接:
  • WindowsXP:右击任务栏通知区域中的本地连接网络图标,选择状态,在打开的对话框中打开支持选项卡,此处显示的IP地址应为本机IP地址。
  • Windows7:右击任务栏通知区域网络图标,选择打开网络和共享中心,在弹出的窗口中点击查看活动网络下的本地连接,最后点击详细信息,此处显示的IPv4地址既为本机IP。
  • 命令行模式查找:若您的电脑只有一张网卡且未安装会产生虚拟网卡的软件(比如VM),可尝试此方案:
    按Windows徽标键+R键打开运行对话框,输入“cmd”回车(不包含引号,下同)进入命令提示符,输入“ipconfig -all”命令显示IP,若您只有一张网卡,此时回显的信息中即可简单的找到IP地址。
  1. 在要配置连接到局域网打印机的电脑上,按Windows徽标键+R键打开运行对话框,输入两道反斜杠加上面查到的IP地址,然后按Enter键。
  2. 在打开的窗口中应能看到共享的打印机,在打印机图标上右击并选择连接,等待其连接并自动完成驱动程序的安装。
  3. 参考上一小节:本地打印设置,在设备和打印机中找到添加的网络打印机图标,按照需求调整打印首选项。若出现打印首选项菜单语言英文问题,参考Notes:3

浏览器调整

因我司生产环境需求为浏览器通过AdobeReader打开服务器生产的PDF文件,并打印成标签。实测发现只有AdobeReader能正常输出打印,所以我们需要安装AdobeReader软件,并选择兼容的浏览器使用。

  1. 因为AdobeReader是一款免费软件,我们可以从Adobe官网找到。目前最新版本全名为:Adobe Acrobat Reader DC,打开Adobe Acrobat Reader DC 下载地址,根据提示选择操作系统、语言与下载的软件版本,点击立即下载以下载安装程序。下载完成后运行安装程序,按照提示安装即可。需注意,考虑操作稳定方便,不建议安装其他PDF查看器。
  2. 我们可以选择使用Internet Explorer 11 浏览器打开服务器产生的 PDF 文件链接,IE 浏览器无需进行任何调整,完美适配该任务。此页面可下载 IE11 。如果您适应IE浏览器的操作,那到此就可以在浏览器显示的 PDF 页面直接选择打印机进行打印了。
  3. 若想使用其他浏览器,我们需要检查浏览器相关设置。首先,检查浏览器是否有兼容模式调整按钮,一般存在于网址附近,将输出PDF文件的页面改为IE兼容模式即可调用 Adobe Reader 正常打印。若以上方式无效,或可检查浏览器设置中是否包含关闭浏览器自带PDF渲染器类似项目,通过此设置关闭浏览器自带的PDF查看器。若浏览器自带PDF查看器被关闭,其自然会调用Adobe Reader打开PDF内容。

vim非完全学习手册

vim非完全学习手册

前言

vim是vi的增强版本,是Linux系统下的一款常用文本编辑器。我们在Linux系统下配置软件、编写代码,都离不开文本编辑器。由此看来,学会vim的使用是很重要的。本文将讨论vim的一些常用操作,亦可以作为非完全手册。因本人技术有限,如有错漏,欢迎纠正于补充。

vim的最基本操作

我们可以使用以下操作流程通过vim在当前目录创建一个文件test.txt,并保存退出。学会了这些,在进入vim编辑器后,不会退出而去直接关闭终端或强行关电源的尴尬境地就可以避免了。

  1. 创建文件:

    touch test.txt
  2. 使用vim打开:

    vim test.txt
  3. i 键进入插入模式,正常通过键盘输入自己需要输入的文本。
  4. 完成文本输入后,按 Esc 键退出插入模式。
  5. : 键进入扩展命令模式,输入 wq 保存并退出。
  • 以上是vim编辑器的最基本操作,我们亦可以不使用 touch 命令创建文件,直接运行 vim test.txt vim会提示新文件,最后我们在扩展命令模式下使用 wp 命令时vim会自动创建文件并保存。如此,vim 后既可以接相对路径,亦可以接绝对路径。
  • 另外,vim的扩展命令模式下,命令 w 和命令 q 均可以单独使用,命令 w 用于保存文档,命令 q 则用于退出。退出时若文件有修改但没有保存,操作会失败,此时可以使用 q! 命令强行退出。
  • 学会了以上内容,相当于学会了在Windows系统下打开MS Word,打了几个字,然后保存并退出一样。这肯定不能算是学会了vim,甚至连入门都不算。我们需要对其有一个系统化的学习。

vim的编辑器工作模式

vim常用情况下有四个模式,分别是:

  1. 打开时的命令模式(Command Mode);
    此模式用于一般的命令操作,比如快速的移动光标。
  2. i 键进入的插入模式( INSERT Mode);
    此模式用于文本编辑。
  3. : 键进入的扩展命令模式(Extended Command Mode)。
    此模式包含一些扩展的命令输入,比如保存和退出。
  4. v 键进入可视模式(VISUAL Mode)。
    此模式包含可视内容选择操作。

vim打开时会处于命令模式,通过按键方式进入其他模式。在插入模式时,我们可以看到终端左下角显示 -- INSERT -- 字样;在扩展命令模式,我们可以在左下角看到显示“ : ” ;在可视模式,左下角显示 -- VISUAL -- 字样。如需退回到命令模式,按Esc键即可。

1.vim命令模式下的常用操作

以下操作均在命令模式中进行,在操作前请注意检查左下角不要有-- INSERT ---- VISUAL --: 字样。如不在或不确定是否处于命令模式,请按Esc键进入。

光标的移动:

  1. 可以使用键盘上的方向键移动光标,但考虑更高效的使用,可尝试学习vim的命令键:h(左)j(下)k(上)l(右)。
  2. 可以通过按键 0 快速调至当前行首;使用按键 $ 快速调制行末。(注意:$需使用Shift+4实现)
  3. 可以通过使用 gg 按键快速跳至首行;使用 G 按键快速调至末行。(注意前者时按两次g,后者通过Shift+G实现)
  4. 可以使用 7 G 按键快速跳至第七行;即通过按出 行号后再加大写字母 G ,即可快速跳转至那一行。
  5. 可以使用 /string 命令从内容中查找关键词;string表示字符串,即输入关键字进行查找;我们可以使用(n/N)在查询到的多个结果中上下移动箭头。我们可以使用 /^string 这种,关键字前加 ^ 符号,指定搜索以此关键字开始的行; 使用/string$ 这种,关键字后加$符号,指定搜索以此关键字结尾的行。

文本编辑:

  1. 复制操作:按y键复制当前选定内容;使用 yy 命令复制当前行;使用 5yy 复制光标及以后共5行(yy前输入的数字决定行数);使用 ygg 复制从第一行至光标一行内容;使用 yG 复制从光标行至末行内容。
  2. 剪切操作:按D(需Shift+D)剪切光标处至当前行尾的内容。与以上复制操作类似,剪切操作中使用 dd 剪切光标所在行内容;使用 5dd 剪切光标及以后共5行;使用 dgg 剪切从第一行至光标一行内容;使用 dG 剪切从光标行至末行内容。以上命令可用于删除。
  3. 粘贴操作:使用 p 键将复制的内容粘贴(paste)到光标处。
  4. 撤销与重做:使用 u 撤销(undo)之前的操作,使用 Ctrl+r 组合键重做(redo)撤销的操作。
  5. 按x键删除光标所在字符,使用 r 修改光标处一个字符。

进入其他模式:

  1. 进入插入模式:使用 i 键进入插入模式;使用 I 键进入插入模式并使光标移动到行首;使用 a 进入插入模式使光标自动后退一位,退出模式时会前进一位。使用 A 进入插入模式使光标自动跳到当前行尾;使用 o 进入插入模式会自动于光标所在行后面创建新行;使用 O 进入插入模式会自动于光标所在行前面创建新行。
  2. 进入扩展命令模式:使用 :(Shift+;键)进入扩展命令模式,此模式亦有人称其为末行模式(可能于命令于末行输入有关)。
  3. 进入可视化模式:使用 v 进入可视模式;使用Ctrl+V进入可视块模式;使用 V(Shift+V键) 进入可视行模式。可视模式用于可视化的内容区域选定,以进入模式时光标位置为起始,方向键移动光标选定结束位置。选定后按 y 键复制内容,按 p 键可粘贴内容。
  4. 进入替换模式:按 RShift+R键)进入替换模式,与 r 不同,替换模式是一个单独的模式,可以连续替换内容。区别于插入模式,该模式是对光标所在位替换,而不是插入。

退出:

  • 命令模式下,按住Shift键按两次 z 键,即输入 ZZ 即保存并退出。此方法不建议使用,建议使用扩展命令模式下的退出命令。

2.vim插入模式下的自动代码补全

在使用vim的插入模式编辑文本时,如果文中有单词多次出现,可在输入部分内容情况下按Ctrl+P进入自动代码补全。

3.可视模式区块编辑

  1. 块前部插入:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按Shift+I组合键输入I进入插入模式,输入需要插入的内容,按Esc键退出模式后稍作等待即可完成块前插入。此功能常用作多行添加#号注释。
  2. 块替换:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按r键进入块替换功能,输入要替换城的字符即可完成替换。
  3. 块删除:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按x键删除选定的块,此操作亦可以使用d剪切完成。
  4. 块复制:在命令模式下光标移动到块起点处,按Ctrl+V键进入可视块模式,移动光标至结束位置以选定块。按y键复制块,在需要粘贴处按p粘贴块,具体粘贴效果请自行尝试。块剪切请参考上一条。

4.扩展命令模式常用操作

在命令模式下按:(Shift+;)键进入扩展命令模式。

快速跳至指定行:

  • 在扩展命令模式输入行号按回车键可跳转至指定行。

保存与退出:

  1. 在扩展命令模式下,输入w回车可保存文件。
  2. 在扩展命令模式下,输入q回车可退出,但文件有未保存更改时会失败。
  3. 在扩展命令模式下,输入wq回车可保存并退出。
  4. 在扩展命令模式下,输入w!回车可强行保存。
  5. 在扩展命令模式下,输出q!回车可强行退出,不保存退出。
  6. 在扩展命令模式下,输入wq!回车可强行保存并退出。
  7. 在扩展命令模式下,输入x回车可保存并退出,此处x为小写,大写X为添加密码,慎用!

查找并替换:

  • 语法,此命令使用时需注意操作的内容中不得出现命令中使用的分隔符。

    :范围 s/查找的内容/替换内容/选项
    :范围 s#查找的内容#替换内容#选项
    :范围 s@查找的内容@替换内容@选项
  1. 范围描述:
    使用 1,4 格式可设定范围为行1~行4;使用 5,$ 可设定范围为行5~最后一行;使用 % 可设定范围为全文;使用 ,7 可设定范围为当前光标所在行~行7。
  2. 选项:
    默认情况下,不使用选项时每行只会替换查找到的第一个结果。我们可以使用g选项设置全局替换。
  3. 示例:

    # 将第21行至第30行的第一个root替换为lexsion
    :21,30 s/root/lexsion/
    
    # 将第31行至最后一行的所有root替换为lexison
    :31,$ s/root/lexsion/g
    
    # 将全文中每一行的所有lexsion替换为root
    :% s/lexsion/root/g
    
    # 将全文中每一行的所有/dev/sda替换为dev/sdb,因操作内容中有/,所以将分隔符换成#。
    :% s#/dev/sda#/dev/sdb#g
    
    # 将第4到第6行每行前面添加#号,一般用于注释。此例中使用了正则表达式。
    :4,6 s/.*/#&/
    
    # 将第4到第6行每行前面的#号删除,一般用于取消注释。此例中使用了正则表达式。
    :4,6 s/^#//
  4. 取消高亮显示:
    我们在执行查找替换类操作后会留下相关内容的高亮,退出重新进入亦不会取消,我们可以尝试查询一段不存在于文件中的内容取消高亮,或于扩展命令模式下使用以下命令取消高亮。

    :noh

文件读写:

  1. 扩展命令模式下,输入w回车即可保存文件。如果我们需要将文件另存为,比如另存到/root/file2.txt,可使用以下命令完成,即在w命令后空格加上另存为的目录及文件名。

    :w /root/file2.txt
  2. 若我们需要将文件中的部分行(比如4~8)另存为(比如/root/file3.txt),可以在以上命令前添加范围,命令如下:

    :4,8 w /root/file3.txt
  3. 读入文件至当前光标所在行后。例如,将/root/file3.txt读入,命令如下:

    r /root/file3.txt
  4. 如果我们需要将文件读入到指定行之后,除了将光标移动到指定行处,我们可以使用在以上命令前添加行号的方式指定行。比如我们将其读入到第四行之后:

    4 r /root/file3.txt

环境配置:

  1. 常用临时环境配置命令:

    # 设置行号
    set nu
    
    # 显示控制字符
    set list
    
    # 不区分大小写
    set ic
    
    # 自动缩进
    set ai
    
    # 设置的项目前加no可以表示取消该设置,例如取消行号:
    set nonu
    • 注意,以上命令是在vim的扩展命令模式使用。
  2. 设置永久配置。以上方式设置的配置会在退出vim时还原,如需永久配置,需要创建配置文件并将以上命令写入其中。创建/etc/vimrc可设置全局配置,对所有用户有效。创建~/.vimrc可设置用户配置,对当前用户有效。相信经过上文的学习你是能够完成这个配置的。

双文件编辑

  • vim可以同时打开两个文件,一般用于我们需要对照这一个文件编辑另一个文件的场景,使用以下命令打开目录/root/下的file1和file2:

    # 注意,以下命令中-O为大写,此命令打开后界面呈现纵向分割:
    vim -O /root/file1 /root/file2
    
    # 注意,以下命令中-o为小写,此命令打开后界面呈现横向分割:
    vim -o /root/file1 /root/file2
    
    # 以下命令打开后会对比两个文件,不同处会有高亮:
    vimdiff /root/file1 /root/file2
  • 如需在打开的两个文件界面中切换光标,需要按Ctrl+ww切换。(按住Ctrl键,再按两次w键)
    如需退出两个文件,可在扩展命令模式下运行以下命令退出:

    qall

以上是一些vim的常用操作,想要熟练使用vim,需要日常多加练习,让操作成为习惯。

参考:

Vim help files
https://vimhelp.org/

Vim 中文文档计划-GitHub
https://github.com/yianwillis/vimcdoc

vi编辑器教学视频1-千锋教育-BiliBili
https://www.bilibili.com/video/av13186650/?p=3

vi编辑器教学视频2-千锋教育-BiliBili
https://www.bilibili.com/video/av13186650/?p=4

FRP内网穿透实现公网访问内网群晖

FRP内网穿透实现公网访问内网群晖

前言

frp是一个可用于内网穿透的高性能的反向代理应用,其支持 tcp, udp 协议。自从了解到NAS市场中存在有群晖这种东西后就非常想要体验一番,但无奈贫穷让我无法实现这个愿望。后来偶然间从马路上收废品的人手里几十元收了一台N230工控机,然后就开始了黑群晖的折腾之路。我在上面安装了DSM5.2系统,因为没有洗白,也就用不了群晖官方的工具外网访问;虽然路由器有公网IP,但是因为路由器不太稳,还在调整中,于是便决定先用frp实现内网穿透的方式实现外网访问。另一方面,此方法后期也可做为一种备用方式,以此避免单点故障。因本人水平有限,如有错漏,欢迎大家指出。

读懂实践本文,你可能需要在技能树中点亮以下技能:

  • 基本的网络知识;
  • 基本的Windows系统与Linux系统操作;
  • VPS服务器配置;

准备

  • 运行Windows电脑一台(其他系统也可,但具体某些操作可能有不同)
  • 一台有公网IP的Linux服务器(可以是VPS或独立服务器)
  • 一台运行DSM5.2系统的机器(其他版本系统思路相同,具体操作可能会不一样)
  • SSH客户端,我用的是Putty

警告
本文内容以及本人立场并不建议大家使用盗版的黑群晖系统。一方面,使用盗版直接损害厂方利益,不利于企业发展;另一方面,使用黑群晖系统稳定性较差,不利于使用者数据安全,亦不能享受群晖系统全部的功能。对群晖有需求的朋友如果有能力请购买正版设备!另,学习本文对您的各种设备造成的各种软硬件损坏,本人均不承担任何责任,请谨慎操作!

步骤:

  1. 规划端口
  2. 服务端配置
  3. 客户端配置

1. 规划端口

我们首先需要简单了解frp的工作方式,frp分为服务端和客户端。服务端运行于一台有公网IP的服务器上,以此实现为客户端提供公网访问的服务;客户端运行于内网的一台需要从外网穿透访问的设备上,其会向服务端建立连接。
在开始之前我们要规划端口的使用,在此需要确定如下内容:

  1. 服务端的侦听端口,即客户端向服务端建立连接时,服务端所提供的端口号,本文使用默认值7000;服务器做http代理时的端口号,我使用了8080;若端口与您服务器上已有服务冲突,或您希望使用其他端口,请自行修改;
  2. 客户端将要被内网穿透访问的服务有哪些,分别为其确认一个便于辨识的名称、原本使用的本地端口号、计划在frp服务器上暴露出的端口号,注意避免重复命名与端口冲突问题。
    本例将使用frp服务器的5022端口提供SSH服务,xx.lexsion.net:8080提供管理页面http代理。
  3. 为防止端口滥用问题,可为服务端配置白名单,比如我计划设置5000-5050,8080为frp服务端暴露端口。
  4. 为保证数据安全,我们需要为其设置一个Token,本例我们将其设为:12345678,请自行修改为一个复杂密码。

确认以上信息后我们需访问服务器管理页面,检查服务器运行是否正常。如服务器提供商有防火墙,需为以上确认的服务端需暴露出的端口设置规则放行。若您的服务器运行的系统有开启防火墙,请登陆系统后自行配置防火墙设置。若服务器有运行宝塔面板,需要在宝塔面板中配置开放需要的端口号,或直接关闭防火墙(不推荐)。

2. 服务端配置

  1. 使用SSH工具连接有公网IP的服务器,按步骤0中计划的端口配置防火墙规则。
  2. 运行arch命令显示服务器架构。根据自己服务器系统架构,访问frp项目的Release页获取最新版的软件包下载地址,下载并解压备用(请注意,随着软件更新,地址与文件名可能会与本例中命令不同,请自行修改)。本人服务器使用CentOS7.6,64位架构,相关命令信息如下,其他系统可能会有不同:

    [root@lHost ~]# arch
    x86_64
    [root@lHost ~]# wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
    [root@lHost ~]# tar vxf frp_0.27.0_linux_amd64.tar.gz
  3. 进入解压出的文件夹,使用vi编辑器修改配置文件frps.ini并保存,内容如下:

    [common]
    # 服务端为客户端连接提供的端口号
    bind_port = 7000
    vhost_http_port = 8080
    
    # 认证密钥
    token = 12345678
    
    # 用于限制哪些端口可以用,如果不使用以下语句,将没有限制。
    allow_ports = 5000-5050,8080
  4. 使用以下命令创建相关目录,并将文件复制到对应的目录:

    cp frps /usr/bin/
    mkdir /etc/frp/
    cp frps.ini /etc/frp/
  5. 使用以下命令将 frps.service 文件复制到 /etc/systemd/system/ 目录:

    cp systemd/frps.service /etc/systemd/system/
  6. 使用以下命令启动frps服务:

    systemctl start frps
  • 使用以下命令将其添加到开机自动启动:

    systemctl enable frps
  • 使用以下命令输出运行状态。若一切正常,应能看到 Active: active (running) ...提示:

    systemctl status  frps

    若您后期需要某些调整,以下命令可能有用:

  • 使用以下命令可删除其开机自动启动:

    sudo systemctl disable frps
  • 使用以下命令可检查单元是否配置为自动启动:

    sudo systemctl is-enabled frps
  • 使用以下命令立即停止:

    sudo systemctl stop frps
  • 使用以下命令立即重启:

    sudo systemctl restart  frps
  • 使用以下命令重载配置:

    sudo systemctl reload  frps
  • 如果修改了frps.service文件,需使用以下命令重载systemd 系统配置:

    systemctl daemon-reload
  • 使用此命令显示系统状态:

    systemctl status
  • 使用以下命令输出激活的单元:

    systemctl
  • 使用以下命令输出运行失败的单元:

    systemctl --failed
  • 具体命令参考:systemd (简体中文)#%E7%BC%96%E5%86%99%E5%8D%95%E5%85%83%E6%96%87%E4%BB%B6)

3. 客户端配置

接下来我们在DSM系统上配置客户端。

  1. 打开浏览器,登陆DSM的Web管理页面。点击控制面板->高级模式->终端机和SNMP,勾选启用SSH功能,端口我这里保持默认的22端口,点击应用。
  2. 使用SSH客户端连接,我这里直接使用root账号和admin的密码登陆。
  3. 根据自己硬件与DSM系统,访问frp项目的Release页获取最新版的软件包下载地址,下载并解压备用(请注意,随着软件更新,地址与文件名可能会与本例中命令不同,请自行修改)。本人使用DSM5.2系统,64位架构,相关命令信息如下,其他系统可能会有不同:

    [root@lHost ~]# wget https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
    [root@lHost ~]# tar vxf frp_0.27.0_linux_amd64.tar.gz
  4. 进入解压出的文件夹,使用vi编辑器修改配置文件frpc.ini并保存,内容如下:

    [common]
    # 以下填写服务端服务器的IP地址与端口号
    server_addr = XX.XX.XX.XX
    server_port = 7000
    
    # 验证的密钥,与服务端设置一致
    token = 12345678
    
    # []内可理解为一个连接的标签名;type定义连接类型(tcp、udp、http等);local_ip一般设为127.0.0.1;local_port定义服务在本地使用的端口号;remote_port定义在服务端对外提供服务的端口号
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 22
    remote_port = 5022
    
    # custom_domains定义访问http代理的自定义域名,自定义域名需要在服务商处设置A记录解析到服务端的 IP
    [web]
    type = http
    local_port = 5000
    custom_domains = xx.lexsion.net
  5. 修改完成后通过以下命令创建工作目录,并将必要文件复制到目录中:

    mkdir /root/FRP/
    cp frpc /root/FRP/
    cp frpc.ini /root/FRP/
    1. 运行以下命令尝试启动frpc测试:
    ./frpc -c ./frpc.ini
  6. 此时我们可以尝试使用SSH客户端通过frp服务端的5022端口连接SSH服务;可以使用浏览器访问xx.lexsion.net:8080 打开服务端了(当然,你应该访问你自己的域名)。测试正常后按Ctrl+C退出程序。
  7. 使用以下命令备份rc文件,并将其通过vi编辑器打开,使用G键(Shift+g)让光标移动到最后一行:

    cp /etc/rc /etc/rc.back
    vi /etc/rc
  8. exit 0 行前加入一行,添加以下内容并保存:

    ./root/FRP/frpc -c ./root/FRP/frpc.ini
  9. 重启DSM后测试frp将正常运作。我们便可以通过预定端口访问对应的服务了。

参考:

  1. frp中文文档-GitHub
    https://github.com/fatedier/frp/blob/master/README_zh.md

为网页部分区域设置单独样式以指定特定区域文字超链接颜色

为网页部分区域设置单独样式以指定特定区域文字超链接颜色

前言:

本人在HTML语言与CSS方面没有任何系统的学习经验,本文只是对问题解决的记录,若有错漏请各位指正。几天前我在尝试将一Bootstrap模板修改为一个网站首页时遇到问题,我尝试为某个区域加上超链接后,其文字颜色产生变化,这与本人想要的页面整体风格冲突。遂作如下研究,以下内容这可能对有系统学习的人来说是常识,但我却费了一点劲。谨以此告诫大家:搞事情要量力而行,学习技术最好从基础学起。

操作:

首先,我了解到如果想修改整个网页超链为某个颜色,我们可以像下面一样在<style>标签中定义<a>标签的样式。

<html>
<head>
<style type="text/css">
a {color:#333}    /*通常状态颜色,该值是深灰色*/
a:hover{color:#F00}  /*鼠标经过链接时颜色,该值是红色*/
a:active{color:#30F}  /*鼠标点击链接时颜色,该值是蓝色*/
</style>
</head>

<body>
<a href="http://lexsion.net">Lexsion.NET</a>
</body>
</html>

以上代码中,a {color:#333} 将a标签常态颜色定义为一种深灰色,a:hover{color:#F00}定义了鼠标经过时的颜色,而a:active{color:#30F} 则定义了鼠标点击下去时的颜色。因为代码中没有其他限制,所以这些定义是应用于整个body的。
如此,将以上代码其保存为一个HTML文件后用浏览器打开,鼠标未经过时是黑色,鼠标放在上面时红色,点击时蓝色。

HTML语言中, <div> 元素表示区块的概念,这是一种添加结构的通用机制。使用 <div> 元素来组合块级元素,这样就可以使用样式对它们分别进行格式化。我们可以使用id=*NAME*来标注div,id 属性为一个元素分配一个唯一的名字。每个名字只能在被赋予的页面使用一次。于是我们可以使用如下代码完成我们的需求。

<html>
<head>
<!--以下语句前的 #test 表示该样式只对 id 为 test 的 div 生效-->
<style type="text/css">
#test a {color:#333}    /*通常状态颜色,该值是深灰色*/
#test a:link,a:visited{text-decoration:none}   /*此行定义链接以及点击后无下划线*/
</style>
</head>

<body>
<!--以下div的id命名为test-->
<div id="test">
    此行生效: <a href="http://lexsion.net">Lexsion.NET</a>
</div>

<!--以下div没有id-->
<div>
    此行不生效: <a href="http://lexsion.net">Lexsion.NET</a>
</div>
</body>
</html>

以上代码中,在代码片段a {color:#333}前添加的#test将该样式限定应用于 id 为test<div>中,因为样式不是应用于整个<body>,所以虽然例程代码中两个都是<a>标签,但其位于不同的<div>,而应用于此的样式是不一样的,所以最终两个链接外观是不一样的。
我们将以上代码保存为HTML文档并使用浏览器打开,可以发现第一行的链接相比较第二行的链接,颜色是深灰色,没有下划线,至此完成需求。

后记:

看完上文相信应该呢能对div和id用途有一定概念了,下面再来举一个栗子!大家应该见过某些网站会在部分区域设置一个效果,即很多小点飘来飘去,靠近的点会自动产生连接线,给人一种很高大上的感觉。这个效果可使用canvas-nest.js脚本实现,在GitHub上有这个开源项目,大家可以去项目页查看具体说明。

脚本的使用非常简单,只要脚本文件放在根目下,将下面的代码插入到 <body></body> 之间就可以了,强烈建议在 </body>标签上方。

<script type="text/javascript" src="canvas-nest.js"></script>

我们可以针对以下项目进行配置:

color: 线条颜色, 默认: '0,0,0' ;三个数字分别为(R,G,B),注意用,分割
pointColor: 交点颜色, 默认: '0,0,0' ;三个数字分别为(R,G,B),注意用,分割
opacity: 线条透明度(0~1), 默认: 0.5
count: 线条的总数量, 默认: 150
zIndex: 背景的z-index属性,css属性用于控制所在层的位置, 默认: -1

栗子:

<script type="text/javascript" color="0,0,255" opacity='0.7' zIndex="-2" count="99" src="canvas-nest.js"></script>

默认情况下,插入的代码会将此效果应用于整个页面。某些场景可能这并不是我们需要的,我们可能只需要将其应用于部分区域。这时我们就可以根据上文的原理来进行实现。以下代码为脚本中最终的实现,我们可以看到代码中绘制区域为body

(document.body, (f = document.getElementsByTagName("script"), {
        zIndex: (y = f[f.length - 1]).getAttribute("zIndex"),
        opacity: y.getAttribute("opacity"),
        color: y.getAttribute("color"),
        count: Number(y.getAttribute("count")) || 99
    }))

我们可以将其修改为一个id,比如cas,代码如下,我们修改后将其保存。

(document.getElementById("cas"), (f = document.getElementsByTagName("script"), {
        zIndex: (y = f[f.length - 1]).getAttribute("zIndex"),
        opacity: y.getAttribute("opacity"),
        color: y.getAttribute("color"),
        count: Number(y.getAttribute("count")) || 99
    }))

然后我们将canvas-nest.js文件丢入/js/目录,然后创建一个HTML文件,内容如下:

<html>
<head>
</head>
<body>
<div>此行生效:</div>
<!--以下div的id命名为cas-->
<div id="cas">
    <h1>Lexsion.NET</h1>
    <p>Test;Test;Test;Test;Test;Test;</p>
    <p>&nbsp;</p>
    </div>
<div>此行不生效:</div>
<!--以下div没有id-->
<div>
    <h1>Lexsion.NET</h1>
    <p>Test;Test;Test;Test;Test;Test;</p>
    <p>&nbsp;</p>
    </div>
<script type="text/javascript" color="70,145,215" opacity='0.7' zIndex="0" count="100" src="/js/canvas-nest.js"></script>
</body>
</html>

使用浏览器打开即可查看成果。

参考:

  1. 我想问下如何让一个div 引入···这个div生效 而不是全局-百度知道
    https://zhidao.baidu.com/question/1307037709807339499
  2. css怎么让文字设定超链接后文字颜色不变?--ZOL问答
    http://ask.zol.com.cn/x/5417141.html
  3. README-zh--canvas-nest.js
    https://github.com/hustcc/canvas-nest.js/blob/master/README-zh.md
  4. 网页粒子背景插件 -Canvas-nest.js 指定具体位置展示--CSDN
    https://blog.csdn.net/L1558198727/article/details/81121524