Mac 更改默认的截图文件格式 - 少数派

我属于对截图格式不敏感的那部分人。然而 png 格式对于我这种写 blog 的人来说,还是太大了,所以转载了这篇做个备忘。原文地址为:https://sspai.com/post/26321,以下是原文:

我在 之前一篇文章 详细地讲解了如何在 OS X 上玩转截图,尤其是使用快捷键组合,方便至极。要知道,Mac OS X 默认的截图文件格式为「.png」。这一格式非常棒,图片质量非常高,还可以包含透明背景,但是往往这一格式的图片文件相对于其他常见的图片文件格式来说,体积有点大。

虽然你可以利用 Mac 自带的「预览」应用程序或第三方的图像编辑应用程序将「.png」格式图片转换为「.jpg」等格式图片,但是我觉得还是繁琐了点,能不能直接改变截图生成的图片文件格式呢?

注: OS X 默认识别以下图片格式:「.jpg」「.gif」「.pdf」「.png」和「.tiff」,所以你可以设置截图文件格式为上述 5 种。

想要改变 Mac OS X 默认的截图文件格式,我们需要使用到「终端」应用程序。 步骤非常简单,只需要打开「终端」,然后在窗口中输入相关命令,按下「回车」键即可。

1. 设置截图文件的格式为「.jpg」

在「终端」应用程序窗口内键入或粘贴以下命令并按下「回车」键执行:

defaults write com.apple.screencapture type jpg;killall SystemUIServer

2. 设置截图文件的格式为「.gif」

在「终端」应用程序窗口内键入或粘贴以下命令并按下「回车」键执行:

defaults write com.apple.screencapture type gif;killall SystemUIServer

3. 设置截图文件的格式为「.pdf」

在「终端」应用程序窗口内键入或粘贴以下命令并按下「回车」键执行:

defaults write com.apple.screencapture type PDF;killall SystemUIServer

4. 设置截图文件的格式为「.png」

在「终端」应用程序窗口内键入或粘贴以下命令并按下「回车」键执行:

defaults write com.apple.screencapture type png;killall SystemUIServer

5. 设置截图文件的格式为「.tiff」

在「终端」应用程序窗口内键入或粘贴以下命令并按下「回车」键执行:

defaults write com.apple.screencapture type tiff;killall SystemUIServer

在 Docker 中运行 rsync 服务端和客户端

背景

最近给服务器组件全部用上了容器化,为了统一管理,也使用了 rsync 的容器化版本。我在早前的文章里——《搭建 rsync 服务器》也有介绍过 rsync,只不过我是用的是常用的二进制安装的版本。

什么是 rsync

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

方案

rsync包括两个部分:服务端和客户端。下面我分别介绍两者的容器化方案,均为网上开源的项目,我仅在使用的时候做了少量修改。

服务端

axiom/rsync-server

自定义很强的服务端,从官方的readme中也体现出来了。根据我的需要,我做了一个简单的调整,在需要同步的文件夹下运行如下 docker run 命令,便运行一个 rsync 服务端。需要注意的是将防火墙上相应的端口打开。

!/bin/bash

docker run -d --name=rsync-server-$(basename $(pwd)) \
    -v $(pwd):/backup \
    -e VOLUME=/backup \
    -v /root/.ssh/authorized_keys:/root/.ssh/authorized_keys \
    -p 10022:22 \
    axiom/rsync-server

在上面的命令中,我启动了一个主机端口映射为10022的rsync-server的容器。

客户端

参考了掘金的这篇文章《通过Docker中运行rsync备份服务器》,将相关参数写到了docker-compose文件里,事先定义好ssh登陆密钥和config文件,在同级目录下运行 docker-compose up -d即可。

ssh配置:

Host    cdn
  HostName        backup1.kelu.org
  Port            10022
  User            root
  IdentityFile    ~/.ssh/db
Host    db
  HostName        backup1.kelu.org
  Port            10023
  User            root
  IdentityFile    ~/.ssh/db

在ssh的配置中,我定义了一个db和一个cdn的连接,并指定端口和登陆密钥。端口为上文中定义好的10022端口和10023端口。


在 Docker 中运行 dropbox 客户端

背景

最近给服务器组件全部用上了容器化,为了统一管理,参考 dropbox 命令行脚本做了一个容器化的客户端。

方案

Dropbox命令行脚本可参考原先我记录的文章——《在Linux上使用dropbox》

我已经创建好了镜像,两步便可成功:

  1. 启动容器:

    映射两个文件夹即可,一个是内容文件夹,一个是配置文件夹:

    docker run --name=dropbox -d \
      -v /root/Dropbox:/root/Dropbox \
      -v /root/.dropbox:/root/.dropbox \
      kelvinblood/dropbox:v0.2
    
  2. 关联账号

    docker logs -f dropbox
    

    查看容器的日志,然后浏览器访问认证链接:

    This computer isn't linked to any Dropbox account...
    Please visit https://www.dropbox.com/cli_link_nonce?nonce=e184433d7baeda90883461fecf1f3b8e to link this device.
    

    访问链接即可。

