使用 docker compose 管理多个容器

Docker Compose 是一个定义和启动多容器的工具,可以使用 Compose 来管理多个 Docker 容器。Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Docker Compose 使用 YAML 文件定义应用,之后可以使用一行简单的命令来创建或者启动所有的服务。

Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器,但往往实际应用可能包含不止一个容器,常见的 Web 容器通常还包括一个数据库容器。Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

Compose 中有两个重要的概念:

  • 服务 (service):应用容器,实际上可以包括若干运行相同镜像的容器实例
  • 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义

使用 Compose

使用 Compose 可以简单的归纳为三步

  • 定义应用的 Dockerfile
  • 定义服务 docker-compose.yml 文件
  • 执行 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

命令使用

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          # 列出项目中所有容器

up

大部分时候都可以直接通过该命令来启动一个项目,默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息。

当通过 Ctrl-C 停止命令时,所有容器将会停止。如果使用 docker-compose up -d,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。

docker-compose up -d        # 后台执行

down

此命令将会停止 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

build

重构项目中容器

docker-compose build [options] [SERVICE...]

rm

删除所有停止状态的服务容器。

docker-compose rm [options] [SERVICES ..]

config

验证 Compose 文件格式是否正确

docker-compose config

Compose 模板文件

默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。大部分的指令和 docker run 的含义是一样的。

image

指定镜像名或者镜像ID,如果本地不存在,Compose 会拉取该镜像

image: ubuntu

volumes

数据卷挂载设置,可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)

volumes:
 - /var/lib/mysql

ports

暴露端口信息,使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)

更多详细可参考: https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html

reference


2018-02-15 docker , dockercompose , linux

Wiznote 为知笔记

很早以前写过一篇文章,为了寻找Evernote 的代替品,两年过去了,我也认认真真地用了两年的的为知笔记。说实话现在再来说为知笔记确实有些晚,很早很早以前就有很多人推荐为知笔记。

但是经过两年使用,加上最新 2.5.8 的版本更新,让我不得不出来说一说 WizNote,早在之前的文章中提到过,因为 WizNote 提供 Linux 版本的客户端,所以让我一直能够用下去。我一直坚信的一点就是做产品,一定是做到一个服务,让用户选择一个服务,能够不考虑其使用成本,也就是不管我是在 Windows ,Mac 还是 Linux,或者是 Android 或者 iOS 我都能够快速获取服务提供的内容,这才是一个真正好的产品。当然所有的笔记类产品中只有 WizNote 做到了。当然这里其实还要提一嘴网易云音乐,太良心了这两家公司。WizNote 不说其他的功能在一定程度上超越 Evernote,但就跨平台,多设备同步这一点就比 Evernote 好过不止一点。更不用说支持markdown,支持语法高亮,支持pdf,html导出等等非常良心的功能。

最新 WinNote 更新一个 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 还是目前我深度使用的一个服务,我真心的希望他会越来越好,也能够继续维护这么多版本的开发。最后真心地祝愿。


2018-02-14 wiznote , notebook , multi-platform , notes

免费的电子书站点收集

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

我的小书屋

http://mebook.cc/

以网盘下载为主

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

2019 年 11 月更新,小书屋也不在了。愿站长一切安好!

集思会

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

http://www.kindlepush.com

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

2018-08-01 更新 kindlepush 网站也关站了,基本上也应该是盗版的原因吧,现在的资源站基本上只要做大了也就面临着闭站的风险了。

i-book.in

基于 IPFS 的电子书索引

https://book.tstrs.me/

书伴

很早之前因为一些 Kindle 相关的文章而关注了,后来也陆陆续续的有一些好书分享。

https://bookfere.com/

漫画

http://vol.moe/

kindle 漫画

http://www.kindlecomic.net/

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

bookset 我的精品书库

看站点应该只是个人在维护的。

https://bookset.me/

2019 年 9 月 1 日更新,看来是也不存在了。

书阁

有品格的数字古籍图书馆

https://new.shuge.org/

寻找古籍的最佳选择。

epubee

一个电子书在线转换工具,也提供热门书的下载和推送。

http://cn.epubee.com/

掌上书苑

一个类似论坛的分享网站

https://www.cnepub.com/
https://www.soepub.com/

我要 kindle 电子书

这也是个人站长维护的电子书分享站点

http://51kindle.me/

kindle178

www.kindle178.com

高清杂志

这是一个杂志的合集,需要付费

http://www.gqzzw.com/

readfree

http://readfree.me/

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

2019 年 7 月更新

readfree farewell

终于 readfree 也挺不住了,也不知道是抓版权呢,还是在禁止出版物。

iread

非常像 readfree

http://www.iread.cf/

子乌书简

http://book.zi5.me/

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

鸠摩搜索

https://www.jiumodiary.com/

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

olecn

少量的电子书,基本都在百度网盘

http://www.olecn.com/category/book/

其他

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

http://plugin.mlook.mobi/

周读,资源都是放在百度盘上的

http://ireadweek.com/

PDFDRIVE

这是一个面向英文阅读者的 PDF 分享网站,托管了很多高清的 PDF 资源。

https://www.pdfdrive.com/

Library Genesis

Library Genesis 是科学论文和书籍搜索引擎,是一款非常好用的学术(盗版)书网站,以英文语言作品为主,辅以法、德、日、西、葡、意、俄、阿、土等语言作品。1

English e-Reader

英语电子书及有声书

  • https://english-e-reader.net/level/pre-intermediate

SaltTiger

个人维护的,基本和计算机相关,大部分都是英文图书

https://salttiger.com/

lorefree

以区块链为依托,每天 10 本免费下载,目前藏书量已经十几万。

