Sherman Morrison 公式
在线性代数中,Sherman-Morrison 公式以 Jack Sherman 和 Winifred J. Morrison 命名,用于计算 $A + uv^T$ 的逆,其中 $A$ 为可逆方阵,$u, v$ 为列向量,$uv^T$ 为向量外积(outer product)。Sherman-Morrison 公式是 Woodbury 公式的一类特殊情况。
问题陈述定理1(Sherman-Morrison formula) 假设 $A \in \mathbb{R}^{n\times n}$ 是一个可逆方阵,并且 $u, v\in \mathbb{R}^n$ 是列向量。那么 $A + uv^T$ 是可逆的当且仅当 $1 + v^T A^{-1} u \neq 0$. 当 $A + uv^T$ 可逆时,满足如下等式:
$$(A + uv^T)^{-1} = A^{-1} - \frac{A^{-1}uv^TA^{-1}}{1+v^TA^{-1}u} \tag{i}.$$
这里,$uv^T$ 表示两个向量 $u,v$ 的外积。
外积(outer product)说明:假设
$ ...
linux 上查询 ip 归属地
公网 ip 地址唯一标识了服务器在互联网上的地址。那如何知道自己服务器的公网 ip 地址,又如何知道某一个 ip 地址的归属地呢?本篇介绍一个命令来查询上面的信息。所有命令以普通用户运行。
查询自己电脑的公网 ip123456# linux or Mac curl cip.cc# Windowstelnet cip.ccftp cip.cc
结果类似下面这样,ip 地址不同输出结果不同
12345678IP : 43.188.123.xxx地址 : 日本 日本数据二 : 日本数据三 : 中国 | 腾讯URL : http://www.cip.cc/43.188.123.xxx
如果只想知道自己的电脑的 ip 地址,不想输出其他信息
123456# linux or Mac curl ip.cip.cc# Windowstelnet ip.cip.ccftp ip.cip.cc
结果只有 ip 地址。
查询 ip 地址归属地该命令只需要在上面的命令中增加 ip 地址即可,方法如下
123456# linux or Mac curl cip.cc/43.188.123.xx ...
使用 sshfs 挂载远程文件系统
在两台服务器间借助 SSH 连接使用 SFTP 或 SCP 可以互相传输文件,但这确不能共享整个文件系统。当我们想要像访问本地服务器的文件系统一样访问远程服务器的文件系统时,可以使用 sshfs 工具,它通过 SSH 文件传输协议 (SFTP) 挂载远程的文件系统。本篇以 ubuntu 系统为例,所有代码以普通用户运行,部分代码需要 sudo 权限。
安装12sudo apt updatesudo apt install sshfs
挂载远程服务器文件系统假设本地的用户 jinzhongxu 能够通过 SSH 连接到远程服务器 tencent.test.com
123456# 创建挂载点sudo mkdir /mnt/tencentsudo chown -R jinzhongxu:jinzhongxu /mnt/tencent# 挂载远程文件系统到挂载点sshfs jinzhongxu@tencent.test.com:/home/jinzhongxu /mnt/tencent -o allow_other -o reconnect
注意,挂载时因为指定了 reconnect ...
apt 和 apt-get 命令的区别
Debian 作为 Ubuntu、Linux Mint 和 elementary OS 等 Linux 操作系统的母板,Debian 类使用一套名为 Advanced Packaging Tool(APT,请不要把它与 apt 命令混淆)的工具来管理软件包。
最常用的 Debian 类包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令当中。apt 命令的引入就是为了解决命令过于分散的问题,它包括了 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,而且 apt 更加结构化,并为用户提供了管理软件包所需的必要选项。简单来说就是 apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。
apt 和 apt-get 的区别虽然 apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get ...
在 debian 服务器上安装 ftp
FTP(File Transfer Protocol,文件传输协议)是一种标准的网络协议,用于在远程网络之间传输文件。注意区分 SFTP,其是 SSH 文件传输协议 (SSH File Transfer Protocol),该协议具有安全性。SCP 代表安全复制协议,它对Linux 系统之间的文件传输进行加密。而 FTP 不具有安全性,是明文传输,但可以搭配 SSL/TLS,实现 FTPS 进行安全传输。本篇以 Debian 10 为例,所有命令以普通用户运行,部分命令可能需要 sudo 权限。
安装12sudo apt updatesudo apt install vsftpd
安装后,系统默认会配置自启动,查看服务是否启动
1sudo systemctl status vsftpd
配置申请证书安装后,最重要的就是配置,首先配置 SSL,申请证书请查看我的另一篇:搭配 nginx、cloudflare 和 acme.sh 让网站走 https 协议
这里给出一种自签证书的方法,可以自定义证书有效期。假设,我们要创建一个有效期为 10 年的 2048 为私钥和自签名 ...
bitnami redmine 的安装
Redmine 是一个网页界面的项目管理与缺陷跟踪管理系统的自由及开放源代码软件工具,可以同时处理多个项目。它集成了项目管理所需的各项功能,包括日历、燃尽图和甘特图以协助可视化表现项目与时间限制,问题跟踪和版本控制。本篇介绍如何安装 Redmine,以 Bitnami Redmine + Debian 10 为例,所有命令以普通用户 jinzhongxu 运行,但需要 sudo 权限。
下载安装 Redmine这里提供两个版本,均是 bitnami 官网版本:
bitnami-redmine-3.4.6-5-linux-x64-installer.run
bitnami-redmine-4.2.1-3-linux-x64-installer.run
本篇以 4.2.1-3 为例,并使用 nginx 作为反向代理。需要注意的是,需要开放个别端口:
3690:svnserve
3306:mysqld
8443:httpd
8080:redmine
80,443:nginx
1234567891011121314151617181920212223242526272829# 版本 ...
debian 安装 mysql 数据库
MySQL 数据库一个关系数据库管理系统 (Relational Database Management System, RDBMS) ,最初是有瑞典的MySQL AB 公司开发,2008 年该公司被昇阳微系统收购。2009 年,甲骨文公司收购昇阳微系统公司,MySQL 就成为了 Oracle 产品。其性能高、成本低、可靠性好,一度成为最流行的开源数据库。非常流行的开源软件组合 LAMP 中的 “M” 指的就是 MySQL。MySQL 分为免费的社区版与收费的标准版、企业版等。甲骨文公司收购 MySQL 后,大幅调涨 MySQL 商业版的售价,自由软体社群们对于 Oracle 是否还会持续支援 MySQL 社区版( MySQL 之中唯一的免费版本)有所隐忧。MySQL的创始人麦克尔·维德纽斯以 MySQL 为基础,成立分支计划 MariaDB。如果只是安装并使用 MySQL,不需要 Oracle 的技术支持,或一些企业版工具或插件,或修改 MySQL 源代码并作为闭源的软件等等情形。可以继续使用社区版。本篇介绍如何在 Debian 系统上安装 MySQL,所有命令以普通用户运行,但需要 ...
python 遍历目录获取所有文件
利用 Python 进行文件夹遍历有很多种方法,本篇介绍常用的两种方法,这些方法是内建模块中的方法,速度较快。
os.walk 和 os.scandir两种方法都是在 os 库实现的,分别是 os.walk,os.scandir,其中后者效率更高些。
1import os
1234567def walk(dirs): files_all = [] for root, d, files in os.walk(dirs): for file in files: file_path = os.path.join(root, file) files_all.append(file_path) return files_all
12345678def scan(dirs): files_all = [] for item in os.scandir(dirs): if item.is_file(): files_all.append(item.path) ...
nvidia driver 出现 library version mismatch、couldn't communicate with the NVIDIA driver.
深度学习模型往往需要 GPU 加速计算,因此,需要为服务器安装 NVIDIA 驱动。但,因为系统(如 Ubuntu)有自动更新往往会导致 NVIDIA 驱动版本和库版本不匹配,导致 nvidia-smi 命令无法使用。本篇以 Ubuntu 系统为例,所有命令以普通用户运行,有些命令需要 sudo 权限。
问题描述当在 Ubuntu 系统上安装了显卡驱动后,因为 Ubuntu 上的命令 /usr/bin/unattended-upgrade 会在后台自动更新系统,如安全相关的补丁内容等。有时候,会自动更新 NVIDIA 的驱动(查看自动更新历史:cat /var/log/apt/history.log)。这会导致系统运行中的 NVIDIA 驱动版本(查看方法:cat /proc/driver/nvidia/version)与安装的驱动版本(查看方法:sudo dpkg -l | grep nvidia)不一致。最终导致,查看显卡信息的命令:nvidia-smi 无法使用,报如下错误:
12$ nvidia-smiFailed to initialize NVML: Driver/li ...
conda 更新 python 版本
当使用 Miniconda 安装 Python 后,除了使用虚拟环境外,有时,我们还需要更新主环境中的 Python 版本,本篇介绍如何更新主环境中的 Python 版本到最新。
当主环境版本不需要大版本更新时当主环境的 Python 版本不需要大版本更新时,如最初安装的 Python 版本是 3.9.5,现在 Python 官网已经发布了 3.9.13,此时,我们更新小版本到 Anaconda 中的 Python3.9 到最新。
12345678# 首先更新 conda 到最新,测试中如果当前处在 conda activate 状态下,需要更新 conda 两次conda update conda# 如果遇到更新失败,可尝试强制更新conda update --force conda# 然后更新 python 到 Anaconda 中的最新。注意,一般 Anaconda 中维护的 python 版本会低于官网最新版conda install python=3.9
当主环境版本需要大版本更新时当主环境的 Python 版本需要大版本更新,如最初安装的 Python 版本是 3. ...
远程桌面软件 RustDesk
远程办公是近几年比较流行的办公方式,这大多是由于疫情的影响。比较流行的远程桌面控制软件有中国的向日葵、德国的 Teamviewer、中国的 ToDesk、中国的 RustDesk。本篇介绍 RustDesk,不仅是因为它是国产软件,更重要它是开源的,并且能够使用自建中继服务器,这给用户保留了更好的定制性和隐私性。本篇以 Debian 10 为例演示。
安装RustDesk 提供了各平台的版本,如 Windows, Mac, Ubuntu, fedora, Android, iOS, Web 等。安装非常简单,直接从 github rustdesk下载对应的版本就好。
安装后会自动分配一个 ID 和密码,作为唯一标识。当别的客户端连接本电脑时,需要输入该 ID 和密码。
自建中继服务器默认的软件已经提供免费的中继服务器,但带宽有限,缺乏隐私性。因此,RustDesk 提供了可自建中继服务器的方法,使用自己的服务器作为桥梁连接自己的电脑,获得可控的网速以及更高的安全性。
假设你已经有了一台具有公网 IP 的 vps 服务器(硬件要求很低,最低配置的云服务器就可以了,CPU 和内存要求都 ...