chown -R user: user. * cambia i permessi all'indietro: è questo il comportamento corretto?


8

Ho avuto molti problemi quando ho cambiato il permesso di una cartella myfolderresidente /. Ho emesso il comando

sudo chown -R luca:luca /myfolder/.*

La mia intenzione era di cambiare la proprietà di tutti i file nascosti in /myfolder.

Purtroppo mi sono reso conto che anche la proprietà di è /stata cambiata, il che ovviamente mi ha lasciato con un sistema rotto. Penso che sia successo perché ..corrisponde .*, ma mi sembra ancora strano.

La modifica della directory principale è il comportamento corretto o devo presentare una segnalazione di bug?

Se è stato un mio errore nell'uso di chown, quali sono le migliori pratiche da utilizzare per impedire la modifica della proprietà delle cartelle e dei file di sistema?


4
Questo comportamento è inteso come una ..partita.*
Uwe Plonus il

.*indica qualsiasi file che termina . *.indica qualsiasi file che inizia con.
NickTux,

4
@NikTh Al contrario!
Uwe Plonus,

Bene, una buona pratica potrebbe non essere la modifica /diretta (creazione di cartelle, rimozione, ecc.) A meno che non sia assolutamente necessario (aprire una domanda per ciò che si voleva ottenere). Inoltre è pericoloso usare i caratteri jolly + i privilegi di root perché, il più delle volte, non si è sicuri al 100% di ciò che è stato interessato dal carattere jolly.
edwin,

1
@LucaCerone È correlato chmode chownsono comandi simili, entrambi iniziano con ch, contiene un oe hanno altre due lettere simili ( ne m). </ literal> Scherzi a parte, sono entrambi di forma: [cmd] -R [mode or user] [one or more files]. Alcune soluzioni offerte su questa domanda funzionano anche per il tuo caso, ad esempio questa di Sean Reifschneider (nel mezzo). Questa risposta è applicabile anche ai file nascosti solo rimuovendo il modello di glob per i file non nascosti.
Lekensteyn,

Risposte:


5

Ricorda che la riga di comando viene espansa (interpretata) dalla shell prima di essere eseguita

sudo chown -R luca:luca /myfolder/.*

viene prima interpretato come:

sudo chown -R luca:luca /myfolder/.  /myfolder/.. /myfolder/.adobe  /myfolder/.bash_history

notare /myfolder/..nella riga di comando

chown -R luca:luca /myfolder/..è equivalente a chown -R luca:luca /
quello che fa funzionare "indietro" l'abito

Utilizzare echo /myfolder/.*quando si utilizza "*" per verificare.


@Emmanuel: perché dovresti usare xargs e scoprire quando l'opzione -R è sufficiente?
Gennaio

@Emmanuel: grazie! puoi espandere un po 'su find e xargs?
lucacerone,

@LucaCerone Non sono sicuro del motivo per cui hai accettato questo, cambia ricorsivamente tutti i file /myfolder. Il findcomando è superfluo e si interrompe con nomi di file contenenti spazi bianchi. (se si desidera modificare i file in modo ricorsivo, find /myfolder | xargs chown luca:lucaè simile a chown -R luca:luca /myfolder).
Lekensteyn,

Lekensteyn ha ragione, ho dimenticato di grep ^.
Emmanuel,

@Lekensteyn Ho cambiato la ricerca per non corrispondere allo spazio
Emmanuel,

4

Bene. La riga di comando come root è molto potente. Leggi alcuni di questi classici. E sì, l' .*abbinamento a ..è esattamente ciò che si intende. Dot non è un personaggio speciale. È una convenzione. Per convenzione, i file che iniziano con un punto vengono nascosti dalla vista predefinita quando si elenca una directory: niente di meno e niente di più. Per convenzione, l'inode che porta alla directory corrente ottiene il .nome e l'inode che porta alla directory padre ottiene il ..nome.

Quello che avresti dovuto fare era

chown -R luca:luca /myfolder

Ho già detto che non c'è niente di speciale nei nomi dei file che iniziano con un punto? Ricorsivo chownnon la pensa così.

In questo momento, potresti essere in grado di ripristinare alcune funzionalità ripristinando la proprietà su root. A lungo termine, probabilmente dovrai reinstallare il sistema.

Come regola generale:

  1. Evita di lavorare come root.
  2. Se lavori come root, leggi ogni comando due volte prima di premere Invio.
  3. Se non sei sicuro dell'espansione, provalo prima con un comando "sicuro" (come echo .*).
  4. Non funziona come root.
  5. Esistono molte attività che possono essere eseguite in modo sicuro utilizzando un'interfaccia grafica (il problema è un esempio di tale attività).
  6. Ho già detto che dovresti evitare di usare l'account root?

Non volevo cambiare la proprietà di tutti i file nella cartella ... solo dei file nascosti ..
lucacerone,

2
OK, mio ​​cattivo allora. In questo caso, chown -R luca:luca /myfolder/.[^.]*credo che
Gennaio

2
echo .*è un buon modo di provare l'espansione. Ti mostrerà esattamente cosa vede la shell. ls .*può essere un po 'più confuso, poiché andrà giù per le directory ( ls -d .*potrebbe essere migliore, ma potrebbe anche solo usare echo .*)
Robie Basak,

@RobieBasak buon punto!
Gennaio
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.