0% found this document useful (0 votes)
92 views

Unit - 5 UNIX / Linux - File System Basics: Directory Structure

This document provides an overview of file system basics in Unix/Linux systems. It discusses that a file system is a logical collection of files on a partition or disk. Partitions can contain individual file systems, such as the / file system or /home file system. The document then describes the directory structure and common directories in Unix, such as /bin, /etc, /home, and others. It also summarizes commands used to navigate and manage files and directories, such as ls, cd, cp, and others. The df and du commands are described to view disk usage. The document concludes with sections on mounting/unmounting file systems and setting user/group quotas.

Uploaded by

Anshuman Singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
92 views

Unit - 5 UNIX / Linux - File System Basics: Directory Structure

This document provides an overview of file system basics in Unix/Linux systems. It discusses that a file system is a logical collection of files on a partition or disk. Partitions can contain individual file systems, such as the / file system or /home file system. The document then describes the directory structure and common directories in Unix, such as /bin, /etc, /home, and others. It also summarizes commands used to navigate and manage files and directories, such as ls, cd, cp, and others. The df and du commands are described to view disk usage. The document concludes with sections on mounting/unmounting file systems and setting user/group quotas.

Uploaded by

Anshuman Singh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 41

Unit -5

UNIX / Linux - File System Basics


A file system is a logical collection of files on a partition or disk. A partition is a container
for information and can span an entire hard drive if desired.
Your hard drive can have various partitions which usually contain only one file system, such
as one file system housing the /file system or another containing the /home file system.
One file system per partition allows for the logical maintenance and management of
differing file systems.
Everything in Unix is considered to be a file, including physical devices such as DVD-
ROMs, USB devices, and floppy drives.

Directory Structure
Unix uses a hierarchical file system structure, much like an upside-down tree, with root (/) at
the base of the file system and all other directories spreading from there.
A Unix filesystem is a collection of files and directories that has the following properties −
 It has a root directory (/) that contains other files and directories.
 Each file or directory is uniquely identified by its name, the directory in which it
resides, and a unique identifier, typically called an inode.
 By convention, the root directory has an inode number of 2 and
the lost+found directory has an inode number of 3. Inode numbers 0 and 1 are not
used. File inode numbers can be seen by specifying the -i option to ls command.
 It is self-contained. There are no dependencies between one filesystem and another.
The directories have specific purposes and generally hold the same types of information for
easily locating files. Following are the directories that exist on the major versions of Unix −

Sr.No. Directory & Description

1
/
This is the root directory which should contain only the directories needed at the top level of
the file structure

2
/bin
This is where the executable files are located. These files are available to all users

3
/dev
These are device drivers
4
/etc
Supervisor directory commands, configuration files, disk configuration files, valid user lists,
groups, ethernet, hosts, where to send critical messages

5
/lib
Contains shared library files and sometimes other kernel-related files

6
/boot
Contains files for booting the system

7
/home
Contains the home directory for users and other accounts

8
/mnt
Used to mount other temporary file systems, such as cdrom and floppy for the CD-
ROM drive and floppy diskette drive, respectively

9
/proc
Contains all processes marked as a file by process number or other information that is
dynamic to the system

10
/tmp
Holds temporary files used between system boots

11
/usr
Used for miscellaneous purposes, and can be used by many users. Includes administrative
commands, shared files, library files, and others

12
/var
Typically contains variable-length files such as log and print files and any other type of file
that may contain a variable amount of data

13
/sbin
Contains binary (executable) files, usually for system administration. For
example, fdisk and ifconfig utilities
14
/kernel
Contains kernel files

Navigating the File System


Now that you understand the basics of the file system, you can begin navigating to the files
you need. The following commands are used to navigate the system −

Sr.No. Command & Description

1
cat filename
Displays a filename

2
cd dirname
Moves you to the identified directory

3
cp file1 file2
Copies one file/directory to the specified location

4
file filename
Identifies the file type (binary, text, etc)

5
find filename dir
Finds a file/directory

6
head filename
Shows the beginning of a file

7
less filename
Browses through a file from the end or the beginning

8
ls dirname
Shows the contents of the directory specified
9
mkdir dirname
Creates the specified directory

10
more filename
Browses through a file from the beginning to the end

11
mv file1 file2
Moves the location of, or renames a file/directory

12
pwd
Shows the current directory the user is in

13
rm filename
Removes a file

14
rmdir dirname
Removes a directory

15
tail filename
Shows the end of a file

16
touch filename
Creates a blank file or modifies an existing file or its attributes

17
whereis filename
Shows the location of a file

18
which filename
Shows the location of a file if it is in your PATH

You can use Manpage Help to check complete syntax for each command mentioned here.

The df Command
The first way to manage your partition space is with the df (disk free) command. The
command df -k (disk free) displays the disk space usage in kilobytes, as shown below −
$df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vzfs 10485760 7836644 2649116 75% /
/devices 0 0 0 0% /devices
$
Some of the directories, such as /devices, shows 0 in the kbytes, used, and avail columns as
well as 0% for capacity. These are special (or virtual) file systems, and although they reside
on the disk under /, by themselves they do not consume disk space.
The df -k output is generally the same on all Unix systems. Here's what it usually includes −

Sr.No. Column & Description

1
Filesystem
The physical file system name

2
kbytes
Total kilobytes of space available on the storage medium

3
used
Total kilobytes of space used (by files)

4
avail
Total kilobytes available for use

5
capacity
Percentage of total space used by files

6
Mounted on
What the file system is mounted on

You can use the -h (human readable) option to display the output in a format that shows
the size in easier-to-understand notation.

