Linux下同步onedrive

最近入了台surface pro 3,微软附带送了1年的onedrive和skype的服务。skype倒还好可以无压力地用掉。onedrive就很头疼了,在本地上传传得地老天荒还没传完2%,百度云早就传完了。大概是onedrive对国内的用户还不够友好吧。

早上闲来无事,不知道怎么搞的便安装起了github上的一个项目onedrive-d,在linux下同步onedrive用的。折腾来折腾去总算是搞好了同步。

看到github上的一些issue,不少人使用onedrive-d仍然有一些问题,反应的,诸如每次开机会重新同步所有文件;并且有可能会将文件同步多次,形成多个同名文件。安装时候要做好一定的心理准备。

pip

按照习惯先说卸载时遇到的问题Orz

pip是python的软件安装工具。今天在卸载onedrive-d的时候出现了这个提示符pip:command not found。上官网找了好几遍竟然没找到下载地址,也真是醉了,竟然在一个不起眼的地方。

下载之后运行python get-pip.py安装pip。安装完成后就开始卸载onedrive-d,但是其实卸载还是会报错。把~/.onedrive删除后就不用管它,已经是卸载了= =。

安装

$ git clone https://github.com/xybu92/onedrive-d.git
$ cd onedrive-d
$ ./setup.sh --help

Usage ./setup.sh [inst|remove]
inst: install onedrive-d
remove: uninstall onedrive-d from the system

# 安装
./setup.sh inst

配置

按照上述步骤安装之后就算是安装成功了。

来看看代码的目录结构。

default  LICENSE  LiveAPI.md  onedrive_d  README.md  setup.sh

./default:
ignore_list.txt

./onedrive_d:
config.py    live_api.py  observer_gtk.py  pref.py      setup.py
daemon.py    logger.py    pref_cmd.py      __pycache__
__init__.py  main.py      pref_gtk.py      res

程序中有两个重要的命令,一个是预配置onedrive-pref,用来设定账户,另一个是onedrive-d,用来设定哪个文件需要同步的。

接下来使用onedrive-pref预配置。

$ onedrive-pref

不知道大家运行成功不,反正在Debian7.7下是没办法运行的

onedrive-pref: command not found

作者也说,他非正式版本还没吧命令添加进系统里!1.0正式版本也还没发布的样子= =所以直接运行

./onedrive_d/pref.py --no-gui

会给出一个连接,将这个链接粘贴到浏览器登陆到hotmail邮箱之后,将地址栏的信息粘贴回终端里,就完成账号绑定啦。

要退出账号也很简单,用下面这个命令退出。

./onedrive_d/pref.py --log-out

tips: 为了今后能够更快的运行命令,建议用~/.bashrc记录你的快捷命令。例如以下命令,设定之后记得source ~/.bashrc

alias onedrive-d='/home/github/onedrive-d/onedrive_d/main.py'
alias onedrive-prefs='/home/github/onedrive-d/onedrive_d/pref.py'

使用

然后在默认目录~/OneDrive下运行onedrive-d进行完全同步.

总结

目前我是暂时不用了,一来服务器没有那么大的空间同步,二来一不小心搞得自己以前的文件乱七八糟的,收拾起来也麻烦。


uebersicht - 一款漂亮的桌面Widgets

Übersicht 是Mac下一款可以用来自定义桌面插件的工具。我们可以根据自己的喜好定制不同的Widgets。和Windows下的Rainmeter类似。把玩了一下感觉棒棒的。

效果还真挺炫的。目前在想着可以给自己的服务器加一些状态接口,通过uebesicht方便简单又干脆就可以拿到服务器的实时数据,实在是居家旅行必备。

uebersicht

详细的介绍在少数派上有介绍,下面是转载文。

在相关的同类应用中,听说得比较多的当属 GeekTool 和人称「通知中心 GeekTool」的 Today Scripts 无疑,它们和 Übersicht 的运行原理基本相同,但后者的不同在于,它还支持 HTML5 和特殊的 CoffeeScript 语法,所以 它的优势就很明显了:

  • 相对轻松的编写和自定义过程。
  • 多元化的显示风格。
  • 主动适配不同屏幕尺寸的能力。

