www.agserrano.com/el-directorio-proc-en-linux/ por
siembravientos el 21-01-2013 10:08 UTC publicado: 21-01-2013 18:10 UTC
Seguramente te has preguntado alguna vez qué es ese misterioso directorio /proc que hay en tu sistema de ficheros (/proc filesystem). Originariamente, este directorio estaba pensado para ofrecer información rápida y de fácil acceso sobre los procesos del sistema. En la actualidad, su misión ha ido evolucionando y ahora tiene otras utilidades.
etiquetas: directorio /proc, linux, sistemas, kernel, filesystem negativos:
1 usuarios:
150 anónimos:
131
"¿De dónde salen entonces todos estos archivos y directorios? La respuesta es: directamente del Kernel."
#3 Cojonudo cuando tienes que hacer scripts de administración. Cuando estás haciendo aplicaciones en lenguajes compilados ya no es tan cojonudo tener que andar “parseando” archivos para obtener esa información en lugar obtenerla directamente mediante llamadas a funciones.
Pero, ojo, que no lo critico, al contrario, me parece una idea excepcional que “todo” en Linux/UNIX sea un archivo.
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/ip_forward
Yo lo veo más sencillo, y debugeable, bajo UNIX... pero bueno, allá cada uno. Y tengamos en cuenta que no hay que leer en ningún disco, está todo en RAM.
iSaludos!
sysctl -w net.ipv4.ip_forward=1
O ver cuántas CPUs tienes: cat /proc/cpuinfo | grep vendor_id | wc -l
Es básicamente lo que hace el SO, crear una capa de abstracción del sistema para que lo usen las aplicaciones, Windows lo hace mediante un montón de llamadas de sistema mediante interrupciones software para las que necesitas un montón de libracos (u hoy en día, el MSDN) mientras que en UNIX es bastante asequible navegar por los directorios del sistema buscando lo que necesitas.
en.wikipedia.org/wiki/System_call
#5 Échale un vistazo al código del comando ps, utiliza /proc/ y no llamadas a funciones.
A parte creo que para que se apliquen los cambios de sysctl al instante debes hacer un sysctl -P o sino se aplicaran cuando reinicies
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/ip_forward
se convertiria en:
sysctl -w net.ipv4.ip_forward=1
sysctl -p
El mayor coñazo, es que no puedes usar el autocompletar
De por sí, en linux los siguientes son equivalentes:
cat /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_forward=1
No hay que confundir el sysctl a secas, llamada equivalente a "syscall(SYS__sysctl, &args)" (man 2 sysctl), con el fichero de configuración /etc/sysctl.conf y el directorio asociado /etc/sysctl.d, que contienen los valores a cargar al arrancar el sistema, o en cualquier momento con sysctl -p.
en.wikipedia.org/wiki/Everything_is_a_file
/proc también puede montarse en los BSD, para usar programas de Linux ya que implementa la ABI en el kernel.
#22 Ciertamente GNU= Gnu's not Unix. La verdad es que GNU es UNIX+POSIX+Extensiones propias.
Su "organización" se parece más a Emacs/GNUstep/NeXTStep que la minimalista con comandos y tuberías a lo BSD o Plan9Port, o bien las utiliades de Suckless.org.
harmful.cat-v.org/software/
Hablo de filosofía, que no licencias, puesto que habrá por ahí aplicaciones GPL con DJVU y demás.
Subversión es intragable, GIT se entiende más rápido.
Y OpenBSD sí, es más facil de instalar que FreeBSD y recomiendan paquetes binarios frente a ports, por lo que la instalación es más sencilla.
Tmux > Screen. El primero permite subdividir la pantalla en vertical, screen no puede hacer eso.
Aún asi, cada cual que use la mejor herramienta de la que disponga. A fin de cuentas, todo funciona mas o menos igual.
GNU=Rendimeinto, funcionalidad y facilidad de uso pero con un diseño barroco.
BSD=Minimalismo, características avanzadas en opciones pero sencillez en el diseño.
En FreeBSD puedes instalar paquetes binarios, también.
Porque OpenBSD requiere más conocimientos técnicos que FreeBSD, por ejemplo(al menos desde la última vez que los instalé).
Al menos desde la 4.8, y ahora van por la 5.2. Apenas hay diferencias, pero FreeBSD tiene algo más de complejidad, y eso que he probado los 3 BSD más conocidos.
Una de las cosas que me gustan de OpenBSD es que hay menos rotura de ports que en FreeBSD. Meter GNuSTEP y Wmaker es cosa de crios, en FreeBSD algún que otro me ha cascado.
Es que GNUStep avanza bastante y cada aplicación está diseminada por ahí, pero es la única alternativa a programar en Cocoa+Objective C (OSX) que existe...
Y tales archivos de configuracion, para ser sinceros, ya me gustaría que fuesen en los sistemas de GNU la mitad de simples...
/etc/rc.conf es casi casi para tontos.
FreeBSD mola, pero eso de tener que meter medio sistema desde los ports y tener que configurar dependencias para obtener funcionalidades no me convence demasiado...
Primero deberías aprender a utilizar screen...
C-a S (split) Split the current region into two new ones.
C-a Q (only) Delete all regions but the current one.
C-a X (remove) Kill the current region.
C-a F (fit) Resize the window to the current region size.
C-a tab (focus) Switch the input focus to the next region.
#3 Es lo bueno y es lo malo, lo bueno que puedes aceder directamente a todo.
El problema es que los nuevos sistemas de ficheros para buscar los ficheros de forma mas eficiente almacenan las entradas de los directorios en arboles binarios en lugar de la clásica lista de nombre+inodo. Así que para mantener la compatibilidad guardan ambas.
#13 No es que estén integrados a la perfección, es que UNIX (y el kernel de Linux) están escritos en C con su API en C y con el ABI que se genera con C.
#14 Ya, pero aún así, si quieres una aplicación que lea muy rápido ciertos valores para tenerlos en tiempo real, siempre será más rápido mediante una llamada al kernel y que lo devuelva en una estructura que procesando archivos de texto.
División en columnas es mas explicito.
screen lo hace en filas. Personalmente nunca lo utilizo.
Sirve para hacer los backups, nunca se llena...
Me resulta curioso que, aunque procfs se inventó en UNIX a modo de estandar (lucasvr.gobolinux.org/etc/Killian84-Procfs-USENIX.pdf), hoy en día pareciera que sólo se usara en sistemas Unix Like (Linux), lo que lo convierte en no estandar, entendiendo estandar como aquello que todos usan y que permite cierta compatibilidad.
#45 No te hablo con la sabiduría del mundo, pero diría que ya que /proc es un sistema de ficheros virtual y, por ejemplo, cat /proc/0/stat es en realidad una llamada al kernel, tendría que hacer muchas pruebas antes de afirmar con certeza que una llamada al kernel sin pasar por /proc es más rápida. Dejando a un lado la rapidez, lo "molón" de procfs es que simplemente accediendo a una estructura tipo sistema de ficheros tienes información de los procesos uses el lenguaje de programación que uses. Lo que por ejemplo, hace poco me ha permitido programar un task manager en Android sin necesidad de usar C.
Entonces, si en lugar de usar 'cat' usas un 'ifstream' de C++ (o un FILE* de C) para meter en un 'char*' los datos devueltos por '/proc/0/stat', tienes que procesarlos en forma de cadena de caracteres, y eso consume mucho más tiempo que si existiera una llamada al sistema directamente que te devolviera una estructura con todos los datos.
Y sí, repito, yo no estoy en contra de que exista un sistema de archivos en memoria que te de todos esos datos, en absoluto, es una idea excelente. Pero lo que sí debería haber es una llamada al kernel que hiciera lo mismo por cuestiones de velocidad.