2.4 Lecke 1
Tanúsítvány: |
Linux Essentials |
---|---|
Verzió: |
1.6 |
Témakör: |
2 Hogyan Igazodjunk El Linux Rendszerekben? |
Fejezet: |
2.4 Fájlok Létrehozása, Mozgatása és Törlése |
Lecke: |
1/1 |
Bevezetés
Ez a lecke a fájl- és mappakezelésről szól a Linux parancssori eszközeinek segítségével.
A fájl egy névvel és attribútumokkal ellátott adathalmaz. Például ha átküldjük a fotóinkat a telefonunkról a számítógépünkre és elnevezzük őket, akkor lesz egy csomó képfájl a számítógépünkön. Ezeknek a fájloknak vannak attribútumai, például mikor lettek utoljára megnyitva vagy módosítva.
A mappa egy speciális fájltípus, amit fájlok rendszerezésére használunk. Jó, ha úgy gondolunk egy mappára, mint egy irattartóra, amiben papírokat rendszerezünk egy szekrényben. Az irattartókkal ellentétben a mappákat könnyen áthelyezhetjük egy másik mappába.
Linux rendszerek esetén a parancssor az egyik leghasznosabb eszköz a fájlok menedzselésére. A shell és a parancssori eszközök további funkcióival gyorsabban és egyszerűbben használhatjuk a parancssort, mint egy grafikus fájlkezelőt.
Ebben a szekcióban olyan parancsokkal fogjuk menedzselni a fájlokat és a mappákat, mint a(z) ls
, mv
, cp
, pwd
, find
, touch
, rm
, rmdir
, echo
, cat
, és az mkdir
.
Kis/nagybetű Érzékenység
A Microsoft Windowssal ellentétben a fájlok és mappák nevei Linux alatt kis- és nagybetű érzékenyek. Ez azt jelenti, hogy az /etc/
és az /ETC/
különböző mappákat jelöl. Próbáljuk ki a következő parancsokat:
$ cd / $ ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr $ cd ETC bash: cd: ETC: No such file or directory $ pwd / $ cd etc $ pwd /etc
A pwd
megmutatja, hogy éppen melyik mappában vagyunk. Láthatjuk, hogy az /ETC
mappára váltás nem sikerül, mert nem létezik ilyen mappa. Az /etc
mappa létezik, így azt sikerül megnyitnunk.
Mappák Létrehozása
Az mkdir
paranccsal hozhatunk létre mappákat.
Hozzunk létre egy új mappát a home mappánkon belül:
$ cd ~ $ pwd /home/user $ ls Desktop Documents Downloads $ mkdir linux_essentials-2.4 $ ls Desktop Documents Downloads linux_essentials-2.4 $ cd linux_essentials-2.4 $ pwd /home/emma/linux_essentials-2.4
A lecke hátralevő részében minden parancsot ebben a mappában vagy egy almappájában fogunk végrehajtani.
Hogy gyorsan visszatérjünk ebbe a mappába bárhonnan a fájlrendszerből, az alábbi parancsot használhatjuk:
$ cd ~/linux_essentials-2.4
A shell a ~
karakterrel jelöli a home mappánkat.
A lecke könyvtárában hozzunk létre még néhány mappát, amit a gyakorlatokhoz fogunk használni. Az mkdir
-nek megadhatjuk a mappaneveket egyszerre, szóközökkel elválasztva:
$ mkdir creating moving copying/files copying/directories deleting/directories deleting/files globs mkdir: cannot create directory ‘copying/files’: No such file or directory mkdir: cannot create directory ‘copying/directories’: No such file or directory mkdir: cannot create directory ‘deleting/directories’: No such file or directory mkdir: cannot create directory ‘deleting/files’: No such file or directory $ ls creating globs moving
Vegyük észre a hibaüzenetet, hogy csak a moving
, globs
, és creating
jött létre. A copying
és deleting
mappák még nem léteznek. Az mkdir
alapértelmezésben nem hoz létre egy mappát egy olyan mappán belül, ami még nem létezik. A -p
vagy --parents
kapcsoló utasítja az mkdir
-t, hogy hozza létre a szülő mappákat, ha még nem léteznek. Próbáljuk meg ugyanazt az mkdir
parancsot a -p
kapcsolóval:
$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs
Most nem kaptunk hibaüzeneket. Lássuk, milyen mappáink vannak:
$ find . ./creating ./moving ./globs ./copying ./copying/files ./copying/directories ./deleting ./deleting/directories ./deleting/files
A find
programot általában fájlok és mappák keresésére használjuk, de kapcsolók nélkül kilistázza az aktuális mappában található összes fájlt, mappát és almappát.
Tip
|
Amikor kilistázzuk egy mappa tartalmát az |
Fájlok létrehozása
A fájlokat általában azok a programok hozzák létre, amelyek azokkal az adatokkal dolgoznak, amelyek a fájlokban vannak tárolva. Egy üres fájlt a touch
paranccsal hozhatunk létre. Ha lefuttatjuk a touch
parancsot egy már létező fájlon, a fájl tartalma nem változik, de a módosítás időpontja frissül.
Futtassuk le a következő parancsot, hogy létrehozzunk néhány fájlt a mintaillesztés (globbing) leckéhez:
$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14 $ touch globs/star10 globs/star1100 globs/star2002 globs/star2013
Igazoljuk, hogy minden fájl létezik a globs
mappában:
$ cd globs $ ls question1 question14 question23 star1100 star2013 question13 question2012 star10 star2002
Sikerült észrevennünk, hogy a touch
hogyan hozta létre a fájlokat? Egy szövegfájl tartalmát a cat
paranccsal nézhetjük meg. Próbáljuk ki valamelyik általunk létrehozott fájlon:
$ cat question14
Mivel a touch
üres fájlokat hoz létre, így nem kapunk kimenetet. Használhatjuk az echo
parancsot egy >
-vel, hogy egyszerű szöveges fájlokat hozzunk létre. Próbáljuk ki:
$ echo hello > question15 $ cat question15 hello
Az echo
szöveget jelenít meg a parancssorban. A >
karakter utasítja a shellt, hogy a kimenetet egy meghatározott fájlba írja a terminál helyett. Ez az echo
kimenetét, esetünkben a hello
-t, a question15
fájlba írja. Ez nem csak az echo
esetén igaz, bármilyen parancs esetén használható.
Warning
|
Óvatosan használjuk a |
Fájlok Átnevezése
A fájlok áthelyezésére és átnevezésére az mv
parancs szolgál.
Lépjünk be a moving
mappába:
$ cd ~/linux_essentials-2.4/moving
Hozzunk létre néhány fájlt, amiken gyakorolhatunk. Az alábbi parancsok már ismerősek kell, hogy legyenek:
$ touch file1 file22 $ echo file3 > file3 $ echo file4 > file4 $ ls file1 file22 file3 file4
Tételezzük fel, hogy a file22
egy elírás és file2
kellene, hogy legyen. Javítsuk az mv
paranccsal. Amikor átnevezünk egy fájlt, az első argumentum az aktuális név, a második pedig az új név:
$ mv file22 file2 $ ls file1 file2 file3 file4
Legyünk óvatosak az mv
paranccsal. Ha egy már létező fájl nevét adjuk meg, felül fogja írni. Próbáljuk ki a file3
és file4
segítségével:
$ cat file3 file3 $ cat file4 file4 $ mv file4 file3 $ cat file3 file4 $ ls file1 file2 file3
Vegyük észre, hogy a file3
tartalma már a file4
-ben van. Használjuk a -i
kapcsolót, hogy az mv
jelezze, hogy egy már létező fájlt akarunk felülírni. Próbáljuk ki:
$ touch file4 file5 $ mv -i file4 file3 mv: overwrite ‘file3’? y
Fájlok Mozgatása
A fájlokat az egyik mappából a másikba az mv
paranccsal tudjuk áthelyezni.
Hozzunk létre néhány mappát, hogy átmozgassuk a fájlokat:
$ cd ~/linux_essentials-2.4/moving $ mkdir dir1 dir2 $ ls dir1 dir2 file1 file2 file3 file5
Mozgassuk a file1
-et a dir1
mappába:
$ mv file1 dir1 $ ls dir1 dir2 file2 file3 file5 $ ls dir1 file1
Vegyük észre, hogy az utolsó argumentuma az mv
-nek a célmappa! Amikor az utolsó argumentum az mv
-nek egy mappa, a fájlokat belehelyezi. Több fájlt is megadhatunk egyetlen mv
parancsban:
$ mv file2 file3 dir2 $ ls dir1 dir2 file5 $ ls dir2 file2 file3
Lehetséges az mv
segítségével áthelyezni és átnevezni mappákat is. Nevezzük át a dir1
mappát dir3
-ra:
$ ls dir1 dir2 file5 $ ls dir1 file1 $ mv dir1 dir3 $ ls dir2 dir3 file5 $ ls dir3 file1
Fájlok és Mappák Törlése
A rm
parancs fájlok és mappák törlésére használható, míg az rmdir
paranccsal csak mappák törölhetőek. Ürítsük ki a moving
mappát a file5
törlésével:
$ cd ~/linux_essentials-2.4/moving $ ls dir2 dir3 file5 $ rmdir file5 rmdir: failed to remove ‘file5’: Not a directory $ rm file5 $ ls dir2 dir3
Alapesetben az rmdir
csak üres mappákat tud törölni, ezért az rm
használatával törölhetjük a sima fájlt. Próbáljuk meg a deleting
mappát törölni:
$ cd ~/linux_essentials-2.4/ $ ls copying creating deleting globs moving $ rmdir deleting rmdir: failed to remove ‘deleting’: Directory not empty $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 files
Alapértelmezésben az rmdir
nem töröl olyan mappát, ami nem üres. Használjuk az rmdir
-t a deleting
mappa egyik almappájának törlésére:
$ ls -a deleting/files . .. $ rmdir deleting/files $ ls -l deleting directories
Nagyszámú fájlok vagy mély mappastruktúra sok almappával unalmasnak tűnhet, de valójában egyszerű. Alapértelmezetten az rm
csak sima fájlokkal működik. A -r
kapcsolóval írhatjuk felül a tulajdonságát. Legyünk óvatosak, az rm -r
kiváló foot gun (lábonlövés) lehet! Ha a -r
kapcsolót használjuk, az rm
nem csak mappákat töröl, hanem mindent azon a mappán belül, beleértve az almappákat és azok tartalmát. Lássuk, hogy működik az rm -r
:
$ ls copying creating deleting globs moving $ rm deleting rm: cannot remove ‘deleting’: Is a directory $ ls -l deleting total 0 drwxrwxr-x. 2 emma emma 6 Mar 26 14:58 directories $ rm -r deleting $ ls copying creating globs moving
Látjuk, hogy a deleting
már nem létezik, hiába nem volt üres? Akárcsak az mv
-nek, az rm
-nek is van egy -i
kapcsolója, hogy figyelmeztessen, mielőtt bármit tenne. Használjuk az rm -ri
parancsot, hogy eltávolítsuk moving
almappáit, amikre már nincs szükségünk:
$ find . ./creating ./moving ./moving/dir2 ./moving/dir2/file2 ./moving/dir2/file3 ./moving/dir3 ./moving/dir3/file1 ./globs ./globs/question1 ./globs/question2012 ./globs/question23 ./globs/question13 ./globs/question14 ./globs/star10 ./globs/star1100 ./globs/star2002 ./globs/star2013 ./globs/question15 ./copying ./copying/files ./copying/directories $ rm -ri moving rm: descend into directory ‘moving’? y rm: descend into directory ‘moving/dir2’? y rm: remove regular empty file ‘moving/dir2/file2’? y rm: remove regular empty file ‘moving/dir2/file3’? y rm: remove directory ‘moving/dir2’? y rm: descend into directory ‘moving/dir3’? y rm: remove regular empty file ‘moving/dir3/file1’? y rm: remove directory ‘moving/dir3’? y rm: remove directory ‘moving’? y
Fájlok és Mappák Másolása
A cp
paranccsal tudunk fájlokat és mappákat másolni. Másoljunk néhány fájlt a copying
mappába:
$ cd ~/linux_essentials-2.4/copying $ ls directories files $ cp /etc/nsswitch.conf files/nsswitch.conf $ cp /etc/issue /etc/hostname files
Ha az utolsó argumentum egy mappa, a cp
létrehoz egy másolatot az előző argumentumokkal a mappában. Ahogy az mv
esetén, itt is megadható több fájl egyszerre, amíg a cél egy mappa.
Amikor a cp
mindkét operandusa fájl és mindkét fájl létezik, a cp
felülírja a második fájlt az első fájl másolatával. Gyakoroljuk ezt az issue
fájl hostname
fájllal való felülírásával:
$ cd ~/linux_essentials-2.4/copying/files $ ls hostname issue nsswitch.conf $ cat hostname mycomputer $ cat issue Debian GNU/Linux 9 \n \l $ cp hostname issue $ cat issue mycomputer
Most próbáljuk meg létrehozni a files
mappa másolatát a directories
mappában:
$ cd ~/linux_essentials-2.4/copying $ cp files directories cp: omitting directory ‘files’
Láthatjuk, hogy a cp
alapértelmezésben csak egyedi fájlokkal működik. Egy mappa másolásához a -r
kapcsolót használhatjuk. Tartsuk észben, hogy a -r
kapcsoló esetén a cp
parancs a másolandó mappa tartalmát is másolja:
$ cp -r files directories $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname
Látjuk, hogy amikor egy már létező mappa van megadva, a cp
létrehoz egy másolatot a forrásmappáról azon belül? Ha a cél nem létezik, létrehozza azt és feltölti a forrásmappa tartalmával:
$ cp -r files files2 $ find . ./files ./files/nsswitch.conf ./files/fstab ./files/hostname ./directories ./directories/files ./directories/files/nsswitch.conf ./directories/files/fstab ./directories/files/hostname ./files2 ./files2/nsswitch.conf ./files2/fstab ./files2/hostname
Globbing
Amit általában globbingnak nevezünk, egy szimpla mintaillesztéses nyelv. A parancssori shellek a Linux rendszereken ezt a nyelvet használják, hogy fájlok olyan csoportjára hivatkozzanak, amelyekben a fájlok nevei illeszkednek egy adott mintához. A POSIX.1-2017 az alábbi mintaillesztéses karaktereket határozza meg:
*
-
Találatot ad bármekkora számú karakterre, beleértve a nemkaraktereket is
?
-
Találatot ad bármelyik karakterre
[]
-
Találatot ad karakterek csoportjára
Ez azt jelenti, hogy megadhatjuk a shellnek, hogy találjon meg egy mintát ahelyett, hogy egy szó szerinti szöveget találna meg. Általában a Linux felhasználók több fájlt határoznak meg a globbal, ahelyett, hogy minden fájlnevet begépelnének. Futtassuk le az alábbi parancsokat:
$ cd ~/linux_essentials-2.4/globs $ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls star1* star10 star1100 $ ls star* star10 star1100 star2002 star2013 $ ls star2* star2002 star2013 $ ls star2*2 star2002 $ ls star2013* star2013
A shell tetszőlegesen kibővíti a *
-ot, tehát a shell úgy értelmezi a star*
-ot, hogy bármilyen találatot megjelenít, ami relevánsan kötődik a star
-hoz kötődő kifejezéshez. Amikor futtatjuk az ls star*
parancsot, a shell nem futtatja le az ls
programot a star*
argumentummal, hanem olyan fájlokat keres az aktuális mappában, amelyek megegyeznek a star*
mintával (beleértve egyszerűen csak a star
kifejezést is), és minden, a mintának megfelelő fájlt az ls
argumentumává alakítja:
$ ls star*
ami az ls
-t illeti
$ ls star10 star1100 star2002 star2013
A *
karakter nem jelent semmit az ls
számára. Ennek bebizonyítására futtassuk az alábbi parancsot:
$ ls star\* ls: cannot access star*: No such file or directory
Ha egy karaktert megelőz a \
, arra utasítjuk a shellt, hogy ne értelmezze. Ebben az esetben azt akarjuk, hogy az ls
-nek legyen egy star*
argumentuma, ahelyett, amire a glob star*
kibővítené.
A ?
bármely karakterre kiterjed. Próbáljuk ki a következő parancsokat, így láthatjuk működés közben is:
$ ls question1 question14 question2012 star10 star2002 question13 question15 question23 star1100 star2013 $ ls question? question1 $ ls question1? question13 question14 question15 $ ls question?3 question13 question23 $ ls question13? ls: cannot access question13?: No such file or directory
A []
zárójelek tartományok vagy karakterosztályok illesztésére szolgálnak. A []
zárójelek ugyanúgy működnek, mint a POSIX reguláris kifejezések esetén, azt leszámítva, hogy a globok !
helyett ^
-t használnak.
Hozzunk létre néhány fájlt a kísérletezéshez:
$ mkdir brackets $ cd brackets $ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7
A []
zárójeleken belüli tartományokat egy -
segítségével fejezzük ki:
$ ls file1 file2 file3 file4 file5 file6 file7 filea fileb filec $ ls file[1-2] file1 file2 $ ls file[1-3] file1 file2 file3
Több tartomány adható meg:
$ ls file[1-25-7] file1 file2 file5 file6 file7 $ ls file[1-35-6a-c] file1 file2 file3 file5 file6 filea fileb filec
Szögletes zárójelek is használhatók egy adott karakterkészlethez.
$ ls file[1a5] file1 file5 filea
Használhatjuk a ^
karakter is első karakterként, hogy minden illeszkedjen bizonyos karakterek kivételével.
$ ls file[^a] file1 file2 file3 file4 file5 file6 file7 fileb filec
Az utolsó dolog, amivel ebben a leckében foglalkozunk, a karakterosztályok. A karakterosztály illesztéséhez a [:classname:]
-t használjuk. Például a számokkal egyező számjegyosztály használata esetén így kell eljárnunk:
$ ls file[[:digit:]] file1 file2 file3 file4 file5 file6 file7 $ touch file1a file11 $ ls file[[:digit:]a] file1 file2 file3 file4 file5 file6 file7 filea $ ls file[[:digit:]]a file1a
A glob file[[:digit:]a]
, illeszkedik a file
-ra, amelyet számjegy vagy a
követ.
A támogatott karakterosztályok az aktuális területi beállításoktól függenek. A POSIX az összes nyelvhez a következő karakterosztályokat igényli:
[:alnum:]
-
Számok és betűk.
[:alpha:]
-
Nagy- vagy kisbetűk.
[:blank:]
-
Szóközök és tabulátorok.
[:cntrl:]
-
Vezérlőkarakterek, pl. backspace, bell, NAK, escape.
[:digit:]
-
Számok (
0123456789
). [:graph:]
-
Grafikus karakterek (minden karakter, kivéve a
ctrl
és a szóköz) [:lower:]
-
Kisbetűk (
a-z
). [:print:]
-
Nyomtatható karakterek (
alnum
,punct
és a szóköz). [:punct:]
-
Központozó karakterek, pl.
!
,&
,"
. [:space:]
-
Üres helyek, pl. tabulátorok, szóközök, új sorok.
[:upper:]
-
Nagybetűk (
A-Z
). [:xdigit:]
-
Hexadecimális számok (általában
0123456789abcdefABCDEF
).
Gyakorló Feladatok
-
Válasszuk ki azokat a könyvtárakat, amelyeket az
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
parancs hozott létre$ pwd /tmp $ find . ./outfiles ./outfiles/text
/tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
/tmp/infiles
/tmp/infiles/text
/tmp/infiles/text/today
-
Mit csinál a
-v
azmkdir
, azrm
, és acp
esetén? -
Mi történik, ha ugyanabban a parancssorban véletlenül megpróbálunk három fájlt másolni egy már létező fájlba egy mappa helyett?
-
Mi történik, ha az
mv
paranccsal egy mappát saját magába próbálunk áthelyezni? -
Hogyan töröljük az összes
old
-dal kezdődő fájlt az aktuális mappából? -
Az alábbi fájlok közül melyikkel egyezik a
log_[a-z]_201?_*_01.txt
?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
-
Hozzunk létre néhány globot, amelyek egyeznek az alábbi fájlnevekkel:
doc100 doc200 doc301 doc401
Gondolkodtató Feladatok
-
Nézzük meg a
cp
man oldalát, hogy megfejtsük, hogyan másoljunk le egy fájlt úgy, hogy a másolat jogosultságai és a módosítás időpontja megegyezzen az eredetivel. -
Mit csinál az
rmdir -p
parancs? Kísérletezzünk vele és nézzük meg, miben különbözik azrm -r
-től! -
NE FUTASSUK LE EZT A PARANCSOT: Mit csinálhat az
rm -ri /*
? (TÉNYLEG NE PRÓBÁLJUK KI!) -
Van-e más az
-i
kapcsolón kívül, amivel megelőzhetjük, hogy azmv
felülírja a célfájlokat? -
Mit csinál a
cp -u
parancs?
Összefoglalás
A Linux parancssori felülete különböző eszközöket biztosít a fájlmenedzseléshez. Néhány gyakran használt a cp
, az mv
, az mkdir
, az rm
, és az rmdir
. Ezek az eszközök a globokkal kombinálva, lehetővé teszik, hogy a felhasználók sok munkát elvégezhessenek igen gyorsan.
Sok parancsnak van -i
kapcsolója, amik figyelmeztetnek, mielőtt bármit csinálnánk. A figyelmeztetésekkel sok bosszúságtól megkímélhetjük magunkat, ha esetleg elírtunk valamit.
Sok parancsnak van`-r` kapcsolója. Az -r
kapcsoló általában rekurziót jelent. A matematikában és a számítástechnikában, a rekurzív funkció egy olyan funkció, ami önmagát definiálja. A parancssori eszközök esetén általában azt jelenti, hogy a parancs a mappára és a tartalmára is vonatkozik.
A leckében az alábbi parancsokat használtuk:
cat
-
Kiolvassa és kiírja egy fájl tartalmát.
cp
-
Fájlok vagy mappák másolása.
echo
-
Kiír egy stringet.
find
-
Végigjárja a fájlrendszer fáját és olyan fájlokat keres, amelyek megfelelnek egy adott feltételhalmaznak.
ls
-
Kilistázza egy mappa tartalmát és a fájlok tulajdonságait.
mkdir
-
Új mappákat hoz létre.
mv
-
Fájlok vagy mappák mozgatása vagy átnevezése.
pwd
-
Kiírja az aktuális munkakönyvtárat.
rm
-
Fájlok vagy mappák törlése.
rmdir
-
Mappák törlése.
touch
-
Üres fájl létrehozása vagy egy már létező fájl módosítása időpontjának frissítése.
Válaszok a Gyakorló Feladatokra
-
Given the following, select the directories that would be created by the command
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
The marked directories would be created. The directories
/tmp
,/tmp/outfiles
, and/tmp/outfiles/text
already exist, somkdir
will ignore them./tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
X
/tmp/infiles
X
/tmp/infiles/text
X
/tmp/infiles/text/today
X
-
Mit csinál a
-v
azmkdir
, azrm
, és acp
esetén?A
-v
részletes kimenetet ad. A programok részletesen kiírják, hogy mit csinálnak éppen:$ rm -v a b removed 'a' removed 'b' $ mv -v a b 'a' -> 'b' $ cp -v b c 'b' -> 'c'
-
What happens if you accidentally attempt to copy three files on the same command line to a file that already exists instead of a directory?
cp
will refuse to do anything and output an error message:$ touch a b c d $ cp a b c d cp: target 'd' is not a directory
-
Mi történik, ha az
mv
paranccsal egy mappát saját magába próbálunk áthelyezni?Hibaüzenetet kapunk, miszerin az
mv
erre nem alkalmas.$ mv a a mv: cannot move 'a' to a subdirectory of itself, 'a/a'
-
Hogyan töröljük az összes
old
-dal kezdődő fájlt az aktuális mappából?Az
old*
globot kell használnunk azrm
-mel:$ rm old*
-
Az alábbi fájlok közül melyikkel egyezik a
log_[a-z]_201?_*_01.txt
?log_3_2017_Jan_01.txt
log_+_2017_Feb_01.txt
log_b_2007_Mar_01.txt
log_f_201A_Wednesday_01.txt
X
$ ls log_[a-z]_201?_*_01.txt log_f_201A_Wednesday_01.txt
log_[a-z]
matcheslog_
followed by any lower case letter, so bothlog_f_201A_Wednesday_01.txt
andlog_b_2007_Mar_01.txt
match._201?
matches any single character, so onlylog_f_201A_Wednesday_01.txt
matches. Finally*_01.txt
matches anything that ends with_01.txt
, so our remaining option matches. -
Hozzunk létre néhány globot, amelyek egyeznek az alábbi fájlnevekkel:
doc100 doc200 doc301 doc401
Több megoldás is létezik, lássunk néhányat:
doc* doc[1-4]* doc?0? doc[1-4]0?
Válaszok a Gondolkodtató Feladatokra
-
Nézzük meg a
cp
man oldalát, hogy megfejtsük, hogyan másoljunk le egy fájlt úgy, hogy a másolat jogosultságai és a módosítás időpontja megegyezzen az eredetivel.A
-p
kapcsolót kell használnuk. A man oldalról:$ man cp -p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,time‐ stamps), if possible additional attributes: context, links, xattr, all
-
Mit csinál az
rmdir -p
parancs? Kísérletezzünk vele és nézzük meg, miben különbözik azrm -r
-től!Az
rmdir
viselkedése azmkdir -p
-hez lesz hasonló. Ha üres mappák fáján használjuk, mindet eltávolítja.$ find . ./a ./a/b ./a/b/c $ rmdir -p a/b/c $ ls
-
NE FUTASSUK LE EZT A PARANCSOT: Mit csinálhat az
rm -ri /*
? (TÉNYLEG NE PRÓBÁLJUK KI!)Minden fájlt és mappát eltávolít, ami a felhasználó fiókunkkal írható, minden hálózati fájlrendszeren is.
-
Van-e más az
-i
kapcsolón kívül, amivel megelőzhetjük, hogy azmv
felülírja a célfájlokat?Igen, az
-n
vagy--no-clobber
kapcsoló biztosítja, hogy azmv
ne írhasson felül fájlokat.$ cat a a $ cat b b $ mv -n a b $ cat b b
-
Mit csinál a
cp -u
parancs?Az
-u
kapcsoló azt eredményezi, hogy acp
csak akkor másolhat fájlokat, ha a cél hiányzik vagy régebbi, mint a forrásfájl.$ ls -l total 24K drwxr-xr-x 123 emma student 12K Feb 2 05:34 .. drwxr-xr-x 2 emma student 4.0K Feb 2 06:56 . -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b $ cat a a $ cat b b $ cp -u a b $ cat b b $ cp -u a c $ ls -l total 12 -rw-r--r-- 1 emma student 2 Feb 2 06:56 a -rw-r--r-- 1 emma student 2 Feb 2 07:00 b -rw-r--r-- 1 emma student 2 Feb 2 07:00 c