全栈工程师开发手册 (作者:栾鹏)
架构系列文章
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 AAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5R
登录git账户,打开git账户settings,在SSH key中添加上面查到的本地公钥
克隆分支到本地仓库
git clone -b 分知名 git@网址/仓库名例如:git clone -b master git@:626626cdllp/sklearn.git # 克隆到当前目录
克隆远程仓库到本地
git clone git@网址/仓库名
这个样可以在git仓库的主页看到
例如:git@: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.25ssh 用户名@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 wwwHostName Port 22User rootIdentityFile ~/.ssh/id_rsa.pubIdentitiesOnly yesHost bbsHostName 115.28.45.104User anotheruserPubkeyAuthentication 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-propertiessudo add-apt-repository ppa:jonathonf/python-3.6sudo apt-get updatesudo apt-get install python3.6
离线安装python3.6
# wget /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/binrm python # 删除原链接ln -s python3.6m python # 建立新链接
安装pip和相关包
sudo apt-get install python-pip python-dev build-essential sudo pip install --upgrade virtualenvsudo 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 = index-url = /pypi/simple或豆瓣云镜像[global]trusted-host=index-url = /simple/
相关命令
pip list # 列出pip已安装的所有包pip freeze or pip list# 列出已安装的包pip freeze > <目录>/requirements.txt # 导出requirements.txtpip 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.6bleach==1.4.3click==6.6dominate==2.2.1Flask==0.11.1Flask-Bootstrap==3.3.6.0Flask-Login==0.3.2Flask-Migrate==1.8.1Flask-Moment==0.5.1Flask-PageDown==0.2.1
如果已经通过pip安装了包,但是在py文件中import就是找不到,那就是说并没有把包的本地地址加载到环境变量中。
以matplot为例
1)确认有没有装这个包和对应的版本
piplist∣grepmatplot2)如果已安装,再看装在什么路径下ceiec@tf:pip list | grep matplot 2)如果已安装,再看装在什么路径下 ceiec@tf:~piplist∣grepmatplot2)如果已安装,再看装在什么路径下ceiec@tf: 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编程可以参考:/luanpeng825485697/article/details/80387819
这里写一个简单的demo可以参考
#!/bin/bash sh文件必须以这个开头,才能用命令行去解释执行bash命令变量声明直接使用a=123a=" 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);donefor 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.6sudo update-alternatives --config javasudo 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
当然也可以离线安装,安装包地址:/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
修改环境变量
sudo vi ~/.bashrc
在最末尾添加如下配置:
#set Java environmentexport JAVA_HOME=/usr/lib/jvm/java-8-oracleexport JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport 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_HOMEecho $PATH
1.6 验证Maven配置是否成功
mvn -v
mysql
建议使用docker 安装 方便卸载和清理
sudo apt-get updatesudo 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/f文件,在mysqld配置项下面增加skip-grant-tables
重启mysql服务
service mysqld restart
无密码登陆mysql
$ su root# mysqlmysql> 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再看。
下载地址:/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 = onlog_directory = 'pg_log'log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'log_rotation_age = 1dlog_rotation_size = 100MBlog_min_messages = info