Tor
Ziel dieser Herausforderung ist es, Code zu schreiben, der nur einmal ausgeführt wird. Dies bedeutet im Grunde, dass es das Programm, das Skript oder die Umgebung in irgendeiner Weise beschädigt. Beim Neustart des Systems kann der Code erneut ausgeführt werden, was zulässig ist.
Wertung
Anzahl der Stimmen. Alle Annahmen müssen klar aufgelistet sein. Alle Antworten, die nur einen Neustart oder einen Stopp auslösen, werden disqualifiziert.
Zusätzliche Regeln, weil Greg Hewgill ein Halbgott ist
Es ist kein Root-Zugriff erlaubt.
Endtermin
Der Wettbewerb endet am 31. Mai 2014.
Bearbeiten
Dieser Wettbewerb wurde in einen Beliebtheitswettbewerb geändert.
popularity-contest
stateful
Ojblass
quelle
quelle
vi
in einer einzigen Terminalumgebung anrufen, haben diesen Effekt, es sei denn, Sie starten neu :) Nur ein Scherz hier.echo "If you try to execute me again, it means you are an idiot.";
<- Niemand wird mehr als einmal ausgeführt: PAntworten:
Mahnwache
Endlich ein Usecase für Vigil!
Auszug aus der "Sprachspezifikation":
Es gibt andere Möglichkeiten, dies zu tun, da Vigil die Schlüsselwörter bereitstellt
implore
undswear
dies im Grunde Eide sind, bestimmte Vor- und Nachbedingungen einzuhalten:quelle
Ziemlich jede Linux-Distribution, 9 Zeichen
Dieser ist ein Klassiker!
Legen Sie dies in eine Datei und führen Sie es aus:
Und es ist weg!
Was ist los: Ich laufe wirklich nur
rm
!#!
wird Shebang genannt . Und wenn Sie einen dieser Befehle gefolgt von einem Pfad zu einer ausführbaren Datei als erste Zeile in Ihrem Skript einfügen, führt der Programmlader Ihre Skriptdatei mit dem aus, was Sie dort geschrieben haben. Die Standardeinstellung ist normalerweise#!/bin/bash
oder#!/bin/sh
(Bourne-again-Shell / Bourne-Shell). . Das erste Argument, das an dieses Skript übergeben wird, ist der Dateiname selbst (weshalb Sie hier so viele Lösungen sehen, einschließlich%0
oder$0
und dergleichen). Indem ich meine Datei zum Enthalten#!/bin/rm
und Ausführen bringe, übergebe ich nur den Dateinamen meiner Datei anrm
.quelle
#!
startet die Sequenz einen Shebang, der angibt , welchen Interpreter Sie für das Skript verwenden werden - normalerweise/bin/bash
. Hier hat Flonk/bin/rm
als "Dolmetscher" eingesetzt.rm
ist ein Programm, das Dateien löscht. Da Linux denkt, dass wirrm
ein Interpreter sein wollen, übergibt es den Dateinamen als Argument. Daher löscht sich die Datei von selbst./foo mbox
x86-Binärdatei, 4 Bytes
Annahme: Muss auf einer P5 Pentium-CPU ausgeführt werden.
Der obige Befehl ist allgemein als F00F-Fehler bekannt . Es wird versucht, eine ungültige Anweisung mit dem Präfix lock auszuführen .
Dadurch wird die CPU vollständig eingefroren (kein Anhalten oder Neustart), und es ist nicht einmal Root-Zugriff erforderlich.
quelle
Bash, 5
Schneidet sich auf die Länge Null ab.
Wenn der Dateiname keine Leerzeichen enthält,
>$0
funktioniert das für 3 Zeichen !quelle
$IFS
für bash und Platzhalterzeichen für bash und ksh88. Ein She-Bang-less-Skript wird normalerweise vom sh des Systems interpretiert, aber einige Shells, einschließlich bash und ksh88, interpretieren sie stattdessen in einem eigenen Kind.gzip
Zu viel Ärger für Leute, die es gewohnt sind, zerstörungsfreie Kommandozeilen-Tools zu verwenden,
gzip
ruiniert standardmäßig die Originaldatei und ersetzt sie durch eine komprimierte Version (mit einem Suffix).Dies ist eine Variation der
#!/bin/rm
Option, mit der Ausnahme, dass diese durch manuelles Eingreifen von Personen wiederhergestellt werden kann (Aufrufgunzip
). Als besonderer Bonus ist die resultierende Datei viel länger als das Original (der Unterschied hängt von der Länge des Dateinamens ab).Warnung: Die Position von
gzip
kann variieren.EDIT: wie von WChargin herausgestellt, ist dies portabler:
Der Rest der Datei kann einen beliebigen Inhalt haben. Es ist im Wesentlichen eine Datei, die sich beim Aufrufen in einer Box versteckt und sich weigert, herauszukommen, bis Sie sie gewaltsam entpacken.
quelle
gzip
kann variieren" - dies ist kein Code-Golf , daher können Sie#!/usr/bin/env gzip
It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.
Sie hat meinen Tag gemacht, und es ist 1 Uhr morgens.Bash,
1312Nicht die kürzeste, aber sie löscht die Datei nicht und macht das System nicht unbrauchbar.
Wenn der Dateiname keine Leerzeichen enthält, können Sie die Anführungszeichen entfernen, um 2 Zeichen zu sparen.
Erläuterung
Es entfernt alle Berechtigungen (
rwx
) von sich. Wenn Sie versuchen, den Code ein zweites Mal auszuführen oder sogar anzuzeigen, ohne die Berechtigungen manuell wiederherzustellen, wird etwa Folgendes angezeigtStellen Sie die Berechtigungen mit wieder her
Alte Version
Entfernt nur die Ausführungsberechtigungen, aber ein Zeichen länger (dies war eine Code-Golf- Frage, bevor sie zum Beliebtheitswettbewerb geändert wurde ):
Hinterhältige Fassung von Łukasz Niemier
quelle
chmod 0
funktioniert aucha
und noch 3 Zeichen speichern:chmod 0 a
#!/bin/chmod 0
6800 Maschinencode - 1 Byte
Dies wird als HCF oder Halt and Catch Fire bezeichnet
quelle
Shell + sed, 16 Bytes
Nicht ganz so destruktiv wie einige der anderen Antworten ;-)
Dieses Skript fügt
#
am Anfang jeder eigenen Zeile einen Kommentar ein :quelle
sed -i g $0
?Commodore 64 BASIC
Dieser löscht das Programm nicht.
Gemäß der Commodore 64-Speicherzuordnung wird die Adresse
2048
nicht verwendet, sie muss jedoch den Wert "" enthalten,0
damit das BASIC-Programm ausgeführt werden kann.quelle
poke a, b
entspricht dem C-Code*((unsigned char *)a) = b;
.0
Byte wird verwendet, um das Ende von Codezeilen zu markieren; Die Adresse 0x800 benötigt wahrscheinlich eine, um den Anfang der ersten Codezeile zu markieren.Annahme: Ausführen von Solaris, angemeldet als root
quelle
Python, 18
Schneidet die Datei ab, indem sie im schreibgeschützten Modus geöffnet wird.
quelle
__file__
verweist auf seinen eigenen Dateinamen). Das Öffnen imw
Modus schneidet die Datei ab und löscht sie im Grunde.with open("myfile.txt","r") as thefile:
und dann schließt Ihr Dateihandhabungscode die Datei automatisch, wenn Sie fertig sind.open("f.py","w")
.Batch: 5 Bytes
Es ist im Grunde die Forkbomb für Windows.
Die App beginnt ihr erstes Argument zweimal. Lass es nicht in einer produktiven Umgebung laufen;)
quelle
JavaScript
Wenn Sie es zum ersten Mal ausführen, funktioniert es einwandfrei:
Wenn Sie versuchen, es mehr auszuführen (auch wenn Sie es aktualisieren), wird eine Fehlermeldung angezeigt:
quelle
eval
, aber dann wird es diese Herausforderung nicht erfüllenDas IBM CMS-Betriebssystem, ein Einzelbenutzer-Betriebssystem, das als Gast unter IBM VM Hypervisor ausgeführt wird, weist eine interessante Dateistruktur auf.
Dateien bestehen aus drei Elementen: Dateiname, Dateityp und Dateimodus. Der Dateimodus besteht aus zwei Elementen, einem einzelnen Buchstaben, der der Einfachheit halber ähnlich wie der Laufwerksbuchstabe für Windows / MS-DOS angesehen werden kann, und einer einzelnen numerischen Ziffer.
Die einzelne Ziffer hat für diese Aufgabe die Bedeutung http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm Es ist die Nummer 3, die interessant ist:
Verbringen Sie also Stunden damit, Ihr Skript zu schreiben und es als "LOST FOREVER A3" abzulegen. Führen Sie es aus, es funktioniert beim ersten Mal. Nach Hause fahren, gute Arbeit geleistet.
Es wird keine Meldung angezeigt, die das Löschen angibt. Schließlich weiß jeder, was das
3
bedeutet, nicht wahr?Es ist natürlich sehr nützlich. Sie können nach Abschluss des Tests die Option
3
für temporäre Dateien verwenden und müssen anschließend nicht bereinigen, da es sich um einmal gelesene Dateien handelt.quelle
Commodore 64 BASIC
NEW
löscht das Programm.quelle
Bash, 12
Hinweis: Dies ist destruktiv.
Es ist die beliebte Bash-Gabelbombe. Es frisst exponentiell den gesamten Speicher und die PIDs, die das System blockieren. Durch einen Hard-Neustart kann der Code erneut ausgeführt werden. Warum sollten Sie das tun?
Bash, 10
Bei zwei weniger Zeichen wird Ihr Gedächtnis dadurch linear aufgefressen.
Bash, 7
w
wird als die kürzeste ausführbare Datei ausgewählt, die ich mir vorstellen kann.Dadurch wird die Pfadvariable einfach gelöscht, sodass die Shell
/usr/bin/w
das nächste Mal nicht finden kann . Durch einen Neustart der Shell wird das Problem behoben, da der Pfad normalerweise in gespeichert ist~/.profile
quelle
:(){ :&};:
sollte nicht dein Gedächtnis essen. Es stoppt, sobald es gegabelt hat, es ist also immer nurO(1)
aktiv. Sie haben getanwhile(fork());
, was Ihr Gedächtnis linear fressen würde, ist das Äquivalent vonfork(); while(1);
.:(){
....C #
Kürzester Code zum Löschen von self
Code, der die Benutzeroberfläche unbemerkt lässt
quelle
C ++ 71
Der ausführbaren Datei "golf" wird die Berechtigung zum nächsten Ausführen verweigert.
JavaScript / HTML 137, 145 mit Konsolentest
quelle
h
nur einmal ausgeführt. Sie müssen es tatsächlich von einem anderen Ort aus aufrufen (analog zum Ausführen eines Programms, denke ich). Sprich<button onclick="h();">
.function h(){h=0}
?#include <sys/stat.h>
Siechmod
direkt auf die Funktion zugreifen und einige Bytes einsparen (<stdlib.h>
wird nicht mehr benötigt und auch nichtsystem
). Auch neinreturn
wird benötigt.Mein Name ist Shell ... PowerShell
Klassische selbstzerstörende Nachricht:
quelle
Bash (5)
Angenommen, Sie haben keine Leerzeichen im Dateinamen.
quelle
Sch
Wird nur einmal ausgeführt (und zeigt "Hallo Welt!", Wenn es ausgeführt wird), auch wenn Sie das System neu installieren und das Skript erneut ausführen.
EDIT: Ich dachte, ich würde auch ein Skript hinter runonce veröffentlichen. Nichts Besonderes, denn es sollte auf keinen Fall veröffentlicht werden, aber wie auch immer.
Sowie Datenbankschema
Die Daten werden in der Datenbank von Heroku gespeichert. Wenn Sie möchten, können Sie deren Datenschutzbestimmungen überprüfen . Ich überprüfe die in einer Datenbank gespeicherten Daten nicht, sondern nur, damit der Code einmal ausgeführt werden kann.
quelle
pg_query_params
schützt so ziemlich vor SQL-Injection. Es wird jedoch nicht gespeichert, da'; DROP TABLE users;--
es sich nicht um eine gültige IP-inet
Adresse handelt (es werden nur IP-Adressen akzeptiert). Wenn Sie also einen falschenX-Forwarded-For
Header haben, wird Ihr Besuch nicht gespeichert. Ich betrachte es selbst nicht als Problem.PHP,
22 bis20 ZeichenBEARBEITEN: Zwei Zeichen am Ende pro Kommentar entfernt.
quelle
<?unlink(__FILE__);
das Nachziehen?>
nicht erforderlich ist<?=
oder das Start-Tag wird nicht erkannt.<?
+ platz ist auch ok Sie können nach dem kurzen Tag einfach keinen Buchstaben verwenden.Rubin, 14
Der Quellcode wird als Name des Programms neu geschrieben.
quelle
.rb
und selbst wenn sein Name "IO.write $ 0, $ 0 # .rb" lautete, funktioniert dies nicht, da es beim Schreiben den vollständigen Pfad enthält.gem
undirb
sind Ruby-Programme ohne Erweiterung.ruby foo
undruby foo.rb
wird das gleiche mit oder ohne shebang arbeiten../foo
und./foo.rb
(unter der Annahme, dass sie ausführbar sind) werden beide fehlschlagen, ohne dass sie es schaffen und damit Erfolg haben (unter der Annahme, dass der Code korrekt ist usw.).Batch (6 Zeichen)
Dies setzt voraus, dass wir die Erlaubnis haben, die Datei zu löschen. Dies kann natürlich auch unter Windows (möglicherweise auch unter MS-DOS) erfolgen.
quelle
Bash
98 ZeichenLäuft nur einmal, da der Port für immer gesperrt ist.
quelle
0
es sich um einen speziellen Port handelt (der reserviert ist). Wenn ich dies auf meinem Computer ausführe, kann ich es mehrmals öffnen. Es ist auch ein Port< 1024
, was bedeutet, dass Root-Zugriff erforderlich ist, um abgehört zu werden.nc -l 1&
würde das problem mit beheben0
und ein byte kürzer sein, da der letzte platz nicht benötigt wird.NodeJS - 33 Bytes
quelle
fs
und den aktuellen Dateinamen ab__filename
und entfernt diesen Dateinamen aus dem Dateisystem.Batch, 7 Zeichen
Speichern Sie nicht gespeicherte Arbeit, bevor Sie dies versuchen.
Es wird entweder ein 64-Bit-System oder ein 32-Bit-System mit <2 GB RAM-Speicher vorausgesetzt. Muss vor dem Start in einer .bat- oder .cmd-Datei gespeichert werden. Die Eingabe in cmd.exe funktioniert nicht.
Es verbraucht einen vollen CPU-Kern und füllt Ihren RAM-Speicher mit einer Geschwindigkeit von mehreren hundert Megabyte pro Sekunde. Wenn Sie es nicht rechtzeitig stoppen (Task-Manager), wird jedes Byte des Arbeitsspeichers auf Ihrem Computer belegt, Ihr gesamtes System wird einfrieren und Sie können nichts tun, bevor Sie Ihren Computer durch Schneiden zwangsweise herunterfahren und neu starten Schalten Sie das Gerät ein oder halten Sie die Ein / Aus-Taste gedrückt.
Alle Credits gehen dazu auf StackOverflow an txtechhelp, weitere Informationen finden Sie hier: https://stackoverflow.com/q/23284131/1955334
quelle
Hier ist ein paar. Im Gegensatz zu vielen anderen sind diese nicht destruktiv, sondern nur kreativ und unorthodox.
Bash
Das ist ziemlich einfach. Die Variable
$REPLY
wird implizit von erstelltread
, aber mit einem leeren Herestring gefüllt. Diese leere Zeichenfolge wird dannprintf
in das aktuelle Skript eingefügt. Es ist ein eher verschleiertes Äquivalent von Folgendem:Windows Batch
Der zweite kopiert im Grunde die Konsolen-Eingabe, aus der gelesen wurde
nul
, in die aktuelle Datei.quelle
Sinclair BASIC
Verschiebt die Adresse des BASIC-Programms im Speicher von der Position, an der es sein sollte (203), damit der Interpreter die falschen Daten findet.
quelle
SQL
SQL-Geige
quelle