你已经在成为 shell 脚本编写者的道路上迈出了扎实的一步!
不过,到目前为止,你的 shell 脚本只能从 shell 中启动。
上一关运行顺利,是因为你从 bash shell 中调用了脚本;如果脚本由一个 Python(或其他语言)编写的程序来调用,就无法这样运行了。
在 Linux 中调用程序时,Linux 内核会先检查文件,确定应该如何运行它。
内核并不根据扩展名来判断(所以 shell 脚本不一定非要使用 .sh 扩展名,Python 脚本也不一定要使用 .py 扩展名,其他脚本同理)。
Linux 实际上会查看文件开头的几个字节,从中获取这些信息。
程序有很多种类型。如果程序文件以 #! 开头(通常称为“shebang”),Linux 就会将该文件视为解释型程序,并把这一行剩余的内容作为解释器的路径。
然后,它会调用这个解释器,将程序文件的路径作为唯一参数传入。
看看下面这个 shell 脚本:
#!/bin/bash
echo "Hello Hackers!"
可以这样执行它:
hacker@dojo:~$ chmod a+x script.sh
hacker@dojo:~$ ./script.sh
Hello Hackers!
hacker@dojo:~$
执行 ./script.sh 时,Linux 会打开文件,读取第一行,提取 /bin/bash 作为解释器,然后执行 /bin/bash ./script.sh 来启动脚本!
注意,shebang 必须位于文件的第一行,前面不能有空行或空格!
在这一关中,请在 /home/hacker/solve.sh 创建一个脚本,设置正确的 shebang,并输出 "hack the planet"。
记得赋予它执行权限,然后运行 /challenge/run,检查脚本是否正常工作!
小知识:
你可能会见到以下常见的 shebang:
#!/bin/bash:用于 bash 脚本
#!/usr/bin/python3:用于 Python 脚本
#!/bin/sh:用于 POSIX shell 脚本。这种 shell 是 bash 的早期前身,功能较少,但与非 Linux 系统的兼容性更好!
通过 SSH 连接
在
个人设置 中绑定你的 SSH 公钥后,使用以下命令连接:
ssh hacker@dojo.pwn.college