Juntao Tan的个人博客

争取为中文互联网留下点什么。


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

Linux 学习记录: find 命令

发表于 2020-02-27 | 更新于: 2020-03-30 | 分类于 Linux
字数统计: 1.1k | 阅读时长 ≈ 4

find 命令算是平时使用频率较高的一个命令了,因为经常需要搜索相关的文件,熟悉它的常见使用方法,对工作是很有帮助的。这篇文章来总结下如何用好 find 命令。

1. 根据文件名查找

find 最常见的使用方法就是根据文件名来进行查找了。

查找当前目录 . 下文件名为 hello.txt 的文件:

1
find . -name "hello.txt"

查找当前目录 . 下文件后缀名为 .py 的文件(使用通配符 *):

1
find . -name "*.py"

那如果加个否定,查找当前目录下文件后缀名不是 .py 的文件:

1
find . ! -name "*.py"

忽略文件大小写,查找当前目录 . 下文件名中包含 test 的普通文件:

1
2
3
find . -type f -iname "*test*"  
# 1. 忽略大小写的查找方法是使用参数 -iname,不是用 find -type f -i -name "*test*"
# 2. -type f 意思是查找普通文件,后面会解释

2. 根据文件类型查找

如果需要查找指定类型的文件,需要跟 -type 参数。

type 参数的主要取值有(不包括全部):

  • -f : 普通文件;
  • -d : 目录;
  • -l : 连接文件;
  • -s : socket 类型文件。

查找当前目录下以 test 打头的目录:

1
find . -type d -name "test*"

3. 根据文件大小查找

如果需要利用文件大小来做筛选,可以跟 -size 参数。

-size 参数的单位主要有(不包括全部):

  • -c : 字节 Byte;
  • -k : 千字节,KB;
  • -M : 兆字节,MB;
  • -G : GB。

此外,还有加号 + 和减号 - 有大小含义:

  • +50M : 表示大于 50M 的文件;
  • -50M : 表示小于 50M 的文件;
  • 50M : 表示大小刚好是 50M 的文件。

查找当前目录下大于 100M 的普通文件:

1
find . -type f -size +100M

4. 根据时间查找

find 命令后面可跟的时间参数主要有 3 个,单位都是 “天”:

  • -mtime : modified time,表示修改时间;
  • -atime : accessed time,表示访问时间;
  • -ctime : changed time,表示 修改时间。

同 -size 参数一样,时间参数同样可以配合加号 + 和 减号 - 一起使用:

  • +n : 表示 n 天之前的,不包括 n 天本身;
  • -n : 表示 n 天以内的,包含 n 天本身;
  • n : 表示 n 天当天。

举个例子,我们需要找出当前目录下超过 10 天的没有被访问过的普通文件:

1
find . -type f -atime +10

同样,找出当前目录下 5 天之内被修改的普通文件:

1
find . -type f -mtime -5

5. 根据文件所有者和权限查找

需要使用 -user 和 -perm 参数。

例如,找出 / 目录下文件拥有者是 ubuntu 的所有普通文件:

1
find / -type f -user ubuntu

找出当前目录下所有权限为 655 的普通文件:

1
find . -type f -perm 655

6. 限制查找深度

可以使用 -maxdepth 和 -mindepth 两个参数来控制查找的深度,因为默认情况下,find 命令会查找其后所跟的目录及其所有子目录。

如果只查找当前目录本身,不深入其子目录查找,可以设置 -maxdepth 1 :

1
find . -maxdepth 1 -name "*.py"

如果需要查找当前目录的子目录中所包含的 .py 文件,可以加上 -mindepth 2 参数:

1
find . -mindepth 2 -maxdepth 2 -name "*.py"

*注:这两个参数不要同 -type 参数一同使用(尝试后发现不行)

7. 查找完执行额外的动作

默认情况下 find 命令查找结束后,会将结果输出到屏幕上。如果我们想要对所有查找到的结果做一些处理,可以使用 -exec 参数。

拿一个例子说明。

1
find /usr/bin /usr/sbin -perm 644 -exec ls -l {} \;

有 3 个需要注意的地方:

  • -exec : 跟在 find 命令的最后,表示执行额外的动作;
  • {} : 表示 find命令找到的所有内容;
  • \; : 表示额外动作的结束。

另一个例子:将当前目录下超过 10 天未被访问的文件移动到 ./expired 目录下:

1
find . -type f -atime +10 -exec mv {} ./expired \;

最后一个例子,批量修改文件权限:将当前目录下权限为 644 的普通文件,权限修改为 655 :

1
find . -type f -perm 644 -exec chmod {} 655 \;

References

  • 《鸟哥的 Linux 私房菜》6.5 节《指令与文件的搜寻》

  • https://www.cnblogs.com/chyingp/p/linux-command-find.html

  • http://einverne.github.io/post/2018/02/find-command.html

  • https://blog.csdn.net/yanlaifan/article/details/52797155

  • https://blog.csdn.net/wzzfeitian/article/details/40985549

论文阅读笔记:A survey on Adversarial Machine Learning

发表于 2019-11-24 | 更新于: 2019-11-24
字数统计: 755 | 阅读时长 ≈ 3

这篇简短的综述论文主要介绍了什么是Adversarial Machine Learning,列出了AML的几种常见分类。

Introduction

Definition of adversarial machine learning

machine learning in the presence of an adversary.

All kinds of attacks can be categorized in three main types:

  1. poisoning attacks: trying to poison the training of test dat
  2. detection attacks: with the objective of evading detection
  3. model extraction attacks: with the objective of replicating the model

当然,这三种分类方法只是作何自己做的一个分类,实际上还可以有不同的分类方法,需要做的就是理解每一种分分类的划分依据是什么就可以了,不需要刻意去记住有那几种分类。

当然,还有一种分类是将攻击者和防御者建模成一个博弈问题。

It is worth to mention another much different aspect of research in adversarial machine learning which models the model-attacker worlds as a game and defines different moves for each side of the game.
By such definition, a min-max algorithm can be used to determine best moves for each side and fide possible equilibriums of the game.

Taxonomy

这一小节列举出了目前在AML领域中几种常见的攻击方法。

A. Model Extraction Attacks

这种攻击方法一般在machine learning as a service的场景中。即云服务商只会给用户提供一个查询的API接口,但是每次查询是需要收费的。

这时候攻击者就希望能不能找到一个和目标模型表现近似的模型,从而避免向云服务商付费。

这种攻击可以大致分为下面3类:

  1. eqution-solving model extraction attacks
    在逻辑回归等简单模型中适用,原理主要是解方程组。
  2. path finding attacks
    一般用在决策树模型中。
  3. membership queries attacks
    判定一个给定的数据点事会否在原始数据集中。

B. Adversarial Examples

这个不需要过多解释了,现在的文章实在是太多了。

需要介绍的是在论文[1]中,作者提出了既能够欺骗人眼也能够欺骗机器的对抗样本。

对抗样本目前最需要解决的问题是防御问题,尤其时针对迁移性攻击的防御。

C. Data Poisoning Attacks

这种攻击适用于攻击者不能直接接触到训练数据,但训练过程是online training or adaptive training,即训练过程中需要不断加入新的训练数据。

这种攻击在SVM中很容易成功,因为svm做分类最主要就是support vectors在起作用。

D. Model Evasion Attacks

这种攻击和对抗样本攻击很像,是在模型做inference阶段的攻击。但是因为做spam detection or malware detection在机器学习中很重要,所以这种攻击就被单独拎出来了。

Conclusion

  • 这篇文章中没有介绍道data inversion attack,即能够推导出原始训练数据近似的攻击。
  • AML的防御还是一个需要不断深入研究的领域。

参考

[1] Elsayed, G.F., Shankar, S., Cheung, B.Papernot, N., Kurakin, A., Goodfellow, I. and Sohl-Dickstein, J., 2018. Adversarial Examples that Fool both Human and Computer Vision. arXiv preprint arXiv:1802.08195

论文阅读笔记:Federated Learning:Challenges, Methods and Future Directions

发表于 2019-11-23 | 更新于: 2019-11-28
字数统计: 212 | 阅读时长 ≈ 1

这篇博客简单总结一下这篇2019年8月份的综述文章。

这篇综述论文最主要的贡献在于阐述了当前研究情况下 federated learning 面临的主要问题,以及为了一下可以值得期望的研究方向。

可是就现阶段的研究而言,真的还有很多很多问题需要解决,联邦学习现在就是愿景非常美好,能够利用到不同device上面的额数据做一些训练任务,但是想真正的实现一个物理系统还有很多很多的工作需要做。

目前存在的4个主要问题如下:

  1. 通信开销太大
  2. 不同的device系统是异质的
  3. 不同device上面的数据也是异质的
  4. 联邦学习中的安全和隐私问题

下载网络视频

发表于 2019-11-17 | 更新于: 2019-11-17
字数统计: 801 | 阅读时长 ≈ 2

这篇文章介绍几种下载网页视频的方法。

方法1:第三方下载工具you-get

you-get是一个第三方的Python包,用户只需要安装这个包,然后就可以直接在命令行中下载视频,非常便捷。

  1. step1
    没有安装Python3的需要先在电脑上安装Python3。接着使用pip3命令安装you-get。

    1
    pip3 install --upgrade you-get # 确保安装最新版本
  2. step2
    打开命令行,切换到想要保存视频文件的目录中,在浏览器地址栏中拷贝视频的播放地址,接着输入命令

    1
    you-get <视频地址>

    这种方式下载默认的视频格式文件,如果想要下载不同格式、不同清晰度的视频文件,可以加上-i参数:

    1
    you-get -i <视频地址>

    观察控制台的输出,然后选择自己想要下载的格式文件对应额下载命令,再重新执行一遍you-get命令,此时不用再带上-i命令:

    1
    you-get <每种格式文件对应的下载参数> <视频地址>

you-get目前支持很多网站的下载,如youtube bilibili 优酷 腾讯视频 等等。

方法2:直接在网页中找到视频文件原地址

这种方式能成功的前提是网站的开发者并没有对视频文件做很好的保护,因为一般的大厂为了防止视频被下载,都会对视频文件的地址做保护。

下面介绍这种简单的下载方式。

  1. 在视频对应网页中右键检查或者直接F12打开网页调试页面。
  2. 点击调试面板最左上角的箭头,然后将鼠标移到网页中,点击视频文件所在的区域,然后就能在element中找到对应的video标签,src属性中地址就是视频文件的原地址了,一般是.mp4格式的。
  3. 在新标签中打开地址,在新标签中直接将视频另存为就能下载了。

方法3:使用插件+下载工具下载M3u8格式视频文件

前面说了,一般的网站都会对视频源文件做保护,不能直接找到文件的原地址。常见的做法就是修改video标签的src属性为blob:https://xxxxx,这时候如果在新标签中打开这个地址,什么东西都找不到。

那么这种情况下怎么下载到原视频文件呢?

这篇文章 中详细分析了blog:http的原理:网页中的视频文件被切分为了一个个小的ts格式的视频片段,这么做的原因,一方面是方便无缝切换视频清晰,另一方面是为了防止视频被下载。

但是尽管找到了ts格式的视频片段,但是也不能一个个的下载下来啊,太繁琐了。

于是有人做了Meu8这种受保护的视频格式文件的下载工具,具体可以follow这篇文章

参考

  • https://blog.csdn.net/Bumphy/article/details/82865889
  • https://blog.csdn.net/xingyun89114/article/details/80699527
  • https://blog.csdn.net/Angry_Mills/article/details/82705595

信息熵

发表于 2019-11-11 | 更新于: 2019-11-16
字数统计: 1.3k | 阅读时长 ≈ 4

这篇文章简单地总结一下信息熵。

概率和编码长度

首先假设我们有离散型随机变量 X,X 总共有n个取值,每种取值的概率为p(x)。

假如X有4种可能的取值,每种取值的概率都相同,那么我们需要用2个二进制位来编码每种可能的取值。相应的,如果X有16个取值,那么需要用4个二进制位来编码。

但是如果每种取值发生的概率并不是相同的呢?例如,其中某个取值出现的概率明显要高于其他取值,如果这时候还是用相同的编码长度来编码每种可能的取值,就会造成一种浪费。一个直觉的方法是将概率大的取值分配较短的编码,概率小的取值分配稍微长的编码长度,这样使得整体的编码长度达到最短。

阅读全文 »

关于贝叶斯公式的几种理解

发表于 2019-10-07 | 更新于: 2019-10-07
字数统计: 0 | 阅读时长 ≈ 1

论文阅读笔记:Distillation as a Defense to Adversarial Perturbations against Deep Neural Networks

发表于 2019-07-30 | 更新于: 2019-08-14
字数统计: 170 | 阅读时长 ≈ 1

总览

这篇文章发表在 S&P 2016 上,是对抗样本领域中较早的一种系统性的防御方法,即defensive distillation(防御蒸馏)。因为先前的防御方法大多是经验性的,如对抗训练等等,都是从结果上证明了其防御有效,但没有从原理层次详细的分析防御之所以成功的原因。在本文中,作者观察在两个简单的识别MNIST和CIFAR10的模型上的实验结果,证实了defensive distillation方法的有效性,但这个方法在后来的文章中,也就是S&P 2017 CW attack,被证实是无效的防御。

论文阅读笔记:DeepFool: a simple and accurate method to fool neural networks

发表于 2019-07-27 | 更新于: 2019-07-29
字数统计: 2.2k | 阅读时长 ≈ 7

寻找对抗样本的过程就是最优化下面的目标函数:

