cd (change directory) in Linux CLI - Time & Space Complexity
Let's look at how the time it takes to run the cd command changes as we use it. We want to understand if moving between folders takes more time when folders are deeper or more complex.
What happens to the work done by cd when the folder path changes?
Analyze the time complexity of the following code snippet.
cd /home/user/documents/projects
cd ../downloads
cd /var/log
cd ../../etc
cd ./scripts
This code changes the current folder several times using absolute and relative paths.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The shell processes the path string to find the target directory.
- How many times: Once per
cdcommand, parsing each folder name in the path.
As the path length grows, the shell checks each folder name one by one to reach the target.
| Input Size (n) | Approx. Operations |
|---|---|
| 2 (e.g., /a/b) | 2 checks |
| 5 (e.g., /a/b/c/d/e) | 5 checks |
| 10 (e.g., /a/b/c/d/e/f/g/h/i/j) | 10 checks |
Pattern observation: The work grows directly with the number of folders in the path.
Time Complexity: O(n)
This means the time to change directory grows linearly with the number of folders in the path.
[X] Wrong: "Changing directories always takes the same time no matter how deep the folder is."
[OK] Correct: The shell must check each folder in the path, so longer paths take more steps.
Understanding how commands like cd work under the hood helps you think about efficiency in scripts and automation. This skill shows you can reason about how tools behave as inputs grow.
"What if the cd command used symbolic links that point to other folders? How would that affect the time complexity?"
Practice
cd .. do in a Linux terminal?Solution
Step 1: Understand the meaning of
The..in directory paths..symbol means the parent directory, which is one level up from the current directory.Step 2: Apply
Usingcd ..commandcd ..changes the current directory to its parent directory, effectively moving you up one level.Final Answer:
Moves you up one directory level -> Option BQuick Check:
cd ..= move up one folder [OK]
- Thinking cd .. moves to home directory
- Confusing cd .. with cd / (root)
- Using cd .. to list files
Solution
Step 1: Identify the symbol for home directory
The tilde~is a shortcut for the current user's home directory in Linux.Step 2: Check the command syntax
cd ~correctly changes the directory to the home folder. Other options either go up one level, to root, or previous directory.Final Answer:
cd ~ -> Option AQuick Check:
cd ~= go home [OK]
- Using cd .. to go home instead of up one level
- Using cd /home which may not be correct for all users
- Using cd - which goes to previous directory
/home/user/docs and you run cd ../pictures, what will be your new directory?Solution
Step 1: Understand the starting directory and command
Current directory is/home/user/docs. The commandcd ../picturesmeans go up one level to/home/userthen intopictures.Step 2: Calculate the new directory path
Going up one level from/home/user/docsis/home/user. Addingpicturesgives/home/user/pictures.Final Answer:
/home/user/pictures -> Option CQuick Check:
cd ../pictures = up one + pictures folder [OK]
- Appending pictures inside current directory instead of parent
- Going to root or home by mistake
- Ignoring the .. and staying in same folder
cd myfolder but get an error: bash: cd: myfolder: No such file or directory. What is the most likely cause?Solution
Step 1: Understand the error message
The error says 'No such file or directory', meaning the folder named 'myfolder' is not found in the current directory.Step 2: Check the folder existence and path
Since 'myfolder' is not present, the command fails. Using relative or absolute path won't help unless the folder exists.Final Answer:
The folder 'myfolder' does not exist in the current directory -> Option DQuick Check:
Error means folder missing, so cd fails [OK]
- Assuming cd ./myfolder fixes missing folder error
- Thinking you can't cd into current folder
- Believing absolute path is always required
projects inside it. Which sequence of commands is correct?Solution
Step 1: Start in home directory
Usingcd ~moves the shell to the user's home directory regardless of current location.Step 2: Move into 'projects' folder inside home
After being in home,cd projectsmoves into the 'projects' folder located there.Final Answer:
cd ~\ncd projects -> Option AQuick Check:
Home then projects folder = cd ~ then cd projects [OK]
- Changing to projects before home, causing errors
- Using absolute path /projects which may not exist
- Using cd .. which goes up instead of home
Ready to prove it?
Pass the test and this pattern moves unknown
