Midnight Commander i inne menedżery plików
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 mcsudo dnf install mcUruchamiasz krótko:
mcMidnight 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 ~ /etcLewy 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 10QuitJak 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 10QuitTo 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 10QuitPiszesz 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/logTeraz 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,
jikw 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
ddiyy. - 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 / komenda | Gdzie | Co robi |
|---|---|---|
mc | powłoka | uruchamia Midnight Commandera |
mc ~ /etc | powłoka | otwiera od razu dwa wskazane foldery |
mcedit plik | powłoka | sam edytor, bez paneli |
| Tab | panele | przełącza aktywny panel |
| F3 | panele | podgląd pliku |
| F4 | panele | edycja pliku |
| F5 | panele | kopiuj do drugiego panelu |
| F6 | panele | przenieś albo zmień nazwę |
| F7 | panele | nowy folder |
| F8 | panele | usuń (bez kosza!) |
| F9 | panele | menu na górze ekranu |
| F10 | wszędzie | wyjście |
| Insert / Ctrl+T | panele | zaznacz plik |
+ | panele | zaznacz pliki według wzorca |
| Ctrl+O | panele | pokaż / schowaj terminal |
| Ctrl+S | panele | szybkie szukanie po nazwie |
| Esc, potem cyfra | wszędzie | zamiennik F1–F10 |
| F2 | mcedit | zapisz |
cd sftp://user@host/folder | linia komend mc | panel 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-releaseWykrzyknik przed nazwą. Stajesz na pliku i na dole ekranu czytasz:
-> ../usr/lib/os-releaseNa 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.
- F7, wpisujesz
porzadki, Enter. Folder gotowy. - Tab przeskakuje do prawego panelu. Strzałkami na
porzadki, Enter. Prawy panel stoi teraz w miejscu docelowym. - Tab wraca do lewego. Idziesz do
/etc: albo wchodzisz w/..aż do korzenia i szukaszetc, albo na skróty Alt+C i wpisujesz/etcw okienku szybkiej zmiany folderu. - Zaznaczasz trzy pliki: najeżdżasz na
hostnamei wciskasz Insert (albo Ctrl+T), potemhosts, potemos-release. Żeby nie przewijać stu plików, Ctrl+S i zaczynasz pisać nazwę, mc sam skacze. Na dole panelu pojawia się podsumowanie, u mnie105 B in 3 files. - F5, okienko pyta: kopiować 3 pliki do
/home/eryk/porzadki? Enter. - 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. - 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.
- 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 directorySkopiował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.