+ Responder ao Tópico



  1. #1

    Padrão Arquivo executável no Linux


    Pessoal do fórum, boa noite a todos.
    Gostaria que alguém por favor me explicasse como faço para tornar um arquivo linux em um arquivo executável, tipo um autoexec.bat no antigo DOS.
    Exemplificando : tenho algumas regras de IPTables que quero executar apenas quando necessito. Aí digitei essas regras num arquivo.
    Mudei as permissões desse arquivo acrescentando a permissao x para ser executado. Mas quando digito o nome do arquivo o linux diz comando desconhecido ou inválido, alguma coisa assim.
    Alguém no fórum poderia me explicar por favor, como faço para tornar um arquivo Linux em arquivo executável ???
    Obrigado a todos ....
    <IMG SRC="images/forum/icons/icon_frown.gif">

  2. #2

    Padrão Arquivo executável no Linux

    Olá Pssgyn tudo bem contigo?
    Vamos devagar:
    Quando vc dá um comando ls -al no seu console, ele lista pra você todos os arquivos do seu diretório, antes dos nomes dos arquivos, aparecem umas letras "estranhas", algo do tipo

    -rw-rw-rw- Pssgyn usuarios nomedoarquivo

    Esta primeira coluna te indica simplesmente que o arquivo pode ser lido (r) e gravado (w) pelo root (primeira sequência de caracteres) lido e gravado pelo usuário Pssgyn (segunda sequência de caracteres) e liso e gravado por todos os usuários pertencentes ao grupo usuarios (terceira sequência de caracteres)

    -rwx-r--wx Pssgyn usuarios nomedoarquivo
    Já este arquivo, pode ser lido, gravado e executado (x) pelo root, somente lido pelo usuário Pssgyn e gravado e executado pelos usuários pertencentes ao grupo usuarios.
    Provavelmente, este arquivo que você criou com as regras do iptables não possui nenhum X nas suas permissões, para alterar isso, utilize o comando chmod
    não me lembro exatamente quais são os opcionais do chmod só que se vc escrever,
    chmod 111 o nome do arquivo, ele altera o deixando-o todos os usuários, root (primeiro número), usuário que executa o comando (segundo número) e o grupo de usuários do usuário que está executando o comando (terceiro número) a "executar o arquivo", executar o arquivo aqui encontra-se entre parênteses, pois não me recordo qual é a função do 1,
    sei que os números 1,2 e 4 possuem um significado, e se vc quizer que o arquivo seja lido e executado, basta vc somar os números que representem as funções do ler e do executar, por exemplo
    chmd 700 arquivo, deixa o "arquivo" ser lido, executado e gravado somente pelo root.
    para executar qualquer arquivo executavel dentro de um diretório, digite o comando
    ./nomedoarquivo
    para deixar um arquivo ser executado de qualquer parte do sistema, basta criar um link para ele dentro do diretório
    /bin
    cd /bin
    ln -s /diretório_do_arquivo/nomedoarquivo_original nomedolink
    com isso, em qualquer parte do sistema, se vc digitar o nomedolink, ele irá executar o arquivo_original
    outra solução mais simples, é copiar o arquivo para dentro do diretório
    /bin
    cp /diretório_do_arquivo/nome_do_arquivo /bin

    Ficou claro isso?

    Fase 2;
    Existe um diretório no seu linux (qual é a sua distro?) que geralmente é o
    /etc/inid.d/
    que possui todos os arquivos que devem ser executados na inicialização do sistema, estes arquivos, são uns "autoexecs.bat" só que eles possuem uma formatação padrão:
    por exemplo, dentro do seu diretório /etc/init.d/ deve existir um arquivo network, este arquivo network é o cara que inicializa a sua rede, assim, ao digitar
    /etc/init.d/network start
    vc irá iniciar a sua rede, ao digitar
    /etc/init.d/network stop
    você irá parar a sua rede, essa é a formatação do arquivo de inicialização do linux, para iniciá-lo, você deve digitar
    nome_do_arquivo start
    nome_do_arquivo stop para parar
    nome_do_arquivo restart para reiniciar
    isso deve estar explicito no seu script.

    Depois de tudo isso, existe um comando que irá colocar o seu arquivo para ser iniciado junto com o sistema, só que este comando eu não me lembro, porém, se você colocar o caminho do seu arquivo dentro de um dos arquivos que se iniciam automaticamente, ele irá se inicializar. Concordo que isso é uma solução nascoxa, só que por pura preguiça faço isso aqui em casa e dá certo. Preciso dar uma pesquisada neste comando, pois já estou devendo ele para muita gente aqui no fórum


  3. #3

    Padrão Arquivo executável no Linux

    Eu acho que voce foi muito alem do necessario e nao tirou a real duvida do cara...

    voce roda os comando iptables via bash, logo o seu script tem que ser interpreado via bash.. pelo que voce falou voce so tem as regras do iptables no script nao eh?

    poiseh tai um erro, voce prescisa de um "header" antes de comecar o script, como voce vai executar no bash, coloque

    #!/bin/bash

    na primeira linha do arquivo

    entao eh soh dar ./arquivo que ele vai executar (claro se tiver permissao de execucao)

    se voce nao quiser inserir essa linha milagrosa que nos faz ficar cada mais preguissos voce pode digitar: bash ./arquivo que ele vai executar o arquivo "como" se a linha estivesse la...

    bom eh isso ai, da para resolver o seu problema, ah se POSSIVEL (EH ACONSELHAVEL, leia-se quase que necessario) voce dizer o path todo do q voce quer executar, por exemplo:

    voce quer executar o iptables, entao voce poem la /usr/sbin/iptables ao inves de so iptables, eh mais garantido funcionar assim (nao que do outro jeito nao funcione)

  4. #4
    LINUX_ANIMAL
    Visitante

    Padrão Arquivo executável no Linux

    Cara.....faça seu script normallmente....coloque no topo do script o que o colega acima falou

    #!/bin/bash


    salve.....de permissão de execução

    chmod +x script

    depois se quiser cpie ele pra /usr/bin

    daí de onde vc estiver no sistema é só digitar script ele vai iniciar....

    []s
    ANIMAL

  5. #5

    Padrão Arquivo executável no Linux

    Independente de quem vc vai seguir o conselho seria recomendavel que vc desse uma lida no que o vonlinkerstain disse...assim vc nao apenas faria o arquivo executavel...mas tbm entenderia pq ele eh executavel ou nao...

  6. #6

    Padrão Arquivo executável no Linux


    Valeu galera. Obrigado a todos .....
    <IMG SRC="images/forum/icons/icon_wink.gif">

  7. #7
    erivss
    Visitante

    Padrão Arquivo executável no Linux

    ok amigo!

    - vc cria o arquivo da seguinte maneira touch nome.sh
    - depois edita ele vi nome.sh
    - adiciona todas as regras de firewall que vc necessita
    - depois chmod +x nome.sh
    Obs: quando vc editar novamente vc vai percebre que a coloração mudou,
    ou seja ele virou um script.
    - e ai é so você copiar o arquivo para o diretorio /bin
    quando vc reiniciar a maquina ele vira um comando nativo do linux podendo ser acessado de qualquer lugar.
    <IMG SRC="images/forum/icons/icon_smile.gif">

  8. #8
    Administrador Avatar de Fernando
    Ingresso
    Jul 2001
    Localização
    Campinas Area
    Posts
    4.996
    Posts de Blog
    4

    Padrão Arquivo executável no Linux

    Eita... Realmente Von, apelou pro cara heheheh
    Mas explicou direitinho, vale a pena sim..

    Eu ainda acho que o tal do chmod +x é o mais facil pra voce comecar viu

    cria o arquivo, digita la

    chmod +x arquivo
    e executa ele

    ./arquivo

  9. #9

    Padrão Explicação

    Aos críticos,
    Só queria explicar ao colega o que é que ele deveria fazer, como fazer e qual era os significados daqueles comandos, garanto que tem muita gente que vem do windows, e que não sabe disso.

    Outro detalhe, nunca fiz um script na minha vida (isso pode até ser vergonhoso, mas admito), por isso, não sabia como fazer isso via script. Não sei se confundi vc pssgyn, se o fiz, desculpe-me.

    Abraços à todos,
    Dirceu Semighini Filho

  10. #10
    estanisgeyer
    Visitante

    Padrão Formidável

    Gostei da posição do Von, sua simplicidade, humildade e força de vontade.
    Sabem... Falta muito desses valores em vários administradores de sistema.
    Parabéns, boas festas.

    []'s

    Marcelo Estanislau

  11. #11

    Padrão Arquivo executável no Linux

    Todas as respostas foram muito boas , mas concordo como o mistymst e o psy, pelo que li da pergunta a resposta pura e simples eh:

    ./nome de arquivo

    Porque a mesagem de comando ou nome de arquivo invalido eh devido ao seu arquivo nao estar em um diretorio de path de comando e ao fato de que (diferente do dos) o linux nao procura tambem no diretorio local, a nao ser que vc especifique que quer o diretorio local para executar o arquivo, que eh justamente o "./" .


    Depois do (chmod +x nomedoarquivo) voce pode optar por por seu arquivo executavel em algum direitorio (como /usr/local/bin ou /usr/bin) caso ele seja um executavel interessante para uso de todos (MAS SEMPRE VERIFICANDO SE O NOME JAH NAO PERNTENCE A OUTRO PROGRAMA).

    No caso de arquivo de configuraçao de firewall por exemplo (como acontece no slackware) bem melhor eh por o arquivo em um diretorio dentro do (etc/rc.*algumacoisa*) mas ai , dependendo de qual distribuiçaõ e de como esta configurado ele pode ser disparado automaticamente , e pele que eu li, nao parece ser isso que vc quer....

    QQ coisa estaremos sempre por aqui........