在运行过程中,可以直接使用命令行查看同步情况:

docker exec dropbox python /dropbox.py status

实现细节

我已经放到github上去了,可以直接参考:kelvinblood/docker-dropbox

dockerfile:

FROM python:2-slim-jessie

ADD src/* /

RUN apt-get update \
    && apt-get install -y wget \
    && wget "https://www.dropbox.com/download?plat=lnx.x86_64" \
    && mv download\?plat=lnx.x86_64 dropbox.tgz \
    && tar xzf dropbox.tgz \
    && rm dropbox.tgz

WORKDIR /root
ENTRYPOINT ["/.dropbox-dist/dropboxd"]

参考资料


Linux 使用 ssh-keygen 生成 RSA 密钥对

什么是 SSH 和 RSA密钥

RSA 是一种公钥加密算法,在 1977 年由麻省理工学院的 Ron Rivest, Adi Shamir, Leonard Adleman 三人一起提出,因此该算法命名以三人姓氏首字母组合而成。

SSH 是 Secure Shell 缩写,是建立在应用层和传输层基础上的安全协议,为计算机上运行的 Shell 提供安全的传输和使用环境。

传统的 rsh, FTP, POP 和 Telnet 网络协议因为传输时采用明文,很容易受到中间人方式攻击。为了防止远程传输信息出现泄露,SSH 协议支持对传输的数据进行加密,因此它还能防止 DNS 和 IP 欺骗。另外采取 SSH 协议传输的数据可以进行压缩,所以可以加快数据传输速度。最初 SSH 协议由芬兰的 Tatu Ylönen 在 1995 年设计开发,目前属于 SSH Communications Security 拥有,由于版权原因,1999 年 10 月开源软件 OpenSSH 被开发出来,它已成为事实上的 SSH 协议标准实现(SSH Communications Security 提供的 SSH 软件使用不同于 OpenSSH 的私钥格式),也是目前 Linux 标准配置。

工具

OpenSSH 提供了以下几个工具:

  1. ssh:实现 SSH 协议,用以建立安全连接,它替代了较早的 rlogin 和 Telnet。
  2. scp, sftp:利用 SSH 协议远程传输文件,它替代了较早的 rcp。
  3. sshd:SSH 服务器守护进程,运行在服务器端。
  4. ssh-keygen:用以生成 RSA 或 DSA 密钥对。
  5. ssh-agent, ssh-add:管理密钥的工具。
  6. ssh-keyscan:扫描网络中的主机,记录找到的公钥。

方案

交互界面生成命令

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xavier/.ssh/id_rsa): id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
ce:89:59:3d:a1:3a:99:b3:01:46:78:0f:d1:cc:d4:fa xavier@Qbee-X
The key's randomart image is:
+--[ RSA 2048]----+
|    .=..         |
|   . .+ .        |
|  . +  .  .      |
|   o o.  o .     |
|    o ..S o      |
|   . . XE. .     |
|      X +        |
|       =         |
|      .          |
+-----------------+

ssh-keygen 默认使用 RSA 算法,长度为 2048 位,生成一个私钥文件 id_rsa 和一个公钥文件 id_rsa.pub,两个文件默认保存在用户的 ~/.ssh 目录下。你可以在命令行交互过程指定密钥文件路径,也可以设置密钥口令,如果设置了密钥口令,在使用密钥进行登录时,需要输入口令。

快速生成命令

ssh-keygen -t rsa -P '' -f '/root/.ssh/id_rsa'

执行后将会生成 id_rsa 的密钥和 id_rsa.pub 的公钥。

参考资料


shell 脚本中切换用户并执行命令

背景

目前使用的是超级用户root,然而我需要使用脚本批量运行一些命令行,然而由于用户权限的原因无法直接使用。

对于常规的系统,我通常使用 sudo -u 的方式进行切换,例如备份 postgresql 数据库时:

sudo -u postgres pg_dump -F c -Z 9 -d abc > abc.dump

如果是没有 sudo 的系统,应当如何解决呢?

方案

还是以上文备份 postgresql 数据库为例,

如果只需要执行一行命令,使用:

su - postgres -c "pg_dump -F c -Z 9 -d abc > abc.dump"

如果执行多行命令,如下:

su - postgres <<EOF
/bin/bash -c "psql -c \"CREATE USER abc WITH PASSWORD 'abc';\""
/bin/bash -c "psql -c \"CREATE DATABASE abc OWNER abc;\""
/bin/bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE abc to abc;\""
pg_dump -F c -Z 9 -d abc > /var/lib/postgresql/dump/abc.dump
EOF

1 2 3 4 5 72 73 74 75 76