linux病毒编写+vim shell编程

news2024/12/21 14:58:14

学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学

请一定遵循《网络空间安全法》!!!

Linux目录介绍

  • /bin 二进制可执行文件(kali里面是工具+一些文件)
  • /etc 系统的管理和配置文件
  • /etc/rc.d 启动的配置文件和脚本
  • /home 用户主目录的基点
  • /lab 标准程序设计苦逼,又叫动态链接共享库
  • /sbin 超级管理命令,这里存放的是系统管理员使用的管理程序
  • /tmp 公共的临时文件存储点
  • /root 系统管理员的主目录
  • /mnt 系统提供这个目录是让用户临时挂载的文件系统
  • /lost+found 这个目录平时是空的,系统非正常关机而留下的"无家可归"的文件就在这里面
  • /proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息
  • /var 某些大文件的溢出区,比如说各种服务器的日志文件
  • /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录
  • /usr/bin众多的应用程序
  • /usr/sbin 超级用户的一些管理权限

Linux中的vim编辑器

什么是vim

Vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

vim的使用

vim分为三种模式

  • 命令模式
  • 输入模式
  • 底线命令模式
    在这里插入图片描述
命令模式

输入vim+文件名(如果没有则会创建一个新的文件)进入vim编辑器

vim 1.txt

在这里插入图片描述
此时就是在命令模式中,此状态下敲击键盘动作会被 Vim 识别为命令,而非输入字符,比如我们此时按下 i,并不会输入一个字符,i 被当作了一个命令。

命令模式常用命令

  • i – 切换到输入模式,在光标当前位置开始输入文本。
  • x – 删除当前光标所在处的字符。
  • : – 切换到底线命令模式,以在最底一行输入命令。
  • a – 进入输入模式,在光标下一个位置开始输入文本。
  • o:在当前行的下方插入一个新行,并进入输入模式。
  • O – 在当前行的上方插入一个新行,并进入输入模式。
  • dd – 剪切当前行。
  • yy – 复制当前行。
  • p(小写) – 粘贴剪贴板内容到光标下方。
  • P(大写)-- 粘贴剪贴板内容到光标上方。
  • u – 撤销上一次操作。
  • Ctrl + r – 重做上一次撤销的操作。
  • :w – 保存文件。
  • :q – 退出 Vim 编辑器。
  • :q! – 强制退出Vim 编辑器,不保存修改。
输入模式

在命令模式下按下 i 就进入了输入模式,使用 Esc 键可以返回到普通模式。

输入模式里面想输入什么就可以输入什么,并且可以通过cat命令查看

在这里插入图片描述
在这里插入图片描述

底线命令模式

在命令模式下按下 :(英文冒号)就进入了底线命令模式。

常用命令

  • :w 保存文件。
  • :q 退出 Vim 编辑器。
  • :wq 保存文件并退出 Vim 编辑器。
  • :q! 强制退出Vim编辑器,不保存修改。
    在这里插入图片描述

像这样就是保存退出

Shell编程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

进行shell编程的时候,编程中的第一行一般都是

#! /bin/bash
输出Hello World!
#! /bin/bash
echo "Hello World!"
运行shell脚本的两种方法
作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意,一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh
/bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

Shell变量
定义变量

在 Shell 编程中,变量是用于存储数据值的名称

注意,变量名和等号之间不能有空格,变量名的命名须遵循如下规则:

  • 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
  • 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
  • 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
  • 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
  • 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
  • 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。
使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

a="hello"
echo $a
echo ${a}

在这里插入图片描述

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo "I am good at s k i l l S c r i p t " ,解释器就会把 skillScript",解释器就会把 skillScript",解释器就会把skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

语法:

readonly 变量

删除变量

使用 unset 命令可以删除变量。

语法:

unset 变量

变量被删除后不能再次使用。unset 命令不能删除只读变量。

变量类型

字符串变量

在 Shell中,变量通常被视为字符串。

可以使用单引号 ’ 或双引号 " 来定义字符串

如:

a='hello'
a="hello"

整数变量

在一些Shell中,可以使用 declaretypeset 命令来声明整数变量。

这样的变量只包含整数值,例如:

declare -i a=42

这样的声明告诉 Shell 将 a 视为整数,如果尝试将非整数值赋给它,Shell会尝试将其转换为整数。

数组变量

数组可以是整数索引数组或关联数组,以下是一个简单的整数索引数组的例子:

my_array=(1 2 3 4 5)

或者关联数组:

declare -A my_array
my_array["name"]="John"
my_array["age"]=30
字符串拼接

字符串可以用单引号,也可以用双引号,也可以不用引号。

例:

your_name="runoob"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

在这里插入图片描述

Shell数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

定义数组
数组名=(值1 值2 值3...)

