Tworzenie, kopiowanie i kasowanie
Po tej lekcji: kursant tworzy foldery i pliki, kopiuje, przenosi, zmienia nazwy, podgląda zawartość i bezpiecznie usuwa.
Wstęp
W 1998 roku w Pixarze ktoś wpisał w terminalu jedną komendę do kasowania plików. I z serwerów zaczął znikać film Toy Story 2.
Dziś poznasz tę komendę. I poznasz ją tak, żeby nigdy nie zrobić tego, co oni.
Ale najpierw zbudujemy coś, co będzie co kasować.
Tworzenie folderów
mkdir projektymkdir to „make directory”, czyli „zrób folder”. Proste.
A teraz chcesz zrobić od razu folder w folderze w folderze:
mkdir -p projekty/youtube/odcinek1Bez -p Bash się obrazi, że folderu youtube nie ma. Z -p po prostu robi wszystkie brakujące po drodze. Jak budowlaniec, który dostaje zlecenie na pokój na trzecim piętrze i nie pyta, gdzie jest pierwsze i drugie, tylko je stawia.
Tworzenie plików
touch notatki.txttouch znaczy „dotknij”. Jeśli plik nie istnieje, robi pusty. Jeśli istnieje, tylko zmienia mu datę ostatniej modyfikacji, jakbyś go dotknął. Prawdziwe pisanie do plików poznamy w lekcji o przekierowaniach.
Możesz też zrobić kilka naraz:
touch lista.txt plan.txt pomysly.txtKopiowanie
cp notatki.txt kopia.txtcp to „copy”. Najpierw co, potem dokąd. Zawsze w tej kolejności: skąd, dokąd. Jak przeprowadzka: najpierw stary adres, potem nowy.
A folder z całą zawartością?
cp -r projekty projekty_kopia-r od „rekurencyjnie”. Brzmi strasznie, a znaczy tylko „z wszystkim, co jest w środku, i w środku tego, co w środku”. Jak przeprowadzka szafy razem z szufladami, a nie samej pustej szafy.
Przenoszenie i zmiana nazwy
mv kopia.txt projekty/
mv plan.txt plan_na_listopad.txtmv to „move”. I tu ciekawostka: w Bashu nie ma osobnej komendy do zmiany nazwy. Zmiana nazwy to po prostu przeniesienie pliku… w to samo miejsce, pod inną nazwą. Jak przeprowadzka z mieszkania numer 5 do mieszkania numer 5, ale z nowym nazwiskiem na drzwiach.
Podglądanie plików
cat notatki.txt
less dlugi_plik.txt
head -n 5 dlugi_plik.txt
tail -n 5 dlugi_plik.txtcatwypluwa cały plik na ekran. Dobre dla krótkich plików.lessotwiera plik do przewijania. Strzałki albo spacja przewijają, a wyjście to klawiszq. Zapamiętajq, bo pierwsza panika każdego początkującego to „jak z tego wyjść”.headpokazuje początek pliku, domyślnie 10 linijek.tailpokazuje koniec. Admini używają go codziennie do logów, bo w logach najważniejsze jest zawsze to, co najnowsze, czyli na końcu.
Kasowanie. Uwaga.
rm lista.txtrm to „remove”. I teraz najważniejsze zdanie tej lekcji.
W terminalu nie ma kosza. rm nie przenosi pliku do kosza. Usuwa go. Nie ma „cofnij”. Nie ma „przywróć”. Plik po prostu znika.
Folder z zawartością:
rm -r projekty_kopiaA pusty folder można usunąć bezpieczniejszą komendą, która odmówi, jeśli w środku coś jest:
rmdir pusty_folderI tryb dla ostrożnych, w którym Bash pyta o każdy plik:
rm -i notatki.txtPixar
W Pixarze użyto wersji rm z dwiema opcjami naraz: -r, czyli „z całą zawartością”, i -f, czyli „nie pytaj i nie marudź”. Do tego gwiazdka, która znaczy „wszystko”. Gwiazdkę poznasz w lekcji 5.
rm -rf * w czerwonej ramce z napisem „PRZECZYTAJ DWA RAZY”
Uruchomiona w złym folderze ta komenda grzecznie, bez jednego pytania, usuwa wszystko. Tak właśnie zniknęło około 90% plików filmu. Uratowała go kopia na domowym komputerze jednej z pracownic, bo backupy od miesiąca nie działały.
Trzy zasady, które musisz mieć w głowie przy każdym rm:
- Przed kasowaniem wpisz
pwd. Upewnij się, gdzie stoisz. - Przed kasowaniem wpisz
lsz tym samym wzorcem. Zobacz, co dokładnie zniknie. - Nie wklejaj
rm -rfz internetu, jeśli nie rozumiesz każdego znaku.
⚠ Typowy błąd
cp projekty projekty2Bash odpowie, że pomija folder, bo nie podałeś -r. To nie błąd systemu, tylko zabezpieczenie: kopiowanie folderu bez -r nie ma sensu, więc Bash pyta, czy na pewno wiesz, co robisz.
✎ Zadanie
Zbuduj w folderze domowym strukturę kurs/modul0/odcinek3. W środku zrób trzy pliki. Skopiuj cały folder kurs jako kurs_kopia, zmień nazwę jednego pliku w kopii, a potem bezpiecznie usuń całą kopię. Najpierw pwd i ls, potem rm.
Pokaż rozwiązanie
mkdir -p kurs/modul0/odcinek3
touch kurs/modul0/odcinek3/a.txt kurs/modul0/odcinek3/b.txt kurs/modul0/odcinek3/c.txt
cp -r kurs kurs_kopia
mv kurs_kopia/modul0/odcinek3/a.txt kurs_kopia/modul0/odcinek3/nowy.txt
pwd
ls kurs_kopia
rm -r kurs_kopiaJeśli zrobiłeś pwd i ls przed rm, to masz już w sobie więcej dyscypliny niż połowa internetu.
Co dalej
Komend jest setki, a opcji tysiące. Nikt ich nie pamięta. W następnej lekcji pokażę, gdzie admini sprawdzają, jak coś działa, zamiast udawać, że pamiętają.