Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Speed Up Your Terminal Workflow

By Kokil Thapa | Last reviewed: September 2026

You open a terminal dozens of times a day to deploy Laravel apps, tail logs, run migrations, and SSH into Ubuntu boxes. Small friction adds up fast. The goal of this guide is to speed up your terminal workflow with shell habits, tools, and configs that survive production pressure. I use these patterns daily on Linux system administration work and client deployments across Nepal and remote teams. Nothing here requires exotic hardware—just a shell, a few packages, and fifteen minutes of setup.

How can you speed up your terminal workflow on Linux?

Start with the shell you already have. On Ubuntu 22.04 and 24.04 servers I maintain, bash remains the default. That is fine. Productivity comes from history search, directory jumping, and repeatable command blocks—not from switching shells on every box.

Install a small toolkit first. These packages appear on nearly every machine I configure for web development in Nepal client projects:

sudo apt update
sudo apt install -y git curl wget jq ripgrep fd-find fzf tmux bat htop

On Ubuntu, fd is often installed as fdfind. Add a symlink or alias so scripts stay portable:

alias fd='fdfind'

Enable programmable completion and a larger history in your shell rc file. Bash example:

# ~/.bashrc — baseline productivity block
shopt -s histappend
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTCONTROL=ignoreboth:erasedups
bind 'set show-all-if-ambiguous on'
bind 'TAB:menu-complete'

History deduplication matters when you run the same php artisan migrate --force or dep deploy production fifty times during a release week. You want Up-arrow to surface the last unique command, not five copies.

Terminal Workflow StackShell layerbash or zsh, history, completion, promptTool layerfzf, ripgrep, fd, bat, jqSession layertmux panes, SSH config, named windowsDeploy layerGit aliases, Deployer, artisan, logs
Four layers to speed up your terminal workflow: shell, search tools, persistent sessions, and deploy commands

Pick one improvement per day. Alias your top three commands Monday. Add fzf Tuesday. Configure tmux Wednesday. A big-bang rewrite of dotfiles breaks muscle memory and gets abandoned.

Keyboard-first navigation

Learn these bash shortcuts once. They pay back on every long command line:

  • Ctrl+A — jump to line start (replace Home on SSH sessions).
  • Ctrl+E — jump to line end.
  • Ctrl+W — delete word backward.
  • Alt+. — insert last argument of previous command (great after cd).
  • Ctrl+R — reverse history search; pair with fzf for better results.

On a production Laravel 12 or 13 app, I often chain: find log line, rerun artisan command, tail again. These shortcuts keep your hands on the keyboard instead of fighting terminal paste quirks.

What shell customizations save the most time?

Aliases are the fastest win. They turn repetitive paths and flags into two-letter habits. Keep them honest—alias the commands you type daily, not every command you have ever seen on a blog post.

Example block for PHP and Laravel work on PHP 8.3+ or 8.5:

# ~/.bashrc — Laravel and PHP shortcuts
alias art='php artisan'
alias migrate='php artisan migrate --force'
alias tinker='php artisan tinker'
alias pint='./vendor/bin/pint'
alias pest='./vendor/bin/pest'
alias sail='./vendor/bin/sail'

# Composer 2.10
alias ci='composer install --no-dev --optimize-autoloader'
alias cu='composer update'

Functions beat aliases when you need arguments. This deploy helper wraps Deployer 7 the way I run it on sister sites sharing GitLab CI pipelines:

depprod() {
  git status --short
  read -r -p "Deploy branch $(git branch --show-current) to production? [y/N] " ans
  [[ "$ans" =~ ^[Yy]$ ]] || return 1
  dep deploy production -vvv
}

Git shortcuts belong in the same file or in a dedicated ~/.gitconfig include:

# ~/.gitconfig
[alias]
  st = status -sb
  co = checkout
  br = branch -vv
  lg = log --oneline --graph --decorate -20
  last = log -1 HEAD --stat
  unstage = reset HEAD --

For JSON API debugging, pipe to jq instead of squinting at one line. Our JSON formatter tool helps in the browser, but in the terminal jq is instant:

curl -s https://api.example.com/v1/health | jq .

Prompt and directory context

A minimal prompt reduces noise. I keep hostname and path visible on remote servers so I never run a destructive command on the wrong box:

export PS1='\[\033[1;34m\]\u@\h\[\033[0m\]:\[\033[1;32m\]\w\[\033[0m\]\$ '

Directory jumping with z (via zoxide) or a simple bookmark function saves path typing on deep monorepos:

# bookmark: bm laravel /var/www/myapp/current
bm() { export "DIR_$1"="$2"; }
go() { cd "${DIR_$1}"; }

Pair bookmarks with project detection. When I land in a Laravel root, I want art and pest available without thinking. A small conditional in bashrc works:

if [[ -f artisan ]]; then
  alias art='php artisan'
fi
Shell Customization DecisionRepeat exact command?YesUse aliasNoNeed arguments?YesUse functionProject-specific?Conditional hook
Choose aliases, functions, or project hooks when you speed up your terminal workflow with shell customization

Which fuzzy finder and search tools belong in your daily workflow?

fzf turns tab completion and history into a searchable menu. After install, enable key bindings:

# ~/.bashrc
eval "$(fzf --bash)"
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_OPTS='--preview "bat --color=always {} 2>/dev/null | head -200"'

Common bindings once fzf is active:

  1. Ctrl+T — fuzzy file picker in current tree.
  2. Alt+C — fuzzy directory jump.
  3. Ctrl+R — fuzzy history (overrides default reverse search).

ripgrep (rg) replaces slow recursive greps. It respects .gitignore, which matters on Laravel and WordPress 7.1 codebases with vendor and node noise:

rg "RateLimiter" app/ routes/ --type php
rg -l "TODO" --glob '!vendor/*'

For quick regex checks before you commit validation rules, the browser regex tester is handy. In the shell, test with grep -E or a one-line PHP:

php -r "var_dump(preg_match('/^[a-z0-9_-]+$/', 'court-marriage-2026'));"

bat gives syntax-highlighted file previews. Pipe diffs through it during code review from the terminal:

git diff --staged | bat --language=diff

How does tmux help you speed up your terminal workflow on remote servers?

SSH sessions drop. Laptop sleep kills long imports. tmux keeps processes alive and lets you split one connection into multiple panes. I wrote a deeper walkthrough in tmux terminal multiplexing for engineers; here is the practical minimum.

Install and start a named session:

tmux new -As deploy

Essential tmux config (~/.tmux.conf):

set -g mouse on
set -g history-limit 50000
setw -g mode-keys vi
bind | split-window -h
bind - split-window -v
bind r source-file ~/.tmux.conf \; display "Reloaded"

Prefix key is Ctrl+B by default. After prefix: % vertical split, " horizontal split, arrow keys to move, d detach.

On Deployer releases for sites like Notary Kathmandu, I keep one pane on dep deploy, one tailing storage/logs/laravel.log, one watching queue workers. Reconnect with:

ssh production-host -t 'tmux attach -t deploy'

Compare multiplexer options before you standardize a team:

ToolBest forLearning curveServer default
tmuxSSH persistence, pane layouts, team docsMediumInstall on Ubuntu; widely documented
GNU screenLegacy servers, minimal installsLowOften preinstalled on older hosts
zellijModern UI, layout presetsLow–mediumManual install; less common on prod

For production Ubuntu servers I still pick tmux. The tmux wiki and decade of Stack Overflow answers beat novelty when you are fixing a site at midnight.

tmux Deploy Session LayoutSession: deployPane 1: Deployerdep deploy productionPane 2: Logstail -f storage/logsPane 3: Queue workerphp artisan queue:work --verboseDetach: Ctrl+B then d — session keeps running
A tmux layout to speed up your terminal workflow during Laravel production deploys

How do SSH config and Git workflows reduce context switching?

Typing full SSH commands with usernames and ports wastes time. Centralize hosts in ~/.ssh/config:

Host notary-prod
  HostName 203.0.113.10
  User deploy
  IdentityFile ~/.ssh/id_ed25519
  ForwardAgent no
  ServerAliveInterval 60

