czyszczenie systemu debian usuwanie plików konfiguracyjnych, starych plików i pakietów


Czyszczenie systemu Debian
GNU/Linux
Kategoria: Artykuły, etykiety: system, dpkg,
oprogramowanie
Dodany przez: Minio, 2011-03-20 18:43
(zmodyfikowany: 2011-03-30 13:14)
Wyświetleń: 3470
[Wersja do druku]
Wprowadzenie
Debian GNU/Linux jest systemem, który może
pracować bez awarii przez wiele lat. Przez ten
czas może być wielokrotnie aktualizowany albo
modyfikowany. Im dłużej system jest używany,
tym większe prawdopodobieństwo, że znajdują
się w nim najróżniejsze śmieci. Mogą to być
niepotrzebne pakiety, pakiety które zostały już
porzucone przez swoich twórców, pliki
instalacyjne, pliki konfiguracyjne itp. Zazwyczaj
obecność tych plików w niczym nie
przeszkadza, dlatego też rzadko się je zauważa.
Nie oznacza to jednak, że systemu nie powinno
się od czasu do czasu sprzątać. Przede
wszystkim można w ten sposób oszczędzić
miejsce na dysku twardym (naturalnie im więcej
śmieci się usunie, tym więcej miejsca się
oszczędzi). Po drugie, takie śmieci potrafią dać o
sobie znać wiele lat pózniej, powodując problemy
(przykładem może być BTS #546836, który był
spowodowany pakietem zainstalowanym ręcznie
około 2000 roku). Wreszcie jest to kwestia
poczucia higieny  zazwyczaj przynajmniej raz
na jakiś czas sprzątamy mieszkania, więc
można też posprzątać swój komputer.
Uwagi natury ogólnej
Usuwanie zainstalowanych pakietów może
potencjalnie zepsuć Twój system (a przynajmniej
niektóre jego funkcje, gdyż APT posiada
dodatkowe zabezpieczenie przed
przypadkowym usunięciem najważniejszych
składników systemu). Nigdy, ale przenigdy nie
usuwaj pakietów na ślepo, bez rozeznania się,
co konkretnie zostanie usunięte. Jeżeli
korzystasz z apt-get lub aptitude, najpierw
uruchamiaj je z flagą -s  włącza to tryb
symulacyjny, w którym apt-get/aptitude pokaże
co by zrobił, ale tego nie zrobi. Dobrą praktyką
jest tworzenie list pakietów do usunięcia,
zapisywanie ich do pliku i podawanie apt-
get/aptitude właśnie tej listy. Np. tak:
aptitude purge $(cat /tmp/lista_p
Przed usunięciem danego pakietu sprawdz:
co to za pakiet: aptitude show pakiet
zwróć szczególną uwagę na opis pakietu i
na to, czy został zainstalowany
automatycznie
dlaczego został zainstalowany: aptitude
why pakiet
skÄ…d pochodzi dany pakiet: apt-cache
policy pakiet
jeżeli jedyną dostępną wersją jest
/var/lib/dpkg/status, to pakiet albo został
zainstalowany ręcznie, albo porzucony
Jeżeli masz wątpliwości czy dany pakiet usunąć
czy zostawić, lepiej go zostaw.
Ponieważ niektóre zadania można wykonać na
przynajmniej dwa różne sposoby lub podane
polecenia mogą mieć pewne nieoczekiwane
konsekwencje, przed wykonaniem
któregokolwiek z nich, przeczytaj cały artykuł
(lub przynajmniej całą sekcję).
Usuwanie starych plików
instalacyjnych
Zacznijmy od czegoÅ› prostego. Jak pewnie
wiesz, programy w Debianie znajdujÄ… siÄ™ w
specjalnie przygotowanych plikach DEB. Czego
być może nie wiesz, podstawowy program do
instalowania pakietów w Debianie  dpkg 
potrafi zainstalować tylko te programy, których
archiwa instalacyjne znajdujÄ… siÄ™ na dysku
twardym komputera. Dlatego bardziej przyjazne
menedżery oprogramowania  apt-get, aptitude,
synaptic, software-center etc. - po prostu
pobierajÄ… pakiety DEB z serwera na dysk twardy
komputera i potem instalujÄ… je przy pomocy
dpkg. Pobrane pakiety DEB trzymajÄ… w katalogu
/var/cache/apt/archives/.
Katalog ten będzie rósł w nieskończoność,
zajmując coraz więcej miejsca. Po zaledwie kilku
miesiącach może zajmować nawet kilka
gigabajtów na dysku twardym. Jego zawartość
można wyczyścić następującymi poleceniami:
aptitude clean
aptitude autoclean
Pierwsze z nich usunie wszystkie pakiety w
cache, drugie zaś tylko te, które nie są już
dostępne w repozytoriach APT (z dokładnością
co do wersji). Zamiast aptitude można użyć apt-
get (polecenia clean i autoclean pozostajÄ… bez
zmian).
Usuwanie pakietów
przejściowych
Pakiety przejściowe (ang. transitional packages)
są specjalnymi pakietami, które same z siebie
nie instalują żadnych plików, jednak zależą od
innych pakietów, które te pliki instalują. Ma to
miejsce zwłaszcza jeśli jakiś program zmieni
nazwę (np. Firefox na Iceweasel) lub jeżeli
pewien program zostaje włączony do innego
pakietu (np. host i dnsutils do pakietu bind9-
host). Pakiety przejściowe znajdują się w
repozytoriach dla zachowania kompatybilności
ze starszymi wersjami Debiana i mogą być
usunięte po aktualizacji.
Aby znalezć wszystkie pakiety przejściowe,
należy wydać polecenie:
LANG=C aptitude search ~dtransiti
search można zastąpić purge aby je od razu
usunąć, ale ze względu na możliwość
znalezienia pakietu który w rzeczywistości nie
jest pakietem przejściowym, lepiej jest je
wyszukać i potem ręcznie usunąć.
Usuwanie pakietów, które nie
są dostępne w żadnym
repozytorium
Jeżeli mamy dużo pakietów zainstalowanych
ręcznie albo Debiana zainstalowanego kilka
wersji stabilnych temu i regularnie
aktualizowanego, istnieje duże
prawdopodobieństwo, że w systemie mamy
zainstalowane pakiety, które nie są już dostępne
w żadnym repozytorium. Jeżeli pakiet został
usunięty z repozytorium, to najprawdopodobniej
dlatego, że był już przestarzały i/lub jego opiekun
go porzucił. Pakiety takie nie są aktualizowane,
dlatego ich trzymanie może przynieść więcej
szkód niż korzyści (w najlepszym wypadku tylko
niepotrzebnie zajmujÄ… miejsce).
Do wykrywania takich pakietów służy program
apt-show-versions, który trzeba najpierw
zainstalować. Następnie należy wykonać jako
root:
apt-show-versions -i
apt-show-versions |grep 'No avail
Pierwsze polecenie zaktualizuje bazę pakietów
apt-show-versions, drugie zaÅ› znajdzie
wszystkie te, które nie są już dostępne w
żadnym repozytorium. Listę tę należy przejrzeć,
a pakiety które nie są potrzebne  usunąć.
Zamiast apt-show-versions można użyć
aptitude. Poniższe polecenie powinno znalezć
te same pakiety, co drugie z poleceń podanych
wyżej:
aptitude search ?obsolete
Jeżeli masz pakiety, które z jakiegoś powodu
chcesz mieć zainstalowane a które nie są już
dostępne w repozytoriach, pomyśl o stworzeniu
lokalnego repozytorium. Jest to lepsze
rozwiązanie niż instalacja pakietów przez
dpkg/gdebi.
Usuwanie pakietów, od
których nie zależą żadne inne
pakiety
Linux jest tak skonstruowany, by programy
mogły współdzielić potrzebne im biblioteki.
Dlatego mając zainstalowane całe GNOME,
instalacja kolejnych pakietów opartych o GTK
trwa krócej i wymaga pobrania mniej danych 
większość potrzebnych bibliotek (tzw.
zależności) jest już zainstalowana i nie ma
potrzeby instalować ich ponownie.
Do odnajdywania pakietów, które są
 niepotrzebnie zainstalowane (żaden inny
zainstalowany program ich nie potrzebuje) służy
program deborphan. Należy go zainstalować.
deborphan domyślnie szuka takich pakietów
tylko wśród bibliotek, co wyklucza większość
błędów. Wystarczy wydać polecenie:
deborphan
aby uzyskać listę wszystkich pakietów, których
usunięcie nie powinno mieć żadnych szkód dla
systemu. deborphan nie potrafi samodzielnie
usuwać pakietów, dlatego jego używanie jest
bezpieczne. Jeżeli rzeczywiście chce się
usunąć wskazywane przez niego pakiety,
należy wynik jego działania przekierować do apt-
get/aptitude.
Może się jednak zdarzyć, że deborphan wskaże
pakiet, który samodzielnie przeznaczyliśmy do
instalacji. Na systemie 64-bitowym takim
pakietem będzie ia32-libs, które mogliśmy z
jakiegoś powodu chcieć mieć w systemie. W
takim wypadku należy deborphan poinformować,
że dany pakiet jest zainstalowany celowo i że nie
powinien o nim informować:
deborphan -A pakiet1 pakiet2 paki
Listę w ten sposób wstrzymanych pakietów
można wyświetlić poleceniem:
deborphan -L
Jak wspomniano, deborphan domyślnie szuka
tylko bibliotek (które zawsze powinny być
instalowane jako zależności). Można jednak go
poprosić by przeszukał wszystkie zainstalowane
pakiety, dodajÄ…c opcjÄ™ -a. Niestety, w takim
trybie deborphan niemal na pewno wskaże wiele
pakietów, które kazaliśmy zainstalować. Aby to
obejść, można wszystkie ręcznie zainstalowane
pakiety dodać do jego bazy:
aptitude -F %p search '~i!~M' |wh
Jednak prawdopodobnie najlepszym wyjściem
będzie pozostanie przy tym, by deborphan
przeszukiwał tylko zainstalowane biblioteki.
Usuwanie pakietów z
nieoficjalnych repozytoriów
W posiadaniu pakietów pochodzących z
nieoficjalnego repozytorium nie ma niczego
złego. Często takie repozytoria dostarczają
programy, których po prostu nie ma w
p og a y, tó yc po p ostu e a
oficjalnych repozytoriach. Jednak baza
oprogramowania Debiana stale rośnie, a
zewnętrzne repozytoria czasem przestają być
uaktualniane albo zawierają programy, które
przeszkadzajÄ… w zwyczajnej aktualizacji
Debiana. W takich wypadkach warto bliżej
przyjrzeć się pakietom pochodzącym z
nieoficjalnych zródeł i rozważyć usunięcie
przynajmniej części z nich.
Aby uzyskać listę takich pakietów, wystarczy
wydać polecenie:
aptitude search '?narrow(?install
Usuwanie plików
konfiguracyjnych
zainstalowanych w trakcie
działania dpkg
Aby zrozumieć tę część artykułu, potrzebna jest
pewna wiedza na temat dpkg. Postaram siÄ™
poniżej streścić najważniejsze elementy. Osoby
zainteresowane bardziej szczegółowymi
informacjami, powinny przeczytać (napisane w j.
angielskim) Załącznik E dokumentu Debian
Policy oraz wpis na blogu Raphaëla Hertzoga,
jednego z opiekunów dpkg.
dpkg ma ściśle określoną politykę na temat
plików konfiguracyjnych. Podstawowe zasady są
takie:
w trakcie instalacji pakietu, dpkg sprawdza,
czy pliki konfiguracyjne znajdujÄ… siÄ™ na
dysku komputera. Jeżeli ich nie ma, instaluje
pliki dostarczone w pakiecie.
jeżeli taki plik jest, sprawdza, czy różni on
siÄ™ od pliku dostarczonego w pakiecie, z
którego plik pochodzi (zazwyczaj jest to
poprzednia wersja aktualnie instalowanego
pakietu).
1. jeżeli pliki się nie różnią, pozostawia
wersjÄ™ obecnÄ… na dysku
2. jeżeli plik na dysku został zmieniony,
ale plik w pakiecie się nie zmienił,
pozostawia wersjÄ™ obecnÄ… na dysku
3. jeżeli plik w pakiecie został zmieniony,
ale plik na dysku nie był modyfikowany,
instaluje plik z pakietu
4. jeżeli zarówno plik na dysku, jak i plik w
pakiecie, zostały zmienione, prosi
użytkownika o samodzielne
rozwiązanie problemu (użytkownik
może wybrać wersję z pakietu, wybrać
wersję na dysku, pokazać różnice
między wersjami oraz uruchomić
powłokę w celu zbadania sytuacji)
Właśnie w tej ostatniej sytuacji dpkg tworzy kopie
zapasowe plików konfiguracyjnych. Trzeba
wiedzieć, że dpkg nigdy nie usuwa ich
automatycznie, przez co będą one leżeć na
dysku twardym komputera zazwyczaj niczego
nie świadomego użytkownika. Nie zajmują wiele
miejsca, ale z drugiej strony nie ma potrzeby ich
trzymać.
Pliki konfiguracyjne stworzone przez dpkg mogÄ…
mieć następujące sufiksy (są to ciągi znaków
dodane na końcu pliku):
.dpkg-old  kopia pliku z dysku twardego,
tworzona gdy użytkownik zdecyduje się
nadpisać swój plik konfiguracyjny plikiem z
pakietu
.dpkg-dist  kopia pliku z pakietu,
tworzona gdy użytkownik zdecyduje się
pozostawić swój plik konfiguracyjny
.dpkg-new  kopia pliku z pakietu,
tworzona gdy użytkownik zdecyduje się
uruchomić powłokę w celu zbadania sytuacji
Aby znalezć wszystkie takie pliki, wystarczy
wydać polecenie
find /etc/ -regex '.*dpkg-\(dist\
Polecenie to przeszukuje tylko katalog /etc, w
którym powinny być przechowywane pliki
konfiguracyjne. Może się zdarzyć, że niektóre
pakiety będą pliki konfiguracyjne trzymać w
innym miejscu. W takiej sytuacji można
przeszukać wszystkie katalogi obecne w
systemie, ale prawdopodobnie zajmie to
wielokrotnie więcej czasu.
Znalezione pliki można bez przeszkód usunąć,
chociaż wcześniej warto zobaczyć różnice
między kopią a lokalnie zainstalowanym plikiem i
ewentualnie nanieść poprawki.
Usuwanie starych plików
konfiguracyjnych
Zarówno apt-get, jak i aptitude, mają dwa
polecenia do usuwania zainstalowanych
pakietów: remove oraz purge. Różnica między
nimi jest taka, że remove usuwa pakiet, ale
pozostawia jego pliki konfiguracyjne. W ten
sposób jeżeli w przyszłości ponownie dany
pakiet zostanie zainstalowany, nie będzie
potrzeby jego ponownej konfiguracji.
Jednak sytuacje, gdy chcemy zostawić pliki
konfiguracyjne, należą raczej do rzadkości.
Zazwyczaj gdy usuwamy pakiet, nie chcemy w
systemie żadnych po nim pozostałości. Mimo to
często one pozostają.
Aby znalezć wszystkie pakiety które nie są
zainstalowane, ale pozostawiły po sobie jakieś
pliki konfiguracyjne, wystarczy wydać polecenie:
aptitude -F "%p" search '~c'
Zamiast search można użyć purge, aby od razu
je usunąć.
Być może ktoś chciałby usunąć stare pliki
konfiguracyjne pod warunkiem, że nie zostały
one zmienione. Nie istnieje żadne narzędzie
które je automatycznie znajdzie, jednak można
napisać sobie nieskomplikowany skrypt, który to
zrobi.
Jego podstawą będzie powyższe polecenie,
wyszukujące wszystkie pakiety, które
pozostawiły po sobie pliki konfiguracyjne.
Następnie należy zdobyć sumy MD5 tych plików
konfiguracyjnych. Można to zrobić poleceniem:
dpkg-query -W -f '${Conffiles}' n
Ostatnim krokiem jest policzenie sumy MD5 pliku
konfiguracyjnego znajdujÄ…cego siÄ™ na dysku.
Jeżeli sumy się różnią, to znaczy że plik został
zmieniony i nie powinno się go usuwać.
Napisanie takiego skryptu pozostawiam tym,
którzy uważają że potrzebują takich funkcji.
Usuwanie plików, które nie
należą do żadnego
zainstalowanego pakietu
Każdy posiada wiele plików, które nie należą do
żadnego zainstalowanego pakietu. Większość
plików w /home pochodzi z jakiegoś
zewnętrznego zródła, tak samo jak pliki w /tmp.
Wiele programów może sobie tworzyć własne
pliki w katalogu /var (logi, pliki .pid itp.).
Oprogramowanie o zamkniętym kodzie
zródłowym powinno instalować się w katalogu
/opt. Te cztery katalogi sÄ… miejscami, gdzie pliki
spoza repozytoriów mają pełne prawo
przebywać. Jednak nie powinny się znalezć
nigdzie indziej w systemie plików.
Aby znalezć wszystkie pliki, które nie pochodzą
z żadnego zainstalowanego pakietu, można
wykorzystać program cruft. Należy go
uruchomić w ten sposób (jako root):
cruft -d / --ignore /tmp --ignore
Po opcji -r należy podać nazwę pliku, do
którego cruft wypisze wyniki swojej pracy.
Można ją pominąć, aby wyniki wysłać na
standardowe wyjście, jednak nie jest to
zalecane. Opcja --ignore wskazuje na katalogi,
które mają zostać pominięte w trakcie pracy
programu (w których niemal na pewno znajdują
się pliki spoza zainstalowanych pakietów, które
tylko zaciemniÄ… otrzymany wynik). Opcja -d
wskazuje na katalogi, które mają zostać
przeszukane. Zazwyczaj będzie to główny
katalog systemu plików. Warto zauważyć, że
cruft domyślnie nie sprawdza katalogów, które
znajdują się na innych partycjach. Jeżeli chcemy
je sprawdzić, należy uruchomić go w ten
sposób:
cruft -d "/ /usr"
cruft będzie musiał sprawdzić ogromne ilości
plików, dlatego jego wykonywanie może zająć
nawet kilkadziesiąt minut. Należy cierpliwie
czekać, aż skończy pracę, a potem spojrzeć do
uzyskanego pliku raportu. Analiza raportu jest
zajęciem dla przynajmniej średnio
zaawansowanych użytkowników systemu,
ponieważ baza cruft wciąż nie jest doskonała i
zgłasza wiele nieprawidłowych wskazań. Z tego
powodu trzeba samodzielnie określić, które pliki
rzeczywiście można spokojnie usunąć, a które
lepiej zostawić.
Usuwanie starych plików z
katalogu domowego
użytkownika
Niestety nie istnieje (i raczej nigdy nie będzie
istniał) żaden sposób na stuprocentowe
określenie, czy dany plik w katalogu domowym
użytkownika jest jeszcze potrzebny, czy można
go spokojnie usunąć. Można jednak napisać
narzędzia, które wskażą kandydatów do
usunięcia, czyli pliki które  z mniejszym lub
większym prawdopodobieństwem  nie są już
potrzebne.
ls --full-time -lah ~ |sort -k 6
Powyższe polecenie pokaże wszystkie pliki i
katalogi znajdujące się bezpośrednio w katalogu
domowym użytkownika i posortuje je wg czasu
ostatniej zmiany, gdzie najdawniej zmienione
będą na samym dole. Jeżeli system plików, na
którym znajduje się katalog domowy
użytkownika, jest montowany z zapisem czasu
dostępu (opcja atime polecenia mount), do
polecenia ls można dodać --time=atime, dzięki
czemu uzyska siÄ™ listÄ™ posortowanÄ… wg czasu
dostępu do katalogu/pliku (dostępem jest także
np. kopiowanie)  taka lista znacznie rzetelniej
oddaje, które pliki/katalogi rzeczywiście nie są
już potrzebne.
find potrafi także znalezć wszystkie pliki
nowsze niż wskazana data (lub określony plik).
Stosując operator negacji, można go
wykorzystać do znalezienia plików starszych niż
pewna określona data. Należy wydać polecenie:
find ~ -not -newerXt YYYYMMDD
gdzie w miejsce X należy wstawić a (czas
dostępu), m (czas modyfikacji) lub c (czas
utworzenia), zaÅ› w miejsce YYYYMMDD  datÄ™
w formacie rok (4 cyfry) miesiąc (2 cyfry) dzień
(2 cyfry).
Dając odpowiednio odległą datę (np. 2007 rok)
można znalezć pliki, które prawdopodobnie nie
są już potrzebne.
Podsumowanie
Jak widać, istnieje wiele sposobów na
znalezienie plików/pakietów które nie są już
potrzebne. Istnieje też kilka sposobów na
pot eb e st eje te a sposobó a
odchudzenie Debiana (spowodowanie, żeby
zajmował mniej miejsca na dysku twardym),
jednak zagadnienie to nie wchodzi w zakres
niniejszego artykułu.
Na samy końcu chciałbym tylko przypomnieć,
że nigdy nie powinno się bezmyślnie usuwać
plików wskazywanych przez powyższe
polecenia.
Niektóre części artykułu powstały z
wykorzystaniem serii wpisów na blogu Raphaëla
Hertzoga. Dostępne są w Internecie (po
angielsku): #1, #2, #3, #4, #5, #6.


Wyszukiwarka

Podobne podstrony:
Linux System Plików
iCare Format Recovery naprawa systemu plikow
Linux System Plików II
Linux konserwacja Systemu Plikow
07 Linux System plików
system plikow
utk1 system plikow ext
Funkcje systemowe systemu plików
Systemy plików
systemy plikow
systemy plików 12 10 2008
Kontrola plików systemowych XP
Sprawozdanie z Zarządania systemem plików i przestrzenią

więcej podobnych podstron