Dowiedz się jak skutecznie zdiagnozować duże pliki i zwolnić miejsce na serwerze FTP

W poniższym artykule przyjrzymy się krok po kroku jak sprawdzić i posegregować według wielkości plików strony na Twoim serwerze ftp. Pomoże Ci to zdiagnozować potencjalnie duże pliki i skutecznie oczyścić serwer, precyzyjnie określając zbędną zawartość.

Potrzebujesz:

  • Dostęp SSH do Twojego serwera ftp.
  • obsługa wiersza poleceń / terminala
  • Znajomość bash / shell (Unix)
  • Podstawy python i wywoływania skryptów
Jak wygenerować listę wielkości plików strony z serwera?

Jak zalogować się przy użyciu klucza SSH?

Logowanie do serwera przez protokół SSH można autoryzować, prócz hasła, również kluczem SSH. Poniżej znajduje się opis przykładowej konfiguracji takiego połączenia z wiersza poleceń systemu Linux / Mac. Jeżeli posiadasz już połączenie z serwerem poprzez SSH przejdź dalej.

Jeśli nie posiadasz pary kluczy i chcesz je wygenerować:

Uruchom konsolę poleceń na hoście lub komputerze lokalnym z systemem Mac lub Linux (Unix), z którego połączenie ma być wykonane;

Skorzystaj z polecenia ssh-keygen; przykładowo, aby utworzyć klucz typu RSA dla protokołu SSH (aby otrzymać więcej informacji można użyć ssh-keygen –help) użyj komendy:

ssh-keygen -b 2048 -t rsa

Po wpisaniu komendy ssh-keygen i jej wykonaniu, pojawi się komunikat:

Enter file in which to save the key (~/.ssh/id_rsa):

Możesz podać własną lokalizację lub zatwierdzić puste pole klawiszem Enter, wówczas klucz prywatny i publiczny zostaną zapisane z domyślną nazwą do lokalizacji ujętej w nawiasie, np.:

~/.ssh/id_rsa.key (klucz prywatny); ~/.ssh/id_rsa.key.pub (klucz publiczny);

w następnym kroku pojawi się prośba o podanie i powtórzenie hasła:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Podanie hasła jest zalecane, ale nie jest wymagane; możesz zatwierdzić puste pole klawiszem Enter;

Wyświetlony zostanie komunikat podsumowujący wygenerowanie kluczy:

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa): oskey
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in oskey
Your public key has been saved in oskey.pub
The key fingerprint is:
SHA256:vccumUPc8fFthzV4axKr8IGy2ICWN7SwN2UzI0cvwVc user@computer.home
The key's randomart image is:
+---[RSA 2048]----+
|      .   .E     |
|       + .       |
|      . +     .  |
|   . o O o  .o.o.|
|    * * S.o. o+=+|
|   = B . oo+.ooo=|
|  . o * o.+o= o..|
|     . o  ==     |
|           o.    |
+----[SHA256]-----+

dodaj klucz publiczny (najczęściej ma on rozszerzenie .pub) na serwerze, do którego będziesz się łączyć; najprostszym sposobem jest skorzystanie z polecenia:

ssh-copy-id -i ~/.ssh/id_rsa.pub twojserwer@twojserwer.hosting.pl

W przypadku niektórych hostingów, łatwiejsze będzie dodanie kluczy do konfiguracji połączenia SSH z poziomu panelu admin lub przez ftp.

W przypadku problemów upewnij się, że na docelowym serwerze (przykładowo server12345.hosting.pl) katalog ~/.ssh oraz plik ~/.ssh/authorized_keys mają właściwe uprawnienia dostępu (755). Jeśli tak nie jest, należy zmienić je komendą chmod, np.:

chmod 755 ~/.ssh/authorized_keys
chmod 755 ~/.ssh

Wróć do terminala i użyj następującego polecenia aby zalogować się poprzez ssh z użyciem klucza:

ssh -i ~/.ssh/YOUR_PRIVATE_KEY twojserwer@twojserwer.hosting.pl

Dodaj klucz do agenta SSH (opcjonalnie)

Jeżeli chcesz używać klucza bez dodawania -i i ścieżki za każdym razem:

ssh-add ~/.ssh/YOUR_PRIVATE_KEY

Wtedy możesz łączyć się uproszczoną komendą:

ssh twojserwer@twojserwer.hosting.pl

Listowanie wielkości plików strony na serwerze

Polecenie du -ah to potężne narzędzie do wyświetlania wszystkich plików i katalogów w bieżącym katalogu wraz z ich rozmiarami. Oto zestawienie opcji i jak można ich skutecznie używać:

Komenda

du -ah

Wyjaśnienie:

  • du Polecenie Disk Usage pozwalające oszacować wykorzystanie przestrzeni dyskowej.
  • -a Pokaż informacje o wszystkich plikach i katalogach (nie tylko katalogach).
  • -h Wyświetl rozmiary w formacie czytelnym dla człowieka (np. KB, MB, GB).

Przykład danych wyjściowych

4.0K    ./subdir/file1.txt
8.0K    ./subdir/file2.txt
12K     ./subdir
20K     ./anotherfile.log
100K    .

Dla samych wielkości plików strony

Możesz filtrować katalogi poprzez połączenie du z grep:

du -ah | grep -v '/$'

Dla samych wielkości katalogów strony

Zamiast wcześniejszej komendy użyj:

du -ah | grep '/$'

Zapis wyjściowych danych do pliku

Dane wyjściowe można przekierować do pliku w celu późniejszego wykorzystania:

du -ah > file_list.txt

Aby połączyć oba polecenia i zapisać do pliku tylko listę plików (z wyłączeniem katalogów), możesz użyć następującego polecenia:

du -ah | grep -v '/$' > file_list.txt

Wyjaśnienie

  1. du -ah Wyświetla listę wszystkich plików i katalogów wraz z rozmiarami.
  2. grep -v '/$' Filtruje katalogi (kończące się na /).
  3. > file_list.txt Przekierowuje przefiltrowane dane wyjściowe do pliku file_list.txt.

Sortowanie według wielkości

Pobierz wygenerowaną listę plików z serwera, i utwórz poniższy skrypt python nazwij go sort_files_size.py

import re

# sort_files_size.py
# sorts the output of du -ah command, starts from the biggest file. 

def size_to_bytes(size_str):
    size_str = size_str.strip().upper()
    size_match = re.match(r"(\d+(?:,\d+)?)\s*([KMGT]?)", size_str)
    if size_match:
        size, unit = size_match.groups()
        size = int(size.replace(',', ''))
        units = {'': 1, 'K': 1024, 'M': 1024**2, 'G': 1024**3, 'T': 1024**4}
        return size * units.get(unit, 1)
    return 0

def sort_by_size(file_path):
    with open(file_path, 'r') as file:
        lines = file.readlines()

    # Convert sizes to bytes and sort in descending order
    lines.sort(key=lambda line: size_to_bytes(line.split()[0]), reverse=True)

    # Print sorted results
    for line in lines:
        print(line.strip())

# Replace 'file_list.txt' with the path to your text file
sort_by_size('/Users/You/Desktop/file_list.txt')

Skrypt wywołujemy poprzez komendę (upewnij się że posiadasz python3 zainstalowany na komputerze i odpowiednio skonfigurowane środowisko python):

python3 /path-to/sort_files_size.py

Rezultat skryptu to posegregowane pliki wg. wielkości od największych do najmniejszych wraz z folderami w oknie Twojej konsoli (przykładowe dane poniżej):

user@machine ~ % python3 /path/to/sort_by_size.py
8.5G    .
5.3G    ./backup/site1
5.3G    ./backup
3.1G    ./new-site/wp-content
3.1G    ./new-site
3.1G    ./backup/site1/example.com
3.0G    ./backup/site1/example.com/public_html/wp-content
3.0G    ./backup/site1/example.com/public_html
2.8G    ./backup/site1/example.com/public_html/wp-content/uploads
2.6G    ./new-site/wp-content/cache
2.4G    ./new-site/wp-content/cache/js
1.7G    ./backup/site1/sampleblog.com/public_html/wp-content
1.7G    ./backup/site1/sampleblog.com/public_html
1.7G    ./backup/site1/sampleblog.com
1.3G    ./backup/site1/sampleblog.com/public_html/wp-content/uploads
870M    ./backup/site1/example.com/public_html/wp-content/uploads/2021
630M    ./backup/site1/example.com/public_html/wp-content/uploads/2021/05
560M    ./backup/site1/example.com/public_html/wp-content/uploads/2020
464M    ./backup/site1/sampleblog.com/public_html/wp-content/uploads/2016
346M    ./backup/site1/oldsite.com/public_html
346M    ./backup/site1/oldsite.com
322M    ./backup/site1/example.com/public_html/wp-content/uploads/2018
312M    ./backup/site1/oldsite.com/public_html/wp-content
310M    ./backup/site1/sampleblog.com/public_html/wp-content/plugins
302M    ./backup/site1/example.com/public_html/wp-content/uploads/backup
295M    ./backup/site2
292M    ./backup/site2/public_html
259M    ./backup/site2/public_html/wp-content

Możesz zapisać je z sesji terminala do pliku tekstowego i przeanalizować zbędne pliki, które zabierają Ci miejsce. Pozwoli to zwolnić miejsce na serwerze i zredukować koszty oraz poprawić wydajność Twoich serwisów.

Często zadawane pytania

Jak wygenerować listę wielkości plików strony z serwera?

Aby wygenerować listę wielkości plików strony, potrzebujesz dostępu do serwera za pomocą protokołu SSH. Następnie, korzystając z polecenia du (disk usage), możesz wygenerować szczegółowy raport o rozmiarach katalogów i plików. Wygenerowaną listę możesz zapisać i przetworzyć za pomocą prostego skryptu w Pythonie, który ułatwi analizę danych.

Aby zalogować się na serwer poprzez SSH, użyj wiersza poleceń i odpowiedniego polecenia ssh, np. ssh użytkownik@adres-serwera. Do autoryzacji możesz użyć klucza SSH, który zapewnia bezpieczniejsze połączenie, lub tradycyjnego hasła, jeśli klucz nie jest dostępny. Upewnij się, że masz odpowiednie dane logowania oraz skonfigurowany dostęp do serwera.

Wygenerowaną wcześniej listę plików możesz posortować za pomocą prostego skryptu Python. Skrypt odczyta dane z pliku lub bezpośrednio z konsoli, a następnie posortuje je według rozmiaru, używając funkcji sortowania dostępnych w Pythonie. Dzięki temu możesz łatwo zidentyfikować największe pliki zajmujące miejsce na serwerze.

Aby sprawdzić, czy Python jest zainstalowany na Twoim komputerze, otwórz wiersz poleceń lub terminal i wpisz python --version lub python3 --version. Jeśli Python jest zainstalowany, zobaczysz informację o wersji, np. Python 3.9.7. W przeciwnym razie otrzymasz komunikat o błędzie, co oznacza, że musisz zainstalować Pythona, pobierając go ze strony python.org.

Jerzy Lazaridis - Web developer

Jerzy Lazaridis

Pokrewne owoce