运行 cat 命令对 .zip 文件安全吗?
Is it safe to run cat command on a .zip file?
在bash中,当我在.zip
文件上运行cat
时,它会输出一堆快速向上滚动屏幕的符号。它还会发出一些哔哔声。这既有点可怕又很棒。
我继续这样做安全吗?可以这么说,我有点想把它当作袖手旁观的把戏。我想 哇 我的朋友、家人和未来的雇主;而且我知道这个技巧一定会给人留下深刻印象。
有人知道这样做是否有任何有害影响吗?
这取决于您认为什么是安全的。一些二进制序列正在改变终端的行为。例如,滚动大小 window、颜色、背景颜色、字符集等。它们可以将光标移动到其他位置、禁用回声或发出声音。但是,所有这些效果都可以使用 reset
命令轻松撤销。
有些序列可能会像您按下某些键一样放置一些字符。例如,运行 在 screen
下面的命令:
printf "3Z"
它会显示一些垃圾,然后在 bash 提示后立即在输入中放置一串字符。对我来说它看起来像:
arturcz@szczaw:/tmp$ printf "3Z"
^[[?1;2carturcz@szczaw:/tmp$ 1;2c
如果您按下 Enter
键,bash 将尝试 运行 此命令:
^[[?1;2carturcz@szczaw:/tmp$ 1;2c
bash: 1: command not found
bash: 2c: command not found
arturcz@szczaw:/tmp$
我没有 1
和 2c
命令。但如果你有它们,它们将是 运行。这可能很危险。风险不大,但还是要小心。因此,如果您决定解决这些问题,请记住使用 backspace
或 ctrl-u
来清理输入行。
顺便说一句,你可以准备一个带有控制字符的文件来绘制一个有趣的动画。例如,将以下脚本保存到一个文件中,比方说,script.sh
:
#!/bin/bash
printf "3[?25l"
printf "3[H3[2J";
for m in $(seq 1 100); do
echo $m >&2
for p in $(seq 20 -1 10); do
for r in $(seq 0 1000); do
printf "3[${p};10H^o^"
done
printf "3[${p};10H "
done
for p in $(seq 10 20); do
printf "3[${p};10H^o^"
for r in $(seq 0 1000); do
printf "3[${p};10H^o^"
done
printf "3[${p};10H "
done
done
printf "3[34h3[?25h"
然后 运行 为:
bash script.sh > anim.txt
这可能需要一点时间,但脚本会显示已完成工作的百分比。如您所见,anim.txt
的内容并不是二进制文件,但是当您 运行 时,它是:
screen cat anim.txt
您将看到一个简单的动画。 screen 命令是必需的,因为脚本使用 screen 终端控制字符。另外,通过使用屏幕,显示过程会变慢一点,这对于现代计算机来说尤其重要,因为动画会显示得非常非常快。
如果您想了解更多关于这些控制序列的信息,请阅读 terminfo(5) manual and NCURSES Programming HOWTO。
在bash中,当我在.zip
文件上运行cat
时,它会输出一堆快速向上滚动屏幕的符号。它还会发出一些哔哔声。这既有点可怕又很棒。
我继续这样做安全吗?可以这么说,我有点想把它当作袖手旁观的把戏。我想 哇 我的朋友、家人和未来的雇主;而且我知道这个技巧一定会给人留下深刻印象。
有人知道这样做是否有任何有害影响吗?
这取决于您认为什么是安全的。一些二进制序列正在改变终端的行为。例如,滚动大小 window、颜色、背景颜色、字符集等。它们可以将光标移动到其他位置、禁用回声或发出声音。但是,所有这些效果都可以使用 reset
命令轻松撤销。
有些序列可能会像您按下某些键一样放置一些字符。例如,运行 在 screen
下面的命令:
printf "3Z"
它会显示一些垃圾,然后在 bash 提示后立即在输入中放置一串字符。对我来说它看起来像:
arturcz@szczaw:/tmp$ printf "3Z"
^[[?1;2carturcz@szczaw:/tmp$ 1;2c
如果您按下 Enter
键,bash 将尝试 运行 此命令:
^[[?1;2carturcz@szczaw:/tmp$ 1;2c
bash: 1: command not found
bash: 2c: command not found
arturcz@szczaw:/tmp$
我没有 1
和 2c
命令。但如果你有它们,它们将是 运行。这可能很危险。风险不大,但还是要小心。因此,如果您决定解决这些问题,请记住使用 backspace
或 ctrl-u
来清理输入行。
顺便说一句,你可以准备一个带有控制字符的文件来绘制一个有趣的动画。例如,将以下脚本保存到一个文件中,比方说,script.sh
:
#!/bin/bash
printf "3[?25l"
printf "3[H3[2J";
for m in $(seq 1 100); do
echo $m >&2
for p in $(seq 20 -1 10); do
for r in $(seq 0 1000); do
printf "3[${p};10H^o^"
done
printf "3[${p};10H "
done
for p in $(seq 10 20); do
printf "3[${p};10H^o^"
for r in $(seq 0 1000); do
printf "3[${p};10H^o^"
done
printf "3[${p};10H "
done
done
printf "3[34h3[?25h"
然后 运行 为:
bash script.sh > anim.txt
这可能需要一点时间,但脚本会显示已完成工作的百分比。如您所见,anim.txt
的内容并不是二进制文件,但是当您 运行 时,它是:
screen cat anim.txt
您将看到一个简单的动画。 screen 命令是必需的,因为脚本使用 screen 终端控制字符。另外,通过使用屏幕,显示过程会变慢一点,这对于现代计算机来说尤其重要,因为动画会显示得非常非常快。
如果您想了解更多关于这些控制序列的信息,请阅读 terminfo(5) manual and NCURSES Programming HOWTO。