Quantcast
Channel: Preguntas más recientes con las etiquetas linux - Stack Overflow en español
Viewing all 1692 articles
Browse latest View live

¿Error 10 en la llamada al sistema wait?

$
0
0

estoy escribiendo un pequeño programa que crea 5 procesos hijos, cada proceso hijo escribe por pantalla su pid y termina. El proceso padre se debe quedar a la espera y notificar por pantalla cada vez que un proceso termine además de especificar cuántos procesos quedan activos.

El código que he escrito es el siguiente

#include<unistd.h> #include<stdio.h>#include<stdlib.h>#include<sys/types.h>  #include<stdio.h>#include<errno.h>#include <sys/wait.h>int main(int argc, char *argv[]){    int childpid=0;    int n_hijos = 5;    int estado;    pid_t pid_aux = 0;    for(int i = 0; i < n_hijos; i++)    {        if(childpid == 0)        {            if((childpid = fork()) == -1)            {                printf("\nError %d en fork",errno);                                                                                         exit(EXIT_FAILURE);            }        }    }    if(childpid != 0)    {        printf("Soy el hijo %d\n",getpid());        exit(EXIT_SUCCESS);    }    while(childpid == 0 && n_hijos > 0)    {        pid_aux = wait(&estado);        if(pid_aux == -1)        {            printf("\nError %d en wait",errno);                                             }        printf("\nAcaba de finalizar mi hijo con PID %d",pid_aux);        n_hijos--;        printf("\nSolo me quedan %d hijos vivos",n_hijos);    }    return EXIT_SUCCESS;}

El problema es que la variable pid_aux del bucle siempre vale -1 y la variable errno vale 10.

Ejecución del código

He buscado que quiere decir errno 10 en la llamada la sistema wait, pero no lo encuentro y no se que estoy haciendo mal.


Me da el error "bash: python: orden no encontrada" en Sublime Text 3 de Linux

$
0
0

Tengo algunos problemas al ejecutar un código fuente muy simple de python en sublime, he probado a correrlo en la terminal del sistema y ningún problema, pero si presiono Ctrl+b o F7 me aparece en consola lo siguiente:

bash: python: orden no encontrada[Finished in 0.0s with exit code 127][shell_cmd: python -u "/home/user/Desktop/GUI/one.py"][dir: /home/user/Desktop/GUI][path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin]

Pensé que tenía un problema en las variables del sistema (cosa que también podría ser), pero al parecer sublime utiliza la petición de shell como python y no python3, ya que en linux se escribe explícitamente así para la versión (creo), encontré la "solución" en este post de Stackoverflow.

Después de hacer algunas configuraciones funcionó, pero no como debería, quise utilizar el plugin Anaconda para agilizar en un futuro el desarrollo en python pero ... aparece otro error y esta vez en ventana.

Mensaje del plugin Anaconda

Ahora sí que estoy perdido ¿Tenéis alguna idea de porque sucede esto?

¿Como puedo comprimir en tar archivos según su tamaño?

$
0
0

Mi duda es que mi objetivo es comprimir por ejemplo los archivos de un directorio que pesen más de 100 MB. Sin embargo, no encuentro en el manual del comando tar una forma de hacerlo y no termino de verlo tampoco con el comando find e ir añadiendo los archivos uno a uno. Agradecería vuestra ayuda. Muchas gracias de antemano. Un saludo

Problema al obtener chars pasados como parámetros al main y con la llamada al sistema execv

$
0
0

tengo que hacer un ejercicio que acepte como argumentos el nombre de un programa y parámetros en el caso de que los tenga.

He programado esto:

#include<sys/types.h>   #include<sys/wait.h>    #include<unistd.h>#include<stdio.h>#include<errno.h>#include <stdlib.h>#include <string.h>int main(int argc, char *argv[]){    char programa[10] = {};     char *parametros[10];    char* bg = "bg";    char *guion = "-";    char *ruta = "/usr/bin/";    char buff[10] = {};     int i;    int contador = 0;    if(argc < 2)    {        printf("\nSintaxis de ejecucion: ejercicio7 [programa] [parámetros] [bg]+\n\n");        exit(EXIT_FAILURE);    }    sprintf(programa,"%s%s",ruta,argv[1]);    parametros[contador] = argv[1];    contador++;    if(argc > 2)    {        for(i = 2; i < argc ; i++)        {           sprintf(buff,"%s%s",guion,argv[i]);           parametros[contador] = buff;           contador++;        }        parametros[contador] = 0;    }    printf(" %s ",programa);    printf("\nMostrando array de parametros");    for(i = 0; i < contador; i++)        printf(" %s ",parametros[i]);    if((execv(programa,parametros)) < 0 )    {        perror("\nError en el execv");        printf("\nError %d en exec",errno);         exit(EXIT_FAILURE);    }    return EXIT_SUCCESS;} 

Estoy realizando las pruebas con el programa lscpu.

Sin parámetros el programa funciona correctamente, lo llamo con ./programa lscpu

El problema viene cuando introduzco parámetros, si llamo al programa así ./programa lscpu a
, obtengo el siguiente error.

1er error

Arriba, se ve como aparece esto /usr/bin/l-a en el lugar donde debería aparecer esto /usr/bin/lscpu .

Por otro lado si introduzco varios parámetros, por ejemplo ./ejercicio lscpu a b c debería obtener en el printf final : lscpu -a -b -c, sin embargo obtengo lscpu -c -c -c.

2º error

Supongo que el error está en la forma que tengo de tratar el array parámetros, pero no consigo solucionar el problema.

Problema a ejecutar script mediante daemon [sytemd] que usa ficheros de su propio directorio

$
0
0

Pues tengo un daemon en systemd que arranca un script de python en un directorio, pongamos /home/user/proyecto/xxx.py

en dicho directorio hay tmb un archivo .txt que lee "xxx.py", de esta forma open("y.txt")el caso es que si arranco dicho daemon, obtengo un error, tal que:IOError: [Errno 2] No such file or directory: 'y.txt'

No seria para mi ideal editar el archivo y poner open("/home/user/proyecto/y.txt")

alguna otra solucion? o motivo?, gracias

No me sale el grub ,mala forma de iniciar linux

$
0
0

Yo ya tenia instalado linux mint y windows 10 dual boot, se iniciaba bien el grub y todo...Pero decidí cambiar por ubuntu... Para eso tenia que desinstalar el linux mint,... Y lo hice de la forma mas brusca posible... En administración de discos seleccione eliminar volumen luego reinicie mi pc ... Y pues me salio una pantalla negra algo relacionado con el grub, no sabia que hacer, hasta que coloque mi usb booteado con el linux mint eh ingrese al proceso de instalación del mint entonces botee mi usb con ubuntu, lo instale y todo, pero ya no me aparece el grub, y de frente iniciaba windows, una vez en windows trate de ver la forma de entrar a ubuntu pero esta como oculto por que windows no lo reconoce, la única forma que encontré fue presionando shift + reiniciar y luego seleccionar usar un dispositivo para finalmente seleccionar ubuntu. Pero se que eso está mal, alguien que por favor tenga alguna idea de cómo lograr que cada vez prenda mi pc pueda escojer entre ubuntu y windows. Por favor.

Editar scripts locales a través de un Servidor Web Local en Python 3

$
0
0

Dado un servidor web hecho en python ,que posee formularios y a raiz de la informacion pasada debo modificar un archivo de configuracion (INI), que esta en la maquina que tiene el servidor?

Filtrar datos con un patrón en AWK después de cierto número de coincidencia

$
0
0

Quiero filtrar los siguientes datos mediante AWK:

00$$$$11$$$$22$$$$33$$$$44$$$$55

y supongamos que quiero extraer los datos sólo entre el segundo patrón y el tercero:

22

No consigo que seleccione mediante "$" y que comience en la coincidencia que me interesa.

Lo único que tengo, o con lo que he arrancado es:

cat archivo| awk '/patron/{flag=1;next} /patron/{flag=0}flag'

Por patron se entiende en este caso $$$$, pero como comento con anterioridad no consigo que lo identifque.


¿Cómo imprimo las líneas de un bloque si en él aparece un patrón?

$
0
0

Pregunta que surge a partir de una cuestión anterior:

Filtrar datos con un patrón en AWK después de cierto número de coincidencia

Quiero filtrar los siguientes datos de forma genérica mediante Awk:

......$$$$11$$$$22$$$$33$$$$4clave4$$$$55$$$$......

y supongamos que quiero extraer los datos que están entre el patrón que contiene la palabra clave pero sin saber en que número de patrón nos encontramos.

4clave4

He probado lo siguiente:

awk '/^\$\$\$\$/{flag++;next} flag==1 && /clave/'

Pensaba que encontraría el primer patrón y mostraría sólo aquellos con la condición, en este caso "clave" pero no es así.

Obtener mediante awk una cadena que se encuentre después de un patrón determinado

$
0
0

Tengo un archivo .sdf sobre moléculas del cual paso a poner algunos datos que este tiene para ponernos en contexto:

$$$$> <FORMULA>C7H11N3O2> <MOLECULAR_WEIGHT>169.1811> <EXACT_MASS>169.085126611> <JCHEM_ACCEPTOR_COUNT>4> <JCHEM_AVERAGE_POLARIZABILITY>17.110928254345183$$$$> <FORMULA>C3H10N2> <MOLECULAR_WEIGHT>74.1249> <EXACT_MASS>74.08439833> <JCHEM_ACCEPTOR_COUNT>2> <JCHEM_AVERAGE_POLARIZABILITY>9.059383875573541> <JCHEM_BIOAVAILABILITY>1> <JCHEM_DONOR_COUNT>2> <JCHEM_FORMAL_CHARGE>0> <JCHEM_GHOSE_FILTER>0> <JCHEM_IUPAC>propane-1,3-diamine$$$$

Pues bien, me gustaría obtener solamente lo que se encuentra en el campo FORMULA, es decir,

C3H10N2C7H11N3O2

He probado varias cosas y por ahora lo que más se ha acercado ha sido

awk '/FORMULA/, /MOLECULAR/' fichero | grep -v FORMULA | grep -v MOLECULAR | grep ^[A-Z]

Con ese código he conseguido mostrar por pantalla lo que se encuentra entre los campos FORMULA y MOLECULAR. Sin embargo, echando un vistazo a la salida obtenida en la terminal he visto que he obtenido algunas cosas que no quiero y esto se debe a que no siempre se cumple que el campo FORMULA esta seguido del campo MOLECULAR. ¿Habría alguna otra forma de utilizar awk para obtener el output deseado?

Ubuntu Server 20.04 LTS 64bit(Linux) maquina virtual y enlace simbólico como directorio protegido

$
0
0

Tengo un problema con la protección del htaccess.

Directorio padre : /home/cornejo

Directorio donde se encontraría el enlace simbólico :home/cornejo/public_html/admin siendo admin el enlace simbólico.

Directorio del enlace simbólico dentro del directorio cornejo :home/cornejo/admin/

Ruta del htaccess home/cornejo/admin/.htaccess

Ruta del htpasswd home/cornejo/.htpasswd

He creado la password mediante htpasswd -c /home/cornejo/.htpasswd nombre_usuario

Contenido del htaccess

AuthType BasicAuthName "Contenido restringido solo para administradores"AuthUserFile /home/cornejo/.htpasswdRequire valid-user

¿Por qué la alerta de contraseña requerida se me notifica tanto en la página index.php que se encuentra en el directorio public_html como en los archivos dentro del directorio admin? Solo lo requiero en admin.

Linux requiere drivers?

$
0
0

No se si es el foro adecuado para esto, pero casi no encuentro respuestas en ningun lado

Acabo de instalar Ubuntu 20.04 para programar, en un entorno mas rapido, pero vengo de toda una vida con windows, mi pregunta es si requiero hacer una instalacion de drivers como en windows, o se bajan automaticamente, o simplemente no requieren

Solo se que los drivers de tarjeta grafica son los unicos que se bajan por ser "privativos"

Salto de línea mediante la terminal

$
0
0

Tengo un texto muy extenso generado por la unión de muchos textos.Necesito un formato en concreto (formato MALLET), y para ello he utilizado este código de python:

import globoutfilename = '/home/..../wikipedia.mallet'read_files = glob.glob('/home/.../WIKI/*')with open(outfilename, "w") as outfile:    for n, f in enumerate(read_files):       with open(f, "r") as infile:           txt = "texto{}\tX\t{}\n".format(n, infile.read())           outfile.write(txt)

Por lo que quedaría algo con la siguiente estructura:

texto0 X ... texto1 X ...

El problema es que ahora quiero añadir un salto de línea antes de cada textoX, para que así cada texto fuese una línea de el texto en formato MALLET.

Error de memoria en C++

$
0
0

Tengo este código y me sale este error:

15981 segmentation fault (core dumped)

¿Qué tengo mal?, es decir en teoría ahí funcionaría la matriz normal , pero me sale error de memoria, no sé si afecte pero estoy en Linux 20.04, compilando con g++

#include<iostream>using namespace  std;  int main(){    int a [3][3] = {        {1,2,3},        {1,2,3},        {1,2,3}    };    int i,j = 0;    while(i < 3){        while(j < 3){            cout<< a [i][j];            j ++;        }        cout << "\n";        j = 0;        i ++;    }    return (1); }

Problema con rutas al ejecutar scripts de shell con PHP y al acceder a archivos en un path

$
0
0

Tengo un servidor HTTP con lighttpd y uso php, he intentado ejecutar scripts sh o mismamente acceder a variables en una ruta concreta pero no funciona , creo que porque el directorio del archivo php se encuentra en /var/www/html y no puede acceder a ciertas rutas aun especificandolas.

Los comandos los ejecuto con shell_exec y respecto al archivo que quiero obtener y con el que trabajo es un archivo de configuracion en la ruta /home/jorge/proyecto/

Ejecutando comandos como shell_exec('./test.sh') ubicado en /home/jorge/proyecto/ tampoco funciona.No llega a ejecutar el comando , ni usando de path ./test.sh ni /home/jorge/proyecto/test.sh

Las primeras lineas son una solucion que vi , pero parece que no funciona.

El problema es que leer lee bien el archivo (con el parse) pero no guarda correctamente en el path , el metodo esta bien, lo he comprobado , asi que el problema viene con los paths.

<?php$old_path = getcwd();chdir('/home/jorge/proyecto/');echo $old_path; // el resultado es "/var/www/html"$path = "./config.ini";//Vuelco en la variable $archivo las configuraciones que hay en el archivo especificado//$archivo es un array asociativo$archivo = parse_ini_file("./config.ini");//Se guarda el contenido modificado, sobreescribiendo el fichero de configuracionescribir_ini($archivo, $path);$output = shell_exec('./test.sh')echo $output;?>

Problema para actualizar a ubuntu 18.10

$
0
0

Muy buenas, estoy intentando actualizar la versión de ubuntu de mi distribución. He resuelto todos los problemas que me impedían ejecutar el sudo do-release-upgrade y ahora solo me suelta el mensaje

Instale todas las actualizaciones disponibles de su versión antes de actualizar la distribución.

pero ya están todas instaladas. No veo que otra actualización deba hacer. También he intentado hacerlo desde actualización del software donde hay un botón que me permite actualizar la versión pero al darle no hace nada. Alguien que haya tenido este problema que me pueda ayudar por favor?

¿Cómo añado un salto de línea antes de un patrón?

$
0
0

Tengo un texto muy extenso generado por la unión de muchos textos.Necesito un formato en concreto *(formato MALLET).

Por lo que tendría que quedarme algo con la siguiente estructura:

texto0 X Exitus es un término latino significa «salida» y se emplea en ... texto1 X Levon Aronian (nacido el 6 de octubre de 1982). Es un gran ...texto2 X La pérdida es la carencia o privación de lo que se poseía. Artículos ...    .    .    .

Es decir, que cada artículo, fuese una línea.

El problema es que lo que tengo difiere de lo que necesito, es decir, yo tengo algo así:

texto0 X Exitus es un término latino significa «salida» y se emplea en ... texto1 X Levon Aronian (nacido el 6 de octubre de 1982). Es un gran ... texto2 X La pérdida es la carencia o privación de lo que se poseía. Artículos ...

Y por esto quiero añadir, a ser posible utilizando la terminal de Linux, un salto de línea, antes de cada textoX.

¿ como modificar el wordlist para hashcat en linux?

$
0
0

Tengo el diccionario rockyou.txt como saben tiene mas 100 millones compuesto por palabras y numeros...

suponemos que mi diccionario se llama hola.txt y tiene 100 millones de palabras , ok

yo uso hashcat que sirve para desencriptar hashes usando wordlist como en mi caso hola.txt

mi diccionario tiene 100 millones de palabras como elimino los primeros dos millones de palabras de mi diccionario y guardo los 98 millones restantes en otro archivo de texto por ejemplo hola1.txt

queria saber con que herramiento en linux o kali linux o parrot , tengo que usar y aparte el comando completo que tengo que poner en la terminal para eliminar los dos primeros millones de palabras y guardar el resto o sea los 98 millones de palabras en un nuevo archivo de texto.

Ejecutar uno o varios comandos sudo con PHP 7+

$
0
0

Mi objectivo es ejecutar varios comandos sudo con PHP , usando exec_shell(), probe de varias formas y me pide contraseña cosa que no se como manejar desde PHP (y seria inseguro hacer echo de mi root psswd), el tipo de comando que necesito ejecutar son systemctl start/stop mi_servicio.service almenos para 5 servicios, he probado haciendo $test = shell_exec("sudo -u root systemctl stop mi_servicio.service"); pero me pide pass , no se como podria hacer para que al ejecutar no pidiese contraseña, a ver, en visudo tendria que hacer algo como www-data ALL = NOPASSWD: $cmdpero dicha solucion no creo que sea adecuada , porque son 5 servicios , ademas no sabria que poner en $cmd.He tenido otras ideas como crear un .sh que segun los parametros que se le pase ejecute unos u otros comandos y editar visudo para que no se requiera pass para ese script, pero tampoco es del todo adecuada para mi la solucion.

Por otra parte, cabe otra posibilidad pero no he encontrado nada para ello ,y es que , estes comandos tienen que ser ejecutar a causa de que yo edito un archivo de configuracion el cual leen ciertos scripts mios usando

. /home/jorge/proyecto/config.ini, esa posibilidad seria crear un script que detectase si se ha hecho un cambio en ese archivo config.ini y con "if's" ejecutar el comando para reiniciar el servicio correspondiente al script que le afecte ese cambio.

¿Cómo podemos usar read () / write / send () / recv () para sockets de datagramas?

$
0
0

En The Linux Programming Interface, Sección 56.7

A typical datagram socket server creates a socket using socket(), and then bindsit to a well-known address using bind(). Because datagram sockets are connectionless,the server’s socket can be used to receive datagrams from any client. Datagrams canbe received using read() or using the socket-specific recvfrom() system call, whichreturns the address of the sending socket. A datagram socket client creates a socketusing socket(), and then uses sendto() to send a datagram to a specified (i.e., theserver’s) address. The connect() system call can be used with a datagram socket to set apeer address for the socket. After doing this, it is no longer necessary to specify the des-tination address for outgoing datagrams; a write() call can be used to send a datagram.

Sección 56.6.1

ssize_t recvfrom(int  sockfd , void * buffer , size_t  length , int  flags ,                 struct sockaddr * src_addr , socklen_t * addrlen );ssize_t sendto(int  sockfd , const void * buffer , size_t  length , int  flags ,               const struct sockaddr * dest_addr , socklen_t  addrlen );

For recvfrom(), if we are not interested in the address of the sender, then we specify bothsrc_addr and addrlen as NULL . In this case, recvfrom() is equivalent to using recv() toreceive a datagram.We can also use read() to read a datagram, which is equivalentto using recv() with a flags argument of 0.

¿Es correcto que recv () se usa en casos de datagramas y orientados a la conexión y, por lo tanto, siempre recibe datos de una fuente especificada en la conexión ya creada?

¿Cómo puede recvfrom () con src_addr y addrlen como NULL es equivalente a usar recv ()?

Suponiendo que no se usa connect () con sockets de datagramas (porque no se menciona en el contexto de la cita), ¿cómo podemos usar "read () para leer un datagrama", ya que read () no permite especificar la fuente?

Preguntas similares para sendto ():

  • ¿Sendto () permite que destaddr sea NULL y destlen sea 0? (¿Supongo que no?)
  • ¿Podemos usar write () o send () para enviar un datagrama, sin usar connect ()?
Viewing all 1692 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>