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

2.1. pwd - print working directory#

Try typing the following command

pwd
/home/grosed/stor-609-env/STOR-609/notebooks/introduction-to-unix

The above shoows the output on my personal computer - yours will be different. What is it ?

The pwd command prints the directory (folder ?) that the terminal is currently active in.

2.2. cd - change directory#

Now type the following

cd /

What is the working directory now ?

2.3. ls - list the contents of a directory#

Type the command ls

ls
bin                etc    lib.usr-is-merged  proc                snap      usr
bin.usr-is-merged  home   lost+found         root                srv       var
boot               lib    media              run                 swap.img
cdrom              lib32  mnt                sbin                sys
dev                lib64  opt                sbin.usr-is-merged  tmp

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 4194412
lrwxrwxrwx   1 root root          7 Apr 22  2024 bin -> usr/bin
drwxr-xr-x   2 root root       4096 Feb 26  2024 bin.usr-is-merged
drwxr-xr-x   4 root root       4096 Dec 11 06:55 boot
dr-xr-xr-x   2 root root       4096 Apr 24  2024 cdrom
drwxr-xr-x  21 root root       5360 Jan  4 15:44 dev
drwxr-xr-x 157 root root      12288 Dec 16 06:55 etc
drwxr-xr-x   3 root root       4096 Apr 28  2024 home
lrwxrwxrwx   1 root root          7 Apr 22  2024 lib -> usr/lib
lrwxrwxrwx   1 root root          9 Apr 28  2024 lib32 -> usr/lib32
lrwxrwxrwx   1 root root          9 Apr 22  2024 lib64 -> usr/lib64
drwxr-xr-x   2 root root       4096 Apr  8  2024 lib.usr-is-merged
drwx------   2 root root      16384 Apr 28  2024 lost+found
drwxr-xr-x   3 root root       4096 Apr 28  2024 media
drwxr-xr-x   2 root root       4096 Apr 24  2024 mnt
drwxr-xr-x   5 root root       4096 Feb 12  2025 opt
dr-xr-xr-x 408 root root          0 Sep  3 18:02 proc
drwx------   6 root root       4096 Sep  3 17:45 root
drwxr-xr-x  40 root root       1120 Jan  4 15:44 run
lrwxrwxrwx   1 root root          8 Apr 22  2024 sbin -> usr/sbin
drwxr-xr-x   2 root root       4096 Mar 31  2024 sbin.usr-is-merged
drwxr-xr-x  26 root root       4096 Mar 20  2025 snap
drwxr-xr-x   2 root root       4096 Apr 24  2024 srv
-rw-------   1 root root 4294967296 Apr 28  2024 swap.img
dr-xr-xr-x  13 root root          0 Sep  3 18:02 sys
drwxrwxrwt  29 root root      20480 Jan  4 16:09 tmp
drwxr-xr-x  13 root root       4096 Apr 28  2024 usr
drwxr-xr-x  14 root root       4096 Apr 29  2024 var

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.4. 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.4.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.

Try running the command

cd ~/h-drive

2.4.2. 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.4.3. Exercise#

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

2.5. mkdir - make a new directory#

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

mkdir <directory-name>

2.5.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.6. 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.6.1. Exercise#

List the contents of your work directoy.

2.7. unzip#

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

unzip examples.zip

2.8. cp - copy files#

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

cp <source> <target>

2.8.1. Exercise#

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

2.9. Redirection#

Set the current directory to your “play” 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.10. head - display the first few lines#

Try this -

head files.txt

2.10.1. Exercise#

  • What did you see ?

  • What does head command do ?

  • What options does the head command have ?

  • What does the command tail do ?

2.11. echo#

2.11.1. Example#

echo "hello"
hello

2.11.2. Exercise#

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

2.11.3. Solution#

echo "hello world" > messages.txt

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

Try this

wc messages.txt

2.12.1. Exercise#

Locate a copy of file-3 that you downloaded earlier.

  • How many lines are in it ?

  • How many words ?