Creating, editing, removing files

Use a text editor

There are a lot of different text editors and a lot of strong feelings about which of them is the best.

You can use any editor you like, but you must know how to use at least one terminal-friendly editor. In this workshop we are going to use nano. It's simple and easy to use.

Make sure you're in your home directory (use cd and pwd to confirm) then type

$ nano

This is a no-frills editor. Type something! How about a TODO list?

TODO
* [x] Learn how to navigate using the terminal
* [ ] Learn how to create files
* [ ] Learn about pipes and redirects

At the bottom you'll notice a bunch of different options but we are concerned with only two of them: Write Out (save) and Exit.

The caret (^) means the Control key. To save the TODO list, hit Ctrl+o, type in a name (how about "TODO") and then hit Enter. nano will report that it wrote some number of lines.

Now exit nano by typing Ctrl+x.

Use ls to see what happened:

$ ls -F
Desktop/  Documents/  Downloads/  Music/  Pictures/  Public/  TODO  Templates/  Videos/

There's the TODO list! If you want to edit the todo list, you can open it up in nano (you can use tab completion for the filename, too!)

$ nano TODO

Check off the second item on the todo list and then save and exit nano. Notice that when you hit Ctrl+o to save an existing file, nano will automatically fill in the name of the existing file. If you wanted to "Save As...", you can simply change the name in the Write Out bar.

Create an empty file

There are a few ways to create files on the command line. If you want to create an "empty" file, you can use touch. Try it!

$ touch newfile
$ ls -F
Desktop/    Downloads/  Pictures/  TODO        Videos/
Documents/  Music/      Public/    Templates/  newfile

You can open newfile in nano to confirm that it's empty. Then just exit out using Ctrl+x since there's nothing to save!

Create a directory

To create a new directory, use the mkdir command. We can create a Research/ folder in the home directory.

$ mkdir Research
$ ls -F
Desktop/    Downloads/  Pictures/  Research/  Templates/  newfile
Documents/  Music/      Public/    TODO       Videos/

Remove a file

We don't need that empty file sitting around, we can remove it. To remove a file, use the rm command:

$ rm newfile

Did anything happen?

$ ls -F
Desktop/    Downloads/  Pictures/  Research/  Templates/
Documents/  Music/      Public/    TODO       Videos/

Yes, newfile is gone. And this is something to be aware of: there is no "Recycle Bin". There is no "Undo". That file is gone.

Remove a directory

Let's try to remove the Research directory we created earlier.

$ rm Research
rm: cannot remove 'Research': Is a directory

rm only works with files by default. If you want to remove the directory you need to use the -r flag to specify a recursive removal.

This will delete the directory and ALL of its contents. BE CAREFUL WHEN USING THIS

$ rm -r Research
$ ls -F
Desktop/    Downloads/  Pictures/  TODO        Videos/
Documents/  Music/      Public/    Templates/

Move/Rename a file

We know how to create and delete files and folders now. What about renaming a file?

To rename a file, we use the mv command, which is short for "move". This may seem a little bit odd at first, but renaming a file is the same as moving it to a different location.

To start, let's make the file TODO lowercase. The syntax is mv <old location> <new location>

$ mv TODO todo
$ ls -F
Desktop/    Downloads/  Pictures/  Templates/  todo
Documents/  Music/      Public/    Videos/

We moved the file TODO from /home/<user>/TODO to a new location, called /home/<user>/todo. Since the directory doesn't change, the result is a renamed file.

We can also move the todo list to a different folder:

$ mv todo Desktop/
$ ls -F
Desktop/  Documents/  Downloads/  Music/  Pictures/  Public/  Templates/  Videos/

We specified Desktop/ as the <new location> in the mv command. Since Desktop/ is a folder, todo will move inside that folder.

$ ls -F Desktop/
todo workshop_data.zip

Note: As we see, if <new location> is a folder, then the file is moved inside the folder. However, if <new location> is an existing file, then that file will be overwritten.