100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Bash

Viewing and Editing Files (cat, less, nano, vim basics)

Learn the core command-line tools for reading and modifying text files, from quick dumps with cat to paginated viewing with less and full editing in nano and vim.

Navigating & Managing FilesBeginner9 min readJul 9, 2026
Analogies

Viewing and Editing Files (cat, less, nano, vim basics)

Almost every Linux task eventually comes down to reading or changing the contents of a text file: a config file in /etc, a log in /var/log, or a script you're writing. The shell gives you a spectrum of tools for this, ranging from simple one-shot viewers to full modal editors. Choosing the right tool matters — dumping a 500,000-line log with cat will flood your terminal, while opening a one-line config in vim is often more overhead than it's worth. Understanding cat, less, nano, and vim together lets you pick the lightest tool that gets the job done, which is a core habit of efficient Linux administration.

🏏

Cricket analogy: Reading a scorecard is like choosing tools for the job: a quick one-line score check needs just a glance (cat), a full ball-by-ball commentary log needs a scrollable ticker (less), and rewriting the official match report needs a full editing desk (vim) — overkill for checking one score.

cat: concatenate and dump

cat (short for 'concatenate') reads one or more files and writes their contents to standard output, in order, with no pagination. It's ideal for short files, for combining several files into one, or for piping content into another command. Because cat has no interactive UI, it's also frequently used inside scripts and pipelines rather than for casual reading of large files. Useful flags include -n to number every output line, -A to reveal non-printing characters (tabs as ^I, line ends as $), and -s to squeeze repeated blank lines into one.

🏏

Cricket analogy: cat simply prints a scorecard file straight through with no scrolling, ideal for a short single-innings summary or combining two innings files into one; -n numbers each over, -A reveals hidden characters like tab-separated stats, and -s squeezes repeated blank lines between overs into one.

bash
# Print a file to the terminal
cat /etc/os-release

# Concatenate three files into a new one
cat part1.log part2.log part3.log > combined.log

# Number lines and show tabs/line-endings (handy for debugging whitespace bugs)
cat -A -n deploy.sh | head -20

# Append rather than overwrite
cat notes.txt >> archive.txt

less: paginated, searchable viewing

less is the standard tool for viewing files that are too large to fit on one screen. Unlike its ancestor more, less loads content lazily, so it opens multi-gigabyte files almost instantly and lets you scroll forward and backward freely. Inside less, Space or Page Down moves forward a screen, b moves back, /pattern searches forward (n repeats the search, N reverses it), and G jumps to the end of the file (useful for 'tail -like' viewing) while g jumps to the start. Press q to quit. less is also the default pager for man, git log, and many other tools, so learning its keybindings pays off broadly.

🏏

Cricket analogy: less opens even a decade-long ball-by-ball archive almost instantly by loading lazily, unlike scrolling a printed scorecard; Space pages forward through overs, b pages back, /Kohli searches forward for his innings (n repeats, N reverses), G jumps to the final over, g to the first, and q closes it.

bash
# Open a large log file for browsing
less /var/log/syslog

# Start already scrolled to the end (like tail)
less +G /var/log/syslog

# Case-insensitive search as you view
less -i access.log

# Follow a growing file (like tail -f) while still being able to search
less +F /var/log/nginx/access.log   # press Ctrl+C then use less normally, Shift+F to resume following

nano: a beginner-friendly modeless editor

nano is a small, modeless terminal editor: there is no separate 'insert mode' versus 'command mode' — you simply type, and the bottom of the screen lists the available shortcuts using the caret (^) to mean Ctrl. Common shortcuts are Ctrl+O to write out (save), Ctrl+X to exit, Ctrl+K to cut a line, Ctrl+U to paste, Ctrl+W to search, and Ctrl+\ for search-and-replace. Because it requires no mental mode-switching, nano is the most approachable editor for quick edits to config files over SSH, and it's the default $EDITOR on many minimal server images.

🏏

Cricket analogy: nano is like a scorer who never switches between 'writing mode' and 'reviewing mode' — you just write the over-by-over notes directly; Ctrl+O saves the scoresheet, Ctrl+X closes it, Ctrl+K cuts a wrong entry, Ctrl+U pastes it elsewhere, and Ctrl+W finds a batsman's name quickly.

bash
# Edit a config file with nano
sudo nano /etc/ssh/sshd_config

# Open at a specific line number
nano +45 /etc/hosts

# Save and exit sequence inside nano:
#   Ctrl+O  -> Enter (confirm filename) -> Ctrl+X

vim: modal editing for speed and power

vim (Vi IMproved) is a modal editor: keystrokes mean different things depending on the current mode. Normal mode (the default on open) is for navigation and commands, Insert mode (entered with i, a, o, etc.) is for typing text, and Command-line mode (entered with :) is for operations like saving and quitting. The learning curve is steeper than nano's, but vim's modal design lets experienced users edit text far faster because most keys become powerful commands rather than plain characters. It's also nearly universally preinstalled (at least as vi) on Linux and Unix systems, making it the safest editor to rely on when working on an unfamiliar or minimal machine.

🏏

Cricket analogy: vim is like a veteran umpire signaling differently by phase of play: Normal mode is for positioning and reviewing, Insert mode (i, a, o) is for actively raising the finger, and Command mode (:) is for formal decisions like a third-umpire referral; harder to learn than a rookie's routine, but a seasoned umpire works far faster, and every ground has one available.

bash
vim /etc/hosts
# --- inside vim, in Normal mode ---
# i         enter Insert mode before the cursor
# Esc       return to Normal mode
# dd        delete (cut) the current line
# yy        yank (copy) the current line
# p         paste after the cursor
# /pattern  search forward for 'pattern'
# :%s/old/new/g   replace every 'old' with 'new' in the whole file
# :w        write (save)
# :q        quit
# :wq  or ZZ    save and quit
# :q!       quit and discard changes

GNU vs BSD note: the cat and less shipped on most Linux distributions come from GNU coreutils and the util-linux/less projects respectively, which support extra long-form flags like --number and --squeeze-blank. macOS and BSD systems ship different, more minimal implementations of these same tools, so scripts that lean on GNU-only flags (e.g. cat -s) may behave differently or error out there — a common surprise when a Linux-written script is run on a Mac.

cat on a binary file (an executable, image, or compressed archive) can dump raw control characters to your terminal, sometimes corrupting the terminal's display settings or triggering odd beeping. If that happens, run reset (or close and reopen the terminal) to restore it. Use file <name> first to check a file's type before you cat it if you're unsure.

  • cat is for dumping or concatenating files non-interactively; it has no pagination.
  • less is the standard pager for large files — it loads lazily and supports forward/backward search with /, n, and N.
  • nano is modeless and beginner-friendly; shortcuts are shown on-screen using ^ for Ctrl.
  • vim is modal: Normal mode for commands/navigation, Insert mode for typing, and :commands for save/quit/search-replace.
  • vi (a vim ancestor) is present on nearly every Unix-like system, making it a reliable fallback editor anywhere.
  • Always check file type with file before using cat on unknown files to avoid dumping binary data to your terminal.

Practice what you learned

Was this page helpful?

Topics covered

#Bash#LinuxShellScriptingStudyNotes#DevOps#ViewingAndEditingFilesCatLessNanoVimBasics#Viewing#Editing#Files#Cat#StudyNotes#SkillVeris