其中k表示分类器,r表示添加的扰动,delta文中表示的含义是分类器在x这个样本点处的robustness,其实就是扰动的L-2 norm。

分类器在整个数据集上的robustness计算公式如下:

从公式中可以看出,如果添加的扰动越小,计算到的ro值就越小,相应的根据文中的定义,分类器的robustness就越好。

本文中的主要贡献:

阅读全文 »

论文阅读笔记:Explaining and Harnessing Adversarial Examples

发表于 2019-07-15 | 更新于: 2019-07-15
字数统计: 0 | 阅读时长 ≈ 1

论文阅读笔记:Intriguing Properties of Neural Network

发表于 2019-07-10 | 更新于: 2019-07-15
字数统计: 1.1k | 阅读时长 ≈ 3

对抗样本(adversarial examples)的开山之作。

文中主要提到了神经网络两个比较奇怪的性质:

  1. 神经网络中携带语义信息的不是某单个神经元,而是整个网络所表示的空间。
  2. 给样本添加一些轻微的扰动,会导致神经网络模型错误分类,这些样本就称为对抗样本。

这里对第一个性质做简单的说明。

首先,作者们通过观察某个隐层中某个特定神经元对什么样的输入图片会产生最大的激活值,以此来确定这个神经元对什么样的特征是最敏感的,从而确定这个神经元包含什么样的语义信息。这个想法是可行的并且前面(2014年之前)已经有这方面的研究了。实验结果就发现:单个神经元确实能够表示某种语义信息。接着作者们又做了另外一个实验:选择隐层所表示的空间中的一个随机方向(就是基向量的随机线性组合,是隐层中单个神经元所无法表示的方向),然后用同样的方法使其激活值最大。实验结果发现,同单个神经元一样,这个随机的方向也能表示某种确切的语义信息,从而说明了这个随机方向也可以表示某种特征。

所以最后得到的结论就是:神经网络某个隐藏层中携带语义信息的并不是单个神经元,而是这个隐层所表示的整个空间。

文中提出来的几个假设:

  1. it is assumend that is possible for the output unit to assign non-significant(and, presumaby, non-epsilon)probabilities to regions of the input space that contain no training examples in their vicinity.
  2. the adversarial examples represent low-probability(high-dimensional)”pockets” in the manifold, which are hard to efficiently find by simply randomly sampling the input around a given example.

那么作者们是如何找到对抗样本的呢?

寻找对抗样本的过程,其实是一个不断优化的过程:一方面我们希望添加的扰动尽可能小,因为如果是较大的扰动,任何state-of-the-art的模型都会错误分类,就算是人眼也可能识别不了,这和对抗样本问题的研究初衷不一样,我们想知道的是为什么神经网络在面对这些人眼不可分辨的图片时,会给出巨大的错误结果。另一方面,我们希望对抗样本能被错误分类到另一个其它类别,从损失函数的角度看,就是想让其越大越好,于是作者们给出了下面的优化目标函数:

其中x是原始图片,r是添加的扰动,f是分类器,l是目标类别(同x正确的类别不同)。我们希望r越小越好,同时使对抗样本x + r被错误分类到一个指定类别l下,同时还需要生成的x + r的值在[0,1]之间(保证是一张合法的图片)。

直接解这个问题不容易,因此作者转换了一种思路,从损失函数的角度找最优的r:

简单看看损失函数:一方面我们需要r的某种范式越小越好,另一方面我们希望loss(x+r, l)越小越好,因为这样表明x+r分类成类别l的概率越大。所以我们的目标是最小化上述公式,用到的方法是box-constrained L-BFGS.

最后,作者们通过实验发现了几个重要的现象:

  • 对于论文中提到的所有网络结构(non-convolutional network, AlexNet, QuocNet),都能用上述方法生成对抗样本;
  • 对抗样本具有跨模型的泛化能力:在A模型上产生的对抗样本,有很大一部分在B模型(和A模型结构相同,超参数不同)上也有效(也能是B模型错误分类)
  • 对抗样本具有跨数据集的泛化能力:在D1数据集训练得到的模型上产生的对抗样本,在D2数据集训练得到的模型上也有效,D1和D2属于不同的子集,两个模型是结构完全不同的模型。
1…3456
Juntao Tan

Juntao Tan

记录一些重要的技术点,方便自己查阅,也希望能够帮助到大家。

60 日志
6 分类
87 标签
GitHub LinkedIn Zhihu Douban E-Mail
0%
© 2019 — 2022 Juntao Tan, all rights reserved. | Site words total count: 50.9k
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4
本站总访问量 59488 次 | 有 45178 人看过我的博客
Hosted by GitHub Pages