Fájlok és mappák törlése, átnevezése Linuxon: rm, mv, ln

Linux 11 perc olvasás

Linuxon a fájlokat és mappákat az rm és az rmdir paranccsal törölheted, az mv paranccsal nevezheted át vagy helyezheted át, az ln paranccsal pedig linket (hivatkozást) készíthetsz rájuk. A parancsok egyszerűek, de van néhány csapdájuk: a törlés nem vonható vissza, az mv szó nélkül felülírja a célfájlt, egy szimbolikus link törlésekor pedig egy rossz helyen álló perjel a link célját is kiürítheti.

A cikk parancsait 2026 novemberében AlmaLinux 10.2 és Ubuntu 26.04 rendszeren próbáltuk ki. Ugyanígy működnek egy saját KVM VPS-en, és a cPanel Terminal felületén is. Az alapparancsok rövid áttekintését az alapvető Linux parancsokat bemutató cikk adja.

Fájl törlése: rm

rm fajl.txt
rm fajl1.txt fajl2.txt
rm *.log

Linuxon nincs lomtár: amit az rm töröl, az azonnal eltűnik, és a parancssorból nem állítható vissza. Fontos fájlok előtt készíts mentést (lásd: adatok mentése és visszaállítása Linuxon).

Hasznos kapcsolók:

  • -i: minden fájl előtt rákérdez (rm: remove regular file 'fajl.txt'?), az y válasz törli, az n megtartja a fájlt;
  • -I: csak egyszer kérdez rá, ha háromnál több fájlt vagy egy mappát rekurzívan töröl (rm: remove 4 arguments?); kevesebb kérdés, de egy elgépelt helyettesítő karakternél még megállítja;
  • -v: kiírja, mit törölt (removed 'fajl.txt');
  • -f: nem kérdez, és nem jelez hibát a nem létező fájlokra.

Ha egy fájl írásvédett (például chmod 444), az rm a terminálban rákérdez: rm: remove write-protected regular empty file 'vedett.txt'?. Az -f ezt a kérdést is elnyomja. Ha a parancs nem terminálból kap bemenetet (szkriptben, cron feladatban), az írásvédett fájlt kérdés nélkül törli.

AlmaLinuxon a root felhasználó .bashrc fájljában alapból szerepel az alias rm='rm -i' sor, ezért sudo -i után az rm minden fájlra rákérdez. A sudo rm viszont nem használja az aliast, és nem kérdez; az Ubuntu 26.04-en a rootnak sincs ilyen aliasa. Saját aliasok készítéséről a bash aliasokról szóló cikk szól.

Mappa törlése tartalommal együtt: rm -r

Üres mappát az rmdir töröl. Ha a mappában van valami, hibát ad, és a sima rm sem törli a mappát:

$ rmdir regi-oldal
rmdir: failed to remove 'regi-oldal': Directory not empty
$ rm regi-oldal
rm: cannot remove 'regi-oldal': Is a directory

A mappát a teljes tartalmával együtt az -r (rekurzív) kapcsoló törli:

rm -r regi-oldal
rm -rv regi-oldal    # kiírja, mit törölt
rm -rI regi-oldal    # előtte egyszer rákérdez

Az rmdir nem törli a nem üres mappát, az rm -rv a tartalmával együtt törli és kiírja a törölt fájlokat

Az rm -rf veszélyei

Az rm -rf kérdés nélkül, a hibákat is elnyomva töröl mindent, amit kap. A legtöbb baj nem a paranccsal, hanem a kapott útvonallal történik:

  • Szóköz egy útvonalban: az rm -rf /var/www/regi oldal két útvonalat kap, a /var/www/regi mappát és az aktuális könyvtárban az oldal nevűt. A szóközt tartalmazó nevet tedd idézőjelbe: rm -rf "/var/www/regi oldal".
  • Üres változó egy szkriptben: ha a $MAPPA üres, az rm -rf "$MAPPA"/* a gyökérkönyvtár tartalmát törölné. Szkriptben használd a ${MAPPA:?} formát, amely üres változónál hibával leállítja a szkriptet (MAPPA: parameter null or not set): rm -rf "${MAPPA:?}"/*.
  • Rossz könyvtárban kiadott relatív útvonal: az rm -rf * mindig az aktuális könyvtárban töröl. Előtte a pwd megmutatja, hol vagy, az ls pedig, mi törlődne.

Magát a gyökérkönyvtárat a GNU rm alapból nem hajlandó rekurzívan törölni (rm: it is dangerous to operate recursively on '/'), de ez csak a / útvonalat védi, az alatta lévő mappákat nem.

Ha nem vagy biztos a dolgodban, törlés helyett először nevezd át vagy helyezd át a mappát (például mv regi-oldal regi-oldal.torolni), és csak néhány nap múlva töröld.

Permission denied

rm: cannot remove '/srv/vedett/x': Permission denied

Egy fájl törléséhez a fájlt tartalmazó mappára kell írási jog, a fájl saját jogosultsága ehhez nem számít. Ilyenkor az -f sem segít. Ha a fájl valóban törlendő, és rendszerfájlról vagy más felhasználó fájljáról van szó, sudo rm kell hozzá. A jogosultságok működését a chmod és chown parancsot bemutató cikk magyarázza el.

Furcsa nevű fájlok

Kötőjellel kezdődő nevet az rm kapcsolónak értelmez:

$ rm -x.txt
rm: invalid option -- 'x'
Try 'rm ./-x.txt' to remove the file '-x.txt'.

Két megoldás van: a név elé írt ./, vagy a --, amely után a parancs már semmit sem tekint kapcsolónak:

rm ./-x.txt
rm -- -x.txt

Szóközt vagy különleges karaktert tartalmazó nevet tegyél idézőjelbe (rm "szep fajl.txt"), vagy használd a Tab billentyűt, amely a nevet a szükséges escape karakterekkel egészíti ki.

Felszabadul-e a hely?

Ha egy nagy fájlt (például egy naplót) egy futó program még nyitva tart, a törlés után a hely nem szabadul fel, amíg a program le nem zárja. Ilyenkor a df továbbra is tele lemezt mutat. Hogyan találod meg az ilyen fájlokat, és hogyan üríts ki egy naplót törlés nélkül, azt a Betelt a lemez, de a du nem mutatja cikk mutatja be.

Biztonságos törlés: shred

A törölt fájl tartalma a lemezen addig olvasható maradhat, amíg felül nem íródik. A shred véletlen adatokkal felülírja a fájlt, mielőtt törli:

shred -u -v titkos.txt

A shred dokumentációja szerint ez naplózó (journaling) fájlrendszereken, SSD-n és virtuális gépeken nem garantálja, hogy minden példány felülíródik, mert a tárolórendszer az adatot máshová is írhatja. Bizalmas adatnál ezért a teljes lemez titkosítása megbízhatóbb megoldás.

Átnevezés és áthelyezés: mv

Linuxon nincs külön átnevező parancs: az átnevezés is az mv dolga.

mv regi-nev.txt uj-nev.txt        # átnevezés
mv fajl.txt /var/www/html/        # áthelyezés másik mappába
mv fajl1.txt fajl2.txt mentes/    # több fájl egy mappába
mv regi-mappa uj-mappa            # mappa átnevezése

Mappát is így nevezel át, -r kapcsoló nélkül.

Az mv alapból szó nélkül felülírja a célfájlt. Ha az uj-nev.txt már létezik, a tartalma elvész. Ezt kapcsolókkal előzheted meg:

  • -i: rákérdez a felülírásra (mv: overwrite 'b.txt'?);
  • -n: soha nem ír felül létező fájlt;
  • -b: felülírás előtt a régi célfájlt ~ végű néven megtartja (b.txt~);
  • -v: kiírja, mit csinált (renamed 'a.txt' -> 'c.txt').

Ha a cél egy létező mappa, az mv a forrást beleteszi: a mv dir1 dir2 után a mappa a dir2/dir1 helyen lesz, nem dir2 néven. Egy nem üres mappát nem lehet egy ugyanolyan nevű, nem üres mappára áthelyezni (mv: cannot overwrite 'e/a': Directory not empty); két mappa tartalmának összefésüléséhez az rsync vagy a cp -a való.

Áthelyezés másik fájlrendszerre

Ugyanazon a fájlrendszeren belül az mv csak a nevet írja át: egy több gigabájtos mappa áthelyezése is azonnali, és a fájlok inode-ja sem változik. Ha a cél egy másik lemezen vagy partíción van (például egy külön csatolt lemezen, vagy Ubuntun a memóriában lévő /tmp mappában), az mv valójában lemásolja, majd törli a forrást:

$ mv -v /dev/shm/z.txt ~/proba/
copied '/dev/shm/z.txt' -> '/home/admin/proba/z.txt'
removed '/dev/shm/z.txt'

Ez nagy adatnál sokáig tart, és ha közben megszakad, a cél félkész lehet. Nagy mappáknál biztonságosabb előbb másolni (rsync -a vagy cp -a), ellenőrizni, és csak utána törölni a forrást. A másolás részleteit a fájlok másolásáról szóló cikk írja le.

Különbség a cp -a és az mv között

  mv (azonos fájlrendszeren) cp -a
A forrás megmarad? nem igen
Sebesség azonnali a mérettől függ
Kell hozzá szabad hely? nem igen, a teljes méret
Jogok, tulajdonos, dátumok változatlanok megtartja (a tulajdonost csak rootként)
Szimbolikus linkek változatlanok linkként másolja

A sima cp (az -a nélkül) a szimbolikus link helyett a cél tartalmát másolja, és a fájlok dátuma a másolás ideje lesz.

SELinux (AlmaLinux, Rocky Linux): az mv a fájl SELinux címkéjét is magával viszi, a cp viszont a célmappa címkéjét adja az új fájlnak. A teszten a home könyvtárból a webszerver mappájába áthelyezett fájl user_home_t címkét kapott, és az nginx 403-as hibát adott rá, a másolt fájl működött. Ilyenkor a sudo restorecon -v fajl helyreállítja a címkét; részletesen a SELinux Permission denied hibák javításáról szóló cikk írja le.

Sok fájl átnevezése egyszerre

Az mv egyszerre csak egy fájlt tud átnevezni. Több fájlhoz a rename parancsot vagy egy rövid bash ciklust használhatsz. A rename parancsnak két, teljesen eltérő változata van:

AlmaLinux, Rocky Linux: a util-linux rename

AlmaLinuxon a rename a util-linux része, és alapból telepítve van. Egyszerű szövegcserét végez: rename MIT MIRE FÁJLOK.

rename -n -v .jpeg .jpg *.jpeg   # csak megmutatja, mi történne
rename -v .jpeg .jpg *.jpeg
`kep1.jpeg' -> `kep1.jpg'
`kep2.jpeg' -> `kep2.jpg'

A -n próbafuttatás: kiírja a változásokat, de nem nevez át semmit. Fájlonként csak az első előfordulást cseréli (aa-aa.txt helyett ba-aa.txt lesz); az összeset az -a kapcsolóval.

Ubuntu, Debian: a Perl rename

Ubuntun és Debianon a rename parancs a rename csomagban van (sudo apt install rename; az Ubuntu 26.04 cloud image-én nem volt telepítve). Ez a változat Perl reguláris kifejezést vár, ezért sokkal rugalmasabb:

# Próbafuttatás: szóköz helyett aláhúzás, .JPEG helyett .jpg
rename -n 's/ /_/; s/\.JPEG$/.jpg/' *

# Végrehajtás
rename -v 's/ /_/; s/\.JPEG$/.jpg/' *

# Minden szóköz cseréje (g = global)
rename 's/ /_/g' *

# Kisbetűsítés
rename 'y/A-Z/a-z/' *

Tömeges átnevezés a Perl rename paranccsal Ubuntun: a -n próbafuttatás, majd a -v végrehajtás

Ha Ubuntun a util-linux formáját (rename .jpeg .jpg *.jpeg) adod meg, a Perl változat szintaktikai hibával leáll (syntax error at line 1), és nem nevez át semmit. A util-linux változat Ubuntun rename.ul néven érhető el. AlmaLinux 10 alatt a Perl változatot nem találtuk meg sem az alap tárolókban, sem az EPEL-ben.

Bash ciklus: mindenhol működik

Ha nem tudod, melyik rename van a gépen, egy bash ciklus bármelyik disztribúción működik:

# Kiterjesztés cseréje: .JPG -> .jpg
for f in *.JPG; do mv -v -- "$f" "${f%.JPG}.jpg"; done

# Kisbetűs fájlnevek
for f in *[A-Z]*; do mv -v -- "$f" "$(echo "$f" | tr 'A-Z' 'a-z')"; done

A "$f" idézőjelei miatt a szóközt tartalmazó nevekkel is működik, a -- pedig a kötőjellel kezdődő neveket védi. Élesben futtatás előtt az mv elé írt echo megmutatja, mit csinálna a ciklus.

Linkek: ln

A link egy fájlra vagy mappára mutató második név. Kétféle van.

A szimbolikus link egy kis fájl, amely egy útvonalat tárol. Mutathat mappára, másik fájlrendszeren lévő fájlra, és akár nem létező célra is.

ln -s CÉL LINKNEV
ln -s /var/www/pelda.hu/public_html ~/public_html
ln -s /etc/nginx/sites-available/pelda.hu /etc/nginx/sites-enabled/

Az ls -l a linket l betűvel és nyíllal mutatja (current -> releases/2026-11-01).

Relatív linknél a cél a link helyéhez képest értendő, nem ahhoz a mappához, ahol a parancsot kiadtad. Az ln -s releases/v1 a/rossz egy a/releases/v1 célra mutató, törött linket hoz létre; helyesen ln -s ../releases/v1 a/jo. Az ln -sr releases/v1 a/rel (relative) maga számolja ki a helyes relatív utat (a/rel -> ../releases/v1). Abszolút útvonallal (/-rel kezdve) ez a probléma nem fordul elő.

Egy meglévő link átállítása más célra gyakori feladat, például telepítéskor (a current link az aktuális verzió mappájára mutat). Mappára mutató linknél a sima ln -sf nem azt csinálja, amit várnál: a régi link célmappájában egy új linket hoz létre, a current pedig változatlan marad. A -n kapcsoló kell hozzá, amely a meglévő linket nem követi, hanem lecseréli:

ln -sfn releases/2026-11-08 current

Szimbolikus link létrehozása, átirányítása az ln -sfn paranccsal, és a cél ellenőrzése a readlink -f paranccsal

readlink current       # a tárolt útvonal: releases/2026-11-08
readlink -f current    # a teljes, feloldott útvonal
ls -l current

A törött linkek (amelyek célja már nem létezik) a find paranccsal kereshetők meg:

find /var/www -xtype l

További keresési lehetőségeket a find parancs példáit bemutató cikk mutat be.

A link törlése a célt nem érinti:

rm current
unlink current

Ne írj perjelet a link neve után. A current/ már a célmappát jelenti, nem a linket. Az rm current/ hibát ad (Is a directory), az rm -r current/ viszont a teszten a célmappa teljes tartalmát törölte, csak magát a linket hagyta meg (rm: cannot remove 'current/': Not a directory). Az rm -rf current/ ugyanígy kiürítette a célmappát, és az -f miatt még hibaüzenetet sem írt ki. A Tab billentyű a teszten mindkét rendszeren perjelet tett a mappára mutató link neve után (ls current/), ezért törlés előtt mindig nézd meg a parancssort.

A -s nélküli ln hardlinket készít: ugyanannak a fájlnak egy második nevét, ugyanazzal az inode-dal.

ln eredeti.txt masodik.txt
ls -li eredeti.txt masodik.txt

A fájl tartalma addig marad meg, amíg legalább egy neve létezik: az eredeti.txt törlése után a masodik.txt ugyanúgy olvasható. Hardlink csak ugyanazon a fájlrendszeren belül készíthető, és mappára nem (ln: releases: hard link not allowed for directory). A gyakorlatban a szimbolikus link a gyakoribb; a hardlinkek lemezhasználatra gyakorolt hatását a du parancsról szóló cikk írja le.

Összefoglalás

Feladat Parancs
Fájl törlése rm fajl
Üres mappa törlése rmdir mappa
Mappa törlése tartalmával rm -r mappa
Törlés megerősítéssel rm -ri mappa vagy rm -rI mappa
Kötőjellel kezdődő fájl törlése rm -- -fajl
Átnevezés mv regi uj
Átnevezés felülírás nélkül mv -n regi uj
Tömeges átnevezés (Ubuntu, Debian) rename 's/regi/uj/' *
Tömeges átnevezés (AlmaLinux) rename regi uj *
Szimbolikus link ln -s cel link
Link átirányítása ln -sfn ujcel link
Link célja readlink -f link
Link törlése rm link (perjel nélkül)
Vissza: Linux leírások (76)