2.4 Lekcja 1
Certyfikat: |
Linux Essentials |
---|---|
Wersja: |
1.6 |
Temat: |
2 Poruszanie się po systemie Linux |
Cel nauki: |
2.4 Tworzenie, przenoszenie i usuwanie plików |
Lekcja: |
1 z 1 |
Wstęp
Ta lekcja obejmuje zarządzanie plikami i katalogami w systemie Linux za pomocą narzędzi wiersza poleceń.
Plik to zbiór danych o nazwie i zestawie atrybutów. Na przykład, jeśli prześlesz zdjęcia z telefonu do komputera i nadasz im opisowe nazwy, będziesz mieć na komputerze wiele plików graficznych. Pliki te mają atrybuty, takie jak data ostatniego dostępu do pliku lub data ostatniej modyfikacji.
Katalog to specjalny typ pliku służący do organizowania innych plików. Pomyśl o szafce na akta, gdzie znajdują się katalogi (foldery), w których przechowywane są dokumenty jako pliki. Ale w przeciwieństwie do folderów z plikami kartonowymi, wewnątrz innego katalogu możesz przechowywać dodatkowe katalogi.
Wiersz poleceń jest najskuteczniejszym sposobem zarządzania plikami w systemie Linux. Narzędzia powłoki i wiersza poleceń mają funkcje, które sprawiają, że praca z wierszem poleceń jest szybsza i łatwiejsza niż w przypadku pracy z graficznym menedżerem plików.
W tej sekcji wykorzystasz polecenia ls
, mv
, cp
, pwd
, find
, touch
, rm
, rmdir
, echo
, cat
oraz mkdir
do zarządzania i organizowania plików i katalogów.
Rozróżnianie dużych i małych liter
W przeciwieństwie do systemu Microsoft Windows, w systemach Linux w nazwach plików i katalogów rozróżniana jest wielkość liter. Na przykład nazwy /etc/
oraz /ETC/
są różnymi katalogami. Sprawdź następujące polecenia:
$ 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
Polecenie pwd
wyświetla pełną ścieżkę do katalogu, w którym się aktualnie znajdujesz. Jak widać, przełączenie do katalogu /ETC
nie zadziałało, ponieważ takiego katalogu nie ma. Z kolei przejście do istniejącego katalogu /etc
powiodło się bez problemów.
Tworzenie katalogów
Do tworzenia katalogów służy polecenie mkdir
.
Utwórzmy poniżej nowy katalog w naszym katalogu domowym:
$ 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
W tej lekcji wszystkie polecenia będą wykonywane w poniższym katalogu lub w jednym z jego podkatalogów.
Aby w łatwy sposób wrócić z dowolnego miejsca w systemie plików Linuxa do katalogu z tej lekcji, możesz użyć następującego polecenia:
$ cd ~/linux_essentials-2.4
Powłoka interpretuje znak tyldy ~
jako Twój katalog domowy w systemie Linux.
W katalogu z tej lekcji utwórz dodatkowe katalogi, których użyjemy do ćwiczeń. Możesz dodać wszystkie nazwy katalogów, oddzielone spacjami po poleceniu mkdir
:
$ 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
Zwróć uwagę na komunikat o błędzie, że zostały utworzone tylko elementy creating
, globs
oraz moving
. Katalogi copying
oraz deleting
jeszcze nie istnieją. Domyślnie polecenie mkdir
nie utworzy katalogu w katalogu, który jeszcze nie istnieje. Opcja -p
or --parents
nakazuje poleceniu mkdir
utworzenie katalogów nadrzędnych, nawet jeśli one nie istnieją. Teraz wypróbuj to samo polecenie mkdir
, ale z opcją -p
:
$ mkdir -p creating moving copying/files copying/directories deleting/directories deleting/files globs
Teraz nie otrzymasz już żadnych komunikatów o błędach. Zobaczmy, jakie katalogi istnieją teraz:
$ find . ./creating ./moving ./globs ./copying ./copying/files ./copying/directories ./deleting ./deleting/directories ./deleting/files
Polecenie find
jest na ogół wykorzystywane do wyszukiwania plików i katalogów. Jednakże wyświetli ono listę wszystkich plików, katalogów i podkatalogów w bieżącym katalogu, jeżeli nie dodamy do tego polecenia żadnych opcji.
Tip
|
Podczas wyświetlania zawartości katalogu z opcją |
Tworzenie plików
Zwykle pliki są tworzone przez programy, które pracują z danymi przechowywanymi w plikach. Jednakże sam możesz utworzyć pusty plik za pomocą polecenia touch
. Jeśli uruchomisz polecenie touch
na istniejącym pliku, wówczas zawartość pliku się nie zmieni, tylko zostanie zaktualizowany znacznik czasu modyfikacji pliku.
Uruchom następującą komendę, aby utworzyć kilka plików do lekcji “globs”:
$ touch globs/question1 globs/question2012 globs/question23 globs/question13 globs/question14 $ touch globs/star10 globs/star1100 globs/star2002 globs/star2013
Sprawdźmy teraz, czy wszystkie pliki znajdują się w katalogu globs
:
$ cd globs $ ls question1 question14 question23 star1100 star2013 question13 question2012 star10 star2002
Zwróć uwagę, jak polecenie touch
utworzyło pliki. Za pomocą polecenia cat
możesz wyświetlić zawartość pliku tekstowego. Wypróbuj to polecenie cat
na jednym z właśnie utworzonych plików:
$ cat question14
Ponieważ polecenie touch
tworzy puste pliki, zatem nie powinieneś otrzymać żadnych wyników. Możesz użyć polecenia echo
ze znakiem >
, aby utworzyć proste pliki tekstowe. Wpisz polecenie jak poniżej:
$ echo hello > question15 $ cat question15 hello
echo
wyświetla tekst w wierszu poleceń. Znak >
nakazuje powłoce, aby zapisała wynik polecenia do określonego pliku, zamiast wyświetlenia go w terminalu. W konsekwencji wynik działania polecenia echo
, w tym przypadku słowo hello
, jest zapisywany w pliku question15
. Taki rezultat jest specyficzny nie tylko dla polecenia echo
. Zapis do pliku za pomoca znaku >
może być użyty także z każdym innym poleceniem systemu Linux.
Warning
|
Zachowaj ostrożność podczas używania znaku |
Zmiana nazw plików
Pliki można przenosić oraz zmieniać ich nazwy za pomocą polecenia mv
.
Ustaw katalog roboczy na katalog o nazwie moving
:
$ cd ~/linux_essentials-2.4/moving
Utwórz pliki do ćwiczeń. Powinieneś już znać niezbędne polecenia:
$ touch file1 file22 $ echo file3 > file3 $ echo file4 > file4 $ ls file1 file22 file3 file4
Załóżmy, że popełniono literówkę, i zamiast pliku o nazwie file2
błędnie utworzono plik o nazwie file22
. Skoryguj ten błąd za pomocą polecenia mv
. Podczas zmiany nazwy pliku pierwszy argument to aktualna nazwa, a drugi to nowa nazwa:
$ mv file22 file2 $ ls file1 file2 file3 file4
Uważaj na polecenie mv
. Jeśli zmienisz nazwę pliku na nazwę istniejącego pliku, wówczas istniejący plik zostanie nadpisany przez nowy. Przetestujmy to z plikami file3
oraz file4
:
$ cat file3 file3 $ cat file4 file4 $ mv file4 file3 $ cat file3 file4 $ ls file1 file2 file3
Zauważ, że zawartość pliku file3
to teraz zawartość pliku file4
. Użyj opcji -i
, aby polecenie mv
zapytało użytkownika o potwierdzenie chęci nadpisania istniejącego pliku:
$ touch file4 file5 $ mv -i file4 file3 mv: overwrite ‘file3’? y
Przenoszenie plików
Pliki są przenoszone z jednego katalogu do drugiego za pomocą polecenia mv
.
Utwórz kilka katalogów, do których chcesz przenieść pliki:
$ cd ~/linux_essentials-2.4/moving $ mkdir dir1 dir2 $ ls dir1 dir2 file1 file2 file3 file5
Przenieś plik file1
do katalogu dir1
:
$ mv file1 dir1 $ ls dir1 dir2 file2 file3 file5 $ ls dir1 file1
Zwróć uwagę, że ostatnim argumentem polecenia mv
jest katalog docelowy. Zawsze, jeśli ostatnim argumentem polecenia mv
jest katalog, wówczas pliki zostaną przeniesione do tego katalogu. Jezeli chcemy przenieśc wiele plików, wówczas możemy je wypisać w jednym poleceniu mv
:
$ mv file2 file3 dir2 $ ls dir1 dir2 file5 $ ls dir2 file2 file3
Za pomocą polecenia mv
można także przenosić i zmieniać nazwy katalogów. Jako ćwiczenie zmień nazwę katalogu dir1
na nazwę dir3
:
$ ls dir1 dir2 file5 $ ls dir1 file1 $ mv dir1 dir3 $ ls dir2 dir3 file5 $ ls dir3 file1
Usuwanie plików i katalogów
Polecenie rm
może usuwać zarówno pliki, jak i i katalogi. Natomiast polecenie rmdir
może usuwać tylko katalogi. Oczyśćmy przenoszony katalog moving
poprzez usunięcie pliku file5
:
$ 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
Domyślnie polecenie rmdir
może usuwać tylko puste katalogi, dlatego musieliśmy użyć polecenia rm
, aby usunąć zwykły plik. Spróbuj usunąć katalog deleting
:
$ 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
Domyślnie polecenie rmdir
odmawia usunięcia katalogu, który nie jest pusty. Użyj polecenia rmdir
, aby usunąć jeden z pustych podkatalogów w usuwanym katalogu deleting
:
$ ls -a deleting/files . .. $ rmdir deleting/files $ ls -l deleting directories
Usunięcie dużej liczby plików lub głębokich struktur katalogów z wieloma podkatalogami może wydawać się czasochłonne, jednakże w rzeczywistości jest bardzo łatwe. Domyślnie rm
działa tylko na zwykłych plikach. Opcja -r
służy do przesłonięcia tego zachowania. Ale uważaj, polecenie rm -r
jest bardzo niebezpieczne! Kiedy używasz polecenia rm
z opcją -r
, wówczas rm
usunie nie tylko wszystkie katalogi, ale również wszystko w tym katalogu, łącznie z podkatalogami i ich zawartością. Przekonaj się, jak działa 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
Zwróciłeś uwagę, jak zniknął katalog deleting
mimo, że nie był pusty? Podobnie jak polecenie mv
, także polecenie rm
ma opcję -i
, która żąda od użytkownika potwierdzenia przed wykonaniem polecenia. Użyj rm -ri
, aby usunąć niepotrzebne katalogi z katalogu moving
:
$ 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
Kopiowanie plików i katalogów
Polecenie cp
służy do kopiowania plików i katalogów. Skopiuj kilka plików do katalogu copying
:
$ cd ~/linux_essentials-2.4/copying $ ls directories files $ cp /etc/nsswitch.conf files/nsswitch.conf $ cp /etc/issue /etc/hostname files
Jeśli ostatnim argumentem jest katalog, wówczas polecenie cp
utworzy kopię poprzednich argumentów w katalogu. Podobnie jak w przypadku polecenia mv
, tak samo i w przypadku polecenia cp
można w jednym poleceniu określić od razu wiele plików do skopiowania, o ile celem jest katalog.
Jeśli oba argumenty polecenia cp
są plikami i oba pliki istnieją, wówczas cp
nadpisuje drugi plik kopią pierwszego pliku. Przećwiczmy to, nadpisując plik issue
plikiem o nazwie hostname
:
$ 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
Teraz spróbujmy utworzyć kopię katalogu files
w katalogu directories
:
$ cd ~/linux_essentials-2.4/copying $ cp files directories cp: omitting directory ‘files’
Jak widać, polecenie cp
działa domyślnie tylko na pojedynczych plikach. Aby skopiować katalog, użyj opcji -r
. Zauważ, że opcja -r
powoduje, że polecenie cp
kopiuje także zawartość katalogu, który właśnie kopiujesz:
$ 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
Zwróć uwagę, że jeśli istniejący katalog był używany jako miejsce docelowe, wówczas polecenie cp
utworzyło w nim kopię katalogu źródłowego. Jeśli miejsce docelowe nie istnieje, wówczas polecenie cp
utworzy je i wypełni zawartością katalogu źródłowego:
$ 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
To, co jest powszechnie określane jako globbing, jest prostym językiem dopasowywania wzorców. Powłoki wiersza poleceń w systemach Linux używają tego języka do odwoływania się do grup plików, których nazwy pasują do określonego wzorca. POSIX.1-2017 określa następujące znaki dopasowania do wzorca:
*
-
Dopasowuje dowolną liczbę znaków, w tym także bez znaku
?
-
Dopasowuje dokładnie jeden znak
[]
-
Dopasowuje klasę znaków
W tłumaczeniu oznacza to, że możesz powiedzieć powłoce, aby dopasowała wzorzec zamiast dokładnego ciągu tekstu. Zwykle użytkownicy Linuxa określają wiele plików za pomocą globu, zamiast wpisywać każdą nazwę pliku osobno. Uruchom następujące polecenia:
$ 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
Powłoka rozszerza *
na dowolną liczbę znaków, więc powłoka interpretuje star*
jako cokolwiek w tym kontekście, co zaczyna się od słowa star
. Po uruchomieniu polecenia ls star*
, Twoja powłoka nie uruchamia polecenia ls
z argumentem star*
, tylko szuka w bieżącym katalogu plików, które pasują do wzorca star*
, w tym także zawierających słowo star
i przekształca każdy plik pasujacy do wzorca na argument dla ls
. Przykład: polecenie ls star*
:
$ ls star*
jest takie samo w odniesieniu do ls
jak:
$ ls star10 star1100 star2002 star2013
Znak *
dla polecenia ls
nie oznacza dosłownie nic. Aby to udowodnić, uruchom następujące polecenie:
$ ls star\* ls: cannot access star*: No such file or directory
Jeśli poprzedzasz dowolny znak ukośnikiem \
, wówczas poinstruujesz powłokę, aby tego dowolnego znaku nie interpretowała. W tym przypadku chcesz, aby polecenie ls
miało argument star*
zamiast tego, co glob star*
zastępuje:
Znak ?
zastępuje dowolny pojedynczy znak. Wypróbuj następujące polecenia, aby się o tym przekonać:
$ 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
Nawiasy []
służą do wskazania zastępowanych zakresów lub klas znaków.. Nawiasy []
działają tak samo, jak w wyrażeniach regularnych POSIX, z wyjątkiem tego, że w przypadku globów zamiast znaku ^
używany jest znak !
.
Jako ćwiczenie, utwórz kilka plików:
$ mkdir brackets $ cd brackets $ touch file1 file2 file3 file4 filea fileb filec file5 file6 file7
Zakresy w nawiasach []
są wyrażone za pomocą -
:
$ ls file1 file2 file3 file4 file5 file6 file7 filea fileb filec $ ls file[1-2] file1 file2 $ ls file[1-3] file1 file2 file3
Można określić kilka zakresów:
$ ls file[1-25-7] file1 file2 file5 file6 file7 $ ls file[1-35-6a-c] file1 file2 file3 file5 file6 filea fileb filec
Aby dopasować określony zestaw znaków, można także użyć nawiasów kwadratowych.
$ ls file[1a5] file1 file5 filea
Możesz również użyć znaku ^
jako pierwszego znaku, aby dopasować wszystko oprócz określonych znaków.
$ ls file[^a] file1 file2 file3 file4 file5 file6 file7 fileb filec
Ostatnią rzeczą, którą omówimy w tej lekcji, są klasy postaci. Aby określić klasę znaków, użyj [:nazwę_klasy:]
([:classname:]
). Na przykład, aby użyć klasy cyfr, która pasuje do liczb, należy zrobić coś takiego:
$ 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
Glob file[[:digit:]a]
dopasowuje argument file
, po którym następuje cyfra lub a
.
Obsługiwane klasy znaków zależą od bieżącej konfiguracji ustawień regionalnych. POSIX wymaga następujących klas znaków dla wszystkich lokalizacji:
[:alnum:]
-
Litery i cyfry.
[:alpha:]
-
Wielkie lub małe litery.
[:blank:]
-
Spacje i tabulatory.
[:cntrl:]
-
Znaki sterujące, np. backspace, dzwonek, NAK, ucieczka.
[:digit:]
-
Liczby (
0123456789
). [:graph:]
-
Znaki graficzne (wszystkie znaki oprócz
ctrl
i spacji) [:lower:]
-
Małe litery (
a-z
). [:print:]
-
Znaki do druku ((
alnum
,punct
i znak spacji). [:punct:]
-
Znaki interpunkcyjne, tj.
!
,&
,"
. [:space:]
-
Białe znaki, np. tabulatory, spacje, znaki nowej linii.
[:upper:]
-
Wielkie litery(
A-Z
). [:xdigit:]
-
Liczby szesnastkowe (zwykle
0123456789abcdefABCDEF
).
Ćwiczenia z przewodnikiem
-
Biorąc pod uwagę poniższy listing, wybierz katalogi, które zostaną utworzone przez polecenie
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ 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
-
Jak opcja
-v
zmienia poleceniamkdir
,rm
orazcp
? -
Co się stanie, jeśli przypadkowo spróbujesz skopiować trzy pliki do istniejącego pliku zamiast do katalogu w tym samym wierszu poleceń?
-
Co się stanie, gdy użyjesz
mv
do przeniesienia katalogu do niego samego? -
Jak usunąć wszystkie pliki w bieżącym katalogu, które zaczynają się od
old
? -
Który z poniższych plików będzie pasował do
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
-
Utwórz kilka globów pasujących do następującej listy nazw plików:
doc100 doc200 doc301 doc401
Ćwiczenia eksploracyjne
-
Skorzystaj ze strony podręcznika dla polecenia
cp
, aby dowiedzieć się, jak wykonać kopię pliku i sprawdzić, czy uprawnienia i czasy modyfikacji są zgodne z oryginałem. -
Co robi polecenie
rmdir -p
? Poeksperymentuj z nim i wyjaśnij, czym różni się od poleceniarm -r
. -
NIE WYKONUJ TEGO POLECENIA: Jak myślisz, co zrobi polecenie `rm -ri /*? (NAPRAWDĘ, NIE PRÓBUJ TEGO ROBIĆ!)
-
Oprócz wykorzystywania opcji
-i
, czy jest możliwe, aby zapobiec nadpisywaniu plików docelowych przez poleceniemv
? -
Wytłumacz wynik polecenia
cp -u
.
Podsumowanie
Środowisko wiersza poleceń systemu Linux udostępnia narzędzia do zarządzania plikami, Niektóre powszechnie używane polecenia to cp
, mv
, mkdir
, rm
oraz rmdir
. Te narzędzia, w połączeniu z globami, umożliwiają użytkownikom bardzo szybkie wykonanie dużej ilości pracy.
Wiele poleceń posiada opcję -i
, której można użyć do potwierdzenia polecenia przed jego wykonaniem. Podpowiedzi mogą zaoszczędzić Ci wielu kłopotów, jeśli popełnisz błąd (np. coś wpisałeś błędnie).
Wiele poleceń ma opcję -r
. Opcja -r
zwykle oznacza rekurencję. W matematyce i informatyce funkcja rekurencyjna to funkcja wykorzystująca samą siebie w swojej definicji. Jeśli chodzi o narzędzia wiersza poleceń, zwykle oznacza to zastosowanie polecenia do katalogu i wszystkiego, co się w nim znajduje.
Polecenia użyte w tej lekcji:
cat
-
Odczytuje i wyświetla zawartość pliku.
cp
-
Kopiuje pliki lub katalogi.
echo
-
Wyświetla ciąg.
find
-
Przegląda drzewo systemu plików i wyszukuje pliki, które pasują do określonego zestawu kryteriów.
ls
-
Wyświetla właściwości plików i katalogów oraz wyświetla zawartość katalogu.
mkdir
-
Tworzy nowe katalogi.
mv
-
Przenosi pliki i katalogi lub zmienia ich nazwy.
pwd
-
Wyświetla bieżący katalog roboczy.
rm
-
Usuwa pliki lub katalogi.
rmdir
-
Usuwa katalogi.
touch
-
Tworzy nowe, puste pliki lub aktualizuje sygnaturę czasową modyfikacji istniejącego pliku.
Odpowiedzi do ćwiczeń z przewodnikiem
-
Biorąc pod uwagę poniższy listing, wybierz katalogi, które zostaną utworzone przez polecenie
mkdir -p /tmp/outfiles/text/today /tmp/infiles/text/today
$ pwd /tmp $ find . ./outfiles ./outfiles/text
Zostaną utworzone zaznaczone katalogi. Katalogi
/tmp
,/tmp/outfiles
oraz/tmp/outfiles/text
już istnieją, zatemmkdir
je zignoruje./tmp
/tmp/outfiles
/tmp/outfiles/text
/tmp/outfiles/text/today
X
/tmp/infiles
X
/tmp/infiles/text
X
/tmp/infiles/text/today
X
-
Jak opcja
-v
zmienia poleceniamkdir
,rm
orazcp
?Zazwyczaj opcja
-v
włącza szczegółowe dane wyjściowe. Powoduje, że odpowiednie programy wyświetlają to, co aktualnie wykonują:$ rm -v a b removed 'a' removed 'b' $ mv -v a b 'a' -> 'b' $ cp -v b c 'b' -> 'c'
-
Co się stanie, jeśli przypadkowo spróbujesz skopiować trzy pliki do istniejącego pliku zamiast do katalogu w tym samym wierszu poleceń?
Polecenie
cp
odmówi zrobienia czegokolwiek i wyświetli komunikat o błędzie:$ touch a b c d $ cp a b c d cp: target 'd' is not a directory
-
Co się stanie, gdy użyjesz polecenia
mv
do przeniesienia katalogu do niego samego?Otrzymasz komunikat o błędzie informujący, że polecenie
mv
nie może tego zrobić.$ mv a a mv: cannot move 'a' to a subdirectory of itself, 'a/a'
-
Jak usunąć wszystkie pliki w bieżącym katalogu, które zaczynają się od
old
?Użyć globu
old*
z poleceniemrm
:$ rm old*
-
Który z poniższych plików będzie pasował do
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]
pasuje do ciągulog_
, po którym następuje dowolna mała litera, więc zarównolog_f_201A_Wednesday_01.txt
, jak ilog_b_2007_Mar_01.txt
są zgodne. Ciąg znaków_201?
pasuje do dowolnego pojedynczego znaku, zatem dopasowany jest tylkolog_f_201A_Wednesday_01.txt
. W końcu*_01.txt
pasuje do wszystkiego, co kończy się na_01.txt
, więc nasza pozostała opcja pasuje. -
Utwórz kilka globów pasujących do następującej listy nazw plików:
doc100 doc200 doc301 doc401
+ Istnieje kilka rozwiązań. Tutaj jest kilka z nich:
+
doc* doc[1-4]* doc?0? doc[1-4]0?
Odpowiedzi do ćwiczeń eksploracyjnych
-
Skorzystaj ze strony podręcznika dla polecenia
cp
, aby dowiedzieć się, jak wykonać kopię pliku i sprawdzić, czy uprawnienia i czasy modyfikacji są zgodne z oryginałem.Użyj opcji
-p
. W podręczniku jest napisane:$ 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
-
Co robi polecenie
rmdir -p
? Poeksperymentuj z nim i wyjaśnij, czym różni się od poleceniarm -r
.Powoduje, że polecenie
rmdir
zachowuje się podobnie domkdir -p
. Jeśli zajmiesz się drzewem z pustymi katalogami, wszystkie one zostaną usunięte.$ find . ./a ./a/b ./a/b/c $ rmdir -p a/b/c $ ls
-
NIE WYKONUJ TEGO POLECENIA: Jak myślisz, co zrobi polecenie `rm -ri /*? (NAPRAWDĘ, NIE PRÓBUJ TEGO ROBIĆ!)
Spowoduje to usunięcie wszystkich plików i katalogów, do których można zapisywać z konta użytkownika. Dotyczy to także wszystkich sieciowych systemów plików.
-
Oprócz wykorzystywania opcji
-i
, czy jest możliwe, aby zapobiec nadpisywaniu plików docelowych przez poleceniemv
?Tak, opcja
-n
lub--no-clobber
zapobiega nadpisywaniu plików przezmv
.$ cat a a $ cat b b $ mv -n a b $ cat b b
-
Wytłumacz wynik polecenia
cp -u
.Opcja
-u
powoduje, że poleceniecp
kopiuje plik tylko wtedy, gdy brakuje miejsca docelowego lub jest ono starsze niż plik źródłowy.$ 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