广告

本站里的文章大部分经过自行整理与测试
显示标签为“开发”的博文。显示所有博文
显示标签为“开发”的博文。显示所有博文

2017年12月22日星期五

GIT: 从 SSH 转 HTTPS (免输入密码)

1) 检查 repository 所用的连接 REMOTE URL

$ git remote -v

origin  git@github.com:user/repo.git (fetch)
origin  git@github.com:user/repo.git (push)

# 重新配置 REMOTE URL (从 SSH 改为 HTTPS)
$ git remote set-url origin https://github.com/user/repo

2) 配置

------ Linux ------
$ git config credential.helper store

------ Mac ------
$ git config --global credential.helper osxkeychain

------ Windows ------
$ git config --global credential.helper manager

3) 测试: 修改文件后, push 上载

$ git add <filename> / git rm <filename>
$ git commit -m "<title>"

# 第一次输入要 email 户口 和密码, 以后即便重启也不需再输入密码了
$ git push https://github.com/user/repo

4) 检查

会生成 2 个文件

$ cat ~/.gitconfig

[user]
email = uid@email.com
name = Jason Mun
[credential]
helper = store

$ cat ~/.git-credentials

https://<uid>%40<email.com>:<password>%23@github.com

%40: @
%23: #

2017年9月19日星期二

自动生成 configure 和 Makefile

1) 编写 helloworld.c

#include <stdio.h>
    
int main(int argc, char** argv)
{
      printf("Hello, Linux World! ");
      return 0;
}

2) 生成 configure.scan, 改名为 configure.ac

2.1) 扫描源代码目录, 生成 configure.scan
$ autoscan

2.2) 改名为 configure.ac
$ mv configure.scan configure.ac

2.3) 编辑 configure.ac
$ vi configure.ac

AC_INIT(helloworld.c)

AM_INIT_AUTOMAKE(helloworld, 1.0)

AC_PROG_CC

AC_OUTPUT(Makefile)

3) 生成 aclocal.m4 和 configure

3.1) 生成 aclocal.m4
$ aclocal

3.2) 生成 configure
$ autoconf 

4) 编写 Makefile.am

$ vi Makefile.am

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=helloworld
helloworld_SOURCES=helloworld.c

5) 生成 Makefile

$ automake --add-missing

6) 测试

$ ./configure
$ make
$ ./helloworld

2017年9月17日星期日

Git - 免户口与密码重复输入

1) 产生公钥 (id_rsa.pub) 与私钥 (id_rsa), 放到 .ssh

$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096 -C "钥匙名字"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/UID/.ssh/id_rsa): id_rsa 文件名
Enter passphrase (empty for no passphrase): 设置密码
Enter same passphrase again: 重复以上密码

2) 将公钥放去 github

登录 https://github.com/settings/ssh
添加 ~/.ssh/id_rsa.pub 公钥内容

3) 测试

$ git clone git@github.com:户口名/仓库名.git

* 第一次用 ssh 连接 github.com 会要求输入以上设置的密码.

4) 其它

之前已经 clone 的, 可修改 remote url
$ git remote set-url origin git@github.com:户口名/仓库名.git

2017年9月10日星期日

Git - branch / tag

1) 分支管理 (branch)

$ git branch                         查看分支
$ git branch <name>           创建分支
$ git checkout <name>        切换分支

$ git checkout -b <name>    创建 + 切换分支
$ git merge <name>            合拼分支
$ git branch -d <name>  删除分支

2) 操作修改和版本穿梭

$ git log

$ git reset HEAD 暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响
$ git reset --hard <revision> 重置至某一版本 (强制,暂存区和工作区均重置)
$ git reset --hard HEAD^, 则回滚为上一版本
$ git reflog 显示操作的日志
$ git rm --cached <file> 会直接从暂存区删除文件,工作区则不做出改变
$ git checkout -- <file1> <file2> 会将文件在工作区的修改撤销

$ git checkout HEAD . 或者 git checkout HEAD <file
会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。
这个命令是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动

3) 标签管理 (tag)

$ git tag                 查看标签 
$ git tag <name> <commit_id>     创建标签, 若无commit id 默认当前
$ git tag -a <name> -m <msg>         创建标签, 且添加标签信息
$ git tag -s <name> -m <msg>         创建签名标签,且添加标签信息
$ git tag -d <name> -m <msg>         删除标签
$ git show <name>                         查看标签具体信息

$ git push origin <name>                  推送某个标签至远程
$ git push origin --tags                    推送所有标签至远程

2017年9月9日星期六

Git 历史记录清除

清除所有文件的历史记录
以下已试过了..

$ git checkout --orphan latest_branch
$ git add -A
$ git commit -am "Clear History Rec"
$ git branch -D master
$ git branch -m master

$ git push -f origin master

2017年9月6日星期三

Git 开发基本应用

1) 先在 https://github.com 用自己的户口名 user, 创建一个软件库 gittest
软件库网址 https://github.com/user/gittest

2) 下载 gittest
$ git clone https://github.com/user/gittest

3) 在 gittest 里增加 / 修改文件
$ cd gittest
$ echo "# gittest" >> text.txt

4) git status 会告知你可以上传的文件

5) 新的文件 / 更改文件上传到分支 (master 是你的软件库主分支)

$ git add text.txt text2.txt
$ git commit -m "<message>"
$ git push origin master

6) 撤除文件, 然后也同步到分支去
$ rm text.txt

$ git rm text.txt
$ git commit -m "<message>"
$ git push origin master

7) 如果要更新本地软件库 (如果分支已更新, 本地的也可以更新)
$ git pull origin master

8) 其它
# 在本地初始化文件夹 (会在文件夹中里产生 .git)
$ git init

# 更换或增加外部网址
$ git remote -v
$ git remote add origin <url>
$ git remote set-url origin <url>

2017年8月4日星期五

Gnome Shell Extensions - Auto OVPN



Auto OVPN
https://github.com/yomun/auto-ovpn

https://extensions.gnome.org/extension/1270/auto-ovpn/

第一个自行开发的 Gnome Shell Extensions
用于方便在 Linux 容易用上 VPN Gate

因每次去 VPN Gate 网站下载 ovpn 文件实在太麻烦了, 
同时也不知道哪一个可以用

这小工具可以解决这问题, 而且全自动, 只要启动了 VPN 就可以了.
如果 VPN 有问题连接不到会自动试用其它的 ovpn,
一直试到有一个 VPN 能用为止

同时也显示现在的 Public IP 在 panel 上

2017年7月14日星期五

Gnome Shell Extension 制作基本知识

1) 基本指令, 输入 Alt + F2 打开命令模式 

- 再输入 lg, 打开 Looking Glass
- 再输入 r, 重启 Gnome Shell

2) 在 Looking Glass - Evaluator 输入以下看看

# 会弹出信息
Main.notify("Test");
Main.notifyError("Error");

# 会在 Gnome Logs 记录信息
global.log("Test");
global.logError("Error");

3) Gnome Shell Extensions 存放的位置

$ cd ~/.local/share/gnome-shell/extensions
$ cd /usr/share/gnome-shell/extensions

4) 制作 Gnome Shell Extension 的命令

# 创建一个 Gnome Shell Extension
$ gnome-shell-extension-tool -c

$ gnome-shell-extension-tool -e Hello@test.home
$ gnome-shell-extension-tool -d Hello@test.home
$ gnome-shell-extension-tool -h

5) Debug 工具 (不断重启 Gnome Shell 来测试程序, 再看 Logs 有没错误)

可以打开 Logs 检查以下程序是否有错误, 搜索 Hello@test.home

6) 编写

# 基本有3个文件 extension.js, metadata.json, stylesheet.css
# metadata.json 记录步骤 4 创建时所输入的资料

$ cd ~/.local/share/gnome-shell/extensions/Hello@test.home
$ gedit extension.js

const Main = imports.ui.main;

log("extension-load");
Main.notify("extension-load");

function init() {
    log("extension-init");
    Main.notify("extension-init");
}

function enable() {
    log("extension-enable");
    Main.notify("extension-enable");
}

function disable() {
    log("extension-disable");
    Main.notify("extension-disable");
}

7) 其它

# Gnome Shell Extension 所有设置备份
$ sudo dconf dump /org/gnome/shell/extensions/

2017年4月10日星期一

Linux - SQL Server (docker)

  • 还没有数据库
$ docker run --name mssql -e ACCEPT_EULA=Y -e SA_PASSWORD=Yukon900 -p 1433:1433 -d microsoft/mssql-server-linux
$ docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Yukon900

  • 已有数据库 DemoData  (建议用这个)
$ git clone https://github.com/twright-msft/mssql-node-docker-demo-app.git
$ docker build -t node-web-app .

$ docker run --name mssql -e ACCEPT_EULA=Y -e SA_PASSWORD=Yukon900 -p 1433:1433 -p 8080:8080 -d node-web-app
$ docker exec -it mssql /bin/bash /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Yukon900

http://localhost:8080

可以下载 DBeaver 连接 MSSQL

http://dbeaver.jkiss.org/

Host: localhost
Port: 1433
Username: sa
Password: Yukon900

2017年4月8日星期六

Eclipse Che 服务端


服务端安装了 Eclipse Che
只要能上网, 到哪里都可用浏览器连接上服务端 Eclipse, 继续编写与开发程序

https://www.eclipse.org/che/docs/setup/getting-started/

1) Docker 安装

http://jasonmun.blogspot.my/2016/05/linux-docker.html

2) 测试 Docker

$ su
$ systemctl status docker
$ docker info
$ docker run hello-world

3) 准备数据存放位置和端口

$ mkdir /home/username/eclipse_data

防火壁要将以下端口打开

8080 - Tomcat 端口
8000 - 服务端 Debug 用, 
32768-65535 间 - Docker 和 Eclipse Che 代理用

4) 安装与开启 Eclipse Che 服务

$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /home/username/eclipse_data:/data -e CHE_HOST=192.168.0.100 eclipse/che start

如启动不了, 用这行检查 (也可以暂时关闭防火壁作测试)..
$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /home/username/eclipse_data:/data -e CHE_HOST=192.168.0.100 eclipse/che info --network

5) 从服务端浏览 http://172.17.0.1:8080/ 或 客户端浏览 http://192.168.0.100:8080/

6) 其它

$ docker run <DOCKER_OPTIONS> eclipse/che stop
$ docker run <DOCKER_OPTIONS> eclipse/che restart
$ docker run <DOCKER_OPTIONS> eclipse/che:<version> start

如果在 Windows 用 boot2docker, 可将系统变数 `%userprofile%` 设置为 `:/data`
$ docker run <DOCKER_OPTIONS> -v /c/Users/username/che:/data eclipse/che start

2017年4月7日星期五

Atom - github 开发的 Text Editor


Atom 是 github 开发的文本编辑器
支持 Windows / Linux / Mac OS X

https://github.com/atom/atom/releases/

$ sudo add-apt-repository ppa:webupd8team/atom
$ sudo apt-get update
$ sudo apt-get install atom

Bracket - Adobe 的 Web 开发编辑器


Bracket 是 Adobe 开发用于 Web 的编辑器 ( HTML / CSS / Java Script )
支持 Windows / Linux / Mac OSX

https://github.com/adobe/brackets/releases
https://github.com/adobe/brackets/releases/download/release-1.9/Brackets.Release.1.9.64-bit.deb

$ sudo add-apt-repository ppa:webupd8team/brackets
$ sudo apt update
$ sudo apt install brackets

2017年4月5日星期三

2017年4月3日星期一

Ubuntu - ubuntu-make 开发工具下载


1. 先安装 Ubuntu Make

https://github.com/ubuntu/ubuntu-make

$ sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
$ sudo apt-get update
$ sudo apt-get install ubuntu-make

2. 各开发 IDE 下载

$ sudo umake android android-ndk
$ sudo umake android android-studio

$ sudo umake dart editor

$ sudo umake go go-lang

$ sudo umake ide arduino
$ sudo umake ide eclipse
$ sudo umake ide idea
$ sudo umake ide idea-ultimate
$ sudo umake ide phpstorm
$ sudo umake ide pycharm
$ sudo umake ide pycharm-educational
$ sudo umake ide pycharm-professional
$ sudo umake ide rubymine
$ sudo umake ide webstorm

$ sudo umake games stencyl
$ sudo umake games unity3d

$ sudo umake web firefox-dev
$ sudo umake web visual-studio-code

3. 卸载

$ sudo umake games unity3d --remove

2017年4月2日星期日

GO 语言


GO 语言
https://golang.org

$ su
$ tar -C /usr/local -xzf go1.8.linux-amd64.tar.gz

$ gedit /etc/profile

export PATH=$PATH:/usr/local/go/bin

2017年3月1日星期三

Ubuntu - SQL Server

1. 公钥

$ curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

2. 注册 Microsoft SQL Server Ubuntu 存储库

$ curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list > /etc/apt/sources.list.d/mssql-server.list

3. 安装 SQL Server on Linux

$ sudo apt update
$ sudo apt install -y mssql-server

4. 设置

$ sudo /opt/mssql/bin/sqlservr-setup

5. 查看

$ systemctl status mssql-server

2017年2月8日星期三

MySQL - 数据备份与恢复

备份

[options]: -h主机名 -P端口 -u用户名 -p密码

1. 备份 MySQL 数据库
$ mysqldump [options] 数据库名 > backup.sql

$ mysqldump [options] -database 数据库名 > backup.sql

2. 备份 MySQL 数据库 + 删除表 ( --add-drop-table )
$ mysqldump --add-drop-table [options] -database 数据库名 > backup.sql

3. 直接将 MySQL 数据库 压缩备份 ( gzip )
$ mysqldump [options] -database 数据库名 | gzip > backup.sql.gz

4. 备份 MySQL 数据库里的表
$ mysqldump [options] 数据库名 表名1 表名2 > backup.sql

5. 同时备份多个 MySQL 数据库
$ mysqldump [options] -databases 数据库名1 数据库名2 数据库名3 > multi_backup.sql

6. 备份数据库结构 ( --no-data )
$ mysqldump --no-data [options] -databases 数据库名1 数据库名2 数据库名3 > struct.sql

7. 备份所有数据库 ( --all-databases )
$ mysqldump [options] --all-databases > all_backup.sql

恢复

1. 还原 MySQL 数据库

$ mysql 
[options] 数据库名 < backup.sql

2. 还原压缩的 MySQL 数据库

$ gunzip < backup.sql.gz | mysql 
[options] 数据库名

3. 将数据库转移到新服务器

$ mysqldump 
[options] 数据库名 | mysql --host=*.*.*.* -C 数据库名

4. 
在 mysqldump 中使用 --master-data 和 --single-transaction

--master-data=2 : 会记录 binlog 文件和 position 的信息
--single-transaction : 会将隔离级别设置成 repeatable-commited

5. 导入数据库

常用 source 命令, 用 use 进入到某个数据库, mysql> source C:\test.sql

6. 查看 binlog 日志

$ mysqlbinlog 日志名 | more

7. general_log - 记录数据库的任何操作

- 查看 general_log 的状态和位置 : show variables like "general_log%",

- 开启 general_log : set global general_log=on



增量备份

1. 首先做一次完整备份

$ mysqldump [options] --single-transaction --master-data=2 数据库名 > backup.sql

在 backup.sql 文件中可看到

-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;

是指备份后所有的更改将会保存到 bin-log.000002 二进制文件中

2. 在 数据库名 库的 t_student 表中增加两条记录, 然后执行 flush logs 命令

这时将会产生一个新的二进制日志文件 bin-log.000003,
bin-log.000002 则保存了全备份过后的所有更改,
既增加的记录操作也保存于 bin-log.00002

3. 再 数据库名 库中的 a 表中增加 2 条记录, 然后误删除 a 和 t_student 表

以上操作也记录在 bin-log.000003


恢复数据 + binlog 日志

1. 首先导入全备数据


$ mysql [options] < backup.sql

2. 恢复 binlog 日志 bin-log.000002

$ mysqlbinlog bin-log.000002 | mysql [options]

$ mysql [options] < bin-log.000002

3. 恢复 binlog 日志 bin-log.000003

general_log 中找到误删除的时间点,
然后更加对应的时间点到 bin-log.000003 中找到相应的 position 点,
需要恢复到误删除的前面一个 position 点

可以用如下参数来控制 binlog 的区间

开始点 --start-position
结束点 --stop-position
开始时间 --start-date 
结束时间 --stop-date

找到恢复点后, 既可以开始恢复

$ mysqlbinlog --start-position=208 bin-log.000003 | mysql [options]

MariaDB / MySQL - Binary Logs 设置

