关于shell

2020/11/14 13:16
阅读数 167

写这篇文章的原因有二,一是因为接触CTF的二进制类型题目后,经常会听到个词叫“getshell”,意为“获取shell”;二是前一段时间,在区块链的课程实验中,用go语言实现raft算法(解决分布式一致性问题的一个算法),在运行测试脚本的时候,我照常用命令“sh ./run.sh”来运行脚本,结果是报错,搞得我一头雾水,于是我决定好好学习一下这个Linux中的shell脚本。

什么是shell

shell是一个复杂的交互式程序,基本上用户一登录进终端,它就在运行了。它为用户提供了启动程序、管理文件系统中的文件以及运行在Linux系统上的进程的途径,它允许你输入文本命令,然后解释命令,并在内核中执行。
在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell提供的文本命令行界面(command line interface,CLI)。CLI只能接受文本输入,也只能显示出文本和基本的图形输出。现在都是通过图形化的终端(Terminal)访问CLI。下图是deepin的终端,还是比较美观的。
deepin的图形化终端
Linux上可用的shell其实有好几种,不同shell有不同的特性。执行“cat /etc/shells”可查看系统支持的shell,Linux中其它常见shell还有ash、korn、tcsh和zsh等。下图所列全都是shell程序的绝对路径。大多数发行版Linux系统默认的shell是bash shell:
shell



shell脚本

将多个shell命令放入文件中作为程序执行,这些文件被称作shell脚本。通常shell脚本的第一行内容是“#!/bin/bash"或者"#!/bin/sh"或者其它,意思就是指定运行该脚本的shell程序。
shell脚本

getshell

这下终于明白些了,getshell其实就是运行系统的shell程序,从而可以执行程序或访问文件。

"./xxx.sh"与"sh xxx.sh"的区别

用"sh xxx.sh"其实就相当于用"/bin/sh"程序执行shell脚本,由于与bash shell语法的差异,理所当然就会报错。使用"./xxx.sh"来执行脚本,其实就是在用脚本文件中第一行指定的shell来执行脚本,也就可以顺利执行了。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部