Út. Čvc 14th, 2026
na obrázku je logo tučňáka s nápisem linux podtržený zleva doprava

Tohle je naprosto typická situace. Nafasujete do týmu juniorního kolegu a ten dostane nápad promazat někde logy. A samozřejmě smaže i ty log soubory, do kterých právě zapisují aplikace, čímž nedojde k uvolnění file desriptorů a proto nedojde k uvolnění jediného kilobajtu místa navíc.

Tak pánové pro vás tu sem hodím oneliner, který to udělá za vás, ať už to nikdy nikomu nemusím znovu vysvětlovat. 😉
A víte co je na tomhle nejvtipnější? Zeptáte se na to ChatGPT, i google Gemini a ani jeden z nich vám nedokáže poradit.

 for files in $(find /proc/*/fd -ls | grep '(deleted)' | awk '{print $11}'); do > $files ; done

Nicméně jestli jsou na něco ChatGPT či Google Gemini, anebo další modely dobré, je předělání tohoto příkazu do ansible playbooku vč. komentářů :

- name: Vyčištění diskového prostoru - smazané, ale otevřené soubory
  hosts: your_target_hosts # Zde nahraďte názvem vaší skupiny hostů nebo IP adresou
  become: yes # Spustí tasky s oprávněním root (sudo)

  tasks:
    - name: Najít cesty ke smazaným, ale stále otevřeným souborům
      ansible.builtin.shell: |
        # Používáme $NF (last field) pro robustnější extrakci cesty k souboru
        # Přesměrování 2>/dev/null potlačí chyby přístupu k /proc/<PID>/fd, které se mohou objevit
        find /proc/*/fd -ls 2>/dev/null | grep '(deleted)' | awk '{print $NF}'
      register: deleted_fds_output # Uloží výstup příkazu do proměnné
      changed_when: false # Tento task pouze vyhledává, nic nemění, takže ho neoznačujeme jako "změněný"

    - name: Vynulovat obsah smazaných souborů držených procesy
      ansible.builtin.shell: |
        # Vynulování souboru pomocí přesměrování ">"
        > {{ item }}
      loop: "{{ deleted_fds_output.stdout_lines }}" # Prochází každý řádek z výstupu předchozího tasku
      when: deleted_fds_output.stdout_lines is defined and deleted_fds_output.stdout_lines | length > 0
      # Podmínka 'when' zajistí, že se loop spustí, jen pokud byly nějaké soubory nalezeny.
      # Můžete přidat 'ignore_errors: yes', pokud nechcete, aby playbook selhal,
      # pokud se některý soubor nepodaří vynulovat (např. kvůli race condition).

Ještě pro pořádek vám sem vložím tento příkaz:

lsof |grep deleted

A až nebudete vědět, co který sloupec znamená, tak sem uvedu i záhlaví výstupu příkazu:

COMMAND PID TID TASKCMD USER FD TYPE DEVICE SIZE/OFF NODE NAME

a uvedu sem zdroj na článek o lsof, zdroj2,

Avatar

By Miro

Hardwaru a počítačům se věnuji již od roku 2003. Za tu dobu jsem poskládal stovky počítačů, opravil tisíce počítačů a vyřešil nespočetně problémů, vad a chyb, se kterými se setkávali uživatelé. Od roku 2005 se zabývám servery, nejen těmi herními, v roce 2007 jsem se začal věnovat Valve Source SDK level designu. Dnes spravuji v jedné osobě cca 100 serverů/diskových polí na univerzitě, řeším IT v malých, středních i mezinárodních firmách tak, aby firmy ušetřily nemalé částky při zlepšení kvality a soustředím se na snižování nákladů na IT od licencí až po hardware, software, provádím konsolidace a Quality Assurance za DevOps v on-premise i v cloudových prostředích, které firmám šetří rovněž nemalé peníze. Z velkých firem jsem měl příležitost s dalšími kolegy řešit správu 8000 serverů po celé západní Evropě s vysokou mírou automatizace a poznávání nejrůznějších evropských pracovních mentalit. Dále jsem řešil hybridní cloud ve velké firmě, orientované na trhy střední a východní Evropy. Posledních několik let se věnuji Devops pro velké zákazníky v Azure cloudu, spravuji kubernetes (AKS), Gitlab a soustřeďuji se na využití AI pro praktické účely.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

five × one =