徐高翔的个人网站

Wiki

2019-07-28

ndarray和字符串相互转换

1
2
3
4
5
import numpy as np

arr =np.array([1,2,3,4,5,6])
ts = arr.tostring()
print( np.fromstring(ts,dtype=int) )

opencv调整窗口大小

1
2
3
4
import cv2 

cv2.namedWindow("Frame", cv2.WINDOW_NORMAL)
cv2.resize("Frame", 800, 600)

删除当前目录下的所有.svn文件

1
find . -type d -name ".svn"|xargs rm -rf

删除当前目录下除 _.iso 和 _.zip 外的所有文件

1
find . -type f -not \(-name '*.zip' -or -name '*.iso' \) -delete

修改MAC地址

1
2
3
sudo ifconfig eth0 down
sudo ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE
sudo ifconfig eht0 up

修改时区

1
sudo timedatectl set-timezone "Asia/Shanghai"

wps无法使用搜狗输入法解决办法

编辑/usr/bin/下的wps,wpp,et,添加语句

1
2
export XMODIFIERS="@im=fcitx"
export QT_IM_MODULE="fcitx"

清除buff/cache

1
2
su
echo 3 > /proc/sys/vm/drop_caches

root用户开机自动登录

编辑/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf,增加语句

1
2
autologin-user=root
greeter-show-manual-login=true

ubuntu出现broken package

1
2
sudo apt update --fix-missing
sudo apt install -f

GCC编译器去除所有警告

1
-w

GCC静态库循环链接

1
mipsel-linux-gcc main.c libirdetoca.so -Xlinker "-(" s3_dvb_client_3.14.4.lib xc_wb.a libljsysinfo.a CloakedCAAgent.lib -Xlinker "-)"

ssh登录运行shell,ssh退出脚本继续运行

1
2
3
4
5
ctrl + z 停下来,这里有个id,一般是1
bg 1
disown -h %1

# 或者使用nohup前缀

更改IGMP版本号

1
2
3
su
cat /proc/sys/net/ipv4/conf/eth0/force_igmp_version
echo "2" > /proc/sys/net/ipv4/conf/eth0/force_igmp_version

windows–>linux格式转换

用vi打开,执行

1
:set ff=unix

tar打包压缩

tar czvf test.tar.gz `ls -A`

加入组播组路由

1
2
route add -net 224.0.0.0 netmask 224.0.0.0 enp4s0
route add -net 0.0.0.0 netmask 0.0.0.0 enp4s0

NFS挂载

服务器端配置

1
sudo apt-get install nfs-kernel-server

编辑/etc/exports

1
/home/djstava *(rw,sync,no_root_squash,no_subtree_check)

客户端挂载

1
2
sudo apt-get install nfs-common
sudo mount -t nfs 10.0.0.166:/home/longjing /mnt

ssh非22端口登录

1
ssh -p 2666 root@10.0.0.210

scp使用非22端口

1
scp -P 26666 file 10.0.0.210:/home/djstava/

多网卡vlc播放udp

1
vlc --miface eth0 udp://@225.0.0.100:9001

ufw基本使用

1
2
3
sudo ufw enable/disable
sudo ufw allow 80
sudo ufw delete allow 80

tar系统备份

1
2
3
su
cd /
tar cvpzf /media/djstava/backup.tgz --exclude=/proc --exclude=/media –exclude=/mnt –exclude=/sys

偶尔会出现”tar: Error exit delayed from previous errors”, 将需要备份的目录都增加读的权限,另外备份还原系统时最好在live disk中进行

samba基本使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo apt-get install samba
sudo touch /etc/samba/smbpasswd
sudo smbpasswd -a xugaoxiang

vi /etc/samba/smb.conf

[ubuntu]
comment = ubuntu
path = /home/xugaoxiang
writable = yes
valid user = xugaoxiang
available = yes
create mask = 0777
directory mask = 0777
public = yes

sudo /etc/init.d/smbd restart

设置网关

1
sudo route add -net 10.0.0.0 netmask 255.0.0.0 gateway 10.0.0.20 dev enps20

VNCServer

1
2
sudo apt-get install vnc4server
sudo apt-get install --no-install-recommends ubuntu-desktop gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal -y

编辑~/.vnc/xstartup文件

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
# Uncomment the following two lines for normal desktop:
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
unset DBUS_SESSION_BUS_ADDRESS

gnome-panel &
gnome-settings-daemon &
metacity --replace &
nautilus &
gnome-terminal &

关闭 vncserver -kill :1 或者 killall Xvnc4
打开 vncserver :1

客户端连接 192.168.1.133:1

Disable hud-service

1
sudo chmod -x /usr/lib/x86_64-linux-gnu/hud/hud-service

lighttpd交叉编译后执行报dlopen错误?

1
lighttpd -m /PathToLib -f /var/www/lighttpd.conf

ubuntu18.04安装gstreamill

1
sudo apt install libgstreamer-plugins-base1.0-dev libaugeas-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-base

基本操作

命令 描述
:set number 加行号
:w 保存文件
:wq 保存并退出
:q 退出vim
:q! 不保存退出
:x 保存退出
:sav 文件名 保存成文件名
:i 进入插入(编辑)状态
按Esc键 退出编辑状态

语法高亮

命令 描述
:syntax on 打开语法高亮
:syntax off 关闭语法高亮
:set syntax=perl 强制语法高亮

文件内移动

命令 描述
h 左移
l 右移
j 下移
k 上移
e 移到单词末尾
b 移到单词开头
0 (数字0)移到行首
^ 移动到行首
I (大写字母i)光标移到行首,并进入编辑状态
o (字母o)光标移到下一行行首,并进入编辑状态
O (大写字母o)光标移到上一行行首,并进入编辑状态
$ 光标移到行末尾
A 光标移到行末尾,并进入编辑状态
G 光标移到文件的最后一行的起始位置
gg 光标移到文件开头
L 光标移到当前屏幕的底部
:行数 移动光标到指定行数
列数l (列数+字母l)移动光标到指定列
{ 光标移动到上段
} 光标移动到下段
( 光标移动到上句
) 光标移动到下句

复制、剪切、粘贴

命令 描述
y 拷贝选中的文本
p (小写字母p)粘贴到光标后
P (大写字母p)粘贴到光标前
x 剪切当前字符
s 剪切当前字符并进入编辑状态
dd 剪切当前行
5dd 剪切自当前行起的5行内容
yy 复制当前行
5yy 复制自当前行起的5行内容
y$ 复制当前到文件尾的内容
D 剪切当前到文件尾的内容
dG 删除自光标起的所有行
u 回到修改前的状态
cw 删除光标所在的单词,如果光标在单词的中间,则删除自光标处到单词结尾,并进入编辑状态

查找

命令 描述
/字符串 从头开始查找字符串,按n跳到下一处,N跳到上一处
?字符串 从尾开始查找字符串
* 查找光标所在的单词
/\c字符串 查找字符串,不分大小写
/l[io]ve 查找love或者live
/<字符串 查找以指定字符串开头的单词
/字符串> 查找以指定字符串结尾的单词
/<字符串> 查找完全匹配字符串的单词

替换

命令 描述
r 光标移动到要替换的字符,按下r再输入另一字符进行替换
:%s/旧字符串/新字符串/g 将文件中的旧字符串替换成新字符串
:起始行,结束行s/旧/新/g 将起始行到结束行内的旧字符串替换成新字符串
:%s/*$//g 删除所有空格
:g/字符串/d 删除包含字符串的所有行
:%s/^/字符串/g 在每行开头插入字符串
:%s/$/字符串/g 在每行末尾插入字符串
:s/旧/新/ 在当前行把第一次出现的旧字符串替换成新字符串
:s/旧/新/g 在当前行把出现的旧字符串替换成新字符串

替换正则及转义

元字符 说明
* 匹配0~任意个
+ 匹配1~任意个
? 匹配0~1个
\{n,m} 匹配n~m个
\{n} 匹配n个
\{n,} 匹配n~任意个
\{,m} 匹配0~m个
$ 匹配行尾
^ 匹配行首
\< 匹配单词词首
\> 匹配单词词尾
. 匹配任意一个字符
[abc] 匹配方括号中的任意一个字符。可以使用-表示字符范围,如[a-z0-9]匹 配小写字母和阿拉伯数字
[^abc] 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符
\d 匹配阿拉伯数字,等同于[0-9]
\D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x 匹配十六进制数字,等同于[0-9A-Fa-f]
\X 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\w 匹配单词字母,等同于[0-9A-Za-z_]
\W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\t 匹配TAB字符
\s 匹配空白字符,等同于[ \t]
\S 匹配非空白字符,等同于[^ \t]

vim与linux命令结合使用

命令 描述
:!命令 执行命令
!!命令 执行命令并将输出添加到当前文件当前位置,会替换原来的内容
:r !命令 执行命令并将输出添加到当前文件当前位置的下一行
:sh 临时回到命令行,原来打开文件的进程在后台运行

文本缩进

命令 描述
:set autoindent 打开自动缩进
:set smartindent 打开智能缩进
:set shiftwidth=4 定义缩进大小为4个空格
>> 当前行缩进
5>> 自光标起5行整体进行缩进
<< 当前行不缩进(un-indent)
5<< 自光标起5行整体不缩进

读写文件

命令 描述
:起始行数,结束行数 w 输出文件名 将从起始行数到结束行数输出到指定文件名中,如果文件名已经存在,则w后要跟上!,且文件内容会被替换
:起始行数,结束行数 w >> 输出文件名 将从起始行数到结束行数输出到指定文件名的末尾
:r 文件名 将指定文件名的内容添加到当前文件中来
:行数r 文件名 将指定文件名的内容添加到当前文件的指定行处

大小写

命令 描述
Vu 将当前行中的大写字符转换成小写字符
VU 将当前行中的小写字符转换成大写字符
g~~ 将当前行的大小写互换
vEU 将单词转换成大写
ggguG 全文转换成小写
gggUG 全文转换成大写
:%s/<./\u&/g 将每个单词的首字母转换成大写
:%s/<./\l&/g 将每个单词的首字母转换成小写
:%s/.*/\u& 将每行的首字母转换成大写
:%s/.*/\l& 将每行的首字母转换成小写
gU0 (数字0)从光标所在位置到行首,都变为大写
gU$ 从光标所在位置到行尾,都变为大写
gUG 从光标所在位置到文章末尾都变为大写
gU1G 从光标所在位置到第一个字符,都变为大写

svn备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# SVN备份脚本
#!/bin/sh
# project repo backup script

logFile=/root/svnBackup/svnbak.log
DATE=`date +%Y%m%d`
BakDir=/root/svnBackup
SvnDir=/svn/project
SVNADMIN=/svn/root/bin/svnadmin

echo "" >> $logFile
echo " " >> $logFile
echo "-------------------------------------------" >> $logFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile
echo "-------------------------------------------" >> $logFile

cd $BakDir

project=project1.0
projectdata=$SvnDir/$project
destdir=$BakDir/$project
dumpfile=$DATE.$project.tgz

if [ -f $BakDir/$dumpfile ]
then
echo "backup file have exist.Exit!" >>$logFile
else
$SVNADMIN hotcopy $projectdata $destdir --clean-logs
tar -Pczvf $dumpfile $destdir > /dev/null
rm -fr $project
echo "backup $project done into $dumpfile ">>$logFile
fi

oldfile="$BakDir/"$(date +%y%m%d --date='28 days ago').$project.tgz

if [ -f $oldfile ]
then
rm -f $oldfile >> $logFile 2>&1
echo "[$oldfile]Delete Old File Success!" >> $logFile
else
echo "[$oldfile]No Old Backup File!" >> $logFile
fi

定时执行,每天23:30执行一次脚本

1
2
3

crontab -e
30 23 * * * /root/svnbak.sh

当前目录查找所有后缀名为jpg的文件并拷贝到指定目录

1
2

find . -iname *.jpg | xargs -i cp {} /home/xugaoxiang/Pictures/

使用curl post上传文件

1
curl -F ‘data=@path/to/local/file’ UPLOAD_ADDRESS

curl以特定key参数上传文件

1
2

curl -F 'longjing=@/home/xugaoxiang/Work/face_recognition/examples/know/00047.jpg' http://192.168.2.99:8889/uploadImageFile

curl同时上传多个文件

1
curl -F 'fileX=@/path/to/fileX' -F 'fileY=@/path/to/fileY' ... http://localhost/upload

ffmpeg多音轨转码

1
ffmpeg -re -i King.Of.Comedy.1999.mkv -map 0:v -vcodec libx264 -map 0:a:1 -acodec aac -strict -2 -y -f flv rtmp://10.10.10.188/hls/test

srt转webvtt

1
ffmpeg -i pbs5e6.srt -map s -y index.vtt

编辑mp4文件

可以修改original_network_id、transport_stream_id、service_id等等,streamid代表音视频pid,可以修改video pid和audio pid

1
2
3
4
5
ffmpeg -i input.mp4 -vcodec libx264 -strict -2 -acodec aac -streamid 1:2595 -
mpegts_original_network_id 0x1122 -mpegts_transport_stream_id 0x3344 -
mpegts_service_id 0x02 -mpegts_pmt_start_pid 0x0A20 -mpegts_start_pid
0x0A21 -metadata service_provider="yakir" -metadata service_name="yakir"
-bsf h264_mp4toannexb -f mpegts output.ts

m3u8切片

1
ffmpeg -re -i input.mp4 -vcodec libx264 -strict -2 -acodec aac -hls_list_size 0 -f hls input/index.m3u8

如果音视频都是copy的话,去掉re参数可以快速进行切片

分辨率及视频比例设置

1
ffmpeg -i input.mp4 -vf scale=1280x720,setdar=16:9 output

udp转码切片

1
ffmpeg -i "udp://@225.0.0.100:9001?buffer_size=1000000&fifo_size=1000000" -vcodec libx264 -acodec aac -strict -2 -r 25 -preset ultrafast -crf 23 -vf w3fdif -f flv -y rtmp://10.0.0.100:1935/live/xugaoxiang/index

多网卡收取udp

1
route add -net 225.0.0.0 netmask 255.0.0.0 dev eno1

指定码率

1
-b 1M -minrate 1M -maxrate 1M -ab 128k -bufsize 2M

读取rtsp流保存成本地文件

1
ffmpeg -i rtsp://admin:lj12345678@192.168.2.130:554/ISAPI/streaming/channels/101 -f image2 -vf fps=3 img%03d.jpg

视频转换图片

从test.mp4文件中的第01:02:03处开始截取100张图片

1
ffmpeg -ss 01:02:03 -i test.mp4 -f image2 -vframes 100 %05d.jpg

视频截取

从输入文件的第10秒开始,截取30秒的视频

1
ffmpeg -ss 00:00:10 -t 00:00:30 -i input.mp4 -vcodec copy -acodec copy output.mp4

制作GIF

1
ffmpeg -ss 00:00:20 -i input.mp4 -to 10 -r 10 -vf scale=200:-1 output.gif

adb远程抓图

1
2
adb shell /system/bin/screencap -p /data/android_traffic_balance_01.png
adb pull /data/android_traffic_balance_01.png .

adb启动activity

直接启动

1
adb shell am start -n com.xugaoxiang/com.xugaoxiang.MainActivity

指定intent

1
adb shell am start -a intent_ACTION -c intent_category -n com.xugaoxiang/com.xugaoxiang.MainActivity

指定浏览器打开特定页面 ​​​​

1
am start -a android.intent.action.VIEW -d http://google.com

开机运行shell脚本

编辑init.$(platform).rc,增加

1
2
3
4
5
service makenode /system/etc/makebtusb0.sh
class main
user root
group root
oneshot

makebtusb0.sh

1
2
3
4
#! /system/bin/sh

mknod /dev/btusb0 c 180 194
chmod 777 /dev/btusb0

ADB操作特定设备

1
2
3
4
C:\Users\djstava>adb devices
List of devices attached
10.0.0.48:5555 offline
8D6TUCDI69D6G6AI device

对某个设备进行操作

1
adb -s 8D6TUCDI69D6G6AI shell

android修改MAC地址

1
2
3
4
su
netcfg(ifconfig) eth0 down
netcfg eth0 hwaddr 10:10:10:10:10:10
netcfg(ifconfig) eth0 up

获取apk对应的包名和路径

1
adb shell pm list package -f

以读写方式重新挂载/system

1
mount -o remount,rw /system

关闭selinux

1
2
3
4
5
6
7
8
9
# 方法1
setenforce 0

# 方法2
echo 0 > /sys/fs/selinux/enforce

# 方法3
编辑BoardConfig.mk
BOARD_KERNEL_CMDLINE := console=ttyS0,115200n8 androidboot.hardware=zx2000 androidboot.serialno=01234567890123456789 androidboot.selinux=permissive

adb模拟键值发送

1
adb shell input keyevent $键值

Android studio 2.1.2版本,linux + 默认keymap

