Linux, git¶
A leírásban alapvető Linux ismeretek találhatók.
Linuxban (ebben a leírásban értsd Ubuntu, Raspbian) a legtöbb munkamenetet lehetséges, vagy épp célszerű terminálból végrehajtani. Ez a tutorial segít a linux terminál alapjainak megismertetésében.
Danger
Fontos, hogy a megszokott ctrl+v, ctrl+c helyett itt a ctrl+shift+v, ctrl+shift+c működik. A ctr+c(megszakítás billentyűzetről) pl. egy ROS node (program) befejezésére használható itt.
Ajánlott terminálprogramok¶
Számos program választható a szöveges parancssor elérésére. ROS/ROS2 esetén talán a következők a legjobb választások.
Windows Terminal¶
Ahogy a neve is mutatja, ez a megoldás WSL esetén, Windows-on releváns. Előnye, hogy egy helyen használhatunk több Linux disztribúciót akár Windows parancssorral is. Ctrl-Shift-P billentyű kombinációkkal, majd a Split down, Split left parancsokkal oszhatjuk szét hasonló módon a terminált:

A Windows Terminal release oldalon letölthető telepítőként vagy zip formátumban portable verzióban. A portable használathoz kitömörítés után egy üres .portable fájlt kell elhelyeznünk. Így akár USB pendriveon is a megszokott beállításokkal használhatjuk. Egy ilyen portable verzió található a géptermekben a K:\ meghajtón is (\\fs-kab.eik.sze.hu\C100\kozos\GKNB_AUTM078_Autonóm_robotok_és_járművek_programozása)
Terminator¶
Linuxon értelmezett terminál, de telepíteni kell.
sudo apt update
sudo apt install terminator
Terminator-ban Ctrl-Shift-O, Ctrl-Shift-E billentyű kombinációkkal oszthatjuk tovább az adott ablakot. Ctrl-Shift-W bezárja az aktív ablakot.

VS code terminal¶
A fejlesztőkörnyezet beépített terminálja, mind Windowson, mind Linuxon működik.


Fontosabb terminal parancsok¶
Korábbi parancsok¶
Fel nyíl🔼vagyLe nyíl🔽- A közvetlenül ezelőtti parancsokat érhetjük el így.Ctrl+Rbillenytűkombinációval korábbi parancsok hívhatók elő, időrenben egyre korábbiakCtrl+Shift+Rbillenytűkombinációval korábbi parancsok hívhatóak elő, de időrenben előre haladva
A megszokott ctrl+v, ctrl+c helyett itt a ctrl+shift+v, ctrl+shift+c működik. A ctr+c pl. egy ROS node (program) befejezésére használható itt.

Automatikus kiegészítés¶
Tabbillenytűvel az elkezdett parancsok egészíthetőek kiTab Tabbillenytűkombinációval az összes lehetséges parancsot fogja kilistázni

Képrnyőtörlés¶
Ctrl+Lbillenytűvel törölhetőek a korábbi szövegek, így jobban átlátható lesz a terminal
Könyvtárak közötti navigáció¶
cd: adott könyvtárba / mappába történő belépés- pl
cd ~/ros2_ws/src,cd ../.. ls: listázás: könyvtárak, fájlokmkdir: könyvtár készítésepwd: aktuális munkakönyvtár kiíratása (print working directory)cp: Ezzel a paranccsal tudunk másolni (cp/file/helye/ahova/másolni/akarod/,cp -r/a/könyvtár/helye/ahova másolni/akarod)mv: Ezzel adott fájlt vagy könyvtárat tudunk mozgatni (áthelyezni) vagy átnevezni (mv /a/fájl/helye *fájl új neve,mv /a/fájl/helye /a/fájl/új/helye)rm: Fájlok törlése (rm /a/fájl/helye, rm -r /a/fájlok/és/mappák/helye) Azrm -rparancsnál minden törlődni fog a meghatározott helyen.rmdir: Egy üres könyvtár törlésechmod: (change mode) Arra alkalmas, hogy megváltoztassuk a fájlok / mappák hozzáférési jogait. Tehetjük ezt például karakteres kapcsolókkal (r, w, stb.), vagy oktálisan (számjegyekkel).- pl
chmod +x my_python_node.py: végrehajtási (execute) jog hozzáadása - pl
chmod 777 everything.py: minden jog hozzáadása
chmod¶
| N | Sum | rwx |
Permission |
|---|---|---|---|
7 |
4(r)+ 2(w) + 1(x) | rwx |
read, write and execute |
6 |
4(r)+ 2(w) | rw- |
read and write |
5 |
4(r)+ 1(x) | r-x |
read and execute |
4 |
4(r) | r-- |
read only |
3 |
2(w)+ 1(x) | -wx |
write and execute |
2 |
2(w) | -w- |
write only |
1 |
1(x) | --x |
execute only |
0 |
0 | --- |
none |
Könyvtárak¶
| Hely | Magyarázat |
|---|---|
/ |
A könyvtárfa kiindulópontja, gyökér |
/boot |
Rendszerindítás, bootloader |
/bin |
A futtatható parancsok, binaries |
/sbin |
A rendszergazda parancsai, superuser/system bin |
/lib |
Az induláshoz szükséges osztott rendszerkönyvtárak -libraries- illetve, modulok, meghajtóprogramok |
/dev |
Eszközök, mint például USB (ttyUSB0) - devices |
/etc |
Beállítófájlok, helyi indító parancsok, jelszavak, hálózati beállítók stb. helye. |
/home |
Itt található minden felhasználó saját könyvtárat. Például ha a sanyi felhasználóval vagyunk belépve, /home/sanyi tartalmazza a fájljainkat. A /home/sanyi/Desktop, vagy röviden ~/Desktop az asztalunk tartalma. |
/mnt |
A felcsatolt (mountolt) perifériák, fájlrendszerek helye, mount. |
/proc |
Process information |
/root |
A root user könyvtára |
/tmp |
Temp |
/usr |
Universal system resources, alkalmazások, rendszereszközök |
/var |
Változó adatok, például nyomtatási munkák, email-ek |
Verziókezelés¶
git clone: git repo klónozásagit config --global user.name "Sanyika": felhsználónév beállításagit config --global user.email "sanyika@gggmail.com: email beállításagit init: lokális repó inicializálásagit add <file>: fájl hozzáadásagit status: aktuális státusz lekérdezésegit commit -m "My beautiful commit": commit, üzenettelgit push: pushgit pull: pullgit branch <new_branch_name>: branch készítésegit checkout <branch_name>: új branchgit checkout -- .: Minden nem staged (unstaged) változás elvetése lokálisan. VS code-ban kb ez a "discard all changes" parancs. (Újabb git verziókban agit restore .is hasonló módon működik.)git merge <branch_name>: a jelenlegi branch-be mergeli a branch-t
Tip
A legtöbb művelet VS code-dal elvégezhető terminál nélkül is. Erről bővebben itt lehet olvasni.

