OpenVPN 使用账号+密码方式登陆

OpenVPN 使用账号+密码方式登陆 http://openwrt.iteye.com/blog/2306421 https://xu3352.github.io/linux/2017/06/08/openvpn-use-username-and-password-authentication OpenVPN 使用账号+密码方式登陆 使用账号+密码方式方便给多人分配不同的账号和密码,多人使用更加方便 原文链接: 配置OpenVPN使用User/Pass方式验证登录,不过有个大坑,后面讲 鉴于上一篇文章已经成功的搭建好 OpenVPN 了,不过客户端直接使用证书就可以连接了,但是多个人使用的话,建议还是改为账号+密码方式的,这里介绍比较简单的一种方式 服务端配置 修改服务端配置文件,文件最后追加几行 $ vim /etc/openvpn/delta.conf use username and password login auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env client-cert-not-required username-as-common-name script-security 3 execve 如果加上client-cert-not-required则代表只使用用户名密码方式验证登录,如果不加,则代表需要证书和用户名密码双重验证登录! /etc/openvpn/checkpsw.sh 文件内容: !/bin/sh ########################################################### checkpsw.sh (C) 2004 Mathias Sundman mathias@openvpn.se This script will authenticate OpenVPN users against a plain text file. The passfile should simply contain one row per user with the username first followed by one or more space(s) or tab(s) and then the password PASSFILE="/etc/openvpn/psw-file" ...

2018-11-03 · 1 min · 206 words · -

openvpn 开放端口

openvpn 开放端口 Network> Firewall> Traffic Rules> Open ports on router 以80端口为例: Name: Allow HTTP (这个名字可以随便填) Protocal: TCP External port: 80 然后点击 Save & Apply ,就可以访问了 http://www.anywlan.com/thread-432580-1-1.html

2018-11-02 · 1 min · 26 words · -

Trusting additional CAs in Centos

Trusting additional CAs in Centos place the certificate to be trusted (in PEM format) in /etc/pki/ca-trust/source/anchors/ cp xxx.pem /etc/pki/ca-trust/source/anchors/ update-ca-trust enable sudo update-ca-trust

2018-10-30 · 1 min · 23 words · -

openwrt install

openwrt install build R7800, Build custom Netgear R7800 firmware for a larger flash size/root space http://blog.wiloon.com/?p=12113&embed=true#?secret=Z4x4I19l6b burn netgear 刷机, factory.img, sysupgrade.bin http://blog.wiloon.com/?p=12826&embed=true#?secret=G3qiDnmUJx 改网段 openwrt lan 改网段 http://blog.wiloon.com/?p=12761&embed=true#?secret=XiBcmLWKRM openvpn https://openwrt.org/docs/guide-user/services/vpn/openvpn/basic enable https for wget opkg install librt openssl-util opkg install wget ca-certificates

2018-10-29 · 1 min · 41 words · -

netgear 刷机, factory.img, sysupgrade.bin, openwrt

’netgear 刷机, factory.img, sysupgrade.bin, openwrt' xxx-factory.img 把网线连接路由器的 LAN 口 和 PC 的网口 路由器断电, 用牙签或其他工具, 捅路由器的 reset 口 开启设备电源开关, 观察电源灯 (此时保持按住 reset/ Restore Factory Settings 按钮不要松手), 直到电源灯由橙色闪烁状态变到绿色闪烁状态(wndr4300) (说明设备已经进入到了TFTP修复模式) R7800: 电源灯从橙色闪烁变成白色闪烁。 在 win 下面使用命令, tftp -i 192.168.1.1 put image0.img 在 mac 下面, 同样也是使用 tftp 命令。 自己的 ip 改成192.168.1.10, 网关即路由 ip 192.168.1.1 把下好的 img 固件放到用户文件夹下 打开终端, 输入 (binary的作用是改为二进制模式)>tftp> connect 192.168.1.1>binary>put 文件名.img完了之后路由器会闪灯后自动重启。 linux tftp (to) 192.168.1.1 tftp> binary tftp> verbose tftp> put openwrt0.img tftp> quit 文件传送完毕后,等待 80 秒左右, 设备会自动重启 (请耐心等待, 切勿将路由器手动断电)。至此, TFTP 修复完成。 设备重启后, 可手动断电, 再重启。否则可能没有5G。这不是BUG,其他openwrt也是一样的 如果恢复过程中断或失败, 重复上述步骤再做尝试。 https://www.netgear.com/support/product/WNDR4300.aspx ...

