AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 792565
Accepted
jsx97
jsx97
Asked: 2025-03-17 01:11:30 +0800 CST2025-03-17 01:11:30 +0800 CST 2025-03-17 01:11:30 +0800 CST

Tornar o script executável: chmod +x vs. a+x vs. a+rx

  • 772

Para tornar um script de shell executável, parece haver três opções:

  • Opção 1:chmod +x script.sh
  • Opção 2:chmod a+x script.sh
  • Opção 3:chmod a+rx script.sh

Aqui estão duas perguntas.

Q1. O que realmente significa que a primeira e a segunda opções concedem permissão para executar, mas não concedem permissão para ler? Como isso é possível na vida real?

Q2. Qual dessas opções é recomendada para um caso geral? Ou, para tornar essa pergunta menos pessoal, quais são os prós e os contras de cada opção?

permissions
  • 2 2 respostas
  • 52 Views

2 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2025-03-17T01:28:55+08:002025-03-17T01:28:55+08:00

    Com +, você adiciona bits de permissão. aé a abreviação de ugoque significa o bit que ele adicionou às permissões user, group e other, o que significa que o arquivo acaba sendo executável por todos. Sem o a, é o mesmo, exceto que está sujeito a umask.

    $ umask 077 # same as umask u=rwx
    $ chmod 0 file; chmod a+x file; ls -ld file
    ---x--x--x 1 chazelas chazelas 0 Mar 16 17:16 file
    $ chmod 0 file; chmod +x file; ls -ld file
    ---x------ 1 chazelas chazelas 0 Mar 16 17:16 file
    

    Este último só é executável pelo seu proprietário.

    Agora, você terá permissão para executar esse arquivo.

    Se esse arquivo começar com #! /bin/echo, e você executar ./file, o sistema executará /bin/echo ./fileo que é normal.

    Mas se começar com #! /bin/zsh -, isso se transformará na execução de /bin/zsh - ./file, mas enquanto /bin/echoapenas exibe seus argumentos, /bin/zshcomo todos os intérpretes de linguagem tentarão abrir o arquivo fornecido como argumento e ler seu conteúdo para interpretar o código nele.

    Mas sem permissão de leitura , ele não pode fazer isso, então falhará.

    Então você também precisa dar permissões de leitura aos usuários que você deseja permitir que executem esse script.

    chmod a+rx file
    

    Permitirá que qualquer um execute o script. Ele não tocará nos outros bits das permissões (write, setuid, setgid, t bits) que podem ou não ser desejáveis.

    Para que um script instalado em todo o sistema seja usado por todos, você, como administrador, deve ter certeza de que ele pertence a root, para que ninguém (além de rootquem tem todos os direitos) possa alterar sua permissão e dar a permissão de gravação, no máximo, ao seu proprietário.

    chown root: /usr/local/bin/your-script
    chmod a=rx,u+w /usr/local/bin/your-script # or chmod 755
    

    Para um script que ninguém além dos membros de um determinado grupo pode executar:

    chown root:somegroup /usr/local/bin/restricted-script
    chmod u=rwx,g=rx,o= /usr/local/bin/restricted-script # or chmod 750
    
    • 3
  2. Chris Davies
    2025-03-17T01:29:55+08:002025-03-17T01:29:55+08:00

    Q1 é uma duplicata de (pelo menos) Permissão de arquivo executar somente

    Q2 depende do caso de uso. Se você quiser criar um script que somente você pode acessar e executar, você pode usar chmod u+rx {file}. (A probabilidade é que você já tenha u=rwpermissões, então você provavelmente só precisaria adicionar execute com +x. Mas para um script é uma boa prática adicionar read e execute, portanto +rx.) Se você quisesse criar um script que você e outros membros do grupo pudessem acessar e executar, você poderia usar chmod ug+rx {file}. Se você quisesse que qualquer pessoa pudesse acessar e executar o script, você poderia usar chmod a+rx {file}.

    Notas

    1. Todos esses comandos chmod assumem que o script é acessível ao público apropriado. Se você colocar o arquivo em um diretório que só pode ser acessado por você, não importa o quão relaxadas as permissões sejam - o arquivo não será acessível a ninguém além de você, de qualquer forma.

    2. Não há nada que impeça você de usar permissões absolutas, como ou chmod u=rwx,go= {file}em vez de adicionar permissões a um conjunto existente.chmod u=rwx,g=rx,o= {file}chmod u=rwx,go=rx {file}

    3. Você pode usar permissões octais, mas elas geralmente são mais difíceis de entender. O mesmo conjunto de permissões do #2 seria então chmod 700 {file}, chmod 750 {file}, e chmod 755 {file}.

    • 1

relate perguntas

  • Como funcionam as permissões de grupo?

  • Erro de permissão do arquivo de log do Redis, mas a permissão já é 777

  • Iniciando o comando zypper com privilégio root

  • Possíveis razões pelas quais o meld não pode acessar /dev/fd/* quando executado como usuário sem privilégios?

  • Os subdiretórios não vazios de outro usuário estão protegidos contra exclusão no meu diretório?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve