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+R
billenytűkombinációval korábbi parancsok hívhatók elő, időrenben egyre korábbiakCtrl+Shift+R
billenytű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¶
Tab
billenytűvel az elkezdett parancsok egészíthetőek kiTab Tab
billenytűkombinációval az összes lehetséges parancsot fogja kilistázni
Képrnyőtörlés¶
Ctrl+L
billenytű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 -r
parancsná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 *.txt
mindentxt
fájlt megkeres a~/ros2_ws/src
kö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 ~/.bashrc
megnyintja a~/.bashrc
tartalmát szerkesztésre colcon
: wrapper acmake
ésmake
parancsok egyszerűbb használatához, erről bővebben később
Telepítés¶
sudo apt install
vagysudo 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 + a
vagyhome
: A sor elejére dobCtrl + e
vagyend
: 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 abashrc
fájlban azROS
szöveget tartalmazó sorokat - pl.
ros2 topic list | grep pose
: listázza az összes topicot, amiben vanpose
string
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-X
X 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
ps
ad tájékoztatást pl:ps -A | grep ros
vagyps -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 screen
andscreen -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