rm (Unix)
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ă
modificarerm [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
modificareDe 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 /
modificareFirma 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
modificareUtilizatorii ș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
modificareFuncț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
Legături externe
modificare- en Pagina de manual
- en rm, Commands & Utilities Reference, The Single UNIX® Specification, Issue 7 from The Open Group
- en Funcțiile de sistem, pagina man(2)
linia de comandă pentru Unix (mai multe) | Programe în|||
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 |