Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 仅列出未加密的文件_Shell_Unix_Solaris_Sh - Fatal编程技术网

Shell 仅列出未加密的文件

Shell 仅列出未加密的文件,shell,unix,solaris,sh,Shell,Unix,Solaris,Sh,首先,我并不是Unix专家,所以请原谅我的问题有点天真 我需要列出给定目录中可能包含加密和未加密文件的未加密文件 我无法仅通过文件扩展名可靠地识别这些文件,希望SO社区中的某个人能够帮助我 我可以跑: file * | egrep -w 'text|XML' 但这只会识别文本或XML文件。如果我不能做得更好的话,我可能会使用它,因为目前directry中唯一的其他文件是文本或XML文件,但我真的想识别所有未加密的文件,不管它们是什么类型 这在单行命令中是否可行 编辑:加密文件通过openSSL

首先,我并不是Unix专家,所以请原谅我的问题有点天真

我需要列出给定目录中可能包含加密和未加密文件的未加密文件

我无法仅通过文件扩展名可靠地识别这些文件,希望SO社区中的某个人能够帮助我

我可以跑:

file * | egrep -w 'text|XML'
但这只会识别文本或XML文件。如果我不能做得更好的话,我可能会使用它,因为目前directry中唯一的其他文件是文本或XML文件,但我真的想识别所有未加密的文件,不管它们是什么类型

这在单行命令中是否可行

编辑:加密文件通过openSSL加密

我用来解除文件加密的命令是:

openssl -d -aes128 -in <encrypted_filename> -out <unencrypted_filename>
openssl-d-aes128-in-out

你的问题不是一个小问题。solaris文件命令使用“magic”-/etc/magic。这是一组规则,用于尝试确定文件的风格。它并不完美

如果您阅读/etc/magic文件,请注意最后一列是verbiage,当它识别文件中的某些结构时,它位于file命令的输出中

基本上,file命令查看文件的前几个字节,就像exec()系列的系统调用一样。因此,文件第一行中的#/bin/sh在该行的第一个字符中向exec()标识exec()需要调用以“运行”文件的“命令解释器”。文件得到了相同的想法,并说“命令文本”“awk文本”等

您的问题是,您必须确定要将哪些类型的文件视为文件的输出。您需要花时间深入研究未加密的文件,以查看您可以从文件中得到什么“答案”。否则,您可以在整个目录树上运行该文件,并对所有您认为正确的答案进行排序

find /path/to/files -type f -exec file {} \; | nawk -F':' '!arr[$2]++'  > outputfile
这将为您提供一个关于您认为您拥有的文件的不同答案的列表。把你喜欢的放在一个文件中,称之为good.txt

find /path/to/files -type f -exec file {} \; > bigfile
nawk -F':' 'FILENAME=="good.txt" {arr$1]++}
          FILENAME=="bigfile" {if($2 in arr) {print $1}} ' good.txt bigfile > nonencryptedfiles.txt

这不是100%的保证。文件可以被愚弄

识别加密文件的方法是根据随机性的大小,或者它们所包含的内容。加密的文件(或者至少是加密良好的文件)在统计意义上看起来应该是随机的。包含未加密信息的文件,无论是文本、图形、二进制数据还是机器代码,在统计上都不是随机的

计算随机性的标准方法是使用函数。您可能只需要自动关联每个文件的前几百个字节,因此该过程可以相当快

这是一种黑客行为,但您可能能够利用压缩算法的一个特性:它们通过消除数据中的随机性来工作。加密文件无法压缩(或者至少不能压缩太多),因此您可以尝试压缩每个文件的某些部分并比较压缩比

关于寻找随机性或熵还有其他几个问题,其中很多都有很好的建议,比如:


祝你好运

如何判断文件是否加密?请尝试
files*| grep-v'encryted'
@kev不幸的是,这不起作用,它仍然在结果中列出openSSL加密的文件。当我使用命令
file x.enc
时,它会打印出
x.enc:data
。因此,您可以尝试
file*| grep-vw'data'
@kev,如果我这样做,我会得到目录中的所有“数据”文件(包括加密和未加密的文件),这不是我想要的,因此问题就来了。使用
文件
命令,我似乎无法区分加密文件和未加密文件。谢谢Jim的回答。我将使用这样的东西,因为它应该满足我的需要,尽管我确实理解它不是100%可靠的,所以必须在父系统中设置一些其他限制。