Linux 创建文件

2025年3月17日 | 阅读 12 分钟

Linux 文件系统将一切视为文件,无论是文本文件、图片、分区、编译好的程序、目录还是硬件设备。如果不是文件,那一定是进程。为了管理数据,它形成了一个树状结构。

Ubuntu 中的文件描述

file 命令会检查所有参数以尝试对其进行分类。在此序列中执行三组测试:语言测试、魔术测试和文件系统测试。第一个成功运行的测试将导致打印文件类型。通常,打印的类型会包含单词:text、executable 或 data,这意味着其他任何东西。

例外情况是已知包含二进制数据的领先文件格式。确保在 /etc/magic 目录中添加本地定义时保留关键字。在一个目录中,用户依赖于知道每个可读文件都打印有“text”一词。

文件系统测试通过检查 stat 系统调用的返回值来工作。一个程序会检查文件是否为空,或者它是否是一种特殊的文件。适用于我们正在运行的系统的任何常见文件类型(符号链接、套接字或在运行它们的系统上已知的管道)如果在 <sys/stat.h> 系统头文件中指定,则会被理解。

  • 魔术测试适用于具有特定固定格式数据的文件的。例如,a.out 二进制可执行文件,其格式在基本包含目录的 <a.out>、<elf.h> 和 <exec.h> 中指定。此外,这些文件在其开头附近的一个特定位置包含一个“魔术数字”,该数字解释了 UNIX OS 该文件是二进制可执行文件。
  • “魔术”概念已通过扩展用于数据文件。任何在小偏移量处使用某些恒定标识符的文件都可以这样指定。识别这些文件的信息从 /etc/magic 目录和 /usr/share/misc/magic.mgc 编译的魔术文件中读取。此外,如果存在系统魔术文件,$HOME/.magic 和 $HOME/.magic.mgc 将被利用。
  • 如果文件不匹配魔术文件中的条目,则会检查它是否看起来像一个文本文件。ISO-8859-x、ASCII、非 ISO 扩展 ASCII 8 位字符集、UTF-8 编码的 Unicode、EBCDIC 字符集和 UTF-16 编码的 Unicode 可以通过几个字节序列和范围来区分,这些序列和范围在所有集合中都可以打印文本。
  • 如果文件通过任何测试,则报告文件的字符集。扩展 ASCII、UTF-8、ISO-8859-x 和 ASCII 文件被识别为“文本”,因为它们可以在几乎任何终端上每月读取;EBCDIC 和 UTF-16 是“字符数据”,因为它们是需要翻译才能读取的文本,尽管它们包含文本。

此外,该文件将尝试决定其他文本类型文件的特征。如果文件行以 NEL、CRLF 或 CR 结尾,而不是 Unix 标准的 LF,则会报告。具有重叠和转义序列的文件也将被识别。

当文件已确定应用于文本类型文件的字符集时,文件将尝试确定其是用哪种语言编写的。语言测试搜索可能出现在文件前几个块中的特定字符串。任何无法识别为上述任何字符集的文件的文件通常称为“data”。

File 的简史

在所有 UNIX 版本中,自 Research Version 4 以来一直存在 file 命令。System V 版本宣布了一项重要的重大修改:魔术类型的外部列表。这稍微减慢了程序的速度,但使其更加灵活。

该程序由 Ian Darwin 指定,他没有查看任何人的源代码。John Gilmore 大大改进了代码,使其比初始版本更好。Geoff Collyer 发现了许多不足之处,并提供了一些魔术文件的条目。

Guy Harris 在 1993 年至 1989 年间进行了多次修改。

Christos Zoulas 从 1990 年至今进行了主要的维护和开发。

选项

  • --apple: 它使 file 命令能够生成 Apple MacOS 早期版本使用的创建者代码和文件类型。该代码包含八个字母,第一个指定文件类型。
  • --brief, -b: 它不在结果行前面加上文件名。
  • --compile, -c: 它会写入一个输出文件,即 magic.mgc,其中包含魔术目录或文件的预解析版本。
  • --checking-printout, -c: 它会导致对魔术文件解析后的形式进行检查性打印。通常,它与 -m 选项一起使用来调试魔术文件然后安装它。
  • -E: 代替像 POSIX 所要求的将错误作为一般结果来处理并在文件系统错误上继续,而是生成一个错误消息然后退出。
  • --extension: 它会打印找到的文件类型的有效斜杠分隔的扩展名列表。
  • --separator, -F: 它使用定义的字符串作为返回的文件结果和文件名之间的分隔符。
  • --files-from, -f: 它逐行读取要评估的文件名。
  • --no-dereference, -h: 它会导致不跟踪符号链接。当未指定 POSIXLY_CORRECT 环境变量时,这是默认设置。
  • --mime-encoding, --mine-type: 它类似于 -i 选项,但只打印定义的元素。
  • --keep-going, -k: 不要在第一次匹配时停止。连续匹配将前面加上 '\012-' 字符串。
  • --list, -l: 它显示一个模式列表及其强度,按魔术强度降序排序,用于匹配。
  • --dereference, -L: 此选项会跟踪符号链接,类似于 ls 中的同名标志。如果指定了 POSIXLY_CORRECT 环境变量,则为默认值。
  • --magic-file, -m: 它指定一个替代的目录和文件列表,其中包含魔术。它可以是冒号分隔的列表或单个项目。
  • --no-pad, -n: 它不会填充文件名,因此它们在输出中对齐。
  • --no-buffer, -n: 它在检查所有文件后强制刷新 stdout。仅当检查文件列表时才有帮助。它供希望通过管道获取文件类型输出的程序使用。
  • --preserve-date, -p: 它尝试保留文件访问时间,假设文件在支持 utimes 或 utime 的系统上从未被解释过。
  • --parameter, -P: 它设置几个参数限制。
  • --raw, -r: 它不会将不可打印字符转换为 \ooo。文件通常会将不可打印字符转换为其八进制表示。
  • --special-file, -s: 该文件仅尝试读取和识别参数文件类型,stat 报告为普通文件。它防止了问题,因为读取特殊文件可能会产生特定后果。
  • --version, -v: 它会打印程序版本并退出。
  • --uncompress, -z: 它会尝试查看压缩文件。
  • --uncompress-noreport, -Z: 它会尝试查看压缩文件。但是,它只报告内容信息,而不报告压缩信息。
  • --print0, -0: 它在文件名完成后返回 '\0' 空字符。它不影响分隔符。
  • --help: 它显示帮助消息然后退出。

File 的工作原理

  • 修复输出,因此不需要到处进行 APPLE 和 MIME 选项的测试,并且原始输出只在一个地方完成。这需要一个设计。

注意:将可能的输出推送到列表,在完成时选择最后一个推送的值,或者在列表为空时使用默认值。这不应减慢解释速度。

  • 打印 \012- 和 MAGIC_CONTINUE 之间的条目管理很复杂且笨拙;集中和重构。
  • 在 encoding.c 中,一些编码逻辑是硬编码的,当我们在魔术文件中添加字符集注释(即“!”)时,可以将其移至魔术文件。
  • 继续抑制所有魔术错误。
  • 任意存储长字符串,例如 %s 模式,以便可以打印它们。
  • 修复 #271672 Debian 错误。这可以通过在字符串池中分配字符串,在魔术文件完成后保留字符串池,并将每个字符串指针转换为通过字符串池的关联偏移量来完成。
  • 在当前级别之后,为关联偏移量添加语法。
  • 使 -ki 文件工作,即给出两个或多个 MIME 类型。
  • 包含一个 zip 库,以便可以查看 Office2007 文档以显示有关其内容更多的信息。
  • 包含一个选项来显示文件描述源的 URL。
  • 合并脚本搜索,并提供一种将可执行文件名映射到 MIME 类型的方法。这将避免为所有新的 hash-bang 解释器重复添加相同的魔术。
  • 我们可以跳过缓冲区并适应缓冲区,而不是缓冲区管理。
  • 修复“use”“name”在编译时进行一致性检查。通过保留一个名称排序列表使“use”/“name”更有效。在解析器中,^ 特殊情况用于翻转字节序,因此它不需要是独立的,并对此进行文档化。
  • 我们不探索该偏移量,尽管如果文件中指定的内部偏移量超过缓冲区大小,我们会停止尝试。如果存在文件描述符,则实现缓冲区管理会很好,这样它就可以在文件中移动。不过,我们必须小心,因为它会影响性能。

Linux 文件是区分大小写的,所以 test.txtTest.txt 会被认为是两个不同的文件。在 Linux 中创建文件有多种方法。一些常规方法如下:

除了上述所有方法之外,我们还可以从桌面文件管理器创建文件。让我们详细了解上述方法。

1. 使用 cat 命令

cat 命令是 Linux 中使用最多的命令之一。它用于创建文件、显示文件内容、连接多个文件内容、显示行号等。

在这里,我们将看到如何使用cat 命令创建文件并向其中添加内容。

首先,创建一个目录并将其命名为 New_directory,然后执行 mkdir 命令,如下所示:

进入该目录

输出

Linux Create File

现在执行 cat 命令来创建文件:

上面的命令将创建一个文本文件并进入编辑器模式。现在,输入所需的文本并按 CTRL + D 键保存并退出文件,它将返回到命令行。

要显示文件内容,请执行以下 cat 命令:

考虑下面的输出

Linux Create File

2. 使用 touch 命令

touch 命令也是 Linux 中流行的命令之一。它用于创建新文件、更新现有文件和目录的时间戳。它也可以在 Linux 中创建空文件。

从命令行创建新文件的最简单方法是使用touch 命令。我们可以通过一次执行此命令来创建多个文件。

要创建文件,请执行 touch 命令,后跟如下所示的文件名:

要列出创建文件的信息,请执行以下命令:

考虑下面的输出

Linux Create File

要一次创建多个文件,请在 touch 命令后指定文件及其扩展名,并用空格分隔。执行以下命令一次创建三个文件:

要创建两种不同类型的文件,请按如下方式执行命令:

上面的命令将创建两个名为 test4.txttest.odt 的文件。

