书库免费的电子书站点

一年前使用 kindle 的时候有 kindle10000 ,还有无数的 kindle push 网站,去年突然一下子关闭一下子蒙了,这一年多来,陆陆续续又发现了一些很不错的站点。现在整理整理分享一下。我电脑中还有大概五六十G的当年kindle人倒闭时全站资源的打包只是一直都还么有时间建立索引,整理出来,有时间还是要整理一下的。

我的小书屋

http://mebook.cc/

以网盘下载为主

可以用来推送电子书到 Kindle 邮箱

集思会

强烈推荐的站点,几乎 kindle10000 之后就是他了。

http://www.kindlepush.com

书籍比较全,每天可推送两本,下载一本,

书伴

https://bookfere.com/

漫画

http://vol.moe/

记得以前不叫这个名字的,可推送漫画,漫画比较全,有连载。

古腾堡

http://readfree.me/

书籍比较全,相同书籍有不同版本,可推送到 kindle,可下载,可共享图书

子乌书简

http://book.zi5.me/

可推送,可下载,注册用户可以共享电子书,网站由 WordPress 所写。

鸠摩搜索

https://www.jiumodiary.com/

主要是微博网盘和百度网盘共享书籍,质量层次不齐

其他

mLook 精校电子书,注册需要邀请码

http://plugin.mlook.mobi/

周读

http://ireadweek.com/

计算机相关

https://github.com/justjavac/free-programming-books-zh_CN


2018-02-13 books , free , website , kindle

Linux 下安全的删除文件

Linux 下有一个非常危险的命令—-rm,虽然本意上rm命令是用来删除文件或者文件夹的,但是这个命令删除的文件很难找回来,一旦不小心手贱敲快了,就有可能导致不可挽回的结果。所以我搜了一圈,发现其实 Ubuntu 下有一个包 trash-cli。给Linux加了一层垃圾箱。

安装

sudo apt install trash-cli

这个命令包,包括 trash, trash-list, trash-restor, trash-empty 等等几个命令,具体可以参看 man。

~/.zshrc 中添加 alias

alias rm=trash

这样,以后使用 rm 时,默认将文件移动到垃圾箱中,再不会发生不小心删除文件之后无法找回的问题。

reference


2018-02-12 linux , rm , delete , file , manager

搭建自己的Weibo转RSS服务

认识我的人都是知道我一直使用RSS订阅信息,但是互联网越来越闭塞的现在,每一家公司都在自建后花园,把所有的信息封闭在内部,几乎现在没有任何内容型平台提供 RSS 输出了,所以也才有了这篇文章。以前我使用的微博转RSS的服务大都已经挂掉,唯一一家微博档案最近也似乎有些危险。不过幸好查到下面两个项目,让微博定义RSS不在困难。

  • https://github.com/DIYgod/Weibo2RSS
  • https://github.com/zgq354/weibo-rss

我使用了第二个项目,安装过程可以参考下文,都是使用 nodejs 实现,如果手动安装需要手动配置一下环境。

使用 Docker 安装

安装 Docker 的文章可以查看之前的文章

git clone https://github.com/zgq354/weibo-rss.git
cd weibo-rss
docker build -t <tag> .
docker run -p 3000:3000 -d --name weibo-rss --restart=always <tag>

默认程序会监听服务器的 3000 端口,可以通过 Nginx 的 proxy_pass 指令配置请求转发

reference


2018-02-11 linux , docker , weibo , rss , inoreader

每天学习一个命令:find 查找文件

查找的动作在平时使用的频率也还是很高的,所以知道并用好 find 这个命令也很重要。find 命令顾名思义,就是搜索特定文件夹内的文件。

基本使用

最基本的使用

find [path] [expression]

在 path 目录下查找 expression 的文件。

使用举例

通过文件名查找

find -name "query"   # 搜索文件名,大小写敏感
find -iname "query"  # 大小写不敏感
find -not -name "query"  # 查找不包含关键字的文件
find \! -name "query"    # 不包含

