2. Some Basic Unix Commands#

Here are some commonly used Unix commands

  • ls - list files

  • man - get information about a unix command

  • pwd - display present working directory

  • cp - copy files

  • mv - move files

  • rm - remove files

  • cd - change directory

  • mkdir - make a directory

  • rmdir - remove a directory

For example, you can generate a list of files and directories by using the command ls.

ls
_build                 images                      notes.txt
_config.yml            introduction-to-unix.ipynb  _toc.yml
getting-started.ipynb  intro.ipynb                 Untitled1.ipynb
image-creation.odp     messages.txt                Untitled.ipynb

Notice that the output of the command ls shown above is not on your system (it is on one of mine), so the output will be different.

Most unix commands can accept additional options which modify what the basic command does. For example

ls -l
total 4700
-rw-rw-r-- 1 grosed grosed 198676 Dec 16 10:22 android-architecture.jpg
-rw-rw-r-- 1 grosed grosed  72518 Dec 16 11:49 computer-hardware.jpg
-rw-rw-r-- 1 grosed grosed 539589 Dec 16 11:53 desktop-applications.jpg
-rw-rw-r-- 1 grosed grosed 202835 Dec 16 10:39 desktop-os-statistics.png
-rw-rw-r-- 1 grosed grosed  29663 Dec 16 10:32 device-shipment-2015.png
-rw-rw-r-- 1 grosed grosed   1255 Dec 20 13:19 file-1453.png
-rw-rw-r-- 1 grosed grosed 236442 Dec 20 13:51 file-stdin-cmd-stdout.png
-rw-rw-r-- 1 grosed grosed 237638 Dec 20 13:48 file-stdin-stdout-file.png
-rw-rw-r-- 1 grosed grosed  62234 Dec 20 11:24 introduction-to-unix.ipynb
-rw-rw-r-- 1 grosed grosed 108310 Dec 16 11:40 linux-kernel-code.png
-rw-rw-r-- 1 grosed grosed  47038 Dec 17 13:02 LU-mylab.png
-rw-rw-r-- 1 grosed grosed 275954 Dec 16 13:06 os-components2.png
-rw-rw-r-- 1 grosed grosed  85295 Dec 16 10:01 os-components.png
-rw-rw-r-- 1 grosed grosed  29259 Dec 20 13:49 stdin-cmd-file-cmd-stdout.png
-rw-rw-r-- 1 grosed grosed  11225 Dec 20 13:49 stdin-cmd-pipe-cmd-stdout.png
-rw-rw-r-- 1 grosed grosed 235988 Dec 20 13:47 stdin-stdout-file.png
-rw-rw-r-- 1 grosed grosed 232104 Dec 20 13:46 stdin-stdout.png
-rw-rw-r-- 1 grosed grosed  12139 Dec 17 15:03 terminal-icon.png
-rw-rw-r-- 1 grosed grosed 263810 Dec 16 11:52 terminal.jpg
-rw-rw-r-- 1 grosed grosed 189120 Dec 17 15:05 terminal.png
-rw-rw-r-- 1 grosed grosed 715211 Dec 17 13:06 ubuntu-lab-desktop.png
-rw-rw-r-- 1 grosed grosed  22372 Dec 17 13:04 ubuntu-lab-password.png
-rw-rw-r-- 1 grosed grosed  13427 Dec 17 13:02 ubuntu-lab.png
-rw-rw-r-- 1 grosed grosed  70595 Dec 17 15:00 ubuntu-lab-start-terminal.png
-rw-rw-r-- 1 grosed grosed  22012 Dec 17 13:04 ubuntu-lab-username.png
-rw-rw-r-- 1 grosed grosed 249989 Dec 16 10:22 unix-history.png
-rw-rw-r-- 1 grosed grosed 586762 Dec 17 13:17 waffle-application-launcher.png

Here, the -l options instructs ls to output information regarding the properties of the files being listed.

Unix commands take the general form of

command [-options] <arguments>

2.1. man#

You can find information about a Unix command using the man command. For example

man ls
LS(1)                            User Commands                           LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about  the FILEs (the current directory by default).
       Sort entries alphabetically if none of -cftuvSUX nor --sort  is  speci‐
       fied.

       Mandatory  arguments  to  long  options are mandatory for short options
       too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

       --author
              with -l, print the author of each file

       -b, --escape
              print C-style escapes for nongraphic characters

       --block-size=SIZE
              with  -l,  scale  sizes  by  SIZE  when  printing  them;   e.g.,
              '--block-size=M'; see SIZE format below

       -B, --ignore-backups
              do not list implied entries ending with ~

       -c     with -lt: sort by, and show, ctime (time of last modification of
              file status information); with -l: show ctime and sort by  name;
              otherwise: sort by ctime, newest first

       -C     list entries by columns

       --color[=WHEN]
              colorize  the output; WHEN can be 'always' (default if omitted),
              'auto', or 'never'; more info below

       -d, --directory
              list directories themselves, not their contents

       -D, --dired
              generate output designed for Emacs' dired mode

       -f     do not sort, enable -aU, disable -ls --color

       -F, --classify
              append indicator (one of */=>@|) to entries

       --file-type
              likewise, except do not append '*'

       --format=WORD
              across -x, commas -m, horizontal -x, long -l, single-column  -1,
              verbose -l, vertical -C

       --full-time
              like -l --time-style=full-iso

       -g     like -l, but do not list owner

       --group-directories-first
              group directories before files;

              can   be  augmented  with  a  --sort  option,  but  any  use  of
              --sort=none (-U) disables grouping

       -G, --no-group
              in a long listing, don't print group names

       -h, --human-readable
              with -l and -s, print sizes like 1K 234M 2G etc.

       --si   likewise, but use powers of 1000 not 1024

       -H, --dereference-command-line
              follow symbolic links listed on the command line

       --dereference-command-line-symlink-to-dir
              follow each command line symbolic link

              that points to a directory

       --hide=PATTERN
              do not list implied entries matching shell  PATTERN  (overridden
              by -a or -A)

       --hyperlink[=WHEN]
              hyperlink file names; WHEN can be 'always' (default if omitted),
              'auto', or 'never'

       --indicator-style=WORD
              append indicator with style WORD to entry names: none (default),
              slash (-p), file-type (--file-type), classify (-F)

       -i, --inode
              print the index number of each file

       -I, --ignore=PATTERN
              do not list implied entries matching shell PATTERN

       -k, --kibibytes
              default  to  1024-byte  blocks for disk usage; used only with -s
              and per directory totals

       -l     use a long listing format

       -L, --dereference
              when showing file information for a symbolic link, show informa‐
              tion  for  the file the link references rather than for the link
              itself

       -m     fill width with a comma separated list of entries

       -n, --numeric-uid-gid
              like -l, but list numeric user and group IDs

       -N, --literal
              print entry names without quoting

       -o     like -l, but do not list group information

       -p, --indicator-style=slash
              append / indicator to directories

       -q, --hide-control-chars
              print ? instead of nongraphic characters

       --show-control-chars
              show nongraphic characters as-is (the default, unless program is
              'ls' and output is a terminal)

       -Q, --quote-name
              enclose entry names in double quotes

       --quoting-style=WORD
              use  quoting style WORD for entry names: literal, locale, shell,
              shell-always,  shell-escape,  shell-escape-always,   c,   escape
              (overrides QUOTING_STYLE environment variable)

       -r, --reverse
              reverse order while sorting

       -R, --recursive
              list subdirectories recursively

       -s, --size
              print the allocated size of each file, in blocks

       -S     sort by file size, largest first

       --sort=WORD
              sort  by  WORD instead of name: none (-U), size (-S), time (-t),
              version (-v), extension (-X)

       --time=WORD
              change the default of  using  modification  times;  access  time
              (-u): atime, access, use; change time (-c): ctime, status; birth
              time: birth, creation;

              with -l, WORD determines which time to show;  with  --sort=time,
              sort by WORD (newest first)

       --time-style=TIME_STYLE
              time/date format with -l; see TIME_STYLE below

       -t     sort by time, newest first; see --time

       -T, --tabsize=COLS
              assume tab stops at each COLS instead of 8

       -u     with  -lt:  sort by, and show, access time; with -l: show access
              time and sort by name; otherwise: sort by  access  time,  newest
              first

       -U     do not sort; list entries in directory order

       -v     natural sort of (version) numbers within text

       -w, --width=COLS
              set output width to COLS.  0 means no limit

       -x     list entries by lines instead of by columns

       -X     sort alphabetically by entry extension

       -Z, --context
              print any security context of each file

       -1     list one file per line.  Avoid '\n' with -q or -b

       --help display this help and exit

       --version
              output version information and exit

       The  SIZE  argument  is  an  integer and optional unit (example: 10K is
       10*1024).  Units are K,M,G,T,P,E,Z,Y  (powers  of  1024)  or  KB,MB,...
       (powers  of 1000).  Binary prefixes can be used, too: KiB=K, MiB=M, and
       so on.

       The TIME_STYLE argument can be  full-iso,  long-iso,  iso,  locale,  or
       +FORMAT.   FORMAT  is  interpreted  like in date(1).  If FORMAT is FOR‐
       MAT1<newline>FORMAT2, then FORMAT1 applies to non-recent files and FOR‐
       MAT2  to  recent files.  TIME_STYLE prefixed with 'posix-' takes effect
       only outside the POSIX locale.  Also the TIME_STYLE  environment  vari‐
       able sets the default style to use.

       Using  color  to distinguish file types is disabled both by default and
       with --color=never.  With --color=auto, ls emits color codes only  when
       standard  output is connected to a terminal.  The LS_COLORS environment
       variable can change the settings.  Use the dircolors command to set it.

   Exit status:
       0      if OK,

       1      if minor problems (e.g., cannot access subdirectory),

       2      if serious trouble (e.g., cannot access command-line argument).

AUTHOR
       Written by Richard M. Stallman and David MacKenzie.

REPORTING BUGS
       GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
       Report any translation bugs to <https://translationproject.org/team/>

COPYRIGHT
       Copyright © 2020 Free Software Foundation, Inc.   License  GPLv3+:  GNU
       GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
       This  is  free  software:  you  are free to change and redistribute it.
       There is NO WARRANTY, to the extent permitted by law.

SEE ALSO
       Full documentation <https://www.gnu.org/software/coreutils/ls>
       or available locally via: info '(coreutils) ls invocation'

GNU coreutils 8.32               February 2022                           LS(1)

2.1.1. Exercise#

  • List all of the files as before, but print them in a single column

  • As above, but in date order

  • Now do both of the above together.

Like many operating systems, Unix organises files into a hierarchy. Files are organised into directories (sometimes referred to as folders by Windows users), and directories can contain sub-directories.

Each file and directory has a name and you can navigate the tree like directory/file structure using Unix shell commands.

2.2. pwd - display present/current/working directory#

pwd
/home/grosedj1

2.3. cd - change present/current/working directory#

Try running the command

cd h-drive

2.3.1. Exercise#

  • What is the present working directory ?

  • What files are in your h-drive directory ?

  • What is the newest file in this directory ?

  • What is the largest file in this directory ?

  • Are there any directories in your h-drive ?

Your Unix account has a home directory. It has a nickname ~.

2.3.2. Exercise#

Change the current directory to your home directory. What is your home directory called ?

2.4. mkdir - make a new directory#

To create a directory in your current working directory use the command

mkdir <directory-name>

2.4.1. Exercise#

  • cd to your home directory and make a new directory called work.

  • cd into this new directory.

  • Now create a new directory in your home directory called play- but without changing directories.

2.5. wget - get remote files#

wget is a command that allows you to download a remote file by specifying its URL. Try the following command.

wget http://www.mathsbox.com/introduction-to-unix/files/examples.zip

2.5.1. Exercise#

List the contents of your work directoy.

2.6. unzip#

The file you downloaded using wget is a compressed file. It can be decompressed using the unzip command.

unzip examples.zip

2.7. cp - copy files#

The cp command can be used to copy a file. The syntax is

cp <source> <target>

2.7.1. Exercise#

Copy one or more files from your work directory to your play directory.

2.8. Redirection#

Set the current directory to your home directory and try this -

ls -1 > files.txt

What does it do ?

Hint - try using ls to find out.

The > is called the redirection operator. Normally, the output of ls will go to the terminal. The > operator can be used to send it to other things, such as a file.

2.9. head - display the first few lines#

Try this -

head files.txt

2.9.1. Exercise#

  • What did you see ?

  • What does head command do ?

  • What options does the head command have ?

  • Try some of these options.

  • What does the command tail do ?

2.10. echo#

2.10.1. Example#

echo "hello"
hello

2.10.2. Exercise#

  • Make a new file called messages.txt with the sentence “hello world” in it.

2.10.3. Solution#

echo "hello world" > messages.txt

2.11. wc - count words, lines, and letters#

Try this

wc messages.txt