前言
有时候, 我们使用git add .不小心误添加了某些个文件到本地暂存库中, 如果我们需要撤销该add记录, 可以通过以下方式
撤销指令
撤销上次
add的指定文件1
git reset HEAD <路径/文件名>
撤销上次
add的所有文件1
git reset HEAD
本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 码出一个新世界
给使用kindle的小伙伴介绍几种好用的传书方法
以轻松传这个网站为例:
官方网址: https://easychuan.cn/

我们只需要将文件上传, 得到一个取件码, 然后在kindle中打开体验版浏览器, 同样输入https://easychuan.cn/

填入相应的取件码就可以直接下载了
类似这样的网站除了轻松传之外, 还有快牙:

还有就是Feem的WebShare功能也可以传输文件, 直接通过一个ip和端口号进行访问下载, 不过仅限于局域网内:

kindle亚马逊账号登录后会自动分配一个邮箱账号, 这个账号可以在kindle设置中进行查看获取
我们只需要将文件发送到这个邮箱账号上即可
注意使用的是邮件附件 而不是超大附件
Kindle App 是亚马逊开发出的阅读 App,可用于同步我们在亚马逊 Kindle 书城购买中购买的书到各个客户端(Windows、OSX、Android 以及 iOS)
可以看成是App版的Kindle, 除了可以用来看书外, 还可以用来传书
只需登录kindle账号然后直接上传发送即可

简单粗暴, 快捷高效, 这个不用多说, 一根数据线的事
EasyChuan网页: 支持电脑和手机, 无需登录, 如果文件不多的话推荐使用该方法USB传书: 文件大小无限制, 如果批量传书推荐该方法
本文为作者原创 转载时请注明出处 谢谢

做开发的小伙伴对vim编辑器肯定不陌生, 无论你是使用Linux终端, 还是使用Git操作仓库的时候都经常会碰的上

刚开始接触的时候肯定是感觉非常费劲, 毕竟我们已经习惯了用鼠标定位操作的编辑器
而VIM编辑器, 可以说是纯靠键盘定位和编辑, 你想快速编辑某一处的内容, 鼠标根本帮不了你, 只能依靠键盘
如此反人类的操作, 对于开发者的你来说, 却不得不学
既然如此, 一些常用的操作指令 我们需要掌握
用vim编辑器打开文本文件
1 | vim 文件名 |
打开文件后进入默认模式, 该模式下文本可以查看但不能编辑
1 | shift+冒号 |
进入文本编辑模式
1 | 敲键盘上的字母 i 或者 a |
进入命令输入模式
1 | 敲键盘上的 : |
进入全局可视化模式
1 | 敲键盘上的字母 v |
恢复到默认模式
1 | 敲键盘上的 ESC |
保存文本内容
命令模式下输入以下字母并且回车:
1 | w 保存内容 |
退出编辑器
命令模式下输入以下字母并且回车:
1 | q 退出编辑器 |
默认模式下可以使用键盘上的上下左右键移动光标查看文本内容, 除此之外, 还可以:
删除内容
| 命令 | 说明 |
|---|---|
x |
删除游标所在的字符 |
X |
删除游标所在前一个字符 |
Delete |
同x |
dd |
删除整行 |
dj |
删除当前行和下一行 |
dk |
删除当前行和上一行 |
dh |
删除光标左边的一个字符 |
dl |
删除光标右边的一个字符 |
dw |
删除一个单词(不适用中文) |
d$或D |
删除至行尾 |
d^ |
删除至行首 |
dG |
删除到文档结尾处 |
d1G |
删至文档首部 |
ndd |
一次性向下删除n行 |
光标移动
除了使用上下左右键之外还可用字母:
方向键或者h,j,k,l键可以移动游标。
| 按键 | 说明 |
|---|---|
h |
左 |
l |
右(小写L) |
j |
下 |
k |
上 |
w |
移动到下一个单词 |
b |
移动到上一个单词 |
gg |
移动到文本头部 |
G |
移动到文本末尾 |
不同位置插入内容
| 命令 | 说明 |
|---|---|
i |
在当前光标处进行编辑 |
I |
在行首插入 |
A |
在行末插入 |
a |
在光标后插入编辑 |
o |
在当前行后插入一个新行 |
O |
在当前行前插入一个新行 |
cw |
替换从光标所在位置后到一个单词结尾的字符 |
复制当前行
1 | y |
粘贴到下一行
1 | p |
撤销操作
1 | u |
回滚操作
1 | ctrl+r |
退出编辑器
1 | shirt+zz |
可视化模式下可以快速对内容进行选中, 选中的内容会高亮显示
选中全部内容
1 | 1. 普通模式下敲gg(把关标定位到最上面) |
复制文本全部内容
选中全部内容后输入以下字符:
1 | y 复制到vim编辑器中 |
对内容进行格式化
选中全部内容后输入以下字符:
1 | = |
本文为作者原创 转载时请注明出处 谢谢

搜索python镜像
1 | docker search python |
拉取python镜像
1 | docker pull python |
创建并运行容器
1 | docker run -id \ |
将源程序上传至服务器
可以使用FTP工具或者scp指令上传 其他也可
进入程序目录 安装依赖包
1 | pip install -r requirements.txt |
启动程序
1 | python manage.py runserver 0.0.0.0:8000 |
网站访问
1 | http://服务器ip:8000 |
本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站
今早起来, 突然发现网站挂了, 直接报504 Gateway Time-out

我立马联想是否是docker挂了或者数据库容器出了问题
进入终端 使用docker ps 所有容器都在正常运行 没问题, 然后docker logs --tail=10 mysql数据库也没报错
我怀疑是不是docker内部哪里卡住了, 于是systemctl restart docker立马重启docker, 然后重新访问网站 还是不行
有点懵了, 到底哪里出了问题呢? 网上说是Nginx配置问题, 可是我nginx配置一直都没动过, 而且查看nginx容器日志也是正常, 难道是docker容器间通信不正常?
紧接着我又进入nginx容器, 使用nc -zv wordpress 80指令进行容器间通信测试, 也是正常打通的
这问题到底是出在哪了?
难道真的只是超时? 我给的时间太短了不成? 于是乎 我干脆将nginx反向代理超时时间调大, 死马当活马医, 不试试怎么知道呢
我将以下三行配置加入到代理块中:
1 | proxy_connect_timeout 300s; |
具体配置如下:
1 | location /foo { |
然后重启nginx, 这时访问网站 次数504 Gateway Time-out消失了, 换成了Error establishing a database connection

我靠, 原来还是数据库的问题
我开始回忆, 前段时间刚进行docker跨服务器迁移, 昨天旧服务器刚好到期停机, 今天就突然访问不上了, 难道我的程序此时访问的还是原来旧服务器的数据库
对了 我的源码目录是直接从旧服务器拷贝过来的, 虽然docker容器是新建的, 但是因为存在旧目录 所以docker run配置的数据库参数全部无法重写, 也就是说程序配置文件中的数据库连接参数没有被重写
恍然大悟, 立马进入源程序目录找到配置文件打开查看, 果真如此, 然后将其修改为新的
此时重新访问, 网站正常显示
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下:

作为IT工作者, 长时间对着电脑屏幕, 眼睛实在是疲惫不堪, 即便我将电脑屏幕亮度调至非常低 也无济于事
唯独 夜间模式能稍加缓解, 但是浏览器依旧是白花花一片 太过扎眼, 于是乎找了个暗黑小插件, 就此拯救了我的双眼
话不多说 如下:
名为DARK READER的插件, 配置如下:

效果如下:

考虑到大部分国内用户无法访问谷歌网站, 这里给大家推荐两个国内下载站点:


不仅支持名称搜索, 还支持扩展地址搜索
比如插件官方扩展地址:https://chrome.google.com/webstore/detail/dhdgffkkebhmkfjojejmpbldmpobfkfo


根据名称关键字搜索下载:


本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下:

docker容器处在宿主内部的局域网络之中, 一般来说, 我们直接使用局域网ip即可访问, 但考虑到容器重启后ip可能会发生变化, 所以这种直接使用容器的ip的方案并不稳妥
那如果使用公网ip, 映射访问的话, 似乎稳定一些, 但是也存在问题, 比如docker跨服迁移, 那么ip还得手动修改, 同时公网访问速度上肯定不如内网
所以还得另寻他法
事实上 Docker官方已经给我们提供了解决办法, 那就是使用Bridge桥接网络, 这样 我们可以直接使用容器名充当局域网ip进行容器间相互访问

创建bridge网络
1 | docker network create -d bridge 自定义网络名称 |
创建容器时指定bridge网络
1 | docker run -id --name=first --network 网络名 ubuntu:latest |
这样两个容器就处在了同一个桥接网络下, 容器间自动link, 彼此可以相互访问
访问测试
1 | # 进入第一个容器 |
如果要查看当前已经存在的桥接网络列表
1 | docker network ls |
除了方便容器间通信外, 结合Nginx还可以减少服务器端口开放数量, 消除不必要的安全隐患
比如不使用桥接网络时, Nginx反向代理配置是这样的:
1 | http{ |
使用桥接网络后:
1 | http{ |
无论是移植性和安全性都得到了大大的提升
但是有一点需要注意, nginx配置文件在nginx启动成功之前会检测server节点下的host地址是否可通, 如果存在无法接通的host, 则nginx无法启动,
也就是说我们使用server 容器名:80这种配置 当我们的docker容器挂了或者停止运行时, 如果此时重启nginx则会启动失败, 这一点我们需要提前知晓, 避免到时重启时出了问题摸不着头脑
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下:

systemctl是 Systemd的主命令,用于管理系统。
1 | # 重启系统 |
systemd-analyze命令用于查看启动耗时。
1 | # 查看启动耗时 |

hostnamectl命令用于查看当前主机的信息。
1 | # 显示当前主机的信息 |

localectl命令用于查看本地化设置。
1 | # 查看本地化设置 |

timedatectl命令用于查看当前时区设置。
1 | # 查看当前时区设置 |

loginctl命令用于查看当前登录的用户。
1 | # 列出当前session |
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下:

以下概念以终端操作为前提
无论是前台任务还是后台任务, 终端一旦被关闭, 任务会立即终止
终止前台任务
1 | Ctrl+C |
暂停前台任务
1 | Ctrl+Z |
查看当前暂停的任务和所有后台任务信息
1 | jobs -l |
将前台任务切换成后台任务
1 | 1.输入ctrl + z 暂停任务 |
终端关闭 保持前台任务继续运行
1 | nohup xxxx |
nohup: 表示忽略hup信号, 终端关闭任务进程也不销毁
以后台方式启动任务, 命令末尾加&即可
1 | watch -n 10 sh test.sh & #每10s在后台执行一次test.sh脚本 |
终止后台任务
方式一:
1 | 1.输入jobs查看任务号 |
方式二:
1 | 1.使用ps指令查看任务进程pid |
将后台任务切换成前台任务
1 | 1.输入jobs查看任务号 |
终端关闭 保持后台任务继续运行
如果后台任务还未启动, 指令前面加nohup:
1 | nohup watch -n 10 sh test.sh & |
如果后台任务已经启动:
1 | 1.输入jobs查看任务号 |
disown指令用于对jobs任务的移除移出操作, 常见参数有:
1 | disown -a //删除全部作业 |
除了使用nuhup+&的方式使得任务在后台运行且不受终端关闭影响外, 还有一种方式那就是使用systemd
创建systemd服务步骤如下:
创建服务配置文件
1 | vim xxx.service |
将以下内容填入配置文件中:
1 | [Unit] |
no、always、on-success、on-failure、on-abnormal、on-abort、on-watchdog等将服务配置文件拷贝至/lib/systemd/system/目录下
1 | sudo cp xxx.service /lib/systemd/system/ |
启动服务
1 | sudo systemctl start xxx |
停止服务
1 | sudo systemctl stop xxx |
查看服务运行状态
1 | sudo systemctl status xxx |
设置服务开机自启动
1 | sudo systemctl enable xxx |
禁止服务开启自启动
1 | sudo systemctl disable xxx |
服务重启
1 | sudo systemctl restart xxx |
查看systemd的版本
1 | sudo systemctl --version |
查看配置文件
1 | systemctl cat xxx.service |
systemd和nohup+&之间的对比systemd可以满足以下需求:
而nohup 只能记录服务运行时的输出和出错日志, 根据我们实际的需求进行选择即可
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下:

想验证网站项目是否可盈利, 如果购买服务器的话太贵, 怎么办, 那就用免费的吧
国内基本上已经没有免费的虚拟主机可用了, 即便有也是套路你
只好把目标转向国外服务器供应商, 先是找到一家日本的厂商XREA, 主页长这样:

决定试试申请一个, xrea需要注册两个账户, 一个是xrea账户, 另一个是value-admin账户

首先注册value-admin账户:

这一步 国内的邮箱无法注册, 谷歌邮箱可以 但是居然一直收不到验证码, 最后只好作罢
随后有找了一家欧美的厂商Awardspace, 经过尝试, 发现可行, 主页长这样:

我直接使用第三方谷歌登录, 国内的小伙伴有可能需要搭个大爬梯才能访问哦
登录成功后进入到控制台界面:

该有的功能全都有, 这个免费虚拟主机给我们提供了:

各种博客程序一键安装:

或者上传已有的程序文件, 可以网站直接上传或者使用FTP上传, 如果使用FTP会提示你设置FTP密码:

我这里为了演示 直接一键安装的JOOMLA博客程序
如果你已经有自己的域名了, 可以直接绑定:


然后在你的域名服务上, 进行域名解析, 可以直接使用A记录解析到185.176.43.108这个IP, 或者更改DNS记录为ns5.awardspace.com,ns6.awardspace.com
我这里直接用的是IP解析
最后浏览器输入绑定的域名进行测试, 我这边正常访问, 而且速度还不错:

这个网站也提供免费的虚拟主机, 时长一年, 可以选择预制的PHP程序:

freehostia给我们提供了:
提供免费的PHP虚拟主机

蓝队云给我们提供了:
免费PHP虚拟空间 一月一续期

该空间可以用于CDN反代, 具体可参见: 《无成本反向代理Jsdelivr》
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下:
