UNIT –II
1. INTRODUCTION TO MANAGING FILES AND DIRECTORIES IN LINUX
In Linux, files and directories are the basic building blocks of the file system.
Understanding how to manage files and directories is essential for navigating the system,
performing system administration tasks, and developing scripts for automation.
Linux provides a wide range of commands that allow users to create, view, manipulate,
move, and delete files and directories. This ability to manage files is crucial for organizing
data, controlling access, and interacting with programs and scripts.
The Linux File System
The Linux file system is hierarchical, with the root directory / at the top, and everything in
the system (files, directories, devices, etc.) is located somewhere beneath it.
Root directory /: The topmost directory.
Home directories /home/username: Where users' personal files are stored.
System directories: /bin, /etc, /lib, /dev, /tmp, etc., which contain system files and
directories used by Linux.
Basic File and Directory Concepts
Files: Contain data or instructions that are read or executed by the system or users.
Examples include text files, program files, image files, etc.
Directories: Containers used to organize files into a hierarchy. A directory may
contain other directories (subdirectories), helping organize files in a tree structure.
Key File and Directory Management Commands in Linux
1. Viewing Files and Directories
ls – Lists files and directories in the current directory.
ls: Lists files and directories.
ls -l: Provides detailed listing with permissions, ownership, and timestamps.
ls -a: Includes hidden files (files starting with a dot .).
2. Changing Directories
cd – Changes the current working directory.
cd /path/to/directory: Changes to the specified directory.
cd ..: Moves up one level in the directory structure.
cd ~: Moves to the user's home directory.
3. Creating Files and Directories
touch – Creates an empty file or updates the timestamp of an existing file.
touch new_file.txt: Creates a new empty file called
[Link] Commands in Linux
The directory command in Linux is not a standard command by itself. However, when
working with directories in Linux, several commands can be used to navigate, manage, and
manipulate directories. In Linux, there isn't a specific "directory command" by that name,
but there are several commands used to interact with directories. These commands allow
you to navigate, create, remove, and manage directories in the Linux file [Link] are
some commonly used commands related to directories:
Basic Commands
1. pwd (Print Working Directory):
Displays the current directory path.
2. cd (Change Directory):
Changes the current working directory.
cd /path/to/directory # Navigate to a specific directory
cd .. # Go one level up
cd ~ # Go to the user's home directory
cd - # Return to the previous directory
3. ls (List Directory Contents):
Lists files and directories in the current directory.
ls # Basic listing
ls -l # Long format listing
ls -a # Show hidden files
ls -R # Recursive listing
Directory Creation and Deletion
4. mkdir (Make Directory):
Creates new directories.
mkdir new_directory # Create a single directory
mkdir -p /path/to/dir # Create nested directories
5. rmdir (Remove Directory):
Removes empty directories.
rmdir directory_name
6. rm (Remove Files and Directories):
Removes directories and their contents.
rm -r directory_name # Remove a directory and its contents
rm -rf directory_name # Force remove without confirmation
Directory Permissions
7. chmod (Change Mode):
Changes permissions of a directory.
chmod 755 directory_name
8. chown (Change Ownership):
Changes the owner and group of a directory.
chown user:group directory_name
Search and Navigation
9. find (Search for Files/Directories):
Locates directories and files based on criteria.
find /path -type d -name "directory_name"
10. locate (Locate Files Quickly):
Searches for files and directories in indexed locations.
locate directory_name
11. tree (Visualize Directory Structure):
Displays a tree-like directory structure (may require installation).
tree /path/to/directory
Directory Operations in Shell Programming
Shell scripts can automate directory-related tasks. Here are examples of common
operations:
1. Create a Directory
dir_name="new_directory"
if [ ! -d "$dir_name" ]; then
mkdir "$dir_name"
echo "Directory $dir_name created."
else
echo "Directory $dir_name already exists."
fi
2. List Files in a Directory
echo "Files in the current directory:"
ls -l
3. Navigate Directories
target_dir="/path/to/directory"
if [ -d "$target_dir" ]; then
cd "$target_dir"
echo "Changed to $target_dir"
ls
else
echo "Directory $target_dir does not exist."
fi
4. Delete Directories
dir_name="directory_to_remove"
if [ -d "$dir_name" ]; then
rm -r "$dir_name"
echo "Directory $dir_name removed."
else
echo "Directory $dir_name does not exist."
fi
5. Search for Directories
search_dir="/path/to/search"
target_name="target_directory"
find "$search_dir" -type d -name "$target_name"
1. Error Handling: Always check if a directory exists before performing operations.
2. Permissions: Ensure the user running the script has the required permissions.
3. Relative vs Absolute Paths: Use absolute paths for reliability in scripts.
4. set -e: Use this at the beginning of a script to exit on any error
[Link] COMMANDS IN LINUX
Basic File Commands
1. ls (List Files):
Purpose: Lists files and directories in the current directory.
ls # List files
ls -l # Long format listing
ls -a # Show hidden files
ls -lh # Human-readable sizes
2. touch (Create Empty File):
Purpose: Creates an empty file or updates the timestamp of an existing file.
touch file_name.txt
3. cat (View File Content):
Purpose: Concatenates and displays file content.
cat file_name.txt
4. nano, vim, or vi (Edit Files):
Purpose: Opens files for editing.
nano file_name.txt # Use Nano editor
vim file_name.txt # Use Vim editor
5. cp (Copy Files):
Purpose: Copies files and directories.
cp source_file.txt destination_file.txt
cp -r source_directory/ destination_directory/
6. mv (Move or Rename Files):
Purpose: Moves or renames files and directories.
mv old_file_name.txt new_file_name.txt
mv [Link] /path/to/destination/
7. rm (Delete Files):
Purpose: Deletes files or directories.
rm file_name.txt # Remove a file
rm -r directory_name/ # Remove a directory and its contents
rm -rf directory_name/ # Force remove without confirmation
8. file (Determine File Type):
Purpose: Identifies the type of a file.
file file_name.txt
9. wc (Word Count):
Purpose: Counts lines, words, and characters in a file.
wc file_name.txt # General word count
wc -l file_name.txt # Count lines only
10. head and tail (View Beginning/End of File):
Purpose: Displays the first or last few lines of a file.
head -n 5 file_name.txt # View first 5 lines
tail -n 5 file_name.txt # View last 5 lines
11. chmod (Change Permissions):
Purpose: Changes file permissions.
chmod 644 file_name.txt # Set permissions
12. chown (Change Ownership):
Purpose: Changes the owner and group of a file.
chown user:group file_name.txt
13. find (Search for Files):
Purpose: Searches for files based on criteria.
find /path -type f -name "file_name.txt"
14. locate (Find Files Quickly):
Purpose: Locates files in an indexed database.
locate file_name.txt
15. grep (Search Inside Files):
Purpose: Searches for patterns within a file.
grep "search_term" file_name.txt
File Commands in Shell Programming
Shell scripts can automate file operations. Below are examples:
1. Create and Check Files
file_name="test_file.txt"
if [ ! -f "$file_name" ]; then
touch "$file_name"
echo "File $file_name created."
else
echo "File $file_name already exists."
fi
2. Copy and Move Files
source_file="[Link]"
destination_file="[Link]"
cp "$source_file" "$destination_file"
echo "File copied to $destination_file"
mv "$destination_file" /path/to/new/location/
echo "File moved to new location."
3. Display File Contents
file_name="test_file.txt"
if [ -f "$file_name" ]; then
echo "Contents of $file_name:"
cat "$file_name"
else
echo "File $file_name does not exist."
fi
4. Search for Files
search_dir="/path/to/search"
file_name="target_file.txt"
find "$search_dir" -type f -name "$file_name"
5. Append Text to a File
file_name="[Link]"
echo "Appending new log entry..."
echo "Log entry: $(date)" >> "$file_name"
6. Count Lines, Words, and Characters
file_name="test_file.txt"
if [ -f "$file_name" ]; then
echo "Lines in $file_name: $(wc -l < $file_name)"
echo "Words in $file_name: $(wc -w < $file_name)"
echo "Characters in $file_name: $(wc -m < $file_name)"
else
echo "File $file_name does not exist."
fi
Key File Commands: Summary Table
Command Purpose Example Usage
ls List files and directories ls -l
touch Create an empty file touch [Link]
cat View file content cat [Link]
cp Copy files and directories cp [Link] [Link]
mv Move or rename files mv [Link] [Link]
rm Delete files rm [Link]
chmod Change file permissions chmod 644 [Link]
chown Change file ownership chown user:group [Link]
find Search for files find / -name [Link]
grep Search inside files grep "text" [Link]
head View the first few lines of a file head -n 5 [Link]
tail View the last few lines of a file tail -n 5 [Link]
file Identify the type of a file file [Link]
UNIT-III
Creating files using the vi editor in Linux, and incorporating this into a shell script, can be
accomplished with the following steps:
Using vi to Create Files in Linux
Follow these steps manually:
1. Open a terminal.
2. Create or edit a file using:
vi filename
3. Enter insert mode by pressing i and type the content you want.
4. Save and exit:
Press Esc, then type :wq.
Automating File Creation with Shell Programming
You can automate file creation using a shell script. While vi is an interactive tool, the script
can prefill content or prompt a user to open a file in vi.
Example 1: Creating a File with Prefilled Content
FILENAME="[Link]"
echo "This is an example file created by a shell script." > "$FILENAME"
vi "$FILENAME"
Example 2: Prompting User for File Name and Content
read -p "Enter the file name: " FILENAME
echo "Enter your text below. Save and exit when done." > "$FILENAME"
vi "$FILENAME"
Example 3: Batch Create Multiple Files
for i in {1..5}; do
FILENAME="file_$[Link]"
echo "This is file $i." > "$FILENAME"
echo "$FILENAME created."
done
vi file_1.txt
Running the Script
1. Save the script to a file, e.g., create_file.sh.
2. Make it executable:
chmod +x create_file.sh
3. Run the script:
./create_file.sh
Notes:
Interactive Editing: You can always integrate vi within the script, as shown, for
interactive editing after the file is created.
Alternative Editors: If you want to create non-interactive scripts without opening
vi, you can use echo, cat, or touch instead.
[Link] EDITORS
In Linux, there are various text editors available, ranging from simple command-
line tools to sophisticated graphical applications. Here’s a list of the most popular text
editors you’ll encounter, both for beginners and experienced users.
Command-Line Text Editors
1. vi / vim (Vi Improved)
Type: Command-line, powerful
Usage: vi filename or vim filename
Features:
The default editor on most Linux systems.
Supports multiple modes (Command mode, Insert mode, etc.).
Syntax highlighting and advanced editing features in vim.
Best for: Advanced users, developers, and those who need efficient text
editing.
Learning Curve: Steep, but very powerful once mastered.
2. nano
Type: Command-line, user-friendly
Usage: nano filename
Features:
Simple, easy-to-use, and intuitive interface.
Keyboard shortcuts displayed at the bottom of the screen.
No need to remember complex commands, like in vi.
Best for: Beginners or those who prefer a straightforward text editor.
Learning Curve: Very low.
3. emacs
Type: Command-line, extensible
Usage: emacs filename
Features:
Powerful and extensible, often used by developers and power users.
Has its own programming language (Emacs Lisp) for customization.
Includes tools for compiling code, email, and more.
Best for: Users who want a highly customizable environment.
Learning Curve: High, but flexible and extensible.
4. ed
Type: Command-line, line editor
Usage: ed filename
Features:
Oldest text editor, line-oriented (not screen-based).
Suitable for very simple editing tasks.
Best for: Experienced users who need minimal editing capabilities in scripts.
Learning Curve: Very high, archaic interface.
5. joe (Joe's Own Editor)
Type: Command-line, easy-to-use
Usage: joe filename
Features:
Simple interface with many helpful keyboard shortcuts.
More user-friendly than vim or emacs.
Best for: Users who need a lightweight editor without steep learning curves.
Learning Curve: Low.
Graphical Text Editors
1. Gedit
Type: GUI, lightweight
Usage: gedit filename
Features:
Default text editor for GNOME-based environments.
Simple, clean interface with syntax highlighting and line numbering.
Supports many file formats (HTML, Python, etc.).
Best for: Users who prefer a simple, GUI-based editor.
Learning Curve: Low.
2. Kate
Type: GUI, advanced
Usage: kate filename
Features:
Default editor for KDE environments.
Includes features like split view, multiple documents, and syntax
highlighting.
Can be used for development tasks with integrated tools.
Best for: Users who need an advanced, GUI-based text editor.
Learning Curve: Moderate.
3. Sublime Text
Type: GUI, lightweight
Usage: Open from Applications or terminal: subl filename
Features:
Fast, extensible, with a clean interface.
Supports plugins and extensive customization.
Highly popular among developers for its speed and features.
Best for: Developers and users who want a modern, high-performance
editor.
Learning Curve: Low to moderate.
4. Atom
Type: GUI, extensible
Usage: Open from Applications or terminal: atom filename
Features:
Open-source and highly customizable with a built-in package
manager.
Supports a wide range of languages and features.
Created by GitHub, integrates well with Git.
Best for: Developers, open-source enthusiasts.
Learning Curve: Low to moderate.
5. Visual Studio Code (VS Code)
Type: GUI, extensible, code-focused
Usage: Open from Applications or terminal: code filename
Features:
Highly popular, cross-platform, and feature-rich.
Great for web development, supporting extensions for various
programming languages.
Integrated Git, debugging, and more.
Best for: Developers working on complex projects with version control.
Learning Curve: Low.
File and Content Management Tools
1. cat (Concatenate)
Type: Command-line
Usage: cat filename
Features:
Simply displays the contents of a file.
Can be used to create files (e.g., cat > [Link]).
Best for: Quickly viewing or creating simple files.
2. touch
Type: Command-line
Usage: touch filename
Features:
Used to create an empty file.
Can be used to change file timestamps.
Best for: Quickly creating an empty file or updating timestamps.
3. less
Type: Command-line, pager
Usage: less filename
Features:
Allows viewing long files without opening them fully.
Can scroll, search, and navigate content.
Best for: Viewing large files without editing them.
Additional Text Editor
For beginners:
Use nano for simple text editing.
gedit or Kate if you prefer a GUI.
For developers:
Use vim or emacs if you're comfortable with the command line.
Sublime Text, Atom, or VS Code if you need a GUI editor with more features
and extensions.
For advanced users:
vim and emacs offer a lot of power and customization, suitable for efficient
and fast workflows.
For file management:
Use cat, less, or touch for quickly viewing, creating, or managing file
contents.
Vi Editors
In Linux, vi (or vim – Vi IMproved) is one of the most widely used text editors, especially
for command-line text editing. Understanding the basics of vi is essential for many Linux
users, as it is often the default editor in many Unix-like systems.
Guide to using the vi editor:
Opening Files with vi
To open a file (or create a new one) with vi, use the following command:
vi filename
If filename exists, vi will open it.
If the file doesn't exist, vi will create it.
Modes in vi
vi operates in different modes:
1. Command Mode (default):
When you first open vi, you're in command mode.
In this mode, you can navigate the file, delete text, copy/paste, etc.
You cannot type text directly in command mode.
Insert Mode:
In this mode, you can type text.
To enter insert mode, press i (or other commands like a, o).
Press Esc to return to command mode.
Visual Mode:
Used for selecting text. To enter, press v in command mode.
You can select text, and then cut or copy it.
Last Line Mode:
This is where you enter commands like save (:w), quit (:q), search (/), etc.
Press : to access this mode from command mode.
Basic Navigation in vi
Arrow Keys: You can use arrow keys to move around, but vi also offers efficient
keyboard navigation:
h → Move left
j → Move down
k → Move up
l → Move right
Word Navigation:
w → Move forward to the next word.
b → Move backward to the previous word.
Line Navigation:
0 → Move to the beginning of the line.
$ → Move to the end of the line.
gg → Move to the beginning of the file.
G → Move to the end of the file.
Scrolling:
Ctrl + f → Scroll forward (down one screen).
Ctrl + b → Scroll backward (up one screen).
Editing Text in vi
1. Entering Insert Mode:
Press i to insert before the cursor.
Press I to insert at the beginning of the line.
Press a to insert after the cursor.
Press A to insert at the end of the line.
Press o to open a new line below the current line.
Press O to open a new line above the current line.
2. Deleting Text:
x → Delete the character under the cursor.
dw → Delete the current word.
dd → Delete the current line.
D → Delete from the cursor to the end of the line.
d$ → Delete from the cursor to the end of the line.
3. Copying and Pasting Text:
yy → Copy the current line (yank).
yw → Copy the current word.
p → Paste after the cursor.
P → Paste before the cursor.
4. Undo and Redo:
u → Undo the last action.
Ctrl + r → Redo the last undone action.
Saving and Exiting
Save and Exit:
In command mode, type :wq and press Enter to save and quit.
Save (without quitting):
In command mode, type :w and press Enter.
Exit without saving:
In command mode, type :q! and press Enter.
Quit (if no changes were made):
In command mode, type :q and press Enter.
Searching in vi
Forward Search:
In command mode, type /search_term and press Enter to search
forward.
Press n to move to the next occurrence.
Press N to move to the previous occurrence.
Backward Search:
In command mode, type ?search_term and press Enter to search
backward.
Search and Replace:
In command mode, type :%s/old/new/g and press Enter to replace all
occurrences of "old" with "new".
To replace just the first occurrence, omit the g flag: :%s/old/new.
Other Useful Commands
Line Numbers: To display line numbers, type :set number in command mode.
Insert Multiple Lines: Press i and type your lines, then press Esc.
Go to a Specific Line: Type :linenumber (e.g., :10 to go to line 10).
Search and Highlight: Type :set hlsearch to highlight all matches of your search
term.
Customizing vi
Setting Line Numbers:
Type :set number to display line numbers.
Enabling Syntax Highlighting (in vim):
Type :syntax on to enable syntax highlighting in vim.
Changing Case:
~ → Change the case of the current character.
gU → Convert text to uppercase.
gu → Convert text to lowercase.
Search Highlighting:
:set hlsearch → Enable search highlighting.
:set nohlsearch → Disable search highlighting.
Vim-Specific Features
Vim is an extended version of vi that comes with additional features like:
Syntax highlighting (for many programming languages).
Better search capabilities.
Autocompletion.
Multiple windows/tabs.
LOCATING FILES IN LINUX
In Linux, there are several commands and tools that can help you locate files on the
system. These commands search for files based on specific criteria like file name, type, size,
or modification date. Here’s an overview of the most commonly used commands for
locating files in Linux:
1. find Command
The find command is one of the most powerful and versatile commands for locating
files in Linux. You can search for files based on a variety of conditions such as name, type,
modification time, etc.
Basic Syntax:
find [starting-directory] [search-criteria] [actions]
starting-directory: The directory where the search begins (use / for the entire
filesystem or . for the current directory).
search-criteria: Conditions to match the files, such as name, type, size, etc.
actions: What to do with the found files, such as printing or executing a command.
Common Examples:
Find files by name:
find /path/to/search -name "filename"
Example: To find all files named [Link] in the /home/user directory:
find /home/user -name "[Link]"
Find files by type:
o To search for directories:
find /path/to/search -type d
o To search for regular files:
find /path/to/search -type f
Find files by size:
o To find files larger than 100MB:
find /path/to/search -size +100M
o To find files smaller than 10KB:
find /path/to/search -size -10k
Find files modified within the last 7 days:
find /path/to/search -mtime -7
Find files and execute a command:
o To delete files named [Link]:
find /path/to/search -name "[Link]" -exec rm {} \;
2. locate Command
The locate command is a faster alternative to find because it uses a pre-built database of
files on the system. This database is updated periodically (usually via the updatedb
command). However, locate may not find newly created files unless the database is
updated.
Basic Syntax:
locate filename
Example: To find a file named [Link]:
locate [Link]
To update the database (if you suspect the file has been created recently and
locate doesn't find it):
sudo updatedb
Advantages:
Faster than find because it uses a database instead of searching the filesystem in
real time.
Works across the entire filesystem.
3. which Command
The which command is used to locate executables in the directories listed in the $PATH
environment variable.
Basic Syntax:
which command_name
Example: To find the location of the bash executable:
which bash
4. whereis Command
The whereis command is similar to which but also locates source code, manual pages, and
binaries. It’s especially useful when you want to find the location of a program's binary,
source code, and man page.
Basic Syntax:
whereis command_name
Example: To locate bash:
whereis bash
5. find with grep for Pattern Matching
If you want to search for files with a specific pattern in their name, you can combine find
with grep.
Example:
To find all .txt files in the /home/user directory:
find /home/user -type f | grep ".txt"
This will list all .txt files in the directory and its subdirectories.
6. tree Command
The tree command displays a directory structure in a tree-like format, which can
help you visualize the hierarchy of files and directories. You can combine it with grep to
locate files within a specific directory structure.
Basic Syntax:
tree /path/to/search
tree /home/user
To search within the tree output:
tree /path/to/search | grep "pattern"
7. find with xargs for Advanced Search
If you want to process the found files with other commands (like moving or compressing),
you can use xargs to pass the results of find to other commands.
Example:
To find all .log files and compress them:
find /path/to/search -name "*.log" | xargs tar -czf [Link]
This will find all .log files and compress them into a [Link] archive.
8. fd Command (Faster Alternative to find)
The fd command is a modern and faster alternative to find, designed to be simpler and
more user-friendly.
Basic Syntax:
fd pattern /path/to/search
Example: To search for [Link]:
fd [Link] /home/user
Advantages:
Easier syntax than find.
Fast and powerful with better default settings (e.g., excludes .git directories by
default).
9. stat Command
If you know the file name but need more information about the file, you can use stat. It
gives detailed information about a file, such as its size, permissions, modification times, and
more.
Basic Syntax:
stat filename
Example: To see detailed information about a file:
stat /path/to/file
10. du Command for Disk Usage
The du command can help you locate large files or directories by showing disk usage.
Basic Syntax:
du -sh /path/to/directory
Example: To see the disk usage of a directory:
du -sh /home/user
To find the largest directories:
du -ah /path/to/search | sort -rh | head -n 10
STANDARD FILES IN LINUX
In Linux, standard files refer to a set of files that are used to facilitate interaction
between processes, users, and the system. These files play a key role in input/output
operations. In Linux, everything is treated as a file (including devices, processes, and
directories), and the standard files are essential for the functioning of the system.
The standard files in Linux are typically categorized as standard input, standard
output, and standard error, but they also include the standard file descriptors and
other special files.
Here’s a breakdown of the standard files in Linux:
1. Standard Input (stdin)
File Descriptor: 0
Description: This is the default source from which a program reads input. By
default, it comes from the keyboard when you run a command in the terminal, but
it can be redirected from a file or another process.
Example:
o When you run a command like cat, it reads from stdin (usually the keyboard
unless redirected).
cat > [Link]
This will allow you to type input which will be saved into [Link].
2. Standard Output (stdout)
File Descriptor: 1
Description: This is the default file descriptor where a process writes its output. By
default, this is the terminal screen (or the console). You can redirect it to a file or
another process.
Example:
o When you run a command like echo, the output goes to stdout.
echo "Hello, World!"
This prints "Hello, World!" to the terminal.
o Redirecting stdout to a file:
echo "Hello, World!" > [Link]
3. Standard Error (stderr)
File Descriptor: 2
Description: This is the default file descriptor for error messages or diagnostic
output. Like stdout, it can be redirected, but it is often kept separate to allow users
to distinguish regular output from errors.
Example:
o A command like ls can produce an error if the directory doesn’t exist.
ls non_existent_directory
The error message is sent to stderr.
o Redirecting stderr to a file:
ls non_existent_directory 2> [Link]
o Redirecting both stdout and stderr to the same file:
o ls non_existent_directory > [Link] 2>&1
4. /dev/null – The Null Device
Description: /dev/null is a special file that discards all data written to it (i.e., it
behaves like a "black hole" for data). It’s often used to suppress unwanted output.
Example:
o To discard the standard output of a command:
echo "This will be discarded" > /dev/null
o To discard both stdout and stderr:
ls non_existent_directory > /dev/null 2>&1
5. /dev/tty – The Terminal
Description: /dev/tty is a special file that represents the controlling terminal for
the current session. It refers to the terminal (keyboard and screen) you’re using to
interact with the system.
Example:
o Writing to /dev/tty will send output directly to the terminal.
echo "Hello, User" > /dev/tty
6. /dev/zero – The Zero Device
Description: /dev/zero is a special file that produces an infinite stream of zero
bytes when read. It’s often used for testing, initializing memory, or filling up files
with zero values.
Example:
o To create a file of zeros (e.g., a 1MB file filled with zeros):
dd if=/dev/zero of=zero_file.txt bs=1M count=1
7. /dev/random and /dev/urandom – Random Number Generators
Description: Both /dev/random and /dev/urandom are special files used for
generating random data. The main difference is how they generate randomness:
o /dev/random: Generates cryptographically secure random numbers based
on environmental noise, but it may block if there’s not enough entropy.
o /dev/urandom: Also generates random numbers but doesn’t block, making
it faster but less cryptographically secure.
Example:
o To generate random data:
cat /dev/random
o To generate random data without blocking:
cat /dev/urandom
8. /dev/console – The System Console
Description: /dev/console is a special file representing the system console. It is
typically used by the kernel or system processes to send messages to the system’s
primary console device (the terminal or screen).
Example:
o Writing to /dev/console will send output to the console:
echo "System alert!" > /dev/console
9. /proc – The Process Information Directory
Description: /proc is a virtual filesystem that contains a wealth of information
about running processes and system status. Files in /proc provide details like
memory usage, process details, hardware configuration, and more.
Example:
o To view information about the current process:
cat /proc/self/status
o To check system memory usage:
cat /proc/meminfo
10. /sys – The Sysfs Virtual Filesystem
Description: /sys is another virtual filesystem that provides information about
kernel parameters, devices, and other system settings. It is often used for
configuring or querying the kernel and hardware devices.
Example:
o To check CPU information:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
11. /etc – Configuration Files
Description: The /etc directory contains system-wide configuration files for system
services and applications. These files are essential for configuring system behavior
and managing system resources.
Example:
o /etc/passwd contains user account information.
o /etc/fstab contains information about disk partitions.
12. /tmp – Temporary Files
Description: The /tmp directory is used to store temporary files created by
applications or system processes. Files in /tmp are usually deleted when the system
reboots or after a certain time period.
Example:
o To create a temporary file:
echo "Temporary file content" > /tmp/[Link]
Summary of Standard Files in Linux:
File File Description
Descriptor
stdin 0 Standard Input (usually the keyboard or file input)
stdout 1 Standard Output (usually the terminal screen)
stderr 2 Standard Error (usually the terminal for error
messages)
/dev/null - Discards data written to it (black hole for data)
/dev/tty - Represents the controlling terminal
/dev/zero - Infinite stream of zero bytes
/dev/random - Cryptographically secure random data
/dev/urandom - Non-blocking random data generator
/proc - Virtual filesystem for process and system information
/sys - Virtual filesystem for kernel and hardware information
/etc - Configuration files for system and applications
/tmp - Temporary files created by applications
These standard files and special files play crucial roles in system operations, input/output
handling, and configuration management in Linux.
REDIRECTION IN LINUX
It refers to the process of redirecting the standard input, output, or error streams of
a command to or from files or other commands. This is a powerful feature that allows users
to control data flow in the shell, making scripts and commands more versatile.
Here’s an overview of redirection in Linux:
1. Standard Streams
Linux uses three standard streams for input and output:
Standard Input (stdin): File descriptor 0, typically the keyboard.
Standard Output (stdout): File descriptor 1, typically the terminal.
Standard Error (stderr): File descriptor 2, used for error messages.
2. Redirection Operators
The shell provides several operators to redirect these streams.
a. Redirecting Output (stdout)
Redirect the standard output to a file:
command > file
o If the file exists, it will be overwritten.
Example:
echo "Hello, World!" > [Link]
Append output to a file (without overwriting):
command >> file
Example:
echo "Another line" >> [Link]
b. Redirecting Input (stdin)
Redirect input from a file:
command < file
Example:
wc -l < [Link]
Counts the number of lines in [Link].
c. Redirecting Error (stderr)
Redirect error output to a file:
command 2> file
Example:
ls nonexistent_directory 2> [Link]
Append error output to a file:
command 2>> file
d. Redirecting Both Output and Error
Redirect both stdout and stderr to the same file:
command > file 2>&1
Example:
ls nonexistent_directory > [Link] 2>&1
command > /dev/null 2>&1
3. Using Pipes (|)
Pipes redirect the output of one command to the input of another.
command1 | command2
Example:
ls | grep "pattern"
Sends the output of ls to grep for filtering.
4. Here Documents (<<)
Here documents allow you to provide input directly in the script or command, rather than
from a file.
command << delimiter
input
delimiter
Example:
cat << EOF
This is a here document example.
EOF
5. Here Strings (<<<)
Here strings redirect a single string as input to a command.
command <<< "string"
Example:
grep "pattern" <<< "This is a sample text."
6. Combining Redirections
You can combine multiple redirections in a single command.
Redirect stdout to a file and stderr to another file:
command > [Link] 2> [Link]
Redirect stdout to a file and stderr to the same file:
command > file 2>&1
7. Special Files for Redirection
/dev/null: Discards all input/output.
Example:
command > /dev/null
/dev/tty: Refers to the terminal.
Example:
echo "Message to terminal" > /dev/tty
8. Examples of Redirection
Redirect Output:
bash
Copy code
ls > [Link]
Saves the output of ls into [Link].
Redirect Error:
ls nonexistent_dir 2> [Link]
Saves the error message into [Link].
Discard Error Messages:
command 2> /dev/null
Ignores all error messages.
Redirect Both Output and Error:
command > [Link] 2>&1
Saves both output and error messages to [Link].
Use Pipes:
ls | grep ".txt"
Filters the output of ls to show only .txt files.
Combine Redirections and Pipes:
ls /nonexistent_dir 2>&1 | grep "No such file"
Redirects both output and error, then filters the message for a specific string.
9. Practical Applications
Logging output and errors:
[Link] > [Link] 2>&1
Redirects all output and errors from [Link] to [Link].
Suppress output and errors:
command > /dev/null 2>&1
Count specific lines in a file:
grep "pattern" [Link] | wc -l
Redirecting in scripts:
echo "Starting process..." > [Link]
command >> [Link] 2>&1
echo "Process completed." >> [Link]
10. Summary of Redirection Operators
Operator Description
> Redirect stdout to a file (overwrites file).
>> Append stdout to a file.
< Redirect stdin from a file.
2> Redirect stderr to a file.
2>> Append stderr to a file.
>& Redirect one file descriptor to another.
` `
<< Use a here document to provide input.
<<< Use a here string to provide input.
Redirection in Linux is a fundamental concept that greatly enhances the power and
flexibility of command-line operations
FILTERS IN LINUX
Filters in Linux are tools or commands used to process text data and transform input data
into desired output. Filters usually read data from standard input, perform some operation, and
write the result to standard output. They are often used in conjunction with pipes ( |) to create
powerful command-line workflows.
Here is a detailed overview of Linux filters and their common usage:
1. Common Filters in Linux
a. cat (Concatenate Files)
Displays the contents of a file or concatenates multiple files.
Example:
cat [Link]
b. grep (Global Regular Expression Print)
Searches for a pattern in files or input data and prints matching lines.
Example:
grep "pattern" [Link]
Search recursively:
grep -r "pattern" /path/to/directory
c. sort
Sorts lines of text in a file.
Example:
sort [Link]
Sort numerically:
sort -n [Link]
Sort in reverse order:
sort -r [Link]
d. uniq (Find Unique Lines)
Removes duplicate lines from sorted input.
Example:
sort [Link] | uniq
Show duplicate lines:
sort [Link] | uniq -d
e. wc (Word Count)
Counts lines, words, and characters in a file.
Example:
wc [Link]
Count lines only:
wc -l [Link]
Count words only:
wc -w [Link]
f. head
Displays the first few lines of a file.
Example:
head [Link]
Display the first 10 lines:
head -n 10 [Link]
g. tail
Displays the last few lines of a file.
Example:
tail [Link]
Follow the file as it grows (useful for logs):
tail -f [Link]
h. cut
Extracts specific fields or columns from a file or input.
Example:
cut -f1,3 -d',' [Link]
o -d',': Specifies the delimiter (comma in this case).
o -f1,3: Extracts the first and third fields.
i. tr (Translate Characters)
Translates or deletes characters in input data.
Example:
o Convert lowercase to uppercase:
echo "hello world" | tr 'a-z' 'A-Z'
o Remove digits:
echo "abc123xyz" | tr -d '0-9'
j. sed (Stream Editor)
Performs text transformations or edits on input data.
Example:
o Replace "old" with "new":
sed 's/old/new/' [Link]
o Delete lines containing "pattern":
sed '/pattern/d' [Link]
k. awk
A powerful text-processing tool that operates on patterns and fields.
Example:
o Print the second column:
awk '{print $2}' [Link]
o Sum the values in the second column:
awk '{sum+=$2} END {print sum}' [Link]
l. tee
Reads from standard input and writes to both standard output and a file.
Example:
echo "Hello, World!" | tee [Link]
2. Using Filters with Pipes
Pipes (|) are used to connect filters, allowing the output of one command to be used as
input for another.
Examples:
Find unique words in a file:
cat [Link] | tr ' ' '\n' | sort | uniq
Count the number of lines containing "error":
grep "error" [Link] | wc -l
Extract the second column, sort it, and remove duplicates:
cut -d',' -f2 [Link] | sort | uniq
3. Combining Filters
Filters can be combined to perform complex data transformations.
Examples:
Display the 5 most common words in a file:
tr ' ' '\n' < [Link] | sort | uniq -c | sort -nr | head -n 5
Display the last 10 lines of a log file containing "error":
grep "error" [Link] | tail -n 10
Extract email addresses from a file:
grep -o '[a-zA-Z0-9._%+-]*@[a-zA-Z0-9.-]*\.[a-zA-Z]*' [Link]
4. Practical Applications of Filters
Log Analysis:
tail -n 1000 /var/log/syslog | grep "error" | tee [Link]
Data Cleanup:
cat [Link] | tr -d '\r' | sort | uniq > cleaned_data.csv
Text Transformation:
echo "hello world" | tr 'a-z' 'A-Z'
5. Summary Table
Filter Purpose Example
cat Display or concatenate files cat [Link]
grep Search for patterns in text grep "pattern" [Link]
sort Sort lines of text sort [Link]
uniq Remove duplicate lines `sort [Link]
wc Count lines, words, or characters wc -l [Link]
head Display the first few lines head -n 5 [Link]
tail Display the last few lines tail -f [Link]
cut Extract specific fields cut -f1,2 -d',' [Link]
tr Translate or delete characters `echo "hello"
sed Perform text transformations sed 's/old/new/' [Link]
awk Process and analyze text data awk '{print $2}' [Link]
tee Write output to both file and terminal `echo "text"
PIPES IN LINUX
Pipes in Linux are a way to direct the output of one command as the input to
another command. Pipes are represented by the | symbol and are a fundamental feature of
the Linux command-line interface, enabling the creation of powerful and efficient
workflows by chaining commands together.
1. What is a Pipe?
A pipe allows you to take the output (stdout) of one command and use it as the input
(stdin) for another command. For example:
command1 | command2
In this chain:
command1 generates output.
command2 processes the output of command1.
2. Syntax of Pipes
The general syntax for using pipes is:
command1 | command2 | command3 ...
3. Basic Example
List all files in a directory and search for specific files:
ls | grep "pattern"
4. Common Use Cases of Pipes
a. Combining Multiple Commands
1. Display sorted and unique lines in a file:
cat [Link] | sort | uniq
2. Count the number of files in a directory:
ls | wc -l
b. Searching Logs
Find errors in a log file:
cat /var/log/syslog | grep "error"
c. Filtering Output
Display the first 5 lines of files containing "keyword":
grep "keyword" [Link] | head -n 5
d. Monitoring Processes
List all running processes containing "apache":
ps aux | grep "apache"
e. Advanced Text Processing
Extract a specific column from data, sort it, and find unique values:
bash
cut -d',' -f2 [Link] | sort | uniq
5. Combining Pipes with Redirection
You can mix pipes and redirection to create more complex commands.
1. Save filtered output to a file:
ls | grep "pattern" > [Link]
2. Combine output and error streams, then process:
command1 2>&1 | command2
6. Practical Examples
Example 1: Find and Sort Large Files
List all files over 1 GB and sort them by size:
find /path/to/dir -type f -size +1G | xargs ls -lh | sort -k5,5 -h
Example 2: Monitor System Resource Usage
Display the top 5 memory-consuming processes:
ps aux | sort -nk4 | tail -n 5
Example 3: Count Specific Words in a File
Count the number of occurrences of "error" in a file:
grep -o "error" [Link] | wc -l
Example 4: Extract and Process Data
Extract email addresses from a file:
cat [Link] | grep -o "[a-zA-Z0-9._%+-]*@[a-zA-Z0-9.-]*\.[a-zA-Z]*" | sort | uniq
7. Benefits of Using Pipes
Efficiency: Avoids intermediate files by passing data directly between commands.
Modularity: Allows building workflows by chaining small, specialized commands.
Flexibility: Works with a wide range of Linux commands and utilities.
8. Limitations of Pipes
Pipes only pass stdout. To include stderr, you need to redirect it using 2>&1.
Pipes don’t maintain state between commands; each command works on its
input/output independently.
Handling binary data with pipes can be complex.
9. Advanced Use Cases
a. Combining Commands with Multiple Pipes
Find files modified in the last 7 days, count them, and display their names:
find . -type f -mtime -7 | tee file_list.txt | wc -l
b. Parallel Processing with Pipes
Use xargs to process files in parallel:
find . -type f -name "*.txt" | xargs grep "pattern"
10. Summary
Command Description
`command1 command2`
`grep "error" wc -l`
`ls sort
`ps aux grep "apache"`
`find . xargs grep "text"`