(Üres) fájlok csonkítása Linuxban
Bizonyos helyzetekben előfordulhat, hogy egy meglévő fájlt nullás hosszúságúra szeretnénk csonkítani (kiüríteni). Egyszerűen fogalmazva, a fájl csonkítása a fájl tartalmának eltávolítását jelenti a fájl törlése nélkül.
A fájl csonkítása sokkal gyorsabb és egyszerűbb, mint a fájl törlése, újbóli létrehozása és a megfelelő jogosultságok és tulajdonjogok beállítása. Továbbá, ha a fájlt egy folyamat nyitja meg, a fájl eltávolítása az azt használó program hibás működését okozhatja.
Ez a bemutató elmagyarázza, hogyan lehet a fájlokat nullára csökkenteni a Linux rendszerekben a shell átirányítás és a truncate
parancs segítségével.
Shell átirányítás #
A fájlok csonkításának legegyszerűbb és leggyakrabban használt módszere a >
shell átirányítás operátor használata.
A fájlok átirányítással történő csonkításának általános formátuma:
: > filename
Bontjuk le a parancsot:
- A
:
kettősponttrue
ot jelent, és nem eredményez kimenetet. - Az átirányítási operátor
>
átirányítja az előző parancs kimenetét a megadott fájlba. -
filename
, a csonkítandó fájl.
Ha a fájl létezik, akkor nullára lesz csonkítva. Ellenkező esetben a fájl létrejön.
A :
helyett használhatunk egy másik parancsot is, amely nem ad kimenetet.
Itt egy példa a cat
parancs használatára a /dev/null
eszköz tartalmának kiadására, amely csak egy fájlvég karaktert ad vissza:
cat /dev/null > filename
Egy másik használható parancs a echo
. A -n
opció azt mondja a echo
-nek, hogy ne csatoljon új sort:
echo -n > filename
A legtöbb modern héjprogramban, például a Bash-ben vagy a Zsh-ben elhagyhatjuk az átirányítási jel előtti parancsot, és használhatjuk:
> filename
Ahhoz, hogy egy fájlt le tudjunk vágni, írási jogokkal kell rendelkeznünk a fájlhoz. Általában a sudo
t használná erre, de a megemelt root jogosultságok nem vonatkoznak az átirányításra. Íme egy példa:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
Már több olyan megoldás is létezik, amely lehetővé teszi az átirányítást sudo
használatával. Az első lehetőség egy új héj futtatása sudo-val, és a héjon belül egy parancs végrehajtása a -c
flag használatával:
sudo sh -c '> filename'
A másik lehetőség a kimenet átvezetése a tee
parancsba, a tee
jogosultságok emelése a sudo
-vel, és az üres kimenet kiírása egy adott fájlba:
: | sudo tee filename
truncate Parancs #
truncate
egy parancssori segédprogram, amely lehetővé teszi, hogy egy fájl méretét adott méretre zsugorítsa vagy növelje.
A fájlok truncate
paranccsal történő nullára csonkításának általános szintaxisa a következő:
truncate -s 0 filename
A -s 0
opció nullára állítja a fájl méretét.
Az Nginx hozzáférési napló kiürítéséhez például a következő parancsot használhatja:
sudo truncate -s 0 /var/log/nginx/access.log
Empty All Log Files #
Az idő múlásával a lemezmeghajtója zsúfolttá válhat a sok nagy naplófájl miatt, amelyek nagy mennyiségű lemezterületet foglalnak el.
A következő parancs kiüríti a “.log” fájlt a /var/log
könyvtár alatt:
sudo truncate -s 0 /var/log/**/*.log
Jobb megoldás lenne a naplófájlok forgatása, tömörítése és eltávolítása a logrotate
tool segítségével.
Következtetés #
A fájl csonkításához Linuxban használja a >
átirányítási operátort, amelyet a fájl neve követ.