2018-10-28 · 1 min · 87 words · -

kvm

kvm http://blog.51cto.com/changfei/1672147 KVM-Qemu-Libvirt 三者之间的关系 Qemu Qemu是一个模拟器,它向Guest OS模拟CPU和其他硬件, Guest OS认为自己和硬件直接打交道,其实是同Qemu模拟出来的硬件打交道,Qemu将这些指令转译给真正的硬件。 由于所有的指令都要从Qemu里面过一手,因而性能较差。wKiom1WdDYyjiVZiAAECBtAEQ5E590.jpg KVM KVM是linux内核的模块,它需要 CPU 的支持, 采用硬件辅助虚拟化技术Intel-VT,AMD-V,内存的相关如Intel的EPT和AMD的RVI技术,Guest OS的CPU指令不用再经过Qemu转译,直接运行,大大提高了速度,KVM通过 /dev/kvm暴露接口,用户态程序可以通过 ioctl函数来访问这个接口。见如下伪代码: open("/dev/kvm") ioctl(KVM_CREATE_VM) ioctl(KVM_CREATE_VCPU) for (;;) { ioctl(KVM_RUN) switch (exit_reason) { case KVM_EXIT_IO: case KVM_EXIT_HLT: } } KVM 内核模块本身只能提供CPU和内存的虚拟化, 所以它必须结合QEMU才能构成一个完成的虚拟化技术, 这就是下面要说的 qemu-kvm。 qemu-kvm Qemu将KVM整合进来,通过ioctl调用 /dev/kvm接口,将有关CPU指令的部分交由内核模块来做。kvm 负责cpu虚拟化+内存虚拟化, 实现了cpu和内存的虚拟化, 但kvm不能模拟其他设备。qemu模拟IO设备 (网卡,磁盘等) , kvm加上qemu之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以称之为qemu-kvm。 Qemu 模拟其他的硬件,如Network, Disk,同样会影响这些设备的性能,于是又产生了pass through半虚拟化设备virtio_blk, virtio_net,提高设备性能。 libvirt libvirt 是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的 virsh 调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。 libvirt、virsh、virt-manager https://blog.csdn.net/wanglei_storage/article/details/51107648 libvirt、virsh、virt-manager 介绍 kvm 虚拟化中 libvirt 是目前使用最为广泛的对 kvm 虚拟机进行管理的工具和应用程序接口,而且一些常用的虚拟机管理工具 (virsh、virt-install、virt-manager等) 和云计算框架平台都在底层使用libvirt的应用程序接口。 virsh virsh 是用于管理虚拟化环境中的客户机和 Hypervisor 的命令行工具, 与 virt-manager 等工具类似, 它也是通过 libvirt API 来实现虚拟化的管理。virsh 是完全在命令行文本模式下运行的用户态工具, 它是系统管理员通过脚本程序实现虚拟化自动部署和管理的理想工具之一。 ...

2018-10-27 · 1 min · 152 words · -

google 搜索

google 搜索 转义, 加引号 linux "-xxx" 特定域 site: 在特定域中进行搜索 -site: 排除特定域 文件类型 filetype: PDF

2018-10-26 · 1 min · 14 words · -

ASCII、Unicode,UTF-8编码的区别

ASCII、Unicode,UTF-8编码的区别 Unicode unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。 UCS 通用字符集 (Universal Character Set,UCS) 是由ISO制定的ISO 10646 (或称ISO/IEC 10646) 标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。 UNICODE与UCS实际上是两个不同组织的产物,为了编码一体化而进行协商,可以把unicode看做UCS-2的父集,UCS-4的子集,以为UNICODE只支持U+0FFFF-U+10FFFF的编码,而UCS-4支持31个平面。 https://www.jianshu.com/p/1a39be00f5b8 Unicode ASCII UTF-8 GBK关系 首先必须知道一个概念 - 字符集 计算机中的所有字符, 说到底都是用二进制的 0/1 排列组合来表示的, 因此就需要有一个规范来规定每个字符对应 0/1 排列组合, 这样的规范就是字符集. Unicode, ASCII, GB2312, GBK 都是字符集. UTF-8不是! ASCII 最早的计算机在设计时采用 8 个 bit 作为一个字节 - byte, 所以, 一个字节能表示的范围就是 00000000 到 11111111, 也就是 0 到 255, 一共 256 种状态, 每一个状态对应一个符号, 可以表示 256 个符号. 美国有关的标准化组织就出台了 ASCII 编码, 对英语字符, 数字以及部分符号与二进制位之间的关系, 做了统一规定, 一共规定了 128 个字符的编码. 只占用了一个字节的后面 7 位, 最前面一位统一规定为 0, 一直沿用至今. ...