Forrás: link
Szöveges fájlok¶
wget: webes tartalmak letöltése terminalbólcat: fájl tartalmának kiíratásatouch: szöveges fájl létrehozása- pl.
touch hello.txt echo: kiíratás, vagy fájlba írás (>>operátor). Amennyiben nem létezik a fájl, létrehozza (touch)- pl.
echo "hello" >> hello.txt - pl.
echo "n = 5; print('\n'.join(':D ' * i for i in range(1, n + 1)))" >> hello.py - pl.
ros2 topic list >> hello.txt - pl.
ros2 topic echo --once /scan >> hello.txt find: fájl keresése, pl afind ~/ros2_ws/src/ -name *.txtmindentxtfájlt megkeres a~/ros2_ws/srckönyvtárban.nano: szövegszerkesztő: egyszerű, terminál-alapúcode: szövegszerkesztő: GUI, VS code- pl.
code .megnyintja az aktuális mappa tartalmát - pl.
code ~/.bashrcmegnyintja a~/.bashrctartalmát szerkesztésre colcon: wrapper acmakeésmakeparancsok egyszerűbb használatához, erről bővebben később
Telepítés¶
sudo apt installvagysudo apt-get install: szoftver csomagkezelővel történő telepítés, Advanced Packaging Tool (APT).- pl.
sudo apt install tree mc- tree és mc programok telepítése sudo: (Superuser do) Lehetővé teszi, hogy rendszergazdaként vagy más felhasználó nevében hajtsunk végre parancsokat.sudo apt update: csomagindex frissítése, ha új verziók jönnek ki különböző szoftverekből, ezt a paracsot a telepítés (apt install) előtt célszerű kiadni.sudo apt update: már telepített csomagok frissítéseapt list: listázza asz összes telepített csomagot- pl.
apt list | grep ros: leszűri csak azROS-hez kapcsolódó csomagokat
További hasznos eszközök¶
Navigáció¶
Ctrl + avagyhome: A sor elejére dobCtrl + evagyend: A sor végére dobCtrl + ◀/Ctrl + ▶: Az előző / következő szóra ugrik
grep¶
grep: (Global \ Regular Expression \ Print) fájlokban illetve parancsok kimenetében keres- pl.
grep 'ROS' ~/.bashrc: listázza abashrcfájlban azROSszöveget tartalmazó sorokat - pl.
ros2 topic list | grep pose: listázza az összes topicot, amiben vanposestring
ssh¶
ssh: (Secure Shell Protocol) linux gépektbe távoli terminal bejelentkezést tesz lehetővé- pl.
ssh nvidia@192.168.1.5: belépés az adott user adott IP címen lévő gépébe - pl.
ssh user01@computer4 -X: belépés-XX window használatával, így az esetleges ablakok a mi gépünkön jelennek meg, de a távoli gép hostolja őket - pl.
ssh laptop@192.168.0.2 touch hello.txt: létrehoz az adott gépen egy fájlt, nyilván más parancsokkal is működik
Gyakran használt parancsok¶
- Futó folyamatokról a
psad tájékoztatást pl:ps -A | grep rosvagyps -eo pid,cmd | grep ros2 - A fájlrendszer állapotáról a
df -h(disk filesystem, human readable) parancs ad tájékoztatást
Az ssh alapvetően jelszót is kér, de ha megbízunk egy adott gépben, elmenthetjük a privát-publikus kulcspárt, és akkor erre nincs szükség, például így.
rsync hálózati másolás¶
Hálózatba kötött gépek közötti másolás (remote sync), pl. egy Nvidia Jetson beágyazott számítógépről a saját gépünk /mnt/c/bag/ mappájába történő másolás progress-barral így néz ki:
rsync -avzh --progress /mnt/kozos/measurement_files/lexus-2023-07-18-campus.mcap /mnt/c/temp/
rsync -avzh --progress nvidia@192.168.1.5:/mnt/storage_1tb/2023-07-02/ /mnt/c/bag/2023-07-02/
scp hálózati másolás¶
Hálózatba kötött gépek közötti másolás (az rsync alternatívája). A progress-bar sajnos nem minden rendszeren jelenik meg:
scp /mnt/kozos/measurement_files/lexus3sample02.mcap /mnt/c/temp/
screen¶
Virtuális terminálokat indít, kezel, például:
screen -m -d -S roscore bash -c roscore
screen -m -d -S campfly bash -c 'roslaunch drone_bringup campus_fly.launch'
screen -m -d -S rviz1 bash -c 'rosrun rviz rviz'
- list screen:
screen -ls - restore screen:
screen -r roscore/screen -r campfly/screen -r rviz1 - detach:
Ctrl-a+Ctrl-d - kill:
killall -9 screenandscreen -wipe
mc fájlkezelő¶
GNU Midnight Commander (mc), a Norton Commander inspirálta fájlkezelő:

