Αφαίρεση ενός συνδέσμου συμβόλων σε έναν κατάλογο

Έχω έναν συμβολικό σύνδεσμο σε έναν σημαντικό κατάλογο. Θέλω να απαλλαγώ από αυτό το symlink, διατηρώντας παράλληλα τον κατάλογο πίσω από αυτό.

Δοκίμασα το rm και παίρνω πίσω rm: cannot remove 'foo'.
Δοκίμασα το rmdir και πήρα πίσω rmdir: failed to remove 'foo': Directory not empty Στη συνέχεια προχώρησα με τα rm -f, rm -rf και sudo rm -rf.

Στη συνέχεια πήγα να βρω τα αντίγραφα ασφαλείας μου.

Υπάρχει τρόπος να απαλλαγούμε από το symlink χωρίς να πετάξουμε το μωρό μαζί με το νερό της μπανιέρας;

Λύση
# this works
rm foo
# versus
rm foo/

Βασικά, πρέπει να του πείτε να διαγράψει ένα αρχείο, όχι να διαγράψει έναν κατάλογο. Πιστεύω ότι η διαφορά μεταξύ rm και rmdir υπάρχει λόγω των διαφορών στον τρόπο που η βιβλιοθήκη της C αντιμετωπίζει το καθένα.

Σε κάθε περίπτωση, το πρώτο θα πρέπει να δουλέψει, ενώ το δεύτερο θα πρέπει να παραπονεθεί ότι το foo είναι κατάλογος.

Αν δεν λειτουργεί όπως παραπάνω, τότε ελέγξτε τα δικαιώματά σας. Χρειάζεστε δικαίωμα εγγραφής στον κατάλογο που περιέχει τα αρχεία για να τα αφαιρέσετε.

Σχόλια (11)

χρησιμοποιήστε την εντολή "unlink" και βεβαιωθείτε ότι δεν έχετε το / στο τέλος

$ unlink mySymLink

Η εντολή unlink() διαγράφει ένα όνομα από το σύστημα αρχείων. Αν το όνομα αυτό ήταν ο τελευταίος σύνδεσμος προς ένα αρχείο και καμία διεργασία δεν έχει το αρχείο ανοιχτό, το αρχείο διαγράφεται και ο χώρος που χρησιμοποιούσε γίνεται διαθέσιμος για επαναχρησιμοποίηση. Εάν το όνομα ήταν ο τελευταίος σύνδεσμος προς ένα αρχείο αλλά οποιεσδήποτε διεργασίες έχουν ακόμα το αρχείο ανοιχτό, το αρχείο θα παραμείνει σε ύπαρξη μέχρι να κλείσει ο τελευταίος περιγραφέας αρχείου που αναφέρεται σε αυτό.

Νομίζω ότι αυτό μπορεί να είναι προβληματικό αν το διαβάζω σωστά.

**Αν το όνομα αναφερόταν σε συμβολικό σύνδεσμο, ο σύνδεσμος καταργείται.

Εάν το όνομα αναφερόταν σε μια υποδοχή, fifo ή συσκευή, το όνομά της αφαιρείται, αλλά οι διεργασίες που έχουν ανοιχτό το αντικείμενο μπορούν να συνεχίσουν να το χρησιμοποιούν.

https://linux.die.net/man/2/unlink

Σχόλια (11)

Αν η rm δεν μπορεί να αφαιρέσει έναν συμβολικό σύνδεσμο, ίσως πρέπει να εξετάσετε τα δικαιώματα στον κατάλογο που περιέχει τον συμβολικό σύνδεσμο. Για να αφαιρέσετε καταχωρήσεις καταλόγου, χρειάζεστε δικαίωμα εγγραφής στον κατάλογο που τον περιέχει.

Σχόλια (0)