由于做了[WUSTCTF2020]朴实无华这道题目,整理一下除了cat还可以用哪些命令打开文件
- cat 从第一行开始显示文件内容
- tac 从最后一行开始显示文件内容
- nl 显示的时候,顺道输出行号
- more命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示
- less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。
- head 只看头几行
- tail 只看尾巴几行
linux下绕过空格技巧
${IFS}
$IFS$9
<
<>
{,}
cat
cat${IFS}
cat$IFS$
cat<
cat<>
{cat,}
${IFS}绕过:在linux下,${IFS}是分隔符的意思,所以可以有${IFS}进行空格的替代。
$IFS$9绕过:$起截断作用,9为当前shell进程的第九个参数,始终为空字符串,所以同样能代替空字符串进行分割。
输入输出的区别:
>>和>都属于输出重定向,<属于输入重定向。
文件内容的区别:
>会覆盖目标的原有内容。当文件存在时会先删除原文件,再重新创建文件,然后把内容写入该文件;否则直接创建文件。
>>会在目标原有内容后追加内容。当文件存在时直接在文件末尾进行内容追加,不会删除原文件;否则直接创建文件。
输入重定向:
对于一般的可执行程序而言,如果需要输入数据一般是直接从键盘中获取,而使用输入重定向则可以直接从文件中获取出数据。
假设有文本文件data,需要对data文件使用example程序,只需要输入命令:
example < data
<符号是Unix、Linux的重定向运算符。对于一个可执行程序而言(如example),它并不会关心它的输入是从键盘或是文件读取,输出是输出到屏幕还是文件中,它仅关心输入流或是输出流。而重定向运算符会将(data)文件与流关联,将data文件的内容引至example程序。
这样就很好理解绕过空格的原理了。
还有一个小知识,之前我在纠结为什么ca\t或者c\at的效果和cat一样,后来经过东拼西凑的问大佬和尝试,最后总结的原因是因为在linux里面当转义符号(\)转义普通字符的时候,和普通字符原来的效果是一样的,意思就是\t和t都是t,只有在转义特殊字符的时候,才起了作用,比如\$,$则不再表示变量的意思。