'Sudo apt-get remove [write]' può distruggere Ubuntu?


59

Volevo rimuovere la mia app "write", quindi l'ho trovata su un sito: Per rimuovere un tipo di pacchetto:

sudo apt-get remove [package_name]

Quindi ho scritto:

sudo apt-get remove [write]

E in seguito ho accettato il prompt: "sì, fai quello che dico!" o qualcosa di simile. E voilà! La mia Ubuntu stava cancellando! Qualcuno può dirmi perché?


29
Un momento in cui è possibile leggere l'output completo. Molti di noi hanno fatto qualcosa di simile ... una volta.
user535733

7
Un buon consiglio se non sei sicuro di cosa accadrà è usare la bandiera --simulateo -ssotto apto apt-getprima - Esempio: in sudo apt -s remove php7.2-pspellrealtà non rimuoverlo. Ti mostra solo cosa verrebbe rimosso / interessato (se installato). Lo stesso vale per "installa".
bshea,

touch wprima di salvarti un po 'di dolore ;-).
Stephen Kitt,

@ B.Tanner Sono felice di sapere che la mia risposta aiuta davvero invece di solo polarizzare. Sei sempre il benvenuto nella chat room dell'UA in caso di ulteriori (o altre) domande o desideri semplicemente salutarti!
dessert

Anche una buona lezione sulle convenzioni di notazione nelle pagine man.
Chrylis

Risposte:


92

Il comando corretto per rimuovere un pacchetto denominato writeè:

sudo apt remove write

[write]è un set di caratteri che corrisponde ai caratteri “w”, “r”, “i”, “t” ed “e” e che la corrispondenza viene effettuata mediante sottostringa di apt. Il comando che hai eseguito ha quindi abbinato tutti i pacchetti con uno di questi personaggi , che ovviamente sono molti . Per citare aptl'elenco di output solo quelli essenziali:

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!'

Gli avvisi multipli e la necessità di digitare letteralmente

Sì, fai come dico io!

sono mezzi di sicurezza in atto per impedirti di distruggere il tuo sistema, poiché il gestore di pacchetti del sistema aptè perfettamente in grado di farlo. Qualsiasi comando eseguito sudodovrebbe essere eseguito con attenzione e pensierosità, ma non preoccuparti: quasi ogni utente esperto di Ubuntu ha rotto il proprio sistema almeno una volta, in effetti è parte del divertimento se me lo chiedi.

Ulteriori letture


1
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
Thomas Ward

15

Per aggiungere ciò che hanno detto altre persone, vedrai la sintassi che il blogger ha usato nei loro post abbastanza spesso.

Ci sono standard piuttosto coerenti che vengono usati quando si scrive documentazione su come usare i comandi. In ogni pagina di manuale, vedrai praticamente la stessa struttura.

Se qualcosa è facoltativo , di solito è tra parentesi. ls [folder](non è necessario assegnare a ls una cartella, ma è possibile. Pertanto, facoltativo).

Se qualcosa è un file o e - mail , di solito lo vedrai tra parentesi angolari.<likeThis.php>

Se hai una scelta tra un numero finito di cose (cioè mesi), lo vedrai tra parentesi graffe come questa:{September,October,November,December}

Con uno di questi, potresti vedere ...quale denota che è possibile dare più di questo.

E infine, se qualcosa è assolutamente obbligatorio, vedrai la sua documentazione elencata e probabilmente sottolineata. Ad esempio, man mvil manuale di mv dice questo:

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

Tecnicamente parlando, il nome del pacchetto (write) non è una parte richiesta del comando. Provalo. apt-get installo apt-get removesemplicemente eseguirà e uscirà correttamente dal programma. Questo è uno dei motivi per cui potrebbe essere presentato tra parentesi su quel blog.


9

Prima di fare una sudo apt-get, è saggio fare una simulazione:

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

Esistono quasi 65.280 pacchetti idonei per la rimozione se installati sul sistema. [write]è un modello di ricerca per la corrispondenza Regex che determina la selezione di ogni pacchetto se contiene:

  • La lettera wo ro io toe

L'output viene reindirizzato al comando Conteggio parole con | wc -l. Le linee di uscita da apt-getvengono eliminate da wc. L' -linterruttore indica wcdi stampare solo il conteggio delle righe e non il conteggio delle parole o il conteggio dei caratteri.

La simulazione è specificata con il -sflag. È inoltre possibile utilizzare la --simulatebandiera per una maggiore leggibilità. Un altro vantaggio di una simulazione è che non hai bisogno di sudopoteri che molti di noi hanno imparato a volte possono essere pericolosi.

Per avere un'idea dei nomi dei pacchetti, è necessario eseguire l'output della pipe al lesscomando:

$ 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 ....)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.