标签: file-command

“魔法测试”对 file 命令意味着什么?

我正在阅读有关file命令的内容,但遇到了一些我不太明白的事情:

file 旨在确定被查询的文件类型.... file 通过对相关文件执行组测试来实现这一点:

  • 文件系统测试,
  • 魔法测试,
  • 语言测试

什么是魔法测试?

file-command terminology file-format

20
推荐指数
2
解决办法
2339
查看次数

Linux file 命令对文件进行分类

我需要识别随机文件中包含的数据类型。我是 Linux 新手。

我打算使用该file命令来了解文件具有的数据类型。我尝试了该命令并得到了下面的输出。

有人向我建议该file命令查看文件的初始字节以确定数据类型。该file命令根本不查看文件扩展名。那是对的吗?我查看了手册页,但觉得它太技术性了。如果有人可以提供一个链接,该链接对file命令的工作方式有更简单的解释,我将不胜感激。

运行file命令后我可以获得哪些不同的可能答案?例如,在下面的成绩单中,我得到了 JPEG、ISO 媒体、ASCII 等:

屏幕输出如下

 m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard
m7% file music-file.m4a
music-file.m4a: ISO Media, MPEG v4 system, iTunes AAC-LC
m7% file numbers-file.txt
numbers-file.txt: ASCII text
m7% file pdf-file.pdf
pdf-file.pdf: PDF document, version 1.4
m7% file text-file.txt
text-file.txt: ASCII text
m7% file video-file.MOV
video-file.MOV: data
Run Code Online (Sandbox Code Playgroud)


更新 1

感谢您的回答,他们为我澄清了一些事情。 …

file-command file-format

18
推荐指数
3
解决办法
2万
查看次数

为什么“file xxx.src”导致“无法打开`xxx.src'(没有这样的文件或目录)”但退出状态为0(成功)?

为什么file xxx.src导致cannot open `xxx.src' (No such file or directory)但退出状态为 0(成功)?

