Ha el akarja sajátítani a Bash shellt Linuxon, macOS-en vagy más UNIX-szerű rendszeren, a speciális karakterek (például ~, *, | és >) kritikusak. Segítünk feloldani ezeket a rejtélyes Linux parancssorokat, és a hieroglifák hősévé válni.
Tartalomjegyzék
Mik azok a különleges karakterek?
Van egy sor karakter a Bash shell kétféle módon kezeli. Amikor beírja őket a shellbe, utasításként vagy parancsként működnek, és egy bizonyos funkció végrehajtására utasítják a shellt. Tekintse őket egykarakteres parancsoknak.
Néha egyszerűen csak ki akar nyomtatni egy karaktert, és nincs szüksége rá, hogy varázsszimbólumként működjön. Van mód arra, hogy egy karaktert önmagának, mint speciális funkciójának ábrázolására használjon.
Megmutatjuk, hogy mely karakterek „speciális” vagy „meta” karakterek, valamint azt is, hogyan használhatjuk őket funkcionálisan és szó szerint.
~ Home Directory
A tilde (~) a kezdőkönyvtár rövidítése. Ez azt jelenti, hogy nem kell parancsokba beírnia a kezdőkönyvtár teljes elérési útját. Bárhol is tartózkodik a fájlrendszerben, ezzel a paranccsal a saját könyvtárába léphet:
cd ~
Ezt a parancsot relatív elérési utakkal is használhatja. Például, ha olyan helyen tartózkodik a fájlrendszerben, amely nem a saját mappája alatt található, és át szeretne váltani a munkakönyvtárában lévő archív könyvtárra, használja a tilde-t ehhez:
cd ~/work/archive
. Aktuális címtár
Egy pont (.) jelöli az aktuális könyvtárat. Ha az -a (all) kapcsolót az ls-sel együtt használod, akkor ez a címtárlistában látható.
ls -a
A parancsokban a pontot is használhatja az aktuális könyvtár elérési útjának jelölésére. Például, ha egy szkriptet szeretne futtatni az aktuális könyvtárból, akkor a következőképpen nevezze:
./script.sh
Ez arra utasítja a Bash-t, hogy az aktuális könyvtárban keresse a script.sh fájlt. Így nem fog keresni az elérési útban lévő könyvtárakban a megfelelő végrehajtható fájlt vagy szkriptet.
.. Szülőkönyvtár
A dupla pont vagy „dupla pont” (..) az aktuális könyvtár szülőkönyvtárát jelöli. Ezzel egy szinttel feljebb léphet a címtárfában.
cd ..
Ezt a parancsot relatív elérési utakkal is használhatja – például ha egy szinttel feljebb szeretne lépni a címtárfában, majd egy másik könyvtárba szeretne belépni ezen a szinten.
Ezt a technikát arra is használhatja, hogy gyorsan átlépjen egy olyan könyvtárba, amely ugyanazon a szinten van a címtárfában, mint a jelenlegi. Ugrás egy szinttel feljebb, majd vissza egyet egy másik könyvtárba.
cd ../gc_help
/ Útvonal-könyvtár-elválasztó
Használhat egy perjelet (/) – amelyet gyakran csak perjelnek hívnak – a könyvtárak elválasztására egy elérési útnévben.
ls ~/work/archive
Egy perjel a lehető legrövidebb könyvtár elérési utat jelöli. Mivel a Linux könyvtárfában minden a gyökérkönyvtárban kezdődik, ezzel a paranccsal gyorsan a gyökérkönyvtárba léphet:
cd /
# Megjegyzés vagy vágja le a karakterláncokat
Leggyakrabban a hash- vagy számjelet (#) használod, hogy jelezd a shell-nek, hogy ami utána következik, az egy megjegyzés, és nem szabad arra reagálnia. Használhatja shell szkriptekben és – kevésbé hasznosan – a parancssorban.
# This will be ignored by the Bash shell
Valójában azonban nem hagyja figyelmen kívül, mert hozzáadódik a parancsok előzményeihez.
A hash segítségével levághat egy karakterlánc-változót, és eltávolíthat néhány szöveget az elejétől. Ez a parancs egy this_string nevű karakterlánc-változót hoz létre.
Ebben a példában a „Dave Geek!” szöveget rendeljük hozzá. a változóhoz.
this_string="Dave Geek!"
Ez a parancs az echo segítségével kinyomtatja a „How-To” szavakat a terminálablakba. A karakterlánc-változóban tárolt értéket az a-n keresztül kéri le paraméterbővítés. Mivel hozzáfűzzük a hash-t és a „Dave” szöveget, levágja a karakterláncnak azt a részét, mielőtt visszhangra kerülne.
echo How-To ${this_string#Dave}
Ez nem változtatja meg a karakterlánc változóban tárolt értéket; csak azt befolyásolja, amit visszhangra küldenek. Az echo segítségével még egyszer kinyomtathatjuk a karakterlánc változó értékét, és ellenőrizzük ezt:
echo $this_string
? Egykarakteres helyettesítő karakter
A Bash shell három helyettesítő karaktert támogat, amelyek közül az egyik a kérdőjel (?). Helyettesítő karakterekkel helyettesítheti a karaktereket a fájlnév-sablonokban. A helyettesítő karaktert tartalmazó fájlnév olyan sablont képez, amely több fájlnévnek felel meg, nem csak egynek.
A kérdőjel helyettesítő karakter pontosan egy karaktert jelöl. Vegye figyelembe a következő fájlnév-sablont:
ls badge?.txt
Ez azt jelenti, hogy „felsoroljon minden olyan fájlt, amelynek neve „jelvény”-vel kezdődik, és amelyet egyetlen karakter követ a fájlnév-kiterjesztés előtt.
Megfelel a következő fájloknak. Ne feledje, hogy egyes esetekben a fájlnév „jelvény” része után számok, mások pedig betűk találhatók. A kérdőjel helyettesítő karaktere megfelel a betűknek és a számoknak is.
Ez a fájlnévsablon azonban nem egyezik a „jelvény.txt” fájllal, mivel a fájlnévben nincs egyetlen karakter a „jelvény” és a fájlkiterjesztés között. A kérdőjel helyettesítő karakterének meg kell egyeznie a fájlnév megfelelő karakterével.
A kérdőjel segítségével megkeresheti az összes olyan fájlt, amelynek fájlnevében meghatározott számú karakter található. Ez felsorolja az összes olyan szöveges fájlt, amely pontosan öt karaktert tartalmaz a fájlnévben:
ls ?????.txt
* Karaktersorozat helyettesítő karakter
Használhatja a csillagot
ls badge*
helyettesítő karakter bármilyen karaktersorozatot jelent, beleértve a karaktereket sem. Vegye figyelembe a következő fájlnév-sablont:
An
Megegyezik a „jelvény.txt” fájllal, mert a helyettesítő karakter bármilyen karaktersorozatot jelöl, vagy karaktereket sem.
ls source.*
[] An
Karakterkészlet helyettesítő karakter
A fent leírtak szerint a kérdőjel bármely karakter, a csillag pedig bármilyen karaktersorozat jelzésére használható (beleértve a karaktereket sem). [] A szögletes zárójelekkel helyettesítő karaktert (
) és a bennük lévő karaktereket. A fájlnév megfelelő karakterének ilyenkor meg kell egyeznie a helyettesítő karakterkészletben található karakterek legalább egyikével.
ls badge_0[246].txt
An
ls badge_[01][789].txt
An
ls badge_[23][1-5].txt
An
; Shell parancselválasztó
ls > count.txt; wc -l count.txt; rm count.txt
An
count.txt; wc -l count.txt; rm count.txt” parancs egy terminál ablakban’ width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onrror=”this.onrror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>
Vegye figyelembe, hogy a második parancs akkor is fut, ha az első meghiúsul, a harmadik akkor is, ha a második meghiúsul stb.
cd ./doesntexist && cp ~/Documents/reports/* .
A
& Háttérfolyamat
Miután beírt egy parancsot egy terminálablakba, és az befejeződött, visszatér a parancssorhoz. Általában ez csak egy-két pillanatot vesz igénybe. Ha azonban elindít egy másik alkalmazást, például a gedit-et, nem használhatja a terminálablakot, amíg be nem zárja az alkalmazást.
gedit command_address.page &
A
A Bash megmutatja az elindított folyamat azonosítóját, majd visszatér a parancssorba. Ezután folytathatja a terminálablak használatát.
sortWhen a command has input redirected into it, it might behave differently than when it reads from a named file.
If we use wc to count the words, lines, and characters in a file, it prints the values, and then the filename. If we redirect the contents of the file to wc, it prints the same numeric values but doesn’t know the name of the file from which the data came. It cannot print a filename.
Here are some examples of how you can use wc:
wc words.txtwc> Output Redirection
You can use the right-angle bracket ( > ) to redirect the output from a command (typically, into a file); here’s an example:
ls > files.txtcat files.txtAn
files.txt" parancsot egy terminálablakban." width="646" height="382" >
wc doesntexist.txt 2> errors.txtcat errors.txtA
errors.txt" parancsot egy terminálablakban." width="646" height="122" >
| Cső
Egy „cső” láncolja össze a parancsokat. Átveszi az egyik parancs kimenetét, és bemenetként továbbítja a következőhöz. A vezetékes parancsok száma (a lánc hossza) tetszőleges.
Itt a cat segítségével a words.txt fájl tartalmát betápláljuk a grepbe, amely kibontja a kis vagy nagy „C” betűket tartalmazó sorokat. A grep ezután átadja ezeket a sorokat a rendezéshez. A sort a -r (fordított) kapcsolót használja, így a rendezett eredmények fordított sorrendben jelennek meg.
cat words.txt | grep [cC] | sort -rA
! Pipeline logikai NEM és History Operator
A felkiáltójel (!) egy logikai operátor, ami azt jelenti, hogy NEM.
[ ! -d ./backup ] && mkdir ./backupEbben a parancssorban két parancs található:
Az első parancs a szögletes zárójelben lévő szöveg;A második parancs a kettős && jelet követő szöveg.
Az első parancs a ! mint logikai operátor. A szögletes zárójelek azt jelzik, hogy tesztet kell végezni. A -d (könyvtár) opció teszteli a backup nevű könyvtár meglétét. A második parancs létrehozza a könyvtárat.
Mivel dupla „és” jel választja el a két parancsot, a Bash csak akkor hajtja végre a másodikat, ha az első sikeres. Ez azonban az ellenkezője annak, amire szükségünk van. Ha a „backup” könyvtár tesztje sikeres, akkor nem kell létrehoznunk. És ha a „backup” könyvtár tesztje sikertelen, a második parancs nem kerül végrehajtásra, és a hiányzó könyvtár nem jön létre.
Itt van a logikai operátor! logikai NEM-ként működik. Tehát, ha a teszt sikeres (vagyis a könyvtár létezik), a ! ezt „NEM sikerre” fordítja, ami kudarc. Tehát a második parancs nincs aktiválva.
Ha a könyvtárteszt sikertelen (azaz a könyvtár nem létezik), a ! megváltoztatja a „NEM kudarc” választ, ami a siker. Tehát a hiányzó könyvtár létrehozására vonatkozó parancs végrehajtásra kerül.
Az a kicsi! sok ütést rejt magában, amikor szüksége van rá!
ls -l -d backupA
!24A
!!A következő újra futtatja az előző parancsot:
$ Változó kifejezések A Bash shellben változókat hoz létre az értékek megtartásához. Néhány, mint Környezeti változók,
mindig léteznek, és bármikor elérheti őket, amikor megnyit egy terminálablakot. Ezek olyan értékeket tartalmaznak, mint a felhasználónév, a kezdőkönyvtár és az elérési út.
echo $USERecho $HOMEecho $PATHAn
ThisDistro=UbuntuMyNumber=2001echo $ThisDistroecho $MyNumberAn
Adjon kapcsos zárójelet ( {} ) a dollárjel köré, és hajtsa végre a paraméterbővítést, hogy megkapja a változó értékét, és lehetővé tegye az érték további átalakításait.
MyString=123456qwertyEz létrehoz egy változót, amely egy karakterláncot tartalmaz, az alábbiak szerint:
echo ${MyString}Használja a következő parancsot a karakterlánc visszaadásához a terminál ablakban:
echo ${myString:6}A teljes karakterlánc 6. pozíciójával kezdődő részkarakterlánc visszaadásához használja a következő parancsot (nulla-eltolás van, tehát az első pozíció nulla):
echo ${myString:0:6}Ha olyan részkarakterláncot szeretne visszhangozni, amely a nulla pozícióban kezdődik és a következő hat karaktert tartalmazza, használja a következő parancsot:
echo ${myString:4:4}A
Különleges karakterek idézése
Ha egy speciális karaktert szó szerinti (nem speciális) karakterként szeretne használni, meg kell mondania a Bash shell-nek. Ezt hívják idézésnek, és ennek három módja van.
Ha a szöveget idézőjelbe („…”) teszed, ez megakadályozza, hogy Bash a legtöbb speciális karakterre hatással legyen, és csak kinyomtatják őket. Az egyik figyelemre méltó kivétel azonban a dollárjel ($). Továbbra is a változókifejezések karaktereként funkcionál, így a változók értékeit belefoglalhatja a kimenetébe.
echo "Today is $(date)"Például ez a parancs kiírja a dátumot és az időt:
echo 'Today is $(date)'Ha a szöveget szimpla idézőjelekbe („…”) teszi az alábbiak szerint, az leállítja az összes speciális karakter funkcióját:
echo "Today is $(date)"A fordított perjel ( ) használatával megakadályozhatja, hogy a következő karakter speciális karakterként működjön. Ezt hívják „szökésnek” a karakter elől; lásd az alábbi példát:
Gondoljon csak a speciális karakterekre, mint nagyon rövid parancsokra. Ha megjegyzi a használatukat, az óriási előnyt jelent a Bash shell – és mások szkriptjei – megértésében.