Labtutorials.org

UNIX alapok

In bioinfo, bioinformatics, bioinformatika on June 2, 2018 at 1:36 pm

A blognak bár nem célja programozásra tanítani az olvasót, úgy érzem, mégis ki kell térjek legalább egy alkalommal az általunk használt UNIX/LINUX (Shell) héjprogramozás alapszintű bemutatására és néhány alapvető parancs ismertetésére.

A UNIX (ejtsd: juniksz) egy közel 50 éve, 1969-ben létrehozott fejlesztői környezet, melyet Ken Thompson és Dennis Ritchei a Bell Laboratories-zal együttműködve, saját célra dolgozott ki. Bár sokak szerint furcsa dolog egy operációs rendszer nyelvét munkára bírni, az általa nyújtott lehetőségek pedig sok tekintetben elmaradhatnak az újabb, specializáltabb és magasabbszintű programnyelvek által nyújtott lehetőségektől – mint például a Python (Biopython), Perl vagy R programnyelvekétől, melyek 99%-ban lefedik a bioinformatikai programokat –, mégis nagyon hasznos eszközként kell tekintsünk rá. Nemcsak azért, mert könnyedén kiválthatjuk vele az Excel által kínált függvényeket, hanem azért is, mert ez egy szkriptnyelv, amely úgy működik, mintha csak szövegmanipulációra lett volna kitalálva. A bioinformatika pedig gyakorlatilag a nagy szövegfájlok (például szekvenciafájlok, táblázatok) feldolgozásának a tudománya. A UNIX által akár több millió sorból és/vagy oszlopból álló táblázatokat is hatékonyan kezelhetünk: alkalmazásával a feladatok végrehajtási ideje nagyságrendekkel lerövidülhet, és eltekinthetünk például attól a mindenki számára ismert problémától is, amikor a táblázatba foglalt értékeink dátummá alakulnak.

A UNIX fontos erénye, hogy kombinálható egyéb nyelvekkel. A SED (streamline editor) szövegszerkesztő és AWK „táblázatkezelő” például hamar a UNIX alapeszközeivé váltak, de egy R programnyelvben, kifejezetten bioinformatikai célra megírt elemző programot mint a DiffBind, is közvetlenül tudunk használni UNIX parancssorban (az Rscript parancs használatával). Egy UNIX platform egyszerre több felhasználónak képes munkafelületet biztosítani, és nagyszámú munkafolyamat egyidejű indítására is alkalmas. Az előző bejegyzésben bemutatott ngsdeb szerverünkön működő 236 (40+88+24+7×12) processzor lehetővé teszi azt is, hogy ezek a folyamatok párhuzamosan fussanak, más-más processzor igénybevételével, tovább gyorsítva így a felhasználók munkáját.

 A ngsdeb szerver több számítógép összekapcsolásából épül fel, melyeket node-oknak nevezünk. A bejelentkezést követően az ún. head (login) node-ra érkezünk, ahonnan munkánk megkezdése előtt – a házirend szabályai szerint – át kell lépjük valamelyik compute node-ra. Ehhez a következő karaktersort kell begépelni: ssh n001.

A korábbi, [username@admin ~]$ karaktersor helyett egy új sorban a [username@n001 ~]$ jelenik meg, amely továbbra is jelzi a felhasználónevünket, ill. hogy épp melyik node-ra jelentkeztünk át. A „~” karakter arra utal, hogy épp a /home könyvtárban tartózkodunk, a „$” (sorvég) karakter pedig arról árulkodik, hogy az előzőleg begépelt parancsunk befejeződött és újabb utasításokat adhatunk. Mivel a szervert használó munkacsoportok adatai más-más meghajtókon találhatóak, el kell jussunk a megfelelő könyvárig. No, de hogyan?

Azok számára, akik a terminál megnyitását követően már elveszettnek érzik magukat, nem tudják, hogyan tudnak lépegetni a mappák között, ill. hogyan tudnak fájlokat létrehozni, törölni vagy átmozgatni, összegyűjtöttem a legfontosabb UNIX parancsokat és azok magyarázatait:

pwd

pwd, azaz print working directory; kiírja a teljes elérési útját annak a könyvtárnak, ahol épp tartózkodunk; közvetlenül a bejelentkezést követően ez a /home/username könyvtárat fogja jelenteni

ls

kilistázza az adott mappa tartalmát (fájlokat és (akár al)könyvtárakat is egyaránt)

cd

