- Dave McKay
@TheGurkha
- Marzec 27, 2020, 8:00am EDT
Dzięki linuksowemu poleceniu screen
możesz przesuwać uruchomione aplikacje terminalowe na tło i wyciągać je do przodu, gdy chcesz je zobaczyć. Obsługuje również wyświetlanie na podzielonym ekranie i działa w połączeniach SSH, nawet po rozłączeniu i ponownym podłączeniu!
Czym jest polecenie screen?
Polecenie screen
jest multiplekserem terminala, i jest absolutnie pełne opcji. Powiedzieć, że może zrobić wiele, jest największym niedopowiedzeniem. Strona man liczy ponad 4100 linii.
Następujące są najczęstsze przypadki użycia polecenia screen
, które omówimy w dalszej części artykułu:
- Standardową operacją jest utworzenie nowego okna z powłoką w nim, uruchomienie polecenia, a następnie zepchnięcie okna do tła (zwane „odłączaniem”). Kiedy chcesz zobaczyć jak radzi sobie twój proces, możesz ponownie wyciągnąć okno na pierwszy plan („ponowne dołączenie”) i użyć go ponownie. Jest to świetne rozwiązanie dla długich procesów, których nie chcesz przypadkowo zakończyć zamykając okno terminala.
- Gdy już masz uruchomioną sesję
screen
, możesz tworzyć nowe okna i uruchamiać w nich inne procesy. Możesz łatwo przeskakiwać między oknami, by monitorować ich postęp. Możesz także podzielić okno terminala na pionowe lub poziome regiony i wyświetlać różnescreen
okna w jednym oknie. - Możesz połączyć się ze zdalną maszyną, rozpocząć sesję
screen
i uruchomić proces. Możesz odłączyć się od zdalnego hosta, połączyć się ponownie, a twój proces będzie nadal działał. - Możesz współdzielić sesję
screen
pomiędzy dwoma różnymi połączeniami SSH, dzięki czemu dwie osoby mogą zobaczyć to samo, w czasie rzeczywistym.
Instalacja screen
Aby zainstalować screen
na ubuntu, użyj tej komendy:
sudo apt-get install screen
Aby zainstalować screen
na Manjaro, użyj następującego polecenia:
sudo pacman -Sy screen
W systemie Fedora wykonujemy następujące czynności:
sudo dnf install screen
Rozpoczęcie pracy z screenem
Aby uruchomić screen
, wystarczy wpisać jak poniżej i nacisnąć Enter:
screen
Zobaczysz stronę z informacjami o licencji. Możesz nacisnąć Spację, aby przeczytać drugą stronę lub Enter, aby wrócić do wiersza poleceń.
Zostałeś w wierszu poleceń i wydaje się, że nic wielkiego się nie stało. Jednak teraz uruchamiasz powłokę wewnątrz multipleksowanego emulatora terminala. Dlaczego jest to dobra rzecz? Cóż, rozpocznijmy proces, który zajmie nam dużo czasu. Pobierzemy kod źródłowy najnowszego jądra Linuksa i przekierujemy go do pliku o nazwie latest_kernel.zip
.
W tym celu wpiszemy następujące polecenie:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip
Zaczyna się pobieranie, a wyjście curl
pokazuje nam postęp.
Nie możemy pokazać obrazu kolejnego fragmentu, ponieważ jest to sekwencja klawiszy. Wpisujesz Ctrl+A, zwalniasz te klawisze, a następnie naciskasz d, aby odłączyć ekran.
Proces pobierania nadal trwa, ale okno pokazujące pobieranie jest usuwane. Powracasz do okna terminala, z którego uruchomiłeś sesję screen
. Komunikat informuje Cię, że okno screen
o nazwie 23167.pts-0.howtogeek
zostało odłączone.
Potrzebujesz numeru z początku nazwy okna, aby je ponownie dołączyć. Jeśli go zapomnisz, zawsze możesz użyć opcji -ls
(list), jak pokazano poniżej, aby uzyskać listę odłączonych okien:
screen -ls
Gdy będziesz gotowy, możesz użyć opcji -r
(reattach) i numeru sesji, aby ponownie ją dołączyć, w następujący sposób:
screen -r 23167
Okno, które pracowało w tle, jest teraz przywracane do okna terminala, tak jakby nigdy go nie opuściło.
Jeśli jest to proces, który ma przebiegać do końca, to w końcu się zakończy. Jeśli jest to proces ciągły, w końcu będziesz chciał go zakończyć. Tak czy inaczej, kiedy proces się zakończy, możesz wpisać exit
, aby wyjść z screen
. Alternatywnie, możesz nacisnąć Ctrl+A, a następnie K, aby przymusowo zabić okno.
Podaj następującą komendę:
exit
Powrócisz do poprzedniego okna terminala, które nadal będzie pokazywać komendę, której użyłeś do ponownego dołączenia okna. Ponieważ zamknęliśmy nasze jedyne odłączone okno, otrzymujemy komunikat, że screen
kończy pracę.
RELATED: How to Use curl to Download Files From the Linux Command Line
Using Named screen Sessions
Możesz użyć opcji -S
(session name), aby nazwać swoją screen
sesję. Jeśli używasz pamiętnej nazwy zamiast numerycznej tożsamości sesji, wygodniej jest ponownie połączyć się z sesją. Aby nazwać naszą sesję „bigfile”, wpisujemy następujące polecenie:
screen -S bigfile
Gdy screen
uruchamiamy naszą sesję, widzimy puste okno z wierszem poleceń. Zamierzamy pobrać duży plik, więc za przykład może posłużyć nam długo trwający proces.
Wpisujemy następujące:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
Po rozpoczęciu pobierania wciskamy Ctrl+A, a następnie D, aby odłączyć sesję. Wpisujemy następujące polecenie, aby użyć opcji -ls
(list) z screen
, aby zobaczyć szczegóły naszej odłączonej sesji:
screen -ls
Za identyfikatorem numerycznym (23266) widzimy nazwę naszej sesji (bigfile). Wpisujemy następujące polecenie, łącznie z nazwą sesji, aby ją ponownie dołączyć:
screen -r bigfile
Jesteśmy ponownie podłączeni do naszego okna pobierania i widzimy, że długie pobieranie nadal trwa.
Po zakończeniu pobierania wpisujemy exit
, aby zamknąć okno sesji.
Używanie ekranu z wieloma oknami
Do tej pory używaliśmy screen
, aby umieścić pojedynczy proces w tle w odłączonym oknie. Jednakże, screen
potrafi zrobić znacznie więcej. Następnie uruchomimy kilka procesów, które pozwolą nam monitorować niektóre aspekty naszego komputera.
Wpisujemy następujące polecenie, aby uruchomić sesję ekranową o nazwie „monitor”:
screen -S monitor
W wierszu poleceń w naszej nowej sesji okienkowej uruchomimy dmesg
i użyjemy opcji -H
(human-readable) i -w
(wait for new messages). Spowoduje to wyświetlenie komunikatów z bufora jądra; nowe komunikaty będą się pojawiać w miarę ich pojawiania się.
Wpisujemy następujące:
dmesg -H -w
Wystawiamy istniejące komunikaty. Nie jesteśmy odsyłani do wiersza poleceń, ponieważ dmseg
czeka na nowe wiadomości i będzie je wyświetlał w miarę ich napływania.
RELATED: How to Use the dmesg Command on Linux
Chcemy uruchomić inną aplikację, więc potrzebujemy nowego okna screen
. Wciskamy Ctrl+A, a następnie C, aby utworzyć nowe okno. Będziemy używać watch
do wielokrotnego uruchamiania vmstat
, dzięki czemu będziemy mieli często aktualizowany obraz wykorzystania pamięci wirtualnej na naszym komputerze.
W nowym wierszu poleceń wpisujemy następujące polecenia:
watch vmstat
Wyjście vmstat
pojawia się i aktualizuje co dwie sekundy.
Nasze dwa procesy są teraz uruchomione. Aby przeskakiwać pomiędzy oknami screen
, naciskamy Ctrl+A, oraz numer okna. Pierwsze okno, które utworzyliśmy to okno zero (0), następne to okno 1, i tak dalej. Aby przejść do pierwszego okna (tego dmesg
jednego), naciskamy Ctrl+A i 0.
Jeśli naciśniemy Ctrl+A i 1, to wrócimy do okna vmstat
.
To całkiem fajne! Możemy nacisnąć Ctrl+A, a następnie D, aby odłączyć się od tej sesji; możemy dołączyć ponownie później. Obie sesje będą nadal działały. Ponownie, aby przełączać się między oknami, naciskamy Ctrl+A i numer (0 lub 1) okna, na które chcemy się przełączyć.
Przejdźmy do następnego kroku i obejrzyjmy oba ekrany w jednym oknie. Gdy to zrobisz, rozciągniesz swoje okno terminala do rozmiaru, który czyni ten krok użytecznym. Nasze przykłady są ograniczone do rozmiaru naszych zrzutów ekranu, więc nasze okna będą wyglądały na nieco ciasne.
Aby to zrobić, wciskamy Ctrl+A, a następnie Shift+S (wymagane jest duże „S”).
Okno dzieli się na dwa „regiony.”
Górny region nadal wyświetla vmstat
, a dolny jest pusty. Kursor jest podświetlony na poniższym zrzucie ekranu. Aby przenieść go do dolnego regionu, naciskamy Ctrl+A, a następnie Tab.
Kursor przenosi się do dolnego regionu, który tak naprawdę jest tylko pustą przestrzenią. Nie jest to powłoka, więc nie możemy w niej nic wpisać. Aby uzyskać użyteczne wyświetlanie, naciskamy Ctrl+A, a następnie naciskamy „0”, aby wyświetlić okno dmesg
w tym regionie.
Daje nam to oba wyjścia na żywo w jednym dzielonym oknie. Jeśli naciśniemy Ctrl+A i D aby odłączyć okno, a następnie ponownie je dołączyć, stracimy widok podzielonego okna. Możemy go jednak przywrócić za pomocą następujących skrótów klawiaturowych:
- Ctrl+A, S: Podziel okno poziomo.
- Ctrl+A, Tab: Przejdź do dolnego regionu.
- Ctrl+A, 0: Wyświetl zero okna w dolnym regionie.
Możemy pójść jeszcze o krok dalej. Podzielimy teraz dolne okno w pionie i dodamy trzeci proces do wyświetlania. Gdy kursor znajduje się w dolnym regionie, naciskamy Ctrl+A i C, aby utworzyć nowe okno z powłoką. Dolny region wyświetla nowe okno i daje nam znak zachęty do wykonania polecenia.
Następnie uruchamiamy komendę df
w celu sprawdzenia wykorzystania systemu plików:
df
Gdy widzimy, że df
działa, naciskamy Ctrl+A i znak pipe (|)
. Spowoduje to podzielenie dolnego regionu w pionie. Wciskamy Ctrl+A i Tab, aby przejść do nowego regionu. Następnie naciskamy Ctrl+A i 0, aby wyświetlić okno dmesg
.
Możesz również przechodzić z regionu do regionu i dodawać więcej pionowych lub poziomych podziałów. Oto kilka bardziej użytecznych kombinacji klawiszy:
- Ctrl+A: Przeskakiwanie tam i z powrotem między bieżącym i poprzednim regionem.
- Ctrl+A, Q: Zamykanie wszystkich regionów oprócz bieżącego.
- Ctrl+A, X: Zamknij bieżący region.
Używanie ekranu przez SSH
Z pomocą screen
, możesz rozpocząć sesję okna, odłączyć ją, aby nadal działała w tle, wylogować się lub wejść z powrotem i ponownie dołączyć sesję.
Wykonajmy połączenie SSH do naszego komputera z innego komputera za pomocą polecenia ssh
. Musimy podać nazwę konta, z którym będziemy się łączyć oraz adres zdalnego komputera.
Dla naszego przykładu wpisujemy następujące:
ssh [email protected]
Po uwierzytelnieniu się na zdalnym komputerze i zalogowaniu się, wpisujemy poniższe polecenie, aby rozpocząć sesję screen
o nazwie „ssh-geek”:
screen -S ssh-geek
Dla celów demonstracyjnych uruchomimy top
w oknie screen
, ale można uruchomić dowolny długo trwający lub niekończący się proces.
Wpiszemy następujące:
top
Gdy top
jest uruchomiony w oknie, naciskamy Ctrl+A, a następnie D, aby odłączyć okno.
Powracamy do oryginalnego, zdalnego okna terminala.
Jeśli wpiszemy exit
, jak pokazano poniżej, rozłącza to sesję SSH i wracamy do naszego lokalnego komputera:
exit
W celu ponownego nawiązania połączenia wpisujemy:
ssh [email protected]
Po ponownym nawiązaniu połączenia i zalogowaniu się możemy wpisać poniższe polecenie, aby ponownie dołączyć sesję screen
:
screen -r ssh-geek
Jesteśmy teraz ponownie połączeni z naszą wciąż działającą instancją top
.
To jest świetne rozwiązanie, jeśli chcesz rozpocząć proces na jednej maszynie, a następnie kontynuować go tam, gdzie go przerwałeś na innej.
RELATED: How to Create and Install SSH Keys From the Linux Shell
Sharing a screen Session
Możesz także użyć sesji screen
aby pozwolić dwóm osobom widzieć i współdziałać z tym samym oknem. Załóżmy, że ktoś z Fedorą na swoim komputerze chce się połączyć z naszym serwerem Ubuntu.
Wpisałby następujące polecenie:
ssh [email protected]
Po nawiązaniu połączenia, uruchamia sesję ekranową o nazwie „ssh-geek” używając opcji -S (nazwa sesji). Używa również opcji -d
(detach) i -m
(enforced creation), aby utworzyć nową screen
sesję, która jest już odłączona.
Wpisuje następujące elementy:
screen -d -m -S ssh-geek
Wpisuje poniższe, korzystając z opcji -X
(tryb wieloekranowy) w celu dołączenia sesji:
screen -X ssh-geek
Na komputerze Manjaro inna osoba łączy się z komputerem Ubuntu za pomocą tych samych danych uwierzytelniających, jak pokazano poniżej:
ssh [email protected]
Po nawiązaniu połączenia wpisuje komendę screen
i używa opcji -X (tryb wieloekranowy), aby dołączyć do sesji w tym samym oknie, w następujący sposób:
screen -X ssh-geek
Teraz, cokolwiek wpisze jedna z osób, druga zobaczy. Na przykład, gdy jedna osoba wyda polecenie date, obie zobaczą je w trakcie wpisywania, a także jego wyjście.
Obydwie osoby dzielą teraz sesję screen
, która jest uruchomiona na zdalnym komputerze Ubuntu.
Jak na oprogramowanie, które po raz pierwszy ujrzało światło dzienne w 1987 roku, screen
wciąż daje niezłą porcję produktywności. Zapoznanie się z nim będzie dobrze spędzonym czasem!
POWIĄZANE: 37 Important Linux Commands You Should Know
Dave McKay po raz pierwszy używał komputerów, gdy modna była taśma dziurkowana, i od tego czasu zajmuje się programowaniem. Po ponad 30 latach pracy w branży IT, obecnie jest pełnoetatowym dziennikarzem technologicznym. W swojej karierze pracował jako niezależny programista, kierownik międzynarodowego zespołu programistów, kierownik projektu usług informatycznych, a ostatnio jako inspektor ochrony danych. Dave jest ewangelistą Linuksa i zwolennikiem open source.Read Full Bio ”