Czy „sudo apt-get remove [write]” może zniszczyć moje Ubuntu?

59

Chciałem usunąć moją aplikację do pisania, więc znalazłem to na stronie: Aby usunąć typ pakietu:

sudo apt-get remove [package_name]

Więc napisałem:

sudo apt-get remove [write]

A potem zgodziłem się na podpowiedź: „tak, rób co mówię!” czy coś takiego. I voila! Moje Ubuntu było usuwane! Czy ktoś może mi powiedzieć dlaczego?

Jesper Joachim Sørensen
źródło
29
Uczący się moment o przeczytaniu pełnego wyniku. Wielu z nas zrobiło coś podobnego ... raz.
user535733
7
Dobra wskazówka, jeśli nie masz pewności, co się stanie, to skorzystaj z flagi --simulatelub z -sdołu aptlub z góry apt-get- przykład: sudo apt -s remove php7.2-pspellnie usuwa tego. Pokazuje tylko, co zostanie usunięte / zmienione (jeśli zostanie zainstalowane). To samo dotyczy „instalacji”.
bshea
touch wnajpierw ocal sobie trochę żalu ;-).
Stephen Kitt
@ B.Tanner Cieszę się, że moja odpowiedź faktycznie pomaga, a nie tylko polaryzuje. Zawsze jesteś mile widziany na czacie ogólnym AU w przypadku, gdy masz dalsze (lub inne) pytania lub po prostu chcesz się przywitać!
deser
Dobra lekcja na temat konwencji notacji na stronach podręcznika.
Chrylis

Odpowiedzi:

92

Prawidłowe polecenie usunięcia pakietu o nazwie writeto:

sudo apt remove write

[write]jest zestawem znaków pasującym do znaków „w”, „r”, „i”, „t” i „e”, a dopasowanie odbywa się poprzez podciąg przez apt. Polecenie, które wykonałeś, dopasowało więc wszystkie pakiety z jednym z tych znaków , których oczywiście jest dużo . Aby zacytować aptlistę wyników tylko te niezbędne:

WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
  apt adduser (due to apt) gpgv (due to apt) ubuntu-keyring (due to apt) libapt-pkg5.0 (due to apt) libc6 (due to apt) libgcc1 (due to apt) libgnutls30 (due to apt) libseccomp2 (due to apt)
  libstdc++6 (due to apt) base-files base-passwd libdebconfclient0 (due to base-passwd) bash libtinfo5 (due to bash) debianutils (due to bash) bsdutils libsystemd0 (due to bsdutils) coreutils
  libacl1 (due to coreutils) libattr1 (due to coreutils) libselinux1 (due to coreutils) dash dpkg (due to dash) diffutils libbz2-1.0 (due to dpkg) liblzma5 (due to dpkg) libzstd1 (due to dpkg)
  zlib1g (due to dpkg) tar (due to dpkg) e2fsprogs libblkid1 (due to e2fsprogs) libcom-err2 (due to e2fsprogs) libext2fs2 (due to e2fsprogs) libss2 (due to e2fsprogs) libuuid1 (due to e2fsprogs) fdisk
  libfdisk1 (due to fdisk) libmount1 (due to fdisk) libncursesw5 (due to fdisk) libsmartcols1 (due to fdisk) findutils grep libpcre3 (due to grep) install-info (due to grep) gzip hostname init
  systemd-sysv (due to init) init-system-helpers (due to init) perl-base (due to init-system-helpers) libc-bin login libaudit1 (due to login) libpam0g (due to login) libpam-runtime (due to login)
  libpam-modules (due to login) mount util-linux (due to mount) ncurses-base ncurses-bin sed sysvinit-utils libudev1 (due to util-linux)
0 upgraded, 0 newly installed, 2503 to remove and 0 not upgraded.
After this operation, 7238 MB disk space will be freed.
You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'

Wiele ostrzeżeń, a także konieczność literalnego pisania

Tak, rób jak mówię!

są środkami bezpieczeństwa, które uniemożliwiają zniszczenie systemu, ponieważ menedżer pakietów systemu aptjest w stanie to zrobić. Każde uruchamiane polecenie sudopowinno być uruchamiane ostrożnie i przemyślane, ale nie martw się: prawie każdy doświadczony użytkownik Ubuntu złamał swój system przynajmniej raz, w rzeczywistości to część zabawy, jeśli mnie o to poprosisz.

Dalsza lektura

deser
źródło
1
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Thomas Ward
15

Aby dodać do tego, co powiedzieli inni, zobaczysz składnię, której bloger często używał w swoim poście.

Istnieją dość spójne standardy, które są używane podczas pisania dokumentacji dotyczącej używania poleceń. Na każdej stronie podręcznika zobaczysz prawie taką samą strukturę.

Jeśli coś jest opcjonalne , zwykle jest w nawiasach. ls [folder](nie musisz dawać ls folderu, ale możesz. Tak więc opcjonalnie).

Jeśli coś jest plikiem lub e-mailem , zwykle zobaczysz to w nawiasach kątowych.<likeThis.php>

Jeśli masz wybór między skończoną liczbą rzeczy (np. Miesiącami), zobaczysz to w nawiasach klamrowych:{September,October,November,December}

Z każdym z nich możesz zobaczyć, ...co oznacza, że ​​można podać ich wielokrotność.

I wreszcie, jeśli coś jest absolutnie obowiązkowe, zobaczysz jego dokumentację wymienioną i prawdopodobnie podkreśloną. Na przykład man mvinstrukcja mv mówi:

mv [OPTION]... [-T] SOURCE DEST

Technicznie rzecz biorąc, nazwa pakietu (zapis) nie jest wymaganą częścią polecenia. Spróbuj. apt-get installlub apt-get removepo prostu uruchomi się i zakończy działanie programu. To jeden z powodów, dla których można go przedstawić w nawiasach na tym blogu.

Nataniel Pisarski
źródło
9

Przed wykonaniem sudo apt-getsymulacji mądrze jest wykonać symulację:

$ apt-get remove [write] -s | wc -l
65280

Istnieje prawie 65 280 pakietów, które kwalifikują się do usunięcia, jeśli są zainstalowane w systemie. [write]to wzorzec wyszukiwania dla dopasowania Regex, który powoduje wybranie każdego pakietu, jeśli zawiera:

  • List wlub rlub ilub tlube

Dane wyjściowe są przesyłane do komendy Word Count za pomocą | wc -l. Linie wyjściowe z apt-getsą pomijane przez wc. -lPrzełącznik uczy wcsię liczyć tylko druku linii i nie należy traktować słowo lub liczbę znaków.

Symulacja jest określana za pomocą -sflagi. Możesz także użyć --simulateflagi dla większej czytelności. Kolejną zaletą symulacji jest to, że nie potrzebujesz sudomocy, które wielu z nas nauczyło się czasami niebezpieczne.

Aby zorientować się, jakie są nazwy pakietów, należy wyprowadzić dane wyjściowe potoku do lesspolecenia:

$ apt-get remove [write] --simulate | less

NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Also keep in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists...
Building dependency tree...
Reading state information...
Package 'libpam-pin' is not installed, so not removed
Package 'activity-log-manager-common' is not installed, so not removed
Package 'libnet-patricial-perl' is not installed, so not removed
Package 'pe' is not installed, so not removed

   (.... Plus 65,269 more packages ....)
WinEunuuchs2Unix
źródło