Sådan afkortes (tomme) filer i Linux
I nogle situationer vil du måske gerne afkortes (tømme) en eksisterende fil til en nul-længde. Med enkle ord betyder truncating af en fil, at filindholdet fjernes uden at slette filen.
Truncating af en fil er meget hurtigere og nemmere end at slette filen, genskabe den og indstille de korrekte tilladelser og ejerskab. Hvis filen er åbnet af en proces, kan fjernelsen af filen også medføre, at det program, der bruger den, ikke fungerer korrekt.
Denne vejledning forklarer, hvordan man afkorter filer til nul størrelse i Linux-systemer ved hjælp af shell-omdirigering og kommandoen truncate
.
Shell-omdirigering #
Den nemmeste og mest anvendte metode til at afkortere filer er at bruge >
shell-omdirigeringsoperatoren.
Det generelle format for afkortning af filer ved hjælp af omdirigering er:
: > filename
Lad os bryde kommandoen ned:
- Det
:
kolon betydertrue
og giver ingen output. - Operatoren for omdirigering
>
omdirigerer output fra den foregående kommando til den angivne fil. -
filename
, den fil, du vil afkortes.
Hvis filen findes, vil den blive afkortet til nul. Ellers vil filen blive oprettet.
I stedet for :
kan du også bruge en anden kommando, der ikke producerer noget output.
Her er et eksempel på at bruge cat
kommandoen til at outputte indholdet af enheden /dev/null
, som kun returnerer et end-of-file-tegn:
cat /dev/null > filename
En anden kommando, der kan bruges, er echo
. Indstillingen -n
fortæller echo
, at den ikke skal tilføje en newline:
echo -n > filename
På de fleste moderne shells som Bash eller Zsh kan du udelade kommandoen før omdirigeringssymbolet og bruge:
> filename
For at kunne afkortes en fil, skal du have skrivetilladelser på filen. Normalt ville du bruge sudo
til dette, men de forhøjede root-privilegier gælder ikke for omdirigering. Her er et eksempel:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
Der findes flere løsninger, der gør det muligt at omdirigere med sudo
. Den første mulighed kan køre en ny shell med sudo og udføre en kommando inde i denne shell ved hjælp af -c
-flaget:
sudo sh -c '> filename'
En anden mulighed er at lede output til tee
-kommandoen, hæve tee
-privilegierne med sudo
og skrive det tomme output til en given fil:
: | sudo tee filename
truncate Kommando #
truncate
er et kommandolinjeværktøj, der giver dig mulighed for at formindske eller udvide størrelsen af en fil til en given størrelse.
Den generelle syntaks for afkortning af filer til nul størrelse med kommandoen truncate
, er som følger:
truncate -s 0 filename
Optionen -s 0
sætter filstørrelsen til nul.
For eksempel for at tømme Nginx-adgangsloggen skal du bruge:
sudo truncate -s 0 /var/log/nginx/access.log
Tøm alle logfiler #
Med tiden kan dit diskdrev blive overfyldt med en masse store logfiler, der optager store mængder diskplads.
Følgende kommando vil tømme filer, der slutter med “.log” under mappen /var/log
:
sudo truncate -s 0 /var/log/**/*.log
En bedre mulighed ville være at rotere, komprimere og fjerne logfilerne med logrotate
værktøjet.
Konklusion #
For at afkortede en fil i Linux skal du bruge omdirigeringsoperatoren >
efterfulgt af filnavnet.