script programas programa kali hacer extension ejemplos ejecutar ejecutable desde crear como linux executable file-permissions chmod gedit

linux - kali - ejemplos de programas en bash



Creando archivos ejecutables en Linux (5)

Una cosa que planeo hacer es escribir (dolorosamente simples) scripts Perl, y me gustaría poder ejecutarlos sin llamar explícitamente a Perl desde la terminal. Aprecio que, para hacer esto, necesito otorgarles permisos de ejecución. Hacer esto con chmod es bastante fácil, pero también parece un paso extra un poco laborioso. Lo que me gustaría es una de dos cosas:

En primer lugar, ¿hay alguna forma de establecer el indicador de ejecución al guardar un archivo? Actualmente estoy experimentando con gedit y geany, pero estaría dispuesto a cambiar a un editor de características similares (o mejores) si tuviera esta capacidad.

En su defecto, ¿hay alguna manera de declarar que todos los archivos creados en un directorio particular deberían tener permisos de ejecución?

Mi umask está configurada en 022, lo que debería estar bien, por lo que yo entiendo, pero parece que los archivos se crean como archivos de texto (con 666 permisos predeterminados) en lugar de archivos ejecutables (con 777 permisos predeterminados).

Tal vez solo soy perezoso, pero creo que debe haber una manera más conveniente que cambiar cada uno de los guiones que uno crea.


Creo que el problema al que te estás enfrentando es que, aunque puedes establecer tus propios valores de umask en el sistema, esto no te permite controlar explícitamente los permisos predeterminados establecidos en un nuevo archivo por gedit (o el editor que uses) .

Creo que este detalle está codificado en gedit y en la mayoría de los otros editores. Sus opciones para cambiarlo son (a) piratear su propio mod de gedit o (b) encontrar un editor de texto que le permita establecer una preferencia por permisos predeterminados en archivos nuevos. (Lo siento, no conozco ninguno)

A la luz de esto, realmente no es tan malo tener que modificar sus archivos, ¿verdad?


Hacer el archivo ejecutable:

archivo chmod + x

Encuentra la ubicación de perl:

que perl

Esto debería devolver algo así como

/ bin / perl a veces / usr / local / bin

Luego, en la primera línea de su script, agregue:

#! "ruta" / perl con ruta desde arriba, por ejemplo

#! / bin / perl

Entonces puedes ejecutar el archivo

./archivo

Puede haber algunos problemas con la RUTA, por lo que es posible que desee cambiar eso también ...


Lo que describes es la forma correcta de manejar esto.

Dijiste que quieres permanecer en la GUI. Por lo general, puede establecer el bit de ejecución a través del menú de propiedades del archivo. También puede aprender cómo crear una acción personalizada para el menú contextual para que lo haga por usted si así lo desea. Esto depende de su entorno de escritorio, por supuesto.

Si usa un editor más avanzado, puede programar la acción para que ocurra cuando se guarde el archivo. Por ejemplo (estoy muy familiarizado con vim), puede agregar esto a su .vimrc para crear cualquier archivo nuevo que comience con el ejecutable " #!/*/bin/* ".

au BufWritePost * if getline(1) =~ "^#!" | if getline(1) =~ "/bin/" | silent !chmod +x <afile> | endif | endif


No es necesario hackear su editor o cambiar de editor.

En su lugar, podemos crear un script para ver sus directorios de desarrollo y archivos chmod a medida que se crean. Esto es lo que hice en el script bash adjunto. Probablemente quiera leer los comentarios y editar la sección ''config'' que se ajuste a sus necesidades, entonces le sugiero colocarla en su directorio $ HOME / bin / y agregar su ejecución a su $ HOME / .login o archivo similar. O simplemente puede ejecutarlo desde la terminal.

Este script requiere inotifywait, que viene en el paquete inotify-tools en Ubuntu,

sudo apt-get install inotify-tools

Sugerencias / ediciones / mejoras son bienvenidas.

#!/usr/bin/env bash # --- usage --- # # Depends: ''inotifywait'' available in inotify-tools on Ubuntu # # Edit the ''config'' section below to reflect your working directory, WORK_DIR, # and your watched directories, WATCH_DIR. Each directory in WATCH_DIR will # be logged by inotify and this script will ''chmod +x'' any new files created # therein. If SUBDIRS is ''TRUE'' this script will watch WATCH_DIRS recursively. # I recommend adding this script to your $HOME/.login or similar to have it # run whenever you log into a shell, eg ''echo "watchdirs.sh &" >> ~/.login''. # This script will only allow one instance of itself to run at a time. # --- config --- # WORK_DIR="$HOME/path/to/devel" # top working directory (for cleanliness?) WATCH_DIRS=" / $WORK_DIR/dirA / $WORK_DIR/dirC / " # list of directories to watch SUBDIRS="TRUE" # watch subdirectories too NOTIFY_ARGS="-e create -q" # watch for create events, non-verbose # --- script starts here --- # # probably don''t need to edit beyond this point # kill all previous instances of myself SCRIPT="bash.*`basename $0`" MATCHES=`ps ax | egrep $SCRIPT | grep -v grep | awk ''{print $1}'' | grep -v $$` kill $MATCHES >& /dev/null # set recursive notifications (for subdirectories) if [ "$SUBDIRS" = "TRUE" ] ; then RECURSE="-r" else RECURSE="" fi while true ; do # grab an event EVENT=`inotifywait $RECURSE $NOTIFY_ARGS $WATCH_DIRS` # parse the event into DIR, TAGS, FILE OLDIFS=$IFS ; IFS=" " ; set -- $EVENT E_DIR=$1 E_TAGS=$2 E_FILE=$3 IFS=$OLDIFS # skip if it''s not a file event or already executable (unlikely) if [ ! -f "$E_DIR$E_FILE" ] || [ -x "$E_DIR$E_FILE" ] ; then continue fi # set file executable chmod +x $E_DIR$E_FILE done


Realmente no es tan importante. Podrías hacer una secuencia de comandos con el único comando:

chmod a+x *.pl

Y ejecute el script luego de crear un archivo perl. Alternativamente, podría abrir un archivo con un comando como este:

touch filename.pl && chmod a+x filename.pl && vi filename.pl # choose your favorite editor