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">
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
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)
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
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...
Arquivo executável no Linux
Valeu galera. Obrigado a todos .....
<IMG SRC="images/forum/icons/icon_wink.gif">
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">
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
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........