¿Cuál es la diferencia entre .profile y .bash_profile y por qué no tengo un archivo .profile en mi sistema?

12

Así que soy bastante nuevo en Linux y recientemente instalé Fedora 19 en mi netbook. Quiero tener una comprensión más profunda de Linux y la CLI, así que ahora estoy leyendo Learn Linux: The Hard Way .

En el ejercicio 3, el autor da los siguientes comandos:

  • ls -al
  • perfil de gato

Intento seguir estas instrucciones pero fue en vano. No hay ningún archivo .profile en mi directorio de nombre de usuario como puedo ver desde ls -al. Por lo que he aprendido, el archivo .bash_profile y el archivo .profile son prácticamente iguales. La única diferencia que concluí de mi investigación es que .bash_profile se comprueba primero.

Lo que no entiendo es por qué hay varios archivos para la misma función en Linux, por qué el autor usa .profile y no .bash_profile (si entiendo correctamente .profile no se leerá cuando el sistema encuentre primero .bash_profile) ¿Y cómo es que no tengo el archivo .profile en mi sistema?

Emiroe
fuente
Consulte también unix.stackexchange.com/questions/45684/… que responde parte de su pregunta. Además, unix.stackexchange.com/questions/67940/... muestra una de las razones por las que estos diversos archivos pueden generar confusión para cosas más avanzadas de las que probablemente esté tratando todavía.
msw

Respuestas:

13

La .profilefecha se remonta al shell Bourne original conocido como sh. Dado que el shell GNU bashes (dependiendo de sus opciones) un superconjunto del shell Bourne, ambos shells pueden usar el mismo archivo de inicio. Es decir, siempre que solo shse coloquen comandos.profile

Por ejemplo, aliases un comando integrado válido de bashpero desconocido para sh. Por lo tanto, si solo tuviera un .profileen su directorio personal y pusiera una aliasdeclaración en él, shse quejaría. Entonces, hay un archivo específico de bash que tiene comandos de inicialización de shell que bash leerá si y solo si no hay un .profilearchivo presente.

En realidad, eso es una simplificación excesiva en algunas instalaciones, y no estoy familiarizado con Fedora. Bajo bash, /etc/profilees leído por el shell antes de cualquier archivo en su directorio de inicio. Si hay un script de inicialización de todo el sistema, a menudo dice algo como

if there is a $HOME/.profile:
   source it
elseif bash is my shell and there is a $HOME/.bash_profile:
   source that

¿Por qué es así? Un intento de compatibilidad a través de décadas de dialectos de concha. ¿Por qué el tutorial está escrito de esa manera? El shell Bourne ya no se usa mucho y algunas personas ni siquiera saben que hay otro shell similar a Bourne que bash. Incluso cuando la sintaxis Bourne (limitada) se utiliza para una mayor compatibilidad multiplataforma, a menudo se ejecuta dasho bash en modo de compatibilidad POSIX. De hecho, la fuente real de Bourne es probablemente un componente de derechos de autor de Unix System V que parece ser propiedad de Novell ahora, pero no tengo idea de qué están haciendo, si es que están haciendo algo.

Para el usuario principiante, use uno $HOME/.profileo dos $HOME/.bash_profilepero no, y estará bien. Dado que ya tiene un .bash_profiletrabajo con eso porque puede tener cosas específicas del sistema que su instalación necesita.

msw
fuente
¡Gracias! Creo que ahora lo entiendo un poco mejor, supongo que todavía hay mucho que aprender.
Emiroe
Mucho de eso es basura histórica que realmente no necesitas saber; solo concéntrate en el último párrafo de mi respuesta. Además, como eres nuevo aquí, puedes votar y aceptar una respuesta que es la forma más alta de agradecimiento aquí.
msw
Sí, ya acepté tu respuesta. No esperaba que alguien pusiera tanto esfuerzo en ello, así que estoy muy agradecido. Acepté tu respuesta, pero no puedo votarla porque requiere 15 reputación y solo tengo 8. ¡Lo siento mucho!
Emiroe
Olvidé el límite de 15 repeticiones; estás en lo correcto.
msw
44
Historial de bonificación # 1 : el verdadero caparazón Bourne finalmente escapó del cautiverio. minnie.tuhs.org tiene el código fuente completo de V7 (la primera versión de Unix con el shell Bourne), y heirloom.sourceforge.net tiene una versión un poco más reciente del shell Bourne que todavía puede utilizarse. Historial de bonificación # 2 : aliasPOSIX lo requiere, por lo que no hay muchos shalrededor que no lo sepan.