安装插件

Übersicht Widgets 的安装方法很简单,先在官网 下载安装 Übersicht ,然后前往 官方 Widget 商店 寻找自己想要的插件,点击 Banner 封面图可以读取相关开发者的介绍,或直接通过右下方 download 进行下载。接着,将解压缩后得到的 .coffee 文件置入 Übersicht Widgets 的文件夹即可(偏好设置中可以进行自定义)。稍等片刻,桌面插件就会被主程序自动读取,安装完成。

不过,有些插件的安装方法比较复杂,比如 Pretty Weather 这款。除了上述步骤,它还要求用户获取「天气数据」所需的个人 API Key,读者可以 点击 前往注册。接着,需要将 API Key 覆盖至源代码中的相关地址,方可正常显示天气数据。还有最后一步,就是获取你当前的位置信息,有条件的读者可以通过 Google Maps 获取。


配置mutt和msmtprc从debian中发邮件

服务器发送邮件主要有两种方式。一种是搭建一个MTA(邮件传输代理),使用sendmail或POSTFIX进行发送。具体的方法可以看Linode给的Guide,非常的详细。以这种方式搭建要考虑清楚自己是否真的需要一个邮件服务器,因为搭建的过程十分繁琐枯燥。Linode的文档也是一再强调这一点。另一种方式就是本文的mutt+msmpt。特点是轻量,够用。(υ◉ω◉υ)

安装

apt-get install mutt msmtp

配置mutt

/etc/Muttrc是全局的,也可以用在用户目录下~/.muttrc配置。

set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="kelu" # 发件人名字
set from=kelu@kelu.org # 发件人地址
set envelope_from=yes

set charset="utf-8"
#set send_charset="gb2312"
set send_charset="utf-8"
set locale = "zh_CN.UTF-8"
set content_type = "text/html\;charset=utf-8"

配置.msmtprc

同样,msmtprc也是可以在/etc/msmtprc或者用户目录下的~/.msmtprc进行配置。

account default
host smtp.163.com  --> email server 地址
from kelu@kelu.org
auth login # 用plain似乎也没问题?有空再看
user kelu@kelu.org
password kelu.org
logfile ~/.msmtp.log

.msmtprc文件需要600权限,如果不是600权限会无法使用

使用以上的配置已经可以使用一些普通的国内邮箱进行信息发送了。但是如果你使用了gmail的话,需要多做出一些配置才可以。以下是我的设置,配置的方法也是参考了不少网站才找到的。例如Virtage Devblog 最后正确的配置方法来自archlinux的bbs

# Default settings that all others account inherit
defaults

# Logging - uncomment either syslog or logfile, having both uncommented disables logging at all.
#syslog on
# Or to log to log own file
logfile  /var/log/msmtp.log

keepbcc  on

# Gmail/Google Apps (configure as may as you want)
account  gmail
host   smtp.gmail.com
port   587
protocol smtp
auth on
from pbrisbin@gmx.com
user pbrisbin@gmx.com
password XXXXX
tls on
tls_nocertcheck

# Default account to use
account default : gmail

一如那位配置好的用户所说的,works like a dream ʕ•̫͡•ʔ→ʕ•̫͡•̫͡•ʔ→ʕ•̫͡•=•̫͡•ʔ→ʕ•̫͡•ʔʕ•̫͡•ʔ→ʕ•̫͡•̫͡•ʔ ʕ•̫͡•̫͡•ʔ

发邮件给foo@google.com,并带有一个附件

mutt -s "主题" foo@google.com -a 附件.txt < 邮件内容.txt

扩展

配置好邮件之后就可以发送一些vps的状态邮件给自己啦,还有很多种可能性,比如流量突然升高啊,登陆ssh发邮件提醒啊之类的。

比如在/etc/ssh/sshrc中添加以下信息:

echo "$USER@`hostname` `date +%Y-%m-%d\ %H:%M` login from ${SSH_CLIENT%% *}" | mutt -s "$USER `date +%Y-%m-%d\ %H:%M` login from ${SSH_CLIENT%% *}" XXXXXX@kelu.org &

当有人登陆服务器时候发邮件提醒。