1. 准备存 bin-log 的地方

$ mkdir -p /var/log/mariadb/bin-log

2. 编辑 /etc/my.cnf (my.ini)

[mysqld]

log_bin=/var/log/mariadb/bin-log


expire_logs_days = 7


3. 启动 MariaDB

$ systemctl start mariadb

4. 查看数据库关于 Binary Log 设置

检查 Binary Logs 是否开启

$ mysql -h主机名 -P端口 -u用户名 -p密码

MariaDB> show variables like 'log_bin';

MariaDB> show binary logs;
MariaDB> show master logs;

重设
MariaDB> reset master;
(在slave上, 用 reset slave, 之前应 stop slave, 之后再 start slave)

清理
MariaDB> purge binary logs to 'log-bin.000001';
MariaDB> purge binary logs before '2011-05-28 12:05:38';

5. 查看 Binary Log

MariaDB> show master status;
MariaDB> show binlog events;

MariaDB> quit;

$ cd /var/log/mariadb/bin-log

全备份

$ mysqlbinlog log-bin.000001 > tmp.log

部分备份

# --start-datetime / --stop-datetime
$ mysqlbinlog --start-datetime='2015-07-01 00:00:00' --stop-datetime='2016-07-15 00:00:00' log-bin.000001 > tmp.log
$ mysqlbinlog --start-datetime='2015-07-01 00:00:00' log-bin.000001 > tmp.log
$ mysqlbinlog --stop-datetime='2016-07-15 00:00:00log-bin.000001 > tmp.log

# --start-position / --stop-position
$ mysqlbinlog --start-position='10001' --stop-position='10002' log-bin.000001 > tmp.log
$ mysqlbinlog --start-position='10001' log-bin.000001 > tmp.log
$ mysqlbinlog --stop-position='10002log-bin.000001 > tmp.log

6. 关闭与开启 Binary Logs

关闭
MariaDB> SET sql_log_bin=0;
MariaDB> flush logs;

恢复
$ mysql -h主机名 -P端口 -u用户名 -p密码 < tmp.log

开启
MariaDB> SET sql_log_bin=1;

2017年1月28日星期六

Subnet Mask

子网掩码 (Subnet Mask) 决定了能设置内网 IP 的数量

以下假设 IP 为 192.168.0.1
用不同的 IP和子网掩码, 其子网范围会有所变动

在子网掩码为 255.255.254.0/23, 其
IP 范围 为
192.168.0.0 - 192.168.0.255 和 192.168.1.1 - 192.168.1.254, 广播为 192.168.1.255
192.168.2.0 - 192.168.2.255 和 192.168.3.1 - 192.168.3.254, 广播为 192.168.3.255
192.168.4.0 - 192.168.4.255 和 192.168.5.1 - 192.168.5.254, 广播为 192.168.5.255

子网掩码
IP 范围 (如 IP 为 192.168.0.1)
广播
共 (可用 IP)
255.255.0.0/16192.168.0.1 - 192.168.255.254192.168.255.255
65534
255.255.128.0/17192.168.0.1 - 192.168.127.254192.168.127.255
32766
255.255.192.0/18192.168.0.1 - 192.168.63.254192.168.63.255
16382
255.255.224.0/19192.168.0.1 - 192.168.31.254192.168.31.255
8190
255.255.240.0/20192.168.0.1 - 192.168.15.254192.168.15.255
4094
255.255.248.0/21192.168.0.1 - 192.168.7.254192.168.7.255
2046
255.255.252.0/22192.168.0.1 - 192.168.3.254192.168.3.255
1022
255.255.254.0/23192.168.0.1 - 192.168.1.254192.168.1.255
510
255.255.255.0/24192.168.0.1 - 192.168.0.254192.168.0.255
254
255.255.255.128/25192.168.0.1 - 192.168.0.126192.168.0.127
126
255.255.255.192/26192.168.0.1 - 192.168.0.62192.168.0.63
62
255.255.255.224/27192.168.0.1 - 192.168.0.30192.168.0.31
30
255.255.255.240/28192.168.0.1 - 192.168.0.14192.168.0.15
14
255.255.255.248/29192.168.0.1 - 192.168.0.6192.168.0.7
6
255.255.255.252/30192.168.0.1 - 192.168.0.2192.168.0.3
2