要显示文件及其时间戳,请执行 ls 命令,如下所示:

考虑下面的输出

Linux Create File

如果我们传递一个现有文件的名称,它将更改该文件的时间戳。

注意:touch 和 cat 命令之间的一个显著区别是,使用 cat 命令,我们可以从命令提示符指定文件内容,而 touch 命令创建的是一个空文件。

3. 使用重定向(>)符号

我们还可以使用命令行上的重定向符号(>)来创建文件。要创建文件,我们只需键入重定向符号(>),后跟文件名。此符号主要用于重定向输出。有两种重定向输出的方法。如果我们使用 > 运算符,它将覆盖现有文件,而 >> 运算符将附加输出。

要使用重定向(>)运算符创建文件,请执行以下命令:

上面的命令将创建一个文件,要显示创建文件的存在性,请执行以下命令:

考虑下面的输出

Linux Create File

4. 使用 echo 命令

echo 命令用于创建文件,但我们应该在命令行上指定文件内容。

要使用 echo 命令创建文件,请执行以下命令:

上面的命令将创建 test6 文件。要显示文件的存在性,请执行以下命令:

考虑以下输出:

Linux Create File

5. 使用 printf 命令

我们还可以使用 printf 命令创建文件。为此,我们需要在命令行上指定文件内容。

要使用 printf 命令创建文件,请执行以下命令:

要显示文件详细信息,请执行以下 ls 命令:

要显示文件内容,请执行以下 cat 命令:

考虑下面的输出

Linux Create File

6. 使用文本编辑器

我们还可以使用 vim、nano、vi 等不同的文本编辑器创建文件。

  • 使用 Vim 文本编辑器

我们可以使用 Vim 文本编辑器创建文件。如果您尚未在机器上安装 vim 编辑器,请执行以下命令:

输出

[sudo] password for javatpoint: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  vim-runtime
Suggested packages:
  ctags vim-doc vim-scripts
The following NEW packages will be installed:
  vim vim-runtime
0 upgraded, 2 newly installed, 0 to remove and 64 not upgraded.
Need to get 6,878 kB of archives.
After this operation, 33.4 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://in.archive.ubuntu.com/ubuntu eoan/main amd64 vim-runtime all 2:8.1.0875-5ubuntu2 [5,669 kB]
Get:2 http://in.archive.ubuntu.com/ubuntu eoan/main amd64 vim amd64 2:8.1.0875-5ubuntu2 [1,209 kB]
Fetched 6,878 kB in 3s (2,256 kB/s)
Selecting previously unselected package vim-runtime.
(Reading database... 216385 files and directories currently installed.)
Preparing to unpack.../vim-runtime_2%3a8.1.0875-5ubuntu2_all.deb...
Adding 'diversion of /usr/share/vim/vim81/doc/help.txt to /usr/share/vim/vim81/doc/
help.txt.vim-tiny by vim-runtime'
Adding 'diversion of /usr/share/vim/vim81/doc/tags to /usr/share/vim/vim81/doc/tags
.vim-tiny by vim-runtime'
Unpacking vim-runtime (2:8.1.0875-5ubuntu2)...
Selecting previously unselected package vim.
Preparing to unpack.../vim_2%3a8.1.0875-5ubuntu2_amd64.deb...
Unpacking vim (2:8.1.0875-5ubuntu2)...
Setting up vim-runtime (2:8.1.0875-5ubuntu2)...
Setting up vim (2:8.1.0875-5ubuntu2)...
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vim (vim) in auto
 mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vimdiff (vimdiff)
 in auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rvim (rvim) in au
to mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/rview (rview) in 
auto mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/vi (vi) in auto m
ode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/view (view) in au
to mode
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/ex (ex) in auto m
ode
Processing triggers for man-db (2.8.7-3)...

Vim 文本编辑器已成功安装。

要使用 vim 文本编辑器创建文件,请执行以下命令:

上面的命令将打开文本编辑器,按 i 键进入编辑器的插入模式。

输入文件内容,按 Esc 键,然后输入 :wq 保存并退出文件。文本编辑器如下所示:

Linux Create File

要显示文件信息,请执行 ls 命令,如下所示:

要查看文件内容,请运行以下 cat 命令:

考虑下面的输出

Linux Create File

使用 Nano 编辑器

我们可以使用 nano 文本编辑器创建文件。要创建文件,请执行以下命令:

上面的命令将打开 nano 文本编辑器。输入所需的文本,然后按 CTRL + X,然后键入 y 确认文件更改。按 Enter 键退出编辑器。

nano 文本编辑器如下所示:

Linux Create File

要显示文件信息,请执行以下命令:

要查看文件内容,请执行以下命令:

考虑下面的输出

Linux Create File

使用 Vi 编辑器

要使用 Vi 编辑器创建文件,请执行以下命令:

上面的命令将打开 Vi 编辑器。按 i 键进入插入模式并输入文件内容。按 Esc 键和 :wq 保存并退出编辑器中的文件。

要显示文件信息,请执行以下命令:

要显示文件内容,请执行以下命令:

考虑下面的输出

Linux Create File
下一主题Linux 文件命令