按照类型查找文件

find -type [fdlcb] "query"

type 后能够使用的类型有

  • f 常规文件
  • d 目录
  • l 连接
  • c character devices
  • b block devices

比如要查找系统中所有以 .conf 结尾的文件

find / -type f -name "*.conf"

通过文件大小查找

find /path/to/folder -size 50M

查找 50M 的文件,size 后能够使用的单位有:

  • b 512byte blocks
  • c byte 字节
  • w two byte
  • k kB 千字节
  • M MB
  • G

size 后面的参数可以使用 + 或者 - 或者不加来标识,超过,少于,或者正好。

find / -size +700M   # 表示查找大于 700M 的文件
find / -size -50c    # 表示查找小于 50 自己的文件

通过时间来查找文件

Linux 会存储下面的时间:

  • Access time 上一次文件读或者写的时间
  • Modifica time 上一次文件被修改的时间
  • Change time 上一次文件 inode meta 信息被修改的时间

在按照时间查找时,可以使用 -atime-mtime 或者 -ctime ,和之前 size 参数一样可以使用 + 或者 - 来标识超多多长时间或者少于多长时间。

find / -mtime 1          # 寻找修改时间超过一天的文件
find / -atime -1         # 寻找在一天时间内被访问的文件
find / -ctime +3         # 寻找 meta 信息被修改的时间超过 3 天的文件

寻找修改时间超过 1 小时的 mp3 文件

find /path/to/folder -maxdepath 1 -mmin +60 -type f -name "*.mp3"

其中的-mmin n 参数表示的就是文件内容在前 n 分钟没有修改。

find /path/to/folder -maxdepath 1 -mmin +60 -type f -name "*.mp3" -exec rm -f {} \;

通过上面的语句就能够一次性删除超过 60 分钟未修改的 mp3 了。

通过 Owner 和权限搜索

使用 -user-group 参数来通过拥有者搜寻

find / -user einverne
find / -group shadow

同样按着权限查找文件

find / -perm 644
find / -perm -644 # 查找权限至少是 644 的文件

限制查找的深度

使用 -maxdepth 来限制查找的深度,默认情况下 find 会一层层搜索,如果只想让 find 命令查找当前目录或者子目录,可以使用

find -maxdepth 2 -name "query"

同理 还有一个选项 -mindepth

find -mindepth 2 -maxdepth 3 -name "query"

对搜索结果批处理

在搜索出结果之后,可以使用如下的方式对搜索的结果执行一个命令

find [param] -exec command {} \;

比如批量修改权限

find . -type f -perm 644 -exec chmod 664 {} \;
find . -type d -perm 755 -exec chmod 700 {} \;   # 批量修改文件夹权限

批量删除时间超过 1 天的文件

综合上面按时间查找文件和对搜索结果批处理,可以获知

