Nuxt

使用脚手架快速安装

Solaris

SunOS 5.10

SSH连接过慢解决办法

编辑:/etc/ssh/sshd_config

OpenSSH: UseDNS no

Solaris: LookupClientHostnames no

Solaris重启sshd服务:

/lib/svc/method/sshd { start | restart } 

去除文件中所有^M

perl -pi -e 's/^M//g' filename

批量去除^M符号

find . -exec perl -pi -e 's/^M//g' '{}' \;

注意:^M的输入方式是 Ctrl + v ,然后Ctrl + m

Oracle

SQL*Plus基础命令

1.连接命令

1.conn [ect]

用法:conn 用户名/密码@网络服务名 [as sysdba]

eg:

SQL> show user
USER 为 "C##MALU"
SQL> conn system/xxxxx@orcl
已连接。
SQL> show user
USER 为 "SYSTEM"

eg2:

切换到sysdba

SQL> conn / as sysdba

2.disc/disconn/disconnect

断开连接

eg:

SQL> disc
从 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 断开
SQL> show user
USER 为 ""

3.passw[ord] [username]

说明:默认更改当前用户密码,如果指定用户名,需要用sys/system登录。

eg:

SQL> show user
USER 为 "SYSTEM"
SQL> conn c##malu
输入口令:
已连接。
SQL> show user
USER 为 "C##MALU"
SQL> passw
更改 C##MALU 的口令
旧口令:
新口令:
重新键入新口令:
口令已更改

4.clear screen

说明:清屏

2.文件操作命令

1.start和@

说明:运行sql脚本

eg:

SQL> @ f:\test.sql

eg2:

SQL> start f:\test.sql

查看数据库版本

SQL> select * from v$version;

2.edit

说明:编辑sql脚本

eg:

SQL> edit f:\test.sql

3.spool

说明:将终端内容输出到指定文件中。

eq:

SQL> spool f:\1.sql
SQL> show user
USER 为 "C##MALU"
SQL> spool off

3.交互式命令

1.&

说明:相当于变量,会在执行时,要求用户输入。

eg:

SQL> select * from &a;
输入 a 的值:  table1
原值    1: select * from &a
新值    1: select * from table1

COLUMN1                                  COLUMN2
---------------------------------------- ----------------------------------------
1                                        2

4.显示和设置环境变量

1.show

说明:用于显示

eg:

SQL> show linesize
linesize 300
SQL> show user
USER 为 "C##MALU"
SQL> show pagesize
pagesize 14

2.set

说明:设置环境参数

eg:

设置终端显示宽度300个字符

SQL> set linesize 300

eg2:

设置单页显示30行

SQL> set pagesize 30

Oracle 用户管理

1.用户增删改查

1.创建用户 create user 用户名 identified by 密码

要创建一个新用户,一般需要dba权限才能使用。

eg:

SQL> create user c##boy identified by malu;
create user c##boy identified by malu
*
第 1 行出现错误:
ORA-01031: 权限不足

2.删除用户 drop user 用户名 [cascade]

如果要删除的用户,已经创建了表,那么就需要在删除的时候加上 cascade 参数,即连同该表一起删除。

3.修改用户密码

一种方法是,password username

另一种是,alter user 用户名 identified by 新密码

4.查看所有用户

select * from dba_users;
select * from all_users;
select * from user_users;

eg:

SQL> select username  from all_users;

5.获取当前用户下所有的表

SQL> select table_name from user_tables;

6.查看当前用户的缺省表空间

SQL> select username,default_tablespace from user_users; 

7.查看当前用户的角色

SQL> select * from user_role_privs; 

8.查看当前用户的系统权限和表级权限

SQL> select * from user_sys_privs; 
SQL> select * from user_tab_privs; 

9.用系统管理员,查看当前数据库有几个用户连接:

SQL> select username,sid,serial# from v$session; 

配置

Oracle sqlnet.ora配置

sqlnet配置文件的存放位置一般在:$ORACLE_HOME/network/admin目录下

该配置文件的作用:

指定要附加到非限定名称的客户端域 优先考虑命名方法 启用日志记录和跟踪功能 通过特定处理器路由连接 配置外部命名的参数 配置Oracle Advanced Security 使用特定于协议的参数来限制对数据库的访问

连接工具

web方式管理工具

管理界面:https://localhost:5500/em/

账号密码一般是安装时设置的sys和对应的密码

SQL Developer

这是Oracle安装自带的图形化管理工具,用来编程等

Navicat Permium集成了Oracle客户端

DBeaver

开源且支持很多数据库 https://github.com/dbeaver/dbeaver

故障处理

ORA-28040: No matching authentication protocol

1.打开 sqlnet.ora 文件

比如我的在:F:\app\malu\product\12.2.0\dbhome_1\network\admin\ 目录下

新增如下2行:

SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

如何重启oracle:

set ORACLE_SID=SID_Name,回车。
sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate
SQL> startup
SQL> exit

问题现象:

使用sqlplus 和 sql developer可以登录,但是使用navicat或程序连接时总是提示ORA-01017: 用户名/口令无效; 登录被拒绝

处理方式:

修改密码: alter user C##malu identified by 123456;

或使用sql developer,直接重设口令;

sqlplus无法登录

我遇到的问题是本地装了多个版本的Oracle,在系统环境变量里默认指定的11g的sqlplus,而我要连的是12c

所以只要切换到12c目录下的sqlplus即可;

或者把环境变量中的sqlplus指向12c的目录;

启动sqlplus时报错:SP2-0667: Message file sp1.msb not found

该问题还连带报错:

You may need to set ORACLE_HOME to your Oracle software directory

处理办法是,新增环境变量:

export ORACLE_HOME=/app/oracle/product/12.2.0.1/dbhome_1

无法给表新增内容:ORA-01950: 表空间’USERS’中无权限

处理办法:先切换到sysdba,再增加该用户表空间’USERS’中的配额

SQL> conn / as sysdba
已连接。
SQL> alter user c##malu quota unlimited on "USERS";
用户已更改。

oracle下载地址

https://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads/index.html

MQTT

MQTT服务端 EMQ X

官网下载地址:https://www.emqx.io/downloads

端口修改

1883	MQTT端口
8883	MQTT / SSL端口
8083	MQTT / WebSocket端口
8084	MQTT / WebSocket / SSL端口
8080	HTTP管理API端口
18083	Web仪表板端口

使用的TCP端口可以在etc/emqx/emqx.conf中配置:

## TCP Listener: 1883, 127.0.0.1:1883, ::1:1883
listener.tcp.external = 0.0.0.0:1883

## SSL Listener: 8883, 127.0.0.1:8883, ::1:8883
listener.ssl.external = 8883

## External MQTT/WebSocket Listener
listener.ws.external = 8083

## HTTP Management API Listener
listener.api.mgmt = 127.0.0.1:8080

Web仪表板端口18083可以在etc/emqx/plugins/emqx_dashboard.conf中配置:

## The IP address and port that the Dashboard HTTP listener will bind.
dashboard.listener.http = 18083

Web仪表板默认登录:admin,密码:public

websocket端口修改,在etc/emqx/emqx.conf中配置:

## Examples: 8083, 127.0.0.1:8083, ::1:8083
listener.ws.external = 8083

listener.wss.external = 8084

启动服务

service emqx start

开启订阅、发布权限认证

1.首先关闭匿名权限,在etc/emqx/emqx.conf中配置:

allow_anonymous = false

2.接下来去,etc/emqx/plugins目录下编辑文件emq_auth_username.conf,添加用户名和密码,保存并退出:

auth.user.1.username = t1

auth.user.1.password = t1password

3.开启用户密码认证插件

第一种方式:emqttd_ctl plugins load emq_auth_username

第二种方式:在 web 管理控制台中开启该插件

4.重启服务,使插件生效

ACL控制用户权限

配置好了用户,接下来可以通过ACL精确控制每个用户权限

比如编辑etc/emqx/acl.conf :

{allow, {user, "t1"}, subscribe, ["mqtt/demo"]}.
{allow, {user, "t2"}, publish, ["mqtt/demo"]}.
{deny, all}.

以上分别开启t1、t2用户的订阅、发布mqtt/demo主题权限。

重启服务,使ACL配置生效

MQTT服务端 Mosquitto

安装 mosquitto

apt install mosquitto

增加用户test,设置密码

mosquitto_passwd -c /etc/mosquitto/passwd test

编辑配置文件 /etc/mosquitto/mosquitto.conf

修改监听端口

listener 1234

启动

mosquitto -c /etc/mosquitto/mosquitto.conf

MQTT 客户端

1.桌面客户端

MQTT.fx

官网:https://mqttfx.jensd.de/index.php/download

MQTTBox

官网:http://workswithweb.com

2.WEB客户端

paho-mqtt.js

官网:https://github.com/eclipse/paho.mqtt.javascript

MQTT.js

官网:https://github.com/mqttjs/MQTT.js

eg:

<html>
<head>
    <title>test Ws mqtt.js</title>
</head>
<body>
    <script src="mqtt.min.js"></script>
    <script>
        var client = mqtt.connect('ws://mqtt.malu.me/mqtt') // you add a ws:// url here
        client.subscribe("mqtt/demo")

        client.on("message", function (topic, payload) {
            alert([topic, payload].join(": "))
        })

        client.publish("mqtt/demo", "hello world!")
    </script>
</body>
</html>

3.Linux客户端

安装

apt install mosquitto-clients

订阅

mosquitto_sub -h localhost -t mqtt -u test -P 123456

发布

mosquitto_pub -h localhost -t mqtt -m "hello world" -u test -P 123456

-h参数指定要连接的MQTT服务器

-t参数指定向指定主题推送消息

-m参数指定消息内容

-r参数保留消息

eg.自动通知在线时间脚本

mosquitto_pub -h soldier.cloudmqtt.com -p 16885 -u test -P test -t 1 -r -m "`uptime`"

MQTT Free server

Broker Server Ports Websocket
Mosquitto test.mosquitto.org 1883 / 8883 / 8884 8080 / 8081
hivemq broker.hivemq.com 1883 8000

Public brokers

https://github.com/mqtt/mqtt.github.io/wiki/public_brokers

cloudmqtt

https://customer.cloudmqtt.com/login

solace

https://console.solace.cloud/login/

Domoticz

快速安装过程

1.下载源码安装包:

https://github.com/domoticz/domoticz

2.安装依赖库

apt install python3-dev cmake libboost-all-dev libcurl4-openssl-dev

3.编译

cmake -DCMAKE_BUILD_TYPE=Release .
make

4.启动

./domoticz -www 8080

domoticz 接入mqtt

setting -> Hardware -> 添加一个 “MQTT Client Gateway with LAN interface”

接收主题:domoticz/out

发布主题:domoticz/in

IOT

ESP8266

模拟输出 Analog output

analogWrite(pin, value)

在已有的引脚上使能软件PWM功能。PWM可以用在引脚0~16。调用analogWrite(pin, 0) 可以关闭引脚PWM。取值范围:0~ PWMRANGE,默认为1023。 PWM 范围可以使用analogWriteRange(new_range)语句来更改。

PWM 默认频率:1KHz。使用analogWriteFreq(new_frequency) 可以更改频率。

ESPEASY

定时触发hooks脚本

on WiFi#Connected do
timerSet,1,10
endon

On Rules#Timer=1 do
SendToHTTP malu.me,80,/iot?domain=iotd1&ip=%ip%
timerSet,1,100
endon

定时睡眠

要启用深度睡眠,我们需要将RST引脚连接到ESP8266上的GPIO 16,在NodeMCU上,GPIO 16表示为D0;在D1上,GPIO 16表示为D2。

如果没有连接,将无法自动唤醒!!!

On System#Boot do
timerSet,2,60
endon

On Rules#Timer=2 do  //When Timer2 expires, do 启动60秒后,进入深度睡眠10秒,再启动,重复
deepsleep,10
endon

手动唤醒设备:RST拉至GND

擦除配置

在内存0x200000处写入空文件:

MQTT控制

controllers -> 编辑第一个 -> Protocol选择OpenHAB MQTT

发布主题,即为控制端  Controller Subscribe: /%sysname%/# 

比如发布一个主题:/test01/GPIO/2  Payload:0 ,给GPIO2低电平


接收主题,即为信号返回  Controller Publish: /%sysname%/%tskname%/%valname%

比如根据上面接收地址为:/test01/esp01/Switch 

esp01为:devices -> task name为esp01

Switch为:其Values的name

esp_wifi_repeater

官网:https://github.com/martin-ger/esp_wifi_repeater

注意!!!每次配置最好save一下。

中继基本配置:

set ssid xxx
set password xxx
save
set automesh 1
// set am_threshold dB:设置“坏”连接的阈值(以dB为单位,默认为85,即-85 dB)
// set hw_reset GPIOno:选择GPIO引脚进行硬件恢复出厂设置(> 16禁用,默认)
show
show stats  // 查看状态信息
save
reset

MQTT配置:

set mqtt_host xxx
set mqtt_port xxx

// 查看mqtt配置(会显示出MQTT Client Id等信息)
show mqtt

MQTT Client Id: ESPRouter_xxx

默认命令发布地址是:/WiFi/ESPRouter_xxx/command

接收命令(订阅)地址是:/WiFi/ESPRouter_xxx/system/response

接收所有节点和链接信息:/WiFi/ESPRouter_xxx/system/Topology

set mqtt_interval secs:设置路由器发布状态主题的时间间隔(默认值:15s,0禁用状态发布)

automesh最优路径网状树,根据rssi信号强度自动生成树状网络;

经测试,如果大量相同SSID的AP集中在某个位置,该算法会频繁切换网络,导致wifi不稳定,此时可以尝试减小am_threshold阈值,比如50。

安全配置:

lock xxx  // 锁定修改
unlock xxx  // 解锁修改

set config_port portno:设置控制台登录的端口号(默认为7777,0 禁用远程控制台配置)
set web_port portno:设置Web配置服务器的端口号(默认为80,0 禁用Web配置)
set config_access mode:控制允许控制台和Web配置访问的网络(0:无访问权限,1:仅内部,2:仅外部,3:两者(默认))

性能调优:

为提高吞吐率,可以把CPU频率调高:

set speed [80|160] :设置CPU时钟频率(默认为80 Mhz)

测量功耗:

循环中80Mhz     89 - 90mA
循环后空闲      33 - 34mA

循环中160Mhz    94.8 - 95mA
循环后空闲      34 - 35mA

Arduino

板载LED灯

引脚值:GPIO 13

ESP8266板载LED为:GPIO 2

全局常量:

#define LED_BUILTIN 13

高电平时点亮:

void setup() {
    pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
    digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
}

c9px

c9px环境配置

mkdir /c9
cd /c9
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
dpkg -i google-chrome-stable_current_amd64.deb
wget https://chromedriver.storage.googleapis.com/2.45/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
apt install ssh

sed -i "s/UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config && \
    sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config && \
    sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && \
    echo "gatewayports yes" >> /etc/ssh/sshd_config && \
    sed -i 's/.*StrictHostKeyChecking.*/    StrictHostKeyChecking no/' /etc/ssh/ssh_config && \
    sed -i "s/AcceptEnv.*/#AcceptEnv\ LANG\ LC_\*/g" /etc/ssh/sshd_config

pip install selenium
pip install --upgrade --ignore-installed urllib3

Cloud9使用用户名密码认证

http://stackoverflow.com/questions/28822695/change-the-username-and-add-a-password-for-cloud9-in-the-beaglebone-black

运行时添加: -a user:pass

node /cloud9/server.js –listen 0.0.0.0 –port 80 -w /workspace -a user:pass

To set a default username and password:

Open the file /opt/cloud9/build/standalonebuild/configs/standalone.js.

Locate the following code block. (Should be at the top of the file)

    if (!optimist.local) {
        optimist
            .boolean("t")
            .describe("t", "Start in test mode")
            .describe("k", "Kill tmux server in test mode")
            .default("b", false)
            .describe("b", "Start the bridge server - to receive commands from the cli")
            .default("w", config.workspaceDir)
            .describe("w", "Workspace directory")
            .alias("p", "port")
            .default("port", process.env.PORT || config.port)
            .describe("port", "Port")
            .alias("d", "debug")
            .default("debug", false)
            .describe("debug", "Turn debugging on")
            .alias("l", "listen")
            .default("listen", process.env.IP || config.host)
            .describe("listen", "IP address of the server")
            .boolean("help")
            .describe("workspacetype")
            .alias("ws", "workspacetype")
            .describe("readonly", "Run in read only mode")
            .alias("ro", "readonly")
            .describe("packed", "Whether to use the packed version.")
            .boolean("packed")
            .default("packed", config.packed)
            .alias("a", "auth")
            .describe("auth", "Basic Auth username:password")
            .default("auth", ":")
            .describe("collab", "Whether to enable collab.")
            .default("collab", config.collab)
            // @lennartcl this should be moved
            .describe("lb.fileserver", "LogicBlox file server Url")
            .default("lb.fileserver", config.logicblox && config.logicblox.fileServerURL);
    }

At the line .default(“auth”, “:”), type in the username and password you’d like to use in the format of username:password, e.g. .default(“auth”, “user:pass”)

You should be all set! Try accessing 11.22.33.44:3000, and there should be a pop-up prompting for username and password.

Caddy

Caddy是一个开源的,使用 Go 编写,支持 HTTP/2 的 Web 服务器

官网:https://caddyserver.com

优点:

  • 自动支持HTTP/2协议
  • 使用 Let’s Encrypt 让你的站点全自动变成全站HTTPS,无需任何配置,当然您可以使用自己的密钥和证书
  • 得益于 Go 的特性,Caddy 只是一个小小的二进制文件,没有依赖,易于部署/使用 配置起来十分简便
  • 对 WebSockets 有很好的支持
  • 自动把 Markdown 转成 HTML
  • 适用于很多操作系统,比如: Windows,Linux,BSD,Mac,SOLARIS

实现自动 HTTPS 需要满足:

  • host 那里要填一个域名,不能是 localhost 或 IP
  • 不要用冒号手动指定端口
  • 不要在域名前手动声明 http
  • 没在配置里关掉 TLS 或者声明用自己的证书但是还没配好
  • caddy 有权限绑定 80 和 443 端口

性能上Nginx稍有优势

通过Docker部署

docker run -d -v /path/to/php/src:/srv -p 2015:2015 abiosoft/caddy:php

Dockerfile

https://github.com/abiosoft/caddy-docker

Linux创建低权限用户

使用 useradd 命令创建 SSH 用户:

useradd boy

也可以用高级交互式命名创建用户

adduser boy

根据提示一步步操作

使用 mknod 命令创建 /dev 下的文件。在下面的命令中,-m 标志用来指定文件权限位,c 意思是字符文件,两个数字分别是文件指向的主要号和次要号。

mkdir -p /home/test/dev/      
cd /home/test/dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8

对于交互式会话,这需要至少一个 shell,通常为 sh 和基本的 /dev 节点,例如 null、zero、stdin、stdout、stderr 和 tty 设备:

ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}

在 chroot 中设置合适的权限。注意 chroot 和它的子目录以及子文件必须被 root 用户所有,并且对普通用户或用户组不可写:

chown root:root /home/test
chmod 0755 /home/test
ls -ld /home/test

为 SSH chroot 设置交互式 shell,创建 bin 目录并复制 /bin/bash 到 bin 中:

mkdir -p /home/test/bin
cp -v /bin/bash /home/test/bin/

识别 bash 所需的共享库,如下所示复制它们到 lib64 和 lib 中

ldd /bin/bash
mkdir -p /home/test/lib64
cp -v /lib64/ld-linux-x86-64.so.2 /home/test/lib64/
mkdir -p /home/test/lib/x86_64-linux-gnu/
cp -v /lib/x86_64-linux-gnu/{libtinfo.so.5,libdl.so.2,libc.so.6} /home/test/lib/x86_64-linux-gnu/

创建 chroot 通用配置目录 /home/test/etc 并复制已更新的账号文件(/etc/passwd 和 /etc/group)到这个目录中:

mkdir /home/test/etc
cp -vf /etc/{passwd,group} /home/test/etc/

注意:每次向系统添加更多 SSH 用户时,都需要将更新的帐户文件复制到 /home/test/etc 目录中。

配置 SSH 来使用 chroot

打开 sshd_config 文件

vim /etc/ssh/sshd_config

文件中添加或修改下面这些行

# 定义要使用 chroot 的用户
Match User boy
# 指定 chroot 
ChrootDirectory /home/test

重启sshd

systemctl restart sshd 或者

service sshd restart

参考文章

https://linux.cn/article-8313-1.html

相关脚本

创建低权限用户脚本

给用户sudo权限

方法一:

修改/etc/sudoers文件,添加 “malu ALL=(ALL) ALL”

方法二:

先查看sudo组ID

cat /etc/group | grep sudo

把用户加入sudo组

usermod -G 27 malu

方法三:

直接编辑/etc/group,在sudo组后面添加malu用户,多个用户用逗号”,”分割

Ruby

debian快速安装

apt-get install ruby-full

安装

gem install jekyll

jekyll基本用法

参考网址:http://jekyllcn.com/docs/usage/

生成静态站到 ./_site 文件夹中。

jekyll build

生成静态站,并启动预览服务器

 jekyll serve