2019年5月

Stack Overflow 是面向编程和开发相关话题的互联网最大 IT 技术问答网站。在其官网上发布的一则简短公告中表示,有黑客访问了公司的内部网络。Stack Overflow 工程副总裁 Mary Ferguson 表示:“上周末,Stack Overflow 遭到了网络攻击。”

在公告中写道:“我们已经确认黑客于 5 月 11 日获得了一定程度的生产环境的访问。我们在发现入侵之后就立即调查了黑客访问的范围并解决了所有已知的漏洞。”Ferguson 表示目前并没有直接证据表明黑客窃取了用户的登陆凭证,但是目前不能百分百排除这种可能。在公告中 Ferguson 表示在调查结束之后会公布更多的细节。

Stack Overflow 是一个程序设计领域的问答网站,隶属 Stack Exchange Network。网站允许注册用户提出或回答问题,还可对已有问题或答案加分、扣分或进行修改,条件是用户达到一定的“声望值”。“声望值”就是用户进行网站交互时能获取的分数,例如,用户 A 回答了一个问题,用户 B 对用户 A 的解答给予了“加分”,用户 A 就会因而获得 10 点声望值。当声望值达到某个程度,用户的权限就会增加,如声望值超过 50 点就可以评论答案,另外网站也会根据用户的贡献颁发徽章。用户创建的内容都使用知识共享协议授权。

直至 2018 年9月,Stack Overflow 有超过 9,400,000 名注册用户和超过 16,000,000 个问题,其中最常见的主题有JavaScript、Java、C#、PHP、Android、Python、jQuery 和 HTML。

来源:cnBeta.COM

更多资讯

FBI 指控网络犯罪头目试图从全球 44000 台电脑中窃取 1 亿美元

美国联邦调查局(FBI)和全球执法合作伙伴周四上午称,一名策划了一项犯罪阴谋的网络黑客头目已被逮捕,该阴谋闯入了 44000 台电脑,可能窃取了数百万美元。欧洲警察组织和联邦调查局证实,亚历山大·科诺沃洛夫和他的同谋玛拉特·卡赞德吉因涉嫌参与所谓的 Goznym 犯罪网络而在格鲁吉亚受到起诉。

来源: cnBeta.COM

详情: http://t.cn/EKnBrw8

新文件显示纽约警察局在其面部识别系统中使用了修改后的图像

乔治敦大学隐私和技术中心(CPT)的一份新报告揭露了纽约警察局面部识别系统的广泛滥用,包括图像改变和使用非可疑图像。在一个案例中,官员根据一名看起来像哈里森的嫌疑人的证人描述,上传了演员伍迪·哈里森的照片,嫌疑人后来因小偷窃而被捕。

来源: cnBeta.COM

详情: http://t.cn/EKnBDS4

报告称黑客利用华硕云存储在 PC 上安装 Plead 后门

安全研究人员近日报告称,黑客组织 BlackTech 在中国台湾通过中间人攻击(“MITM 攻击”)部署了 Plead 恶意软件。该组织被曝利用华硕 WebStorage 软件的漏洞来上传绕过身份验证的恶意软件。

来源: cnBeta.COM

详情: http://t.cn/EKnrv6e

俄罗斯政府网站被爆泄露 225 万用户社保和护照等信息

多家俄罗斯政府网站泄露了超过 225 万公民、公务员和高层政治家的私人和护照信息。俄罗斯非政府组织 Informational Culture 的联合创始人 Ivan Begtin 最先发现并公开了本次严重的数据泄露事件。由三篇博文组成的系列报道中,Begtin 表示他对政府在线认证中心、50 家政府门户网站以及政府机构使用的电子投标平台进行了调查。

来源: cnBeta.COM

详情: http://t.cn/EKnrzyf

(信息来源于网络,安华金和搜集整理)

市场上有很多用来监控 Linux 系统的监控工具,当系统到达阀值后它将发送一封邮件。它监控所有的东西例如 CPU 利用率、内存利用率、交换空间利用率、磁盘空间利用率等等。然而,它更适合小环境和大环境。