find /path/to/folder/* -mtime +1 -exec rm {} \;
  • find 后面接一个完整的 path
  • -mtime +1 表示的查找时间超过 1 天的内容
  • -exec 后面表示对搜索的结果进行处理

使用 locate

locate 命令需要额外安装

sudo apt install mlocate

locate 命令维护了一份文件和目录的数据库,所以检索速度会快一些,数据库通常一天更新一次,可以手动更新数据库

sudo updatedb
locate -S   # 查看当前数据库数据

locate 使用的方式和 find 大致差不多。

reference


2018-02-10 linux , find , file , command

监控 docker 运行数据 stats 命令

之前因为学习 Docker 也总结了一批经常使用的 Docker 命令 然后回头过来看唯独漏掉了 Docker 监控的一块,一方面也是当时看的文档并没有覆盖到这个领域,另一方面也是最近看到 Google cAdvisor 才开始注意到 Docker 监控的命令。

使用

查看容器资源使用

直接运行,查看所有当前运行的 Docker 状态及资源消耗

docker stats

该命令执行后会返回下列数据

  • 容器ID,名字
  • CPU及 MEM 使用率
  • 内容使用量及限制
  • NET I/O 网络IO
  • BLOCk I/O 本地IO
  • PIDs 进程ID

查看容器中进程情况

查看容器中启动的进程

docker top [CONTAINER] [ps options] 

查看容器的日志

使用如下命令查看容器日志

docker logs [OPTIONS] CONTAINER

使用参数 -f 来追踪打印未来的日志

docker logs -f CONTAINER

2018-02-10 docker , monitor , container

Linux 下显示网络流量

Linux 下查看网络流量的命令有很多,之前 也介绍过使用 nethogs 来按照进程查看网络流量。但其实 Linux 下有很多命令同样可以达到效果。

总体带宽使用

bmon

使用 apt install bmon 安装,使用非常简单直接运行即可。

bmon 的介绍说是一个网络监控和调试工具,能够提供一个可视化的界面。

其他还有 nload, slrum, speedometer, netload

套接字连接带宽使用

常用的有 iftop,iptraf

iftop 使用 pcap 库来捕获进出网络适配器的数据包,然后汇报总数据包大小和数量。iftop 报告每一个连接所使用的带宽,但是没有办法报告进程名和编号。使用 iftop 时如果系统包含多个网络接口可能需要指定监控的接口 sudo iftop -i eth0,类似 top 命令,iftop 可以在运行时改变显示:

  • h 帮助
  • n 是否解析域名
  • s 是否显示源地址
  • d 是否显示目标地址
  • S 是否显示端口号

iptraf

iptraf 是一款交互式的网络监控工具,它可以显示每个连接和主机之间的传输数据。按连接/端口查看流量。

ifstat

ifstat: 按设备查看流量

ethtool

ethtool: 诊断工具

ss

ss: 连接查看工具


2018-02-09 linux , command , network , iftop , bmon

Linux 下几款快速启动器

本篇文章主要介绍 Linux 下几款常用的启动器,启动器顾名思义就是用来快速开启应用程序的程序。启动器最常用的功能就是用来快速启动另外一个程序,但是一款好的启动器应该提供一些常用的功能,比如说base64 编解码,比如当前Unix时间戳,再比如搜索Google,计算器,打开文件,单位转化,甚至是执行系统命令等等。

本文主要要介绍的是这三款: GNOME Do,cerebroApp,albertlauncher。

GNOME Do

GNOME Do 是最初由David Siegel开发的一个GNU/Linux下的流行的自由应用程序启动器1,GNOME Do 不仅能够用来启动程序,也能够快速打开文件,控制媒体文件等等。

通过下面命令安装

sudo apt install gnome-do

他的官网地址:https://do.cooperteam.net/ 安装之后我最喜欢的设置就是将启动 Do 的快捷键设置为 Alt+Space

不过可惜的是 GNOME Do 已经很多年没有更新 ,版本也永远的停留在了 GNOME Do 0.95。总结来看 Do 虽然不是最好的启动器,但是应付日常使用完全没有任何问题。

cerebroApp

cerebroApp 是一款用 Javascript 实现的启动器,跨平台,支持插件,界面友好。一般启动器能够实现的功能他都有。安装方法可参考其官网: https://cerebroapp.com/ 非常简单,几乎一键。

代码地址: https://github.com/KELiON/cerebro

改变快速启动hotkeys

当尝试在 Perferences 中修改启动快捷键时你会发现无法修改,查看官方的文档可以看到:

Config file path
Windows: %APPDATA%/Cerebro/config.json
Linux: $XDG_CONFIG_HOME/Cerebro/config.json or ~/.config/Cerebro/config.json
macOS: ~/Library/Application Support/Cerebro/config.json

修改配置文件,可以看到默认定义的快捷键是 Control + Space 我习惯使用 Alt + Space

安装插件

安装插件非常简单,在 cerebro 中直接输入 plugins hash 即可。

在 Cerebro 中访问粘贴板 https://github.com/codingmatty/cerebro-plugin-clipboard

直接在 Cerebro 中获取 hash ,安装 cerebro-hash ,然后先键入 hash 加上空格后面是需要 hash 的字符串。

hash [input]
hash (algorithm) [input]
(algorithm) [input]

有道翻译插件 https://github.com/lcjnil/cerebro-youdao 输入 youdao hello 来查询

还有 BASE64 加密解密,时间戳 等等插件,自己添加即可。

更多有用的 Cerebro 扩展插件可以在这里获取: https://github.com/lubien/awesome-cerebro

albertlauncher

同样是一款开源启动器,不过他只有 Linux 版本,安装过程也是比较简单。功能区别不是很大。它使用 C/C++ Qt 写成。同样支持插件。

安装过程可参考: https://albertlauncher.github.io/docs/installing/

项目地址: https://github.com/albertlauncher/albert

总的来说比较推荐 cerebroApp ,在三者区别不大的情况下,跨平台还是比较吸引我的,并且UI小清新。

  1. 参考维基


2018-02-09 linux , launcher , command , app

每天学习一个命令:uniq 打印唯一行

查看 man uniq 得知这个命令是用来显示,或者隐藏重复行的命令,一般情况下使用管道命令组合其他 cat, grep, awk, sort 等等使用。可用来过滤重复行,或者找到文本中重复的行。

基本使用

uniq 的基本使用如下:

uniq [OPTION]... [INPUT [OUTPUT]]

uniq 会从标准输入读取数据,过滤相邻的行,并将结果输出到标准输出。如果没有其他选项,重复的行会合并到第一次出现的行上。

一些常用参数

  • -c 在每一行前打印行出现的次数
  • -d 只打印重复的行,重复的行只打印一次
  • -D 打印出所有重复的行
  • -f 在比较时跳过前N个fields
  • -i 在比较重复行时忽略大小写
  • -s 在比较时忽略前N字符
  • -u 只打印唯一的行
  • -w 比较时只比较每一行的前N个字符

通常情况下field是由空格或者 TABs 分割的。

通常情况下,uniq 会和 sort 搭配使用。

命令返回 0 或者 >0 的数值表示退出,如果为 0 表示运行成功,>0 的数值表示发生错误。

实例

打印重复行的数量

sort file.txt | uniq -c

可以使用 -s 参数跳过开头N个字符

cat /var/log/nginx.log | uniq -s 10

2018-02-06 uniq , linux , command , awk

Linux 管理开机启动

如果想要科学的管理Linux 的开机启动项,那么了解 Linux 开机启动流程是非常有必要的。链接的文章将Linux开机启动流程讲述的非常通俗易懂,这里就不再详述。简单地归纳:

  1. 加载内核 ,读入 /boot 目录下内核文件
  2. 内核加载完成后,运行第一个程序 /sbin/init(PID为1),用来初始化系统环境
  3. 依据运行级别启动守护进程(daemon 或者称为服务)
  4. 加载开机启动程序
  5. 用户登录
  6. 进入login shell,依据不同的登录方式(命令行登录,ssh登录,图形界面登录),系统加载不同的shell配置,基本上就完成启动了

这篇文章涉及到的开机启动项内容主要就是集中在上述的第3,4步。Linux 预置七种运行级别(0-6),系统在 /etc 目录会有各个运行级别对应的子目录,目录中指定要加载的程序

  /etc/rc0.d   /etc/rc1.d   /etc/rc2.d   /etc/rc3.d   /etc/rc4.d   /etc/rc5.d   /etc/rc6.d

目录中的 rc 表示 run command, 最后的 d 表示 directory 目录。/etc/rcN.d(其中 N 表示的run level) 目录下是一系列启动脚本。文件都是以 字母S+两位数字+程序名 的形式构成。字母 S 表示 Start,如果第一个字母是 K,那么表示 Kill 关闭。中间两位数字表示处理顺序,数字越小表示处理越早。不建议直接手动修改 /etc/rcN.d 目录下的文件。这就要涉及到本文的重点,如何科学的管理Linux自启动脚本。

rcconf

使用命令 apt-get install rcconf 来安装, rcconf 使用了一个非常友好的界面来管理启动项,使用 sudo rcconf 就能看到一个开机启动时可以执行的程序列表,使用空格选中就能添加到开机启动,同理撤销选中就取消开机启动,最后OK,保存就行。rcconf 是 update-rc.d 命令的 TUI(Text User Interface)。

几个重要的文件

  • /var/lib/rcconf/services 用来保存服务启动number,如果服务的启动顺序不是 20(默认),那么 rcconf 会将服务的启动顺序保存到该文件中以备重新启用时恢复。
  • /var/lib/rcconf/lock Lock 锁
  • /var/lib/rcconf/guide 管理员用来定义的Guide

update-rc.d

上一个 rcconf 命令中就提到了其实 rcconf 就是这个 update-rc.d 命令的封装,update-rc.d 命令可以用来安装或者移除 init 脚本。

update-rc.d [-n] [-f] name remove
update-rc.d [-n] name defaults
update-rc.d [-n] name disable|enable [ S|2|3|4|5 ]

其中 -n 选项,不会做任何实际操作,但是会显示运行命令之后会执行的操作,可以用来检查命令。-f 命令可以记忆为 force 表示强行删除链接。

当执行该命令时,就是用将 /etc/rcN.d/[SK]NNname 指向 /etc/init.d/name ,如果有任何的 /etc/rcN.d/[SK]??name 存在的话,update-rc.d 不会做任何改动。

update-rc.d service enable
update-rc.d samba defaults
update-rc.d mysql defaults 10 10  # 启动优先级,顺序
update-rc.d apache2 start 10 2 3 4 5 . stop 90 0 1 6 .     # 指定优先级,启动时10,关闭时90,后面的 `2 3 4 5` 表示run level
update-rc.d -f samba remove       # 移除服务自启动 

sysv-rc-conf

使用命令安装 apt-get install sysv-rc-conf ,然后使用管理员运行 sudo sysv-rc-conf

systemctl

还有一个命令 systemctl 涉及太多 systemd 的内容,略过

手动

如果先要自己写一个服务,或者脚本开机启动,那么可以把文件放到 /etc/init.d/ 目录下,改权限

chmod +x /etc/init.d/startup.sh
ln -s /etc/init.d/startup.sh /etc/rc.d/

reference


2018-02-05 linux , startup , script , shell , command

每天学习一个命令:ed 行编辑器

ed 是一个面向行的文本编辑器。ed 命令还有一个严格的 red 命令,red 命令只能编辑当前目录中的文件,并且不能够执行shell命令。

当使用 ed 命令明确指定一个文件时,文件的一份拷贝被读入编辑器的缓存,所有的编辑都是保存在缓存中,而不是直接在文件中修改。如果退出 ed 却没有显示的使用 w 命令来保存修改的话,所有的修改内容都会丢失。

编辑的内容可以通过两种不同的方式:commandinput 两种模式。使用第一种命令模式时,ed 命令通过从标准输入读取命令并将修改执行在编辑器缓存中。一个典型的命令

,s/old/new/g

这一行命令会将文本中所有的 old 字符串替换为 new,这和vim中有些相似。

当使用命令输入比如,a(append), i(insert), c(change) 时,ed 编辑器会进入 input 模式,这意味着给文件添加内容。在这个模式中所有命令都不再支持,相反的,所有的输入都会被写到缓冲中。input 模式将在输入 . 时自动结束并退出。

ed 编辑器的命令针对的是整行,或者数行,比如,d 命令意味着删除行,m 命令意味着移动行。如果要修改某一行中的内容,唯一的方法就是使用替换,就和上面的例子中类似。例子中的 s 命令也是针对的整行。

通常来说,ed 编辑器包含0或者多行行序号,通常后面跟随着命令及参数,他的基本结构如下:

[address [,address]] command [parameters]

address 通常包含一行或者多行

Line Address

可以使用下面的方式来表示行序号,以下所有的行序号都是 buffer 缓冲中行序号:

Tag Description
. buffer 中 当前行
$ 最后一行
n 第 n 行,行的范围是 [0,$]
- or ^ 前一行
-n or ^n 前 n 行
+ or +n 后一行及后n行
, or % 全部行,等同于 1,$
; 当前行到最后一行 .,$
/re/ 下一个包含正则 re 的行
?re? 上一个包含正则 re 的行

Commands

所有的 ed 命令都是单个字符,一些需要其他额外的参数。如果命令跨越了多行,每一行都需要 \ 来结尾。p(print),l(list) 或者 n(enumerate) 打印。如果输入了 ed 不认识的命令,ed 会打印一个 ? 作为错误消息。

Command Description
(.)a 添加到行
(.,.)c 改变行
(.,.)d 删除行
(.)i 添加到行首

还有很多命令可以参考下面的链接。

通常情况下,输入数字开始的行号,可以直接跳转到该行。

脚本

ed 的一个更有趣的特征是脚本化编辑工作的能力,将编辑命令放到独立的文件中并将它们作为行编辑器的输入:

ed filename < ed_script

这个特征使得 ed 成为了可编程的编辑器,也就是说,可以脚本化任何手动执行的操作。

sed 是作为特殊目的的编辑器而创建,专门执行脚本,与 ed 不同,不能交互使用。 sed 与 ed 的主要区别在于它是面向字符流的。默认情况下 sed 的所有输入都会经过处理并且转为标准输出。输入文件本身并不发生改变。如果想要改变输入文件,一般使用 shell 的重定向。ed 不是面向字符流的,并且文件本身会发生改变,ed 脚本必须包含保存文件并且退出编辑器,不能输出到屏幕。

awk 是作为可编程的编辑器而开发的,同 sed 一样,面向字符流,并且解释编辑命令的脚本。awk 与 sed 不同的是它废弃了行编辑器的命令集,提供了仿效 C 语言的程序设计语言,例如使用 print 语句代替了p 命令,但延续了 寻址的概念

/regular/ { print }

用来打印匹配 regular 的行。脚本张使用程序语言的优点是提供了控制编程的语句,包括表达式,条件判断,循环等等结构。

reference


2018-02-02 linux , command , unix , ed , line , editor

电子书

Google+

最近文章

  • 使用 alembic 迁移数据库结构 Alembic 是一个处理数据库更改的工具,它利用 SQLAlchemy 来实现形成迁移。 因为 SQLAlchemy 只会在我们使用时根据 metadata create_all 方法来创建缺少的表 ,它不会根据我们对代码的修改而更新数据库表中的列。它也不会自动帮助我们删除表。 Alembic 提供了一种更新 / 删除表,更改列名和添加新约束的方法。因为 Alembic 使用 SQLAlchemy 执行迁移,它们可用于各种后端数据库。
  • 每天学习一个命令:iotop 查看 Linux 下每个进程 IO 占用 iotop 是一个用来监控磁盘 I/O 的类似 top 的工具,Linux 下 IO 统计工具,比如 iostat, nmon 等只能统计到每个设备的读写情况,如果想要知道哪一个进程占用比较高的 IO 就要使用 iotop。 iotop 使用 Python 语言编写,要求 Python >= 2.5,Linux Kernel >= 2.6.20.
  • 修正关于 HTTP Header 的错误认识 HTTP 请求的 Header 是不区分大小写的!,一直以为 HTTP 请求的请求头是有区分大小的,知道今天调试发现 Spring 将 header 全部处理成小写,然后有人提了 Bug 58464 然后看到 Stackoverflow 上面有人回答。
  • 解决 failed to create bus connection no such file or directory 错误 今天在修改 hostname 使用 sudo hostnamectl set-hostname ds 命令时遇到问题:
  • Vim 的颜色主题 Retro groove color scheme for Vim