Wiersz poleceń to sposób sterowania komputerem bez użycia graficznego interfejsu użytkownika. W tej lekcji poznamy podstawowe polecenia, które pozwolą nam korzystać z komputera.
Podsumowanie
- Uczniowie będą poruszać się po komputerze za pomocą poleceń.
- Uczniowie będą tworzyć, przenosić, kopiować i usuwać pliki oraz foldery.
Czym jest wiersz poleceń?
Większość użytkowników najczęściej korzysta z graficznego interfejsu użytkownika (GUI) do interakcji z komputerem. Interfejsy GUI zwykle wykorzystują mysz lub dotyk do manipulowania oknami z ikonami, przyciskami, paskami przewijania itp.
Wiersz poleceń to alternatywny widok komputera. Wiersz poleceń, nazywany też „powłoką”, „terminalem”, „bashem” lub „interfejsem tekstowym”, to:
- Sposób interakcji z programem komputerowym, w którym użytkownik wpisuje polecenia, np.:
open README.txt
- Sposób poruszania się po komputerze i obsługiwania go bez użycia myszy.
- Niegraficzny sposób tworzenia, odczytywania, aktualizowania, obsługi i usuwania plików i katalogów, np.:
mv README.txt readme.txt
GUI i wiersz poleceń pokazują to samo. Są to różne sposoby interakcji z komputerem.
Kiedy używamy wiersza poleceń?
Interfejsy wiersza poleceń są często preferowane przez deweloperów:
- Umożliwiają one bardziej zwięzłe sterowanie programem lub systemem operacyjnym. Dlaczego? Dzieje się to w tym samym oknie, a po pewnym czasie wymaga mniej wysiłku niż wyszukiwanie i manipulowanie elementami za pomocą myszy.
- Ułatwiają one dostęp do opcji sterowania poleceniem. Dlaczego? Menu w GUI oferują bardzo małą liczbę opcji. W wierszu poleceń jest setki poleceń, a kilka znaków dodanych do polecenia może sprawić, że będzie ono wykonywać wiele różnych czynności, np.
ls
Podstawowe pliki listls -a
Wyświetl wszystkie pliki, w tym pliki normalnie ukryte.ls -l
Długa lista z informacjami o każdym plikuls -R
Rekursywnie wyświetl zawartość katalogówls -la
Długa lista wszystkich plików- Ułatwiają one wykonywanie złożonych działań na wielu plikach jednocześnie.
for i in *.png; do pngtogif $i `echo $i | sed s/png/gif/`; done
- Umożliwiają one programowanie systemu operacyjnego (programy powłoki), np. powyższy przykład to bardzo prosty program powłoki, który służy do modyfikowania obrazów, których nazwy plików kończą się na
.png
.
Wiersz poleceń w praktyce
Elementy polecenia wiersza poleceń
Wszystkie polecenia składają się z 3 części:
- Polecenie (lub narzędzie) zawsze występuje jako pierwsze.
- Flagi są opcjonalne i zależą od używanego narzędzia. Flagi zawsze zaczynają się od znaku – (minus).
- Argumenty to elementy, na których polecenie ma działać, lub niezbędne informacje. Często są to nazwy plików.
Kopia w ramkach
Kontekst i cel
Wiersz poleceń to sposób sterowania komputerem bez użycia myszy lub graficznego interfejsu użytkownika (GUI). Zanim firma Apple Computer zaczęła produkować urządzenia z ikonami i folderami, w które można było klikać, jedynym sposobem interakcji z komputerem był wiersz poleceń.
Jako programiści używamy wiersza poleceń, ponieważ jest on znacznie szybszy i wydajniejszy niż GUI – nie musimy tracić czasu na klikanie. Wiersz poleceń umożliwia wykonywanie niemal wszystkich interakcji z komputerem.
Terminal jest znacznie prostszym interfejsem, dlatego ma dużą przewagę nad GUI, gdy trzeba zdalnie połączyć się z komputerem za pomocą łącza sieciowego. Deweloperzy często to robią, np. podczas podróży.
W tej lekcji poznamy podstawowe polecenia do interakcji z komputerem, takie jak tworzenie plików i katalogów, przenoszenie folderów, zmienianie katalogów i wyświetlanie zawartości folderu.
Cele szkoleniowe
Uczniowie będą mogli:
- Poruszanie się po plikach i folderach za pomocą Terminala
- Wyświetlanie listy zawartości folderu
- Tworzenie plików i folderów w wierszu poleceń
- Przenoszenie plików i folderów
- Kopiowanie plików i folderów
- Usuwanie plików i folderów
Pierwsze kroki
Dostęp do terminala
Opis i cel sekcji
Terminal udostępnia interfejs wiersza poleceń (CLI) systemu operacyjnego. Dzięki niemu możesz przekazywać komputerowi bezpośrednie instrukcje tekstowe.
Aby to zrobić, musimy uruchomić terminal na podstawie używanego systemu.
Po uruchomieniu terminala otworzy się on w katalogu domowym komputera (o nazwie, jaką nadano komputerowi). Katalog domowy jest oznaczony tyldą~
.
W Terminalu katalogi są tym samym co foldery (czasami możemy je po prostu nazywać katalogami).
Zmiana katalogów
Opis i cel sekcji
Aby porozmawiać z komputerem w Terminalu i powiedzieć mu, co chcemy zrobić, musimy posługiwać się wspólnym językiem. Wiersz poleceń rozumie polecenia napisane w języku skryptowym bash. Polecenia to akronimy lub skróty angielskich słów.
Drukuj katalog roboczy (pwd
)
Podczas poruszania się w terminalu ważne jest, aby wiedzieć, gdzie się znajdujesz (dotyczy to również życia codziennego – jeśli chcesz gdzieś dotrzeć, musisz najpierw znać swoją aktualną lokalizację).
# See your current location - abbreviation for 'print working directory'
pwd
Wyświetlanie listy dostępnych plików i katalogów
W katalogu roboczym prawdopodobnie znajduje się kilka plików, do których masz dostęp. Zwykle korzystamy ze wskazówek wizualnych, takich jak ikony, aby dowiedzieć się, co jest dostępne, ale trudno byłoby poruszać się po komputerze, gdybyśmy tylko zgadywali, gdzie znajdują się pliki i foldery. W wierszu poleceń użyjemy konkretnego polecenia, aby wyświetlić, do czego mamy dostęp z dowolnego katalogu roboczego lub dowolnej lokalizacji.
Aby zobaczyć, które pliki lub foldery znajdują się w bieżącym katalogu, użyj polecenia ls
(skrót od słowa „list”, czyli „lista”), aby wyświetlić listę zawartości.
# See files and folders in current location - abbreviation for 'list'
ls
Zmiana katalogu roboczego
Jeśli potrzebujesz dostępu do pliku lub katalogu, którego nie ma na liście, możesz zmienić katalog roboczy, aby łatwiej uzyskać do niego dostęp.
Składnia polecenia, które przenosi do nowego katalogu (zwanego też folderem), to cd
, a następnie (w tym samym wierszu) ścieżka do nowego folderu.
Jeśli przejdziesz do katalogu, który znajduje się w katalogu, w którym obecnie pracujesz (czyli do podfolderu katalogu roboczego), użyj polecenia cd
, a potem nazwy folderu.
# Change your current working directory (current location)
# Abbreviation for 'change directory'
cd Documents
Możesz też rozpocząć nawigację od katalogu domowego ~.
# Add a `~/` to begin from the home directory.
cd ~/Downloads
Jeśli zmienisz katalog, ale chcesz wrócić do katalogu domowego, możesz to zrobić, przechodząc bezpośrednio do katalogu domowego za pomocą ~
lub używając ..
, aby przejść o jeden poziom wyżej.
# Option 1: navigate directly to the home directory
cd ~
# Option 2: navigate back one level
cd ..
Pamiętaj, że cd ..
cofa się tylko o 1 poziom, więc jeśli zmienisz katalog 3 razy (o 3 poziomy w dół), musisz użyć cd ..
3 razy, aby wrócić do katalogu głównego, ale cd ~
wystarczy użyć tylko raz.
Miniwyzwania
- Użyj polecenia
ls
, aby sprawdzić, co znajduje się w bieżącym katalogu. - Wróć do katalogu głównego i użyj polecenia
ls
, aby wyświetlić zawartość folderu domowego. - Wybierz nazwę jednego z folderów znajdujących się w katalogu domowym i przejdź do tego nowego folderu.
- Użyj polecenia list, aby sprawdzić, co jest w środku.
Wskazówka: autouzupełnianie za pomocą tab
Podczas zmiany katalogów za pomocą polecenia cd
pojedyncza literówka uniemożliwi prawidłowe wykonanie polecenia. Jednak użycie klawisza tab
spowoduje automatyczne uzupełnienie nazwy dowolnego dostępnego katalogu znajdującego się w bieżącym katalogu. Zamiast wpisywać cd Documents
, wpisz tylko cd Do
, a następnie naciśnij klawisz tab
. Terminal automatycznie uzupełni polecenie cd Documents/
(znak /
na końcu jest opcjonalny, ale informuje, że miejscem docelowym jest katalog).
Autouzupełnianie nie tylko oszczędza czas, gdy działa, ale też dostarcza cennych informacji, gdy nie działa. Jeśli przycisk karty nie uzupełnia się automatycznie, prawdopodobnie wystąpił jeden z 3 często spotykanych problemów:
- Katalog, do którego chcesz przejść, jest niedostępny z aktualnego katalogu roboczego.
- Istnieją 2 katalogi o podobnych nazwach (np.
Documents
iDownloads
), a Ty nie podajesz wystarczającej ilości informacji, aby funkcja autouzupełniania mogła określić, który z nich Cię interesuje. Naciśnij ponownietab
, aby wyświetlić listę katalogów, które mogą pasować do wpisanego tekstu. Następnie wpisz jeszcze trochę tekstu (tak, aby był tylko jeden wynik) i ponownie naciśnijtab
. - W pierwszej połowie słowa jest już błąd.
Im szybciej przyzwyczaisz się do używania klawisza Tab do automatycznego uzupełniania poleceń, tym większe prawdopodobieństwo, że poradzisz sobie w sytuacjach, gdy polecenia nie działają.
Katalogi nadrzędne i podrzędne
Katalogi i pliki mogą mieć między sobą relacje podrzędne i nadrzędne. Jeśli directory_b
znajduje się wewnątrz directory_a
, directory_b
jest nazywany elementem podrzędnym directory_a
. directory_a
jest wtedy elementem nadrzędnym elementu directory_b
. Jeśli trzeci element, my_file
, znajduje się w elemencie directory_b
, jest on uważany za element podrzędny elementu directory_b
i wnuka elementu directory_a
.
Te relacje są często ilustrowane na forach za pomocą diagramu tekstowego, takiego jak ten:
directory_a/ directory_b/ my_file
Zwróć uwagę, że nazwy katalogów kończą się znakiem /
, a nazwy plików nie. Ta hierarchiczna organizacja jest zwykle określana jako struktura drzewa systemu plików.
Rodzeństwo
Jeśli na tym samym poziomie znajduje się kilka plików lub folderów, są one nazywane elementami równorzędnymi. Przykład: jeśli elementy file_b
i file_c
znajdują się w elemencie directory_a
, są elementami równorzędnymi.
Ten diagram tekstowy wyglądałby tak:
directory_a/ file_b file_c
Zwróć uwagę, że file_b
i file_c są elementami równorzędnymi, więc mają takie samo wcięcie.
Ścieżki do plików
Oto bardziej złożony diagram tekstowy, który przedstawia relacje nadrzędny-podrzędny i relacje między elementami na tym samym poziomie.
north_america/ united_states/ new_york/ new_york_city/ manhattan queens staten_island bronx brooklyn california/ mountain_view los_angeles illinois/ chicago mexico/ mexico_city
W tym przykładzie new_york_city/
to nazwa katalogu, ale ma też ścieżkę, która szczegółowo opisuje, jak do niego dotrzeć: ~/north_america/united_states/new_york/new_york_city/
.
Aby przejść do katalogu new_york_city/,
, możesz to zrobić krok po kroku, używając nazw, lub jednym poleceniem, używając ścieżki.
# Option 1: in four steps, using directory names.
cd ~ # navigate home, where these folders are located
cd north_america/
cd united_states/
cd new_york/
cd new_york_city/
# Option 2: in one step, using the path.
cd ~/north_america/united_states/new_york/new_york_city/
Podsumowanie poleceń nawigacyjnych
# See your current location - abbreviation for 'print working directory'
pwd
# Change to a new location - abbreviation for 'change directory'
cd ~/Downloads
# Navigates into a child directory called `some_directory`
# Only works if `some_directory` is a child of the current directory
cd some_directory
# Navigates into the parent of the current directory
# `..` is shorthand for parent.
cd ..
# Will take you back home
cd
Miniwyzwania
- Użyj
pwd
, aby sprawdzić, w którym folderze się znajdujesz. - Przejdź do innego katalogu i potwierdź nową lokalizację.
- Spróbuj ponownie i przejdź do innego folderu. Użyj nowych poleceń, aby sprawdzić swoją lokalizację i wyświetlić pliki w tym katalogu.
Tworzenie plików i katalogów
Opis i cel sekcji
Jako deweloperzy musimy utworzyć pliki z kodem. Aby uporządkować te pliki, musimy utworzyć foldery / katalogi, w których będziemy je przechowywać.
Zanim utworzysz pliki i foldery, sprawdź, w którym miejscu w terminalu się znajdujesz.
# See your current location.
pwd
Aby utworzyć plik, użyj polecenia touch
, a potem wpisz nazwę pliku.
# `touch` creates a new file.
touch style.css
Podczas tworzenia plików dodaj rozszerzenie, aby określić typ. Przykładowe typy plików:
.js
utwórz plik JavaScript..html
utworzyć plik HTML,.css
tworzy plik CSS,.md
tworzy plik Markdown
Nazwy plików nie powinny zawierać spacji.
# make a file - this will create a file in the current folder
touch my_text_file.txt
# make a file - this will create a file on the desktop
touch ~/Desktop/my_new_style_sheet.css
Tworzenie wielu plików
Możesz utworzyć wiele plików naraz, umieszczając spacje między poszczególnymi nazwami.
# make multiple files - this will create multiple files in the current folder
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html
Tworzenie katalogów
Aby utworzyć katalog lub folder, użyj polecenia mkdir
(skrót od „make directory”) i podaj nazwę folderu.
# make a folder - this will create a directory in the current folder
mkdir my_new_folder
# make a folder - this will create a directory on your desktop
mkdir ~/Desktop/my_new_desktop_folder
Tworzenie wielu katalogów
Możesz utworzyć kilka folderów naraz, rozdzielając ich nazwy spacjami.
# make multiple folders - this will create multiple folders in the current
# directory
mkdir folder_one folder_two folder_three
Miniwyzwania
- Utwórz nowy plik.
- Utwórz kilka plików za pomocą jednego polecenia.
- Utwórz nowy katalog.
- Utwórz jeszcze kilka nowych katalogów. Spróbuj to zrobić za pomocą tylko jednego polecenia.
- Wykorzystując wiedzę o poruszaniu się po katalogach oraz tworzeniu plików i folderów, utwórz na pulpicie „drzewo genealogiczne” za pomocą plików i folderów.
Przenoszenie i kopiowanie
Przenoszenie plików i katalogów
Opis i cel sekcji
Plik lub folder możemy przenieść w wierszu poleceń, ale zawsze musimy określić 3 rzeczy:
- Używamy polecenia
mv
, które jest skrótem od move (przenieś). - Po poleceniu przenoszenia wpisz nazwę pliku lub folderu, który chcesz przenieść.
- Po nazwie pliku wpisz miejsce docelowe, do którego chcesz go przenieść.
Jeśli na przykład masz taką strukturę plików:
my_child_folder/ my_parent_folder/
Widać, że nie są one uporządkowane tak, jak powinny – są rodzeństwem, a powinny być rodzicem i dzieckiem. Użyj tego polecenia:
# move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder
mv my_child_folder/ my_parent_folder/
Wynikowa struktura będzie wyglądać tak:
my_parent_folder/ my_child_folder/
Oto inne warianty polecenia mv
:
# move a directory - this will move the folder `my_folder` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_folder ~/Desktop/my_desktop_folder
# move a file - this will move the file `my_file.txt` into the file named
# `my_folder` that is in the current folder
mv my_file.txt my_folder
# move a file - this will move the file `my_file.txt` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_file.txt ~/Desktop/my_desktop_folder
Ostrzeżenie: polecenie mv
służy też do zmiany nazwy pliku przy użyciu składni mv old_name new_name
. Oznacza to, że jeśli przeniesiesz plik do katalogu, który nie istnieje, lub jeśli źle napiszesz nazwę miejsca docelowego, plik zostanie przemianowany zamiast przeniesiony.
Miniwyzwania
- Utwórz 5 plików tekstowych (.txt).
- Utwórz nowy katalog.
- Przenieś do folderu 5 utworzonych przez siebie plików.
- Utwórz folder i przenieś go do innego folderu.
Kopiowanie plików i katalogów
Opis i cel sekcji
Podczas tworzenia aplikacji internetowych możemy chcieć zduplikować plik (jeśli tworzymy 2 podobne strony internetowe, nie musimy zaczynać od zera), a składnia polecenia cp
(kopiowanie) jest bardzo podobna do składni polecenia mv
.
Kopiowanie pliku
Polecenie kopiowania składa się z 3 części:
- Polecenie
cp
– skrót od kopiuj - Nazwa pliku do skopiowania
- Nazwa kopii (jeśli pozostaje w tym samym folderze) lub lokalizacja i nazwa (jeśli jest przenoszona do innego folderu).
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`
# The copy will be located in your Documents folder.
cp my_file.txt ~/Documents/my_file_copy.txt
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`.
# Since no directory was specified, this will occur within the same folder.
cp my_file.txt my_file_copy.txt
Jeśli chcesz, aby kopia miała taką samą nazwę jak oryginał, możesz określić lokalizację kopii bez nazwy pliku.
# Copy a file named `my_file.txt` to your Documents folder.
# The destination ends with a directory, so the copy will have the same name.
cp my_file.txt ~/Documents/
Wiele plików o tej samej nazwie może być mylące, więc używaj tej metody tylko wtedy, gdy masz pewność, że jest to potrzebne.
Kopiowanie katalogu
Skopiowanie folderu lub katalogu jest nieco bardziej skomplikowane, ponieważ prawdopodobnie chcesz skopiować nie tylko folder, ale także wszystko, co się w nim znajduje.
- Polecenie
cp -R
– skrót od copy recursive (kopiowanie rekurencyjne) – używaj go w przypadku pustych i niepustych folderów. - Nazwa źródła (folder lub plik, który chcemy przenieść)
- Nazwa kopii (jeśli pozostaje w tym samym folderze) lub lokalizacja i nazwa (jeśli jest przenoszona do innego folderu).
Ostrzeżenie: jeśli podczas określania nazwy kopii plik lub folder nie został wcześniej utworzony, zostanie utworzony podczas tworzenia kopii. Jeśli plik został utworzony przed uruchomieniem polecenia kopiowania, zastąpi wszystko, co było wcześniej w pliku, więc zachowaj ostrożność.
# copy a directory named `my_folder` from your Desktop folder to a folder
# called `my_folder_copy` in your Documents folder
cp -R ~/Desktop/my_folder ~/Documents/my_folder_copy
# copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder
cp -R my_folder my_folder_copy
Uwaga: komponent -R
w cp -R
nazywa się flagą. Flagi zawsze zaczynają się od myślnika i są używane w połączeniu z poleceniami, aby podać bardziej szczegółowe instrukcje dotyczące sposobu wykonania danego polecenia.
Miniwyzwania
- Utwórz plik o nazwie
my_original.txt
. - Utwórz kopię pliku
my_original.txt
i nadaj jej nową nazwę w tym samym folderze. - Utwórz nowy katalog.
- Utwórz kopię tego katalogu, ale nadaj jej inną nazwę.
- Utwórz kopię skopiowanego pliku (z kroku 2), ale umieść ją w skopiowanym katalogu (z kroku 4).
Usuwanie plików i folderów
Opis i cel sekcji
Możemy usuwać pliki i foldery w wierszu poleceń, ale tej czynności nie można cofnąć.
Usuwanie pliku
Aby usunąć plik, możemy użyć polecenia rm
(skrót od remove) i nazwy pliku.
# delete a file in the working directory
rm unwanted_file.txt
# delete a file not in the working directory
rm ~/Desktop/unwanted_file.txt
Usuwanie pustego katalogu
Aby usunąć pusty katalog, możemy użyć polecenia rmdir
– skrótu od remove directory – a następnie nazwy folderu.
# delete an empty folder
rmdir empty_directory
# delete an empty folder
rmdir ~/Documents/my_files/empty_directory
Usuwanie katalogu, który nie jest pusty
Aby usunąć niepusty folder, musimy po poleceniu rm
umieścić flagę -R
– skrót od rekursywny – która informuje komputer, że ma usunąć zawartość folderu. Niektórzy deweloperzy używają skrótu -Rf
, który wymusza usunięcie wszystkich elementów (w przeciwnym razie możesz otrzymywać prośby o usunięcie niektórych plików lub folderów podrzędnych).
# delete a folder which contains other files or folders
rm -R directory_which_isnt_empty
# delete a folder which contains other files or folders
rm -R ~/Downloads/directory_which_isnt_empty
Ostrzeżenie: użycie polecenia rm
nie jest podobne do kosza ani sekcji usuniętych w e-mailu – tych plików nie można łatwo odzyskać. Podczas usuwania plików w ten sposób zachowaj szczególną OSTROŻNOŚĆ.
Miniwyzwania
- Utwórz 4 pliki.
- Usuń 2 pliki.
- Utwórz folder.
- Utwórz kolejny folder i utwórz w nim plik.
- Usuń oba katalogi.
Kod do tego modułu znajdziesz w tym folderze w repozytorium dla uczestników, które zostało pobrane z GitHuba: command-line/labs/around-the-world
Tło
Twój semestr za granicą zbliża się wielkimi krokami, więc czas zacząć planować podróże po Europie…
W najbliższych 3 miesiącach czeka Cię intensywne życie, więc chcesz w pełni wykorzystać każdy weekendowy wyjazd.
Na szczęście nie musisz zaczynać od zera, bo Twoi znajomi podali Ci kilka swoich ulubionych zajęć z semestru za granicą. Niestety niektóre pliki się pomieszały…
Nie martw się, dzięki magii wiersza poleceń szybko je naprawisz.
Zadanie
Sprawdź, czy każde miasto znajduje się w odpowiednim kraju i czy w folderze każdego miasta znajdują się właściwe zabytki. Uważaj, bo możesz skończyć w Amsterdamie, szukając Wieży Eiffla.
Jeśli masz PEWNOŚĆ, że sobie poradzisz, ukryj GUI i podejmij to wyzwanie bezpośrednio z wiersza poleceń. Podczas wykonywania tych czynności pozostań w ogólnym folderze „dookoła świata”. Oznacza to, że podczas odwoływania się do folderów i plików musisz używać bezwzględnych ścieżek.
Gdy upewnisz się, że wszystko jest na swoim miejscu, możesz przejąć kontrolę nad kolejnymi miesiącami. Przeprowadź burzę mózgów, aby znaleźć nowe miasta, kraje i zabytki, które MUSISZ zobaczyć, i dodaj je do drzewa plików.
Gratulacje! Oficjalnie nauczyłeś(-aś) się mówić językiem komputerów. Chcesz pójść o krok dalej? Porozmawiajmy o rozszerzeniach…
Rozszerzenia
- Ponownie pomieszaj wszystkie pliki, a potem wybierz dowolne miasto. Ponownie uporządkuj pliki, nie opuszczając tego miasta.
- Wypróbuj jedną z poniższych zabawnych gier w wierszu poleceń:
Terminus Game
Advanced Game (przygotuj się na wyszukiwanie w Google) - Jesteś wielkim fanem Gwiezdnych Wojen? Spróbuj uruchomić
telnet towel.blinkenlights.nl
w wierszu poleceń i nacisnąć Enter… (Pamiętaj, że w najnowszych wersjach systemu macOS polecenietelnet
nie jest już instalowane domyślnie. W takim przypadku można zamiast niego użyć polecenianc towel.blinkenlights.nl 23
).
Kod do tego modułu znajdziesz w tym folderze w repozytorium dla uczestników, które zostało pobrane z GitHuba: command-line/labs/bashing-away-repetition
Chcesz pozbyć się powtarzalności w codziennym korzystaniu z wiersza poleceń? Świetnie, ja też!
Tło
Programiści nie znoszą powtórzeń. Jako informatycy staramy się, aby komputer wykonywał jak najwięcej naszej pracy. Pisanie skryptów bash pomoże nam efektywniej korzystać z wiersza poleceń.
Zacznijmy od początku: czym jest skrypt bash?
ŚWIETNE pytanie. Na szczęście nasz znajomy Ryan Chadwick z tego świetnego miejsca, w którym można znaleźć samouczki dotyczące wiersza poleceń, ma dla nas odpowiedź.
Skrypt Bash pozwala zdefiniować serię działań, które komputer wykona bez konieczności wpisywania przez nas poleceń. Jeśli określone zadanie jest wykonywane często lub jest powtarzalne, skrypt może być przydatnym narzędziem.
Brak powtórzeń? O tym właśnie mówię.
Samouczek
Aby móc uruchomić skrypt, musisz najpierw przyznać komputerowi uprawnienia. W tym celu uruchom poniższe polecenie.
chmod 755 myScript.sh
Czas napisać pierwszy program. Przejdź do myScript.sh
(sprawdź, czy możesz otworzyć plik z wiersza poleceń). Na końcu pliku dodaj:
echo "Hello World"
Teraz uruchom:
./myScript.sh
w terminalu. ** TA DA ** w terminalu powinien pojawić się tekst „Hello World”.
Wszystko, co napiszesz w skrypcie bash, zostanie uruchomione tak, jakby zostało wpisane w terminalu. Zanim przejdziemy do rozszerzeń, przyjrzyjmy się jeszcze jednemu przykładowi. Najpierw utwórz plik skryptu. Nazwa może być dowolna, ale musi mieć rozszerzenie .sh
. Następnie przyznaj skryptowi uprawnienia do uruchamiania, wpisując w terminalu chmod 755
, a potem nazwę skryptu i naciskając Enter. Za każdym razem, gdy zaczynasz pisać nowy skrypt bash, wykonaj te 2 czynności.
Wyzwanie wprowadzające
Teraz spróbujmy napisać skrypt, który utworzy nowy folder. Jakie polecenie tworzy nowy folder? Jeśli myślisz o słowie, które zaczyna się na m
, a kończy na kdir
, to jesteś na dobrej drodze. W nowym pliku .sh
wpisz polecenie, które utworzy nowy folder i nada mu fajną nazwę, a potem uruchom je w terminalu.
Jeśli to zadziała, przejdź do innych wyzwań wymienionych poniżej. Jeśli nadal masz wątpliwości, wróć do laboratorium „Dookoła świata” i przypomnij sobie, jak tworzyłeś nowe foldery krajów i miast.
Nie bój się skorzystać z samouczka, do którego link znajdziesz powyżej, i przygotuj się na wykorzystanie swoich najlepszych umiejętności wyszukiwania w Google. Tworzenie i uruchamianie skryptów, które:
Główne zadania
- Dodaj do utworzonego powyżej pliku polecenie, które spowoduje przejście do tworzonego folderu. (Jakiego polecenia używamy do zmiany katalogów?)
- Dodaj do nazwy nowego folderu sygnaturę daty. Na przykład program powinien utworzyć folder o nazwie „
2017-12-07my_super_cool_folder
”.
- Wyświetla tekst „My current directory is: ” (Mój bieżący katalog to: ) oraz katalog roboczy, a także „Here is a list of everything in this directory!” (Oto lista wszystkich elementów w tym katalogu!). „, a następnie zawartość bieżącego katalogu.
- Dowiedz się, jak przekazać skryptowi bash dane wejściowe i utworzyć plik na podstawie tego ciągu wejściowego. W samouczku, do którego link znajdziesz wcześniej w tym module, w sekcji zmiennych znajdziesz kilka świetnych przykładów.
- Poproś użytkownika o podanie imienia, a następnie wyświetl komunikat „Cześć, miło Cię poznać [wstaw imię użytkownika]”.
- Poproś użytkownika o więcej informacji i utwórz dla niego spersonalizowaną wiadomość.
KONTEKST
Wiersz poleceń (lub terminal) umożliwia bezpośrednią interakcję z systemem operacyjnym komputera – wszystko, co robi graficzny interfejs użytkownika (GUI), ale za pomocą poleceń tekstowych – od nawigacji po tworzenie nowych plików i wykonywanie skryptów. Wiersz poleceń będzie używany do otwierania plików i inicjowania środowiska programistycznego podczas korzystania z Google App Engine.
Wiersz poleceń w praktyce
Dostęp do terminala
Skrót na Macu:
- Otwórz Spotlight, naciskając Command + spacja.
- W wyszukiwarce Spotlight wpisz Terminal.
Poruszanie się po terminalu
# See your current location - abbreviation for 'print working directory'.
pwd
# Change to a new location - abbreviation for 'change directory'.
cd /Users/jsmith/Downloads
# Navigate into a child directory called `some_directory`. This only works if
# `some_directory` is a child of the current directory.
cd some_directory
# Navigate into the parent of the current directory. `..` is shorthand for parent.
cd ..
# Return home.
cd
# Change directories to a folder called `my_folder` that is within the current
# directory.
cd my_folder ```
#### File Path Shorthand `~`
The `~` is generally short for "home". Home can be configured to mean different
things for different users and across different operating systems, but in the
example above, for a Mac user named "jsmith", the `~` is short for that user's
home directory: `/Users/jsmith`.
This means that `~/Downloads` and `/Users/jsmith/Downloads` are the same for
this user. But starting with a `~` allows us to specify absolute file paths
(agnostic of your current working directory, and starting at the root `/`)
without having to write out a full path each time.
### <a id="view"></a>Viewing the Contents of Folders
```bash
# See files and folders in current location - this is an abbreviation for 'list'.
ls
Tworzenie plików i folderów
Tworzenie plików
# Make a file - this will create a file in the current folder.
touch my_text_file.txt
# Make a file - this will create a file on the Desktop.
touch ~/Desktop/my_new_style_sheet.css
# Make multiple files - this will create multiple files in the current folder.
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html
Tworzenie folderów
# Make a folder - this will create a directory in the current folder.
mkdir my_new_folder
# Make a folder - this will create a directory on your Desktop.
mkdir ~/Desktop/my_new_desktop_folder
# Make multiple folders - this will create multiple folders in the current
# directory.
mkdir folder_one folder_two folder_three
Przenoszenie plików i folderów
Przenoszenie plików
# Move a file - this will move the file `my_file.txt` into the folder named
# `my_folder` that is in the current folder.
mv my_file.txt my_folder
# Note that this will rename the file instead of moving it if the destination
# folder does not yet exist. Read below for more details on renaming.
# Move a file - this will move the file `my_file.txt` into the folder named
# `my_desktop_folder` that is located on the Desktop.
mv my_file.txt ~/Desktop/my_desktop_folder
Przenoszenie folderów
# Move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder.
mv my_child_folder my_parent_folder
# Move a directory - this will move the folder `my_folder` into the folder
# named `my_desktop_folder` that is located on the Desktop.
mv my_folder ~/Desktop/my_desktop_folder
Przenoszenie to zmiana nazwy
Pamiętaj, że mv
to to samo polecenie, które służy do zmiany nazw plików i folderów.
# Rename a file from `old_name.txt` to `new_name.txt`.
mv old_name.txt new_name.txt
Kopiowanie plików i folderów
Kopiowanie plików
# Copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder.
cp ~/Desktop/my_file.txt ~/Documents
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt` within
# the same folder.
cp my_file.txt my_file_copy.txt
Kopiowanie folderów
# Copy a directory named `my_folder` (and its contents) from your Desktop
# folder to a folder called `my_folder_copy` in your Documents folder.
cp -r ~/Desktop/my_folder ~/Documents/my_folder_copy
# Copy a directory named `my_folder` (and its contents) from the current
# working directory to a folder called `my_folder_copy` in the current working
# directory.
cp -r my_folder my_folder_copy
Usuwanie plików i folderów
Usuwanie plików
# Delete a file in the current working directory.
rm unwanted_file.txt
# Delete a file using its exact location and name.
rm ~/Desktop/unwanted_file.txt
Usuwanie folderów
# Delete an empty folder.
rmdir empty_directory
# Delete a folder which contains other files or folders.
rm -r directory_which_isnt_empty
Wskazówki i porady
- Ćwicz korzystanie z wiersza poleceń, nawet jeśli nie uważasz, że jest Ci potrzebny. Z czasem będziesz to robić coraz lepiej.
- Klawisz
tab
automatycznie uzupełni nazwę pliku lub folderu (wielkość liter może mieć znaczenie). - Jeśli pozostanie tylko 1 pasujący plik lub folder, zostanie on automatycznie uzupełniony.
- Jeśli istnieje wiele pasujących plików lub folderów, naciśnij dwukrotnie klawisz Tab, aby wyświetlić listę pozostałych wyników.
- Strzałki w górę i w dół umożliwiają przełączanie się między historią poleceń, dzięki czemu nie musisz ich ponownie wpisywać.
- Aby wyczyścić okno terminala, użyj polecenia
clear
. Dzięki temu zachowasz wszystkie wcześniejsze działania – przewiń w górę, aby je zobaczyć. - Aby ponownie uruchomić terminal, użyj kodu
reset
. Nie spowoduje to wyświetlenia wcześniejszych działań, ale może rozwiązać kilka problemów, jeśli terminal zacznie działać w nieprzewidywalny sposób. - Naciśnij
option
+arrow
, aby przenieść kursor o słowo
Podsumowanie sprawdzonych metod
- Poruszaj się po terminalu za pomocą klawiszy
cd
,cd ..
lubcd <folder name>
. - Wyświetl zawartość folderów za pomocą
ls
. - Twórz pliki za pomocą
touch
, a foldery za pomocąmkdir
. - Przenoszenie plików i folderów za pomocą
mv <item to move> <destination>
. - Kopiuj pliki i foldery za pomocą
cp <item to copy> <destination>
. - Usuń pliki i foldery za pomocą
rm <item to remove>
.
Pytanie 1
Jak zidentyfikować bieżący katalog roboczy?
pwd
ls
cd
mkdir
touch
Pytanie 2
Jak przejść o 2 poziomy wyżej od bieżącego katalogu roboczego?
mv ~
cd ../..
mv up/up
cd ^(2)
Pytanie 3
Którego polecenia użyjesz, aby zmienić nazwę pliku?
mv
cd
ls
python
rename
Pytanie 4
Dlaczego polecenie mv script.py
może wywołać błąd?
- Ponieważ „
script.py
” to nieprawidłowa nazwa pliku. - Ponieważ po poleceniu
mv
nie mogą występować żadne inne informacje. - To podchwytliwe pytanie. Nie spowoduje ono błędu.
- Przeniesienie pliku wymaga co najmniej 2 argumentów – miejsca docelowego i miejsca docelowego.
Pytanie 5
Co zrobi polecenie cd ~
?
- Zmień katalog roboczy na katalog główny.
- Powtórz poprzednie polecenie.
- używać algorytmu do określania najbardziej przydatnego w danym momencie polecenia;
- Zgłoś błąd.
Pytanie 6
Który z poniższych powodów NIE jest powodem używania klawisza Tab do automatycznego uzupełniania nazw plików?
- Oszczędza czas.
- Pomaga to wyeliminować błędy ortograficzne.
- Ponieważ wymaga mniej mocy obliczeniowej.
Pytanie 7
Jeśli nowy programista spróbuje utworzyć plik o nazwie „my script.py
”, dlaczego polecenie touch my script.py
nie zadziała?
- Ponieważ
touch
nie może tworzyć nowych plików. - Ponieważ
.py
nie jest prawidłowym rozszerzeniem pliku. - Utworzy 2 pliki: „
my
” i „script.py
”, a nie tylko 1. - Nie można tworzyć nowych plików z wiersza poleceń.
Pytanie 1
Jak zidentyfikować bieżący katalog roboczy?
pwd
Pytanie 2
Jak przejść o 2 poziomy wyżej od bieżącego katalogu roboczego?
Za pomocą symbolu cd ../..
możesz przejść o 2 poziomy wyżej (każdy symbol ..
oznacza 1 poziom wyżej).
Pytanie 3
Którego polecenia użyjesz, aby zmienić nazwę pliku?
mv
służy do przenoszenia pliku z jednej lokalizacji do drugiej i może być używane do zmiany nazwy pliku.
Pytanie 4
Dlaczego polecenie mv script.py
może wywołać błąd?
Polecenie mv
wymaga 2 argumentów: pliku źródłowego i pliku docelowego.
Pytanie 5
Co zrobi polecenie cd ~
?
Zmieni katalog roboczy na katalog główny. Znak specjalny ~ służy do identyfikowania katalogu głównego bieżącego użytkownika. Można go też używać w połączeniu z inną nazwą użytkownika: ~użytkownik2, aby wskazać jego folder domowy.
Pytanie 6
Który z poniższych powodów NIE jest powodem używania klawisza Tab do automatycznego uzupełniania nazw plików?
Ponieważ wymaga mniejszej mocy obliczeniowej to nieprawidłowa odpowiedź. tab
wymaga (często znikomej) mocy obliczeniowej do skanowania folderów w poszukiwaniu nazwy pliku, która ma zostać uzupełniona automatycznie, ale oszczędza czas i pozwala uniknąć błędów ortograficznych.
Pytanie 7
Jeśli nowy programista spróbuje utworzyć plik o nazwie „my script.py
”, dlaczego polecenie touch my script.py
nie zadziała?
Zamiast jednego utworzy dwa pliki. Polecenie touch
utworzy nowe pliki. W terminalu spacje są separatorami, a nie znakami, które mają być uwzględnione w nazwie pliku. Najlepiej całkowicie ich unikać, ale jeśli musisz ich użyć, nazwę pliku należy ująć w podwójne cudzysłowy:
touch "my script.py"
Pytanie 1
Polecenie terminala do zmiany katalogów to:
move
mkdir
pwd
cd
Pytanie 2
Jakie polecenie należy uruchomić, aby przejść do folderu nadrzędnego bieżącego katalogu roboczego?
cd up
cd .
cd ..
cd ~
Pytanie 3
Które polecenie służy do tworzenia plików?
touch
mkdir
create
pwd
Pytanie 4
Które z tych poleceń utworzy 2 pliki o nazwach index.html
i style.css
?
touch index.html, touch style.css
touch index.html, style.css
touch index.html style.css
touch index.html + style.css
Pytanie 5
Jakiego polecenia używasz, aby zmienić nazwę pliku lub folderu?
rename
move
mv
rm
Pytanie 6
Jakiego przełącznika wymagają polecenia rm
i cp
, aby działać w przypadku folderów?
-f
-r
-x
-d
Pytanie 7
Aby przenieść projects
do ~/Documents
i zmienić jego nazwę na Projects
, które polecenie należy wpisać w pustym polu?
cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
pwd
cd projects
mv ~ projects
cd ~/Documents
ls
Pytanie 8
Co zrobi to polecenie?
rm -r projects
- Usuń plik o nazwie
projects
- Usuń folder o nazwie
projects
- Zmienianie nazwy pliku o nazwie
projects
- Wyszukaj w zawartości bieżącego katalogu
projects
Pytanie 1
Polecenie terminala do zmiany katalogów to:
Polecenie terminala do zmiany katalogów to cd
. Samo polecenie jest skrótem od „change directory” (zmień katalog).
Pytanie 2
Jakie polecenie należy uruchomić, aby przejść do folderu nadrzędnego bieżącego katalogu roboczego?
Polecenie służące do przechodzenia do folderu nadrzędnego to cd ..
Pytanie 3
Które polecenie służy do tworzenia plików?
Polecenie tworzenia plików to touch
Pytanie 4
Które z tych poleceń utworzy 2 pliki o nazwach index.html
i style.css
?
Polecenie touch index.html style.css
utworzy 2 pliki. Nie jest wymagany przecinek, a w ten sposób można utworzyć dowolną liczbę plików, rozdzielając je spacjami.
Pytanie 5
Jakiego polecenia używasz, aby zmienić nazwę pliku lub folderu?
Chociaż oznacza „przenieś” i może służyć do przenoszenia plików lub folderów, mv
może też służyć do zmiany nazw plików i folderów.
Pytanie 6
Jakiego przełącznika wymagają polecenia rm
i cp
, aby działać w przypadku folderów?
Polecenia rm
i cp
wymagają flagi -r
, aby działać w przypadku folderów, ponieważ flaga -r
oznacza „rekursywny” i ponownie uruchamia polecenie dla wszystkich plików i folderów znajdujących się wewnątrz.
Pytanie 7
Aby przenieść projects
do ~/Documents
i zmienić jego nazwę na Projects
, które polecenie należy wpisać w pustym polu?
cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
Ponieważ zaczynamy w katalogu domowym, musimy uruchomić polecenie cd ~/Documents
, aby ostateczne polecenie zostało uruchomione w odpowiednim katalogu.
Pytanie 8
Co zrobi to polecenie?
rm -r projects
Polecenie usunie plik LUB folder o nazwie projects
, ponieważ zostało wywołane z użyciem flagi -r
lub flagi rekurencyjnej. Bez tego flagi to polecenie działałoby tylko w przypadku usuwania pliku o tej nazwie.