You’ve been using Linux for a while, so you know the basics: ls
, cd
, cp
.But now you’re stepping up your game. You need more. You’re ready to unlock the power of the Linux command line to elevate your workflow—whether it’s programming, system administration, or just being more efficient in your day-to-day tasks.
Well, that’s exactly what I’m going to show you today: 30 advanced Linux command line tips that’ll make you feel like a command-line wizard.
Table of Contents
1. Complex File Searches with find
Let’s start with something fundamental but powerful—searching files. The find
command is your best friend when you need precision. You can search based on file type, size, or even modification date.
Get Your Linux Course!
Join our Linux Course and discover the power of open-source technology. Enhance your skills and boost your career! Learn Linux today!find /project/directory -type f -name "*.js" -size +1M -mtime -7
This command looks for .js
files larger than 1MB, modified within the last 7 days. Perfect for tracking recent changes in a project.
2. Advanced Text Searches with grep
Sometimes, you need to search through files and find patterns—regular expressions are your ally here. The grep
command allows you to search using regex patterns.
grep -E "function\s+\w+\s*\(.*\)" file.js
This looks for JavaScript function definitions in file.js
using an extended regex pattern.
3. Data Analysis with awk
If you’ve ever worked with log files, you know how chaotic they can be. Enter awk
. It’s perfect for analyzing logs and extracting summary information.
awk '/ERROR/ {count++} END {print count}' application.log
This counts the number of “ERROR” entries in a log file.
4. Stream Editing with sed
Need to reformat or manipulate text on the fly? sed
is your go-to tool for stream editing.
cat file.txt | sed 's/\(ERROR\): \(.*\)/\1 - \2/' > new_file.txt
This command reformats error lines in file.txt
and saves the output to new_file.txt
.
5. Command Chaining with xargs
Sometimes you need to apply the same command to multiple files. xargs
can make this happen.
find . -name "*.log" | xargs grep "CRITICAL"
It finds all .log
files and searches for the term “CRITICAL” in them. One command to rule them all.
6. Session Management with tmux
Ever wished you could have multiple terminal windows inside one? tmux
lets you manage multiple sessions in a single terminal window.
tmux new-session -s project
This starts a new tmux session called “project”. You can split, move around, and even detach from sessions as needed.
7. Virtual Terminals with screen
screen
is another terminal multiplexer. It’s great for long-running processes that you need to leave running in the background.
screen -S long_process
This starts a new screen
session named “long_process”, perfect for background tasks.
8. Port Forwarding with ssh
Sometimes, you need access to a remote service securely. ssh
has a nifty trick up its sleeve: port forwarding.
ssh -L 8080:localhost:80 [email protected]
This forwards your local port 8080 to the remote server’s port 80, so you can securely access web services.
9. Efficient Synchronization with rsync
For syncing files and directories, especially when you’re dealing with large datasets, rsync
is unbeatable. It saves bandwidth and transfers only the changes.
rsync -avz --progress /local/directory/ [email protected]:/remote/directory/
This syncs the local directory with the remote one, showing you the progress as it does.
10. JSON Processing with jq
In today’s world, JSON is everywhere. If you’re dealing with API responses or configuration files, jq
is the tool you need to parse and manipulate JSON data.
cat data.json | jq '.users[] | {name, email}'
This extracts and prints out user names and emails from a JSON file.
11. System Call Tracing with strace
Want to know what a program is doing under the hood? strace
lets you trace system calls made by applications.
strace -o strace.log ./application
This logs the system calls of application
to strace.log
, helping you troubleshoot performance or errors.
12. Viewing Open Files and Ports with lsof
lsof
is invaluable for checking which files and network ports are being used by running processes.
lsof -i :8080
This shows all processes using port 8080—perfect for diagnosing network issues.
13. Detailed Disk Usage with ncdu
When disk space runs low, ncdu
comes to the rescue. It’s a fantastic tool to visualize and explore disk usage interactively.
ncdu /project/directory
This gives you a detailed, navigable breakdown of disk usage within a directory.
14. Container Management with docker
Docker is a must-have in modern development. With docker
, you can automate and manage containerized applications.
docker run -d -p 3000:3000 --name app container_image
This runs a container from container_image
, mapping port 3000, and does it in detached mode.
15. Kubernetes Management with kubectl
If you’re working with Kubernetes, kubectl
is your command-line interface to manage your clusters.
kubectl get pods -n development
This lists all the pods in the “development” namespace of your Kubernetes cluster.
16. Advanced Version Control with git
Sometimes, you need to dive deeper into Git’s history. reflog
and interactive rebasing allow you to explore and fix your commit history.
git reflog
git rebase -i HEAD~5
These commands let you review your commit history and interactively edit the last five commits.
17. Effective Fuzzy Searching with fzf
fzf
makes fuzzy searching fast and fun. With this tool, you can search files, command history, or even git branches interactively.
git checkout $(git branch | fzf)
Use fzf
to select a git branch and check it out in one go. Quick and easy.
18. Continuous Monitoring with watch
Need to keep an eye on something in real time? watch
will update the output of a command at regular intervals.
watch -n 5 '
df -h'
This updates disk usage stats every 5 seconds, so you can monitor space in real time.
19. Parallel Command Execution with parallel
Why do something sequentially when you can do it in parallel? parallel
allows you to run commands simultaneously.
cat commands.txt | parallel
This runs all commands listed in commands.txt
at the same time. It’s a real time-saver.
20. Performance Analysis with perf
Want to know what’s slowing down your app? perf
provides detailed performance data, helping you spot bottlenecks.
perf top
This shows the real-time top CPU-consuming functions in your application.
21. Service Management with systemd
Automate your apps and services with systemd
. These commands let you start and enable services at boot time.
sudo systemctl enable app.service
sudo systemctl start app.service
These commands enable and start the “app.service” service automatically on boot.
22. Advanced Scheduled Tasks with crontab
Need complex scheduling? With crontab
, you can create detailed cron expressions for running tasks at specific times.
*/15 9-17 * * 1-5 /usr/bin/backup.sh
This runs a backup script every 15 minutes from 9 AM to 5 PM, Monday through Friday.
23. Low-Level Copying with dd
dd
is the ultimate tool for low-level copying, like creating disk images or cloning disks.
dd if=/dev/sda of=/dev/sdb bs=4M status=progress
This copies the contents of /dev/sda
to /dev/sdb
, with progress shown.
24. Network Testing with nc
(Netcat)
Need to test network connectivity? nc
(Netcat) is the go-to tool for port scanning and testing network connections.
nc -zv server.com 80
This checks if port 80 on server.com
is open.
25. Mounting Remote Filesystems with sshfs
You can mount a remote directory locally with sshfs
, making remote files seem like they’re right on your machine.
sshfs [email protected]:/remote/directory /local/mount/point
This mounts the remote directory to a local mount point. Feels just like working locally!
26. Functional Aliases with alias
Make life easier with aliases. Create custom shortcuts for complex commands.
alias git-clean='git branch | grep "feature/" | xargs git branch -d'
This alias deletes all git branches starting with “feature/”.
27. Advanced Scripting with bash
Automate tasks with powerful Bash scripts. Here’s a quick example that runs pylint
on all Python files in a directory:
#!/bin/bash
for file in *.py; do
pylint "$file"
done
28. Enhanced Shell Usage with zsh
and oh-my-zsh
If you want a shell that’s both functional and stylish, zsh
with oh-my-zsh
is the way to go.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
This installs oh-my-zsh
, bringing a ton of functionality and cool themes to your shell.
29. Advanced Network Security with iptables
Keep your server secure by controlling network traffic with custom iptables
rules.
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -j DROP
These rules allow SSH traffic while blocking everything else.
30. Debugging with git bisect
Tracking down the commit that introduced a bug? git bisect
makes it painless.
git bisect start
git bisect bad
git bisect good v1.0
This helps you binary search through your commit history to pinpoint the bug.
—
Let me know if there’s anything else you’d like to tweak!