
全栈工程师开发手册 (作者:栾鹏)
架构系列文章
git
工作中,我们常常需要链接远程git仓库。所以需要在本地安装使用git工具。
安装依赖包:
sudo apt-get install curl openssh-server ca-certificates
安装Git
sudo apt-get install git
设置本地ssh公钥和私钥
ssh-keygen
一路回车使用默认设置。
查看公钥
cat .ssh/id_rsa.pub
可以看到自己的公钥为以下类似字符串
ssh-rsa AAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx5R
登录git账户,打开git账户settings,在SSH key中添加上面查到的本地公钥
克隆分支到本地仓库
git clone -b 分知名 git@网址/仓库名
例如:git clone -b master git@github.com:626626cdllp/sklearn.git # 克隆到当前目录
克隆远程仓库到本地
git clone git@网址/仓库名
这个样可以在git仓库的主页看到
例如:git@github.com:626626cdllp/sklearn.git
github
gitlab
ssh
常用命令
sudo apt-get install openssh-server # 安装ssh服务器可以让别人的电脑访问你的电脑
ssh-keygen # 生成密钥(公钥和私钥),生成的文件在 根目录的 .ssh/目录下
ssh-copy-id root@127.0.0.1 将本机的公钥追加到目标机器上
sudo service ssh start # 启动
sudo systemctl restart ssh.service # 重启ssh服务
sudo service ssh status # 查看ssh状态
连接远程服务器
ssh IP地址 # 例如 ssh 192.168.156.25
ssh 用户名@IP地址 # 例如 ssh username@192.168.156.25
ssh 用户名@IP地址 -p 端口号
注意:要想将文件传输到远程服务器,必须先讲公钥通过ssh-copy-id username@127.0.0.1 将本机的公钥追加到目标机器上
ssh上传(下载)文件到(从)远程主机
1、上传本地文件到远程服务器或主机
scp 本地文件路径 username@servername:远程主机目录
例如:
scp /var/www/test.php root@192.168.0.101:/var/www/
把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中
例如:
scp /etc/lp/file1 zhangbin@192.168.2.156:~/
# 上传文件到远程主机根目录
2、从远程服务器或主机下载文件
下载文件我们经常使用wget,但是如果没有http服务,如何从服务器上下载文件呢?
scp username@servername:远程主机文件路径 本地目录
例如
scp root@192.168.0.101:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)
3、从远程服务器或主机下载整个目录
scp -r username@servername:远程目录 本地目录
例如:
scp -r root@192.168.0.101:/var/www/test /var/www/
4、上传目录到服务器
scp -r 本地目录 username@servername:远程目录
例如:
scp -r test root@192.168.0.101:/var/www/
把当前目录下的test目录上传到服务器的/var/www/ 目录
ssh 相关参数
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
ssh 别名登录小技巧
可以创建~/.ssh/config 文件并为每台服务器指定登录信息和验证方法,如下所示:
$ vim ~/.ssh/config
Host www
HostName www.ttlsa.com
Port 22
User root
IdentityFile ~/.ssh/id_rsa.pub
IdentitiesOnly yes
Host bbs
HostName 115.28.45.104
User anotheruser
PubkeyAuthentication no
然后直接指定别名进行登录
ssh www
选项注释:
HostName 指定登录的主机名或IP地址
Port 指定登录的端口号
User 登录用户名
IdentityFile 登录的公钥文件
IdentitiesOnly 只接受SSH key 登录
PubkeyAuthentication
ssh 断点续传
类似scp拷贝的另一个命令 rsync就可以实现意外中断后,下次继续传,命令如下:
rsync -P --rsh=ssh home.tar 192.168.205.34:/home/home.tar
-P: 是包含了 “–partial –progress`”, 部分传送和显示进度
-rsh=ssh
表示使用ssh协议传送数据
如果不想每次都使用
rsync -P rsh=ssh
之类的,可以写成
alias scpr="rsync -P --rsh=ssh"
那么下次就可以直接使用
scpr home.tar 192.168.205.34:/home/home.tar
来拷贝数据了。
python-pip
安装python3.6
为python 3.6 新版没有发布到ubuntu的正式仓库中,咱们通过第3方仓库来做
sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:jonathonf/python-3.6
sudo apt-get update
sudo apt-get install python3.6
离线安装python3.6
# wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
# tar -xvf Python-3.6.2.tar.xz
# cd Python-3.6.2
# ./configure
# make
# make install
如果出现错误:
can’t decompress data; zlib not available
说明缺少依赖:zlib。
# 安装依赖zlib、zlib-devel
# 在ubuntu里,zlib叫zlib1g,相应的zlib-devel叫zlib1g-dev
$ sudo apt-get install zlib1g
$ sudo apt-get install zlib1g-dev
当安装完成后,使用它来验证主二进制文件的位置:
# which python3
# python3 -V
更换python链接版本
将
/etc/bin/python
链接转为python3.6,(原链接指向python2.7)
cd /user/bin
rm python # 删除原链接
ln -s python3.6m python # 建立新链接
安装pip和相关包
sudo apt-get install python-pip python-dev build-essential
sudo pip install --upgrade virtualenv
sudo pip install --upgrade pip # 升级pip后,pip不能再使用,可以通过下面的方法修复
gedit /usr/bin/pip
修改对应部分
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
如果不能使用就安装
sudo apt-get install python3-pip
pip更换镜像源提升下载速度
创建或打开/etc/pip.conf文件,设置如下内容更换为阿里云镜像
[global]
trusted-host = mirrors.aliyun.com
index-url = http://mirrors.aliyun.com/pypi/simple
或豆瓣云镜像
[global]
trusted-host=pypi.douban.com
index-url = http://pypi.douban.com/simple/
相关命令
pip list # 列出pip已安装的所有包
pip freeze or pip list # 列出已安装的包
pip freeze > <目录>/requirements.txt # 导出requirements.txt
pip install <包名> 或 pip install -r requirements.txt # 在线安装
pip install --no-index --find-links=D:\python27\packages pandas # 安装离线包
pip install --no-index --find-links=/home/backup # 直接安装整个文件夹
pip download \home\lp -r requirements.txt 将需求包或环境放在txt文件中,再通过pip下载离线包
pip download \home\lp pandas # 下载whl文件
其中requirements.txt格式如下:
alembic==0.8.6
bleach==1.4.3
click==6.6
dominate==2.2.1
Flask==0.11.1
Flask-Bootstrap==3.3.6.0
Flask-Login==0.3.2
Flask-Migrate==1.8.1
Flask-Moment==0.5.1
Flask-PageDown==0.2.1
如果已经通过pip安装了包,但是在py文件中import就是找不到,那就是说并没有把包的本地地址加载到环境变量中。
以matplot为例
1)确认有没有装这个包和对应的版本
p
i
p
l
i
s
t
∣
g
r
e
p
m
a
t
p
l
o
t
2
)
如
果
已
安
装
,
再
看
装
在
什
么
路
径
下
c
e
i
e
c
@
t
f
:
pip list | grep matplot 2)如果已安装,再看装在什么路径下 ceiec@tf:~
p
i
p
l
i
s
t
∣
g
r
e
p
m
a
t
p
l
o
t
2
)
如
果
已
安
装
,
再
看
装
在
什
么
路
径
下
c
e
i
e
c
@
t
f
:
pip install matplotlib
Requirement already satisfied: pyparsing in ./anaconda2/lib/python2.7/site-packages
3)把路径加入PYTHONPATH环境变量
例如,在~/.bashrc中最后一行加入
sudo vim ~/.bashrc
export PYTHONPATH=$PYTHONPATH:/home/luanpeng/.local/lib/python3.6/site-packages/
如果有多个路径,需要以冒号分隔。
然后,在bash中
source ~/.bashrc之后,python就能找到包了
shell
当我们有多个命令行时,我们需要写到sh文件中,然后调用sh命令来执行一批的命令行。
shell编程可以参考:https://blog.csdn.net/luanpeng825485697/article/details/80387819
这里写一个简单的demo可以参考
#!/bin/bash sh文件必须以这个开头,才能用命令行去解释执行
bash命令
变量声明直接使用
a=123
a=" 123" 有空格需要加引号
set查看所有环境和普通变量
unset a去除变量
echo "$bb" 打印变量,注意$变量名要放在""内才有效
echo '$' 原样打出
dd=$(ls) 将命令的执行结果赋值给变量
echo $(expr $var1 \* 3 + 1); 打印表达式是输出结果
echo "$bb"456 变量拼接
变量声明
declare -r var1 声明一个只读变量
declare -i number 声明一个整数
declare -a arr 声明一个数组
declare -a arr(1 2 4) 声明一个数组并初始化
unset array[1] # 删除数组中第一个元素
echo ${arr[0]} 输出变量
declare -f function_name 列出指定函数
declare -f 列出前面所有前面定义的函数
declare -x var3 声明一个环境变量
向shell文件传输变量
sh test.sh zhang 20
shell命令
shell文件读取传来的变量
$# 获取参数的个数
$* 获取全部参数
$@ 获取全部参数
name=$1 读取第一个变量
age=$2 读取第二个变量
echo "name is ${name} & age is ${age}"
for循环
for((i=1;i<=10;i++));
do
echo $(expr $i \* 3 + 1);
done
for i in $(seq 1 10)
for i in {1..10}
for i in `ls`;
for i in $* ;
java
安装 java jdk1.8
sudo apt-get install openjdk-8-jdk
其他方式安装
sudo add-apt-repository ppa:webupd8team/java # 添加软件源
sudo apt-get update # 更新软件源
sudo apt-get install oracle-java8-installer # 安装 jdk1.8,也可以同时安装jdk1.7和jdk1.6
sudo update-alternatives --config java
sudo update-alternatives --config javac # 查看 java 安装路径
java -version # 查看 java 安装后的版本
sudo update-java-alternatives -l # 查看所有 jdk 安装版本。因为可以同时安装多个jdk版本
通过-s参数可以方便的切换到其它的java版本
sudo update-java-alternatives -s java-7-oracle
当然也可以离线安装,安装包地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
修改环境变量
sudo vi ~/.bashrc
在最末尾添加如下配置:
#set Java environment
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
保存并退出,使用source命令使之生效
source ~/.bashrc
Maven
首先下载Maven的压缩包
下载
apache-maven-3.3.9.bin.tar.gz
1.2 解压到目标目录,我这里解压到了/home/luanpeng/soft/apache-maven-3.3.9
1.3 在/etc/profile下添加环境变量
建立Maven的HOME目录变量:
export M2_HOME=/home/luanpeng/soft/apache-maven-3.3.9
将Maven的bin目录添加到path路径
PATH=$M2_HOME/bin:$PATH
1.4 重新启动系统,或者在终端下输入
source /etc/profile
1.5 验证环境变量是否存在
echo $M2_HOME
echo $PATH
1.6 验证Maven配置是否成功
mvn -v
mysql
建议使用docker 安装 方便卸载和清理
sudo apt-get update
sudo apt-get install mysql-server # 安装mysql服务器,中间会提示输入密码
sudo mysql_secure_installation # 运行安全脚本
sudo systemctl mysql start # 启动mysql服务
systemctl status mysql.service # 查看服务状态
sudo apt-get install mysql-workbench # 安装可视化工具
第一次登录设置root密码
修改/etc/my.cnf文件,在mysqld配置项下面增加skip-grant-tables
重启mysql服务
service mysqld restart
无密码登陆mysql
$ su root
# mysql
mysql> use mysql;
mysql> update user set authentication_string=password("123456") where user="root";
mysql> flush privileges;
mysql> quit;
改好之后,再修改一下my.ini这个文件,把我们刚才加入的”skip-grant-tables”这行删除,保存退出再重启mysql就可以了。
4、进入mysql命令行:mysql -u root -p (root是账户,不是必须root) 输入新密码,回车即完成访问mysql;
执行到这里可以输入几个mysql命令来进行测试一下:
显示数据库: show databases;
使用数据库: use mysql;
显示表: show tables;
安装mysql客户端
安装可视化的客户端
sudo apt-get install mysql-workbench
然后输入mysql-workbench 就可以启动了, 启动后进入edit -> preferneces -> appearance-> configure
front for 选中简体中文.
下载汉化版的main_menu.xml文件, 替换/usr/share/mysql-workbench/data/main_menu.xml文件, 然后重启workbench再看。
下载地址:https://github.com/626626cdllp/linux/blob/master/mysql/main_menu.xml
postgresql
建议使用docker安装, 方便卸载和清理
习惯性升级apt-update:
sudo apt update
apt无脑安装postgresql:
sudo apt install postgresql
(安装以后psql会默认一个用户“postgres”,密码是随机的,不用担心,下面会教如何修改密码)
登录到postgresql里:
sudo -u postgres psql
你会看到“
postgres=#
” 这个就是代表已经进入pg数据库了,可以输入各种命令了
FAQ:一定要注意单引号还是双引号,postgres中每个sql语句都要有分号结尾!!
修改psql的密码:
ALTER USER postgres WITH PASSWORD 'xxxx';
(其中’xxxx’为用户’postgres’的密码,目前postgres的密码修改完毕)
退出数据库,修改数据库的配置文件 :
\q
sudo vim /etc/postgresql/9.3/main/postgresql.conf
需要修改的内容如下:
#listen_addresses = 'localhost' 改为 listen_addresses = '*' # 监听任何地址访问,修改连接权限
#password_encryption = on 改为 password_encryption = on # 启用密码验证
sudo vim /etc/postgresql/9.3/main/pg_hba.conf
需要修改的内容如下
host all all 0.0.0.0 0.0.0.0 md5
重启pgsql:
/etc/init.d/postgresql restart
干掉防火墙:
5432为postgreSQL默认的端口
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5432 -j ACCEPT
登录postgre SQL数据库:
psql -U postgres -h 127.0.0.1
创建新用户hotpot,但不给建数据库的权限 :
postgres=# create user "hotpot" with password '123456' nocreatedb;
用户名处是双引号
建立数据库,并指定所有者:
postgres=# create database "testdb" with owner = "hotpot";
基本命令
\password:设置密码
\q:退出
\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\l:列出所有数据库。
\c [database_name]:连接其他数据库。
\d:列出当前数据库的所有表格。
\d [table_name]:列出某一张表格的结构。
\du:列出所有用户。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。
postgres的 日志目录,
/var/lib/postgresql/9.6/main
如果不修改日志目录,则应该在
/var/log/postgresql
中
在目录/etc/postgresql/9.6/main/postgresql.conf
可以修改日志,重新定向目录为/var/lib/postgresql/9.6/main
log_destination = 'stderr'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_age = 1d
log_rotation_size = 100MB
log_min_messages = info