https://ebook.lorefree.com/

booklist.mobi

也是一个个人维护的站点

http://www.booklist.mobi/

epdf

英文 PDF

https://epdf.tips/

manybooks

https://manybooks.net/

好读

http://www.haodoo.net/

imatxt

http://www.iamtxt.com

wode5

www.wode5.com

SkEbooks

https://skebooks.com

苦瓜书盘

http://kgbook.com/

b-ok

英文书为主,非常大的库

https://b-ok.cc/s/

epubw

全站免费,全站度盘。书籍质量较高,有封面,目录,不过令人担忧的是度盘,随时可能失效

https://epubw.com/

enjing

https://enjing.com

一些聚合搜索网站

全国图书馆参考咨询联盟

http://www.ucdrs.superlib.net/

读秀

http://www.duxiu.com

woyushu

需邀请码

http://www.woyushu.com

我自己的站

这是我自己建的站,我一直有在整理我硬盘上的电子书,但是无奈并没有那么多的 VPS 来存放这些书,抓了十几万条豆瓣的条目,有些已经从豆瓣完全消失了,希望这里有个地方存留一些记忆。

https://book.einverne.info

计算机相关

  • https://github.com/justjavac/free-programming-books-zh_CN
  • 相关 Kindle 的 tips

最后,在能力范围内请支持正版。个人已买 Kindle Unlimited,部分书籍能够买到也尽量会购买。部分不会发行的电子书用来在 Kindle 上读。

  1. https://www.douban.com/note/651658406/

    http://gen.lib.rus.ec http://libgen.io http://libgen.pw 


2018-02-13 books , free , website , kindle , pdf , mobi , epub

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 命令顾名思义,就是搜索特定文件夹内的文件。当然后来用了 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 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 GB

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

find / -size +700M   # 表示查找大于 700M 的文件
find / -size -50c    # 表示查找小于 50 byte 的文件
find . -size 50M     # 表示在当前目录查找正好 50M 的文件

通过时间来查找文件

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 后面表示对搜索的结果进行处理

删除目录下空文件夹

find path/to/folder -type d -empty -print
find path/to/folder -type d -empty -delete

使用 locate

locate 命令需要额外安装

sudo apt install mlocate

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

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

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

reference


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

监控 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 筛选过滤重复的行

uniq 命令从标准输入读取过滤邻近的相同的行,然后写回标准输出,在此过程中 uniq 会将重复的行 merge 合并到第一个结果中,所以 uniq 可以用来排除文件中重复的行。因此 uniq 经常和 sort 合用,先排序,然后使用 uniq 来过滤重复行。

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

基本使用

命令格式:

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

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

uniq 的基本使用如下:

一些常用参数

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

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

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

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

实例

假设有如下四行在文件 cat file.txt 中:

uniq line
repeat line
test line
repeat line

打印重复行的数量

最为常用的 -c 选项,可以打印重复行的数量

sort file.txt | uniq -c
  2 repeat line
  1 test line
  1 uniq line

打印重复的行

使用 -d 打印重复的行,那么不重复的行就不会输出

sort file.txt | uniq -dc
  2 repeat line

仅显示不重复的行

显示不重复的行 -u

sort file.txt | uniq -u
test line
uniq line

跳过行开头字符

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

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

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

电子书

最近文章

  • 使用 assh 来管理 SSH config 前两天一直在思考如何管理我的 SSH config 配置,最后的解决办法就是通过 git 版本管理起来。但这两天由冒出一个新的问题,那就是经常在国内直连 aws 或者 oracle 的机器时 ssh 连不上,但是通过国内的 VPS 中转就非常快,那这就意味着,我每一次连接国外的机器时必须先登录腾讯云的机器,然后在从腾讯云的机器上连过去,有些麻烦,但那天在 Twitter 上看到有人分享了一个 SSH 管理的命令行工具 assh,大致的看了一下使用简介,通过配置就可以完美的解决这个问题。
  • 备份和恢复从 Chrome Webstore 中下架的 Google Chrome Extension 这两天重装系统同步 Chrome 的数据才发现,我一直使用的 Dream Afar New Tab 这个我用了很久的扩展从 Chrome Webstore 消失了,不清楚是 Google 主动下架,还是作者很久没有更新被 Webstore 下了还是为什么。但这个扩展经过了很多的 Chrome 版本依然运行良好至今为止都能每天给我提供世界不同地方的美景。
  • Docker 网络与容器互联 简单整理一下 Docker 中 network 子命令,以及 docker 中相关 network 方面的内容。
  • MacBook Pro 初始设置记录 这里就简单的记录一下我从 Linux Mint 迁移到 MacOS 根据我的个人需求来初始化新的 MacBook Pro 的一些设置,和一些基本的感想。下面的内容会按照我自身的需求出发,我会列举我想要的功能然后在此基础上我需要借助哪些工具来实现。在切换到 MacBook Pro 之前,我使用了大约 6 年多的 Linux Mint,我已经有一套我自己的 Workflow,在切换到 Mac OS 之前我就在想哪一些的事情我是必须有 Mac 的软硬件才能做到,并且很提高某一方面的效率的,我列了一些
  • 多设备间同步 ssh 配置及密钥 ssh 客户端会在用户目录 ~/.ssh/ 目录下存放配置信息 (~/.ssh/config) 和公钥和私钥,如果有多个设备不同设备间的同步和管理就会成为一个比较头疼的问题。我在 Reddit 上抛出这个问题 后,我本来想的是通过 git 版本控制来进行管理,但有人说因为公钥和私钥都是二进制的文件,其实没有必要使用 git,任何一个同步工具就能够解决。