sudo: unable to resolve host
解决方案 :
查看 hostname
vim /ets/hosts
127.0.0.1 你的hostname
1.sudo vim /usr/share/applications/pycharm.desktop
在里边写内容
[Desktop Entry]
Type=Application
Name=Pycharm
GenericName=Pycharm3
Comment=Pycharm3:The Python IDE
Exec="/home/python06/pycharm-2018.2.2/bin/pycharm.sh" %f
Icon=/home/python06/pycharm-2018.2.2/bin/pycharm.png
Terminal=pycharm
Categories=Pycharm;
保存
给 pycharm.desktop 增加执行的权限
sudo chmod +x /usr/share/applications/pycharm.desktop
cp /usr/share/applications/pycharm.desktop /home/python06/Desktop
端口号 是可以修改的 自定义端口号 必须从 127 以后 最好是 1000以后 别人不好猜的
防火墙一定注意开放这个端口
sudo apt-get install ufw
sudo ufw enable
sudo ufw disable
sudo ufw status
如果刚刚开始防火墙 先设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
开启或者 禁用指定的链接
sudo ufw allow http
sudo ufw allow https
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 22
允许特定范围的端口号
sudo ufw allow 5000:6000/tcp 开放 5000-6000的端口号
sudo ufw deny from IP地址 拒绝该ip访问
sudo ufw allow 10.11.53.0/24 只允许 10.11.53.1~10.11.53.254 访问
删除规则
sudo ufw status numbered
sudo ufw delete 行号
不用编译
sudo apt-get install nginx
安装 所需的依赖包
sudo apt-get update
sudo apt-get install gcc automake autoconf libtool make build-essential libpcre3-dev
通过winscp 把软件放到指定的目录
或者 wget -c http://nginx.org/download/nginx-1.8.1.tar.gz
列表:
pcre
openssl
zlib
nginx
分别解压四个软件
sudo tar -zxvf nginx-1.9.9.tar.gz
sudo tar -zxvf pcre-8.42.tar.gz
sudo tar -zxvf zlib-1.2.11.tar.gz
sudo tar -zxvf openssl-1.0.2h.tar.gz
进入 nginx-1.9.9
1. ./configure 进行配置
--prefix=路径 你想把软件安装在什么位置
--with-pcre 依赖于 pcre 模块
--enable 表示启用什么功能
--disable 禁用什么功能
2. 编译 sudo make
3. 安装 sudo make install
cd /home/need888/good/nginx-1.9.9
会发现有一个 configure
./configure
--prefix=/usr/local/nginx #指定安装在哪里
--pid-path=/usr/local/nginx/logs/nginx.pid #nginx 进程文件存在哪里
--error-log-path=/usr/local/nginx/logs/error.log #错误日志存在哪里
--http-log-path=/usr/local/nginx/logs/access.log # nginx 访问日志存在哪里
--with-http_ssl_module 启用 http安全访问模块
--with-pcre=/home/need888/good/pcre-8.42 # 依赖于pcre 模块
--with-zlib=/home/need888/good/zlib-1.2.11 #依赖于 zlib模块
--with-openssl=/home/need888/good/openssl-1.0.2h #依赖于 openssl 模块
sudo ./configure --prefix=/usr/local/nginx --pid-path=/usr/local/nginx/logs/nginx.pid --error-log-path=/usr/local/nginx/logs/error.log --http-log-path=/usr/local/nginx/logs/access.log --with-http_ssl_module --with-pcre=/home/need888/good/pcre-8.42 --with-zlib=/home/need888/good/zlib-1.2.11 --with-openssl=/home/need888/good/openssl-1.0.2h
编译过程中 出现 warning 不用管
直到出现 error
sudo make && sudo make install
想办法实现 service nginx start|stop|restart
sudo vim /etc/init.d/nginx 这个文件本身不存在 我们新创建 复制以下内容
#!/bin/sh
### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
# Include nginx defaults if available
if [ -r /etc/default/nginx ]; then
. /etc/default/nginx
fi
STOP_SCHEDULE="${STOP_SCHEDULE:-QUIT/5/TERM/5/KILL/5}"
test -x $DAEMON || exit 0
. /lib/init/vars.sh
. /lib/lsb/init-functions
# Try to extract nginx pidfile
PID=$(cat /usr/local/nginx/conf/nginx.conf | grep -Ev '^\s*#' | awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)
if [ -z "$PID" ]; then
PID=/run/nginx.pid
fi
if [ -n "$ULIMIT" ]; then
# Set ulimit if it is set in /etc/default/nginx
ulimit $ULIMIT
fi
start_nginx() {
# Start the daemon/service
#
# Returns:
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --quiet --pidfile $PID --exec $DAEMON -- \
$DAEMON_OPTS 2>/dev/null \
|| return 2
}
test_config() {
# Test the nginx configuration
$DAEMON -t $DAEMON_OPTS >/dev/null 2>&1
}
stop_nginx() {
# Stops the daemon/service
#
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=$STOP_SCHEDULE --pidfile $PID --name $NAME
RETVAL="$?"
sleep 1
return "$RETVAL"
}
reload_nginx() {
# Function that sends a SIGHUP to the daemon/service
start-stop-daemon --stop --signal HUP --quiet --pidfile $PID --name $NAME
return 0
}
rotate_logs() {
# Rotate log files
start-stop-daemon --stop --signal USR1 --quiet --pidfile $PID --name $NAME
return 0
}
upgrade_nginx() {
# Online upgrade nginx executable
# http://nginx.org/en/docs/control.html
#
# Return
# 0 if nginx has been successfully upgraded
# 1 if nginx is not running
# 2 if the pid files were not created on time
# 3 if the old master could not be killed
if start-stop-daemon --stop --signal USR2 --quiet --pidfile $PID --name $NAME; then
# Wait for both old and new master to write their pid file
while [ ! -s "${PID}.oldbin" ] || [ ! -s "${PID}" ]; do
cnt=`expr $cnt + 1`
if [ $cnt -gt 10 ]; then
return 2
fi
sleep 1
done
# Everything is ready, gracefully stop the old master
if start-stop-daemon --stop --signal QUIT --quiet --pidfile "${PID}.oldbin" --name $NAME; then
return 0
else
return 3
fi
else
return 1
fi
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
start_nginx
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
stop_nginx
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
# Check configuration before stopping nginx
if ! test_config; then
log_end_msg 1 # Configuration error
exit $?
fi
stop_nginx
case "$?" in
0|1)
start_nginx
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC configuration" "$NAME"
# Check configuration before stopping nginx
#
# This is not entirely correct since the on-disk nginx binary
# may differ from the in-memory one, but that's not common.
# We prefer to check the configuration and return an error
# to the administrator.
if ! test_config; then
log_end_msg 1 # Configuration error
exit $?
fi
reload_nginx
log_end_msg $?
;;
configtest|testconfig)
log_daemon_msg "Testing $DESC configuration"
test_config
log_end_msg $?
;;
status)
status_of_proc -p $PID "$DAEMON" "$NAME" && exit 0 || exit $?
;;
upgrade)
log_daemon_msg "Upgrading binary" "$NAME"
upgrade_nginx
log_end_msg $?
;;
rotate)
log_daemon_msg "Re-opening $DESC log files" "$NAME"
rotate_logs
log_end_msg $?
;;
*)
echo "Usage: $NAME {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}" >&2
exit 3
;;
esac
chmod +x /etc/init.d/nginx
注册服务
cd /etc/init.d/
sudo update-rc.d nginx defaults
接下来 大家就可以使用 service nginx start|stop|restart
ssh 跟 scp 一样 走 22端口
ssh 用户名@ip地址
默认输入密码
推出 exit
IP地址 | 角色 |
---|---|
10.11.53.66 | |
10.11.53.195 |
1.先到 66上 进行操作
root@python06-virtual-machine:~/.ssh# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_ssh_rsa
#默认/root/.ssh/id_rsa 为了防止覆盖前面的 最好新起名字 英文状态下输入
Enter passphrase (empty for no passphrase): 回车
Enter same passphrase again: 回车
Your identification has been saved in /root/.ssh/id_ssh_rsa.
Your public key has been saved in /root/.ssh/id_ssh_rsa.pub.
The key fingerprint is:
SHA256:qOivnhwxYU0XIacCEmHs/H7Je/Qw2H/JpL//iaWfem8 root@python06-virtual-machine
The key's randomart image is:
su root
cd /root/.ssh
会发现id_ssh_rsa id_ssh_rsa.pub 密钥对
cat id_ssh_rsa.pub 复制内容
2.到195上进行操作
su root
mkdir -p /root/.ssh
cd /root/.ssh/
vim authorized_keys
粘贴过来刚才的内容
chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh
到 66上 测试
ssh 195用户名@195ip地址
scp 文件 远程用户名@ip地址:路径 把本地复制到远程 上传
比如scp 1.txt tuizz@10.11.53.195:/home/tuizz
scp -r tuizz@10.11.53.195:/home/tuizz/test /home/python06 把远程的复制到本地 下载
cp -r 复制目录的意思
-a 以递归的方式传输文件
-v 打印传输速率文件数量
--delete 为了保证 两个文件夹内容一样 ab 先把b文件夹中 a没有的内容删除 然后 把a的内容复制过来
--exclude 排除掉 指定的文件
--progress 显示传输过程
-p 保持文件的权限
-l 保持软连接
-o保持所属用户
-g 保持所属的组
-t 保持文件的修改时间
-u 如果说目标文件 更新 那么该文件就被忽略
本地同步
rsync -av one/ two/ 将one目录下面的文件 复制到 two目录下
rsync -av one two 将这个one目录复制到 two 目录下面
rsync -av --exclude=*.tar.* one/ two/ 将one目录下面的 内容复制到two 目录下 排除掉*.tar.*
rsync -av --exclude=public/* --progress one/ two/ 只复制one 目录下的public 文件夹 里边的内容被忽略掉
rsync -avtogl --delete one/ two/
先把two目录中 跟one目录不同的内容删除掉 然后再复制
rsync -auv one/ two/
如果one目录下面的内容 不如two目录下面的新 谁最后改的就是新的
主机之间 同步
rsync -auv --delete --progress --exclude=public/* one/ [email protected]:/home/python06/test
这个冒号别忘了
crontab -e -u need888
30 3 * * * /usr/bin/rsync -auvplog --delete --progress --exclude=public/* one/ [email protected]:/home/python06/test
每天的凌晨三点半 执行 数据同步
是一个全局的python版本管理工具 能够进行 全局的python版本切换 使用pyenv 之后 可以再 服务器上安装多个python版本
安装 git
sudo apt-get install git curl
sudo rm -rf ~/.pyenv
1.curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
会在 /home/need888/ 有一个 .pyenv的隐藏文件夹
2.修改 vim ~/.bashrc
最后一行 写入
export PATH="~/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
3.source ~/.bashrc #让配置文件立即生效的意思
4. pyenv update 更新pyenv 看到 Already up-to-date. 说明更新完成
pyenv install --list # 查看 pyenv 支持 哪些python版本
pyenv versions #查看 pyenv 可以管理哪些python版本
在安装 pyenv 之前 系统已经默认安装了 2.7 和3.5 这个时候 pyenv 它没有权利去管理这两个版本
解决方案 先卸载掉系统自带的python 版本
用pyenv 安装python
1.安装依赖包
sudo apt-get install gcc libc6-dev make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm
2.下载python Python-2.7.9.tar.xz 和 Python-3.6.4.tar.xz 软件包
3.cd ~/.pyenv
mkdir cache
将上面两个软件包 放到 cache目录下
4. pyenv install 2.7.9 -v v表示显示安装过程
pyenv install 3.6.4 -v
5.设置默认版本
pyenv global 2.7.9
python 测试以下 看看版本是否是 3.6.4
pyenv global 3.6.4
6.pyenv versions
python06@python06-virtual-machine:~/.pyenv/versions$ pyenv versions
system
2.7.9
* 3.6.4 (set by /home/python06/.pyenv/version) * 在哪 表示 当前默认版本是 谁
7.pyenv rehash #更新 pyenv的数据库
京东 主站 python2.0 django 1.0 京东金融 python2.0 django 2.0 想办法让这两个 共存
这个时候 可以 pyenv + virtualenv 结合来用
pip 是python自带的包管理工具 类似于360的软件管家
pip install virtualenv
如果提示版本不匹配 这个时候 可以使用
sudo pip install --upgrade virtualenv
创建项目目录
sudo mkdir -p /home/python06/myproject/jd
cd /home/python06/myproject/jd
pyenv virtualenv 3.6.4 env36 #创建python3.6.4 版本的虚拟环境
pyenv virtualenv 3.6.4 env88 #同样创建一个3.6.4 版本的虚拟环境
pyenv virtualenv 2.7.9 env27 ##创建python2.7.9 版本的虚拟环境
pyenv activate env36 #进入虚拟环境 env36 想使用django1.0 进入这个虚拟环境
pyenv deactivate env36
pyenv activate env88 #进入虚拟环境 env88 想使用django2.0 进入这个虚拟环境
pyenv deactivate env88
pyenv activate env27 #进入虚拟环境 env27
pyenv deactivate env27
pip 是python自带的包管理工具 默认 pip是到 官网去下载 但是 问题很慢
解决办法是 pip 到国内应用商店下载
pip install psm
pip install --upgrade pip
psm ls #列出国内可以使用的软件商店
pypi https://pypi.python.org/simple/
douban http://pypi.douban.com/simple/
aliyun http://mirrors.aliyun.com/pypi/simple/
psm use douban #选择豆瓣 源
psm show #查看当前应用哪个源
Current source is douban