Ez az írás segíthet a Linuxszal történő ismerkedés során. Sok olyan embernek segítettem Linux telepítésével, akik azelőtt csak Windowst használtak. Ez az írás főleg az általuk feltett kérdéseken alapul. Rengeteg írás, információ fellelhető az interneten, mindenféle szempont szerint kategorizálva. Ez a leírás nem tartalmaz minden érdekes információt, de igyekszem amennyire lehet tömören összefoglalni (így is jó hosszú lesz), azokat a válaszokat, amiket az évek során a nekem feltett kérdésekre volt alkalmam adni.
Ennek a cikknek az előzménye: https://linuxmint.hu/blog/2022/02/windows-vs-linux-tudorka-2-kezelofelulet-kinezet-es-egyebek
Ebben a témakörben, ha felmerülnek, akkor általában két oldalról közelítenek a kérdések. Az egyik, hogy Linux alatt milyen parancsok felelnek meg Windows alatt használtaknak. A másik, hogy miért van egyáltalán szükség erre?
(Az estek többségében ilyen kérdések fel sem merülnek, tehát lehet, hogy ez az írás eléggé unalmas lesz)
Kezdjük azzal, hogy egyáltalán miért van szükség erre?
Erre a kérdésre az egyszerű válasz az, hogy CSAK. Kevésbé egyszerű válasz nincs. De azt gondolom, ha kicsit jobban megvizsgáljuk a helyzetet, összehasonlítva a Windowst a Linuxszal, akkor fel lehet oldani sok dolgot.
Vegyük ezt a megállapítást: Windows alatt nincs szükség ennyi „terminál” parancsra, mint Linux alatt. - Nos, ez így nem teljesen igaz. Ezt inkább úgy lehetne mondani, hogy Windows alatt nincs ennyi lehetőség parancsokkal dolgozni. Egyelőre, mert igyekezet azért látszik Windows oldalról is.
Nézzük nagyobb távlatban a dolgot: Volt egyszer, hol nem volt, volt egyszer egy DOS. A felülete az, az nem volt. Azaz, egy konzol felülete volt, ahol parancsokat lehetett begépelni. Grafikus, színes programokat indítani. A DOS parancsainak a felsorolása egy néhány oldalas füzetben elfértek azok rövid leírásával együtt. És lehetett sok más programot is felrakni a gépre, amik szintén parancsként működtek. A parancsok egyszerűek voltak, általában PARANCS paraméter1 paraméter2 /kapcsolók formájúak, ami néhány paramétert illetve kapcsolót jelentett. (Amíg meg nem jelent az ARJ tömörítő, aminek annyi kapcsolója volt, hogy azok felsorolása több oldalra is kiterjedt.)
Windows 95, 98 alatt a DOS ugyanúgy elérhető volt, NT alatt kezdődött annak amortizálása. Az XP estében fordult a kocka, az már úgymond nem „DOS alapú” volt, hanem már beépített virtuális gépet tartalmazott a DOS programok számára. De a parancsok még támogatottak voltak, valamennyire, de már nem a COMMAND.COM volt a parancsértelmező, hanem a CMD.EXE.
Mindeközben a Linux parancsai fejlődtek és sokasodtak. A mai grafikus felületek alatt egy emulátor biztosítja a parancsok bevitelét, amit jellemzően Terminálnak hívnak (KDE alatt ez Konsole).
Windows alatt is volt egy Terminál nevű program, ami nem tévesztendő össze a parancssort biztosító felülettel, az a modem kezelésről / modemezésről szólt. Ennek a nevét később megváltoztatták HyperTerminal-ra.
Alapból Windows alatt a Linux terminálnak a Parancssor felel meg. Windows alatt a Futtatásba írjuk be: CMD, vagy a menüből a kellékek alatt keressük a Parancssor alkalmazást.
Ma egyébként ott tartunk, hogy Windows 10 alatt megjelent a PowerShell, amivel a lemaradását próbálja behozni, és van rendes „Linux-like” Terminál emulátor is Windows alá:
https://www.microsoft.com/en-US/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab
Nos, ha ez a cucc alapból részét képezné a Windowsnak, tehát nem csak ilyen letölthető formában létezne, akkor minden bizonnyal a Windowsal kapcsolatos fórumok nagyon hasonlítanának a Linuxos fórumokhoz, úgy értem, azokat is a Terminálban futtatható parancsok dominálnák.
Ennek egyszerű oka az egyértelműség, a konkrét kifejezés lehetősége, a félreérthető körülírással szemben.
No. Akkor lássunk néhány Windows vs. Linux parancsot….
Megjegyzés:
- Linux alatt kisbetű / nagybetű számít!
- Linux alatt, ha a parancs emelt szintű jogosultságokat igényel, akkor azt a sudo előtét paranccsal kell indítani. Windows alatt ilyen esetben a parancssort kell rendszergazda jogokkal indítani, jobb egérgombbal kattintva az ikonja felett.
Művelet |
Windows |
Linux |
Megjegyzés |
Segítség, rövid információ adott paranccsal kapcsolatban |
Parancs /? Help parancs |
man parancs parancs --help |
|
Melyik könyvtárban vagyok? |
cd |
pwd |
Mind Linux mind Windows alatt alapból a promtból is látszik ez, de mindkét rendszer alatt át lehet állítani a promptot, hogy más információt mutasson. |
Milyen fájlok vannak ebben a mappában? |
dir |
ls -l |
További kapcsolókkal alakítható a kimenet tartalma, formája |
Fájl másolása |
copy file1.txt file2.txt |
cp file1.txt file2.txt |
Windows alatt van egy xcopy parancs is, ami bővebben konfigurálható több kapcsolóval |
Fájl törlése |
Del file.txt |
rm file.txt |
Windows is ismeri az rm parancsot |
Fájl tartalmának megjelenítése |
Type file.txt |
cat file.txt |
A cat minden karaktert megjelenít, a strings csak az „olvasható” karaktereket jeleníti meg. |
Fájl tartalmának megjelenítése „adagokban”. (egyszerre annyit, ami az ablakban elfér) |
type file.txt | more |
cat file.txt | more |
A more kapcsoló/ parancs egyszerre egy „képernyőnyit” jelenít meg, billentyű leütésre tovább lép, a végén kilép. Linux alatt a less parancs is egyszerre ennyit jelenít meg, de lehet fel-le lapozni, ebből q-val kell kilépni. |
Szöveg beszúrása egy fájlba |
echo “szöveg” > 1.txt |
echo “szöveg” > 1.txt |
|
További szöveg beszúrása egy fájlba |
echo “újabb szöveg” >> 1.txt |
echo “újabb szöveg” >> 1.tx |
|
Két fájl összemásolása egy harmadikba |
type 1.txt 2.txt > 3.txt |
cat 1.txt 2.txt > 3.txt |
|
Mappa váltás |
cd \mappa1\mappa2 |
cd /mappa1/mappa2 |
|
Mappa létrehozása |
mkdir vagy md |
mkdir vagy md |
|
Mappa törlése |
rmdir vagy rm |
rmdir vagy rm |
|
Fájl áthelyezés |
move |
mv |
|
Fájl átnevezés |
rename vagy ren |
rm |
|
Fájlok összehasonlítása |
fc |
diff |
|
Rendszer verziója |
ver |
uname -a |
|
Ki vagyok én (milyen user van bejelentkezve)? |
whoami |
whoami |
|
Parancs üzeneteinek az elrejtése |
parancs 2>nul |
parancs 2>/dev/null |
|
Fájl keresése |
dir c:\ /b/s | find “password” |
find / -name *password* locate password (u.a, csak gyorsabb) |
A locate parancs Linux alatt indexek alapján keres, ezt az adatbázist sudo updatedb-vel lehet frissíteni |
Környezeti változók megjelenítése |
set |
env |
|
Konkrét környezeti változó megjelenítése |
set Path |
echo %Path% env | grep PATH echo $PATH |
Megjegyzés: Windows alatt az aktuális mappa automatikusan a Path „részét képezi,” Linux alatt explicit módon meg kell adni az elérési utat futtatás esetén, ha az aktuális mappa nem a Path változó része. |
Milyen portokat figyelnek a folyamatok? |
netstat -nao |
netstat -ant sudo netstat -pant |
|
Konkrét szövegre keresése a fenti parancs kimenetben |
netstat -naob | find 9999 |
sudo netstat -pant | grep 9999 |
|
Futó programok listája |
tasklist wmic process list full |
ps -aux |
|
További infó konkrét PID-re keresve a fenti listából |
wmic process where ProcessID=45 |
ps -Flww -p 45 |
|
Az aktuális host neve |
hostname |
hostname |
|
Induláskor betöltött processzek listája |
wmic startup full list |
ls -l /etc/init.d crontab -l systemctl list-unit-files | grep enabled less /home/user/.bashrc |
Linux alatt lehetnek egyéb helyekről /módon betöltött processzek is, az itt felsoroltak az általános esetek. |
Egy konkrét cím (pl. 192.168.1.100) nyitott portjainak a figyelésével kapcsolatos infó lekérése |
nmap 192.168.1.100 |
nmap 192.168.1.100 |
|
Fentivel kapcsolatban mi fut konkrétan a nyitott porton |
nmap 192.168.1.1-254 -sV |
nmap 192.168.1.1-254 -sV |
|
Infó az összes portról adott host esetében |
nmap 192.168.1.100 -p0-65535 |
nmap 192.168.1.100 -p0-65535 |
(elég sok időt igényel a végig szkennelése a portoknak) |
Cím pingelése 4 alkalommal |
ping 192.168.1.200 |
ping -c4 192.168.1.200 |
Linux alatt, ha nem adjuk meg, hogy hányszor fusson a ping, akkor addig fut, amíg le nem állítjuk. Windows alatt 4 futás után automatikusan leáll a ping. |
Egy távoli cím 25-ös port lekérdezése, arra fókuszálva, hogy milyen fejsort dob vissza (pl. SMTP vagy TCP) |
nc.exe 192.168.1.100 25 |
nc 192.168.1.100 25 |
Windows alatt az nc alapból nincs telepítve, azt külön fel kell rakni. |
IP konfiguráció |
ipconfig |
ip addr dhcpcd |
|
Adott IP cím névfeloldása, kapcsolódó információk |
nslookup <IP cím> |
nslookup <IP cím> |
A használatáról /paraméterezésről ld. a dokumentációkat |
Hálózati csomagkövetés |
tracert |
traceroute |
A használatáról /paraméterezésről ld. a dokumentációkat |
Hálózati konfigurálás |
netsh |
ifconfig |
A használatáról /paraméterezésről ld. a dokumentációkat |
Persze, a végtelenségig lehetne folytatni a listát. Ez itt csak egy kis ízelítő.
Kötegelt futtatás / szkriptelés.
Mind Windows, mind pedig Linux alatt lehetséges a parancsok kötegbe foglalása, azaz szkript létrehozása. Ennek akkor van értelme, ha sokszor kell ugyanazokat a parancsokat futtatni egymás után.
Mindkét rendszer alatt a szkriptek szöveges fájlok, azaz sima egyszerű szöveg szerkesztővel kell azokat létrehozni. (Pl. Windows alatt notepad, Linux alatt nano)
Windows alatt .BAT vagy .CMD kiterjesztést kell adni a fájloknak. A BAT és CMD között a technikai eltérés csak akkor mutatkozik, ha egyéb DOS programokat futtatunk belőlük, és ez csak 32 bites környezetben adott. A BAT számára virtuális DOS-t biztosít a Windows NTVDM szolgáltatása, amiben a parancsértelmező a COMMAND.COM, stb. A CMD számára a parancsértelmező a CMD.EXE, ez alatt futnak a rendszer parancsai, elképzelhető, hogy adott DOS program futtatása CMD szkriptből nehézségekbe ütközik. De a rendszer parancsok tekintetében nincs eltérés a kettő között. 64 Bites Windowsok alatt nincs NTVDM, így DOS programokat sem lehet futtatni, de a rendszer parancsokat kötegelhetjük a megszokott módon.
Windows alatt még lehet .VBS szkripteket is készíteni. Ez már túlmutat a rendszer parancsokon, rendszer API-kat és objektumokat használ, a szintaktikája Visual Basic szerinti. A VBS képes párbeszéd ablakokat is megjeleníteni, változókkal operálni, stb. Ennek a használatáról összefogott dokumentációt nehéz találni, de konkrét kérdésekre rá lehet keresni az interneten.
Alább egy VBS szkript példa, ami egy mappában a fájlok nevében képes kicserélni egy szövegrészletet, illetve opcionálisan a kiterjesztésüket is kicseréli. Windows alatt ezt csak külön telepített fájlmenedzser programmal lehetne megoldani (pl. Total Commander), a Windowsnak magának erre nincs saját eszköze.
Option Explicit 'Változókat kötelező definiálni Dim StdIn: Set StdIn = WScript.StdIn Dim StdOut: Set StdOut = WScript Dim fso: Set fso = CreateObject("Scripting.FileSystemObject") Main set fso = nothing Sub Main dim objArgs: Set objArgs = WScript.Arguments if objArgs.Count > 2 then dim path: path = objArgs(0) 'Elérési útvonal dim olds: olds = objArgs(1) 'Kicserélendõ (régi) szövegrészlet dim news: news = objArgs(2) 'Új szövegrészlet dim ext1: ext1 = "" dim ext2: ext2 = "" if objArgs.Count > 3 then ext1 = objArgs(3) 'régi kiterjesztés if objArgs.Count > 4 then ext2 = objArgs(4) 'új kiterjesztés dim CurrentFolder: Set CurrentFolder = fso.GetFolder(path) StdOut.Echo CurrentFolder ProcessFolder CurrentFolder , olds, news, ext1, ext2 else StdOut.Echo "Használat: Frename.vbs [elérési út] [Cserélnivaló] [Új névrészlet] [régi kiterjesztés] [új kiterjesztés] " end if End Sub Sub ProcessFolder (ByVal folder, ByVal oldTag, ByVal newTag, ByVal extOld, ByVal extNew) Dim Files: Set Files = folder.Files Dim File For Each File In Files If inStr(1,File.Name,oldTag) > 0 Then if (extOld <> "" and extNew <> "") then File.Move Replace(Replace(File.Path,oldTag,newTag),extOld,extNew) else File.Name = Replace(File.Name,oldTag,newTag) end if End If Next End Sub
Ezt a kódot egy Frename.vbs nevű fájlba kell menteni. A használata:
Frename.vbs mappa régi_szöveg új_szöveg [régi_kiterjesztés új_kiterjesztés]
Az első három paramétert kötelező megadni, ha a fájlok az aktuális mappában vannak, akkor az első paraméter egy pont legyen.
Ugyanez a művelet Linux alatt jóval egyszerűbb. Ha telepítve van a rename csomag, akkor azzal is megoldható. (Vannak disztribúciók, amelyek eleve tartalmazzák, mint pl. a Linux Mint, de amelyek nem tartalmazzák, azokra is egyszerű telepíteni.)
De a szemlétesség kedvéért nézzük azt az esetet, hogy nincs ilyen eszközünk, és ugyanezt a műveletet Linux alatt is egy szkripttel kell megoldani. Ebben az esetben a szkriptünk valahogy így néz ki:
#!/bin/bash SEARCH_PATH="$1" SEARCH="$2" REPLACE="$3" OLDEXT="$4" NEWEXT="$5" if (($# < 2)) then echo Echo "Használat: bash Frename.sh [elérési út] [Cserélnivaló] [Új névrészlet] [régi kiterjesztés] [új kiterjesztés] " else cd "$SEARCH_PATH" for file in $(find . -maxdepth 1 -name "*${SEARCH}*" -type f ) do newfile="`echo "${file%.*}" | sed s/${SEARCH}/${REPLACE}/g`.${file##*.}" mv "$file" "$newfile" done if (($# > 3)) then if [[ ${OLDEXT:0:1} == "." ]]; then echo " "; else OLDEXT=".$OLDEXT"; fi if [[ ${NEWEXT:0:1} == "." ]]; then echo " "; else NEWEXT=".$NEWEXT"; fi for file in $(find . -name "*$OLDEXT"); do mv "$file" "${file%$OLDEXT}$NEWEXT" done fi fi
Ezt a kódot egy Frename.sh nevű fájlba kell menteni. A használata:
bash Frename.sh mappa régi_szöveg új_szöveg [régi_kiterjesztés új_kiterjesztés]
Az első három paramétert kötelező megadni, ha a fájlok az aktuális mappában vannak, akkor az első paraméter egy pont legyen.
Mint az látható Linux alatt a kód jóval rövidebb, és elegánsabb, tömörebben megoldható a feladat, mindez a Linux parancsainak a magas szintű kidolgozottságának a folyománya.
= A harmadik rész vége =
A következő részben alkalmazásokkal foglalkozunk….
(bár ez már akkora téma lesz, hogy szerintem több részre ki fog terjedni)
Hozzászólások
Parancssor
Beküldte kimarite -
Értékelés:
Az első találkozás,
a második ez. ;)
parancs 2>/dev/null nem a
Beküldte aperten -
Értékelés:
parancs 2>/dev/null nem a parancskimenetet tünteti el, hanem a hibaüzeneteket.
parancs 2>/dev/null nem a
Beküldte T.István -
Értékelés: