Como posso escrever e usar depois disso um arquivo de comando em lote de texto típico?
Estou falando de um arquivo que possui os seguintes comandos:
sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit
Acho que posso escrever com o Leafpad, mas...
Onde devo salvá-lo?
Qual formato? Qual nome e extensão?
Como posso utilizá-lo, depois disso, em uma sessão do LXTerminal, com apenas um pedido (idealmente se houvesse uma forma de utilizá-lo automaticamente cada vez que o sistema for inicializado)?
Muito obrigado pelo seu tempo!
Responder1
Não existem arquivos "lote" no mundo unix. Usamos scripts contendo "she-bangs". Para fazer um script como este, abra um editor de texto (como o Leafpad) e comece com uma linha como esta:
#!/path/to/interpreter
Onde /path/to/interpreter
está a localização do binário que será usado para interpretar seu script. No Linux costumamos usar "bash" (Bourne Again SHell), uma "evolução" do bom e velho Bourne Shell. O que o bash faz é basicamente executar binários com argumentos especificados no script a partir de caminhos incluídos na variável de ambiente PATH (geralmente inclui /bin, /sbin, /usr/bin, /usr/sbin e outros).
Mas você também pode usar outros interpretadores como Python, Perl, Ruby, sh, csh, zsh, dash, ksh, além de inúmeras opções.
Abaixo do she-bang vem o seu roteiro. No seu caso específico, para executar os comandos especificados, podemos usar o bash, em um script como este:
#!/bin/bash
# the line above sets bash as the interpreter
# note that "sudo" is not required here because we will run the script as super user later.
apt-get update
# updates APT repositories
apt-get upgrade
# check for software upgrades and upgrade them
apt-get autoremove
# remove obsolete packages
apt-get autoclean
# remove stored .deb files
apt-get check
# update package cache and check for broken dependencies
Agora salve seu arquivo. Não há necessidade de extensão, mas por razões simbólicas, nomeie-a com uma extensão .sh. Executaremos o script como superusuário, portanto não há necessidade de alterar as permissões do arquivo.
Abra um terminal e vá para o caminho onde você salvou seu script. Digamos que você o salvou como script.sh. Execute o seguinte comando:
chmod +x script.sh
chmod
significa "modo de mudança" e é usado para alterar quem pode fazer o quê com seu script. +x
adiciona a permissão de execução para todos os usuários, o que permite que qualquer pessoa execute o script como se fosse qualquer outro programa. Não vou entrar em uma lista completa do que significam todas as diferentes permissões, masessa questãoresume-os bastante bem. Depois disso, você pode digitar:
sudo ./script.sh
Não esqueça a parte ./ e não deixe espaços entre ., / e s. O sudo
comando será executado ./script.sh
com privilégios de root, portanto sua senha será necessária (você precisa ser o administrador do sistema, é claro).
Responder2
O que é chamado no mundo Windows de arquivo "lote" é chamado de "script" no mundo *NIX. Na maioria das vezes, os scripts são arquivos com vários comandos ou comandos organizados de maneiras específicas. Aqui estão algumas coisas que você deve saber:
Estrutura básica
Normalmente você verá algo assim:
#!/bin/sh
# Comments
printf "Hello world"
A primeira linha especifica um intérprete (comumente referido como shebang
linha), a segunda é um comentário (qualquer coisa depois #
não é interpretada, apenas texto simples), a terceira é o comando real
No terminal você pode chamar um arquivo sem a linha shebang. Isso fará com que o script seja lido e interpretado pelo seu shell atual (também conhecido como interpretador de comandos). Por exemplo, estou executando mksh
o shell. Eu especifico que #!/bin/sh
ele será executado pelo shell padrão do Ubuntu - dash
. Cada shell tem algumas especificações sobre a sintaxe dos comandos, portanto, você deve adaptar seu script de acordo.
Escrevendo roteiro
Isso deve ser feito em um editor de texto, mas você também pode escrever no LibreOffice Writer e depois salvá-lo em texto simples. Pessoalmente, eu apenas uso editores de texto de linha de comando ( nano
na maior parte ou vim
); a analogia aqui seria edit
nas versões anteriores ao Windows 7 do Windows.
Os nomes e extensões dos arquivos não importam nos sistemas *NIX, pois o sistema lê os primeiros bytes do arquivo para determinar seu tipo. Adquiri o hábito de adicionar .sh
extensões, mas na verdade é desnecessário.
Tornar o script executável
Isso é feito usando chmod 755 scriptName.sh
o comando. Significa read-write-execute
permissões para o proprietário (você) read-execute
para usuários que estão no grupo do proprietário (por exemplo, o proprietário do arquivo pode ser admin
, portanto, se você pertence ao admin
grupo, pode ler e executar o arquivo ) e read-execute
para qualquer outra pessoa. Nunca dê permissões de gravação a outras pessoas! Se você tiver privilégios de superusuário, isso pode resultar em algum juju ruim (também conhecido como você pode ser hackeado e um usuário mal-intencionado alterará seus scripts para manter suas informações pessoais).
Executando scripts
Você sempre pode executar um script navegando até o local do script no terminal e digitando ./scriptName
.
Para executar qualquer comando em qualquer lugar, incluindo scripts, eles devem ser armazenados em algum lugar do sistema que esteja incluído na $PATH
variável. Aqui está o que quero dizer:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin
$PATH
variável me diz que se um script ou arquivo binário executável estiver localizado em /usr/local/sbin
ou /usr/local/bin
em qualquer outro desses diretórios, posso executar esse comando apenas digitando-o no terminal.
Agora, para seus próprios scripts, você deve criar bin
uma pasta e armazenar os scripts lá. Se você estiver usando, bash
seu .profile
arquivo de configuração contém as seguintes linhas:
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
Se você descomentar (remover #
) antes das três últimas linhas (de if
até fi
), sua bin
pasta pessoal será incluída na $PATH
variável.