我无法在.txt文件上阅读或应用任何其他命令,例如cat
或strings
,因为它是不允许的。我需要读取名为flag.txt的文件,但此文件也在黑名单中。那么,有没有办法使用head
命令读取* .txt?允许head
命令。
blacklist=\
'flag\|<\|$\|"\|'"'"'\|'\
'cat\|tac\|*\|?\|less\|more\|pico\|nano\|edit\|hexdump\|xxd\|'\
'sed\|tail\|diff\|grep\|paste\|strings\|bas64\|sort\|uniq\|cut\|awk\|'\
'bzip\|gzip\|xz\|tar\|ar\|'\
'mv\|cp\|ln\|nl\|'\
'python\|perl\|sh\|cc\|g++\|php\|hd\|g++\|gcc\|curl\|tcp\|udp\|'\
'scp\|sftp\|wget\|nc\|netcat'
谢谢
答案 0 :(得分:0)
你想要一些命令head *.txt
的替代品吗?如果是这样,ls
/ find
和xargs
会有所帮助,但它无法识别.txt文件,它会读取目录下的所有文件。
ls -1| xargs head
答案 1 :(得分:0)
您可以通过以下方式使用`(backtick
):
head `ls -1`
Backtick有一个非常特殊的含义。你输入的所有东西 在主命令
之前由shell评估(执行)反引号因此该命令将执行以下操作:
`ls -1` - 将以文件名
生成head - 将显示
中列出的文件的开头ls -1
有关反引号的更多信息,请参阅this answer
答案 2 :(得分:0)
如果您需要匹配flag.txt
但不能同时使用*
但不能使用字符flag
的glob,则可以使用fl[a]g.txt
。然后,要使用head
打印整个文件,请使用-c
并将其传递给文件大小:
head -c $(stat -c '%s' fl[a]g.txt) fl[a]g.txt
另一种方法是使用shell来读取文件:
while IFS= read -r c; do echo $c; done < fl[a]g.txt
您也可以使用paste
:
paste fl[a]g.txt