Felhasználói eszközök

Eszközök a webhelyen


oktatas:linux:programozas

< Linux

Linux programozás

  • Szerző: Sallai András
  • Copyright © Sallai András, 2011, 2013, 2016, 2018, 2019, 2020
  • Licenc: GNU Free Documentation License 1.3

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:

main.c
#include <stdio.h>
main()
{
    printf("Helló Világ\n");
}

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

oktatas/linux/programozas.txt · Utolsó módosítás: 2020/07/13 21:09 szerkesztette: admin