想一想如果你只有少量系统,那么什么是最好的方式来应对这种情况。

是的,我们想要写一个 shell 脚本 来实现。

在这篇指南中我们打算写一个 shell 脚本来监控系统的磁盘空间使用率。当系统到达给定的阀值,它将给对应的邮件地址发送一封邮件。在这篇文章中我们总共添加了四个 shell 脚本,每个用于不同的目的。之后,我们会想出其他 shell 脚本来监控 CPU,内存和交换空间利用率。

在此之前,我想澄清一件事,根据我观察的磁盘空间使用率 shell 脚本使用情况。

大多数用户在多篇博客中评论说,当他们运行磁盘空间使用率脚本时他们获得了以下错误。

# sh /opt/script/disk-usage-alert-old.sh

/dev/mapper/vg_2g-lv_root
test-script.sh: line 7: [: /dev/mapper/vg_2g-lv_root: integer expression expected
/ 9.8G

是的,这是对的。甚至,当我第一次运行这个脚本的时候我遇到了相同的问题。之后,我发现了根本原因。

当你在基于 RHEL 5 & RHEL 6 的系统上运行包含用于磁盘空间警告的 df -hdf -H 的 shell 脚本中时,你会发现上述错误信息,因为输出格式不对,查看下列输出。

为了解决这个问题,我们需要用 df -Ph (POSIX 输出格式),但是默认的 df -h 在基于 RHEL 7 的系统上运行的很好。

# df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_2g-lv_root
                       10G  6.7G  3.4G  67% /
tmpfs                 7.8G     0  7.8G   0% /dev/shm
/dev/sda1             976M   95M  830M  11% /boot
/dev/mapper/vg_2g-lv_home
                      5.0G  4.3G  784M  85% /home
/dev/mapper/vg_2g-lv_tmp
                      4.8G   14M  4.6G   1% /tmp

方法一:Linux Shell 脚本来监控磁盘空间使用率和发送邮件

你可以使用下列 shell 脚本在 Linux 系统中来监控磁盘空间使用率。

当系统到达给定的阀值限制时,它将发送一封邮件。在这个例子中,我们设置阀值为 60% 用于测试目的,你可以改变这个限制来符合你的需求。

如果超过一个文件系统到达给定的阀值,它将发送多封邮件,因为这个脚本使用了循环。

同样,替换你的邮件地址来获取这份警告。

# vi /opt/script/disk-usage-alert.sh

#!/bin/sh
df -Ph | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output;
do
  echo $output
  used=$(echo $output | awk '{print $1}' | sed s/%//g)
  partition=$(echo $output | awk '{print $2}')
  if [ $used -ge 60 ]; then
  echo "The partition \"$partition\" on $(hostname) has used $used% at $(date)" | mail -s "Disk Space Alert: $used% Used On $(hostname)" [email protected]
  fi
done

输出:我获得了下列两封邮件警告。

The partition "/dev/mapper/vg_2g-lv_home" on 2g.CentOS7 has used 85% at Mon Apr 29 06:16:14 IST 2019

The partition "/dev/mapper/vg_2g-lv_root" on 2g.CentOS7 has used 67% at Mon Apr 29 06:16:14 IST 2019

最终添加了一个 cronjob 来自动完成。它会每 10 分钟运行一次。

# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert.sh

方法二:Linux Shell 脚本来监控磁盘空间使用率和发送邮件

作为代替,你可以使用下列的 shell 脚本。对比上面的脚本我们做了少量改变。

# vi /opt/script/disk-usage-alert-1.sh

#!/bin/sh
df -Ph | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output;
do
  max=60%
  echo $output
  used=$(echo $output | awk '{print $1}')
  partition=$(echo $output | awk '{print $2}')
  if [ ${used%?} -ge ${max%?} ]; then
  echo "The partition \"$partition\" on $(hostname) has used $used at $(date)" | mail -s "Disk Space Alert: $used Used On $(hostname)" [email protected]
  fi
done

输出:我获得了下列两封邮件警告。

The partition "/dev/mapper/vg_2g-lv_home" on 2g.CentOS7 has used 85% at Mon Apr 29 06:16:14 IST 2019

The partition "/dev/mapper/vg_2g-lv_root" on 2g.CentOS7 has used 67% at Mon Apr 29 06:16:14 IST 2019

最终添加了一个 cronjob 来自动完成。它会每 10 分钟运行一次。

# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert-1.sh

方法三:Linux Shell 脚本来监控磁盘空间使用率和发送邮件

我更喜欢这种方法。因为,它工作起来很有魔力,你只会收到一封关于所有事的邮件。

这相当简单和直接。

*/10 * * * * df -Ph | sed s/%//g | awk '{ if($5 > 60) print $0;}' | mail -s "Disk Space Alert On $(hostname)" [email protected]

输出: 我获得了一封关于所有警告的邮件。

Filesystem                            Size  Used Avail Use Mounted on
/dev/mapper/vg_2g-lv_root              10G  6.7G  3.4G  67 /
/dev/mapper/vg_2g-lv_home             5.0G  4.3G  784M  85 /home

方法四:Linux Shell 脚本来监控某个分区的磁盘空间使用情况和发送邮件

# vi /opt/script/disk-usage-alert-2.sh

#!/bin/bash
used=$(df -Ph | grep '/dev/mapper/vg_2g-lv_dbs' | awk {'print $5'})
max=80%
if [ ${used%?} -ge ${max%?} ]; then
echo "The Mount Point "/DB" on $(hostname) has used $used at $(date)" | mail -s "Disk space alert on $(hostname): $used used" [email protected]
fi

输出: 我得到了下面的邮件警告。

The partition /dev/mapper/vg_2g-lv_dbs on 2g.CentOS6 has used 82% at Mon Apr 29 06:16:14 IST 2019

最终添加了一个 cronjob 来自动完成这些工作。它将每 10 分钟运行一次。

# crontab -e
*/10 * * * * /bin/bash /opt/script/disk-usage-alert-2.sh

注意: 你将在 10 分钟后收到一封邮件警告,因为这个脚本被计划为每 10 分钟运行一次(但也不是精确的 10 分钟,取决于时间)。

例如这个例子。如果你的系统在 8:25 到达了限制,你将在 5 分钟后收到邮件警告。希望现在讲清楚了。


via: https://www.2daygeek.com/linux-shell-script-to-monitor-disk-space-usage-and-send-email/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:warmfrog 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

学习如何使用 spaCy、vaderSentiment、Flask 和 Python 来为你的作品添加情感分析能力。

本系列的第一部分提供了情感分析工作原理的一些背景知识,现在让我们研究如何将这些功能添加到你的设计中。

探索 Python 库 spaCy 和 vaderSentiment

前提条件

  • 一个终端 shell
  • shell 中的 Python 语言二进制文件(3.4+ 版本)
  • 用于安装 Python 包的 pip 命令
  • (可选)一个 Python 虚拟环境使你的工作与系统隔离开来

配置环境

在开始编写代码之前,你需要安装 spaCyvaderSentiment 包来设置 Python 环境,同时下载一个语言模型来帮助你分析。幸运的是,大部分操作都容易在命令行中完成。

在 shell 中,输入以下命令来安装 spaCy 和 vaderSentiment 包:

pip install spacy vaderSentiment

命令安装完成后,安装 spaCy 可用于文本分析的语言模型。以下命令将使用 spaCy 模块下载并安装英语模型

python -m spacy download en_core_web_sm

安装了这些库和模型之后,就可以开始编码了。

一个简单的文本分析

使用 Python 解释器交互模式 编写一些代码来分析单个文本片段。首先启动 Python 环境:

$ python
Python 3.6.8 (default, Jan 31 2019, 09:38:34)
[GCC 8.2.1 20181215 (Red Hat 8.2.1-6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

(你的 Python 解释器版本打印可能与此不同。)

1、导入所需模块:

>>> import spacy
>>> from vaderSentiment import vaderSentiment 

2、从 spaCy 加载英语语言模型:

>>> english = spacy.load("en_core_web_sm")

3、处理一段文本。本例展示了一个非常简单的句子,我们希望它能给我们带来些许积极的情感:

>>> result = english("I like to eat applesauce with sugar and cinnamon.")

4、从处理后的结果中收集句子。SpaCy 已识别并处理短语中的实体,这一步为每个句子生成情感(即时在本例中只有一个句子):

>>> sentences = [str(s) for s in result.sents]

5、使用 vaderSentiments 创建一个分析器:

>>> analyzer = vaderSentiment.SentimentIntensityAnalyzer()

6、对句子进行情感分析:

>>> sentiment = [analyzer.polarity_scores(str(s)) for s in sentences]

sentiment 变量现在包含例句的极性分数。打印出这个值,看看它是如何分析这个句子的。

>>> print(sentiment)
[{'neg': 0.0, 'neu': 0.737, 'pos': 0.263, 'compound': 0.3612}]

这个结构是什么意思?

表面上,这是一个只有一个字典对象的数组。如果有多个句子,那么每个句子都会对应一个字典对象。字典中有四个键对应不同类型的情感。neg 键表示负面情感,因为在本例中没有报告任何负面情感,0.0 值证明了这一点。neu 键表示中性情感,它的得分相当高,为 0.737(最高为 1.0)。pos 键代表积极情感,得分适中,为 0.263。最后,cmpound 键代表文本的总体得分,它可以从负数到正数,0.3612 表示积极方面的情感多一点。

要查看这些值可能如何变化,你可以使用已输入的代码做一个小实验。以下代码块显示了如何对类似句子的情感评分的评估。

>>> result = english("I love applesauce!")
>>> sentences = [str(s) for s in result.sents]
>>> sentiment = [analyzer.polarity_scores(str(s)) for s in sentences]
>>> print(sentiment)
[{'neg': 0.0, 'neu': 0.182, 'pos': 0.818, 'compound': 0.6696}]

你可以看到,通过将例句改为非常积极的句子,sentiment 的值发生了巨大变化。

建立一个情感分析服务

现在你已经为情感分析组装了基本的代码块,让我们将这些东西转化为一个简单的服务。

在这个演示中,你将使用 Python Flask 包 创建一个 RESTful HTTP 服务器。此服务将接受英文文本数据并返回情感分析结果。请注意,此示例服务是用于学习所涉及的技术,而不是用于投入生产的东西。

前提条件

  • 一个终端 shell
  • shell 中的 Python 语言二进制文件(3.4+ 版本)
  • 安装 Python 包的 pip 命令
  • curl 命令
  • 一个文本编辑器
  • (可选) 一个 Python 虚拟环境使你的工作与系统隔离开来

配置环境

这个环境几乎与上一节中的环境相同,唯一的区别是在 Python 环境中添加了 Flask 包。

1、安装所需依赖项:

pip install spacy vaderSentiment flask

2、安装 spaCy 的英语语言模型:

python -m spacy download en_core_web_sm

创建应用程序文件

打开编辑器,创建一个名为 app.py 的文件。添加以下内容 (不用担心,我们将解释每一行)

import flask
import spacy
import vaderSentiment.vaderSentiment as vader

app = flask.Flask(__name__)
analyzer = vader.SentimentIntensityAnalyzer()
english = spacy.load("en_core_web_sm")

def get_sentiments(text):
    result = english(text)
    sentences = [str(sent) for sent in result.sents]
    sentiments = [analyzer.polarity_scores(str(s)) for s in sentences]
    return sentiments

@app.route("/", methods=["POST", "GET"])
def index():
    if flask.request.method == "GET":
        return "To access this service send a POST request to this URL with" \
                " the text you want analyzed in the body."
    body = flask.request.data.decode("utf-8")
    sentiments = get_sentiments(body)
    return flask.json.dumps(sentiments)

虽然这个源文件不是很大,但它非常密集。让我们来看看这个应用程序的各个部分,并解释它们在做什么。

import flask
import spacy
import vaderSentiment.vaderSentiment as vader

前三行引入了执行语言分析和 HTTP 框架所需的包。

app = flask.Flask(__name__)
analyzer = vader.SentimentIntensityAnalyzer()
english = spacy.load("en_core_web_sm")

接下来的三行代码创建了一些全局变量。第一个变量 app,它是 Flask 用于创建 HTTP 路由的主要入口点。第二个变量 analyzer 与上一个示例中使用的类型相同,它将用于生成情感分数。最后一个变量 english 也与上一个示例中使用的类型相同,它将用于注释和标记初始文本输入。

你可能想知道为什么全局声明这些变量。对于 app 变量,这是许多 Flask 应用程序的标准过程。但是,对于 analyzerenglish 变量,将它们设置为全局变量的决定是基于与所涉及的类关联的加载时间。虽然加载时间可能看起来很短,但是当它在 HTTP 服务器的上下文中运行时,这些延迟会对性能产生负面影响。

def get_sentiments(text):
    result = english(text)
    sentences = [str(sent) for sent in result.sents]
    sentiments = [analyzer.polarity_scores(str(s)) for s in sentences]
    return sentiments

这部分是服务的核心 —— 一个用于从一串文本生成情感值的函数。你可以看到此函数中的操作对应于你之前在 Python 解释器中运行的命令。这里它们被封装在一个函数定义中,text 源作为文本变量传入,最后 sentiments 变量返回给调用者。

@app.route("/", methods=["POST", "GET"])
def index():
  if flask.request.method == "GET":
      return "To access this service send a POST request to this URL with" \
              " the text you want analyzed in the body."
  body = flask.request.data.decode("utf-8")
  sentiments = get_sentiments(body)
  return flask.json.dumps(sentiments)

源文件的最后一个函数包含了指导 Flask 如何为服务配置 HTTP 服务器的逻辑。它从一行开始,该行将 HTTP 路由 / 与请求方法 POSTGET 相关联。

在函数定义行之后,if 子句将检测请求方法是否为 GET。如果用户向服务发送此请求,那么下面的行将返回一条指示如何访问服务器的文本消息。这主要是为了方便最终用户。

下一行使用 flask.request 对象来获取请求的主体,该主体应包含要处理的文本字符串。decode 函数将字节数组转换为可用的格式化字符串。经过解码的文本消息被传递给 get_sentiments 函数以生成情感分数。最后,分数通过 HTTP 框架返回给用户。

你现在应该保存文件,如果尚未保存,那么返回 shell。

运行情感服务

一切就绪后,使用 Flask 的内置调试服务器运行服务非常简单。要启动该服务,请从与源文件相同的目录中输入以下命令:

FLASK_APP=app.py flask run

现在,你将在 shell 中看到来自服务器的一些输出,并且服务器将处于运行状态。要测试服务器是否正在运行,你需要打开第二个 shell 并使用 curl 命令。

首先,输入以下命令检查是否打印了指令信息:

curl http://localhost:5000

你应该看到说明消息:

To access this service send a POST request to this URI with the text you want analyzed in the body.

接下来,运行以下命令发送测试消息,查看情感分析:

curl http://localhost:5000 --header "Content-Type: application/json" --data "I love applesauce!"

你从服务器获得的响应应类似于以下内容:

[{"compound": 0.6696, "neg": 0.0, "neu": 0.182, "pos": 0.818}]

恭喜!你现在已经实现了一个 RESTful HTTP 情感分析服务。你可以在 GitHub 上找到此服务的参考实现和本文中的所有代码

继续探索

现在你已经了解了自然语言处理和情感分析背后的原理和机制,下面是进一步发现探索该主题的一些方法。

在 OpenShift 上创建流式情感分析器

虽然创建本地应用程序来研究情绪分析很方便,但是接下来需要能够部署应用程序以实现更广泛的用途。按照Radnaalytics.io 提供的指导和代码进行操作,你将学习如何创建一个情感分析仪,可以容器化并部署到 Kubernetes 平台。你还将了解如何将 Apache Kafka 用作事件驱动消息传递的框架,以及如何将 Apache Spark 用作情绪分析的分布式计算平台。

使用 Twitter API 发现实时数据

虽然 Radanalytics.io 实验室可以生成合成推文流,但你可以不受限于合成数据。事实上,拥有 Twitter 账户的任何人都可以使用 Tweepy Python 包访问 Twitter 流媒体 API 对推文进行情感分析。


via: https://opensource.com/article/19/4/social-media-sentiment-analysis-python-scalable

作者:Michael McCune 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

旨在让每个网站都能使用 HTTPS 加密的非赢利组织 Let's Encrypt 发布了自己的证书透明度(CT)日志 Oak,它欢迎其他 CA 递交证书日志。该项目得到了 Sectigo 的赞助。证书透明度是一个记录和监视证书签发的系统,有助于改进 CA 生态系统和 Web 安全,因此迅速成为关键的互联网基础设施。

Let's Encrypt 决定创建和运作自己的 CT 是出于多个理由:首先是 CT 与该组织让互联网变得更安全和尊重隐私的使命相一致,它相信透明能增强安全,能让人做出深思熟虑的决定;

其次是运作一个日志有助于控制其命运,Google Chrome 要求所有的新签发证书递交到两个不同的日志系统,

因此 Let's Encrypt 的运营必须要有多个日志选项;第三是它每天签发超过 100 万个证书,它想要设计一个能优化处理大量证书日志的系统。

来源:solidot.org

更多资讯

两家提供勒索软件解决方案的公司被发现是支付赎金

对于遭到勒索软件攻击的企业和机构,是向攻击者支付赎金还是寻找其它解决方案?支付赎金被认为会鼓励攻击者,被认为是不道德的。但其他解决方案可能会需要花更长的时间耗费更多金钱。

来源: solidot.org

详情: http://t.cn/EKjCif9

美国联邦通信委员会计划为运营商提供更多权力来打击自动骚扰电话

美国联邦通信委员会主席 Ajit Pai 希望为移动电话公司提供更大的权力来阻止不受欢迎的自动骚扰电话。这项提议如果获得通过,将允许无线运营商默认为客户阻止这些自动骚扰电话。公司还允许消费者自己阻止来自未知号码的呼叫。

来源: cnBeta.COM

详情: http://t.cn/EKjCaDT

CEO 透露:Coinbase 现管理着 10 亿美元的加密货币资产

在周三举办的 CoinDesk Consensus 2019 大会上,Coinbase CEO Brian Armstrong 表示:尽管推出仅 12 个月,该交易所目前还是托管了 10 亿美元的加密货币资产(AUM)。在现场讨论环节,当《华尔街日报》记者 Paul Vigna 向 Armstrong 询问有关加密货币行业的机构参与状况,他答道:“从 12 个月前开始,我们管理的加密货币资产刚刚超过了 10 亿美元”。

来源: cnBeta.COM

详情: http://t.cn/EKjCCIo

「净网 2019」4 万余条公民信息被窃取,怀化公安跨省抓获黑客

“我真没想到这触犯了法律”周某做梦也没有想到,因为自己一时炫技竟惹上了牢狱之灾。5 月 15 日晚,怀化市公安局鹤城分局网安大队民警将涉嫌侵犯公民个人信息及破坏计算机信息系统的违法犯罪嫌疑人周某从深圳带回怀化。周某因涉嫌窃取怀化市某高校学生信息数据 46767 条,目前已被刑事拘留。

来源: 怀化网警巡查执法

详情: http://t.cn/EKjCOrq

(信息来源于网络,安华金和搜集整理)

基础的 rsync 命令通常足够来管理你的 Linux 备份,但是额外的选项使大型备份集更快、更强大。

 title=

很明显,备份一直是 Linux 世界的热门话题。回到 2017,David Both 为 Opensource.com 的读者在使用 rsync 备份 Linux 系统方面提了一些建议,在这年的更早时候,他发起了一项问卷调查询问大家,在 Linux 中你的 /home 目录的主要备份策略是什么,在今年的另一个问卷调查中,Don Watkins 问到,你使用哪种开源备份解决方案

我的回复是 rsync。我真的非常喜欢 rsync!市场上有大量大而复杂的工具,对于管理磁带机或者存储库设备,这些可能是必要的,但是可能你需要的只是一个简单的开源命令行工具。

rsync 基础

我为一个大概拥有 35,000 开发者并有着几十 TB 文件的全球性机构管理二进制仓库。我经常一次移动或者归档上百 GB 的数据。使用的是 rsync。这种经历使我对这个简单的工具充满信心。(所以,是的,我在家使用它来备份我的 Linux 系统)

基础的 rsync 命令很简单。

rsync -av 源目录 目的地目录

实际上,在各种指南中教的 rsync 命令在大多数通用情况下都运行的很好。然而,假设我们需要备份大量的数据。例如包含 2,000 个子目录的目录,每个包含 50GB 到 700GB 的数据。在这个目录运行 rsync 可能需要大量时间,尤其是当你使用校验选项时(我倾向使用)。

当我们试图同步大量数据或者通过慢的网络连接时,可能遇到性能问题。让我给你展示一些我使用的方法来确保好的性能和可靠性。

rsync 高级用法

rsync 运行时出现的第一行是:“正在发送增量文件列表。” 如果你在网上搜索这一行,你将看到很多类似的问题:为什么它一直运行,或者为什么它似乎挂起了。

这里是一个基于这个场景的例子。假设我们有一个 /storage 的目录,我们想要备份到一个外部 USB 磁盘,我们可以使用下面的命令:

rsync -cav /storage /media/WDPassport

-c 选项告诉 rsync 使用文件校验和而不是时间戳来决定改变的文件,这通常消耗的时间更久。为了分解 /storage 目录,我通过子目录同步,使用 find 命令。这是一个例子:

find /storage -type d -exec rsync -cav {} /media/WDPassport \;

这看起来可以,但是如果 /storage 目录有任何文件,它们将被跳过。因此,我们如何同步 /storage 目录中的文件呢?同样有一个细微的差别是这些选项将造成 rsync 会同步 . 目录,该目录是源目录自身;这意味着它会同步子目录两次,这并不是我们想要的。

长话短说,我的解决方案是一个 “双-递增”脚本。这允许我分解一个目录,例如,当你的家目录有多个大的目录,例如音乐或者家庭照片时,分解 /home 目录为单个的用户家目录。

这是我的脚本的一个例子:

HOMES="alan"
DRIVE="/media/WDPassport"

for HOME in $HOMES; do
cd /home/$HOME
rsync -cdlptgov --delete . /$DRIVE/$HOME
find . -maxdepth 1 -type d -not -name "." -exec rsync -crlptgov --delete {} /$DRIVE/$HOME \;
done

第一个 rsync 命令拷贝它在源目录中发现的文件和目录。然而,它将目录留着不处理,因此我们能够通过 find 命令迭代它们。这通过传递 -d 参数来完成,它告诉 rsync 不要递归目录。

-d, --dirs 传输目录而不递归

然后 find 命令传递每个目录来单独运行 rsync。之后 rsync 拷贝目录的内容。这通过传递 -r 参数来完成,它告诉 rsync 要递归目录。

-r, --recursive 递归进入目录

这使得 rsync 使用的增量文件保持在一个合理的大小。

大多数 rsync 指南为了简便使用 -a (或者 archive) 参数。这实际是一个复合参数。

-a, --archive 归档模式;等价于 -rlptgoD(没有 -H,-A,-X)

我传递的其他参数包含在 a 中;这些是 -l-p-t-g-o

-l, --links 复制符号链接作为符号链接
-p, --perms 保留权限
-t, --times 保留修改时间
-g, --group 保留组
-o, --owner 保留拥有者(只适用于超级管理员)

--delete 选项告诉 rsync 删除目的地目录中所有在源目录不存在的任意文件。这种方式,运行的结果仅仅是复制。你同样可以排除 .Trash 目录或者 MacOS 创建的 .DS_Store 文件。

-not -name ".Trash*" -not -name ".DS_Store"

注意

最后一条建议: rsync 可以是破坏性的命令。幸运的是,它的睿智的创造者提供了 “空运行” 的能力。如果我们加入 n 选项,rsync 会显示预期的输出但不写任何数据。

`rsync -cdlptgovn --delete . /$DRIVE/$HOME`

这个脚本适用于非常大的存储规模和高延迟或者慢链接的情况。一如既往,我确信仍有提升的空间。如果你有任何建议,请在下方评论中分享。


via: https://opensource.com/article/19/5/advanced-rsync

作者:Alan Formy-Duval 选题:lujun9972 译者:warmfrog 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在我们覆盖 7 个 PyPI 库的系列文章中了解解决 Python 问题的更多信息。

Python 是当今使用最多的流行编程语言之一,因为:它是开源的,它有广泛的用途(例如 Web 编程、业务应用、游戏、科学编程等等),它有一个充满活力和专注的社区支持它。这个社区可以让我们在 Python Package Index(PyPI)中有如此庞大、多样化的软件包,用以扩展和改进 Python 并解决不可避免的问题。

在本系列中,我们将介绍七个可以帮助你解决常见 Python 问题的 PyPI 库。在第一篇文章中,我们了解了 Cython。今天,我们将使用 Black 这个代码格式化工具。

Black

有时创意可能是一件美妙的事情。有时它只是一种痛苦。我喜欢创造性地解决难题,但我希望我的 Python 格式尽可能一致。没有人对使用“有趣”缩进的代码印象深刻。

但是比不一致的格式更糟糕的是除了检查格式之外什么都没有做的代码审查。这对审查者来说很烦人,对于被审查者来说甚至更烦人。当你的 linter 告诉你代码缩进不正确时,但没有提示正确的缩进量,这也会令人气愤。

使用 Black,它不会告诉你做什么,它是一个优良、勤奋的机器人:它将为你修复代码。

要了解它如何工作的,请随意写一些非常不一致的内容,例如:

def add(a, b): return a+b

def mult(a, b):
      return \
        a              *        b

Black 抱怨了么?并没有,它为你修复了!

$ black math 
reformatted math
All done! ✨ ? ✨
1 file reformatted.
$ cat math 
def add(a, b):
    return a + b


def mult(a, b):
    return a * b

Black 确实提供了报错而不是修复的选项,甚至还有输出 diff 编辑样式的选项。这些选项在持续集成 (CI)系统中非常有用,可以在本地强制运行 Black。此外,如果 diff 输出被记录到 CI 输出中,你可以直接将其粘贴到 patch 中,以便在极少数情况下你需要修复输出,但无法本地安装 Black 使用。

$ black --check --diff bad 
--- math 2019-04-09 17:24:22.747815 +0000
+++ math 2019-04-09 17:26:04.269451 +0000
@@ -1,7 +1,7 @@
-def add(a, b): return a + b
+def add(a, b):
+    return a + b
 
 
 def mult(a, b):
-          return \
-                  a             *             b
+    return a * b
 
would reformat math
All done! ? ? ?
1 file would be reformatted.
$ echo $?
1

在本系列的下一篇文章中,我们将介绍 attrs ,这是一个可以帮助你快速编写简洁、正确的代码的库。

(题图:Subgrafik San


via: https://opensource.com/article/19/5/python-black

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出