例如:

array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
或者
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组

读取数组元素值的一般格式是:

${数组名[下标]}

使用 @ 符号可以获取数组中的所有元素,如:

echo ${array_name[@]}
注释

以 # 开头的行就是注释,会被解释器忽略。

单行注释

比如:

#这
#是
#注
#释
多行注释

例:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF
或者
: '
这是注释的部分。
可以有多行内容。
'
这个格式为:+空格+单引号
Shell流程控制
判断语句if else

语法:

if 条件1
then
	执行命令1
elif 条件2
then
	执行命令2
else
	执行条件n
fi

if else 的 […] 判断语句中大于使用 -gt,小于使用 -lt

if [ "$a" -gt "$b" ]; then
    ...
fi

如果使用 ((…)) 作为判断语句,大于和小于可以直接使用 > 和 <。

if (( a > b )); then
    ...
fi
for循环

for循环格式:

for var in item1 item2 ... itemn
do
	命令1
	命令2
	...
	命令n
done

也可以写成一行

for var in item1 item2 ... itemN; do command1; command2… done;
while语句

语法:

while 条件
do
    命令
done
case … esac

case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。格式:

casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac
跳出循环break/continue

和C语言一样,break 命令允许跳出所有循环(终止执行后面的所有循环),continue 命令与 break 命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

Shell函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用

格式:

[ function ] funname [()]

{

    action;

    [return int;]

}

例:

helloFun(){
    echo "Hello,World!"
}
helloFun

输出结果
在这里插入图片描述

例:

