Das GNU Coreutils-Handbuch für mv
sagt:
Wenn eine Zieldatei existiert, aber normalerweise nicht beschreibbar ist, die Standardeingabe
ein Terminal ist und die Option -f oder –force nicht angegeben ist, fragt mv
den Benutzer, ob die Datei ersetzt werden soll. (Möglicherweise besitzen Sie die
Datei oder haben Schreibrechte für ihr Verzeichnis.) Wenn die Antwort
nicht bestätigend ist, wird die Datei übersprungen.
Die Version von mv
Ich verwende (GNU Coreutils 8.21 auf Ubuntu 14.04.3 LTS) zeigt unerwartetes Verhalten:
$ which mv
/bin/mv
$ ls -l
total 0
$ echo foo > 1; chmod -w 1; cp 1 2; ls -l | cut -d' ' -f 1-5,9
-r-x------ 1 me me 4 1
-r-x------ 1 me me 4 2
$ echo bar > 2
-bash: 2: Permission denied
$ mv 1 2
$ ls -l | cut -d' ' -f 1-5,9
-r-x------ 1 me me 4 2
Basierend auf dem oben zitierten Handbuchauszug hätte ich die mv 1 2
erwartet Befehl, den Benutzer vor dem Überschreiben der Datei 2
aufgefordert zu haben .
Gibt es einen Fehler in meiner Version von mv
, oder ein Fehler in meinem Verständnis? Wenn letzteres, was macht dann das Handbuch bedeuten?
Akzeptierte Antwort:
Es stellte sich heraus, dass der Server ein Dateisystem vom Typ „cifs“ (vermutlich das Common Internet File System, auch bekannt als CIFS) verwendete. Dies wurde durch Ausführen des Befehls df -T
entdeckt .
CIFS zeigt offensichtlich ein unkonventionelles Verhalten in Bezug auf Berechtigungen.
Das Ausführen der gleichen Befehle auf einem Computer mit einem ext4-Dateisystem und einer aktuellen Version von Coreutils ergab:
$ mv 1 2
mv: replace ‘2’, overriding mode 0444 (r--r--r--)?
wie erwartet.