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
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
Navicat Permium 登录 oracle 用户名口令无效
问题现象:
使用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
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
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)
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