Przejdź do treści
Lekcja 13 z 117

Kurs › Moduł 1 › Lekcja 13

Midnight Commander i inne menedżery plików

⏱ ok. 9 min czytania· moduł 1: Praca w powłoce

Po tej lekcji: kursant obsługuje Midnight Commandera klawiszami F3–F10, kopiuje i przenosi pliki między dwoma panelami, edytuje je w mcedit, łączy się nim z serwerem przez SFTP i wie, jakie są inne menedżery plików w terminalu.

Wstęp

Kto pamięta Norton Commandera z lat dziewięćdziesiątych? Niebieskie okno, dwa panele, F5 kopiuje, F8 kasuje. Dla wielu ludzi to był pierwszy kontakt z komputerem poważniejszy niż pasjans.

Ten niebieski ekran żyje dalej. Na serwerach z Linuksem. Nazywa się Midnight Commander i jest jednym z najbardziej niedocenianych narzędzi admina. Kiedy musisz przejrzeć dwadzieścia folderów z logami, porównać dwa katalogi albo przerzucić kilka plików na inny serwer, a nie pamiętasz dokładnych ścieżek, mc robi to szybciej niż wpisywanie komend. I nie trzeba przy tym udawać, że się nie lubi myszki.

Instalacja i pierwsze uruchomienie

sudo apt install mc
sudo dnf install mc

Uruchamiasz krótko:

mc

Midnight Commandera napisał Miguel de Icaza w 1994 roku jako klon Norton Commandera. Tak, ten sam Miguel, który trzy lata później razem z Federico Meną założył projekt GNOME, czyli środowisko graficzne. Wolne oprogramowanie, licencja GPL.

Dwa panele, czyli dwa okna na dwa pokoje

Wyobraź sobie, że stoisz w korytarzu między dwoma pokojami z otwartymi drzwiami. Widzisz oba naraz. Z jednego bierzesz pudło, do drugiego wnosisz. Nie musisz pamiętać, gdzie jest drugi pokój, bo masz go przed oczami.

Tak działa mc. Lewy panel to jeden folder, prawy to drugi. Aktywny jest ten, na którym stoi podświetlony pasek.

  • Tab przeskakuje między panelami.
  • Strzałki chodzą po plikach, Enter wchodzi do folderu, /.. na górze listy wychodzi piętro wyżej.
  • Na dole ekranu jest zwykła linia komend. Piszesz ls, Enter, działa jak zwykły Bash.

Możesz od razu kazać mc otworzyć konkretne foldery:

mc ~ /etc

Lewy panel w domowym, prawy w /etc.

Dolny pasek to ściąga, którą mc pokazuje cały czas:

 1Help     2Menu     3View     4Edit     5Copy     6RenMov   7Mkdir    8Delete   9PullDn  10Quit

Jak w nano: ekran sam mówi, co robić. Tylko zamiast Ctrl tu rządzą klawisze funkcyjne.

F3: podgląd

Stoisz na pliku, F3 i widzisz zawartość. Tylko do czytania, nic nie zepsujesz. Strzałki przewijają, F7 szuka w tekście, F3 albo F10 zamyka podgląd.

/home/eryk/porzadki/hosts                                  152/152               100%
127.0.0.1 localhost
...
 1Help     2UnWrap   3Quit     4Hex      5Goto     6         7Search   8Raw      9Format  10Quit

To trochę jak less, tylko bez wychodzenia z menedżera. A jak naciśniesz Enter na archiwum .tar.gz, mc wejdzie do środka jak do zwykłego folderu. Bez rozpakowywania.

F4: edycja w mcedit

F4 otwiera plik w edytorze. mc ma swój własny, mcedit. Wygląda znajomo:

/home/eryk/porzadki/hosts   [-M--]  0 L:[  1+ 1   2/  8] *(21  / 173b)   49 0x031 [*][X]
# kopia do porzadkow
127.0.0.1 localhost
...
 1Help     2Save     3Mark     4Replac   5Copy     6Move     7Search   8Delete   9PullDn  10Quit