funWithReturn(){
    echo "这个函数会对输入的两个数字进行相加运算..."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read anotherNum
    echo "两个数字分别为 $aNum$anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"

输出:

在这里插入图片描述

Linux资源耗尽病毒

使用alert或notify-send等工具发送通知

使用vim编辑器编写一个脚本名为shell.sh

内容为

#!/bin/bash

while true

do

    notify-send    "无限弹窗" "这是一个无限循环的弹窗"

    sleep 2

done

然后

然后运行这个脚本./shell.sh

就会无限弹窗了

…"
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo “两个数字分别为 $aNum 和 $anotherNum !”
return ( ( (( ((aNum+$anotherNum))
}
funWithReturn
echo “输入的两个数字之和为 $? !”


输出:

[外链图片转存中...(img-xmPK20vu-1731557854155)]

### Linux资源耗尽病毒

使用alert或notify-send等工具发送通知

使用vim编辑器编写一个脚本名为shell.sh

内容为

```bash
#!/bin/bash

while true

do

    notify-send    "无限弹窗" "这是一个无限循环的弹窗"

    sleep 2

done

然后

然后运行这个脚本./shell.sh

就会无限弹窗了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2242129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言和C++的常量概念与区别分析

文章目录 &#x1f4af;前言&#x1f4af;常量的概念和作用&#x1f4af;C语言中 const 的应用与限制#define 和 enum 的使用方法 &#x1f4af;C 中 const 的计算方法和处理&#x1f4af;代码实例和应用区别&#x1f4af;C 和 C 的常量兼容性问题和负载&#x1f4af;分析 C 和…

PCHMI串口接收实验

插入的唯一一行代码 config1.START((Control)this, System.Reflection.Assembly.GetExecutingAssembly().GetTypes(), null);

【链路层】空口数据包详解(4):数据物理通道协议数据单元(PDU)

目录 一、概述 1.1. 头部&#xff08;Header&#xff09;结构 1.2. MIC字段的情况说明 1.3. 有效载荷&#xff08;Payload&#xff09;格式与LLID字段的关联 二、LL Data PDU 2.1. 定义与用途 2.2. 头部字段设置 2.3. 空PDU&#xff08;Empty PDU &#xff09; 2.4. 数…

动态规划子数组系列(二) 环形子数组的最大和

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int maxSubarraySumCircular(int[] nums) {int sum 0;int n nums.length;int[] f new int[n1];int[] g new int[n1];int ret 0, fmax -0x3f3f3f3f, gmin Integer.MAX_VALUE;for(int i 1; i < n; i)…

网络工程师教程第6版(2024年最新版)

网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。 相关信息: 出版社: 清华大学出版社 ISBN:9787302669197 内容简介: 本书是工业和信息化部教育与考试中心组织编写的考试用书。本书 根据…

数据结构C语言描述3(图文结合)--双链表、循环链表、约瑟夫环问题

前言 这个专栏将会用纯C实现常用的数据结构和简单的算法&#xff1b;有C基础即可跟着学习&#xff0c;代码均可运行&#xff1b;准备考研的也可跟着写&#xff0c;个人感觉&#xff0c;如果时间充裕&#xff0c;手写一遍比看书、刷题管用很多&#xff0c;这也是本人采用纯C语言…

7.高可用集群架构Keepalived双主热备原理

一. 高可用集群架构Keepalived双主热备原理 (1)主机+备机keepalived配置(192.168.1.171) ! Configuration File for keepalivedglobal_defs {# 路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_101 } #计算机节点(主机配置) vrrp_instance VI_1 {</

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

TypeScript简介:TypeScript是JavaScript的一个超集

官方描述&#xff1a;TypeScript 是 JavaScript 的一个超集 GitHub官网&#xff1a;https://github.com/Microsoft/TypeScript TypeScript is a superset of JavaScript that compiles to clean JavaScript output. TypeScript 是 JavaScript 的一个超集&#xff0c;支持 EC…

【计算机网络】UDP网络程序

一、服务端 1.udpServer.hpp 此文件负责实现一个udp服务器 #pragma once#include <iostream> #include <string> #include <cstdlib> #include <cstring> #include <functional> #include <strings.h> #include <unistd.h> #incl…

【启明智显分享】5G CPE与5G路由器到底有什么区别?

5G路由器和5G CPE在功能和应用场景上存在很明显的差异&#xff0c;小编做了详细比较&#xff0c;希望能帮助到你进一步了解他们的区别及应用。 一、定义与功能 5G路由器 5G路由器是一个将5G网络连接转换为Wi-Fi信号的设备&#xff0c;使多个Wi-Fi设备可以通过5G网络进行连接…

对称加密与非对称加密:密码学的基石及 RSA 算法详解

对称加密与非对称加密&#xff1a;密码学的基石及 RSA 算法详解 在当今数字化的时代&#xff0c;信息安全至关重要。对称加密和非对称加密作为密码学中的两种基本加密技术&#xff0c;为我们的数据安全提供了强大的保障。本文将深入探讨对称加密和非对称加密的特点、应用场景&…

爬虫——数据解析与提取

第二节&#xff1a;数据解析与提取 在网络爬虫开发中&#xff0c;获取网页内容&#xff08;HTML&#xff09;是第一步&#xff0c;但从这些内容中提取有用的数据&#xff0c;才是爬虫的核心部分。HTML文档通常结构复杂且充满冗余信息&#xff0c;因此我们需要使用高效的解析工…

我们是如何实现 TiDB Cloud Serverless 的 - 成本篇

作者&#xff1a; shiyuhang0 原文来源&#xff1a; https://tidb.net/blog/fbedeea4 背景 Serverless 数据库是云原生时代的产物&#xff0c;它提供全托管&#xff0c;按需付费&#xff0c;自动弹性的云数据库服务&#xff0c;让客户免于繁重的数据库运维工作。关于 Serve…

Linux——环境基础开发工具使用2(正在更新中...)

1.自动化构建-make/Makefile 1.1 认识make和Makefile make是一个命令&#xff1b; Makefile是一个文件。 1.2 理解 其中在第一个图片中&#xff0c;第一行的 mytest:test.c 叫做依赖关系&#xff1b;第二行的 gcc test.c -o mytest 叫做依赖方法。 依赖关系和依赖方法共同…

微服务链路追踪skywalking安装

‌SkyWalking是一个开源的分布式追踪系统&#xff0c;主要用于监控和分析微服务架构下的应用性能。‌ 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案&#xff0c;特别适用于微服务、云原生架构和基于容器的环境&#xff08;如Docker、K8s、Mesos&…

品牌如何利用大数据工具,进行消费者洞察分析?

存量竞争的时代&#xff0c; 消费者聆听是品牌持续增长的关键&#xff0c;借助大数据的消费者数据洞察&#xff0c;可以帮助品牌分析消费者的所思所想及行为特征&#xff0c;获取消费者对产品的需求痛点、使用感受&#xff0c;对品牌的评价口碑等&#xff0c;从而帮助品牌更好地…

模拟实现优先级队列

目录 定义 特点 构造函数 常用方法 关于扩容的问题 关于建堆的问题 向上调整和向下调整的比较 &#xff08;向上调整&#xff09;代码 &#xff08;向下调整&#xff09;代码 关于入队列和出队列问题 模拟实现优先级队列代码 关于堆排序的问题 堆排序代码 关于对…

【4】GD32H7xx ADC采样

目录 1. GD32H7xx ADC1.1 ADC外设资源1.2 采样时间1.3 片上硬件过采样 2. ADC DMA规则多通道采样程序3. 程序测试 1. GD32H7xx ADC 1.1 ADC外设资源 GD32H7xx 有3个ADC外设&#xff1a; ADC0 20个外部通道&#xff0c;1个内部通道&#xff08;DAC0_OUT0通道&#xff09;32位…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…