Host staging-laravel
  HostName staging.example.com
  User ubuntu
  LocalForward 3307 127.0.0.1:3306

Connect with ssh notary-prod. Document each host block in your internal runbook so the next developer is not guessing.

Git workflow shortcuts pair well with feature branch deployment workflow articles. A small function creates dated branches consistently:

newbranch() {
  git checkout main && git pull --ff-only
  git checkout -b "feature/${1}-$(date +%Y%m%d)"
}

For API projects I deliver through API development services, I keep a test-api function that loads base URL and token from .env via grep and fires curl with jq output. Never commit tokens—read them at runtime from local env only.

Parallelize safe read-only tasks with GNU parallel when you audit many sites:

parallel -j4 curl -s -o /dev/null -w "%{http_code} %{url_effective}\n" ::: \
  https://site1.example.com \
  https://site2.example.com

That pattern shows up during support and maintenance rounds across multiple client properties.

CI and local build speed from the terminal

Terminal workflow is not only SSH. Local speed affects how fast you push fixes. Cache Composer and npm artifacts intentionally. See build caching to speed up CI builds for pipeline detail; locally, use:

export COMPOSER_CACHE_DIR="$HOME/.cache/composer"
npm config set cache "$HOME/.cache/npm"

On Laravel apps, run php artisan config:cache and route:cache in staging before you mirror production. Redis 8.10 caching strategies from Redis caching for Laravel apply after deploy—not something you want to discover manually each release.

Git to Deploy Terminal FlowGit pushfeature branchCI passGitLab pipelineSSH hostssh prod aliastmux deploydep productionPost-deploy checkscurl health, tail logs, queue statusRollback readydep rollback if checks failOne terminal session — no tab chaos
Terminal Git and deploy sequence used to speed up your terminal workflow on production releases

What daily habits keep your terminal workflow fast long term?

Dotfiles need version control. Track ~/.bashrc, ~/.tmux.conf, and ~/.ssh/config in a private repo or chezmoi-style manager. When you rebuild a laptop after Dashain travel, you clone configs before you clone client code.

Review aliases quarterly. Delete ones you have not used in ninety days. Bloated rc files slow shell startup and hide the commands you actually need.

Learn the essentials from essential Ubuntu terminal commands first. Advanced tools sit on that foundation. If you cannot navigate permissions and logs comfortably, fzf will not save you.

Security stays non-negotiable. Never paste curl-to-bash snippets you have not read. Use the password generator for service accounts, then store secrets in a proper vault—not in shell history. Set HISTIGNORE for patterns that might capture tokens:

export HISTIGNORE='*TOKEN*:*SECRET*:*PASSWORD*'

When terminal work connects to page performance—running Lighthouse CLI, wrk, or cache flushes—tie it to broader goals in speed optimization and how website speed impacts SEO in Nepal. The terminal is where you verify that the optimisations actually landed.

On booking platforms like Adventure Third Pole Trek, I keep repeatable scripts for clearing config cache, restarting queues, and checking Livewire endpoints. Script names live in a bin/ folder on PATH. That beats remembering five artisan flags during a client call.

Read about my background and customer reviews if you want context on how these workflows show up in delivered projects. For broader reading, browse the blog or return to the homepage.

Key Takeaways

  • Install fzf, ripgrep, fd, bat, jq, and tmux once—then build aliases and functions around your real daily commands.
  • Use tmux named sessions on every production SSH host so deploys and log tails survive disconnects.
  • Keep Git and Deployer shortcuts in version-controlled dotfiles; delete unused aliases every quarter.
  • Centralize SSH in ~/.ssh/config and never store secrets in shell history.
  • Pair terminal speed with CI caching and post-deploy health checks for end-to-end release confidence.
  • Add one workflow improvement per day instead of rewriting your entire shell setup overnight.

People Also Ask

Is zsh better than bash for developer productivity?

zsh offers strong completion and plugin ecosystems like Oh My Zsh. bash is default on most Ubuntu servers and macOS still ships it. For team consistency, learn bash well first, then use zsh locally if you prefer. Production scripts should stay POSIX-friendly bash unless your fleet standardizes zsh.

