(1)Shell 编程学习 Shell是什么?Shell的浅显原理 为什么要学Shell 及其第一个Shell脚本 CTF角度学习Shell
最近刷CTF题目的时候经常要用到Shell语言,但是自己并没有系统的学习,所以最近花了点时间学习一下,所以重新来梳理一下。对于稍微有一点编程语言基础的同学,能上手Shell其实不需要半小时(甚至更短),当然熟练运用还是需要积累的。
目录
Shell是什么?
主观定义
官方定义及原理
为什么要学Shell编程
第一个Shell脚本
CTF用到的shell
Shell是什么?
主观定义
主观的来说:大家只要用过电脑,就接触到了Shell,比如说自己电脑打开win+r,打开cmd,虚拟机打开终端。
其中跳动的 _ 其实就是 shell。
所以我们学渗透也经常听到,拿到一个shell,获取一个后门之类的话
其实就是获取这样一个界面的权限,从而我们能够对该电脑执行命令,或者说是服务器进行操作。(在这个命令行能够执行我们命令)
官方定义及原理
在计算机语言中,Shell是指一种命令行解释器,是为用户和操作系统之间通信提供的一层接口(想象一下,如果没有一种与计算机沟通的方式,那么计算机如何得到来自人脑的指令呢),它接受来自用户输入的命令,并将其转换为一系列的系统调用送到内核执行,并将结果输出给用户。
(这个没学过的不必细看)
事实上,Shell不只是一种解释器(在用户和系统间起着桥梁的作用),还是一种编程工具,称为脚本语言。与编译型语言(比如C/C++/JAVA等)不同,这种语言经过编写后不需要任何编译就可以运行。
什么是解释型语言呢?这就要说到计算机运行程序的两种方式了。计算机不能理解高级语言,只能理解机器语言,所以必须把高级语言翻译为机器码。而这种翻译的方式又两类,一类是编译 一类是解释
不同之处在于翻译的时间不同。
编译型语言是运行前翻译,一般是使用编译工具将程序源码处理成机器认识的可执行文件(比如说Windows下的exe文件,Linux 下二进制可执行文件),这种文件一旦产生,以后运行时都不需要再次翻译,所以一般来说,编译型语言的效率较高;
解释型语言是运行时翻译,执行一条语句就立即翻译一条,而且每次执行程序都需要进行解释,相对来说效率较低。但是也不能简单认为编译型语言就一定比解释型效率高,随着解释器的发展,部分解释器能在运行程序时动态优化代码,因此这种效率差距也在一定程度上不断减少。
为什么要学Shell编程
这个问题我也思考过?如果我用cmd 仅仅是为了输入一个 shutdown /s 让电脑关机的话,我为什么需要去按那么多下键盘?输入这些不熟悉的命令? 直接用鼠标操作或者是按下关机按钮不行?为什么要多此一举呢?
其实对于大多数使用电脑的用户来说,其实是不需要学习Shell语言的,鼠标+键盘已经能100%满足他们的需求了?
那么小部分需要学习Shell编程的用户是谁呢?是网站或者是服务器的运维人员又或者是黑客们。
我们可以比较一下这个场景。
假设网络遭受了攻击,往每台电脑都安装了一个木马文件,假使这个木马文件很好找。
- 对于普通用户,找到直接删除就行
- 那对于服务器的运维人员呢?,如果公司有着100台服务器,他挨个去打开服务器找到然后一个一个删除?那要是10000台服务器甚至更多呢?不得累死?
所以说Shell编程的意义就在这里,如果上面的服务器运维人员会Shell编程的话,花点时间写个Shell脚本,控制自己的服务器执行,那就行了。
(举得例子可能有点不恰当,但是这样理解没问题,哈哈)
linux shell脚本经典案例8---批量主机执行命令_初遇我ㄖ寸の热情呢?-CSDN博客_linux批量执行脚本
第一个Shell脚本
在kail虚拟机打开(其他大部分linux虚拟机其实也通用)
相信有基础的同学2秒就会好吧。
桌面打开终端,创立 helloworld.bash文件并编辑
nano helloworld.bash
ps: ctrl+o 即可以写入
#!/bin/bash
#first
echo 'Hello World!'
之后ctrl+x离开,问是否需要改文件名直接回车。
这里要解释一下,
第一行:一个Shell脚本永远是以“#!”开头的,这是一个脚本开始的标记,它是在告诉系统执行这个文件需要使用某个解释器,后面的 /bin/bash 就是指明了解释器的具体位置。
第二行:第二行同样是以“#”,但是这里是一个注解类似于我们C中的// 。写脚本的时候,多写注解是非常有必要的,以方便其他人能看懂你的脚本——实际上,即使是自己写的脚本,过一段时间也很容易忘记。
第三行:很简单的命令 输出 “Hello World”。echo类似于c中的printf。
在之后的文章里我会更进一步的写一更复杂的脚本实例。
CTF用到的shell
本人水平比较差,只能介绍几道基础题目了。
反弹shell执行:↓↓↓↓
i春秋 死亡ping命令 原理学习(命令执行+shell反弹)+复现_AAAAAAAAAAAA66的博客-CSDN博客s
构照shell脚本 执行 :↓↓↓↓
i春秋CTF ssrfme (peal函数中get命令漏洞)命令执行 详细题解+原理 学习过程_AAAAAAAAAAAA66的博客-CSDN博客zz
短命令执行:↓↓↓↓
HITCON2017 BabyFirst Revenge (短命令执行)_a3320315的博客-CSDN博客
参考资料:
Linux系统命令及Shell脚本实践指南-王军
linux shell脚本经典案例8---批量主机执行命令_初遇我ㄖ寸の热情呢?-CSDN博客_linux批量执行脚本
HITCON2017 BabyFirst Revenge (短命令执行)_a3320315的博客-CSDN博客
(1)Shell 编程学习 Shell是什么?Shell的浅显原理 为什么要学Shell 及其第一个Shell脚本 CTF角度学习Shell相关推荐
- Linux shell编程自动化运维,三剑客之awk原理,语法,内部变量,格式化输出,模式和动作 详细解析
wsk 简单介绍 awk分别代表其作者姓氏的第一个字母.因为它的作者是三个人, 分别是Alfred Aho .Peter Weinberger . Kernighan. awk 是一种编程语言,用于在 ...
- 操作系统课程设计——Shell编程(用c编写一个Linux的外壳Shell)
文章目录 前言 功能与展示 功能列表 功能展示 依赖库安装 具体实现 Shell工作流程 外部命令工作流程 内置命令工作流程 管道功能与I/O重定向的实现 alias功能的一些思考 Shell的编译与 ...
- python运维脚本面试_运维开发工程师 面试题 shell编程
1. 32位随机密码生成 cat /proc/sys/kernel/random/uuid | tr -d '-' 2.查看当前系统每个ip的tcp连接数 -n 强制显示IP地址 -t 显示TCP连接 ...
- Shell 编程入门
走进 Shell 编程的大门 为什么要学Shell? 学一个东西,我们大部分情况都是往实用性方向着想.从工作角度来讲,学习 Shell 是为了提高我们自己工作效率,提高产出,让我们在更少的时间完成更多 ...
- 用linux下的C语言编程万年历,shell编程万年历月历和对应c语言程序.docx
shell编程万年历月历和对应c语言程序.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网 ...
- 【CentOS Linux 7】实验2【Shell编程及应用】
Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...
- Shell编程之变量赋值和引用
Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...
- Shell编程——$[ ] 、${ }、$( )、[ ]、[[ ]]、(())的区别
一.$[ ].${ }.$( )的区别 1.${ } Shell中使用一个已经定义过的变量,只要在变量名前面加美元符号$即可.变量名外面的{ }是可选的,只是为了帮助解释器识别变量的边界.具体介绍见博 ...
- Linux学习(十四)---大数据定制篇Shell编程
文章目录 一.为什么要学习shell编程 二.Shell 是什么 三.shell 编程快速入门-Shell 脚本的执行方式 3.1 脚本格式要求 3.2 编写第一个 Shell 脚本 3.3 脚本的常 ...
最新文章
- 【数学建模】MATLAB应用实战系列(九十)-变异系数法应用案例(附MATLAB和Python代码)
- 7th思妙想 Fun事连连,今天范式7岁啦!
- Android 原生通知Notification 写法
- [转]iPhone发邮件编程
- oracle indices,Oracle PL/SQL INDICES
- 大数据分析有什么难题
- 大数据分析平台在企业运营中的作用
- sqoop简单的demo 先跑起来再说
- 3dmax导入REVIT
- QCC3020/QCC3040 TWS耳机按键切换EQ,APP切换EQ功能实现
- 随笔之---java版本哲学家就餐问题【信号量的实现】
- linux 重启startup.sh,centos中startup.sh启动服务脚本
- ML - 分类算法的评价
- 面对一直在房价洼地的长沙,我不后悔十几年前逃离长沙
- 第三方数据源大型库| CnOpenData全球专利及引用被引用数据
- OpenStack Victoria版——6.2计算节点-Nova计算服务组件
- instantrails installation
- 基于pako的gzip解压
- Manjaro找不到声卡问题
- 读书笔记|《金字塔原理》_第一章
热门文章
- 对数据库基本查询操作的练习
- vue cli更换版本
- adb mysql_ADB - 黑小莲花 - 博客园
- 手动实现vue2.0的双向数据绑定原理
- 迷茫了3年:做完这个测试项目,我终于决定辞职
- 怎样建网站赚钱企业建网站,网站建设的好处!
- android glide 4旋转图片,Android 效率开发之图片---Glide 旋转图片处理
- Java开发中并行和并发的区别
- android系统设置无障碍,RK3326 Android 8.1 为自己的APK的服务默认开启无障碍权限,避免使用时还是有一个小跳转:设置的无障碍选项...
- macOS 13 指南:macOS 的下一个版本可能是“猛犸象”