我的笔记
Genymotion - Error while creating virtualbox host-only interface
我的系统环境信息
- Manjaro Linux 64Bit
- Linux version 5.10.18-1
安装Genymotion
# 先更新系统
sudo pacman -Syuu
yay -S genymotion
然后运行Genymotion,提示错误
Error while creating virtualbox host-only interface
仔细查看安装输出,安装完成后需要运行命令
sudo modprobe vboxdrv
但在运行之后,提示输出找不到 Module vboxdrv not found,于是执行
sudo pacman -S virtualbox linux510-virtualbox-host-modules
linux510-virtualbox-host-modules 这个包取决于你的Linux内核版本,可以使用 cat /proc/version 查看内核版本
最后再次运行以下指令查看是否有异常提示
sudo modprobe vboxdrv
sudo modinfo vboxdrv
sudo modprobe vboxnetadp
sudo modprobe vboxnetflt
再次启动Genymotion,一切正常
Software Tools Linux 2021-03-02 20:59:20
Manjaro - 安装Fcitx5搭配肥猫百万词库
首先卸载所有关于fcitx4的包
sudo pacman -Rs $(pacman -Qsq fcitx)
安装fcitx5
sudo pacman -S fcitx5-im fcitx5-chinese-addons
配置环境变量 vim ~/.pam_environment
GTK_IM_MODULE DEFAULT=fcitx
QT_IM_MODULE DEFAULT=fcitx
XMODIFIERS DEFAULT=\@im=fcitx
SDL_IM_MODULE DEFAULT=fcitx
安装肥猫百万词库(从wiki上加载,按照官方说法并无版权风险)
yay -S fcitx5-pinyin-zhwiki
注销重启PC后,打开 fcitx Configuration,选择添加拼音即可使用
PS:如何验证词库加载成功?打个“贾跃亭”试试看能不能匹配出来
参考资料
Operating System Linux 2021-02-27 14:06:36
Linux 命令精进04
Linux的键盘操作技巧非常多,《The Linux Command Line》这本书里提供了不少有趣的操作组合,这里挑选一些常用的做一下备忘
移动光标
- Ctrl - A 移动光标到行首
- Ctrl - E 移动光标到行尾
- Ctrl - L 清空屏幕,移动光标到左上角(形同Clear命令)
修改文本
- Ctrl - T 交换当前光标前的2个字符位置
- Alt - T 交换当前光标前后2个单词位置(区分单词通常是“-”或者“空格”)
- Alt - L 把从光标位置到字尾的字符转换成小写字母(Lower)
- Alt - U 把从光标位置到字尾的字符转换成大写字母(Upper)
剪切和粘贴文本
- Ctrl - K 从当前光标位置剪切至行尾的文本
- Ctrl - U 从当前光标位置剪切至行首的文本
- Alt - D 从当前光标位置剪切至词尾的文本
- Alt - Backspace 从当前光标位置剪切至词头的文本,如果光标在一个单词的开头,剪切前一个单词
- Ctrl - Y 把剪切环中的文本粘贴到光标位置
其他操作
- Ctrl - R 增量搜索(输入你要寻找的Linux命令行,输入的越多精准度越高)
其他提到的技巧类型命令
- !! 重复执行最后一次执行的命令
- !88 执行历史第88条命令
- !string 执行最近历史列表中以这个字符串开头的命令
- !?string 执行最近历史列表中,包含这个字符串的命令
- script [file] 记录当前会话所输入的所有指令(从输入这个指令开始记录)
Operating System Linux 2021-02-25 18:27:24
Syncthing - Windows安装配置开机自启与后台服务
Windows的后台服务常驻机制还是非常爽的,通常是流氓软件后台常驻,而我们自己的软件想配置后台自启却没有简洁的设置方式
Syncthing是一款同步文件工具,虽然有CLI版本,但我更喜欢命令行版本
CMD运行syncthing,CMD关闭就结束运行了,Syncthing如何常驻后台是个问题
计划任务是个不错的方法,但开机自启动需要重启验证(个人经验是不同版本的Windows计划人物可靠性不一致,不算是个非常保险的方法)
所以我还是更喜欢能把软件注册成服务的nssm工具,具体文档可以参考nssm的说明,文档短且易学,注册成系统服务之后也具备开机自启的特性
下载syncthing与nssm之后,可以使用如下指令注册成后台服务
.\nssm.exe install syncthing "C:\Programs\syncthing-windows-amd64-v1.13.1\syncthing.exe" '-home="C:\Programs\syncthing-windows-amd64-v1.13.1\config"'
.\nssm.exe start syncthing
具体操作例子(使用管理员身份的Powershell)
PS C:\Programs\nssm-2.24\win64> .\nssm.exe install syncthing "C:\Programs\syncthing-windows-amd64-v1.13.1\syncthing.exe" '-home="C:\Programs\syncthing-windows-amd64-v1.13.1\config"'
Service "syncthing" installed successfully!
PS C:\Programs\nssm-2.24\win64> .\nssm.exe start syncthing
syncthing: START: The operation completed successfully.
有 syncthing: START: The operation completed successfully. 提示就说明后台服务注册成功了
Operating System Windows 2021-02-22 10:43:39
Python3 - Flask-Caching的过期时间设置(Flask缓存插件)
Flask-Caching是一个用于Flask框架的缓存插件,既支持高度的自定义继承开发,也支持简单的缓存存取,简单的缓存存取如下
from flask import Flask
from flask_caching import Cache
app = Flask(__name__)
app_cache = Cache(config={'CACHE_TYPE': 'filesystem', "CACHE_DEFAULT_TIMEOUT": 10, 'CACHE_DIR': '/tmp'})
app_cache.init_app(app)
@app.route("/")
def index():
code = random.randint(0,9)
if code is not None:
cache.set("code", code)
return render_templete_striing("<html><body>your code is {{code}}</body></html>")
@app.route("/login/<code>")
def login(code):
cache_code = cache.get("code")
if code == cache_code
return render_templete_striing("<html><body>valid {{code}} !</body></html>")
return render_templete_striing("<html><body>invalid {{code}} !</body></html>")
然而当我需要持久化缓存的时候,却发现Flask-Caching - 文档里对缓存过期参数 CACHEDEFAULTTIMEOUT 的描述只有
The default timeout that is used if no timeout is specified. Unit of time is seconds.
经过一番查找,在How can I configure Flask-Cache with infinite timeout -- stack overflow看到比较靠谱的答案
当使用 cache.set()的时候,如不传入timeout参数,则默认使用 CACHEDEFAULTTIMEOUT 参数的过期时间,如需持久化该缓存,则使用 timeout=0 即可
如下
from flask import Flask
from flask_caching import Cache
app = Flask(__name__)
app_cache = Cache(config={'CACHE_TYPE': 'filesystem', "CACHE_DEFAULT_TIMEOUT": 10, 'CACHE_DIR': '/tmp'})
app_cache.init_app(app)
cache.set("key", "value", timeout=0)
Develop Technology Python 2021-02-08 18:46:47
Linux - 命令精进03
创建用户
- adduser [user_name] # 该命令会创建用户/用户组/用户目录/初始化用户环境等一系列操作,是 创建一个可以登录系统的正常用户
- useradd [user_name] # 该命令会创建用户/用户组,然后什么也不做,是 创建一个不可以登录系统的系统用户
设置密码
- passwd [user_name]
修改用户名称(登录名称)
- usermod –l [newusername] [oldusername]
删除用户
- userdel [user_name] # 删除用户,如需删除用户信息如Home目录等需要使用 -r 参数
锁定/解锁用户
- usermod -L [user_name] # 锁定用户,用户无法再正常登录
- usermod -U [user_name] # 解锁用户,用户可以正常登录
查看用户信息
- id [user_name]
用户组创建
- groupadd –g [gid] [groupname] # 创建ID为[gid]的[groupname]用户组
添加用户到用户组
- usermod -a -G [groupname] [username]
- gpasswd -a [username] [groupname]
从用户组踢出用户
- gpasswd -d [username] [groupname]
删除用户组
- groupdel [group_name]
Operating System Linux 2021-02-07 17:36:22
Linux - SSH Config文件最简指南
SSH Config文件位于用户目录下的.ssh/config
按照规则配置好文件后,可以在Visual Studio Code以及终端中使用 ssh [host] 语法快速连接服务器
# 公司机器
Host company-ubuntu1804
HostName 182.20.1.12
User chancel
Port 20392
IdentityFile ~/.ssh/passphrase_id_rsa
Operating System Linux 2021-02-04 16:15:28
Linux - 命令精进02
防火墙常见配置(通常需要sudo执行,较新的发行版都采用了Firewalld防火墙)
另外需要注意当前的ZONE是否是public
# 查看当前默认的规则名称
firewall-cmd --get-zones
# 查看支持直接开放对应服务的端口列表
firewall-cmd --get-services
# 查看开放的服务列表
firewall-cmd --list-services
# 开放一个服务
firewall-cmd --add-service=http --permanent
# 查看所有已经打开的端口(不包含指定打开的服务)
firewall-cmd --list-ports
# 查看/开放/删除一个端口
firewall-cmd --zone= public --query-port=80/tcp
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone= public --remove-port=80/tcp --permanent
# 应用所做更改
firewall-cmd --reload
Cent7的selinux的关闭
# 查看selinux状态
/usr/sbin/sestatus -v
# 临时关闭sexlinux,0关闭,1开启
setenforce 0
# 永久关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久性关闭
Curl模拟GET请求、模拟POST请求
# 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl "http://www.example.com"
# 显示全部信息
curl -i "http://www.example.com"
# 只显示头部信息
curl -l "http://www.example.com"
# 显示get请求全过程解析
curl -v "http://www.example.com"
# 模拟带Json数据的POST请求
curl -H "Content-Type:application/json" -X POST --data '{"index":"1503652289983"}' http://192.168.1.1/index
# 模拟表单提交
curl -d "param1=value1¶m2=value2" http://www.example.com/index
# 模拟带Cookies提交
curl -v --cookie "xxxxxxxxxxxxxxxxxx" https://www.example.com
# 模拟文件提交
curl -F "myfile=@hellocurl.zip" "www.example.com/upload"
nmap 扫描服务器端口开放情况
# 普通扫描(需要三次握手,容易被判断为攻击)
nmap -p 1-200 [server_ip]
# 快速扫描(不需要三次握手,需要ROOT权限执行,)
nmap -sS -p 1-200 [server_ip]
# 注:
- sU:寻找目标主机打开的UDP端口
- sF:tcp的扫描一种,发送一个FIN标志的数据包
Operating System Linux 2021-02-04 15:43:38
Linux - 命令精进01
输出显示为一个表
- mount | column -t
让显示结果排序
- ps aux | sort -nk 4
切换到之前的目录
- cd -
自动回答命令
- y | apt install vim
创建指定大小的文件
- dd if=/dev/zero of=out.txt bs=1M count=10
以Root用户运行最后的命令
- sudo !!
批量下载文件
- cat urls.txt | xargs wget
查看占用磁盘的文件
- du -hsx * | sort -rh | head -6
获取一个文件的详细信息
- stat README.md
复制命令输出到粘贴板
- php -i | xsel -b
循环运行一个命令直到他成功
while true
do
ping -c 1 www.google.com > /dev/null 2>&1 && break
done;
Operating System Linux 2021-02-04 15:07:20
KCPTUN - 配置文件指南
服务端配置
{
"listen": "0.0.0.0:8082",
"target":"127.0.0.1:8081",
"key": "key",
"crypt": "aes-256-cfb",
"mtu": 1350,
"sndwnd": 1024,
"rcvwnd": 1024,
"datashard": 10,
"parityshard": 3,
"dscp": 0,
"conn": 1,
"autoexpire": 60,
"nocomp": false
}
客户端配置
{
"mtu": 1400,
"key": "key",
"nocomp": false,
"remoteaddr": "www.example.com:8082",
"datashard": 10,
"autoexpire": 60,
"acknodelay": false,
"sndwnd": 1024,
"nc": 0,
"rcvwnd": 1024,
"crypt": "aes-256-cfb",
"dscp": 0,
"conn": 1,
"localaddr": "0.0.0.0:11226",
"nodelay": 0,
"parityshard": 3
}
Network 2021-02-04 11:57:41