📖 Scenario: You have just started using Linux and want to customize your command line environment. You want to learn how to set up environment variables and aliases that load automatically when you open a terminal or log in.
🎯 Goal: Learn how to create and edit .bashrc and .bash_profile files to customize your shell environment. You will create environment variables and aliases, and understand when each file is used.
📋 What You'll Learn
Create a .bash_profile file with a custom environment variable
Create a .bashrc file with a custom alias
Configure .bash_profile to load .bashrc
Display the values of the environment variable and alias to verify setup
💡 Why This Matters
🌍 Real World
Customizing your shell environment makes your work faster and more comfortable by automating common tasks and setting preferences.
💼 Career
Many IT and developer jobs require knowledge of shell configuration to optimize workflows and manage environments efficiently.
Progress0 / 4 steps
1
Create a .bash_profile with a custom environment variable
Create a file called .bash_profile in your home directory. Inside it, add a line that sets an environment variable named MY_NAME with the value LinuxUser. Use echo "export MY_NAME=LinuxUser" > ~/.bash_profile.
Linux CLI
Hint
Use echo to write the export line to .bash_profile.
2
Create a .bashrc with a custom alias
Create a file called .bashrc in your home directory. Inside it, add a line that creates an alias named ll which runs ls -la. Use echo "alias ll='ls -la'" > ~/.bashrc.
Linux CLI
Hint
Use echo to write the alias to .bashrc.
3
Configure .bash_profile to load .bashrc
Edit your .bash_profile to add a line that loads .bashrc if it exists. Use echo "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi" >> ~/.bash_profile.
Linux CLI
Hint
Use echo ... >> ~/.bash_profile to append the if statement that sources .bashrc.
4
Display the environment variable and alias to verify setup
First, load the configuration by running . ~/.bash_profile. Then print the value of the environment variable MY_NAME using echo $MY_NAME. Finally, print the alias ll using alias ll.
Linux CLI
Hint
Use . ~/.bash_profile to load, then echo $MY_NAME and alias ll.
Practice
(1/5)
1. What is the primary purpose of the .bash_profile file in Linux?
easy
A. It stores command history for the shell.
B. It runs every time a new terminal window opens to set aliases.
C. It runs once at login to set environment variables.
D. It manages system-wide user permissions.
Solution
Step 1: Understand the role of .bash_profile
The .bash_profile file is executed once when a user logs in to the system. It is used to set environment variables and run commands that should only happen once per login session.
Step 2: Differentiate from .bashrc
The .bashrc file runs every time a new terminal is opened, mainly for setting aliases and shell options, not environment variables at login.
Final Answer:
It runs once at login to set environment variables. -> Option C
Quick Check:
.bash_profile = runs once at login [OK]
Hint: Remember: .bash_profile runs once at login [OK]
Common Mistakes:
Confusing .bash_profile with .bashrc
Thinking .bash_profile runs for every new terminal
Assuming .bash_profile manages command history
2. Which of the following is the correct way to load .bashrc from .bash_profile?
easy
A. execute ~/.bashrc
B. load ~/.bashrc
C. run ~/.bashrc
D. source ~/.bashrc
Solution
Step 1: Identify the command to run another script
In bash, the source command runs commands from a file in the current shell environment.
Step 2: Confirm syntax for loading .bashrc
Using source ~/.bashrc inside .bash_profile loads .bashrc settings for login shells.
Final Answer:
source ~/.bashrc -> Option D
Quick Check:
Use source to load scripts [OK]
Hint: Use 'source' to run .bashrc inside .bash_profile [OK]
Common Mistakes:
Using non-existent commands like load or run
Trying to execute .bashrc as a separate process
Forgetting to use the tilde (~) for home directory
3. Given the following .bash_profile content:
export PATH="$PATH:/custom/bin"
source ~/.bashrc
And .bashrc contains:
alias ll='ls -l'
What happens when you open a new terminal after login?
medium
A. The alias ll is set but PATH does not include /custom/bin.
B. The PATH includes /custom/bin and alias ll is available.
C. The PATH is unchanged and alias ll is not available.
D. Only the PATH is updated; alias ll is not set.
Solution
Step 1: Understand .bash_profile execution at login
The .bash_profile runs once at login, setting PATH to include /custom/bin and then sourcing .bashrc.
Step 2: Understand .bashrc execution on new terminals
Since .bashrc is sourced by .bash_profile, the alias ll='ls -l' is set for the shell session.
Final Answer:
The PATH includes /custom/bin and alias ll is available. -> Option B
Quick Check:
.bash_profile sets PATH + sources .bashrc = alias set [OK]
Hint: Sourcing .bashrc in .bash_profile applies aliases at login [OK]
Common Mistakes:
Assuming alias is not set without opening a new terminal
Thinking PATH changes only after logout/login
Ignoring that .bashrc is sourced inside .bash_profile
4. You added source ~/.bashrc to your .bash_profile, but aliases from .bashrc are still not available after login. What is the most likely problem?
medium
A. You forgot to log out and log back in after editing .bash_profile.
B. The .bashrc file has incorrect permissions and cannot be read.
C. The source command is misspelled in .bash_profile.
D. Aliases must be defined in .bash_profile, not .bashrc.
Solution
Step 1: Check if changes require re-login
Changes to .bash_profile only take effect after a new login session, so you must log out and back in.
Step 2: Verify other options
Incorrect permissions would cause errors, misspelling source would cause errors, and aliases are correctly placed in .bashrc.
Final Answer:
You forgot to log out and log back in after editing .bash_profile. -> Option A
Quick Check:
Changes in .bash_profile need re-login [OK]
Hint: Log out and back in to apply .bash_profile changes [OK]
Common Mistakes:
Not logging out after editing .bash_profile
Assuming aliases must be in .bash_profile
Ignoring file permission issues
5. You want to ensure that environment variables set in .bash_profile and aliases in .bashrc are available in all interactive shells, including login and non-login shells. Which is the best approach?
hard
A. Add environment variables to .bash_profile and add source ~/.bashrc inside .bash_profile only.
B. Add source ~/.bashrc inside .bash_profile and add source ~/.bash_profile inside .bashrc.
C. Add source ~/.bashrc inside .bash_profile and add environment variables to .bashrc.
D. Add all environment variables and aliases only in .bashrc.
Solution
Step 1: Understand login vs non-login shells
.bash_profile runs for login shells; .bashrc runs for interactive non-login shells.
Step 2: Best practice to share settings
Put environment variables in .bash_profile and source .bashrc from .bash_profile to load aliases for login shells. Non-login shells read .bashrc directly.
Step 3: Avoid circular sourcing
Do not source .bash_profile from .bashrc to prevent loops.
Final Answer:
Add environment variables to .bash_profile and add source ~/.bashrc inside .bash_profile only. -> Option A
Quick Check:
Env vars in .bash_profile + source .bashrc there = all shells get settings [OK]
Hint: Source .bashrc from .bash_profile; keep env vars in .bash_profile [OK]