¿Como puedo acelerar el inicio del terminal en Lion?
No me refiero al inicio de la aplicación Terminal, sino a las ventanas del terminal de inicio, como cuando abro una nueva pestaña.
No tengo nada en mi archivo .bash_profile y ejecuto rm -rf /private/var/log/asl/*.asl
cada 4 horas (lo que borra esos archivos que generalmente hacen que la terminal sea lenta).
Actualmente, cuando abro una nueva pestaña, me toma 3-4 segundos hasta que pueda ejecutar algo.
macos
terminal
command-line
Fernando
fuente
fuente
.bash_profile
(también verifique~/.profile
por cierto). Además: tenga en cuenta que puede comenzar a escribir mientras se carga bash, y generalmente lo que escribe se copiará en el símbolo del sistema una vez que esté listo.Respuestas:
Respuesta corta:
El problema es causado por una (potencialmente) costosa búsqueda de registro del sistema ASL. Para ver esto en acción, ejecute
sudo fs_usage | grep 'asl.*login'
en una ventana de Terminal, luego abra una nueva ventana de Terminal.Para resolver el problema, configure Terminal para iniciar un shell no estándar:
sudo ln -s /bin/bash /usr/local/bin/bash
Nota 1: También es posible que deba agregar
bash
y agregar-bash
a la lista de procesos en "Preferencias de terminal> Perfiles> Shell> Preguntar antes de cerrar".Nota 2:
/usr/local/bin
se puede escribir en modo OS X 10.11 (El Capitan) Rootless.Para verificar la solución:
login -pfq username /usr/bin/bash
ologin -pfql username ...
Importante: si el comando de inicio de sesión no incluye el
-q
parámetro, entonces no ha solucionado el problema.También puede usar
sudo fs_usage | grep 'asl.*login'
para verificar que/var/log/asl
no se accede al abrir una nueva ventana de Terminal.Detalles:
Hay una serie de errores en juego aquí.
La causa real de la lentitud es
/usr/bin/login
que, de forma predeterminada, mostrará la fecha de su último inicio de sesión. Para obtener esta última fecha de inicio de sesión, busca en la base de datos ASL (Registro del sistema de Apple) en/var/log/asl/
. Estos archivos de registro pueden estar muy fragmentados y es esta fragmentación del archivo la que causa el retraso al abrir una nueva ventana o pestaña. (Error 1)La única forma de suprimir la búsqueda de ASL para el último inicio de sesión es pasar el
-q
parámetro a/usr/bin/login
. El.hushlogin
archivo también suprimirá la pantalla "Último inicio de sesión", pero no suprime la costosa búsqueda de ASL. (Error 2)La terminal siempre usa
/usr/bin/login
para lanzar cada nueva ventana / shell. No hay una opción para iniciar un shell directamente ni hay una forma de controlar directamente los parámetros pasados a/usr/bin/login
(Bug 3).Como resultado, Terminal pasará el
-q
parámetro/usr/bin/login
cuando esté configurado para usar un shell no estándar . (Error 4)El
-q
parámetro es lo que necesitamos para evitar el problema, de ahí el enlace simbólico a/usr/local/bin/bash
.fuente
/bin/bash
se comporta como si se hubiera seleccionado el Shell de inicio de sesión predeterminado. Cualquier comando que/bin/bash
no sea el correcto funcionará, por lo que usar / usr / bin / bash es solo una solución alternativa. Este error no está presente en Snow Leopard.Lo que necesitaba era cambiar de shell de inicio de sesión a comando
/bin/bash -il
en las Preferencias de iTerm > Perfiles> General> Comando .Necesitaba agregar la opción
-l
( Hacer que bash actúe como si se hubiera invocado como un shell de inicio de sesión ) para establecer variables ambientales desde~/.bash_profile
fuente
.hushlogin
Cree un archivo vacío en su carpeta de inicio llamado
.hushlogin
; esto disminuirá significativamente el tiempo que tarda una pestaña Terminal.app en aparecer.Puede crear el
.hushlogin
archivo en Terminal.app usando el siguiente comando:El archivo entrará en vigencia de inmediato.
Puede obtener más información sobre el
.hushlogin
archivo y el proceso de inicio de sesión en general en el manual de inicio de sesión .Silenciar el proceso de inicio de sesión
Cuando crea una nueva pestaña Terminal, está pasando por el proceso de inicio de sesión. El proceso implica obtener información diversa sobre su sesión de inicio de sesión anterior, el mensaje del día y mostrar mensajes del sistema. Esto puede ser la fuente de retrasos significativos. Intenta silenciar estos mensajes para ver si la demora desaparece.
fuente
opensnoop
. Vea mi respuesta a continuación.OK, tengo una conclusión similar a Darren, aunque un mecanismo de creación de perfiles ligeramente diferente (NB, el inicio de sesión lento todavía puede ocurrir en Yosemite).
Aquí hay una manera de saber qué se está ejecutando realmente cuando inicia una nueva ventana de inicio de sesión, utilizando el comando OS X sample profiler.
Descubra qué comando ejecuta un inicio de sesión normal
Verás algo como
login -pfl username /bin/bash -c exec -la bash /bin/bash
Cree un nombre de archivo de script
profile_login.sh
con el siguiente contenido agregando un-c ""
al final del comando descubierto para solicitar que bash regrese de inmediato, con contenidos como este:
Hazlo ejecutable
$ chmod u+x profile_login.sh
y ejecútalo usando sudo (el
sample
comando lo requiere)$ sudo ./profile_login.sh
OK, entonces adelante y ejecútalo. Por ejemplo, ejecutando el
purge
comando primero. En mi caja, obtuve un gran gráfico de salida. Buscando las "ramas numeradas más grandes" (típicamente en la parte superior) vi a los siguientes dos delincuentes más grandes :Uno de algo llamado
pam_start
que parece abrir imágenes pam auth liby eso a veces es seguido por otro delincuente
getlastlogxbyname
Básicamente, hay dos delincuentes. Uno es
pam
(algún tipo de sistema de autenticación) y el otro esasl
"detectar su último inicio de sesión". Aparentemente, simplemente eliminar sus/private/var/log/asl/*.asl
archivos no es suficiente. La carga de pam es mucho más costosa en mi máquina, de todos modos [SSD]. Siéntase libre de ejecutar el script anterior y ver si su sistema es el mismo. Curiosamente, el código fuente para estas llamadas a métodos también parece estar disponible en línea, por ejemplo openpam_dynamicSi sigo la respuesta de Darren y reemplazo mis preferencias de "shells open with" por algo que no sea / bin / bash, entonces veo las siguientes líneas utilizadas para iniciar nuevas pestañas de terminal:
Entonces, si ahora uso el mismo
sample
truco en el nuevo comando de inicio de sesiónse genera un seguimiento de pila mucho más pequeño, siendo el mayor infractor:
Creo que esto se debe a que ahora se está utilizando el parámetro de inicio de sesión "-q". Aparentemente, este parámetro omite cargar los módulos de pam y buscar el último tiempo de inicio de sesión (ambos delincuentes). Según los documentos del
login
comando, tocar el~/.hushlogin
archivo debería hacer lo mismo, pero aparentemente esto ya no funciona [al menos para mí con 10.10].Entonces, en resumen, eliminar /private/var/log/asl/*.asl no es suficiente (en mi experimento, solo representó como máximo 1/3 de la desaceleración real, aunque si tuviera más archivos allí podría tener en cuenta para un mayor porcentaje estoy seguro).
De todos modos, utilizando scripts similares, debería poder saber qué está causando que su máquina local se atasque y ver si la solución anterior se aplica a usted. Siéntete libre de comentar aquí.
ACTUALIZACIÓN: parece que
coresymbolication_load_image
todavía puede llevar mucho tiempo, incluso cuandologin -pfql
se invoca (presumiblemente, algún módulo de autenticación de pam u otro está teniendo que "marcar" a un servidor de inicio de sesión central o algo extraño, por lo que tiene que esperar la respuesta de un tercero ) Entonces, la única solución real que he encontrado es usar iTerm2 y cambiar las preferencias -> perfiles -> general -> Comando a/bin/bash
.fuente
Se trata de investigar la causa. Puede ver lo que se está haciendo mientras el proceso comienza ingresando
bash -x
lo que imprimirá el proceso de inicio del shell.Personalmente, solo noto el retraso entre la activación y la desactivación de la aplicación y en la primera pestaña creada después de un período de actividad. Siempre me hace pensar que se trata de mover páginas de memoria.
fuente
Reduzca su historial a entre 4 y 10 mil líneas y quizás intente salir y descartar todas las ventanas guardadas. He visto que ambos marcan la diferencia en máquinas más lentas, especialmente aquellas sin SSD para almacenamiento.
fuente
En mi caso, después de probar lo anterior en mi máquina de trabajo sin éxito, descubrí que el culpable era Active Directory. La solución fue ir a la Utilidad de directorio y editar la configuración del servicio de AD (hacer doble clic en "Active Directory") para habilitar "Crear cuenta móvil al iniciar sesión":
Aparentemente, esto hace que las credenciales de AD se almacenen en caché localmente, por lo que el sistema ya no tiene que salir al servidor cada vez que intenta validar su contraseña.
Puede acceder a la Utilidad de directorio con Spotlight o mediante la sección "Opciones de inicio de sesión" de Preferencias del sistema / Usuarios y grupos (seleccione el botón "Editar ..." junto a "Servidor de cuentas de red"):
fuente
Solo corre:
en terminales separadas y abra el nuevo abierto para ver qué se está ejecutando durante ese tiempo.
Si no hay nada obvio, intente lo siguiente:
Esto imprimirá todos sus detalles que están sucediendo en el tiempo de carga de la pestaña.
fuente
Abra
/etc/profile
y agregue la líneaPATH=""
para que se vea así:fuente
El problema para mí fue que el servidor de dominio del directorio activo no era válido.
Cambiarlo y luego reiniciar el mac lo arregló.
fuente