Eu estava tentando chown
dentro /opt
e por algum motivo chown
saltou para o pai e chowned tudo.
Alguém pode sugerir por que / como isso pode acontecer e como evitar fazê-lo no futuro? É um pouco preocupante que a execução de um comando em um determinado diretório possa efetivamente saltar para cima e executá-lo no diretório raiz.
ubuntu: /opt > sudo chown -R root:www-data .*
chown: changing ownership of '../var/lib/lxcfs/proc/cpuinfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/meminfo': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/stat': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/uptime': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/diskstats': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc/swaps': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/proc': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/devices': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/blkio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/hugetlb': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/rdma': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/pids': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/freezer': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpuset': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/memory': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/perf_event': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/cpu,cpuacct': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/net_cls,net_prio': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/name=systemd': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup/unified': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs/cgroup': Operation not permitted
chown: changing ownership of '../var/lib/lxcfs': No such file or directory
^C
:ubuntu: /opt >
permissions
chown
Duke Dougal
fonte
fonte
sudo chown -R root:wwwdata /opt
conforme a caixa de diálogo --help ... talvez o uso desse pipe tenha causado algum problema ???.*
corresponde..
(o diretório pai, que é/
) - consulte Os diretórios pai chmod “chmod 777. * -R” (..)?cd
acessar o diretório raiz e omitir o leaing / ou iniciar o comando com(
, o que significa que o comando não será executado até que a correspondência)
seja digitada, dando a oportunidade de pressionar Ctrl-C e salvar de um erro grave (comorm -rf /tmp/foo-install
pressionar Enter em vez de T).Respostas:
Isso aconteceu porque você usou:
quando você deveria ter usado isso:
Primeiro,
-R
é recursivo para todos os diretórios no diretório de destino.Além disso,
*
corresponderá a todos os arquivos e diretórios no diretório atual. Em seguida,.*
corresponderá a todos os arquivos e diretórios um nível acima do diretório atual.Para evitar isso no futuro, você pode usar o
ls
comando para verificar o caminho antes de executar ochown
comando, como nestes exemplos:Outra maneira de evitar isso é sempre usar o caminho completo para o diretório para o qual você deseja executar um comando.
Aqui está um exemplo:
Editar:
Você pode usar o seguinte comando para
chmod
todos os arquivos ou diretórios ocultos diretamente sob/opt
(assumindo que o primeiro caractere após o.
que os oculta seja uma letra, um número, um traço ou um sublinhado que deve ser verdadeiro para a maioria dos arquivos).Você pode verificar quais arquivos serão
chmod
executados executando o seguinte comando:A primeira parte do comando :
for i in /opt/.[A-Za-z0-9-_]*
diz que, para todos os resultados da glob,/opt/.[A-Za-z0-9-_]*
atribua cada resultado à variável "i".O glob aqui diz que o primeiro caractere deve ser
.
e que o próximo caractere[A-Za-z0-9-_]
deve ser qualquer caractere que seja AZ ou az ou qualquer número 0-9 ou a-
ou a_
.Isso excluirá os resultados
.
e..
que representam o diretório atual e o diretório acima do diretório atual e incluirá apenas arquivos e diretórios ocultos.A segunda parte do comando :
do sudo chmod root:www-data "/opt/$i"
diz para executar o comando para todas as variáveis que correspondem ao valor atual de$i
.A terceira parte do comando :
done
diz que eu terminei.Além disso, você usou a
-R
opção comchmod
e a-R
opção é recursiva e será aplicada a todos os diretórios e arquivos.Quando você usa apenas o
chmod
comando apenas sem opções, o comando será aplicado apenas ao arquivo ou diretório específico que você forneceu e não será aplicado recursivamente aos diretórios.fonte
ls
saída e é muito lento enquanto a resposta é usadafind
.**
, e mesmo isso deve ser explicitamente ativado. IMHO, você deve ser mais claro sobre o papel de-R
. (2) As pessoas são aconselhadas a evitar o uso simples,*
pois podem corresponder a nomes de arquivos iniciados por-
, que serão interpretados como opções. deve proteger contra isso, mas não tenho certeza de que todos os comandos honrem essa convenção. ... (continua)command
-- *
*
,./*
e até mesmo/opt/*
deixar de encontrar “dot files” (.*
) a menos que odotglob
opção é definida. Como Joshua Besneatte e ilkkachu dizem,chown -R /opt
echown -R .
são melhores. ... (continua)O shell glob
.*
corresponde..
(o diretório pai) neste caso, infelizmente, é o seguinte/
:Para discussões adicionais, consulte:
fonte
Seus problemas vieram porque
.*
corresponde a tudo que começa com um ponto. O contexto é o diretório atual, pois essa expressão não inclui um caminho. Portanto, se houver arquivos ou pastas ocultos, como.git
no diretório atual, você os corresponderá. Mas (como você verá executandols -a
nessa pasta), você também corresponderá.
e..
E
..
, é claro, é o diretório pai, de modo tãochmod -R
recursivo direcionado para tudo no diretório pai.fonte
/opt/.*
não ajudaria,/opt/..
é o mesmo que..
com CWD =/opt
..
como contexto, mas não funcionou dessa maneira devido à barra que faltava ...