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.
# 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.txtless: 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.
# 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 followingnano: 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.
# 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+Xvim: 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.
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 changesGNU 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
filebefore using cat on unknown files to avoid dumping binary data to your terminal.
Practice what you learned
1. Which command is best suited for browsing a 2 GB log file interactively without loading it entirely into memory first?
2. In vim, which keystroke sequence saves the current file and quits?
3. What does the nano shortcut Ctrl+O do?
4. Inside less, which key searches forward for a pattern in the file being viewed?
5. Why might cat-ing a binary file to the terminal be a problem?
Was this page helpful?
You May Also Like
Navigating the Filesystem (cd, pwd, ls)
Practical mastery of moving around the Linux directory tree using cd, pwd, and ls, including absolute vs relative paths and useful ls flags for everyday work.
grep and Regular Expressions
Master text searching with grep and the regular expression syntax that powers it, from basic literal matches to extended regex patterns and useful flags.
Reading and Managing Logs (journalctl, /var/log)
Master the two dominant Linux logging models — the systemd journal and traditional flat-file logs in /var/log — to diagnose issues and manage log retention.
Getting Help: man, --help, and info
How to find authoritative documentation for any Linux command using man pages, --help output, and the info system, plus tips for searching and navigating them efficiently.
Related Reading
Related Study Notes in DevOps
Browse all study notesNginx Study Notes
DevOps · 30 topics
DevOpsAnsible Study Notes
DevOps · 30 topics
DevOpsAdvanced Kubernetes Study Notes
Kubernetes · 30 topics
DevOpsAdvanced Bash Scripting Study Notes
Bash · 30 topics
DevOpsApache Kafka Study Notes
Kafka · 30 topics
DevOpsDocker & Kubernetes Study Notes
YAML · 40 topics