rm (Unix)

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare

rm (în engleză remove) este una din comenzile de bază UNIX care este folosită pentru a șterge fișiere. Comanda înlătură numele fișierului din indexul sistemului, astfel încât fișierul nu mai poate fi găsit. Datele actuale din fișiere nu sunt șterse, însă spațiul respectiv este marcat ca fiind gol și va fi suprascris de fișiere noi.

Comanda operează și pe directoare. Dacă este folosită pe un link simbolic, numai linkul este șters.

Sintaxă[modificare | modificare sursă]

rm [opțiuni] fișiere

de exemplu

% rm -i foo
remove foo? y

Printre opțiunile cele mai des folosite se numără:

-i, (interactiv), utilizatorul este întrebat înaintea ștergerii fiecărui fișier.
-f, (forțează), fișierele inexistente sunt ignorate, utilizatorul nu este întrebat.
-r, (recursive), șterge recursiv toate fișierele din toate subdirectoarele întâlnite.

rm este folosit adeseori prin intermediul aliasului rm -i care forțează un prompt pentru fiecare fișier care urmează să fie șters. În cazul în care un utilizator încearcă să șteargă un număr mare de fișiere, se folosește opțiunea -f care anulează opțiunea -i.


Permisiuni[modificare | modificare sursă]

De obicei, comanda rm are nevoie de drepturi de scriere în directorul unde fișierul este șters. Comanda nu are nevoie de drepturi de scriere pentru fișierul în cauză. Astfel, este posibil să se șteargă fișiere read-only (versiunea GNU întreabă utilizatorul înainte de a șterge un astfel de fișier). Dacă fișierul de găsește într-un director cu sticky bit setat, utilizatorul trebuie să fie posesorul (owner) fișierului respectiv.


Protecție pentru /[modificare | modificare sursă]

Firma Sun Microsystems a introdus o protecție pentru ștergerea accidentală a directorului root (rm -fr /) în Solaris 10 care a apărut în anul 2005.[1] La scurt timp după aceasta, o protecție similară a fost introdusă în FreeBSD. Versiunea GNU refuză și ea ștergerea dacă opțiunea --preserve-root este prezentă. Această opțiune este activată implicit.


Protecție pentru utilizatori[modificare | modificare sursă]

Utilizatorii și administratorii de sistem se protejează deseori pentru ștergerea accidentală a datelor printr-un alias sau redefinind comanda în shell:

alias rm="rm -i"
rm () { /bin/rm -i "$@" ; }

Din păcate, tendința unui astfel de utilizator este să fie neatent în special când caractere wildchar sunt folosite în comenzi. Uneori, utilizatorii se plictisesc să tot apese y pentru confirmarea ștergerii, s-au văzut cazuri în care comanda este folosită în forma yes | rm -files. Un compromis ar fi ca rm să ceară confirmare o singură dată, cu un script de genul

if [ -n "$PS1" ] ; then
  rm () 
  { 
     ls -FCsd "$@"
     echo 'remove[ny]? ' | tr -d '\012' ; read
     if [ "_$REPLY" = "_y" ]; then
         /bin/rm -rf "$@"
     else
         echo '(cancelled)'
     fi
  }
fi

De remarcat că funcția propriu-zisă este activă numai când comanda este introdusă de la consolă. Când rm este chemat dintr-un script, funcția nu este accesată.

O astfel de funcție shell mai poarte și numele de wrapper. Pentru rm există o serie largă de funcții wrapper definite de utilizatori, cum ar fi safe-rm.


Funcții de sistem[modificare | modificare sursă]

Funcția de sistem echivalentă se numește unlink:

#include <unistd.h>

int unlink(const char *pathname);

unde pathname este numele fișierului care trebuie șters.


Referințe[modificare | modificare sursă]


Legături externe[modificare | modificare sursă]


 v  d  m  Programe în linia de comandă pentru Unix (mai multe)
Management de fișiere: cat | cd | chmod | chown | chgrp | cksum | cmp | cp | du | df | file | fsck | ln | ls | lsof | mkdir | mount | mv | pwd | rm | rmdir | split | touch
Management de procese: at | chroot | cron | exit | kill | killall | nice | pgrep | pidof | pkill | ps | pstree | sleep | time | top | wait
Management utilizator/mediu: env | finger | id | mesg | passwd | su | sudo | uname | uptime | w | wall | who | whoami | write
Procesare text: awk | comm | cut | ed | ex | fmt | head | iconv | join | less | more | paste | sed | sort | tac | tail | tr | uniq | wc | xargs
Programare Shell: basename | echo | expr | false | printf | test | true | unset Imprimare:
lp
Communicații:
inetd | netstat | ping | rlogin | traceroute
Căutare:
find | grep | strings
Diverse:
banner | bc | cal | dd | man | size | yes