SSH 转发的一些记录
使用 ssh 能够访问远程服务器,但是,对于办公室的电脑只有内网 ip 而无法在家直接通过 ssh 访问,有时候不是很方便,然而像 frp 等都被公司禁止使用。本篇介绍 ssh 转发解决上面的问题。
公网服务器设置首先需要购买一个具有公网 ip 的服务器,这里推荐阿里云,腾讯云等,服务器地址选择当地的就好,比如上海等。然后,对服务器进行配置,开放一个转发的端口,比如,2222。最后,需要对 sshd 的配置文件进行修改。
12345sudo vim /etc/ssh/sshd_config# 添加如下内容GatewayPorts yes# 重启 sshdsudo systemctl restart sshd.service
为什么设置 GatewayPorts yes 呢?这是因为,默认情况下,OpenSSH 只允许从服务器主机连接到远程转发端口。GatewayPorts no 能够防止从服务器计算机外部连接到转发端口。也就是说,只能服务器自己连接自己的端口实现访问内网的端口,而外部的服务器不能连接。其实,查看端口占用(sudo netstat -tunlp | grep 222 ...
Python 中如何获取文件的大小
Python 是非常优秀的编程语言,开发效率高。在 Shell 中可以非常方便的使用 ls -l filepath 获得文件的大小,那么在 Python 中如何获取文件的大小呢,下面给出4中方法。假设我们的文件路径是 file_path = '/test-file.txt'.
os.path.getsize使用该函数能够获得文件的大小,单位为字节
123import osos.path.getsize(file_path)
os.stat使用该函数能够获得文件的大小,单位为字节
123import osos.stat(file_path).st_size
打开文件读取文件,获得大小使用该方法能够获得文件的大小,单位为字节
12345import oswith open(file_path, 'rb') as f: f.seek(0, os.SEEK_END) print(f.tell())
使用 pathlib.Path(file_path).stat()使用该方法能够获得文件的大小,单位为字节
123from pathlib ...
Jupyterlab 暗黑模式下使用 Matplotlib 画图显示问题
Jupyterlab 暗黑模式下使用 Matplotlib 画图有时无法显示图片的坐标轴信息,这是需要调整 matplotlib 的画图显示风格,以使用暗黑模式的 jupyterlab. 本篇所有代码在 jupyterlab 中使用。
更改 matplotlib 的 stylematplotlib 提供了很多种显示风格,查看所有的风格,可以使用如下命令:
123from matplotlib import stylestyle.available
12345678910111213141516171819202122232425262728['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirty ...
在 Linux 系统上查看日志信息
Linux 系统上有很多服务是使用 systemctl 来管理的,如何查看这些服务的日志信息呢?下面以 Ubuntu 18.04/CentOS 7 为例,所有命令以 root 身份运行。
journalctljournalctl 命令是一个管理工具,能够查询 systemd 日志,同时管理、查看由内核、initrd 以及服务等产生的信息。
12345678910# 查看 jupyterhub 的日志信息, -u 表示按单元(--unit)journalctl -u jupyterhub.service# 查看 jupyterhub 的最新的日志信息journalctl -u jupyterhub.service -r# 实时的查看系统查看的最新日志信息,类似于 tail -f journalctl -f# 查看从凌晨到3:20的日志信息journalctl --since "today" --until "3:20"# 查看 journalctl 如何使用man journalctl
日记本身是 systemd 管理的系统服务,全 ...
ip、tcp、udp 首部校验和算法的 Python 实现
ip 首部校验和、tcp/udp 首部校验和能够判断网络传输中是否出现丢包、错包等。下面分别介绍它们的计算方法和 python 实现。
ip 首部校验和ip 首部校验和是针对 ip 数据包的包头20字节部分进行校验。假设我们有如下20字节的 ip 包头数据(16进制格式):
145 00 00 30 80 4c 40 00 80 06 b5 2e d3 43 11 7b cb 51 15 3d
45:4表示 ip 版本号,这里是 ipv4,5表示首部数据长度,为5个32比特,即20字节;
00 30: 表示 ip 包总长度为 0x0030=48字节,减去头部20字节,数据部分为28字节;
80 4c:表示标识符;
40 00:3比特标志和13比特片偏移量;
80 06:80表示ttl值0x80=128,06表示 tcp 协议(0x11=17表示udp协议);
b5 2e:表示 ip 首部校验和;
d3 43 11 7b:表示源地址0xd3, 0x43, 0x11, 0x7b = (211, 67, 17, 123);
cb 5 ...
开启 wsl 上的 cron 服务
wsl 是 windows 的 linux 子系统,使得在 windows 上使用 linux 非常丝滑,而不用安装虚拟机。但是,有些服务在 wsl 默认是关闭的,需要设置才能使用。下面介绍如何在 wsl ubuntu 上开启使用 cron,cron 能够进行定时任务的执行。
用户添加到 crontab 组命令如下:
1sudo usermod -a -G crontab jinzhongxu
开启 cron 服务123sudo service cron start# 或者sudo /etc/init.d/cron start
设置开机自启 cron 服务访问我的另一篇博文: Windows10 子系统开机自启动SSH等服务,把如下命令添加到 wsl.vbs 中:
1ws.run "wsl -d Ubuntu -u root /etc/init.d/cron start", vbhide
linux 防火墙
无论是 Windows 系统还是 Linux 系统都有防火墙,防火墙能够防护电脑免受外界攻击,保护电脑安全。本篇介绍如何在 Ubuntu/Debian/CentOS 上安装和使用防火墙。
Ubuntu/Debian 上防火墙安装防火墙
12sudo apt updatesudo apt install ufw
防火墙使用
1234567891011121314151617181920212223242526272829303132# 开启防火墙sudo ufw enable# 查看防火墙状态sudo ufw status# 开启指定端口sudo ufw allow 22# 开启指定端口的tcpsudo ufw allow 22/tcp# 打开端口范围,此时必须指定 tcp 或 udpsudo ufw allow 7000:7070/tcp# 允许指定IP地址sudo ufw allow from xxx.xxx.xxx.xxx# 允许指定IP地址访问指定端口sudo ufw allow from xxx.xxx.xxx.xxx to any port ...
java 一条语句打印多个变量
在 java 程序中,想要通过一条语句打印输出多个变量的值,就像在 python 中那样,将变量以逗号分隔罗列到 print 函数中是不行的,在 java 中可以使用如下方法。
字符串拼接和占位符
通过字符串拼接在函数 System.out.println() 中;
通过占位符在函数 System.out.printf() 中;
12345678910111213141516public class Main { public static void main(String[] args) { System.out.println("Hello World!"); int i = 2147483647; int i2 = -2147483648; int i3 = 2_000_000; int i4 = 0xff0000; int i5 = 0b1000000000; long l = 9000000000000000000L; ...
利用 jupyterhub 搭建多用户 python 开发环境
JupyterHub 是为多个用户提供 JupyterLab 的集成服务系统,每个用户相互隔离。在 JupyterHub 版本低于 2.0.0 时,可采用该方法部署。本篇介绍对于最新版 JupyterHub 2.0.0 (截止到2021年12月21日)的部署方法。相关环境是 miniconda, wsl (ubuntu),所有命令以 root 用户运行。
安装 miniconda12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849# 切换到主目录,下载miniconda并安装cd wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shchmod +x Miniconda3-latest-Linux-x86_64.sh./Miniconda3-latest-Linux-x86_64.sh# 选择安装在 /usr/local/minicondaecho 'ex ...
Mac 上通过 launchctl 开启守护进程
Linux 系统(如 Debian 10)上可以方便的使用 systemctl 开启守护进程,关闭守护进程,那么在 Mac 上如何设置自定义守护进程并开启、关闭它呢?本篇以 JupyterHub 为例,演示在 Mac 上开启 JupyterHub 守护进程. 本篇假设已经完成了 Miniconda,JupyterHub 和 configurable-http-proxy 的安装。
创建 plist 文件创建以 com.jupyterhub.app.plist 命名的文件,放在 /Users/jinzhongxu/Library/LaunchAgents 目录下,文件内容如下
123456789101112131415161718192021222324252627<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ ...
在 Python 中使用 yaml 做配置文件
YAML (YAML Ain’t Markup Language™) 是一种直观的能够被电脑识别的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互。YAML 类似于 XML,但是语法比 XML 简单得多,对于转化成数组或可以 hash 的数据时是很简单有效的。
yaml 的官方网站是:https://yaml.org
安装 yaml
1pip install PyYAML
读取 yaml 文档有文档 test.yaml,内容如下
12345678910name: Tom Smithage: 37spouse: name: Jane Smith age: 25children: - name: Jimmy Smith age: 15 - name: Jenny Smith age: 12
在 python 中利用 yaml 读取
123456import yamlfilepath = "data/test.yaml"file = open(file=filepath)file_str = yaml.load(file, yam ...