Fading Coder

One Final Commit for the Last Sprint

Home > Tech > Content

Bash Command-Line Tips and Techniques

Tech Jun 8 1
  • Bash is free software, distributed under the terms of the GNU General Public License version 3
  • Bash serves as the default shell and command interpreter for GNU/Linux operating systems

For those unfamiliar with shell or command language interpreters, it's recommended to explore the concept briefly before proceeding. This article excludes scripting topics. The focus lies on customizing or configuring Bash: - Bash Configuration Tips - Essential Operations - Key bindings in Bash - Frequent used conditional commands - Common permission settings - Critical environment variables - Standard pipe and redirection techniques - Personalization Settings - Font configuration - Text Processing Tools - Basic text manipulation - Utilizing Basic Regular Expressions (BRE) - Using Extended Regular Expressions (ERE) - The Three Core Tools

Essential Operations

Firstly, understanding fundamental aspects including version identification:

Check Bash Version

bash --version

Bash is standard on most GNU/Linux systems, typically versions 4.4 or 5.0.

Bash Key Bindings

Shortcut Description
Ctrl+H Delete the character before the cursor
Ctrl+U Delete from cursor to beginning of line
Ctrl+C Interrupt a running process
Ctrl+D End input; exits shell if in use
Ctrl+Z Suspend program and move it to background; use jobs, fg, bg, kill
Ctrl+S Stop screen output
Ctrl+Q Resume screen output
Ctrl+Alt+Del Reboot or shutdown system
Up Arrow ↑ Browse command history
Ctrl+R Search incremental command history
Tab Auto-complete; press Ctrl+V to insert literal tab

Frequently Used Conditional Commands

  • pwd: Display current working directory
  • whoami: Show the current username
  • id: Display user identity
  • file filename: View file details
  • Locate command paths:
    • type -p command
    • which command

Common Permission Settings

  • chmod 600 foo: Restrict others from reading or writing "foo"; noone can execute it
  • chmod 644 foo: Allow others to read "foo" but not write; no execution allowed
  • chmod 755 foo: Permit others to read and execute "foo" but not modify

Critical Environment Variables

  • $LANG: Default locale setting, format generally xx_YY.ZZZZ
    • xx: ISO 639 language code
    • YY: ISO 3166 country code
    • ZZZZ: Character encoding

Common Locale Settings

Locale Description
zh_CN.UTF-8 Chinese (China)
zh_TW.UTF-8 Chinese (Taiwan)
en_US.UTF-8 English (United States)
en_GB.UTF-8 English (United Kingdom)
fr_FR.UTF-8 French (France)
de_DE.UTF-8 German (Germany)
it_IT.UTF-8 Italian (Italy)
es_ES.UTF-8 Spanish (Spain)
sv_SE.UTF-8 Swedish (Sweden)
pt_BR.UTF-8 Portuguese (Brazil)
ru_RU.UTF-8 Russian (Russia)
ja_JP.UTF-8 Japanese (Japan)
ko_KR.UTF-8 Korean (Korea)
  • $PATH: Directory list where shell searches for commands
  • $HOME: Points to user home directory; tilde (~) represents the home directory

When using sudo, although root privileges are used, $HOME remains the original user's directory. Use sudo -H command to switch $HOME to /root/.

Common Pipe and Redirection Usage

Command Usage Description
command & Run command in background in a subshell
command1 | command2 Pass standard output of command1 to command2 as input (executed concurrently)
command1 2>&1 | command2 Redirect both stdout and stderr of command1 to command2 (executed concurrently)
command1 ; command2 Execute command1 followed by command2 sequentially
command1 && command2 Execute command2 if command1 succeeds (both succeed returns success)
command1 || command2 Execute command2 if command1 fails (either succeeds returns success)
command > foo Redirect stdout to file foo (overwrite)
command 2> foo Redirect stderr to file foo (overwrite)
command >> foo Append stdout to file foo
command 2>> foo Append stderr to file foo
command > foo 2>&1 Redirect both stdout and stderr to file foo
command < foo Redirect stdin from file foo
command << delimiter Redirect stdin from next lines until delimiter (here document)
command <<- delimiter Same as above, but leading tabs ignored in here document

Delimiter is an identifier, often set to EOF:

cat << EOF
Hello, my friend.
Bye.
EOF

Personalization Settings

The configuration file .bashrc holds personalized settings:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
# force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

To enable color rendering, set force_color_prompt=yes.

Two methods to apply changes in .bashrc:

  1. After editing, run source ~/.bashrc
  2. Add explicit sourcing in .bash_profile to load .bashrc upon login

Font Configuration

Modify font settings via the file /etc/default/console-setup using:

sudo dpkg-reconfigure console-setup

To view console fonts, use:

showconsolefont

Text Processing Tools

Standard utilities for text manipulation in Unix-like systems:

Basic Text Manipulation

  • cat: Concatenate and display file contents
  • tac: Reverse concatenate and display
  • cut: Extract parts of lines
  • head: Output first lines of a file
  • tail: Output last lines of a file
  • sort: Sort lines in a file
  • uniq: Remove duplicate lines from sorted files
  • tr: Translate or delete characters
  • diff: Compare lines in files

Basic Regular Expressions (BRE)

  • ed: Line editor
  • sed: Stream editor
  • grep: Pattern matching
  • vim: Screen editor
  • emacs: Screen editor with BRE support

Extended Regular Expressions (ERE)

  • awk: Simple text processing
  • gawk: Enhanced version of awk
  • egrep: Multiple pattern matching
  • tcl: Text processing with GUI integration
  • perl: Powerful text processing
  • pcregrep: PCRE-compatible regex matching

The Three Core Tools

Most frequently used: grep, sed, awk

  • grep: Find text patterns
  • sed: Edit matched text
  • awk: Extract data or format text from structured files

Related Articles

Understanding Strong and Weak References in Java

Strong References Strong reference are the most prevalent type of object referencing in Java. When an object has a strong reference pointing to it, the garbage collector will not reclaim its memory. F...

Comprehensive Guide to SSTI Explained with Payload Bypass Techniques

Introduction Server-Side Template Injection (SSTI) is a vulnerability in web applications where user input is improper handled within the template engine and executed on the server. This exploit can r...

Implement Image Upload Functionality for Django Integrated TinyMCE Editor

Django’s Admin panel is highly user-friendly, and pairing it with TinyMCE, an effective rich text editor, simplifies content management significantly. Combining the two is particular useful for bloggi...

Leave a Comment

Anonymous

◎Feel free to join the discussion and share your thoughts.