cd, azaz change directory; begépelése után az adott könyvtárból elérhető alkönyvtár nevét megadva a kívánt könyvtárba léphetünk át (pl.: cd samples vagy cd samples/sample1 begépelésével egyből a samples könyvtárba, vagy a benne található sample1 könyvtárba juthatunk)

cd ..

visszatérés egy mappával „feljebb”; cd ../.. begépelésével pedig két mappával „feljebb”, stb.

mkdir

mkdir, azaz make directory;az mkdir all_samples begépelésével az aktuális könyvtárban létrehozhatunk egy új mappát all_samples néven

cp

cp, azaz copy paste; a cp sample1.bam ../. begépelésével a sample1.bam fájlt az eggyel „feljebb” található könyvtárba másolhatjuk át. A „../” után gépelt „.” karakter azt jelöli, hogy a megadott mappába szeretnénk másolni a fájlt. Amennyiben úgy szeretnénk áthelyezni, hogy új nevet is kapjon, a következő szerint kell eljárnunk: cp sample1.bam ../copy_of_sample1.bam

mv

mv, azaz move; a mv sample1.bam ../. begépelésével a sample1.bam fájlt egy könyvtárral „feljebb” mozgathatjuk, ugyanakkor a mv sample1.bam first_sample.bam paranccsal a sample1.bam fájlt az adott könyvtárban first_sample.bam-ra nevezhetjük át

rm

rm, azaz remove; rm sample1.bam begépelésével a sample1.bam törlésre kerül; egy könyvtár és annak teljes tartalmának törléséhez a -r kapcsolót is alkalmaznunk kell, pl.: rm -r samples

head

a head sample1.bed parancs kiírja a sample1.bed fájl első 10 sorát; head -25 sample1.bed pedig kiírja az első 25 sorát

tail

a tail sample1.bed parancs kiírja a sample1.bed fájl utolsó 10 sorát; tail -25 sample1.bed pedig kiírja az utolsó 25 sorát

cat

a cat sample1.bed kiírja a képernyőre a sample1.bed teljes tartalmát; ezt ebben a formában ritkán használjuk, inkább fájlok összefűzésére: cat sample1.bed sample2.bed sample3.bed > sample123.bed, amely a sample1-2-3.bed fájlok tartalmát egymás alá fűzi az általunk definiált sorrendben. A „>” karaktert követő fájlnevet tekinti a parancssor az újonnan létrehozott (vagy felülírt!) kimeneti fájl nevének

wc

wc, azaz word count; wc -l sample1.bed begépelésével a sample1.bed sorainak számát kapjuk meg

man

a man, azaz manual parancs használatával információt nyerhetünk arról, hogy egy adott parancs mire és milyen kapcsolókkal használható, pl. a man wc begépelésével megtudhatjuk, hogy a wc parancs a -w kapcsolóval együtt használva (man wc -w sample1.bed) kiírja, hogy a sample1.bed fájl hány szóból áll.

top

a top parancs kilistázza az aktuális node-on a felhasználók által elindított és épp futó job-okat

ps

a ps parancs begépelése információt nyújt csak az általunk elindított és futó job-okról az aktuális node-on

kill

a ps parancs által pl. „7698 pts/0”-ként kilistázott folyamatot, amely mondjuk a homer2 program futását jelöli, a kill 7698 pts/0 begépelésével a homer2 futását leállíthatjuk

exit

kilép az aktuális terminálból; ha valamelyik node-on tartózkodunk, akkor visszalép pl. a head node-ra

A fentiek alapján, ha szeretnénk megszámolni, hogy egy fájl első öt sora hány karakterből áll, megtehetjük azt, hogy a head -5 fájl.txt > fájl_v2.txt paranccsal létrehozunk egy új fájlt, amely csak a számunkra fontos 5 sort tartalmazza, majd a wc -m fájl_v2.txt paranccsal a képernyőre kiíratjuk az eredményt. Az átmeneti fájl (fájl_v2.txt) létrehozását azonban elkerülhetjük, munkánkat pedig meggyorsíthatjuk, ha a head és a wc parancsokat a megfelelő kapcsolókkal egy sorban alkalmazzuk: head -5 fájl_v2.txt | wc –m

Mit is csináltunk? Alkalmaztuk a „|”, azaz a „pipe” vagy „cső” karaktert, amely segítségével az első lépés kimenete lett a második bemenete.

Erről fog szólni a következő bejegyzés.

 

EEM (1)

Az Emberi Erőforrások Minisztériuma ÚNKP-17-3-IV-DE-140 kódszámú Új Nemzeti Kiválóság Programjának támogatásával készült.

Advertisements
%d bloggers like this: