Podstawy linii poleceń – Część 1

Czym jest linia poleceń i do czego służy?

Linia poleceń to program, który przyjmuje komendy do wykonania i wypisuje na ekran ich wynik. Będąc programistą, ciężko obejść się bez linii poleceń – kompilujemy i uruchamiamy z niej aplikacje Java, korzystamy z Mavena, zarządzamy repozytorium Gita i uruchamiamy wiele innych programów i skryptów.

Co prawda większość z opisanych powyżej zadań możemy wykonać korzystając z graficznych narzędzi, ale, po pierwsze, nie zawsze będą one dostępne do użycia, a po drugie, korzystanie z linii poleceń do wykonania niektórych zadań jest po prostu szybsze. Niekiedy nie da się też wykonać pewnej operacji bez pomocy linii poleceń.

Poza uruchamianiem różnego rodzaju aplikacji, które zainstalowaliśmy w naszym systemie (jak Maszyna Wirtualna Java, Maven, Git), linia poleceń oferuje bardzo wiele komend, z których możemy korzystać. W jednym z kolejnych rozdziałów zaprezentuję kilka z nich.

Linia poleceń w systemie Windows prezentuje się następująco:

Linia poleceń duże okno
Inną nazwą linii poleceń w systemie Windows, z którą możesz się spotkać, to linia komend.

Linia poleceń w systemie Linux

Linia poleceń w systemie Linux to terminal. Od czasus do czasu będziemy w pracy łączyć się z serwerem, który będzie korzystał z jednej z dystrybucji systemu Linux, i do naszej dyspozycji będzie właśnie terminal bez graficznego interfejsu. Będziemy wtedy musieli wszystkie operacje wykonywać za pomocą komend.

Terminal w Linux jest zaawansowanym narzędziem oferującym ogromną liczbę komend, a w połączeniu z językiem powłoki takim jak Bash, możemy tworzyć skomplikowane skrypty wykonujące różne zadania.

Wiele opisanych w tym artykule zagadnień, takich jak standardowe wejście i wyjście, uruchamianie komend czy łączenie wykonania komend (pipe) znajdziesz także w terminalu Linux. Z racji tego, że korzystanie z terminala jest bardziej skomplikowane i warto także nauczyć się pisać proste skrypty, napiszę w przyszłości osobny artykuł dedykowany terminalowi Linux.

Uruchamianie i korzystanie z linii poleceń

Najprostszym i najszybszym sposobem na uruchomienie linii poleceń jest skorzystanie ze skrótu Znak Windows + r na klawiaturze (znak Windows to klawisz znajdujący się obok lewego przycisku Ctrl – jest na nim logo Windows) – spowoduje to otworzenie poniższego okna Uruchamianie:

Uruchamianie linii polecen

W polu Otwórz wpisujemy cmd i wciskamy Enter. Okno Uruchamianie zostanie zamknięte, a zamiast niego pojawi się okno linii poleceń:

Linia polecen

Polecam w tym momencie kliknąć prawym przyciskiem myszy na pasku otwartych aplikacji na linię poleceń (wyświetlaną jako Wiersz polecenia) i Przypiąć do paska zadań:

Przypnij linię poleceń

Dzięki temu będziemy mogli uruchamiać linię poleceń kliknięciem na pasku zadań. Dodatkowo, możemy od teraz uruchamiać linię poleceń w jeszcze prostszy sposób – korzystając ze skrótu klawiaturowego Znak Windows + 1. Ten skrót służy do uruchamiania n-tej aplikacji z paska zadań, więc jeżeli umieścimy na pierwszej pozycji właśnie linię poleceń, to tym prostym skrótem będziemy mogli ją uruchamiać.

Jak korzystać z linii poleceń?

Gdy uruchomimy linię poleceń, zobaczymy krótki opis wersji naszego systemu operacyjnego Windows:

Linia polecen

Poniżej opisu systemu znajduje się następująca linia:

C:\Users\Przemek>_

Ta linia dzieli się na dwa elementy, które rozdzielone są znakiem > (znak większości):

  • C:\Users\Przemek – to katalog na dysku naszego komputera, który jest naszym aktualnym katalogiem roboczymwszelkie komendy, który wykonamy, będą działały na tym katalogu (o ile wymagają one do pracy jakiegoś katalogu – nie wszystkie komendy działają na rzecz katalogów i plików),
  • po prawej stronie znaku > miga znak podkreślenia _, który określa gotowość do przyjmowania komend do wykonania. Wpisując komendy, będą one pojawiały się po prawej stronie znaku >, a znak _ będzie się przesuwał w prawo.

Aby wykonać wpisaną komendę, używamy klawisza Enter na klawiaturze. Dodatkowo, jeżeli popełnimy błąd w komendzie lub chcemy coś dopisać, możemy użyć strzałek w prawo i lewo na klawiaturze, aby przesunąć znak _ do miejsca we wpisanej komendzie, które chcemy zmodyfikować.

Spróbuj teraz wykonać dwie zaznaczone poniżej komendy:

C:\Users\Przemek>mkdir nowy_folder C:\Users\Przemek>cd nowy_folder C:\Users\Przemek\nowy_folder>_

Pierwsza komenda tworzy nowy folder o nazwie nowy_folder w aktualnym katalogu, czyli w wyniku wykonania tej komendy utworzony zostanie folder C:\Users\Przemek\nowy_folder. Po zatwierdzeniu tej komendy Enterem wypisana została pusta linia i ponownie pojawiła się linia z aktualnym katalogiem i migającym podkreśleniem – komenda mkdir nie wypisała żadnego komunikatu – wykonała swoje zadanie i zakończyła się.

Wpisujemy kolejną komendę – cd nowy_folder. Komenda cd to skrót od change directory, czyli zmień katalog. Komenda ta powoduje zmianę aktualnego katalogu roboczego – w tym przypadku chcemy przejść do nowo utworzonego katalogu nowy_folder, więc podajemy go jako argument do komendy cd i zatwierdzamy Enterem. Także i ta komenda nie wypisała na ekran żadnej informacji, jednak jej efekt widać w kolejnej linii – nasz katalog roboczy zmienił się z C:\Users\Przemek na C:\Users\Przemek\nowy_folder. Od tej pory to ten katalog będzie stanowił punkt wyjścia dla wykonania kolejnych komend. Do komendy cd wrócimy w jednym z kolejnych rozdziałów – jest to jedna z najczęściej używanych komend.

Jeżeli spróbowalibyśmy przejść do katalogu, który nie istnieje, komenda cd wypisałaby komunikat błędu, a katalog roboczy nie zostałby zmieniony:
C:\Users\Przemek>cd inny_katalog System nie może odnaleźć określonej ścieżki. C:\Users\Przemek>

Poniższa animacja prezentuje wprowadzenie i wywołanie powyższych komend oraz obrazuje, jak używać strzałek do modyfikacji już wprowadzonej komendy – zauważ, że popełniłem błąd wpisując nazwę katalogu – wróciłem do miejsca błędu i poprawiłem nazwę:

Przykład komend mkdir i cd

Uruchamianie komend i aplikacji oraz przekazywanie argumentów

Jak widzieliśmy w poprzednim rozdziale, komendy w linii poleceń uruchamiamy poprzez wpisanie ich nazwy oraz zatwierdzenie Enterem.

Poza komendami dedykowanymi dla linii poleceń, takimi jak mkdir oraz cd, możemy z poziomu linii poleceń uruchamiać także różne aplikacje, jak na przykład kompilator języka Java, który jest programem o nazwie javac. Dla ułatwienia, gdy w tym artykule będę używał terminu "komenda", będę miał na myśli zarówno komendy takie jak mkdir i cd, a także inne aplikacje dostępne w linii poleceń, jak np. kompilator javac.

To, jakie aplikacje będą dostępne z linii poleceń, zależne jest od ustawień zmiennej systemowej o nazwie path. Opowiem o tej zmiennej więcej w jednym z kolejnych rozdziałów.

Argumenty komend

Komendy, które uruchamiamy, mogą przyjmować argumenty. Zależnie od programu, mogą to być argumenty wymagane bądź opcjonalne. Niektóre komendy nie przyjmują w ogóle argumentów, a inne mogą wykonać wiele różnych zadań w zależności od tego ile i jakie argumenty otrzymają.

Aby przekazać argument do komendy, podajemy go po jej nazwie. Powinien on być oddzielony od niej znakiem spacji. Możemy przekazać kolejne argumenty, także oddzielając je znakiem spacji. Dla przykładu, komenda cd przyjmuje jako argument katalog, do którego chcemy przejść:

C:\Users\Przemek>cd Desktop C:\Users\Przemek\Desktop>

Desktop to argument przekazany do komendy cd – jest to w tym przypadku nazwa katalogu.

Jeżeli w argumencie, który chcemy przekazać, występuje znak spacji, to najlepiej cały argument ująć w cudzysłowy " ". W przeciwnym razie komenda może potraktować je jako kilka argumentów. Dla przykładu, komenda mkdir tworzy podany jako argument katalog – jeżeli spróbujemy utworzyć katalog, który ma w nazwie spację, to w wyniku jej działania utworzone zostaną dwa katalogi, a nie jeden:

C:\Users\Przemek\Desktop>mkdir moj katalog C:\Users\Przemek\Desktop>cd "moj katalog" System nie może odnaleźć określonej ścieżki. C:\Users\Przemek\Desktop>mkdir "moj katalog" C:\Users\Przemek\Desktop>cd "moj katalog" C:\Users\Przemek\Desktop\moj katalog>

Większość komend i aplikacji posiada specjalne argumenty, które mają określone nazwy. Takie argumenty nazywane są czasami opcjami komendy. Jeżeli przekażemy taki argument do komendy, to wykonana zostanie predefiniowana akcja. Zazwyczaj takie argumenty zaczynają się od pojedynczego lub podwójnego myślnika w przypadku większości aplikacji, które będziemy instalować w naszym systemie, a także w przypadku komend pochodzących z systemu Linux. W przypadku komend systemu Windows, zamiast myślnika stosowany jest znak slash /.

Spójrzmy na przykład – Maszyna Wirtualna Java, czyli program java, służący do uruchamiania aplikacji napisanych w języku Java, posiada argument o nazwie -version. Uruchomienie aplikacji java z linii poleceń z tym argumentem skutkuje wypisanie na ekran informacji o wersji Maszyny Wirtualnej Java zainstalowanej w naszym systemie:

C:\Users\Przemek\Desktop>java -version java version "12.0.2" 2019-07-16 Java(TM) SE Runtime Environment (build 12.0.2+10) Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing) C:\Users\Przemek\Desktop>

Komendy zazwyczaj posiadają wiele argumentów. Aby dowiedzieć się, jakie argumenty możemy przekazać do komendy i jaki będzie ich efekt, możemy przekazać do niej argument -help lub --help. Większość komend obsługuje taki argument, a efektem jego działania jest wypisanie na ekran informacji o komendzie, jej argumentach, oraz ich znaczeniu:

C:\Users\Przemek\Desktop>java -help Usage: java [options] <mainclass> [args...] (to execute a class) or java [options] -jar <jarfile> [args...] (to execute a jar file) or java [options] -m <module>[/<mainclass>] [args...] java [options] --module <module>[/<mainclass>] [args...] (to execute the main class in a module) or java [options] <sourcefile> [args] (to execute a single source-file program) Arguments following the main class, source file, -jar <jarfile>, -m or --module <module>/<mainclass> are passed as the arguments to main class. where options include: -cp <class search path of directories and zip/jar files> -classpath <class search path of directories and zip/jar files> ...reszta opisu została pominięta...

Widzimy powyżej, że aplikacja java posiada m. in. argument -cp, który służy do ustawiania ścieżki do klas, które mają być wykorzystywane podczas uruchomienia programu napisanego w języku Java.

W przypadku komend dedykowanych dla systemu Windows, argument -help nie jest obsługiwany. Zamiast tego możemy albo skorzystać z komendy help, której przekażemy jako argument nazwę innej komendy, o której chcemy się dowiedzieć więcej informacji, albo konkretnej komendzie przekazać argument /? (slash znak zapytania). Wynik będzie taki sam w obu przypadkach:

C:\Users\Przemek\Desktop>help cd

lub

C:\Users\Przemek\Desktop>cd /?

spowoduje wypisanie na ekran informacji o komendzie cd:

Displays the name of or changes the current directory. CHDIR [/D] [drive:][path] CHDIR [..] CD [/D] [drive:][path] CD [..] .. Specifies that you want to change to the parent directory. Type CD drive: to display the current directory in the specified drive. Type CD without parameters to display the current drive and directory. ...reszta opisu została pominięta...

Często zdarza się, że komendy posiadają argumenty, które z kolei także oczekują argumentów. W praktyce oznacza to, że taki "argument argumentu" to po prostu następny argument, jaki przekazaliśmy do komendy. Sama komenda odpowiedzialna jest za sprawdzenie, jakie argumenty przekazał jej użytkownik i wykonanie odpowiedniego zadania na ich podstawie.

Dla przykładu, Maszyna Wirtualna Java może uruchomić aplikację napisaną w języku Java, która zawarta jest w spakowanym archiwum klas Java, czyli pliku o rozszerzeniu .jar. Aby wskazać Maszynie Wirtualnej Java, że ma uruchomić aplikację zawartą w pliku .jar, przekazujemy jej argument o nazwie -jar, a kolejnym argumentem powinna być ścieżka do tego pliku .jar:

C:\Users\Przemek\Desktop>java -jar hello-world-app.jar

W tym przykładzie, hello-world-app.jar to argument skojarzony z argumentem -jar. Obie te wartości to po prostu argumenty przekazane do aplikacji java.

Zazwyczaj komendy możemy uruchamiać z wieloma argumentami "predefiniowanymi" i innymi argumentami. Warto zajrzeć do opisu konkretnej komendy, aby dowiedzieć się, co możemy za jej pomocą osiągnąć, i jakie opcje (predefiniowane argumenty) są dostępne, a także które z nich można łączyć. Czasem użycie pewnych argumentów wyklucza się nawzajem.

Jeśli chcesz dowiedzieć się jak obsługiwać argumenty przekazywane w lini poleceń w swoich programach napisanych w języku Java, zajrzyj do mojego artykułu Argumenty programów.

Wpisywanie komendy w kilku liniach

Czasem możemy mieć potrzebę wpisania komendy z wieloma argumentami. Zamiast wpisywać całość w jednej linii, możemy wprowadzić komendę w kilku liniach, jeżeli na końcu każdej linii (poza ostatnią) wprowadzimy znak ^ (tzw. daszek). Spójrzmy na prosty przykład:

C:\Users\Przemek>cd ^ More? Desktop C:\Users\Przemek\Desktop>

Powyższy sposób wprowadzenia komendy równoznaczny jest z wpisaniem po prostu cd Desktop. Ten sposób może okazać się przydatny przy bardziej skomplikowanych i długich komendach.

Efekty uruchomienia komend

Uruchomienie komendy może mieć kilka efektów:

  • komenda może wykonać swoje zadanie i nie wyświetlić żadnych informacji – jak już widzieliśmy, zachowuje się tak np. komenda cd,
  • komenda może wypisać w ramach swojego działania informacje o postępie działania i rezultacie – gdy budujemy projekt Java za pomocą Mavena, korzystając z komendy mvn install, na ekranie wypisywane są informacje związane z wykonaniem przez Maven poszczególnych faz budowy projektu,
  • działanie może zakończyć się błędem, ponieważ albo podaliśmy nieprawidłowe argumenty, albo w trakcie działania komendy coś poszło nie tak – dla przykładu, jeżeli komendzie cd podamy błędną nazwę katalogu, do którego chcemy przejść, to zobaczymy komunikat System nie może odnaleźć określonej ścieżki,
  • komenda może oczekiwać na wprowadzenie danych przez użytkownika i zatwierdzenie ich Enterem, potencjalnie kilka razy, i wykonać swoje zadanie – napisanie prostego programu w Javie, który liczy kwadrat podanej przez użytkownika liczby będzie działać właśnie w ten sposób – uruchomimy nasz program, który w wyniku swojego działania poprosi użytkownika (czyli nas) o podanie liczby, a gdy już ją podamy, odczyta ją i wypisze jej kwadrat. Innym przykładem może być tryb działania Maven, w którym korzystamy z generatora archetypów do wygenerowania szkieletu projektu,
  • uruchomiona komenda udostępnia pewną funkcjonalność, z której możemy korzystać do czasu, aż wyślemy sygnał, że chcemy skończyć jej używać.

Ostatni opisany powyżej efekt uruchomienia komendy możemy zobaczyć w akcji uruchamiając aplikację, która jest dostarczana wraz JDK, czyli Java Development Kit. JDK to zestaw narzędzi wymagany, aby programować w języku Java. Jednym z narzędzi, które dostajemy do dyspozycji po zainstalowaniu JDK, jest jshell.

Po uruchomieniu z lini komend jshell, dostajemy możliwość wpisywania instrukcji w języku Java, które zostaną wykonane po zatwierdzeniu ich enterem. Możemy wpisywać wiele komend – aplikacja będzie działała dopóki nie zażyczymy sobie, aby się zakończyła. Dzięki tej aplikacji możemy szybko pisać krótkie fragmenty kodu w celu przetestowania pewnego zagadnienia:

C:\Users\Przemek>jshell | Welcome to JShell -- Version 12.0.2 | For an introduction type: /help intro jshell> System.out.println("Witaj!"); Witaj! Jshell> C:\Users\Przemek\Desktop>

Aby zakończyć działanie tej aplikacji, używamy skrótu Ctrl + d.

Powyżej dwukrotnie wspomniałem o Mavenie. Maven to narzędzie służące do budowania i zarządzania projektami napisanymi w języku Java. Jeżeli chcesz nauczyć się Mavena od podstaw, to zajrzyj do mojego kursu Podstawy Maven.

Przerywanie wykonania komendy

Czasem możemy mieć potrzebę przerwać wykonywanie komendy. Powodem mogą być podane przez nas błędne argumenty komendy i chęć uruchomienia jej ponownie z innymi argumentami. Innym przykładem mogą być komendy, które działają tak długo, aż po prostu ich nie przerwiemy.

Do przerywania wykonania komend służy skrót klawiaturowy Ctrl + c. Powoduje on mniej więcej natychmiastowe przerwanie aktualnie wykonującej się komendy.

W poniższym przykładzie korzystamy z komendy ping. Komendy tej możemy użyć np. do sprawdzenia, czy mamy połączenie z internetem – wysyła one proste zapytanie do podanego serwera – jeżeli zwrócona zostanie odpowiedź, to znaczy, że mamy połączenie z siecią. Użyte argumenty -n 10 oznaczają, że podana strona ma zostać "spingowana" 10 razy, ale korzystając ze skrótu Ctrl + c przerwiemy jej wykonanie wcześniej:

C:\Users\Przemek>ping google.com -n 10 Pinging google.com [172.217.16.46] with 32 bytes of data: Reply from 172.217.16.46: bytes=32 time=6ms TTL=57 Reply from 172.217.16.46: bytes=32 time=8ms TTL=57 Reply from 172.217.16.46: bytes=32 time=6ms TTL=57 Ping statistics for 172.217.16.46: Packets: Sent = 3, Received = 3, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 6ms, Maximum = 8ms, Average = 6ms Control-C ^C C:\Users\Przemek>

Zauważmy zaznaczony powyżej napis Control-C oraz ^C – oznacza to, że użyty został skrót Ctrl + c do wysłania sygnału, aby komenda została przerwana.

Niektóre komendy nie zostaną przerwane, gdy skorzystamy ze skrótu Ctrl + c. W poprzednim rozdziale użyliśmy skrótu Ctrl + d, aby zakończyć działanie aplikacji jshell. Ten skrót wysyła sygnał "koniec danych" i taki sygnał w tym przypadku zadziałał. Jeżeli użycie skrótu Ctrl + c nie przynosi efektu, spróbuj skorzystać z kombinacji Ctrl + d.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Nie musisz podawać swojego imienia, e-mailu, ani strony www, aby opublikować komentarz. Komentarze muszą zostać zatwierdzone, aby były widoczne na stronie.