Per quanto riguarda la prima parte della tua domanda, non puoi annullare le modifiche, non c'è ⌘
Z o annullare il comando, ma è possibile impostare le autorizzazioni per una buona ipotesi di ciò che era prima. Maggiori informazioni su questo nel primo elenco qui sotto.
Per installare il software in /usr/local
devi avere permessi di scrittura nella directory (e nelle sue sottodirectory). Ci sono diversi modi per ottenere questo:
-
Imposta il proprietario su te stesso . Questo è ciò che hai fatto con
sudo chown -R $USER /usr/local
. Il mio background sysadmin Linux mi dice che questo non è il modo standard, perché /usr/local
è al di fuori della tua home directory e non dovrebbe essere di tua proprietà. Ma non direi che hai danneggiato qualcosa di irreparabile.
-
Utilizza sudo
, ma non vuoi essere obbligato a usarlo.
(Dal mio punto di vista la soluzione migliore .%?sudo
ti protegge da te. Pensaci due volte se devi digitare sudo
(a meno che non segui un'esercitazione di < a href="http://howtonode.org"> link :-)
).)
-
Imposta ACL . Bel modo per separare le autorizzazioni originali dalle autorizzazioni aggiunte. (Vedi link per maggiori informazioni sugli ACL.)
-
Configura gruppi . Aggiungi te stesso al gruppo che possedeva
/usr/local
e modifica le autorizzazioni in g+rwx
/ g+rw
. Ingombrante. Non farlo.
Hai fatto 1. e vuoi annullare le modifiche, 2. non vuoi, e io non lo consiglio 4., quindi ti spiegherò 3:
-
Iniziamo a "ripristinare" le modifiche apportate. /usr/local
era probabilmente di proprietà dell'utente root
, gruppo wheel
. Puoi impostarlo come segue:
$ cd /usr/local
$ sudo chown -R root:wheel .
-
Imposta gli ACL in modo da disporre di tutte le autorizzazioni:
$ cd /usr/local
$ sudo chmod -R +a "$USER allow delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,list,search,add_file,add_subdirectory,delete_child,file_inherit,directory_inherit" .
(vedi man chmod
, sezione ACL MANIPULATION OPTIONS
per i dettagli.)
-
Vedrai che tutti i file hanno un +
aggiunto, ls -e
mostra gli ACL:
$ cd /usr/local
$ ls -la .
total 0
drwxr-xr-x+ 11 root wheel 374 Oct 10 21:57 .
drwxr-xr-x+ 12 root wheel 442 Sep 22 13:44 ..
drwxr-xr-x+ 3 root wheel 3774 Oct 10 21:57 bin
-rw-r--r--+ 1 jaume wheel 0 Oct 25 14:53 myACLtestfile
drwxr-xr-x+ 3 root wheel 136 Jul 26 18:55 include
drwxr-xr-x+ 4 root wheel 442 Jul 26 18:55 lib
(...)
$ ls -led bin
drwxr-xr-x+ 3 root wheel 3774 Oct 10 21:57 bin
0: user:jaume allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit
$ ls -le myACLtestfile
-rw-r--r--+ 1 jaume wheel 0 Oct 25 14:53 myACLtestfile
0: user:jaume inherited allow read,write,execute,delete,append,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown
(Ho testato i comandi di cui sopra, ma potrei aver fatto un refuso. Come best practice, ti consiglio di eseguire i comandi sopra in una directory di test . Potresti fare mkdir ~/tmpacl
. Quindi cd ~/tmpacl
e sudo rsync -av /usr/local/ .
per copiare il contenuto di /usr/local
in ~/tmpacl
. Quindi salta cd /usr/local
in ogni sezione precedente per applicare i comandi a ~/tmpacl
. Al termine, rm -rf ~/tmpacl
.)
Ora puoi installare il software (o fare qualsiasi cosa, per quello) in /usr/local
senza sudo
.
Tieni presente che qualsiasi file che crei in /usr/local
apparterrà a te (come myACLtestfile
nella scheda sopra riportata), quindi vedrai che alcuni file sono di proprietà di root
e altri da te.
(Se cambi idea e vuoi tornare al meraviglioso mondo di sudo
, elimina gli ACL come segue:
sudo chmod -R -N /usr/local
e imposta le autorizzazioni su root:wheel
:
sudo chown -R root:wheel /usr/local
)
** MODIFICA **
Se la routine di installazione del software che si desidera installare utilizza /usr/bin/install
, questa potrebbe essere una soluzione molto più semplice. Aggiungere:
alias install="sudo /usr/bin/install"
a ~/.bashrc
. Quindi fai . ~/.bashrc
affinché le modifiche abbiano effetto.
Quindi modifica /etc/sudoers
con il comando sudo visudo
, aggiungi:
<your username> ALL=(ALL) NOPASSWD:/usr/bin/install
e salva e chiudi il file con :x
.
(Se usi altro comando install
da qualche parte nel filesystem, come GNU install, cambia il percorso sopra in modo appropriato.)
Perché funzioni, il software deve utilizzare /usr/bin/install
. Di solito è il caso con make install
.
** / EDIT **