通常情况下,我们并不使用 docker commit
方法来构建镜像,而是使用 Dockerfile
的定义文件和 docker build
命令来构建镜像。更多 Docker 入门 的内容可以参考之前的文章。
每条指令都会创建一个新的镜像层并对镜像进行提交,Docker 大致上按照下面的流程执行 Dockerfile 中的指令:
常见的命令 RUN
,EXPOSE
之外,Dockerfile 还支持其他很多指令。
CMD 指令用于指定容器启动时要运行的命令,类似 RUN,但是 RUN 指令是指镜像被构建时要运行的命令,而 CMD 是指定容器被启动时要运行的命令。运行的命令放在一个数组结构中
docker run
命令可以覆盖 CMD 指令
如果 Dockerfile 有多个 CMD 指令,只有最后一个会生效。
CMD 指令有很多种格式,最常见,也是官方推荐的格式是:
CMD ["executable", "param1", "param2", ...]
ENTRYPOINT 指令和 CMD 指令非常类似,之前说过 CMD 指令会被 docker run 命令覆盖,而 ENTRYPOINT 指令提供的命令不容易在启动容器时被覆盖。实际上, docker run 命令行中的指定的任何参数都会被当做参数再次传递给 ENTRYPOINT 指令中指定的命令。
ENTRYPOINT 可以让容器以应用程序或者服务的形式运行。
ENTRYPOINT 也有很多使用方式,比较推荐的是:
ENTRYPOINT ["executable", "param1", "param2" ]
WORKDIR 指令用来在从镜像创建一个新的容器时,在容器内部设置一个工作目录,ENTRYPOINT 或 CMD 指定的程序会在该目录下执行。
可以通过 -w
参数在运行时覆盖工作目录
sudo docker run -it -w /var/log ubuntu pwd
ENV 指令用来在镜像构建过程中设置环境变量,新的环境变量能在后续任何 RUN 指令中使用。
ENV RVM_PATH /home/rvm
同样也可以使用 -e
参数赖在运行时添加环境变量。
USER 指令用来指定镜像会以什么用户去运行
USER nginx
镜像会以 nginx 用户去运行,同样也可以使用 -u
选项来覆盖该指令
VOLUME 指令用来像基于镜像创建的容器添加卷,一个卷可以存在一个或者多个容器内的特定目录,这个目录可以绕过联合文件系统,提供共享数据或者对数据持久化功能。
卷功能让我们可以将数据,比如源代码,数据库等其他持久化内容添加到镜像中,而不是预先将这些内容提交到镜像内部,卷允许我们在多个容器间共享内容,可以利用此功能测试容器和内部应用代码,管理日志,处理内部数据库等等。
VOLUME ["/opt/project"]
该指令会基于此镜像创建的任何容器创建一个名为 /opt/project
的挂载点。
ADD 指令用来将构建环境下的文件和目录复制到镜像中。
ADD 指令通过目的地址参数末尾的字符来判断文件源是目录还是文件,如果目标地址以 /
结尾,那么 Docker 就认为源地址指向的是一个目录,如果目的地址不是 /
结尾,那么源地址就是文件。
COPY 指令和 ADD 很类似,根本不同是 COPY 只关心在构建上下文中复制本地文件,而不会去做文件提取和解压的工作。
如果目的位置不存在, Docker 会自动创建所需要的目录结构
ONBUILD 指令能为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,该镜像中的触发器会被执行。触发器会在构建过程中插入新指令,我们认为这些指令是紧跟 FROM 之后执行的。触发器可以是任何构建指令。
mysql 是 Docker 和 MySQL 官方提供的一个镜像。
拉取镜像
docker pull mysql
启动镜像
docker run --name first-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
这样就创建了一个名为 first-mysql
的 mysql 5.7 实例。
docker exec -it first-mysql bash
日志
docker logs first-mysql
当启动 mysql 容器时,可以传入环境变量来改变容器的配置:
MYSQL_ROOT_PASSWORD
:必须。用于设置MySQLroot用户的密码MYSQL_DATABASE
:可选。用于指定镜像启动容器时要创建的数据库。如果提供了用户/密码,则会将该用户做为此数据库的超级用户。MYSQL_USER
,MYSQL_PASSWORD
:可选。用于创建一个新用户并设置密码。MYSQL_ALLOW_EMPTY_PASSWORD
:可选。设置为yes时,则可以使用空密码登录MYSQL_RANDOM_ROOT_PASSWORD
:可选。设置为yes时会为root用户设置一个随机密码(使用pwgen),所生成的随机密码会被输出到stdoutMYSQL_ONETIME_PASSWORD
:可选。为root用户指定一个一次性密码,该密码会在用户首次登录时强制修改mysql 镜像创建容器时,数据库存储会以下面两种方式存储:
使用外部数据卷时,假设宿主机有 /my/data/ 目录,可以使用 -v
选项来讲宿主机挂载到容器:
docker run --name mysql -v /my/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
数据备份
docker exec first-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
官方的镜像中导出的是默认 3306 端口,其他容器可以使用 --link
参数来连接mysql容器
docker run --name other-app --link first-mysql:mysql -d other-application-use-mysql
任何服务器监控是一项很重要的事情,以前在 VPS 上一直使用 nodequery ,虽然设置方便简洁,但是数据不够详细也是他很大问题,所以经过一番寻找又发现了这个 [[Netdata]]。下面是 netdata 一系列的特性
官方提供了一些列的 demo : https://my-netdata.io/
按照下面的教程安装:
现在官方也提供了 Docker 的方式安装,更加方便。
upstream backend {
server 127.0.0.1:19999;
keepalive 64;
}
server {
listen 80;
listen [::]:80;
index index.html index.htm index.nginx-debian.html;
server_name status.einverne.info;
auth_basic "Protected";
auth_basic_user_file passwords;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
主要配置如上,可以加上一个密码保护,具体 Nginx 的配置 可以参考链接。
htpasswd -c -d /etc/nginx/passwords yourusername
这行命令中的 passwords
就是之前 Nginx 配置中的 auth_basic_user_file
后的参数,通过该选项设置用户名密码。
netdata 是不提供卸载脚本的,如果要在系统中删除,可以使用如下
killall netdata
apt-get remove zlib1g-dev gcc make git autoconf autogen automake pkg-config
rm -Rf /usr/sbin/netdata
rm -Rf /etc/netdata
rm -Rf /usr/share/netdata
rm -Rf /usr/libexec/netdata
rm -Rf /var/cache/netdata
rm -Rf /var/log/netdata
rm -Rf /opt/netdata
userdel netdata
Docker Compose 是一个定义和启动多容器的工具,可以使用 Compose 来管理多个 Docker 容器。Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Docker Compose 使用 YAML 文件定义应用,之后可以使用一行简单的命令来创建或者启动所有的服务。
Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器,但往往实际应用可能包含不止一个容器,常见的 Web 容器通常还包括一个数据库容器。Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:
docker-compose.yml
文件中定义使用 Compose 可以简单的归纳为三步
docker-compose up
来启动整个服务常见的 docker-compose.yml
文件如下:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Compose 依赖于 Docker Engine,所以确保安装 Compose 之前 Docker 已经在本地安装成功。安装 Compose 非常简单,将编译好的二进制文件下载到本地即可,查看compose 的github release 页面 获取最新版本:
sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
具体例子可参考官网或者 https://github.com/einverne/dockerfile/ 项目下有 compose-start
文件夹,其中包含示例代码:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
在该文件夹下使用 docker-compose up
启动服务。使用 docker-compose down
关闭。如果想要在后台执行添加 -d
选项 docker-compose up -d
。
如果 docker 用户不存在,创建docker 用户组
sudo groupadd docker
将当前用户添加到docker 用户组:
sudo usermod -aG docker [non-root user]
Compose 命令的对象是项目本身,也可以为项目中的服务或者容器,默认为项目。 服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。
命令选项:
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
docker-compose up # 自动完成构建镜像,创建服务,启动服务,并关联服务等操作
docker-compose down
docker-compose start # 启动存在的服务
docker-compose stop # 停止
docker-compose restart # 重启项目中服务
docker-compose exec # 进入指定容器
docker-compose help
docker-compose image # 列出 Compose 文件中包含的镜像
docker-compose kill [SERVICE...]
docker-compose pause [SERVICE...]
docker-compose unpause [SERVICE...]
docker-compose ps # 列出项目中所有容器
大部分时候都可以直接通过该命令来启动一个项目,默认情况,docker-compose up
启动的容器都在前台,控制台将会同时打印所有容器的输出信息。
当通过 Ctrl-C 停止命令时,所有容器将会停止。如果使用 docker-compose up -d
,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
docker-compose up -d # 后台执行
此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose # 移除停止的容器
docker-compose -v # 此选项会移除 volumns 中定义的卷,千万小心
举例
> docker-compose down -v
Removing wordpress ... done
Removing wordpress_db ... done
Removing network wordpress_wordpress-network
Removing volume wordpress_db_data
重构项目中容器
docker-compose build [options] [SERVICE...]
删除所有停止状态的服务容器。
docker-compose rm [options] [SERVICES ..]
验证 Compose 文件格式是否正确
docker-compose config
默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。大部分的指令和 docker run
的含义是一样的。
指定镜像名或者镜像ID,如果本地不存在,Compose 会拉取该镜像
image: ubuntu
数据卷挂载设置,可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)
volumes:
- /var/lib/mysql
暴露端口信息,使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)
更多详细可参考: https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html
很早以前写过一篇文章,为了寻找Evernote 的代替品,两年过去了,我也认认真真地用了两年的的为知笔记。说实话现在再来说为知笔记确实有些晚,很早很早以前就有很多人推荐为知笔记。
但是经过两年使用,加上最新 2.5.8 的版本更新,让我不得不出来说一说 WizNote,早在之前的文章中提到过,因为 WizNote 提供 Linux 版本的客户端,所以让我一直能够用下去。我一直坚信的一点就是做产品,一定是做到一个服务,让用户选择一个服务,能够不考虑其使用成本,也就是不管我是在 Windows ,Mac 还是 Linux,或者是 Android 或者 iOS 我都能够快速获取服务提供的内容,这才是一个真正好的产品。当然所有的笔记类产品中只有 WizNote 做到了。当然这里其实还要提一嘴网易云音乐,太良心了这两家公司。WizNote 不说其他的功能在一定程度上超越 Evernote,但就跨平台,多设备同步这一点就比 Evernote 好过不止一点。更不用说支持markdown,支持语法高亮,支持pdf,html导出等等非常良心的功能。
最新 WizNote 更新一个 Linux 的 AppImage 版本,虽然这个版本绿色,下载直接可以使用,但是带来一个问题就是,无法建立快捷方式,我的快速启动突然失效,让我有些失望。AppImage 格式是一种新的Linux程序封装方法。AppImages 是便携的——它们无需安装即可运行在大多数Linux发行版上。所有的依赖包均包含于一个AppImage文件。但是这个 AppImage 文件必须每一次都让我去目录下手动执行,这个让我非常不爽,于是找到了下面的解决方法,手动创建一个快捷方式,使用该快捷方式启动 WizNote。
如果使用 GNOME,可以安装包 sudo apt-get install --no-install-recommends gnome-panel
,然后使用如下命令:
gnome-desktop-item-edit ~/.local/share/applications --create-new
该命令会弹出一个对话框,输入一些必要的参数,保存即可,该命令会在 ./local/share/application/
目录下新建一个 WizNote.desktop
的文件
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application # type
Icon=wiznote # location of icon file
Terminal=false # whether this app requires to be run in a terminal.
Name[en_US]=WizNote
GenericName=WizNote # longer name of the app
Exec=/home/einverne/app/WizNote-2.5.8-x86_64.AppImage # command used to launch an app
Name=WizNote
Categories=WizNote; # categories in which this app should be listed.
GenericName[en_US.UTF-8]=WizNote
另外一个令我不爽的就是,在这个版本发布之后一段时间后我在 Linux 上的 PPA 安装的版本突然之间无法登录并无论多少次重新登录都说我密码错误,无法登录。即使说因为新版本,或者是因为同步机制升级,导致老版本的同步失效,也应该给予一个正确的提示,而不是说密码错误,我的密码并没有输入错误或者记错,因为网页版,Android/iOS 端都是正常登录的,而仅仅给个密码错误的提示会误导用户。虽然安装了新版本的 WizNote 这依然浪费了很多的时间,还有让我吐槽浪费更多的时间。
这有回到了文章开头我的观点,作为一个服务(产品),应该提供的是用户随时随地可获取的服务,所有的更新升级对用户应该都是透明的,用户不应该关心版本升级可能带来的任何问题,有很多时候我非常反感一个产品突然拿掉一些功能,虽然可能在一定程度上可能已经脱离公司发展轨迹,但其实对一些用户还是有着深刻的影响的。所以很多时候在考虑深度使用一个产品(服务)的时候,我一般都会考虑在这个产品的数据有没有备份或者导出的途径,如果没有任何可以导出或者备份的功能,一般情况下也就淘汰了这个服务。
说了这么多,其实 WizNote 还是目前我深度使用的一个服务,我真心的希望他会越来越好,也能够继续维护这么多版本的开发。最后真心地祝愿。
一年前使用 kindle 的时候有 kindle10000 ,还有无数的 kindle push 网站,去年突然全部一下子都关闭了,这一年多来,陆陆续续又发现了一些很不错的站点。现在整理整理分享一下。我电脑中还有大概五六十 G 的当年 kindle 人倒闭时全站资源的打包只是一直都还么有时间建立索引,整理出来,有时间还是要整理一下的。
Anna’s Archive 是一个非盈利的、开源的 Shadow library 搜索引擎,可以搜索 Z-library 的内容。
https://manybooks.net/
一个电子书搜索引擎,聚合了一些常见的网站。
https://worldmiao.com/
http://mebook.cc/
以网盘下载为主
可以用来推送电子书到 Kindle 邮箱
2019 年 11 月更新,小书屋也不在了。愿站长一切安好!
强烈推荐的站点,几乎 kindle10000 之后就是他了。
http://www.kindlepush.com
书籍比较全,每天可推送两本,下载一本
2018-08-01 更新 kindlepush 网站也关站了,基本上也应该是盗版的原因吧,现在的资源站基本上只要做大了也就面临着闭站的风险了。
基于 IPFS 的电子书索引
https://book.tstrs.me/
很早之前因为一些 Kindle 相关的文章而关注了,后来也陆陆续续的有一些好书分享。
https://bookfere.com/
http://vol.moe/
http://www.kindlecomic.net/
记得以前不叫这个名字的,可推送漫画,漫画比较全,有连载。
看站点应该只是个人在维护的。
https://bookset.me/
2019 年 9 月 1 日更新,看来是也不存在了。
有品格的数字古籍图书馆
https://new.shuge.org/
寻找古籍的最佳选择。
一个电子书在线转换工具,也提供热门书的下载和推送。
http://cn.epubee.com/
一个类似论坛的分享网站
https://www.cnepub.com/
https://www.soepub.com/
这也是个人站长维护的电子书分享站点
http://51kindle.me/
www.kindle178.com
这是一个杂志的合集,需要付费
http://www.gqzzw.com/
http://readfree.me/
书籍比较全,相同书籍有不同版本,可推送到 kindle,可下载,可共享图书
2019 年 7 月更新
终于 readfree 也挺不住了,也不知道是抓版权呢,还是在禁止出版物。
非常像 readfree
http://www.iread.cf/
http://book.zi5.me/
可推送,可下载,注册用户可以共享电子书,网站由 WordPress 所写。
https://www.jiumodiary.com/
主要是微博网盘和百度网盘共享书籍,质量层次不齐
少量的电子书,基本都在百度网盘
http://www.olecn.com/category/book/
这是一个面向英文阅读者的 PDF 分享网站,托管了很多高清的 PDF 资源。
https://www.pdfdrive.com/
Library Genesis 是科学论文和书籍搜索引擎,是一款非常好用的学术(盗版)书网站,以英文语言作品为主,辅以法、德、日、西、葡、意、俄、阿、土等语言作品。1
英语电子书及有声书
个人维护的,基本和计算机相关,大部分都是英文图书
https://salttiger.com/
以区块链为依托,每天 10 本免费下载,目前藏书量已经十几万。
https://ebook.lorefree.com/
也是一个个人维护的站点
http://www.booklist.mobi/
英文 PDF
https://epdf.tips/
https://manybooks.net/
http://www.haodoo.net/
http://www.iamtxt.com
www.wode5.com
https://skebooks.com
http://kgbook.com/
英文书为主,非常大的库
https://b-ok.cc/s/
全站免费,全站度盘。书籍质量较高,有封面,目录,不过令人担忧的是度盘,随时可能失效
https://epubw.com/
https://www.bandubook.com/
https://enjing.com
全国图书馆参考咨询联盟
http://www.ucdrs.superlib.net/
读秀
http://www.duxiu.com
需邀请码http://www.woyushu.com
已经关闭。
这是我自己建的站,我一直有在整理我硬盘上的电子书,但是无奈并没有那么多的 VPS 来存放这些书,抓了十几万条豆瓣的条目,有些已经从豆瓣完全消失了,希望这里有个地方存留一些记忆。
https://book.einverne.info
最后,在能力范围内请支持正版。个人已买 Kindle Unlimited,部分书籍能够买到也尽量会购买。部分不会发行的电子书用来在 Kindle 上读。
这里的一些站点未经验证,可以自行参考选择
内酷网 http://neikuw.com 通过百度网盘分享电子书
恩京书房 https://www.enjing.com 界面非常好,提供多种格式下载
三秋书屋 https://www.d4j.cn 新站,通过百度网盘下载
sobooks https://sobooks.cc kindle电子书社区
沉金书屋 https://www.chenjin5.com 需关注公众号才能下载
火岸电子书 https://huoan.net 书不多,网盘分享
电子书根据地 http://www.66books.cn 需关注微信公众号才能下载
相识电子书 http://www.xiangshi123.com 通过百度网盘分享,有些失效了
电子书基地 http://www.dzs.so 书不多,更新慢
爱悦读 https://www.iyd.wang 量少,有一阵子未更新
看kindle https://www.lookkindle.com 需注册,部分资源需付费
花卷妈 http://www.huajuanma.com 专注儿童电子书资源
知识库 https://book.zhishikoo.com 界面友好,无需注册,通过百度网盘下载
逗分享 http://book.idoubi.net 广告多,下载比较麻烦
读书达人 http://www.dushudaren.com 需关注微信公众号
书山有路 http://www.ssylu.com 博客式电子书分享下载站
壹书 http://www.onebooks.cn 有书单有资源
微米电子书分享 https://www.dzsfx.com 通过网盘分享
rejoice博客 http://www.rejoiceblog.com 博客式电子书下载站
锐读网 https://www.readuu.com 通过百度网盘分享
精品电子书 https://dylanbai8.github.io/ideahub 基于github,约10G电子书,都是2015年前的
技术电子书 http://jsebook.com 技术类书籍,下载需注册登陆,书不多
书栈网 https://www.bookstack.cn 开源IT类书籍、文档分享站
码农电子书 https://book.mzh.ren IT类书站,书少(已停更)
SaltTiger https://salttiger.com 每天一本编程书
我的黄金屋 http://goldroom.top 需注册
风陵渡书屋 http://www.eybook.com 新站
掌上书苑 https://www.soepub.com 需注册
我爱书籍 http://www.52book.me 分类较简单
AIBOOKS https://aibooks.club 需关注微信公众号获取提取码
Moreread http://moreread.me 数不多,需注册,可推送
kindlefree http://www.kindlefree.cn 不提供下载,注册后推送
kindle吧 https://www.shuyingyin.com 书站导航
辣豆瓣 http://ladouban.com 界面友好,有书单书摘
分享 http://book.share2uu.com 书籍数量不小
推书圈 http://www.vzhuanba.com 新站,书较少
三分钟书屋 https://www.sanfenzhong.net 模仿我的小书屋,已断更数月
书堆阅读 https://www.werebook.com 书不算太多
芒果读书 http://diumx.com 精校电子书,需注册
千秋书在 https://www.qqszz.com 游客可免费下载
书聚 http://ebookg.com 需付费
图书网 http://www.ziliaoh.com 资源尚可
书单 https://ebooklist.mobi 需关注微信公众号才能下载
KDBooks https://www.kdlbook.cn 需关注公众号,获取验证码
爱分享读书 http://www.ishareread.com 需注册
电子书下载 https://bookzhai.com 新站,量不大,而且有一阵子没更新
Nmod https://www.nmod.net 书不多,但好在质量不错
淘书党 https://www.taoshudang.com 大部分书需关注微信公众号后才能下载,而且还得看站长时间
点书网 http://www.gezhongshu.com 需注册登录,免费下载次数有限
读书小站 https://ibooks.org.cn 确实是小站,更新较慢
辣豆瓣 http://ladouban.com 每本书读提供了豆瓣评分,需关注网站微信公众号获取密码下载
Iread http://www.iread.cf 需要注册,免费用户一天可下载三本
zure https://zure.fun 需注册,还不错
走读派 http://www.zoudupai.com 书站导航
Kindle伴侣 https://bookfere.com 为净心阅读而生
多读 http://www.duodu.cc
北海市图书馆 http://www.bhlib.com
书格 https://new.shuge.org 古籍类书籍
电子书资源网 https://bookresource.net
静思书屋 https://book.tinynews.org
苦瓜书盘 https://www.kgbook.com
看医学 http://www.kanyixue.com 医学类书籍
Thefuture书籍搜索 https://bks.thefuture.top
偶书 https://obook.cc 小站,书单不错
熊猫搜书 https://xmsoushu.com
Mox.moe https://vol.moe 漫画类书站
阅读链云盘 https://cloud.yuedu.pro
书享家 https://shuxiangjia.cn
图灵社区免费书籍 https://m.ituring.com.cn/book?tab=free&sort=new IT类书籍
七彩英语 http://www.qcenglish.com 英文电子书下载站
PDF之家 http://www.pdfzj.cn
译言图书 http://book.yeeyan.com
E书联盟 https://www.book118.com/index.html PDF电子书
云海电子图书馆 http://www.pdfbook.cn
我爱读电子书 https://www.aixiaxs.com
无名书站 http://www.gqzzw.com
数理 https://book.sciencereading.cn
瑞文网教材 https://www.ruiwen.com/jiaocai/
LoreFree https://ebook2.lorefree.com
Zlibrary https://z-lib.org
Libgen http://libgen.rs
古腾堡 https://www.gutenberg.org
ManyBooks https://manybooks.net
https://www.douban.com/note/651658406/
http://gen.lib.rus.ec http://libgen.io http://libgen.pw ↩
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 时,默认将文件移动到垃圾箱中,再不会发生不小心删除文件之后无法找回的问题。
认识我的人都是知道我一直使用 RSS 订阅信息,但是互联网越来越闭塞的现在,每一家公司都在自建后花园,把所有的信息封闭在内部,几乎现在没有任何内容型平台提供 RSS 输出了,所以也才有了这篇文章。以前我使用的微博转 RSS 的服务大都已经挂掉,唯一一家微博档案最近也似乎有些危险。不过幸好查到下面两个项目,让微博定义 RSS 不在困难。
我使用了第二个项目,安装过程可以参考下文,都是使用 nodejs 实现,如果手动安装需要手动配置一下环境。
安装 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 指令配置请求转发。
查找的动作在平时使用的频率也还是很高的,所以知道并用好 find
这个命令也很重要。find
命令顾名思义,就是搜索特定文件夹内的文件。当然后来用了 fzf 日常使用比 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 devicesb
块设备文件 block devices比如要查找系统中所有以 .conf
结尾的文件
find / -type f -name "*.conf"
find /path/to/folder -size 50M
查找 50M 的文件,size
后能够使用的单位有:
b
512byte blocksc
byte 字节w
two bytek
kB 千字节M
MBG
GBsize
后面的参数可以使用 +
或者 -
或者不加来标识,超过,少于,或者正好。
find / -size +700M # 表示查找大于 700M 的文件
find / -size -50c # 表示查找小于 50 byte 的文件
find . -size 50M # 表示在当前目录查找正好 50M 的文件
Linux 会存储下面的时间:
在按照时间查找时,可以使用 -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 了。
使用 -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 {} \; # 批量修改文件夹权限
综合上面按时间查找文件和对搜索结果批处理,可以获知
find /path/to/folder/* -mtime +1 -exec rm {} \;
-mtime +1
表示的查找时间超过 1 天的内容-exec
后面表示对搜索的结果进行处理或者直接使用 -delete
:
find /path/to/folder/* -mtime +1 -delete
find path/to/folder -type d -empty -print
find path/to/folder -type d -empty -delete
locate
命令需要额外安装
sudo apt install mlocate
locate
命令维护了一份文件和目录的数据库,所以检索速度会快一些,数据库通常一天更新一次,可以手动更新数据库
sudo updatedb
locate -S # 查看当前数据库数据
locate
使用的方式和 find
大致差不多。
之前因为学习 Docker 也总结了一批经常使用的 Docker 命令 然后回头过来看唯独漏掉了 Docker 监控的一块,一方面也是当时看的文档并没有覆盖到这个领域,另一方面也是最近看到 Google cAdvisor 才开始注意到 Docker 监控的命令。
直接运行,查看所有当前运行的 Docker 状态及资源消耗
docker stats
该命令执行后会返回下列数据
查看容器中启动的进程
docker top [CONTAINER] [ps options]
使用如下命令查看容器日志
docker logs [OPTIONS] CONTAINER
使用参数 -f
来追踪打印未来的日志
docker logs -f CONTAINER