How to start using the command line (part 2)
Photo by Dan Edwards on Unsplash
Welcome to the second part of How to start using the command line. You can read part 1 here if you haven’t already - I cover the most basic commands there to get you started.
In this second part, I’ll go through a few more basic commands and introduce the concept of a flag that you can use to modify certain commands. A flag can, for example, be used to modify the command rm
to act on a directory instead of a file.
Let’s dive in!
touch - create a new file
The first command for this post is touch
. Hopefully you’re not too thrown off by the name of the command (but yes, it sure is a weird name). touch
means “create file.”
touch new_file.txt
Running this command will create a new file called “new_file.txt” in the working directory you’re in. Remember, whenever you issue a command in a Command Line Interface (CLI), you’re issuing it from a particular working directory. (If you don’t remember, you can run pwd
to print the working directory you’re in.)
Note that by default, this new file is always going to be empty.
mkdir - create a new directory
mkdir new_directory
mkdir
stands for “make directory”, and it is the equivalent of touch
for creating a new directory.
Once a directory is created, you can cd
into it and make new file babies or even more subdirectories.
cd new_directory
A primer on “flags” and man
Let’s say you have a directory called “directory_with_3_files” with 3 files in it, and you want to delete the directory along with all its files and subdirectories. How might you do that using the rm
command?
If you thought to do this:
rm directory_with_3_files
You’d have made the most logical guess, but rm
doesn’t work that way.
# running this
rm directory_with_3_files
# outputs this error message
rm: directory_with_3_files: is a directory
Don’t worry, I made the same mistake when I first learned to use the CLI too. It’s just a very specific quirk that I believe most first-timers will make.
So how do you delete an entire directory along with its contents?
rm -r directory_with_3_files
# trying to cd into the folder
cd directory_with_3_files
# outputs
cd: no such file or directory: directory_with_3_files
The difference here is the -r
flag. It tells the rm
command to work “recursively” (I think that’s what the “r” stands for) and delete everything within.
To quickly verify that the directory has really been deleted, you can try to cd
into it. Terminal should complain that the directory doesn’t exist!
Each command can have multiple flags. To find out all the options that a command has, which are toggled by passing in flags, you can always run man <command>
, like man rm
.
man
stands for manual, and every built-in command has a handy manual on standby to help you out when you need the details.
To pass in multiple flags, you can just stick them together like rm -rf unwanted_directory
. (Feel free to use man
to find out what -rf
means!)
Ok, that’s all you need to know about flags! Now let’s return to our regularly scheduled programming…
cp - copy a file or directory
# make a copy of original_file.txt in current directory and call it copied_file.txt
cp original_file.txt copied_file.txt
# pass in the -r flag to copy a directory
cp -r original_directory copied_directory
cp
stands for “copy”. By default, the cp
command works on files. You can use it on directories by passing in the -r
flag that you’ve just learned about!
mv - move a file or directory
Ok, let’s learn one final command with this post: mv
.
# move a file one directory up
mv file.txt ../file.txt
# move a directory one directory up
mv folder_name ../folder_name
# rename a file
mv new_file.txt renamed_file.txt
mv folder_name renamed_folder_name
Taking stock
So if you’ve read part 1 and this post, and tried some of the commands yourself on Terminal, you now know these commands:
- pwd. Print working directory
- ls. List contents of working directory
- cd. Change directory
- rm. Delete (permanently) a file or directory
- touch. Create new file
- mkdir. Create new directory
- cp. Copy file or directory
- mv. Move file or directory
- man. Show manual for any built-in command
What’s next?
I hope that this post and part 1 has been helpful in equipping you with some of the basic concepts and commands to get you started with using the command line!
Anyway, did you notice the weird ../
characters roaming this post? I wanted to keep these two posts on the command line purely about the commands, that’s why I didn’t mention these characters. But they are nevertheless important to working with the command line.
For that, look out for an upcoming post on paths. For some ideas of what other things programmers use the command line for, check out some of my other posts. Till then, have a bug-free day!