The du Command
The du (disk usage) command enables you to specify directories to show disk space usage
on a particular directory.
This command is helpful if you want to determine how much space a particular directory is
taking. The following command displays number of blocks consumed by each directory. A
single block may take either 512 Bytes or 1 Kilo Byte depending on your system.
$du /etc
10 /etc/cron.d
126 /etc/default
6 /etc/dfs
...
$
The -h option makes the output easier to comprehend −
$du -h /etc
5k /etc/cron.d
63k /etc/default
3k /etc/dfs
...
$

Mounting the File System


A file system must be mounted in order to be usable by the system. To see what is currently
mounted (available for use) on your system, use the following command −
$ mount
/dev/vzfs on / type reiserfs (rw,usrquota,grpquota)
proc on /proc type proc (rw,nodiratime)
devpts on /dev/pts type devpts (rw)
$
The /mnt directory, by the Unix convention, is where temporary mounts (such as CDROM
drives, remote network drives, and floppy drives) are located. If you need to mount a file
system, you can use the mount command with the following syntax −
mount -t file_system_type device_to_mount directory_to_mount_to
For example, if you want to mount a CD-ROM to the directory /mnt/cdrom, you can type −
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
This assumes that your CD-ROM device is called /dev/cdrom and that you want to mount it
to /mnt/cdrom. Refer to the mount man page for more specific information or type mount -
h at the command line for help information.
After mounting, you can use the cd command to navigate the newly available file system
through the mount point you just made.

Unmounting the File System


To unmount (remove) the file system from your system, use the umount command by
identifying the mount point or device.
For example, to unmount cdrom, use the following command −
$ umount /dev/cdrom
The mount command enables you to access your file systems, but on most modern Unix
systems, the automount function makes this process invisible to the user and requires no
intervention.

User and Group Quotas


The user and group quotas provide the mechanisms by which the amount of space used by a
single user or all users within a specific group can be limited to a value defined by the
administrator.
Quotas operate around two limits that allow the user to take some action if the amount of
space or number of disk blocks start to exceed the administrator defined limits −
 Soft Limit − If the user exceeds the limit defined, there is a grace period that allows
the user to free up some space.
 Hard Limit − When the hard limit is reached, regardless of the grace period, no
further files or blocks can be allocated.
There are a number of commands to administer quotas −

Sr.No. Command & Description

1
quota
Displays disk usage and limits for a user of group

2
edquota
This is a quota editor. Users or Groups quota can be edited using this command

3
quotacheck
Scans a filesystem for disk usage, creates, checks and repairs quota files

4
setquota
This is a command line quota editor

5
quotaon
This announces to the system that disk quotas should be enabled on one or more filesystems

6
quotaoff
This announces to the system that disk quotas should be disabled for one or more filesystems
7
repquota
This prints a summary of the disc usage and quotas for the specified file systems

In Unix, there are three basic types of files −


 Ordinary Files − An ordinary file is a file on the system that contains data, text, or
program instructions. In this tutorial, you look at working with ordinary files.
 Directories − Directories store both special and ordinary files. For users familiar
with Windows or Mac OS, Unix directories are equivalent to folders.
 Special Files − Some special files provide access to hardware such as hard drives,
CD-ROM drives, modems, and Ethernet adapters. Other special files are similar to
aliases or shortcuts and enable you to access a single file using different names.

Listing Files
To list the files and directories stored in the current directory, use the following command −
$ls
Here is the sample output of the above command −
$ls

bin hosts lib res.03


ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
The command ls supports the -l option which would help you to get more information about
the listed files −
$ls -l
total 1962188

drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml


-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root 4096 Nov 25 2007 usr
drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
$
Here is the information about all the listed columns −
 First Column − Represents the file type and the permission given on the file. Below
is the description of all type of files.
 Second Column − Represents the number of memory blocks taken by the file or
directory.
 Third Column − Represents the owner of the file. This is the Unix user who created
this file.
 Fourth Column − Represents the group of the owner. Every Unix user will have an
associated group.
 Fifth Column − Represents the file size in bytes.
 Sixth Column − Represents the date and the time when this file was created or
modified for the last time.
 Seventh Column − Represents the file or the directory name.
In the ls -l listing example, every file line begins with a d, -, or l. These characters indicate
the type of the file that's listed.

Sr.No. Prefix & Description

1
-
Regular file, such as an ASCII text file, binary executable, or hard link.

2
b
Block special file. Block input/output device file such as a physical hard drive.

3
c
Character special file. Raw input/output device file such as a physical hard drive.

4
d
Directory file that contains a listing of other files and directories.

5
l
Symbolic link file. Links on any regular file.

6
p
Named pipe. A mechanism for interprocess communications.

7
s
Socket used for interprocess communication.
Metacharacters
Metacharacters have a special meaning in Unix. For example, * and ? are metacharacters.
We use * to match 0 or more characters, a question mark (?) matches with a single
character.
For Example −
$ls ch*.doc
Displays all the files, the names of which start with ch and end with .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc c
Here, * works as meta character which matches with any character. If you want to display all
the files ending with just .doc, then you can use the following command −
$ls *.doc

Hidden Files
An invisible file is one, the first character of which is the dot or the period character (.).
Unix programs (including the shell) use most of these files to store configuration
information.
Some common examples of the hidden files include the files −
 .profile − The Bourne shell ( sh) initialization script
 .kshrc − The Korn shell ( ksh) initialization script
 .cshrc − The C shell ( csh) initialization script
 .rhosts − The remote shell configuration file
To list the invisible files, specify the -a option to ls −
$ ls -a

. .profile docs lib test_results


.. .rhosts hosts pub users
.emacs bin hw1 res.01 work
.exrc ch07 hw2 res.02
.kshrc ch07.bak hw3 res.03
$
 Single dot (.) − This represents the current directory.
 Double dot (..) − This represents the parent directory.

Creating Files
You can use the vi editor to create ordinary files on any Unix system. You simply need to
give the following command −
$ vi filename
The above command will open a file with the given filename. Now, press the key i to come
into the edit mode. Once you are in the edit mode, you can start writing your content in the
file as in the following program −
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
Once you are done with the program, follow these steps −
 Press the key esc to come out of the edit mode.
 Press two keys Shift + ZZ together to come out of the file completely.
You will now have a file created with filename in the current directory.
$ vi filename
$

Editing Files
You can edit an existing file using the vi editor. We will discuss in short how to open an
existing file −
$ vi filename
Once the file is opened, you can come in the edit mode by pressing the key i and then you
can proceed by editing the file. If you want to move here and there inside a file, then first
you need to come out of the edit mode by pressing the key Esc. After this, you can use the
following keys to move inside a file −
 l key to move to the right side.
 h key to move to the left side.
 k key to move upside in the file.
 j key to move downside in the file.
So using the above keys, you can position your cursor wherever you want to edit. Once you
are positioned, then you can use the i key to come in the edit mode. Once you are done with
the editing in your file, press Esc and finally two keys Shift + ZZ together to come out of
the file completely.

Display Content of a File


You can use the cat command to see the content of a file. Following is a simple example to
see the content of the above created file −
$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$
You can display the line numbers by using the -b option along with the cat command as
follows −
$ cat -b filename
1 This is unix file....I created it for the first time.....
2 I'm going to save this content in this file.
$

Counting Words in a File


You can use the wc command to get a count of the total number of lines, words, and
characters contained in a file. Following is a simple example to see the information about
the file created above −
$ wc filename
2 19 103 filename
$
Here is the detail of all the four columns −
 First Column − Represents the total number of lines in the file.
 Second Column − Represents the total number of words in the file.
 Third Column − Represents the total number of bytes in the file. This is the actual
size of the file.
 Fourth Column − Represents the file name.
You can give multiple files and get information about those files at a time. Following is
simple syntax −
$ wc filename1 filename2 filename3

Copying Files
To make a copy of a file use the cp command. The basic syntax of the command is −
$ cp source_file destination_file
Following is the example to create a copy of the existing file filename.
$ cp filename copyfile
$
You will now find one more file copyfile in your current directory. This file will exactly be
the same as the original file filename.

Renaming Files
To change the name of a file, use the mv command. Following is the basic syntax −
$ mv old_file new_file
The following program will rename the existing file filename to newfile.
$ mv filename newfile
$
The mv command will move the existing file completely into the new file. In this case, you
will find only newfile in your current directory.

Deleting Files
To delete an existing file, use the rm command. Following is the basic syntax −
$ rm filename
Caution − A file may contain useful information. It is always recommended to be careful
while using this Delete command. It is better to use the -i option along with rm command.
Following is the example which shows how to completely remove the existing file filename.
$ rm filename
$
You can remove multiple files at a time with the command given below −
$ rm filename1 filename2 filename3
$

Standard Unix Streams


Under normal circumstances, every Unix program has three streams (files) opened for it
when it starts up −
 stdin − This is referred to as the standard input and the associated file descriptor is 0.
This is also represented as STDIN. The Unix program will read the default input
from STDIN.
 stdout − This is referred to as the standard output and the associated file descriptor is
1. This is also represented as STDOUT. The Unix program will write the default
output at STDOUT
 stderr − This is referred to as the standard error and the associated file descriptor is
2. This is also represented as STDERR. The Unix program will write all the error
messages at STDERR.

Unix / Linux - Directory Management


A directory is a file the solo job of which is to store the file names and the related
information. All the files, whether ordinary, special, or directory, are contained in
directories.
Unix uses a hierarchical structure for organizing files and directories. This structure is often
referred to as a directory tree. The tree has a single root node, the slash character (/), and all
other directories are contained below it.

Home Directory
The directory in which you find yourself when you first login is called your home directory.
You will be doing much of your work in your home directory and subdirectories that you'll
be creating to organize your files.
You can go in your home directory anytime using the following command −
$cd ~
$
Here ~ indicates the home directory. Suppose you have to go in any other user's home
directory, use the following command −
$cd ~username
$
To go in your last directory, you can use the following command −
$cd -
$

Absolute/Relative Pathnames
Directories are arranged in a hierarchy with root (/) at the top. The position of any file within
the hierarchy is described by its pathname.
Elements of a pathname are separated by a /. A pathname is absolute, if it is described in
relation to root, thus absolute pathnames always begin with a /.
Following are some examples of absolute filenames.
/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
A pathname can also be relative to your current working directory. Relative pathnames
never begin with /. Relative to user amrood's home directory, some pathnames might look
like this −
chem/notes
personal/res
To determine where you are within the filesystem hierarchy at any time, enter the
command pwd to print the current working directory −
$pwd
/user0/home/amrood

Listing Directories
To list the files in a directory, you can use the following syntax −
$ls dirname
Following is the example to list all the files contained in /usr/local directory −
$ls /usr/local

X11 bin gimp jikes sbin


ace doc include lib share
atalk etc info man ami

Creating Directories
We will now understand how to create directories. Directories are created by the following
command −
$mkdir dirname
Here, directory is the absolute or relative pathname of the directory you want to create. For
example, the command −
$mkdir mydir
$
Creates the directory mydir in the current directory. Here is another example −
$mkdir /tmp/test-dir
$
This command creates the directory test-dir in the /tmp directory. The mkdir command
produces no output if it successfully creates the requested directory.
If you give more than one directory on the command line, mkdir creates each of the
directories. For example, −
$mkdir docs pub
$
Creates the directories docs and pub under the current directory.

Creating Parent Directories


We will now understand how to create parent directories. Sometimes when you want to
create a directory, its parent directory or directories might not exist. In this
case, mkdir issues an error message as follows −
$mkdir /tmp/amrood/test
mkdir: Failed to make directory "/tmp/amrood/test";
No such file or directory
$
In such cases, you can specify the -p option to the mkdir command. It creates all the
necessary directories for you. For example −
$mkdir -p /tmp/amrood/test
$
The above command creates all the required parent directories.

Removing Directories
Directories can be deleted using the rmdir command as follows −
$rmdir dirname
$
Note − To remove a directory, make sure it is empty which means there should not be any
file or sub-directory inside this directory.
You can remove multiple directories at a time as follows −
$rmdir dirname1 dirname2 dirname3
$
The above command removes the directories dirname1, dirname2, and dirname3, if they are
empty. The rmdir command produces no output if it is successful.
Changing Directories
You can use the cd command to do more than just change to a home directory. You can use
it to change to any directory by specifying a valid absolute or relative path. The syntax is as
given below −
$cd dirname
$
Here, dirname is the name of the directory that you want to change to. For example, the
command −
$cd /usr/local/bin
$
Changes to the directory /usr/local/bin. From this directory, you can cd to the
directory /usr/home/amrood using the following relative path −
$cd ../../home/amrood
$

Renaming Directories
The mv (move) command can also be used to rename a directory. The syntax is as follows −
$mv olddir newdir
$
You can rename a directory mydir to yourdir as follows −
$mv mydir yourdir
$

The directories . (dot) and .. (dot dot)


The filename . (dot) represents the current working directory; and the filename .. (dot dot)
represents the directory one level above the current working directory, often referred to as
the parent directory.
If we enter the command to show a listing of the current working directories/files and use
the -a option to list all the files and the -l option to provide the long listing, we will receive
the following result.
$ls -la
drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 .
drwxr-xr-x 60 root 1536 Jul 13 14:18 ..
---------- 1 teacher class 4210 May 1 08:27 .profile
-rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo
$

Unix / Linux - File Permission / Access Modes


we will discuss in detail about file permission and access modes in Unix. File ownership is
an important component of Unix that provides a secure method for storing files. Every file
in Unix has the following attributes −
 Owner permissions − The owner's permissions determine what actions the owner of
the file can perform on the file.
 Group permissions − The group's permissions determine what actions a user, who is
a member of the group that a file belongs to, can perform on the file.
 Other (world) permissions − The permissions for others indicate what action all
other users can perform on the file.

The Permission Indicators


While using ls -l command, it displays various information related to file permission as
follows −
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
Here, the first column represents different access modes, i.e., the permission associated with
a file or a directory.
The permissions are broken into groups of threes, and each position in the group denotes a
specific permission, in this order: read (r), write (w), execute (x) −
 The first three characters (2-4) represent the permissions for the file's owner. For
example, -rwxr-xr-- represents that the owner has read (r), write (w) and execute (x)
permission.
 The second group of three characters (5-7) consists of the permissions for the group
to which the file belongs. For example, -rwxr-xr-- represents that the group has read
(r) and execute (x) permission, but no write permission.
 The last group of three characters (8-10) represents the permissions for everyone else.
For example, -rwxr-xr-- represents that there is read (r) only permission.

File Access Modes


The permissions of a file are the first line of defense in the security of a Unix system. The
basic building blocks of Unix permissions are the read, write, and execute permissions,
which have been described below −
Read
Grants the capability to read, i.e., view the contents of the file.
Write
Grants the capability to modify, or remove the content of the file.
Execute
User with execute permissions can run a file as a program.

Directory Access Modes


Directory access modes are listed and organized in the same manner as any other file. There
are a few differences that need to be mentioned −
Read
Access to a directory means that the user can read the contents. The user can look at
the filenames inside the directory.
Write
Access means that the user can add or delete files from the directory.
Execute
Executing a directory doesn't really make sense, so think of this as a traverse permission.
A user must have execute access to the bin directory in order to execute the ls or
the cd command.

Changing Permissions
To change the file or the directory permissions, you use the chmod (change mode)
command. There are two ways to use chmod — the symbolic mode and the absolute mode.
Using chmod in Symbolic Mode
The easiest way for a beginner to modify file or directory permissions is to use the symbolic
mode. With symbolic permissions you can add, delete, or specify the permission set you
want by using the operators in the following table.

Sr.No. Chmod operator & Description

1
+
Adds the designated permission(s) to a file or directory.

2
-
Removes the designated permission(s) from a file or directory.

3
=
Sets the designated permission(s).

Here's an example using testfile. Running ls -1 on the testfile shows that the file's
permissions are as follows −
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Then each example chmod command from the preceding table is run on the testfile,
followed by ls –l, so you can see the permission changes −
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g = rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
Here's how you can combine these commands on a single line −
$chmod o+wx,u-x,g = rx testfile
$ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile

Using chmod with Absolute Permissions


The second way to modify permissions with the chmod command is to use a number to
specify each set of permissions for the file.
Each permission is assigned a value, as the following table shows, and the total of each set
of permissions provides a number for that set.

Number Octal Permission Representation Ref

0 No permission ---

1 Execute permission --x

2 Write permission -w-

3 Execute and write permission: 1 (execute) + 2 (write) = 3 -wx

4 Read permission r--

5 Read and execute permission: 4 (read) + 1 (execute) = 5 r-x

6 Read and write permission: 4 (read) + 2 (write) = 6 rw-

7 All permissions: 4 (read) + 2 (write) + 1 (execute) = 7 rwx

Here's an example using the testfile. Running ls -1 on the testfile shows that the file's
permissions are as follows −
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Then each example chmod command from the preceding table is run on the testfile,
followed by ls –l, so you can see the permission changes −
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile

Changing Owners and Groups


While creating an account on Unix, it assigns a owner ID and a group ID to each user. All
the permissions mentioned above are also assigned based on the Owner and the Groups.
Two commands are available to change the owner and the group of files −
 chown − The chown command stands for "change owner" and is used to change the
owner of a file.
 chgrp − The chgrp command stands for "change group" and is used to change the
group of a file.

Changing Ownership
The chown command changes the ownership of a file. The basic syntax is as follows −
$ chown user filelist
The value of the user can be either the name of a user on the system or the user id (uid) of
a user on the system.
The following example will help you understand the concept −
$ chown amrood testfile
$
Changes the owner of the given file to the user amrood.
NOTE − The super user, root, has the unrestricted capability to change the ownership of any
file but normal users can change the ownership of only those files that they own.

Changing Group Ownership


The chgrp command changes the group ownership of a file. The basic syntax is as follows −
$ chgrp group filelist
The value of group can be the name of a group on the system or the group ID (GID) of a
group on the system.
Following example helps you understand the concept −
$ chgrp special testfile
$
Changes the group of the given file to special group.

SUID and SGID File Permission


Often when a command is executed, it will have to be executed with special privileges in
order to accomplish its task.
As an example, when you change your password with the passwd command, your new
password is stored in the file /etc/shadow.
As a regular user, you do not have read or write access to this file for security reasons, but
when you change your password, you need to have the write permission to this file. This
means that the passwd program has to give you additional permissions so that you can write
to the file /etc/shadow.
Additional permissions are given to programs via a mechanism known as the Set User ID
(SUID) and Set Group ID (SGID) bits.
When you execute a program that has the SUID bit enabled, you inherit the permissions of
that program's owner. Programs that do not have the SUID bit set are run with the
permissions of the user who started the program.
This is the case with SGID as well. Normally, programs execute with your group
permissions, but instead your group will be changed just for this program to the group owner
of the program.
The SUID and SGID bits will appear as the letter "s" if the permission is available. The
SUID "s" bit will be located in the permission bits where the owners’ execute permission
normally resides.
For example, the command −
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
Shows that the SUID bit is set and that the command is owned by the root. A capital
letter S in the execute position instead of a lowercase s indicates that the execute bit is not
set.
If the sticky bit is enabled on the directory, files can only be removed if you are one of the
following users −

 The owner of the sticky directory


 The owner of the file being removed
 The super user, root
To set the SUID and SGID bits for any directory try the following command −
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname
$
Unix / Linux – Environment
An important Unix concept is the environment, which is defined by environment
variables. Some are set by the system, others by you, yet others by the shell, or any
program that loads another program.
A variable is a character string to which we assign a value. The value assigned
could be a number, text, filename, device, or any other type of data.
For example, first we set a variable TEST and then we access its value using
the echo command −
$TEST="Unix Programming"
$echo $TEST
It produces the following result.
Unix Programming
Note that the environment variables are set without using the $ sign but while
accessing them we use the $ sign as prefix. These variables retain their values until
we come out of the shell.
When you log in to the system, the shell undergoes a phase called initialization to
set up the environment. This is usually a two-step process that involves the shell
reading the following files −

 /etc/profile
 profile
The process is as follows −
 The shell checks to see whether the file /etc/profile exists.
 If it exists, the shell reads it. Otherwise, this file is skipped. No error message
is displayed.
 The shell checks to see whether the file .profile exists in your home directory.
Your home directory is the directory that you start out in after you log in.
 If it exists, the shell reads it; otherwise, the shell skips it. No error message is
displayed.
As soon as both of these files have been read, the shell displays a prompt −
$
This is the prompt where you can enter commands in order to have them executed.
Note − The shell initialization process detailed here applies to all Bourne type
shells, but some additional files are used by bash and ksh.

The .profile File


The file /etc/profile is maintained by the system administrator of your Unix machine
and contains shell initialization information required by all users on a system.
The file .profile is under your control. You can add as much shell customization
information as you want to this file. The minimum set of information that you need to
configure includes −

 The type of terminal you are using.


 A list of directories in which to locate the commands.
 A list of variables affecting the look and feel of your terminal.
You can check your .profile available in your home directory. Open it using the vi
editor and check all the variables set for your environment.

Setting the Terminal Type


Usually, the type of terminal you are using is automatically configured by either
the login or getty programs. Sometimes, the auto configuration process guesses
your terminal incorrectly.
If your terminal is set incorrectly, the output of the commands might look strange, or
you might not be able to interact with the shell properly.
To make sure that this is not the case, most users set their terminal to the lowest
common denominator in the following way −
$TERM=vt100
$

Setting the PATH


When you type any command on the command prompt, the shell has to locate the
command before it can be executed.
The PATH variable specifies the locations in which the shell should look for
commands. Usually the Path variable is set as follows −
$PATH=/bin:/usr/bin
$
Here, each of the individual entries separated by the colon character (:) are
directories. If you request the shell to execute a command and it cannot find it in
any of the directories given in the PATH variable, a message similar to the following
appears −
$hello
hello: not found
$
There are variables like PS1 and PS2 which are discussed in the next section.

PS1 and PS2 Variables


