GNU/Linux >> Znalost Linux >  >> Linux

Jak zamknout textový soubor v Linuxu pomocí příkazu flock

Než prozkoumáme techniky/přístupy zamykání textového souboru v prostředí operačního systému Linux, měli bychom nejprve porozumět logice mechanismu zamykání souborů v Linuxu.

Mechanismus zamykání souborů Linuxu omezuje/řídí přístup k souborům mezi více procesy. Když je textový soubor úspěšně uzamčen, může k němu v určitém časovém plánu přistupovat pouze jeden proces.

Než budete pokračovat v tomto článku, uvědomte si prosím, že zamykání souborů se velmi liší od šifrování souborů nebo řízení přístupu k souborům, kde je k řízení přístupu uživatelů k vašim souborům zapotřebí přístupová fráze nebo heslo.

Když je soubor uzamčen v prostředí operačního systému Linux, je vytvořena událost vzájemného vyloučení, kde k němu může v daný okamžik přistupovat pouze jeden proces.

Prohlášení o problému

Operační systém Linux automaticky zablokuje všechny pokusy o akci zápisu směrované do otevřeného souboru, do kterého se zapisuje jiný proces. Co když však chcete zrušit oprávnění ke čtení a/nebo zápisu, která již vyvolal první proces, který má váš soubor otevřený a v režimu zápisu? Existuje řešení tohoto problému?

Kromě toho můžeme také chtít uzamknout náš soubor, aby žádný jiný proces nezasahoval nebo se nepokoušel narušit již zahájený stav režimu zápisu. Tento článek nás provede životaschopným řešením pro uzamčení textového souboru v Linuxu.

Ukázkový referenční soubor

Aby byl tento tutoriál poutavější a hodnotnější, měli bychom mít nějaké referenční textové soubory. Zaměříme se na textové soubory v následujícím adresáři:

Otevřete například soubor output.txt a začněte na něj psát.

$ sudo nano output.txt 

Zatímco je tento soubor stále otevřený, zkusme jej otevřít z jiné karty příkazového řádku.

$ sudo nano output.txt 

Obdržíte následující odpověď:

Výše uvedený snímek obrazovky přenáší PID (133110 ) procesu práce na textovém souboru s možností otevřít soubor, když je stále v režimu zápisu tohoto procesu.

Zadáním Y z naší klávesnice otevřeme tento textový soubor a předáme jej jinému procesu s výhradním přístupem k režimu zápisu.

Proto úprava souboru uživatelem 1 povede u uživatele 2 k následující výzvě při pokusu o uložení souboru.

Tato instance je dokonalou reprezentací dvou různých uživatelů v síti pracujících na jediném souboru.

Zamkněte textový soubor pomocí nástroje Flock v systému Linux

K vyřešení tohoto problému potřebujeme pomoc hejna Linuxu užitečnost. Od util-linux hostitelé balíčků hejno by měl být dostupný téměř ve všech distribucích operačního systému Linux. Tento příkaz spravuje konkrétní zámky souborů/adresářů prostřednictvím prostředí příkazového řádku Linuxu.

Chcete-li zamknout textový soubor v Linuxu, budeme odkazovat na následující syntaxi:

$ flock -x PATH_TO_FILE_TO_LOCK -c COMMAND 

-x možnost je získat zámek zápisu do cílového souboru. Pokusme se uzamknout ukázkový output.txt textový soubor. -c volba nám umožní předat jeden příkaz podporovaný Linuxem, např. příkaz kočka .

$ flock -x /home/dnyce/LinuxShellTips_Files/output.txt -c cat

Výše uvedená instance terminálu zůstane aktivní, což znamená, že textový soubor byl uzamčen.

Pokud otevřeme jiný terminál (zatímco tato instance terminálu stále běží) a spustíme další flok příkaz na stejný soubor, měl by nám být odepřen přístup k němu.

$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?

1

-w možnost se používá k přenosu čekací doby .007 sekund před umístěním zámku na textový soubor. Poté spustíme echo $? pro výstup stavu ukončení tohoto příkazu.

Stav ukončení 0 znamená, že příkaz byl úspěšně proveden a stav ukončení je 1 znamená, že příkaz nemohl být proveden kvůli chybě. V tomto případě je textový soubor uzamčen jiným procesem.

Abychom dále potvrdili, že je textový soubor uzamčen, můžeme použít lslocks příkazy pro výpis všech aktivních lokálních systémových zámků.

$ lslocks

Jak můžete vidět, náš soubor je přítomen.

Odemknutí textového souboru v Linuxu

Zrušení počátečního hejna příkaz (Ctrl+c) nebo zavření textového souboru by mělo uvolnit zámek, což umožní úspěšně spustit následující příkaz na sekundárním terminálu.

$ flock -w .007 /home/dnyce/LinuxShellTips_Files/output.txt -c echo; /bin/echo $?

Stav ukončení 0 znamená, že zámek již nelze na textový soubor použít.

Naučili jsme se, jak zamknout textový soubor v Linuxu tak, aby jej mohl používat pouze jeden proces (režim zápisu) současně. Implementace tohoto článku je zvláště užitečná, když různí uživatelé v síti přistupují k jedinému souboru.

Více na hejno příkaz lze nalézt na jeho manuálové stránce.

$ man flock

Linux
  1. Jak napsat text na obrázek pomocí příkazu Linux

  2. Jak vypočítat kontrolní součet CRC v Linuxu pomocí příkazu Cksum

  3. Jak připojit soubor pomocí příkazu mail v systému Linux?

  1. Jak přidat text na konec souboru v Linuxu

  2. Jak uložit výstup příkazu do souboru v Linuxu

  3. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  1. Jak restartovat Linux pomocí příkazového řádku

  2. Vytvářejte soubory pomocí příkazového řádku v Linuxu

  3. Jak rozdělit iso nebo soubor pomocí příkazu „split“ v Linuxu