Linux命令之awk

本文大部分引用自《GAWK 入门:AWK 语言基础》- IBM developerWorks

Awk是一种处理结构数据并输出格式化结果的编程语言, Awk 是其作者 “Aho,Weinberger,Kernighan” 的简称。

Awk通常被用来进行格式扫描和处理。通过扫描一个或多个文件中的行,查看是否匹配指定的正则表达式,并执行相关的操作。awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计。awk 的语法较为常见。它借鉴了某些语言的一些精华部分,如 C 语言、python 和 bash(虽然在技术上,awk 比 python 和 bash 早创建)。awk 是那种一旦学会了就会成为您战略编码库的主要部分的语言。

主要特性

  • Awk以记录和字段的方式来查看文本文件
  • 和其他编程语言一样,Awk 包含变量、条件和循环
  • Awk能够进行运算和字符串操作
  • Awk能够生成格式化的报表数据

语法

Awk从一个文件或者标准输入中读取数据,并输出结果到标准输出中。

awk '/search pattern1/ {Actions}    
     /search pattern2/ {Actions}' file     * search pattern是正则表达式 * Actions 输出的语法 * 在Awk 中可以存在多个正则表达式和多个输出定义 * file 输入文件名 * 单引号的作用是包裹起来防止shell截断

工作方式

  • Awk 一次读取文件中的一行
  • 对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的 Action
  • 如果没有匹配上则不执行任何动作
  • 在上诉的语法中, Search Pattern 和 Action 是可选的,但是必须提供其中一个
  • 如果 Search Pattern 未提供,则对所有的输入行执行 Action 操作
  • 如果 Action 未提供,则默认打印出该行的数据
  • {} 这种 Action 不做任何事情,和未提供的 Action 的工作方式不一样
  • Action 中的语句应该使用分号分隔

默认行为

默认的时候awk 打印文件中的每一行

$ awk '{print;}' hello.txt 

由于匹配的正则表达式未给出,因此后续的Action 适用所有的行, Action 中的 print 没有任何参数的情况下将打印整行,注意其中的 Action 必须使用 {} 括起来。

操作符(awk操作符与C语言类似)

+        加
-        减
*        乘
/        除
%        取余
^        幂运算
++        自加1
--        自减1
+=        相加后赋值给变量(x+=9等同于x=x+9)
-=        相减后赋值给变量(x-=9等同于x=x-9)
*=        相乘后赋值给变量(x*=9等同于x=x*9)
/=        相除后赋值给变量(x/=9等同于x=x/9)
>        大于
<        小于
>=        大于等于
<=        小于等于
==        等于
!=        不等于
~        匹配
!~        不匹配
&&        与
||        或
  ^2 			#2次方
  **2			#2次方
函数名称 返回值
atan2(x,y) y,x范围内的余切
cos(x) 余弦函数
exp(x) 求幂
int(x) 取整
log(x) 自然对数
rand() 随机数
sin(x) 正弦
sqrt(x) 平方根
srand(x) x是rand()函数的种子

BEGIN 和 END

BEGIN { Actions}    
{ACTION} # Action for everyline in a file    
END { Actions }  

在BEGIN 节中的 Actions 会在读取文件中的行之前被执行。

而END 节中的 Actions 会在读取并处理文件中的所有行后被执行。 awk 非常善于处理分成多个逻辑字段的文本,而且让您可以毫不费力地引用 awk 脚本中每个独立的字段。

# 使用 -F 选项来指定 ":" 作为字段分隔符。
$ awk -F":" '{ print "username: " $1 "/t/tuid:" $3" }' /etc/passwd 

外部脚本

将脚本作为命令行自变量传递给 awk 对于小的单行程序来说是非常简单的,而对于多行程序,它就比较复杂。您肯定想要在外部文件中撰写脚本。然后可以向 awk 传递 -f 选项,以向它提供此脚本文件。

$ awk -f myscript.awk myfile.in
# 只打印包含浮点数的行。
/[0-9]+/.[0-9]*/ { print }
	
# 如果当前行的第一个字段不等于 fred,awk 将继续处理文件而不对当前行执行 print
$1 == "fred" { print $3 }
	
#如果某一行的第五个字段包含字符序列 root,那么将只打印这一行中的第三个字段
$5 ~ /root/ { print $3 }

条件语句

awk 还提供了非常好的类似于 C 语言的 if 语句。如果您愿意,可以使用 if 语句重写前一个脚本:

# 如果某一行的第五个字段包含字符序列 root
{
	if ( $5 ~ /root/ ) {
	print $3
	} else {
	}
}
awk 还允许使用布尔运算符 “   “(逻辑与)和 “&&”(逻辑或),以便创建更复杂的布尔表达式。只打印第一个字段等于 foo 且第二个字段等于 bar 的那些行。
( $1 == "foo" ) && ( $2 == "bar" ) { print }

内置变量

ARGC        命令行参数个数
FILENAME    当前输入文档的名称
FNR        当前输入文档的当前记录编号,尤其当有多个输入文档时有用
NR        总行数
NF        当前记录的字段个数
FS        字段分隔符
OFS        输出字段分隔符,默认为空格
ORS        输出记录分隔符,默认为换行符\n
RS        输入记录分隔符,默认为换行符\n		 默认awk读取数据以空格或制表符作为分隔符,但可以通过-F或FS(field separator)变量来改变分隔符。

变量传递

shell传入awk

1.”‘$var’”

#!/bin/bash
var="test"
awk 'BEGIN{print "'$var'"}'

这种写法要求变量var中不含有空格。若var中含有空格,那么就要用 “‘“$var”’”

2.export变量,然后用ENVIRON[“var”]

#!/bin/bash
var="test"
export var
awk 'BEGIN{print ENVIRON["var"]}'

3.使用-v选项。

#!/bin/bash
var="test"
awk -v nvar="$var" 'BEGIN{print nvar}'

awk传入shell

1.让awk将变量值按一定格式输出到STDOUT上,然后由shell解析 2.eval

$ unset a
$ eval $(awk 'BEGIN{print "a=1"}')
$ echo $a

#!/bin/bash
var1="test"
var2="along"
eval $(awk 'BEGIN{print "var1=along;var2=test"}')
echo "var1:"$var1
echo "var2:"$var2
./awktest.sh 
var1:along
var2:test

关于eval的用法血衫今后再写一下。

例子

awk  '/^$/ {print x+=1}'   test.txt                    备注:统计所有空白行
awk  '/^$/ {x+=1}  END {print x}'   test.txt        备注:打印总空白行个数
awk -F:  '$1~/root/   {print  $3}'   /etc/passwd     备注:打印root的ID号
awk -F:  '$3>500  {print  $1}'      /etc/passwd     备注:列出计算机中ID号大于500的用户名
awk 'BEGIN { x="123"; print x-2 }' #将字符串转换为数值来运算
awk 'BEGIN {sum=0} {sum+=$0} END{print sum/FNR}' file.txt # 求平均数

docker images -a | awk '{ print $1":"$2 }'  # 打印所有镜像名

分组求平均:
awk -F" " '{sum2[$1] += $2; sum3[$1] += $3; cnt[$1] += 1} END{for (i in sum2) print i, sum2[i]/cnt[i], sum3[i]/cnt[i]}' gav.txt

邮件中的html - 阮一峰

本文来自阮一峰的网络日志HTML Email 编写指南

今天,我想写一个”低技术”问题。

话说我订阅了不少了新闻邮件(Newsletter),比如JavaScript Weekly。每周收到一封邮件,了解本周的大事。

image

有一天,我就在想,是不是我也能做一个这样的邮件?

然后,就发现这事不那么容易。抛开后台和编辑工作,单单是设计一个Email样板,就需要不少心思。

image

因为这种带格式的邮件,其实就是一张网页,正式名称叫做HTML Email。它能否正常显示,完全取决于邮件客户端。大多数的邮件客户端(比如Outlook和Gmail),会过滤HTML设置,让邮件面目全非。

我发现,编写HTML Email的窍门,就是使用15年前的网页制作方法。下面就是我整理的编写指南。

1. Doctype

