Podstawowe komendy SSH

konsola ssh shell Po opisanym wcześniej artykule o używaniu SSH do instalacji skryptów na serwerze przyszedł czas, aby bardziej zagłębić się w komendy, które mogą być pomocne w administracji plikami na serwerze.
Czyli: kopiowanie, przenoszenie, edytowanie plików i katalogów, obliczanie zajmowanego miejsca na dysku, logowanie do bazy danych, a skończywszy na wyszukiwaniu plików i tekstów oraz uzyskiwaniu pomocy.
Mimo, że jest to tylko i wyłącznie tryb tekstowy, to jednak możemy zrobić w nim wiele, na prawdę wiele i wcale nie potrzebujemy do tego kolorowych okienek ;)

1. Rozpakowywanie archiwów
Najczęściej spakowane archiwa jakie są dostępne w internecie są z rozszerzeniem *.zip, *.tar. Wymaga to użycia różnych komend do rozpakowania.

  • ZIP
    unzip nazwa_pliku.zip
    Jeśli chcemy wypakować archiwum do jakiegoś folderu, to wywołujemy to polecenie z przełącznikiem -d
    unzip -d nazwaKatalog nazwa_pliku.zip
    Jeśli takiego katalogu nie ma na dysku, zostanie ona automatycznie utworzony.
  • TAR
    tar -zvxf nazwa_pliku.tar
    tar -xjf archivefile.tar.bz2

    W zależności z jakim rodzajem pliku mamy do czynienia, używamy odpowiedniej komendy. Dla archiwów z rozszerzeniem *.tar.gz i *.tgz użyjmy pierwszej komendy.

2. Pakowanie plików/folderów
Proces ten w zależności o ilość i wielkości plików może sporo potrwać. Nie martwmy się więc, że w konsoli nic „ciekawego” się nie pojawia, a tylko kursor miga.
Z moich doświadczeń wynika, że ZIP jest lepiej skompresowany od zwykłego tar. Pewnie tar.gz działa lepiej, ale nie miałem potrzeby sprawdzać :)

  • ZIP
    zip -r plikWyjsciowy katalogWejsciowy/
    plikWyjsciowy – czyli nazwa pliku utworzonego archiwum. W tym wypadku będzie to plikWyjsciowy.zip
    katalogWejsciowy – czyli katalog, który chcemy skompresować
    Pamiętajcie, aby użyć przełącznika ‚-r’ aby skompresować rekursywnie zawartość tego katalogu
  • TAR
    Mamy możliwość kompresowania do różnych rozszerzeń, dzięki różnym metodą kompresji i ich skuteczności.
    1. tar -cvvf wyjscie.tar wejscie
    właściwie prawie w ogóle nie kompresuje archiwów
    2. tar -czvf archive.tar.gz files/
    3. tar -cjf archivefile.tar.bz2 file-listDla różnych danych wejściowych do kompresji na pewno jakość kompresji będzie różna w poszczególnych metodach. U mnie przy kompresji folderu ze skryptem PHP z grafikami wyszło to mniej więcej tak:
    3024 KB miał folder, który chciałem kompresować
    2384 KB archiwum *.tar
    1260 KB archiwum *.zip
    1048 KB archiwum *.tar.gz
    1004 KB archiwum *.tar.bz2

3. Wyszukiwanie plików
Funkcja find w linuxie ma baaaardzo dużo możliwości. Najczęściej jednak poszukujemy plików o określonej początkowej nazwie, albo po rozszerzeniu.

find -name Blue*
find -name '*.mp3'
find /home/blueman -name index*

Pierwsze polecenie wyszuka wszystkie pliki, których nazwa zaczyna się na „Blue” w bieżącym katalogu w którym jesteśmy i jego podkatalogach.
Drugie polecenie wyszuka wszystkie pliki mp3 (z rozszerzeniem *.mp3) w bieżącym katalogu w którym jesteśmy i jego podkatalogach.
Natomiast trzecie polecenie wyszuka pliki rozpoczynające się na ‚index’ w podanym katalogu domowym użytkownika. Lokalizacje możemy oczywiście zmieniać ;)

4. Wyszukiwanie tekstu wewnątrz plików
Mogło by się to wydawać trudniejsze, ale wcale takie nie jest. Jedno proste polecenie rozwiązuje sprawę:

grep -R "blue" ./

Przeszuka rekursywnie (przełącznik -R) w katalog w którym aktualnie jesteśmy (./) pliki i wyświetli nazwy plików, wraz z krótkim obszarem dookoła słowa ‚blue’, które wyszukiwaliśmy.

5. Zliczanie zajmowanego miejsca przez pliki
Bardzo pomocne polecenie wg. mnie. Bardzo często go używam, ponieważ przez FTP nie można policzyć ile MB ma dany katalog.

du -sh katalog/

Polecenia tego możemy także używać dla normalnych plików – dostaniem ‚zjadliwą’ wielkość plików.

6. Przenoszenie plików i folderów
Jedno proste polecenie. Żadnych przełączników nie ma potrzeby używania

mv plik.zip ../../katalog/
mv katalog/ ../../innyKatalog/

Pierwsze polecenie przenosi plik, drugie cały katalog dwa katalogu niżej w strukturze. (no właśnie – wyżej, czy niżej się mówi? :| )

7. Kopiowanie plików i katalogów
Tutaj tylko jeden haczyk jest podczas używania polecenia przy kopiowaniu folderów – trzeba pamiętać, aby robić to rekursywnie!

cp -r katalog/ ../../innyKatalog/
cp plik.zip katalog/innyKatalog/noImoznaJeszczeWyzej/