How do I make Ctrl+R history search faster?

Install fzf and run eval "$(fzf --bash)" in your rc file. fzf replaces default reverse search with a fuzzy menu filtered as you type. Increase HISTSIZE and enable histappend so sessions share history and matches are meaningful.

What is the best tmux prefix for daily use?

Default Ctrl+B works everywhere tutorials expect. Some developers remap prefix to Ctrl+A because it sits closer on the keyboard. Pick one binding, document it in your team notes, and keep it identical on local and remote configs to avoid muscle-memory bugs during incidents.

Can terminal workflow improvements help Laravel deployments?

Yes. Aliases for artisan, tmux layouts for deploy plus logs, and Git shortcuts for release branches cut minutes off every push. Combined with Deployer 7 and GitLab CI, a tuned terminal reduces manual steps and makes rollbacks a single remembered command.

Ship faster from the command line

You do not need a dozen new apps to speed up your terminal workflow. You need a reliable shell config, fuzzy search, persistent tmux sessions, and Git habits that match how you actually deploy. Start with three aliases you type every day, one tmux layout for production, and an SSH config block for your busiest server. The compound effect shows up within a week.

If you want help standardizing deploy scripts, server access, or Laravel release pipelines on Ubuntu, contact us or explore custom software development and portfolio examples of production systems built with these workflows.

Frequently Asked Questions

Combine bash or zsh with tmux, fzf, Git aliases, and project functions in ~/.bashrc or ~/.zshrc to cut repeat typing, context switching, and SSH reconnect pain on daily dev and deploy tasks.

On Ubuntu 22.04 and 24.04 servers I configure for web development, install git, curl, wget, jq, ripgrep, fd-find, fzf, tmux, bat, and htop via apt. These cover fuzzy search, JSON parsing, persistent sessions, and syntax-highlighted previews. Ubuntu installs fd as fdfind, so add alias fd='fdfind' so scripts stay portable. Enable programmable completion and expanded history in bashrc before layering aliases. Pick one improvement per day instead of rewriting dotfiles overnight and breaking muscle memory.

Aliases are the fastest win for commands you type daily—art for php artisan, migrate for forced migrations, ci for composer install --no-dev --optimize-autoloader on Composer 2.10. Functions beat aliases when you need arguments; a depprod helper wrapping Deployer 7 adds a confirmation gate before production deploys. Put Git shortcuts in ~/.gitconfig: st, co, lg, last, unstage. Add project hooks so art only loads inside Laravel roots. Keep hostname and path visible in PS1 so you never run destructive commands on the wrong remote box during late-night incident work.

Learn these bash shortcuts once and they pay back on every long command line during Laravel 12 or 13 work. Ctrl+A jumps to line start and Ctrl+E to end—critical on SSH sessions without a proper Home key. Ctrl+W deletes the word backward. Alt+. inserts the last argument of the previous command, useful right after cd. Ctrl+R triggers reverse history search; pair it with fzf for a searchable menu. On production releases I often chain find log line, rerun artisan, tail again—these keep your hands on the keyboard instead of fighting terminal paste quirks.

Install fzf, run eval with fzf --bash in your rc file, and increase HISTSIZE with histappend enabled so fuzzy history matches stay meaningful across sessions.

zsh offers strong completion and plugin ecosystems like Oh My Zsh. bash remains default on most Ubuntu servers, and that is fine for production. For team consistency, learn bash well first, then use zsh locally if you prefer its ergonomics. Production scripts should stay POSIX-friendly bash unless your entire fleet standardizes zsh. Productivity comes from history search, directory jumping, and repeatable command blocks—not from switching shells on every box you SSH into during a deploy week.

fzf turns tab completion and history into a searchable menu. After install, run eval with fzf --bash and set FZF_DEFAULT_COMMAND to fd scanning files while excluding .git. Ctrl+T picks files, Alt+C jumps directories, Ctrl+R replaces default reverse search. ripgrep respects .gitignore on Laravel and WordPress 7.1 codebases—use rg instead of recursive grep through vendor noise. bat gives syntax-highlighted previews; pipe git diff --staged through bat --language=diff during terminal code review. jq formats JSON from curl instantly instead of squinting at one unreadable line.

