bindbn, eu estava prestes a postar o mesmo link :-) mas eu estava lendo a mim mesmo porque sou novo nas coisas de unix / linux !!!
Rihatum 11/10/10
2
Em uma distribuição de 64 bits, talvez seja necessário usá-lo /lib64/ld-linux-x86-64.so.2. ldd /bin/chmoddeve listar exatamente qual vinculador executar.
goldPseudo
Eu ia escrever um programa mínimo que usos chmod (2), mas isso é mais frio
Adamo
11
@ Stefan: From man ld-linux.so: "ld.so [e ld-linux.so] carrega as bibliotecas compartilhadas necessárias para um programa, prepara o programa para ser executado e, em seguida, executa-o." ( ld.soé para a.outexecutáveis de formato e ld-linux.soé para o formato ELF.)
Pausado até novo aviso.
11
@ Stefan: O kernel realmente não sabe como carregar e executar executáveis vinculados dinamicamente, porque é altamente complexo e segue a glibc, não o kernel. ld-linux.soé uma espécie de híbrido executável / de biblioteca, vinculado estaticamente, executado no espaço do usuário e é responsável por carregar executáveis dinamicamente vinculados e todas as suas dependências e executá-los.
Jul10
18
Use python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
E, como one-liner:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos
18
Isso depende do fato de que as permissões de um arquivo de destino são preservadas, e não o arquivo de origem, quando ele está sendo copiado. Estamos "emprestando" as permissões de ls:
Definir uma umask de 000 não concederá permissão de execução ao arquivo quando ele for criado. Na melhor das hipóteses, obterá permissões rw-rw-rw-.
Barry Brown
2
@ Barry: Na verdade, depende do modo passado para creat (2) / open (2) / mkdir (2) / etc. Se umask == 0 e o syscall que cria o arquivo receber 0777 para o modo, o arquivo terá os bits de execução ativados. Por exemplo, vinculadores / compiladores passam 0777 ao escrever um “arquivo executável” (por exemplo (umask 000;gcc -o foo foo.c), produzirá um foocom o modo 777). No entanto, muitos shells (a maioria?) Passam no 0666 quando abrem / criam arquivos para redirecionamento, o que significa que essa resposta não funcionará sob muitos shells.
chmod
!Respostas:
No Linux:
http://www.slideshare.net/cog/chmod-x-chmod
fonte
/lib64/ld-linux-x86-64.so.2
.ldd /bin/chmod
deve listar exatamente qual vinculador executar.man ld-linux.so
: "ld.so [e ld-linux.so] carrega as bibliotecas compartilhadas necessárias para um programa, prepara o programa para ser executado e, em seguida, executa-o." (ld.so
é paraa.out
executáveis de formato eld-linux.so
é para o formato ELF.)ld-linux.so
é uma espécie de híbrido executável / de biblioteca, vinculado estaticamente, executado no espaço do usuário e é responsável por carregar executáveis dinamicamente vinculados e todas as suas dependências e executá-los.Use python:
fonte
python -c "import os; os.chmod('/bin/chmod', 0755)"
Isso depende do fato de que as permissões de um arquivo de destino são preservadas, e não o arquivo de origem, quando ele está sendo copiado. Estamos "emprestando" as permissões de
ls
:fonte
cp
necessidades para ter o sinalizador -p oncp
do executável, eu apenas coloqueicat
o conteúdochmod
no arquivo temporário.Usando Perl:
fonte
setfacl -m u::rx /bin/chmod
... concederá ao proprietário permissões de execução.
Mas, o
/lib/ld-linux.so.2
truque é puro. :)fonte
Isso é estranho ... Eu vi algo assim há alguns dias através do tweet de alguém ...
http://www.slideshare.net/cog/chmod-x-chmod
fonte
Você deve estar em um sistema em
/bin/chmod
que não pode ser carregado pelo vinculador dinâmico:Isso funciona no meu sistema MacOS X.
fonte
/ de resgate / chmod 555 / bin / chmod
Eu acho que você também pode usar mtree.
fonte
Eu suspeito que isso não seja uma pergunta real: http://www.slideshare.net/cog/chmod-x-chmod
fonte
crie um novo chmod e use-o para o original
fonte
(umask 000;gcc -o foo foo.c)
, produzirá umfoo
com o modo 777). No entanto, muitos shells (a maioria?) Passam no 0666 quando abrem / criam arquivos para redirecionamento, o que significa que essa resposta não funcionará sob muitos shells.