Piszesz normalnie, jak w Notatniku. Literka M w nawiasie na górze znaczy „zmodyfikowany”. F2 zapisuje, mcedit pyta jeszcze „Confirm save file”, Enter na [ Save ]. F10 wychodzi. Jak zapomnisz zapisać, zapyta „Save before close?”.

Tu jest pułapka, na którą sam wpadłem. Na Ubuntu przy pierwszym F4 mc może zapytać:

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/mcedit

Choose 1-3 [1]:

Bo na Ubuntu mc domyślnie używa zewnętrznego edytora, a nie swojego. Wybierz 3, jeśli chcesz mcedit. Albo zrób to na stałe w samym mc: F9, menu Options, Configuration... i zaznacz [x] Use internal edit. Od tej pory F4 zawsze otwiera mcedit.

F5 i F6: kopiowanie i przenoszenie

Tu dwa panele pokazują pełnię mocy. F5 kopiuje plik spod paska do folderu z drugiego panelu. F6 przenosi albo zmienia nazwę.

Kilka plików naraz? Zaznacz je klawiszem Insert albo Ctrl+T. Zaznaczone zmieniają kolor. Potem F5:

 Copy 3 files with source mask:
 *
                                [x] Using shell patterns
 to:
 /home/eryk/porzadki
 [ ] Follow links               [ ] Dive into subdir if exists
 [x] Preserve attributes        [ ] Stable symlinks
                [< OK >] [ Background ] [ Cancel ]

mc sam wpisał cel: folder z drugiego panelu. Enter i gotowe. Zaznaczyć grupę plików możesz też plusem: +, wpisujesz wzorzec, na przykład *.log, i mc zaznacza wszystkie pasujące. Gwiazdka z lekcji 5 wraca w nowej roli.

F6 to samo, tylko przenosi. A jak chcesz po prostu zmienić nazwę, F6, zostawiasz ten sam folder i wpisujesz nową nazwę. Jak mv w Bashu, tylko z okienkiem.

F7 folder, F8 usuwanie, F10 wyjście

F7 tworzy nowy folder w aktywnym panelu. Okienko „Create a new Directory”, wpisujesz nazwę, Enter.

F8 usuwa. mc zapyta, czy na pewno. Kosza tu nie ma. Usunięte jest usunięte, dokładnie jak rm. F8 na folderze z zawartością zapyta drugi raz. Przeczytaj, zanim naciśniesz Enter. I nie odpalaj mc jako root tylko po to, żeby było wygodniej sprzątać. Jeden zły F8 w /etc i masz dzień wolny od pracy, tylko nie taki, jaki chciałeś.

F10 wychodzi z mc.

mc na zdalnym serwerze

Pierwszy sposób jest banalny: łączysz się z serwerem przez SSH i tam uruchamiasz mc. Działa w terminalu, więc działa wszędzie, gdzie jest terminal. Klawisze funkcyjne przechodzą przez SSH bez problemu, a jak terminal ich nie przepuszcza, mc rozumie też Esc i cyfrę: Esc, potem 5, to jak F5.

Drugi sposób jest lepszy: jeden panel u Ciebie, drugi na serwerze. Menu Left albo Right (F9), tam pozycja SFTP link...:

 FTP link...
 Shell link...
 SFTP link...

Wpisujesz eryk@serwer.firma.pl i panel pokazuje pliki na serwerze. Albo krócej, w linii komend mc:

cd sftp://eryk@serwer.firma.pl/var/log

Teraz F5 kopiuje z serwera do Ciebie albo z powrotem. Dwa pokoje, tylko jeden jest w innym mieście. Pod spodem jest SSH, więc działa logowanie hasłem i kluczem, o którym będzie cała lekcja w module o sieciach. Shell link to wariant dla serwerów, na których nie działa SFTP, adres zaczyna się wtedy od sh://.

Jak to działa pod spodem

mc nie kopiuje plików jakąś własną magią. W środku robi to samo, co cp i mv: prosi jądro o otwarcie pliku, czyta, zapisuje. Rysowanie okienek w terminalu to robota biblioteki, która wie, jak sterować ekranem znak po znaku. Dzięki temu mc działa na serwerze bez żadnego środowiska graficznego.

Najciekawsze jest to, jak mc widzi zdalne serwery i archiwa. Ma w sobie warstwę o nazwie wirtualny system plików, VFS. To tłumacz: panel prosi „pokaż pliki w folderze”, a VFS sprawdza, czy to zwykły folder na dysku, archiwum .tar.gz, czy adres sftp://. W każdym przypadku rozmawia inaczej, ale panel dostaje zawsze to samo: listę plików. Jak recepcjonista, który przyjmuje paczkę i nie obchodzi go, czy przywiózł ją kurier, poczta, czy sąsiad.

Ustawienia mc trzyma w ~/.config/mc/. Domyślnie zapisuje je przy wyjściu.

Inne menedżery plików w terminalu

mc to klasyka, ale nie jedyny wybór. Krótki przegląd:

  • ranger: jedna kolumna z folderem nadrzędnym, środkowa z bieżącym, prawa z podglądem. Klawisze jak w vimie, j i k w górę i w dół. Napisany w Pythonie.
  • nnn: mały i bardzo szybki, napisany w C. Dobry na słabe serwery i stare maszyny.
  • lf: podobny do rangera, ale napisany w Go. Jeden plik programu, łatwo go wrzucić na serwer.
  • vifm: dwa panele jak w mc, ale klawiszologia vima. Dla tych, którzy po poprzedniej lekcji polubili dd i yy.
  • yazi: najmłodszy z tej grupy i ostatnio bardzo popularny. W repozytoriach Ubuntu 24.04 go nie ma, instaluje się według instrukcji z jego strony.

[Ubuntu] ranger, nnn, lf i vifm zainstalujesz z repozytorium przez sudo apt install. [RHEL] Na Red Hacie część z nich może wymagać dodatkowego repozytorium EPEL, o którym powiemy w module o pakietach.

Który wybrać? Na serwer, na który wchodzisz raz w miesiącu: mc. Prawie każdy admin go zna i zwykle da się go zainstalować z oficjalnego repozytorium. Na własny komputer: pobaw się wszystkimi i zostań przy tym, który pasuje Ci do ręki. Tu nie ma złej odpowiedzi, jest tylko kłótnia na forum.

Ściąga flag

Klawisz / komendaGdzieCo robi
mcpowłokauruchamia Midnight Commandera
mc ~ /etcpowłokaotwiera od razu dwa wskazane foldery
mcedit plikpowłokasam edytor, bez paneli
Tabpaneleprzełącza aktywny panel
F3panelepodgląd pliku
F4paneleedycja pliku
F5panelekopiuj do drugiego panelu
F6paneleprzenieś albo zmień nazwę
F7panelenowy folder
F8paneleusuń (bez kosza!)
F9panelemenu na górze ekranu
F10wszędziewyjście
Insert / Ctrl+Tpanelezaznacz plik
+panelezaznacz pliki według wzorca
Ctrl+Opanelepokaż / schowaj terminal
Ctrl+Spaneleszybkie szukanie po nazwie
Esc, potem cyfrawszędziezamiennik F1–F10
F2mceditzapisz
cd sftp://user@host/folderlinia komend mcpanel na zdalnym serwerze

⚠ Typowy błąd

Kopiujesz F5 kilka plików z /etc, wśród nich os-release. Kopia się udaje, żadnego błędu. Wchodzisz do folderu z kopiami i widzisz:

 hostname
 hosts
!os-release

Wykrzyknik przed nazwą. Stajesz na pliku i na dole ekranu czytasz:

-> ../usr/lib/os-release

Na Ubuntu /etc/os-release to nie jest zwykły plik, tylko drogowskaz do /usr/lib/os-release. Taki sam jak /bin z lekcji 8. mc domyślnie skopiował drogowskaz, a nie to, na co on wskazuje. A drogowskaz z napisem „idź piętro wyżej, potem do usr/lib” w Twoim folderze domowym prowadzi donikąd. Wykrzyknik to sposób mc na powiedzenie: „ten link jest zepsuty”.

Rozwiązanie: w okienku kopiowania zaznacz [x] Follow links, czyli „idź za drogowskazem i skopiuj prawdziwy plik”. Zepsutą kopię usuń F8 i skopiuj jeszcze raz. Czym dokładnie są takie drogowskazy, dlaczego jedne się psują, a inne nie, rozbierzemy na części w następnej lekcji.

✎ Zadanie

W Midnight Commanderze, bez wpisywania komend: utwórz w domowym folderze folder porzadki, skopiuj do niego z /etc pliki hostname, hosts i os-release, w kopii hosts dopisz w mcedit linijkę komentarza, zapisz i obejrzyj wynik klawiszem F3.

Pokaż rozwiązanie

Zadanie było bez wpisywania komend, więc rozwiązanie to lista klawiszy. Odpalasz mc w folderze domowym.

  1. F7, wpisujesz porzadki, Enter. Folder gotowy.
  2. Tab przeskakuje do prawego panelu. Strzałkami na porzadki, Enter. Prawy panel stoi teraz w miejscu docelowym.
  3. Tab wraca do lewego. Idziesz do /etc: albo wchodzisz w /.. aż do korzenia i szukasz etc, albo na skróty Alt+C i wpisujesz /etc w okienku szybkiej zmiany folderu.
  4. Zaznaczasz trzy pliki: najeżdżasz na hostname i wciskasz Insert (albo Ctrl+T), potem hosts, potem os-release. Żeby nie przewijać stu plików, Ctrl+S i zaczynasz pisać nazwę, mc sam skacze. Na dole panelu pojawia się podsumowanie, u mnie 105 B in 3 files.
  5. F5, okienko pyta: kopiować 3 pliki do /home/eryk/porzadki? Enter.
  6. Tab na prawy panel, najeżdżasz na hosts, F4. Otwiera się mcedit. Ctrl+End skacze na koniec pliku, Enter, piszesz # porzadki z Midnight Commandera.
  7. F2 zapisuje. Uwaga: w mcedit Ctrl+S wcale nie zapisuje, tylko włącza i wyłącza kolorowanie składni. Kto przez lata wciskał Ctrl+S w Wordzie, ten się tu zdziwi, że plik po wyjściu jest taki sam jak przed. F10 zamyka edytor.
  8. F3 na hosts: podgląd, Twoja linijka na końcu. F3 albo q zamyka.

A teraz najciekawsze. Popatrz na prawy panel. Przed os-release stoi wykrzyknik: !os-release. Wciśnij na nim F3 i… nic. Plik jest, ale się nie otwiera. To samo w terminalu:

ls -l ~/porzadki
cat ~/porzadki/os-release
-rw-r--r-- 1 eryk eryk  3 Nov  3 15:18 hostname
-rw-r--r-- 1 eryk eryk 81 Nov  3 15:51 hosts
lrwxrwxrwx 1 eryk eryk 21 Sep  6 14:29 os-release -> ../usr/lib/os-release
cat: /home/eryk/porzadki/os-release: No such file or directory

Skopiowałeś nie plik, tylko kartkę z napisem „plik jest piętro wyżej, w usr/lib”. A w Twoim folderze domowym piętro wyżej żadnego usr/lib nie ma. Wykrzyknik w mc znaczy dokładnie to: drogowskaz donikąd. Jak tego uniknąć? W okienku F5 zaznacz [x] Follow links, wtedy mc skopiuje zawartość, a nie drogowskaz. Albo w terminalu zwykłe cp /etc/os-release ~/porzadki/, bo cp przy pojedynczym pliku domyślnie idzie za strzałką. A co to w ogóle za strzałki, właśnie dzisiaj rozbieramy.

Co dalej

W typowym błędzie pojawił się plik, który jest tylko drogowskazem do innego pliku. W następnej lekcji linki: czym jest i-węzeł, czym różni się link twardy od symbolicznego i co się dzieje, kiedy usuniesz oryginał. Spoiler: jeden z nich przeżyje, drugi zostanie z wykrzyknikiem.