2018-10-24 · 3 min · 439 words · -

go mod

go mod create project mkdir project-0 go mod init project-0 go mod edit [editing flags] [go.mod] commands # upgrade go version to 1.21.4 go mod edit -go 1.21.4 export GO111MODULE=on go mod init project0 # 初始化 go mod tidy # 拉取缺少的模块, 移除不用的模块。 go mod download # 手动下载依赖包, 根据 go.mod 下载 go mod graph # 打印模块依赖图 go mod vendor # 将依赖复制到 vendor 下 go mod verify # 校验依赖 go mod why # 打印为什么需要依赖 go list all # 打印所有的 package go list -m all # 打印所有的 module, The -m flag causes list to list modules instead of packages go list -m -json all # 依赖详情, json 格式 go mod edit -go=1.15 # 添加新模块 go get <package>[@<version>] go.mod 如何编辑 在 Go 1.16 中,另一个行为变更是 go build 和 go test 不会自动编辑 go.mod 了,基于以上信息,Go 1.16 中将进行如下处理: ...

2018-10-20 · 2 min · 343 words · -

linux tar aes 打包加密

linux tar aes 打包加密 tar -cvf - foo | openssl enc -e -aes256 -k password -out foo.tar openssl enc -d -aes256 -in foo.tar -k password | tar xv openssl enc -d -aes256 -in foo.tar -k password | tar xv -C . #原文件 foo #密码 password #目标文件 foo.tar

2018-10-12 · 1 min · 47 words · -

linux 替换 换行符

linux 替换 换行符 cat out | python -c "import sys; print sys.stdin.read().replace('.\n','.')" http://slash4.net/blog/python/sed-replace-newline-or-python-awk-tr-perl-xargs.html http://slash4.net/blog/python/sed-replace-newline-or-python-awk-tr-perl-xargs.html/embed#?secret=fepFl2MtVM

2018-10-10 · 1 min · 14 words · -

linux tools

linux tools Linux Performance Observability Tools https://hub.docker.com/r/nicolaka/netshoot https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/ldd.html ldd 作用: 用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题。 示例: 查看test程序运行所依赖的库: /opt/app/todeav1/test$ldd test libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000039a7e00000) libm.so.6 => /lib64/libm.so.6 (0x0000003996400000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000039a5600000) libc.so.6 => /lib64/libc.so.6 (0x0000003995800000) /lib64/ld-linux-x86-64.so.2 (0x0000003995400000)

2018-10-09 · 1 min · 33 words · -

PolarSSL, mbed-TLS、 SSL、 OpenSSL、TLS的区别

PolarSSL, mbed-TLS、 SSL、 OpenSSL、TLS的区别 https://blog.csdn.net/crjmail/article/details/79097348 一、关于PolarSSLmbed TLS (以前称为PolarSSL) 是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码。这是双重许可与Apache许可证 2.0版 (与GPLv2许可也可) 。网站上指出,mbed TLS的目标是"易于理解,使用,集成和扩展"核心SSL 库用C编程语言编写,并实现SSL模块,基本加密功能并提供各种实用功能。与OpenSSL和TLS的其他实现不同,mbed TLS设计为适合小型嵌入式设备,最小完整的TLS堆栈需要60KB的程序空间和64KB的RAM。它也是高度模块化的: 每个组件,如加密函数,可以独立于框架的其余部分使用。版本也可用于Microsoft Windows和Linux。因为mbed TLS是用C编程语言编写的,没有外部依赖,PolarSSL的后期版本超过1.3.0,为内核分配和线程添加抽象层,以"支持与现有嵌入式操作系统的更好集成"——机器翻译的凑合着看。想看原版的自行Wikii现在叫MbedTSL,PolarSSL源码,也许是最小巧的ssl代码库。高效、便于移植和集成。尤其适合嵌入式应用。也就是说,无论是嵌入式还是桌面软件版的编程,只要你用的到AES,RSA等加密算法,你都可以直接拿过来源码放进你的工程中,进行编译管理,不用带着DLL,或者必须安装一些不必要的库,并且算法是标准库,所以你懂得。并且OpenSource。二、什么是OpenSSLOpenSSL 是一个强大的安全 socket 层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。三、什么是SSLSSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。网景Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。通过以上叙述,SSL协议提供的安全信道有以下三个特性:1 数据的保密性信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。2 数据的完整性加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。3 安全验证加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。四、SSL和TLS的区别SSL: (Secure Socket Layer,安全套接层协议) ,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL通过互相认证、使用数字签名确保完整性、使用加密确保机密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成: SSL记录协议和SSL握手协议。Secure Socket Layer是Netscape于1994年开发的,目前有三个版本: SSL2.0、SSL3.0、SSL3.1,最常用的是1995年发布的第3版,已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。TLS: (Transport LayerSecurity,传输层安全协议),是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,目前有TLS 1.0,TLS1.1,TLS1.2等版本。 本文来自 crjmail 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/crjmail/article/details/79097348?utm_source=copy

2018-10-09 · 1 min · 45 words · -

pam config

pam config pam模块文件内容看,可以将pam配置文件分为四列, 第一列代表模块类型 第二列代表控制标记 第三列代表模块路径 第四列代表模块参数 Module_type 将为 Service_name 字段中的相应服务指定模块类型 (auth/account/session/passwd) 。 Control_flag 将指定模块的堆栈行为。它可以获取诸如 requisite、required、sufficient 和 optional 之类的值。 Module_path 将指定实现模块的库对象的路径名称。默认情况下,它将被设为 /lib/security。 Module_options/module_args (可选字段) 将指定可以传递给服务模块的选项或实参。 PAM模块接口(模块管理组) PAM为认证任务提供四种类型可用的模块接口,它们分别提供不同的认证服务: auth 表示鉴别类接口模块类型用于检查用户和密码,并分配权限; 这种类型的模块为用户验证提供两方面服务。让应用程序提示用户输入密码或者其他标记,确认用户合法性;通过他的凭证许可权限,设定组成员关系或者其他优先权。 account 表示账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登录系统等; 这种模块执行的是基于非验证的帐号管理。他主要用于限制/允许用户对某个服务的访问时间,当前有效的系统资源 (最多可以多少用户) ,限制用户位置 (例如: root只能通过控制台登录) 。 多数情况下auth和account会一起用来对用户登录和使用服务的情况进行限制。这样的限制会更加完整。比如下面是一个具体的例子: login是一个应用程序。Login要完成两件工作——首先查询用户,然后为用户提供所需的服务,例如提供一个shell程序。通常Login要求用户输入名称和密码进行验证。当用户名输入的时候,系统自然会去比对该用户是否是一个合法用户,是否在存在于本地或者远程的用户数据库中。如果该账号确实存在,那么是否过期。这些个工作是由account接口来负责。 如果用户满足上述登录的前提条件,那么它是否具有可登录系统的口令,口令是否过期等。这个工作就要由auth接口来负责了,他通常会将用户口令信息加密并提供给本地 (/etc/shadow) 或者远程的(ldap,kerberos等)口令验证方式进行验证。 如果用户能够登录成功,证明auth和account的工作已经完成。但整个验证过程并没有完全结束。因为还有一些其他的问题没有得到确认。例如,用户能够在服务器上同时开启多少个窗口登录,用户可以在登录之后使用多少终端多长时间,用户能够访问哪些资源和不能访问哪些资源等等。也就是说登录之后的后续验证和环境定义等还需要其他的接口。这就是我们下面要提到的两组接口: password 口令类接口。控制用户更改密码的全过程。也就是有些资料所说的升级用户验证标记。 session - 会话类接口。实现从用户登录成功到退出的会话控制;处理为用户提供服务之前/后需要做的些事情。包括: 开启/关闭交换数据的信息,监视目录等,设置用户会话环境等。也就是说这是在系统正式进行服务提供之前的最后一道关口。 单个PAM库模块可以提供给任何或所有模块接口使用。例如,pam_unix.so提供给四个模块接口使用。 auth required pam_env.so //登录后的环境变量。 auth sufficient pam_fprintd.so //指纹认证。 auth sufficient pam_unix.so nullok try_first_pass //验证用户密码的有效性。如果使用nullok参数,用户不输入密码就可以获得系统提供的服务。同时,也允许用户密码为空时更改用户密码。try_first_pass尝试在提示用户输入密码前,使用前面一个堆叠的auth模块提供的密码认证用户。 auth requisite pam_succeed_if.so uid >= 500 quiet //允许uid大于500的用户在通过密码验证的情况下登录。 ...

2018-10-08 · 1 min · 211 words · -

创建/删除tun/tap设备

创建/删除tun/tap设备 ip tuntap add dev tun0 mode tun ip tuntap add dev tap0 mode tap ip tuntap del dev tun0 mode tun #for detail ip tuntap help https://my.oschina.net/dangzy/blog/221893

2018-10-06 · 1 min · 28 words · -

nftable, nft basic, nft commands

nftable, nft basic, nft commands 安装 nftables archlinux sudo pacman -S nftables sudo systemctl start nftables sudo systemctl enable nftables sudo systemctl status nftables centos 8 systemctl disable --now firewalld 表, table # 列出所有表 nft list tables # 列出某一个族的表 # 列出 inet 族的表 nft list tables inet # 列出 ip 族的表 nft list tables ip # 列出 table0 表的内容 nft list table ip table0 nft list table table0 # list table content with handle nft -a list table filter # 增加表, Adding tables # 命令行 # nft add table [family] <name> nft add table ip table0 # 族可以不写, 默认簇: ip nft add table table0 # 删除 ip 族的 table0 表 nft delete table ip table0 # 默认 ip 族 nft delete table table0 链, chain # 查看 table 的内容, 能看到 Table 里的 链 nft list table table0 # 创建链 # 创建一个常规链 # 将名为 chain0 的常规链添加到 ip 簇(默认) 中名为 table0 的表中 nft add chain table0 chain0 # 创建一个基本链 # nft add chain [<family>] <chain-name> { type <type> hook <hook> priority <value> \; [policy <policy>] } # 要和hook (钩子) 相关连 nft add chain table0 chain0 { type filter hook input priority 0 \; } nft add chain table0 chain0 { type filter hook output priority 0 \; } nft add chain ip table0 chain1 { type filter hook input priority 0\; } nft add chain table0 chain1 { type filter hook input priority 0\; } nft add chain table0 chain2 { type filter hook output priority 0\; } # 将默认表中的 input 链策略从 accept 更改为 drop nft chain ip table0 input { policy drop \; } 规则, rule # 列出所有规则 nft list ruleset # nft add rule [<family>] <table> <chain> <matches> <statements> # 添加一条规则把源端口是 1025 的包丢掉 # family = ip # table = table0 # chain = chain0 # matches = tcp sport 1025 drop nft add rule table0 chain0 tcp sport 1025 drop nft add rule table0 chain0 tcp dport 1025 drop nft add rule inet table0 chain0 tcp dport ssh accept nft replace rule [<family>] <table> <chain> [handle <handle>] <matches> <statements> nft replace rule ip table0 chain0 tcp sport 1025 drop nft replace rule table0 chain1 handle 4 tcp sport 1025 drop # list table content with handle nft -a list table table0 # nft delete rule [<family>] <table> <chain> [handle <handle>] nft delete rule ip table0 chain0 handle 2 # 清空所有规则, 清空所有 table, chain, rule nft flush ruleset 查 # 列出 ip 族 foo 表的内容 nft list table ip foo # 列出 foo 表的内容 nft list chain filter input # 列出 filter 表 input 链 增 增加表, Adding tables 命令行 ...

2018-10-05 · 3 min · 553 words · -

aliyun docker

aliyun docker https://cr.console.aliyun.com/cn-qingdao/mirrors 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json «-‘EOF’ { “registry-mirrors”: [“https://xxxxxx.mirror.aliyuncs.com”] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

2018-10-03 · 1 min · 35 words · -

golang程序在windows上,注册为服务

golang 程序在windows上,注册为服务 https://blog.csdn.net/yang8023tao/article/details/53332984 package main import ( "log" "net/http" "os" "github.com/jander/golog/logger" "github.com/kardianos/service" ) type program struct{} func (p *program) Start(s service.Service) error { go p.run() return nil } func (p *program) run() { // 代码写在这儿 } func (p *program) Stop(s service.Service) error { return nil } /** * MAIN函数,程序入口 */ func main() { svcConfig := &service.Config{ Name: "", //服务显示名称 DisplayName: "", //服务名称 Description: "", //服务描述 } prg := &program{} s, err := service.New(prg, svcConfig) if err != nil { logger.Fatal(err) } if err != nil { logger.Fatal(err) } if len(os.Args) > 1 { if os.Args[1] == "install" { s.Install() logger.Println("服务安装成功") return } if os.Args[1] == "remove" { s.Uninstall() logger.Println("服务卸载成功") return } } err = s.Run() if err != nil { logger.Error(err) } } 注册服务步骤 ...

2018-09-30 · 1 min · 133 words · -

visualbox share folder

visualbox share folder https://www.jianshu.com/p/21df1811133f 1.Windows创建一个共享文件 保存好目录,我的是D:\ virtualbox_share 2.打开共享文件夹选项 3.配置共享文件夹 选择固定分配,共享文件夹选择Windows的共享目录,我的是D:\ virtualbox_share。 共享文件夹名称,是你Ubuntu的共享文件夹名称,我的是virtualbox_share。 自动挂载,不要打钩,重点! 4.挂载: 新建Ubuntu共享文件夹: mkdir/mnt/share 挂载命 sudo mount -t vboxsf [你的windows共享目录] [Ubuntu共享目录] 我是的: sudo mount -t vboxsfvirtualbox_share /mnt/share/ 完成后,进入cd /mnt/share会看到你Windows共享的目录 5.实现开机自动挂载: 在sudo gedit /etc/fstab文件末添加一项: <共享名称> < Ubuntu共享目录> vboxsf defaults 0 0 我的是: virtualbox_share /mnt/share/ vboxsf defaults 0 0 网上说的填入 sharing /mnt/sharevboxsf defaults 0 0是错的,会导致开机时候不能进入桌面的!前面应该填入的是<共享名称>! 最后可参考askubuntu.com/questions/252853/how-to-mount-a-virtualbox-shared-folder-at-startup,还是google搜索出来的解决方法靠谱 作者: Janny238 链接: https://www.jianshu.com/p/21df1811133f 來源: 简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

2018-09-30 · 1 min · 63 words · -

5W1H

5W1H 5W1H 分析法是我们工作中经常被使用到的方法, 但是, 你知道 5W1H 法是怎样产生的吗? 5W 5W1H 的前身是 5W 模式, 这个模式是 1948 年美国著名政治学家、传播学奠基者哈罗德·拉斯维尔 (Harold .Lasswell) 在他的论文《传播在社会中的结构与功能》中提出。在这篇论文中,拉斯维尔提出了沟通的一般模式,即"什么人说什么, 由什么路线传至什么人,达到什么结果。" 这个模式中产生了五大传播要素: Who: 谁 What: 说什么 Which: 通过什么渠道 Whom: 给谁 What effect: 取得什么效果 这被许多沟通和公共关系学者称为"最早和最具影响力之一的通信模式"。在传播学史上,第一次比较详细、科学的分解了传播的过程,为传播学搭建了一个比较完整、全面的理论构架,从而使传播学的最终确立成为可能。 做为一种沟通模式,“5W"无疑为人们提供了非常好结构性思考框架。而这一模式可以运用于各种类型的信息沟通活动中,使沟通者按照沟通目的以及沟通过程模式提供的因素进行选择,并设计沟通过程与沟通方式。于是,经过不断演化形成了今天我们所看到的5W1H分析法或5W2H分析法。 5W1H 分析法 Why: 目的、原因 What: 对象, 做什么 Where: 地点, 在哪做、从哪里入手 When: 什么时候做、什么时间完成 Who: 人员, 谁来完成、由谁承担 How: 方法, 怎么做、方法怎样 5W2H 分析法 Why What Where When Who How How mach: 花费多少、做到什么程度 这两种最常见的沟通模式中, 5W2H 模式所提供的要素最齐全, 适用于"任何事”。让我们来看看在不同的场景中是如何发挥作用的。 汇报工作: 和谁 (who) 用了什么方法 (how) 做了什么事情 (what) 到了什么程度 (how much) ,期间遇到什么问题 (what problem) ,准备怎么解决 (how) ,预计完成时间 (when) 。 ...

2018-09-29 · 1 min · 123 words · -