8. Zmiana nazwy plików i katalogów
Na początku wydawało mi się to całkowicie głupie i dziwne, że nie osobnego polecenia do tego, ale jakoś z czasem przywykłem. Chodzi o to, że aby zmienić nazwę pliku/katalog używamy polecenia mv (patrz pkt. 6).
Przenosimy teoretycznie pod inną nazwą po prostu. Trzeba tylko pamiętać o stawianiu, bądź opuszczaniu backslasha na końcu – w zależności, czy chcemy przenieść, czy zmienić nazwę!

9. Edytowanie/Podgląd plików
Czasami nie koniecznie trzeba otwierać edytor, aby tylko zobaczyć co zawiera plik. Często się tak dzieje przy czytaniu plików ReadMe.txt dołączonych do skryptów. Wtedy wystarczy tylko polecenie:

more ReadMe.txt

I jeśli plik nie mieści się na ekranie, to klawiszem [Enter] może o jedną linijkę przewijać, a [Spacja] o całą stronę. Jak chcemy wyjść z podglądu pliku, to nie musimy przytrzymywać na chwilę [Enter] – wystarczy wcisnąć [q] :)

Jeśli chodzi o samą edycję plików, to:

vim index.php

Wewnątrz edytora poruszamy się normalnie strzałkami.
Jeśli chcemy dopisać coś do pliku, to wciskamy [Insert], aby przejść w tryb Edytowania. Jak skończymy dodawać to wciskamy [Esc], aby przejść w tryb nawigacji (przynajmniej ja sobie tak te tryby nazywam :P ).
Aby zapisać wprowadzone zmiany, to w trybie Nawigacji wciskamy [:w] (dwukropek i literkę W – od słowa write).
Aby wyjść z edytora, to w trybie Nawigacji ciskamy [:q] (quit)
Polecenia możemy łączyć, tj. [:wq] spowoduje zapisanie i od razu wyjście z edytora.

vim’a cały czas się uczę. Wielu rzeczy mi w nim brakuje, ale jakoś nie mam czasu poszukać tego, czy jest to możliwe – np. cofnięcie wprowadzanych zmian.

10. Łączenie się z bazą danych
Nie wielu osobom się to spodoba, ponieważ wszyscy jesteśmy przyzwyczajeni do dobrodziejstw phpMyAdmin, ale czasami umiejętność logowania się do bazy danych z poziomu konsoli może okazać się dla Nas zbawienna !
Najbardziej popularnym zestawem przełączników dla komendy mysql są dla mnie:

mysql -u blueman -h localhost -p

Komenda mysql jako chyba jedyna (ja przynajmniej nie znam innej), zamiast przełącznika ‚-l’ (login) ma swój własny ‚-u’ (user). Trochę dziwne, że nie trzymają się jakiś „norm” :/ ‚-h’ to nazwa hosta do którego się łaczymy, ‚-p’ to hasło, które podamy po wciśnięciu [Enter]

11. Pomoc
Chyba najbardziej podstawowe polecenie, ale mimo tego dałem ja na koniec, ponieważ na pewno wiele osób odstraszy przy pierwszym zetknięciu się z nim.
Chodzi mi o system pomocy i możliwych przełączników dla poleceń. Pomoc przywołujemy bardzo łatwo:

man polecenie

czyli na przykład

man cp

przywoła szczegółowy opis polecenia cp (pkt 7) wraz z jego wszystkimi możliwymi przełącznikami. Niestety opis ten jest w j.angielskim.
Nawigacja po wywołanej pomocy jest taka sama jak w przypadku polecenia ‚more’ (pkt 9)


To na razie tyle. Pamiętajcie o wstawianiu spacji w odpowiednich miejscach w poleceniach!
W razie czego piszcie, a postaram się pomóc :)

  • http://blog.wysoczanski.net/ choman

    Co to są ‚komenty’ (tytuł)? ;)
    Trudno żeby tar lepiej kompresował pliki od zipa, skoro sam tar nie wykonuje _żadnej_ kompresji.. Dopiero po dodaniu -z lub -j skompresuje wynikowe archiwum gzipem (-z, tar) lub bzip2 (-j).
    No i nie wszędzie vi == vim. vi to Vi, a vim to Vi IMproved. To że w niektórych systemach to to samo, to nie znaczy że tak jest wszędzie. A podstawowe vi nie ma wielu funkcjonalności, które ma vim.

  • http://www.BlueForum.pl BlueMan

    @choman – Dzięki wielkie za zwrócenie uwagi. Podłubałem trochę w internecie, itp. i zmiany do tego wpisu już wprowadziłem.

  • http://blog.blueforum.pl/thalcave thalcave

    Tak właściwie początkującym userom Linuksa powinieneś polecić łatwiejszy edytor niż vim -> mcedit lub nano

  • Pingback: VIM - skróty klawiszowe » BlueMan devBlog()

  • http://www.transblog.xt.pl SpeX

    Powiem strzeże .tar.bz2 mnie zadziwił. Kompresja zrzutu rozkładu jazdy MPK (~190MB) została spakowana do 2MB archiwum :>

    Tylko mam jedno zastrzeżenie $du -sh zwróciło iż katalog zajmuje 190MB. Natomiast Windows XP zwraca dane Rozmiar 82MB, Rozmiar na dysku 188MB.

    I tu pytanie, bo żadna z wartość się nie zgadza. Czyżby du -sh bardziej szacował niż obliczał dane i stąd +2MB?

  • Pingback: Pakowanie i kopiowanie danych na/z serwera przez powłokę SSH | Blog NETIKON.pl()