2016-04-04 5 views
2

Ich habe ein Perl-Skript, das den folgenden CodeLauf Perl-Skript gesperrt versehentlich einen Ordner

#/usr/bin/perl 
use strict; use warnings; 
chmod -R 775,"path-to-current-folder"; 

Nach dem Ausführen dieses Skript hat, bin ich nicht in der Lage den aktuellen Ordner zuzugreifen (und öffnen Sie das Skript natürlich) nicht mehr. Wenn Sie den Ordner in Konqueror sehen, gibt es eine zusätzliche Sperre im Ordnersymbol. Kann mir jemand sagen, was passiert ist und wie kann ich das rückgängig machen?

Ich habe die Erlaubnis dieses Ordners überprüft, anscheinend wurde es zu d--------- geändert. Ich habe dieses Problem gelöst, indem ich die Erlaubnis zurücksetzte, aber es wäre großartig, wenn irgendjemand erklären könnte, warum das passiert ist. Vielen Dank.

+0

Werden Sie Root und ändern Sie es zurück. Überprüfen Sie dann sorgfältig "perldoc -f chmod". – xxfelixxx

+0

Ich vermute, was Sie getan haben, verursacht chmod zu interpretieren "-R" als Modus, d. H. "0", und dann versuchen, es auf die Dateien mit dem Namen "775" und "Pfad zu aktuellen Ordner" anzuwenden. – xxfelixxx

+2

@xxfelixxx fast, nicht ganz. '-R' ist einer der [Datei-Test-Operatoren] (http://perldoc.perl.org/functions/-X.html); '-R 775' ist das Ergebnis des Tests" Ist die Datei namens '775' von der RUID lesbar?" Das ist wahrscheinlich falsch, weil es keine Datei namens '775' gibt. Dann wird das falsch 0. – hobbs

Antwort

1

Ich denke, Sie verwirren die Shell-Kommando 'chmod' mit der 'chmod' Perl-Funktion. Letzterer nimmt eine einzelne Liste als Parameter, dessen erstes Element der numerische Code sein muss, der oktal ausgedrückt wird. Von perldoc -f chmod;

chmod LIST 
      Changes the permissions of a list of files. The first element 
      of the list must be the numeric mode, which should probably be 
      an octal number, and which definitely should not be a string of 
      octal digits: 0644 is okay, but "0644" is not. Returns the 
      number of files successfully changed. See also "oct" if all 
      you have is a string. 

       $cnt = chmod 0755, "foo", "bar"; 
       chmod 0755, @executables; 
      ... etc ... 

Erstere - das heißt, die Schale - hat einen -R Schalter. Details siehe man chmod.

+0

Danke, also gibt es keine Möglichkeit für ein Perl-Skript, die Berechtigungen aller Dateien in einem Verzeichnis rekursiv zu ändern? – annena

+0

Soweit ich weiß, nein - nicht direkt über Builtins. Offensichtlich würde ein "System" -Aufruf zu "chmod -R" dies tun oder alternativ könnten Sie das File :: Find-Modul verwenden, um Dateien zu finden, die alle Kriterien erfüllen und den chmod über die so genannte & wanted-Funktion anwenden. – Marty