¿Cómo puedo escribir y utilizar después un archivo de comando por lotes de texto típico?
Estoy hablando de un archivo que tiene los siguientes comandos:
sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit
Supongo que puedo escribirlo con Leafpad, pero...
¿Dónde tengo que guardarlo?
¿Qué formato? ¿Qué nombre y extensión?
¿Cómo puedo usarlo, después de eso, en una sesión de LXTerminal, con un solo pedido (idealmente si hubiera una manera de usarlo automáticamente cada vez que se inicia el sistema)?
¡Muchas gracias por su tiempo!
Respuesta1
No existen archivos "por lotes" en el mundo tipo Unix. Usamos scripts que contienen "she-bangs". Para crear un script como este, abra un editor de texto (como Leafpad) y comience con una línea como esta:
#!/path/to/interpreter
¿Dónde /path/to/interpreter
está la ubicación del binario que se utilizará para interpretar su script? En Linux usualmente usamos "bash" (Bourne Again SHell), una "evolución" del viejo Bourne Shell. Lo que hace bash es básicamente ejecutar archivos binarios con argumentos especificados en el script a partir de rutas incluidas en la variable de entorno PATH (generalmente incluye /bin, /sbin, /usr/bin, /usr/sbin y otros).
Pero también puedes utilizar otros intérpretes como Python, Perl, Ruby, sh, csh, zsh, dash, ksh, además de toneladas de opciones.
Debajo del she-bang viene tu guión. En su caso específico, para ejecutar los comandos especificados, podemos usar bash, en un 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
Ahora guarde su archivo. No es necesaria una extensión, pero por razones simbólicas, asígnele el nombre con una extensión .sh. Ejecutaremos el script como superusuario, por lo que no es necesario cambiar los permisos del archivo.
Abra una terminal y acceda a la ruta donde guardó su script. Digamos que lo guardó como script.sh. Ejecute el siguiente comando:
chmod +x script.sh
chmod
significa "modo de cambio" y se utiliza para cambiar quién puede hacer qué con su secuencia de comandos. +x
agrega el permiso de ejecución para todos los usuarios, lo que permite que cualquiera ejecute el script como si fuera cualquier otro programa. No entraré en una lista completa de lo que significan los diferentes permisos, peroesta preguntalos resume bastante bien. Después de eso, puedes escribir:
sudo ./script.sh
No olvides la parte ./ y no dejes espacios entre ., / y s. El sudo
comando se ejecutará ./script.sh
con privilegios de root, por lo que se requerirá su contraseña (debe ser el administrador del sistema, por supuesto).
Respuesta2
Lo que en el mundo de Windows se llama archivo "por lotes", se llama "script" en el mundo *NIX. En su mayor parte, los scripts son un archivo con múltiples comandos o comandos organizados de maneras específicas. Aquí hay un par de cosas que debes saber:
Estructura basica
Normalmente verá algo como esto:
#!/bin/sh
# Comments
printf "Hello world"
La primera línea especifica un intérprete (comúnmente denominado shebang
línea), la segunda es un comentario (lo que sigue #
no se interpreta, solo texto sin formato), la tercera es el comando real.
En la terminal puedes llamar a un archivo sin la línea shebang. Eso hará que el script sea leído e interpretado por su shell actual (también conocido como intérprete de comandos). Por ejemplo, estoy ejecutando mksh
shell. Especifico que #!/bin/sh
será ejecutado por el shell predeterminado de Ubuntu: dash
. Cada shell tiene algunos detalles sobre su sintaxis de comandos, por lo que debes adaptar tu script en consecuencia.
Escribir guion
Esto debe hacerse en un editor de texto, pero también puedes escribirlo en LibreOffice Writer y luego guardarlo en texto sin formato. Personalmente, sólo uso editores de texto de línea de comandos ( nano
en su mayor parte o vim
); La analogía aquí sería edit
en las versiones de Windows anteriores a Windows 7.
Los nombres y extensiones de los archivos no importan en los sistemas *NIX, ya que el sistema lee los primeros bytes del archivo para determinar su tipo. Me acostumbré a agregar .sh
extensiones, pero en realidad, es innecesario.
Hacer que el script sea ejecutable
Eso se hace usando chmod 755 scriptName.sh
el comando. Significa read-write-execute
permisos para el propietario (usted) read-execute
para los usuarios que están en el grupo del propietario (por ejemplo, el propietario del archivo podría ser admin
, por lo que si pertenece al admin
grupo, puede leer y ejecutar el archivo), y read-execute
para cualquier otra persona. ¡Nunca des permisos de escritura a otros! Si tiene privilegios de superusuario, eso podría resultar en algún mal juju (es decir, podría ser pirateado y un usuario malintencionado cambiará sus scripts para conservar su información personal).
Ejecución de scripts
Siempre puedes ejecutar un script navegando hasta la ubicación del script en la terminal y escribiendo ./scriptName
.
Para ejecutar cualquier comando en cualquier lugar, incluidos los scripts, deben almacenarse en algún lugar del sistema incluido en la $PATH
variable. Esto es lo que quiero decir:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin
$PATH
La variable me dice que si un script o un archivo binario ejecutable se encuentra en /usr/local/sbin
o /usr/local/bin
en cualquier otro de esos directorios, puedo ejecutar ese comando simplemente escribiéndolo en la terminal.
Ahora, para sus propios scripts, debe crear bin
una carpeta y almacenar los scripts allí. Si está utilizando bash
su .profile
archivo de configuración contiene las siguientes líneas:
# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
# PATH="$HOME/bin:$PATH"
#fi
Si descomentas (eliminas #
) delante de las últimas tres líneas (de if
a fi
), tu bin
carpeta personal se incluirá en la $PATH
variable.