2021年8月

1 客户端生成公私钥

注意,如果已经有了公钥和私钥不需要重复生成
使用如下命令,在本地客户端生成公私钥

ssh-keygen

如何没有特别需要,一路回车即可。
上面这个命令会在用户目录的.ssh文件夹下创建公私钥
使用命令cd ~/.ssh进入相应目录,可以看到公钥和私钥。
id_rsa (私钥)
id_rsa.pub (公钥)

2 上传公钥到服务器

以我们实验室的服务器为例,用户名为wlg,ip为192.168.3.154

ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

上面这条命令是写到服务器上的ssh目录下去了
使用如下命令:

cd ~/.ssh
vim authorized_keys

可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。

3 设置直接使用主机名登陆

vim ~/.ssh/config

根据实际情况修改以下内容

Host your hostname
  HostName your ip
  User your username
  ProxyCommand nc -X connect -x proxyIP:port %h %p

参考资料

https://blog.csdn.net/jeikerxiao/article/details/84105529

1、mysql只能使用sudo mysql免密登陆/如何关闭sudo mysql免密登陆?

MariaDB 10.31关闭免密登陆方法:
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password;SET PASSWORD = PASSWORD('foo');
然后flush一下即可。

2、php不生效。

1、检查是不是配置文件夹sites-enable还有其他配置文件影响。
2、在Ubuntu下安装的php-fpm是7.4版本的,端口不是9000,而要这么设置:(见安装wordpress的教程)

3、wordpress不能上传文件、不能安装插件,弹出ftp来。

首先确认wordpress的文件夹改成了777
然后在配置文件里加这些:
修改wp-config.php文件

define("FS_METHOD", "direct");

define("FS_CHMOD_DIR", 0777);

define("FS_CHMOD_FILE", 0777);

4、typecho进后台显示404

一般的出现这种情况时,nginx.conf里的的location设置都是类似这样

location ~ .*\.php$

要支持pathinfo,要改成

location ~ .*\.php(\/.*)*$

5、typecho点击文章标题无法进入文章,地址栏变了,但不会进入文章

在location里加入如下一行试试

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

1 背景

Ubuntu 20.04是目前较常用的稳定版本,也是很多云服务器厂商提供的最新系统,很多人用来搭建服务器,以支持自己的个人网站。常用的博客系统例如wordpress、typecho都需要nginx、mysql、php环境。
然而,网上的LNMP教程极其老旧,有以下问题:

  • 大部分都是基于centos系统的教程,与ubuntu情况有出入。
  • 使用的Ubuntu版本很旧,大部分都是18.04甚至还有在用16.04的,已经过时。有的明明是20.04,但是还在用apt-get,动摇对文章可行性的信心。
  • 文章中提出的操作不可行,或者跳步,对初学者不友好。
  • 排版混乱,可读性差,让人失去阅读兴趣。

本文旨在解决上述问题,提供一个在Ubuntu 20.04下,完全可行的安装搭建LNMP的教程。
涉及版本:
Ubuntu 20.04 LTS
nginx 1.18
MariaDB 10.31
PHP-FPM7.4等
注意,本文是在普通用户具有sudo权限的情况下适用的!

2 安装nginx

2.1 更新可用软件包列表

sudo apt install

2.2 安装nginx

sudo apt install nginx

2.3 编辑nginx配置
输入命令cd /etc/nginx/sites-enable进入目录,然后sudo rm -f default删除里面的默认配置。
命令sudo vim test新建配置文件,然后输入以下内容:

server {
    listen       80;
    root   /var/www/html;
    server_name  localhost;
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
    #
    location / {
        index index.php index.html index.htm;
    }
    #error_page  404              /404.html;
    #redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/html;
    }
    #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

2.4 启动、设置开机启动nginx

sudo systemctl start nginx
sudo systemctl enable nginx

2.5 在本地浏览器中访问以下地址,查看 Nginx 服务是否正常运行。

http://云服务器实例的公网 IP

如果显示如下内容,说明配置成功。
fdc40877928729679d392eb304a3f12c.png

3 安装数据库

3.1 安装mariadb数据库(也就是可以看成mysql的社区版本)。

sudo apt install mariadb-server mariadb-client

3.2 执行以下命令,启动 MariaDB 服务。

systemctl start mariadb

3.3 执行以下命令,设置 MariaDB 为开机自启动。

systemctl enable mariadb

3.4 执行以下命令,验证 MariaDB 是否安装成功。

sudo mysql

3.5 执行以下命令,退出 MariaDB。
q

4 安装PHP

4.1 安装php

sudo apt install php7.4-cli php7.4-common php7.4-mysqlnd php7.4-fpm

4.2 *观察安装的版本,如果是7.4,则执行以下命令,启动 PHP-FPM 服务。否则根据版本自行调整。从此往下均只支持7.4,其他版本未做验证,特此说明!

systemctl start php7.4-fpm

执行以下命令,设置 PHP-FPM 服务为开机自启动。

systemctl enable php7.4-fpm

4.3 修改nginx配置以支持php
输入

sudo vim /etc/nginx/sites-enable/test

按下i进入编辑模式,然后把里面fastcgi_pass那一行改成:

fastcgi_pass   unix:/var/run/php/php7.4-fpm.sock;

然后按下esc,然后按下:,然后输入wq,然后回车保存退出。
注意:本小节仅支持php-fpm 7.4版本,其他版本未做验证,特此说明!!!!

4.4 验证环境配置
如果/var/www/html文件夹下有其他文件,先用rm命令删掉。
然后执行以下命令,创建测试文件。

sudo vim /var/www/html/index.php

然后,按下i进入编辑模式,输入<?php phpinfo(); ?>,然后按下esc,然后按下:,然后输入wq,然后回车保存退出。
执行以下命令,重启 Nginx 服务。

sudo systemctl restart nginx

然后在本地浏览器中访问如下地址,查看环境配置是否成功。
http://云服务器实例的公网 IP
显示结果如下, 则说明环境配置成功。注意图片仅供示例,具体版本以实际为准!
640812413941a61efe29d7faa546ad80.png
注意:本小节仅支持php-fpm 7.4版本,其他版本未做验证,特此说明!!!!

一、所需工具

Ubuntu系统(版本16.04及以上,例如18.04)

二、说明

本教程采用pip安装TensorFlow,而且采用谷歌推荐的Create a virtual environment (recommended)方法安装,使得包安装与系统隔离,防止产生混乱

三、安装步骤

1、首先检查是否满足了所需的环境,输入下面三个命令:

python3 --version
pip3 --version
virtualenv --version

2 、如果版本号正确输出,表示都安好了,直接看第4步,否则继续往下看第3步。
3、如果没安好,使用下面的命令将python3、pip3和virtualenv安好。

sudo apt update
sudo apt install python3-dev python3-pip
sudo pip3 install -U virtualenv # system-wide install

4、创建虚拟环境。

virtualenv --system-site-packages -p python3 ./venv

注意, ./venv表示的是你的虚拟环境的位置,请改成你想创建的位置。(这里我们创建在当前目录的venv文件夹下)
5、激活虚拟环境。

source ./venv/bin/activate

如果你前面创建虚拟环境时改了路径,这里也要改成:你的虚拟环境的路径/bin/activate
此时,你的shell前面都会以(venv)开头了。
6、更新pip。注意,由于我们是在虚拟环境里操作,这些操作都不会影响系统设置,都是在虚拟环境里进行的。

pip install --upgrade pip
pip list # show packages installed within the virtual environment

7、安装TensorFlow。以CPU版本为例,使用下面的命令。

pip install --upgrade tensorflow

如果你想安装其他版本,根据下面的说明选一个就行了:

Choose one of the following TensorFlow packages to install from PyPI:
tensorflow —Latest stable release for CPU-only (recommended for beginners)
tensorflow-gpu —Latest stable release with GPU support (Ubuntu and Windows)
tf-nightly —Preview build (unstable). Ubuntu and Windows include GPU support.

8、安装完成后,测试安装结果。输入下面的命令:

python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

如果输出的最后一行是tf.tensor什么什么,恭喜你安装完成!
9、使用下面的命令退出虚拟环境。

deactivate

注意,因为我们是在虚拟环境里安装的TensorFlow,所以,你必须在使用TensorFlow前进入虚拟环境,在用完TensorFlow后再退出虚拟环境,否则TensorFlow是无法使用的。所以请仔细阅读下面的文字

四、注意事项

因为我们是在虚拟环境里安装的TensorFlow,所以,你必须在使用TensorFlow前进入虚拟环境,在用完TensorFlow后再退出虚拟环境,否则TensorFlow是无法使用的。
进入虚拟环境的命令:

source ./venv/bin/activate

如果你前面创建虚拟环境时改了路径,这里也要改成:你的虚拟环境的路径/bin/activate
进入虚拟环境后会,shell会变成类似开头
退出虚拟环境的命令:

deactivate

当我们得到一个概率分布,如何根据这个概率分布抽样是一个常见的问题。这篇文章将介绍alias method(别名采样),这种算法的运行时间复杂度为O(1)的,当然提前需要复杂度为O(n)的预处理。下面我将通过一个例子介绍别名采样算法。

问题背景

  假设一共存在A,B,C,D四种情况,它们的概率分别为 0.3,0.1,0.1,0.5。如何实现按概率抽样呢?
  比较常用的一种方法是生成一个数组:1,2,2,3,3,3,4,4,4,4,其中1对应A,2对应B,以此类推。然后随机在数组中抽取一个即可。这种方法简单易实现,但是这是仅仅有4种情况时。当情况变多,这种方法就会占用很大的空间了,所以并不适用于大规模的通用情况。
  另外,可以根据它们的概率密度分布生成累积分布:0.3,0.4,0.5,1。然后生成一个0-1之间的随机数,看它落在哪个区间。然而,这时需要与临界点进行比较。我们知道,插入有序数列最好的时间复杂度为O(logn),所以这种方法复杂度较大。
  我们这篇文章提到的alias method可以实现以运行复杂度为O(1)的方式抽样。当然它需要预处理,预处理的时间复杂度为O(n),但是重复跑的时候,运行时间复杂度低才是重要的。

别名采样算法

  下面介绍alias method的处理过程。
  我们知道等概率分布抽样的时间复杂度为O(1),考虑一种情况,如果A,B,C,D概率分布均为0.25,那我们随机生成1,2,3,4,抽中哪个就是哪个,复杂度自然为O(1),这是等概率分布抽样的情况。
  我们知道二项不等概率分布抽样的时间复杂度也为O(1),如果只有两个变量,比如A,B概率分布为 0.2,0.8.那我们用累积分布的方法,小于0.2就是A, 大于就是B,只需比较一次,所以复杂度也是O(1),这是二项分布抽样的情况。
  alias method就是把这两种方法结合起来。
  仍然以本文一开始提出的例子为例。原来的概率分布如下,我们用绿色代表A,蓝色代表B,紫色代表C,橙色代表D:

首先我们把原概率分布乘以N(为后面的拼接做准备),这里是N=4。得到:1.2,0.4,0.4,2.0,如图所示。

  我们把它拼成等概率分布和二项不等概率分布:

  注意拼接的过程中,每一列最多有两种情况,这样才能让每一列都符合二项分布。
  做完以上处理后,我们就可以开始抽样了。首先我们以等概率分布抽一列,然后生成一个0-1之间的随机数。
  举例来说,例如我们首先抽中了第四列(概率为0.25)。然后在第四列中进行二项分布抽样,如果小于0.8,绿色,代表A,反之,就是橙色,代表D。这两个操作的复杂度均为O(1),故总时间复杂度也为O(1)。
  那么这样抽样是正确的吗?换句话说,在原概率分布中抽到A的概率是0.3,那使用alias方法抽到的概率还是0.3吗?
  我们仍然以抽取A情况为例。原来抽中a的概率为0.3。运用alias method方法后,抽中a的概率为抽中第一列+抽中第四列且随机数小于0.2,算起来为0.25+ 0.25 * 0.2) = 0.3,完全一样。

参考文献

1, http://blog.csdn.net/sky_zhe/article/details/10051967
2, https://www.cnblogs.com/zqiguoshang/p/5885455.html