Acabei de fazer um chmod -x chmod


Respostas:


43

No Linux:

/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod

http://www.slideshare.net/cog/chmod-x-chmod


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)

4
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:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod

Acho que suas primeiras cpnecessidades para ter o sinalizador -p on
Riking

@ Vikings: Não é necessário para esse fim.
Pausado até novo aviso.

Isso foi semelhante à solução que eu encontrei, mas depois cpdo executável, eu apenas coloquei cato conteúdo chmodno arquivo temporário.
SpellingD

9

Usando Perl:

% perl -e 'chmod 0755, qw[/bin/chmod]'

7

setfacl -m u::rx /bin/chmod

... concederá ao proprietário permissões de execução.

Mas, o /lib/ld-linux.so.2truque é puro. :)


5

Isso é estranho ... Eu vi algo assim há alguns dias através do tweet de alguém ...

http://www.slideshare.net/cog/chmod-x-chmod


Links para outros sites não são úteis, pois o link será quebrado em algum momento. É como dizer a alguém para pesquisar no Google a resposta.
Phil Hannent

@ Phil Hannent: Eu também vi essa apresentação de slides há apenas três dias, então foi o meu primeiro pensamento, se o OP fosse um dos candidatos lá.
Boldewyn

Mesmo assim, vi isso no Reddit há alguns dias ...
Dentrasi 11/11

4

Você deve estar em um sistema em /bin/chmodque não pode ser carregado pelo vinculador dinâmico:

# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod

Isso funciona no meu sistema MacOS X.


2

/ de resgate / chmod 555 / bin / chmod

Eu acho que você também pode usar mtree.


Esta seria a minha solução favorita. Infelizmente não funciona com linux.


1

crie um novo chmod e use-o para o original

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod

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.
Chris Johnsen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.