GNU/Linux >> Linux Esercitazione >  >> Linux

Perché Rm può rimuovere i file di sola lettura?

Se creo un file e poi ne cambio i permessi in 444 (sola lettura), come mai rm puoi rimuoverlo?

Se faccio questo:

echo test > test.txt
chmod 444 test.txt
rm test.txt

rm mi chiederà se voglio rimuovere il file protetto da scrittura test.txt . Mi sarei aspettato che rm non posso rimuovere un file del genere e che dovrei fare un chmod +w test.txt primo. Se eseguo rm -f test.txt quindi rm rimuoverà il file senza nemmeno chiedere, anche se è di sola lettura.

Qualcuno può chiarire? Sto usando Ubuntu 12.04/bash.

Risposta accettata:

Tutti rm ha bisogno dell'autorizzazione di scrittura+esecuzione sulla directory principale. I permessi del file stesso sono irrilevanti.

Ecco un riferimento che spiega il modello di autorizzazione più chiaramente di quanto potrei mai:

Qualsiasi tentativo di accedere ai dati di un file richiede l'autorizzazione di lettura. Qualsiasi
tentativo di modificare i dati di un file richiede l'autorizzazione di scrittura. Qualsiasi
tentativo di eseguire un file (un programma o uno script) richiede l'autorizzazione di esecuzione
...

Poiché le directory non vengono utilizzate allo stesso modo dei normali file, le autorizzazioni
funzionano in modo leggermente (ma solo leggermente) diverso. Un tentativo
di elencare i file in una directory richiede l'autorizzazione di lettura per la directory
, ma non per i file all'interno. Un tentativo di aggiungere un file a una directory
, eliminare un file da una directory o rinominare un file, tutti
richiedono l'autorizzazione di scrittura per la directory, ma (forse sorprendentemente)
non per i file all'interno. L'autorizzazione di esecuzione non si applica alle directory
(una directory non può essere anche un programma). Ma quel
bit di autorizzazione viene riutilizzato per le directory per altri scopi.

È necessaria l'autorizzazione di esecuzione su una directory per potervi inserire cd
(ovvero, per creare una directory come directory di lavoro corrente).

Execute è necessario in una directory per accedere alle informazioni "inode" dei
file all'interno. È necessario per cercare una directory in cui leggere gli
inode dei file all'interno. Per questo motivo il permesso di esecuzione su
una directory è spesso chiamato invece permesso di ricerca.


Linux
  1. Come posso copiare in modo ricorsivo i file per estensione di file, preservando la struttura delle directory?

  2. Come posso rimuovere un file o una directory chiamata \?

  3. Perché il mio file system è montato in sola lettura?

  4. Perché la directory principale è indicata da un segno /?

  5. Perché non posso eliminare questo file come root?

Come rimuovere (eliminare) un file o una directory in Linux

Crea e rimuovi i file di scambio in Ubuntu

Rimuove un collegamento simbolico a una directory

Rimuovi solo i file nella directory su Linux NOT directory

Impossibile rimuovere una directory in Unix

Come posso rimuovere i file duplicati su alberi di directory separati?