$ file xxx.src ; echo $?
xxx.src: cannot open `xxx.src' (No such file or directory)
0
Run Code Online (Sandbox Code Playgroud)

注意:比较ls

$ ls xxx.src ; echo $?
ls: cannot access 'xxx.src': No such file or directory
2
Run Code Online (Sandbox Code Playgroud)

linux file-command exit-status

17
推荐指数
2
解决办法
3646
查看次数

命令文件的建议背后的故事是什么?

当我阅读时,file(1)我在手册页中注意到了这一点(强调我的):

将本地定义添加到 /etc/magic 时,请确保保留这些关键字。用户依赖于知道目录中的所有可读文件都印有“文本”一词。不要像伯克利那样将“shell 命令文本”更改为“shell 脚本”。

这句话背后有什么故事?我猜Berkeley是指,BSD (Berkeley software distribution)但谷歌没有提供足够的信息。

链接到file(1) http://man7.org/linux/man-pages/man1/file.1.html

一些挖掘表明该声明是在 27 年前添加的链接

Don't do as one computer vendor did \- change ``shell commands text''
to ``shell script''.
Run Code Online (Sandbox Code Playgroud)

后来改为当前声明链接

Don't do as Berkeley did \- change ``shell commands text''
Run Code Online (Sandbox Code Playgroud)

file-command history

14
推荐指数
1
解决办法
580
查看次数

动态链接器/加载器本身如何按照`file` 的报告进行动态链接?

考虑 的共享对象依赖项/bin/bash,其中包括/lib64/ld-linux-x86-64.so.2(动态链接器/加载器):

ldd /bin/bash
    linux-vdso.so.1 (0x00007fffd0887000)
    libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f57a04e3000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f57a04de000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f57a031d000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f57a0652000)
Run Code Online (Sandbox Code Playgroud)

检查/lib64/ld-linux-x86-64.so.2表明它是一个符号链接/lib/x86_64-linux-gnu/ld-2.28.so

ls -la /lib64/ld-linux-x86-64.so.2 
lrwxrwxrwx 1 root root 32 May  1 19:24 /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.28.so
Run Code Online (Sandbox Code Playgroud)

此外,file报告/lib/x86_64-linux-gnu/ld-2.28.so本身是动态链接的:

file -L /lib64/ld-linux-x86-64.so.2
/lib64/ld-linux-x86-64.so.2: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f25dfd7b95be4ba386fd71080accae8c0732b711, stripped
Run Code Online (Sandbox Code Playgroud)

我想知道:

  1. 动态链接器/加载器 ( /lib64/ld-linux-x86-64.so.2) 本身如何动态链接?它在运行时链接自己吗?
  2. /lib/x86_64-linux-gnu/ld-2.28.so记录在案以处理 a.out 二进制文件 ( man ld.so),但是/bin/bash …

linux file-command dynamic-linking shared-library

14
推荐指数
1
解决办法
1841
查看次数

如何按文件类型查找文件?

我知道我可以使用find:找到文件find . -type f -name 'sunrise'。结果示例:

./sunrise
./events/sunrise
./astronomy/sunrise
./schedule/sunrise
Run Code Online (Sandbox Code Playgroud)

我也知道我可以确定文件的文件类型:file sunrise. 结果示例:

sunrise: PEM RSA private key
Run Code Online (Sandbox Code Playgroud)

但是如何按文件类型查找文件?

例如my-find . -type f -name 'sunrise' -filetype=bash-script

./astronomy/sunrise
./schedule/sunrise
Run Code Online (Sandbox Code Playgroud)

find file-command files file-types

13
推荐指数
1
解决办法
3万
查看次数

file命令如何区分文本和LaTeX文件?

我有许多文件(Jupyter 笔记本.ipynb),它们是文本文件。所有这些都包含一些 LaTeX 标记。但是当我运行时file,我得到:

$ file nb_*          
nb_1.ipynb:      ASCII text
nb_2.ipynb:      ASCII text
nb_3.ipynb:      ASCII text, with very long lines
nb_4.ipynb:      LaTeX document, ASCII text, with very long lines
nb_5.ipynb:      text, with very long lines
Run Code Online (Sandbox Code Playgroud)

file这些怎么区分?我希望所有文件都具有相同的类型。


(为什么文件应该有相同的类型?我将它们上传到在线系统进行共享。系统以某种方式对它们进行分类并以不同的方式对待它们,我不可能更改它。我怀疑该平台在内部使用file或可能使用libmagic和想解决这个问题。)

file-command files text text-formatting file-types

13
推荐指数
1
解决办法
1120
查看次数

确定文件是否为 SQLite 数据库的快速方法

我正在寻找一种方法来确定包含数千个文件的文件夹中的文件类型。文件名没有透露太多,也没有扩展名,但类型不同。具体来说,我试图确定一个文件是否是一个 sqlite 数据库。

使用该file命令时,它确定每秒 2-3 个文件的类型。这似乎是解决问题的好方法,只是它太慢了。

然后我尝试用 sqlite3 打开每个文件并检查是否有错误。这样,我每秒可以检查 4-5 个文件。好多了,但我认为可能有更好的方法来做到这一点。

performance file-command sqlite

9
推荐指数
2
解决办法
6304
查看次数

查找假设扩展名错误的文件类型

我有一个图像档案,我会跟上。有时,我将它们从重新格式化的网站中提取出来,同时保持扩展名不变,最常见的是将 PNG 图像转换为仍然命名为“.png”的 JPG。有没有办法发现这种情况何时发生并自动修复?

在 Windows 上,我为此使用了 IrfanView,但这需要一个 Wine 包装器。

file-command utilities mime-types files command

9
推荐指数
2
解决办法
2121
查看次数

file 命令显然返回错误的 MIME 类型

为什么以下不返回text/csv

$ echo 'foo,bar\nbaz,quux' > temp.csv;file -b --mime temp.csv
text/plain; charset=us-ascii
Run Code Online (Sandbox Code Playgroud)

我使用这个例子是为了更加清晰,但我也遇到了其他 CSV 文件的问题。

$ file -b --mime '/Users/jasonswett/projects/client_work/gd/spec/test_files/wtf.csv'
text/plain; charset=us-ascii
Run Code Online (Sandbox Code Playgroud)

为什么它不认为 CSV 是 CSV?我可以对 CSV 做些什么来file返回“正确”的东西吗?

file-command mime-types

8
推荐指数
2
解决办法
5250
查看次数