目前,兼容性最好的Doctype是XHTML 1.0 Strict,事实上Gmail和Hotmail会删掉你的Doctype,换上这个Doctype。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

 <head>

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  <title>HTML Email编写指南</title>

  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>

 </head>

</html>

使用这个Doctype,也就意味着,不能使用HTML5的语法。

2. 布局

网页的布局(layout)必须使用表格(table)。首先,放置一个最外层的大表格,用来设置背景。

<body style="margin: 0; padding: 0;">

 <table border="1" cellpadding="0" cellspacing="0" width="100%">

  <tr>
   <td> Hello! </td>
  </tr>

 </table>

</body>

表格的 border 属性等于1, 是为了方便开发。正式发布的时候,再把这个属性设为0。

在内层,放置第二个表格。用来展示内容。第二个table的宽度定为600像素,防止超过客户端的显示宽度。

<table align="center" border="1" cellpadding="0" cellspacing="0" width="600" style="border-collapse: collapse;">

 <tr>
  <td> Row 1 </td>
 </tr>

 <tr>
  <td> Row 2 </td>
 </tr>

 <tr>
  <td> Row 3 </td>
 </tr>

</table>

邮件内容有几个部分,就设置几行(row)。

3. 图片

图片是唯一可以引用的外部资源。其他的外部资源,比如样式表文件、字体文件、视频文件等,一概不能引用。

有些客户端会给图片链接加上边框,要去除边框。

  img {outline:none; text-decoration:none; -ms-interpolation-mode: bicubic;}

  a img {border:none;}

  <img border="0" style="display:block;">

需要注意的是,不少客户端默认不显示图片(比如Gmail),所以要确保即使没有图片,主要内容也能被阅读。

4. 行内样式

所有的CSS规则,最好都采用行内样式。因为放置在网页头部的样式,很可能会被客户端删除。客户端对CSS规则的支持情况,请看这里。

另外,不要采用CSS的简写形式,有些客户端不支持。比如,不要写成下面这样:

  style="font: 8px/14px Arial, sans-serif;"

如果想表达

  <p style="margin: 1em 0;">

要写成下面这样:

  <p style="margin-top: 1em; margin-bottom: 1em; margin-left: 0; margin-right: 0;">

5. W3C校验和测试工具

要保证最终的代码,能够通过W3C的校验,因为某些客户端会把不合格属性剥离。还要使用测试工具(1, 2, 3),查看在不同客户端的显示结果。

发送HTML Email的时候,不要忘记MIME类型不能使用

  Content-Type: text/plain;

而要使用

  Content-Type: Multipart/Alternative;

发送工具可以考虑使用 MailChimpCampaign Monitor

6. 模板

使用别人已经做好的模板,是一个不错的选择(这里这里),网上还可以搜到更多

自己开发的话,可以参考HTML Email BoilerplateEmailology

7. 参考链接

进一步研究,请参考下面的文章。

  - Sean Powell,Say Hello to the HTML Email Boilerplate

  - Nicole Merlin,Build an HTML Email Template From Scratch

  - Nicole Merlin, What You Should Know About HTML Email

(完)


关闭一些无用的进程

闲来无事pstree -a看了一下貌似好几个无用的进程。这几天也是装了很多软件,装一个玩一下又卸掉的节奏。小记录一下。

sendmail,卸载。
exim4,卸载。
rpc也很可疑,跟NFS相关的平时也不用,service stop停掉。
然后就是nfs-common也一样。
除了停掉还要禁止开机启动,用`sysv-rc-conf`关掉。
安装了iftop,一个流量的实时监控工具。
安装了mutt msmtp,发邮件用的。

Mac软件之iTerm2

本来,在Mac下我一直是在用的原生的terminal,倒也是没什么感觉凑合用了几年。不知是最近住处的网络还是国内的网络不稳定,老是断连,搞得各种郁闷。于是乎又是改配置啦sshd_config配置握手时间,用screen命令保存状态什么的,然后就用上了iTerms了。也是用了一两个星期了,看到文章才发现原来有这么多好的功能。

最主要的还是口水它的屏幕切割功能,配合linux的screen命令+alias之后简直神器再临人间。


1 2 3 4 5 150 151 152 153 154