命令 描述
ctrl+shift+up/down 上下移动光标所在行的代码
ctrl+d 复制光标所在行的代码
shift+delete或者ctrl+y 删除光标所在行的代码
logt+enter 定义静态变量TAG
logd+enter log.d打印
logm+enter 包含savedInstanceState的log.d打印
alt+up/down 方法间的顺序切换
ctrl+n 打开某个类
ctrl+shift+n 打开某个文件
ctrl+b 查看变量的声明
ctrl+u 查看父类
ctrl+alt+h 查看方法在哪里被调用
ctrl+shift+i 查看方法的实现,而不是跳转到具体方法实现中去
ctrl+h 显示类的结构图
ctrl+shift+’+’/‘-‘ 代码块的展开/折叠
alt+1 打开/隐藏左侧的工程面板
ctrl+shift+alt+n 查看类中的方法或属性
ctrl+F12 显示当前文件的结构
ctrl+o 重写父类的方法
ctrl+’[‘ / ‘]’ 找到{的起始和结束位置
ctrl+alt+t 快速添加if/while/try等语句
ctrl+j add code snippets
ctrl+f search
ctrl+r search and replace
ctrl+e open recently file
ctrl+shift+alt+l format the code

px、dp相互转换

1
public class DensityUtil {
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    /**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}

/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}

获取屏幕宽高

1
2
3
4
5
Resources resources = this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
float density1 = dm.density;
int width = dm.widthPixels;
int height = dm.heightPixels;

获取codec

1
2
3
4
5
6
7
8
9
private List<String> mSupportedCodecs;
private void getSupportedCodecs() {
int numCodecs = MediaCodecList.getCodecCount();
mSupportedCodecs = new ArrayList<String>(numCodecs);
for (int i = 0; i < numCodecs; i++) {
MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
mSupportedCodecs.add(codecInfo.getName());
}
}

开机焦点问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class TouchModeUtils {

/**
* 开机时系统处于touch mode,需要手动发送一个按键事件。
*/
public static void doKeyActionInTouchMode() {
new Thread() {
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_SLASH);
inst.setInTouchMode(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}

python2/3切换

1
2
3
conda create --name py3 python=3.6
conda create --name py2 python=2.7
source activate py3

软件升级

1
conda install -c conda-forge tensorflow=1.6.0

软件卸载

1
conda remove numpy

查找

1
conda search tensorflow

安装特定版本

1
conda install tensorflow-gpu=1.8.0

卸载anaconda

直接rm -rf /anaconda3,删除/.bashrc中相关的语句即可

Q1

1
ImportError: /home/longjing/anaconda3/lib/python3.6/site-packages/torch/lib/../../../../libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by /home/longjing/anaconda3/lib/python3.6/site-packages/../../libopencv_objdetect.so.3.3)

A1

下载文件libstdc++.so.6.0.22

1
2
3
4
cp libstdc++.so.6.0.22 ~/anaconda3/lib/
cd ~/anaconda3/lib
unlink libstdc++.so.6
ln libstdc++.so.6.0.22 libstdc++.so.6

Q2

1
ImportError: /usr/lib/x86_64-linux-gnu/libatk-1.0.so.0: undefined symbol: g_log_structured_standard

A2

1
conda install -c anaconda glib

Q3

1
OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in cvShowImage, file /feedstock_root/build_artefacts/work/opencv-3.1.0/modules/highgui/src/window.cpp, line 545 Traceback (most recent call last): File "untitled.py", line 7, in cv2.imshow('image',img) cv2.error: /feedstock_root/build_artefacts/work/opencv-3.1.0/modules/highgui/src/window.cpp:545: error: (-2) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function cvShowImage

A3

1
2
3
conda remove opencv
conda update conda
conda install -c menpo opencv3

taberror inconsistent use of tabs and spaces in indentation pycharm

Edit -> Convert Indents -> To Tabs

多行代码左移及右移

选中,按Tab键右移,Shift+Tab左移

PyQt5环境安装

1
pip3 install PyQt5-tools

PyQt5使用快捷键

1
2
self.printShortCut = QShortcut(QKeySequence(Qt.Key_9), self)
self.printShortCut.activated.connect(self.onPrinterClicked)

PyQt5捕捉主窗口退出事件

重写closeEvent方法

1
2
def closeEvent(self, event):
pass

PyQt5确定取消选择框

1
2
3
4
5
6
reply = QMessageBox.question(self, 'title', 'message', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.No:
print('user select no')

else:
print('user select yes')

自启动

1
os.execv(__file__, sys.argv)

byte和string相互转换

1
2
3
4
5
b = b'abcd'
b.decode('utf-8')

s = 'hello'
s.encode('utf-8')

允许远程访问mysql

1
2
3
4
5
mysql -uroot -p
use mysql;
select host,user from user;
update user set host='%' where user='root';
flush privileges;

修改编码格式

通过命令查看

1
mysql> show variables like 'character%';

同样可以通过命令行修改

1
mysql> set character_set_server=utf8;

或者修改配置/etc/mysql/my.cnf,在mysqld字段中增加

1
character_set_server=utf8

将mac序列导入到数据djdb数据库mac表中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use djdb;
drop procedure if exists addmac;
delimiter
create procedure addmac()
begin
declare i int;
declare macs int;
declare mace int;
declare stbtype text;
declare pon text;

set stbtype="J6000";
set macs=x'14E00594';
set mace=x'14E0065B';
set pon="POReq201704121";

set i=macs;
start transaction;
while i<=mace do
insert into mac(macAddr0,status,stbtype,po) values(concat("DC2A",hex(i)),0,stbtype,pon);
set i=i+2;
end while;
commit;
end;
delimiter ;
call addmac();

重置root密码

编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,添加

1
skip-grant-tables

重启mysqld

1
2
3
4
mysql -p
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('toor') , password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
mysql> update user set plugin="mysql_native_password";
mysql> quit

上述是mysql-server-5.7的配置,5.7之前的authentication_string应该换成password。最后再注释掉skip-grant-tables,重启mysqld。

创建分支

将本地工程提交到github工程的linux分支

1
2
3
4
5
6
7
$ git init
$ git add *
$ git commit -m "some message..."
$ git branch linux
$ git checkout linux
$ git remote add origin https://github.com/xugaoxiang/troutling.git
$ git push origin linux

git 使用非标准的ssh端口

1
git clone ssh://git@192.168.2.100:2222/root/test.git

git初始化项目

1
2
3
mkdir example.git
cd example.git
git init --bare .
使用支付宝打赏
使用微信打赏

请博主喝咖啡!