The characters that the shell displays as your command prompt are stored in the
variable PS1. You can change this variable to be anything you want. As soon as
you change it, it'll be used by the shell from that point on.
For example, if you issued the command −
$PS1='=>'
=>
=>
=>
Your prompt will become =>. To set the value of PS1 so that it shows the working
directory, issue the command −
=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
The result of this command is that the prompt displays the user's username, the
machine's name (hostname), and the working directory.
There are quite a few escape sequences that can be used as value arguments for
PS1; try to limit yourself to the most critical so that the prompt does not overwhelm
you with information.

Sr.No. Escape Sequence & Description

1
\t
Current time, expressed as HH:MM:SS

2
\d
Current date, expressed as Weekday Month Date

3
\n
Newline

4
\s
Current shell environment

5
\W
Working directory

6
\w
Full path of the working directory

7
\u
Current user’s username
8
\h
Hostname of the current machine

9
\#
Command number of the current command. Increases when a new command is entered

10
\$
If the effective UID is 0 (that is, if you are logged in as root), end the prompt with the #
character; otherwise, use the $ sign

You can make the change yourself every time you log in, or you can have the
change made automatically in PS1 by adding it to your .profile file.
When you issue a command that is incomplete, the shell will display a secondary
prompt and wait for you to complete the command and hit Enter again.
The default secondary prompt is > (the greater than sign), but can be changed by
re-defining the PS2 shell variable −
Following is the example which uses the default secondary prompt −
$ echo "this is a
> test"
this is a
test
$
The example given below re-defines PS2 with a customized prompt −
$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$

Environment Variables
Following is the partial list of important environment variables. These variables are
set and accessed as mentioned below −

Sr.No. Variable & Description

1
DISPLAY
Contains the identifier for the display that X11 programs should use by default.
2
HOME
Indicates the home directory of the current user: the default argument for the
cd built-in command.

3
IFS
Indicates the Internal Field Separator that is used by the parser for word
splitting after expansion.

4
LANG
LANG expands to the default system locale; LC_ALL can be used to override
this. For example, if its value is pt_BR, then the language is set to (Brazilian)
Portuguese and the locale to Brazil.

5
LD_LIBRARY_PATH
A Unix system with a dynamic linker, contains a colonseparated list of directories
that the dynamic linker should search for shared objects when building a
process image after exec, before searching in any other directories.

6
PATH
Indicates the search path for commands. It is a colon-separated list of directories
in which the shell looks for commands.

7
PWD
Indicates the current working directory as set by the cd command.

8
RANDOM
Generates a random integer between 0 and 32,767 each time it is referenced.

9
SHLVL
Increments by one each time an instance of bash is started. This variable is
useful for determining whether the built-in exit command ends the current
session.

10
TERM
Refers to the display type.
11
TZ
Refers to Time zone. It can take values like GMT, AST, etc.

12
UID
Expands to the numeric user ID of the current user, initialized at the shell
startup.

Following is the sample example showing few environment variables −


$ echo $HOME
/root
]$ echo $DISPLAY

$ echo $TERM
xterm
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin
$

Unix / Linux - Processes Management


When you execute a program on your Unix system, the system creates a special
environment for that program. This environment contains everything needed for the
system to run the program as if no other program were running on the system.
Whenever you issue a command in Unix, it creates, or starts, a new process. When
you tried out the ls command to list the directory contents, you started a process. A
process, in simple terms, is an instance of a running program.
The operating system tracks processes through a five-digit ID number known as
the pid or the process ID. Each process in the system has a unique pid.
Pids eventually repeat because all the possible numbers are used up and the next
pid rolls or starts over. At any point of time, no two processes with the same pid
exist in the system because it is the pid that Unix uses to track each process.

Starting a Process
When you start a process (run a command), there are two ways you can run it −

 Foreground Processes
 Background Processes

Foreground Processes
By default, every process that you start runs in the foreground. It gets its input from
the keyboard and sends its output to the screen.
You can see this happen with the ls command. If you wish to list all the files in your
current directory, you can use the following command −
$ls ch*.doc
This would display all the files, the names of which start with ch and end
with .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
The process runs in the foreground, the output is directed to my screen, and if
the ls command wants any input (which it does not), it waits for it from the
keyboard.
While a program is running in the foreground and is time-consuming, no other
commands can be run (start any other processes) because the prompt would not be
available until the program finishes processing and comes out.
Background Processes
A background process runs without being connected to your keyboard. If the
background process requires any keyboard input, it waits.
The advantage of running a process in the background is that you can run other
commands; you do not have to wait until it completes to start another!
The simplest way to start a background process is to add an ampersand (&) at the
end of the command.
$ls ch*.doc &
This displays all those files the names of which start with ch and end with .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
Here, if the ls command wants any input (which it does not), it goes into a stop state
until we move it into the foreground and give it the data from the keyboard.
That first line contains information about the background process - the job number
and the process ID. You need to know the job number to manipulate it between the
background and the foreground.
Press the Enter key and you will see the following −
[1] + Done ls ch*.doc &
$
The first line tells you that the ls command background process finishes
successfully. The second is a prompt for another command.

Listing Running Processes


It is easy to see your own processes by running the ps (process status) command
as follows −
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
One of the most commonly used flags for ps is the -f ( f for full) option, which
provides more information as shown in the following example −
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
Here is the description of all the fields displayed by ps -f command −

Sr.No. Column & Description

1
UID
User ID that this process belongs to (the person running it)

2
PID
Process ID

3
PPID
Parent process ID (the ID of the process that started it)

4
C
CPU utilization of process

5
STIME
Process start time

6
TTY
Terminal type associated with the process

7
TIME
CPU time taken by the process

8
CMD
The command that started this process

There are other options which can be used along with ps command −

Sr.No. Option & Description

1
-a
Shows information about all users

2
-x
Shows information about processes without terminals

3
-u
Shows additional information like -f option

4
-e
Displays extended information

Stopping Processes
Ending a process can be done in several different ways. Often, from a console-
based command, sending a CTRL + C keystroke (the default interrupt character)
will exit the command. This works when the process is running in the foreground
mode.
If a process is running in the background, you should get its Job ID using
the ps command. After that, you can use the kill command to kill the process as
follows −
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
Here, the kill command terminates the first_one process. If a process ignores a
regular kill command, you can use kill -9 followed by the process ID as follows −
$kill -9 6738
Terminated
Parent and Child Processes
Each unix process has two ID numbers assigned to it: The Process ID (pid) and the
Parent process ID (ppid). Each user process in the system has a parent process.
Most of the commands that you run have the shell as their parent. Check the ps -
f example where this command listed both the process ID and the parent process
ID.

Zombie and Orphan Processes


Normally, when a child process is killed, the parent process is updated via
a SIGCHLD signal. Then the parent can do some other task or restart a new child
as needed. However, sometimes the parent process is killed before its child is
killed. In this case, the "parent of all processes," the init process, becomes the new
PPID (parent process ID). In some cases, these processes are called orphan
processes.
When a process is killed, a ps listing may still show the process with a Z state. This
is a zombie or defunct process. The process is dead and not being used. These
processes are different from the orphan processes. They have completed execution
but still find an entry in the process table.

Daemon Processes
Daemons are system-related background processes that often run with the
permissions of root and services requests from other processes.
A daemon has no controlling terminal. It cannot open /dev/tty. If you do a "ps -
ef" and look at the tty field, all daemons will have a ? for the tty.
To be precise, a daemon is a process that runs in the background, usually waiting
for something to happen that it is capable of working with. For example, a printer
daemon waiting for print commands.
If you have a program that calls for lengthy processing, then it’s worth to make it a
daemon and run it in the background.

The top Command


The top command is a very useful tool for quickly showing processes sorted by
various criteria.
It is an interactive diagnostic tool that updates frequently and shows information
about physical and virtual memory, CPU usage, load averages, and your busy
processes.
Here is the simple syntax to run top command and to see the statistics of CPU
utilization by different processes −
$top
Job ID Versus Process ID
Background and suspended processes are usually manipulated via job number
(job ID). This number is different from the process ID and is used because it is
shorter.
In addition, a job can consist of multiple processes running in a series or at the
same time, in parallel. Using the job ID is easier than tracking individual processes.

Unix/Linux - The vi Editor


There are many ways to edit files in Unix. Editing files using the screen-oriented text
editor vi is one of the best ways. This editor enables you to edit lines in context with
other lines in the file.
An improved version of the vi editor which is called the VIM has also been made
available now. Here, VIM stands for Vi IMproved.
vi is generally considered the de facto standard in Unix editors because −
 It's usually available on all the flavors of Unix system.
 Its implementations are very similar across the board.
 It requires very few resources.
 It is more user-friendly than other editors such as the ed or the ex.
You can use the vi editor to edit an existing file or to create a new file from scratch.
You can also use this editor to just read a text file.

Starting the vi Editor


The following table lists out the basic commands to use the vi editor −

Sr.No. Command & Description

1
vi filename
Creates a new file if it already does not exist, otherwise opens an existing file.

2
vi -R filename
Opens an existing file in the read-only mode.

3
view filename
Opens an existing file in the read-only mode.

Following is an example to create a new file testfile if it already does not exist in the
current working directory −
$vi testfile
The above command will generate the following output −
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
You will notice a tilde (~) on each line following the cursor. A tilde represents an
unused line. If a line does not begin with a tilde and appears to be blank, there is a
space, tab, newline, or some other non-viewable character present.
You now have one open file to start working on. Before proceeding further, let us
understand a few important concepts.

Operation Modes
While working with the vi editor, we usually come across the following two modes −
 Command mode − This mode enables you to perform administrative tasks
such as saving the files, executing the commands, moving the cursor, cutting
(yanking) and pasting the lines or words, as well as finding and replacing. In
this mode, whatever you type is interpreted as a command.
 Insert mode − This mode enables you to insert text into the file. Everything
that's typed in this mode is interpreted as input and placed in the file.
vi always starts in the command mode. To enter text, you must be in the insert
mode for which simply type i. To come out of the insert mode, press the Esc key,
which will take you back to the command mode.
Hint − If you are not sure which mode you are in, press the Esc key twice; this will
take you to the command mode. You open a file using the vi editor. Start by typing
some characters and then come to the command mode to understand the
difference.

Getting Out of vi
The command to quit out of vi is :q. Once in the command mode, type colon, and
'q', followed by return. If your file has been modified in any way, the editor will warn
you of this, and not let you quit. To ignore this message, the command to quit out of
vi without saving is :q!. This lets you exit vi without saving any of the changes.
The command to save the contents of the editor is :w. You can combine the above
command with the quit command, or use :wq and return.
The easiest way to save your changes and exit vi is with the ZZ command. When
you are in the command mode, type ZZ. The ZZ command works the same way as
the :wq command.
If you want to specify/state any particular name for the file, you can do so by
specifying it after the :w. For example, if you wanted to save the file you were
working on as another filename called filename2, you would type :w filename2 and
return.

Moving within a File


To move around within a file without affecting your text, you must be in the
command mode (press Esc twice). The following table lists out a few commands
you can use to move around one character at a time −

Sr.No. Command & Description

1
k
Moves the cursor up one line

2
j
Moves the cursor down one line

3
h
Moves the cursor to the left one character position

4
l
Moves the cursor to the right one character position