SSH sessions drop and laptop sleep kills long imports. tmux keeps processes alive and splits one connection into multiple panes. Start a named session with tmux new -As deploy. Enable mouse support, raise history-limit to 50000, set vi mode-keys, and map pipe characters for horizontal and vertical splits in ~/.tmux.conf. During Deployer releases I keep one pane on dep deploy, one tailing storage/logs/laravel.log, one watching queue workers. Reconnect after disconnect with ssh production-host -t 'tmux attach -t deploy' so midnight incident work survives network blips.

Default Ctrl+B works everywhere tutorials expect. Some developers remap prefix to Ctrl+A for keyboard proximity. Pick one binding, document it in team notes, and keep it identical on local and remote configs.

tmux suits SSH persistence, pane layouts, and team documentation with a medium learning curve; install it on Ubuntu production hosts. GNU screen fits legacy servers with a low learning curve and is often preinstalled on older hosts. zellij offers modern UI presets with a low-to-medium learning curve but needs manual install and is less common on production. For production Ubuntu servers I still pick tmux—the wiki and decade of Stack Overflow answers beat novelty when you are fixing a client site at midnight. Standardize one choice per team and document layouts.

Centralize hosts in ~/.ssh/config so ssh notary-prod replaces typing full usernames, IPs, and ports each time. Include IdentityFile, ServerAliveInterval 60, and LocalForward for staging database tunnels. Document each Host block in your internal runbook so the next developer is not guessing. A newbranch function pulls main and creates dated feature branches consistently. For API work, a test-api function reads base URL and token from local .env via grep—never commit tokens. Parallelize safe read-only audits with GNU parallel -j4 curl across multiple client sites during maintenance rounds.

Yes. Aliases for php artisan on PHP 8.3+ or 8.5, tmux layouts pairing deploy with log tails, and Git shortcuts for release branches cut minutes off every push. Combined with Deployer 7 and GitLab CI on sister sites, a tuned terminal reduces manual steps and makes rollbacks a single remembered command. Keep repeatable scripts in a bin/ folder on PATH for clearing config cache, restarting queues, and checking Livewire endpoints. Pair terminal speed with php artisan config:cache and route:cache in staging before mirroring production behavior.

Nothing here requires exotic hardware—just a shell, free apt packages, and about fifteen minutes of setup. git, fzf, tmux, ripgrep, bat, jq, and htop install via sudo apt on Ubuntu 22.04 and 24.04 at zero software cost. The real investment is time: add one workflow improvement per day instead of a big-bang dotfile rewrite that breaks muscle memory and gets abandoned. Version-control dotfiles in a private repo so rebuilding a laptop after travel takes minutes rather than relearning every alias from scratch.

Track ~/.bashrc, ~/.tmux.conf, and ~/.ssh/config in version-controlled dotfiles—a private repo or chezmoi-style manager works well. When you rebuild a laptop, clone configs before client code. Review aliases quarterly and delete ones unused for ninety days; bloated rc files slow shell startup and hide the commands you actually need. Learn essential Ubuntu terminal commands before advanced tools—if you cannot navigate permissions and logs comfortably, fzf will not save you. Keep repeatable deploy scripts in a bin/ folder on PATH instead of memorizing five artisan flags during a client call.

Security stays non-negotiable even while chasing speed. Never paste curl-to-bash snippets you have not read. Store service-account secrets in a proper vault, not shell history. Set HISTIGNORE for patterns like TOKEN, SECRET, and PASSWORD so sensitive values do not persist in HISTFILE. In ~/.ssh/config set ForwardAgent no unless you have a deliberate reason. Read API tokens from local .env at runtime in helper functions—never commit them. A fast workflow that leaks credentials costs far more than the seconds saved skipping confirmation prompts on production deploys.

Share this article

0 Comments

Leave a comment

Your email is not published. Comments appear once they have been read. Sign in to have your details filled in.

Quick Contact Options
Choose how you want to connect me: