There are some shortcuts which you should know about. Dealing with the home directory is very common. So, in the shell the tilde character, ~
, is a shortcut for your home directory. Navigate to the data
directory in your workshop directory, then enter the command:
$ ls ~
This prints the contents of your home directory, without you having to type the absolute path. The shortcut ..
always refers to the directory above your current directory. If I'm located at /Users/Kara/Desktop/swc-wsu/data/
, thus:
$ ls ..
prints the contents of the /Users/Kara/Desktop/swc-wsu/
. You can chain these together, so:
$ ls ../../
prints the contents of /Users/Kara/Desktop
. Finally, the special directory .
always refers to your current directory. So, ls
and ls .
do the same thing, they print the contents of the current directory. To summarize, the commands ls ~
, ls ~/.
and ls /Users/Kara
all do exactly the same thing. These shortcuts are not necessary, they are provided for your convenience.
Bash and most other shell programs have tab completion. This means that you can begin typing in a command name or file name and just hit tab to complete entering the text. If there are multiple matches, the shell will show you all available options.
$ cd ~/Desktop/swc-wsu
$ cd f<tab>
What just happened?
Tab completion can also fill in the names of programs. For example, type e<tab><tab>
. You will see the name of every program that starts with an e. One of those is echo. If you enter ech<tab>
you will see that tab
completion works.
One of the biggest reasons using shell is faster than ever using a GUI file manager is that it allows for wildcards. There are special characters known as wildcards. They allow you to select files based on patterns of characters.
Wildcard examples:
*
Matches any character;?
Matches any single character;[characters]
Matches any character in this set;![characters]
Matches any character NOT in this set.By default, ls
lists all of the files in a given directory. The *
character is a shortcut for "everything". Thus, if you enter ls *
, you will see all of the contents of a given directory. Now try this command:
$ ls *.png
This lists every file that ends with a .png
. This command:
$ ls /usr/bin/*.sh
lists every file in /usr/bin
that ends in the characters .sh
. And this command:
$ ls scatter*
Lists all csv files in the current directory whose names begin with the letter s.
You can easily access previous commands. Hit the up arrow. Hit it again. You can step backwards through your command history. The down arrow takes your forwards in the command history.
You can also review your recent commands with the history
command. Just enter:
$ history
to see a numbered list of recent commands, including this just issues history
command. You can reuse one of these commands directly by referring to the number of that command.
If your history looked like this:
259 cd
260 ls ~/Desktop/swc-wsu
261 history
then you could repeat command #260 by simply entering:
!260
(that's an exclamation mark, or bang
).
which
e.g.
$ which git
Acknowledgments: these lessons were adapted by Kara Woo from materials by Diego Barneche.