nmtui¶
Az nmtui (Network Manager Text User Interface) terminal-alapú Wifi / Ethernet / Hálózat konfigurátor.

nano szövegszerkesztő¶
Terminal alapú szövegszerkesztő. Szerkesztés után Ctrl+X a kilépés, utána Y-t ütve menti a fájlt.

htop / top¶
Az htop egy interaktív folyamatfigyelő parancs (nagyjából a windows task manager funkcionalitása), amely megjeleníti és felügyeli a futó folyamatokat a rendszeren. Memória- és CPU-használat folymatonként részletezve is kilvasható, továbbá van lehetőség a kill használatára is.

~/.bashrc fájl¶
A bashrc fájl (a ~ jelentése, hogy user1 felhasználó esetén a /home/user1/ mappában található, a . jelentése pedig, hogy rejtett fájl) minden terminal indtáskor lefutó fájl. Tehát, ha pl egy parancsot írunk bele, ami echo "hello" akkor minden terminal indításkor kiír egy hello üzenetet. Szerkesztése nano/VS code szövegszerkesztőből:
nano ~/.bashrc
code ~/.bashrc
Számunkra fontos környezeti változók pl:
export ROS_DOMAIN_ID=4
export ROS_LOCALHOST_ONLY=1
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/humble/share/turtlebot3_gazebo/models
export TURTLEBOT3_MODEL=waffle
source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
A bashrc fájl módosítása után nem kell új terminált nyitni, ha kiadjuk a következő parancsot:
source ~/.bashrc
ROS 1¶
Tip
A fejezetben a régi ROS 1-es könyzeteti változókról van szó, az új ROS 2-est a következő fejezet tartalmazza.
Kiírathatjuk a környezeti változókat (environment variables) echo-val / printenv-vel pl:
echo $ROS_MASTER_URI
printenv ROS_MASTER_URI
http://192.168.1.5:11311
echo $ROS_IP
printenv ROS_IP
192.168.1.10
ROS 2¶
ROS 2 fejezet
Ez az új, ROS 2-est tartalmazó fejezet.
Kiírathatjuk a környezeti változókat (environment variables) echo-val / printenv-vel pl:
echo $ROS_DISTRO
printenv ROS_DISTRO
humble
echo $AMENT_PREFIX_PATH
printenv AMENT_PREFIX_PATH
/opt/ros/humble
printenv | grep -i ROS
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DISTRO=humble
Gazebo és WSL¶
Gazebo szimulátort és WSL-t használva előfordulhat egy issue, ami egy egyszerű környezeti változó beállításával javítható. A ~/.bashrc fájlban a következőt kell beállítani.
export LIBGL_ALWAYS_SOFTWARE=1 ### GAZEBO IGNITION
Új terminál vagy source után a echo $LIBGL_ALWAYS_SOFTWARE parancsra 1-et fog kiíni.
Branch megjelenítése Linux bash-ben¶
Opcionális, de hasznos lehet: Keressük meg és módosítsuk a ~/.bashrc fájlban a következő részt.
(VS code használatával a következő parancs: code ~/.bashrc)
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
Miután megvan, cseréljük a következő részre:
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\n\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\\n$ '
fi
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
Mentsünk, majd a source ~/.bashrc, illetve minden új terminálnyitás hatására git repository-t tartalmazó könyvtárban a következőhöz hasonló bash fogad majd minket:

Forrás:
Ubuntu magyar dokumentációs projekt CC by-sa 2.5, Óbuda University CC BY-NC-SA 4.0