The following points need to be considered to move within a file −


 vi is case-sensitive. You need to pay attention to capitalization when using
the commands.
 Most commands in vi can be prefaced by the number of times you want the
action to occur. For example, 2j moves the cursor two lines down the cursor
location.
There are many other ways to move within a file in vi. Remember that you must be
in the command mode (press Esc twice). The following table lists out a few
commands to move around the file −
Given below is the list of commands to move around the file.
Control Commands
The following commands can be used with the Control Key to performs functions as
given in the table below −
Given below is the list of control commands.

Editing Files
To edit the file, you need to be in the insert mode. There are many ways to enter the
insert mode from the command mode −

Sr.No. Command & Description

1
I
Inserts text before the current cursor location

2
I
Inserts text at the beginning of the current line

3
a
Inserts text after the current cursor location

4
A
Inserts text at the end of the current line

5
o
Creates a new line for text entry below the cursor location

6
O
Creates a new line for text entry above the cursor location

Deleting Characters
Here is a list of important commands, which can be used to delete characters and
lines in an open file −

Sr.No. Command & Description


1
X
Deletes the character under the cursor location

2
X
Deletes the character before the cursor location

3
Dw
Deletes from the current cursor location to the next word

4
d^
Deletes from the current cursor position to the beginning of the line

5
d$
Deletes from the current cursor position to the end of the line

6
D
Deletes from the cursor position to the end of the current line

7
Dd
Deletes the line the cursor is on

As mentioned above, most commands in vi can be prefaced by the number of times


you want the action to occur. For example, 2x deletes two characters under the
cursor location and 2dd deletes two lines the cursor is on.
It is recommended that the commands are practiced before we proceed further.

Change Commands
You also have the capability to change characters, words, or lines in vi without
deleting them. Here are the relevant commands −

Sr.No. Command & Description

1
Cc
Removes the contents of the line, leaving you in insert mode.
2
Cw
Changes the word the cursor is on from the cursor to the lowercase w end of the
word.

3
R
Replaces the character under the cursor. vi returns to the command mode after the
replacement is entered.

4
R
Overwrites multiple characters beginning with the character currently under the
cursor. You must use Esc to stop the overwriting.

5
s
Replaces the current character with the character you type. Afterward, you are left in
the insert mode.

6
S
Deletes the line the cursor is on and replaces it with the new text. After the new text is
entered, vi remains in the insert mode.

Copy and Paste Commands


You can copy lines or words from one place and then you can paste them at
another place using the following commands −

Sr.No. Command & Description

1
yy
Copies the current line.

2
yw
Copies the current word from the character the lowercase w cursor is on, until the end of t

3
p
Puts the copied text after the cursor.
4
P
Puts the yanked text before the cursor.

Advanced Commands
There are some advanced commands that simplify day-to-day editing and allow for
more efficient use of vi −
Given below is the list advanced commands.

Word and Character Searching


The vi editor has two kinds of searches: string and character. For a string search,
the / and ? commands are used. When you start these commands, the command
just typed will be shown on the last line of the screen, where you type the particular
string to look for.
These two commands differ only in the direction where the search takes place −
 The / command searches forwards (downwards) in the file.
 The ? command searches backwards (upwards) in the file.
The n and N commands repeat the previous search command in the same or the
opposite direction, respectively. Some characters have special meanings. These
characters must be preceded by a backslash (\) to be included as part of the search
expression.

Sr.No. Character &Description

1
^
Searches at the beginning of the line (Use at the beginning of a search expression).

2
.
Matches a single character.

3
*
Matches zero or more of the previous character.

4
$
End of the line (Use at the end of the search expression).
5
[
Starts a set of matching or non-matching expressions.

6
<
This is put in an expression escaped with the backslash to find the ending or the beginning

7
>
This helps see the '<' character description above.

The character search searches within one line to find a character entered after the
command. The f and F commands search for a character on the current line
only. f searches forwards and F searches backwards and the cursor moves to the
position of the found character.
The t and T commands search for a character on the current line only, but for t, the
cursor moves to the position before the character, and T searches the line
backwards to the position after the character.

Set Commands
You can change the look and feel of your vi screen using the
following :set commands. Once you are in the command mode, type :set followed
by any of the following commands.

Sr.No. Command & Description

1
:set ic
Ignores the case when searching

2
:set ai
Sets autoindent

3
:set noai
Unsets autoindent

4
:set nu
Displays lines with line numbers on the left side
5
:set sw
Sets the width of a software tabstop. For example, you would set a shift width of 4 with th
:set sw = 4

6
:set ws
If wrapscan is set, and the word is not found at the bottom of the file, it will try search
beginning

7
:set wm
If this option has a value greater than zero, the editor will automatically "word wrap". For
the wrap margin to two characters, you would type this: :set wm = 2

8
:set ro
Changes file type to "read only"

9
:set term
Prints terminal type

10
:set bf
Discards control characters from input

Running Commands
The vi has the capability to run commands from within the editor. To run a
command, you only need to go to the command mode and type :! command.
For example, if you want to check whether a file exists before you try to save your
file with that filename, you can type :! ls and you will see the output of ls on the
screen.
You can press any key (or the command's escape sequence) to return to your vi
session.

Replacing Text
The substitution command (:s/) enables you to quickly replace words or groups of
words within your files. Following is the syntax to replace text −
:s/search/replace/g
The g stands for globally. The result of this command is that all occurrences on the
cursor's line are changed.
Important Points to Note
The following points will add to your success with vi −
 You must be in command mode to use the commands. (Press Esc twice at
any time to ensure that you are in command mode.)
 You must be careful with the commands. These are case-sensitive.

 You must be in insert mode to enter text.

You might also like