假设一个人像这样创建一个文件:
touch myFile
Run Code Online (Sandbox Code Playgroud)
您可以使用 vim 或其他方式在其中输入一些文本,然后使用cat myFile将内容吐出到终端中。
现在,当我在任何图像上使用 cat 时会发生什么?说,
cat myPNG.png
Run Code Online (Sandbox Code Playgroud)
我只是得到一堆垃圾。它只是让我思考cat命令试图做什么,以及所有这些“垃圾”来自哪里。只是好奇。
我正在尝试安装在 CentOS 4.7 上构建的软件。你知道它是否也能在 Ubuntu 中运行吗?我读过 CentOS 是 100% 二进制兼容的。最新版本的 Ubuntu 也是如此吗?
我知道那里有类似的问题,但我还没有找到解决方案,也没有找到这个确切的案例。该二进制文件是使用 GCC 4.7 在 Arch Linux 上构建的。该软件包在构建系统上运行良好。以下命令在以下位置执行:
Linux vbox-ubuntu 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
有问题的文件位于此处。它是一个 Linux 64 位到 Windows 64 位交叉编译器。解压它以~/提供一个~/mingw64包含所有所需内容的目录。
当我尝试运行时,~/mingw64/x86_64-w64-mingw32/bin/as这就是我得到的:
bash: /home/ruben/mingw64/x86_64-w64-mingw32/bin/as: No such file or directory
Run Code Online (Sandbox Code Playgroud)
跑步file ~/mingw64/x86_64-w64-mingw32/bin/as给了我:
/home/ruben/mingw64/x86_64-w64-mingw32/bin/as: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x0b8e50955e7919b76967bac042f49c5876804248, not stripped
Run Code Online (Sandbox Code Playgroud)
跑步ldd ~/mingw64/x86_64-w64-mingw32/bin/as给了我:
linux-vdso.so.1 => (0x00007fff3e367000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f2ceae7e000) …Run Code Online (Sandbox Code Playgroud) 如果我cat正确理解手册:
连接文件并在标准输出上打印
cat将文件作为参数并将它们打印在标准输出上。
我没有得到的是,如果我使用命令:
cat img.png > copy.png
Run Code Online (Sandbox Code Playgroud)
如果我只是,我将获得 2 个相同的 png 文件
cat img.png
Run Code Online (Sandbox Code Playgroud)
我很有可能我的终端搞砸了并误解了我输入的内容。
cating 包含奇怪字符的文本文件来实现? 我已经Afile做了相当于cat a.gif b.7z > Afile.
如何拆分Afile为原始文件a.gif和b.7z文件?
我试图在二进制文件中找到两个字节,然后增加这两个字节的值并在文件中替换它们。这两个字节位于位置 0x82-0x83。现在我已经使用这个成功提取了这两个字节:
#!/usr/bin/env bash
BYTES=$(tail -c +131 "$1" | head -c 2)
Run Code Online (Sandbox Code Playgroud)
这些字节具有值:1B 1F. 我坚持:
6943十进制。head -c 130 original.bin >> new_file.bin && magic_command_writing_bytes_to_file >> new_file.bin && tail -c +133 original.bin,但必须有更好的方法。我可以在 PHP 中做到这一点,它应该更容易,但我对如何在 bash 中做到这一点很感兴趣。
我有一个很大的 utf-8 文本文件,我经常用grep. 最近grep开始报告它是一个二进制文件。我可以继续用 搜索它grep -a,但我想知道是什么改变使它决定文件现在是二进制的。
我有一份上个月的副本,该文件不再被检测为二进制文件,但这对diff他们来说不切实际,因为它们在 > 20,000 行上有所不同。
file 将我的文件标识为
UTF-8 Unicode 英文文本,行很长
我怎样才能找到字符/行/等。在我的文件中触发了这个变化?
类似的非重复问题19907涵盖了 NUL 的可能性,但grep -Pc '[\x00-\x1F]'表示我没有 NUL 或任何其他 ANSI 控制字符。
刚刚遇到这个问题,并从选择的答案中学到了很多东西:使用 dd 创建随机数据并获得“部分读取警告”。现在警告后的数据真的是随机的吗?
不幸的是,建议的解决方案head -c不可移植。
对于坚持这dd是答案的人,请仔细阅读链接的答案,其中详细解释了为什么dd不能成为答案。另外,请注意这一点:
$ dd bs=1000000 count=10 if=/dev/random of=random
dd: warning: partial read (89 bytes); suggest iflag=fullblock
0+10 records in
0+10 records out
143 bytes (143 B) copied, 99.3918 s, 0.0 kB/s
$ ls -l random ; du -kP random
-rw-rw-r-- 1 me me 143 Apr 22 19:19 random
4 random
$ pwd
/tmp
Run Code Online (Sandbox Code Playgroud) 我已经编译链接并在 C++ 中创建了一个程序,现在我有了
foobar.out
Run Code Online (Sandbox Code Playgroud)
我希望能够将它放入 bin 目录并像系统范围的命令一样使用它,例如
ssh, echo, bash, cd...
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我需要创建一个只填充11111111.
我只知道如何创建零填充二进制文件
dd if=/dev/zero bs=18520 count=1
Run Code Online (Sandbox Code Playgroud)
你能告诉我应该使用管道中的什么命令来填充垃圾箱1吗?awk在这种情况下我该如何使用?