.bashrc ফাইল কাস্টমাইজ করা আপনার ওয়ার্কফ্লো ব্যাপকভাবে উন্নত করতে পারে এবং আপনার প্রোডাক্টিভিটি বাড়াতে পারে।
.bashrc হলো আপনার লিনাক্স হোম ডিরেক্টরিতে অবস্থিত একটি স্ট্যান্ডার্ড ফাইল। এই আর্টিকেলে আমি আপনাকে উপযোগী .bashrc অপশন, এলিয়াস, ফাংশন, এবং আরও অনেক কিছু দেখাব।
.bashrc ফাইল কনফিগার করার প্রধান সুবিধাগুলো হলো:
- এলিয়াস যোগ করলে আপনি দ্রুত কমান্ড টাইপ করতে পারেন, যা সময় বাঁচায়।
- ফাংশন যোগ করলে আপনি জটিল কোড সংরক্ষণ ও পুনরায় চালাতে পারেন।
- এটি উপযোগী সিস্টেম ইনফরমেশন প্রদর্শন করে।
- এটি বাশ প্রম্পট কাস্টমাইজ করে।
.bashrc এডিট করার সাথে শুরু করার পদ্ধতি
এখানে কীভাবে আপনি একটি টেক্সট এডিটর দিয়ে .bashrc ফাইল এডিট করতে পারেন:
$ vim ~/.bashrc
আপনি বাশ হিস্টরিতে ডেট ও টাইম ফরম্যাটিং যোগ করতে পারেন।
HISTTIMEFORMAT="%F %T "
# Output $ history 1017 20210228 10:51:28 uptime 1019 20210228 10:52:42 free -m 1020 20210228 10:52:49 tree --dirsfirst -F 1018 20210228 10:51:38 xrandr | awk '/\*/{print $1}'
হিস্টরিতে ডুপ্লিকেট কমান্ড ইগনোর করার জন্য এই লাইনটি যোগ করুন।
HISTCONTROL=ignoredups
এ্যাকটিভ হিস্টরিতে লাইনের সংখ্যা এবং বাশ হিস্টরিতে সংরক্ষিত লাইনের সংখ্যা সেট করতে এই দুটি লাইন যোগ করুন।
HISTSIZE=2000 HISTFILESIZE=2000
আপনি আপনার হিস্টরিকে ওভাররাইট করার বদলে অ্যাপেন্ড (append) করতে সেট করতে পারেন। shopt মানে "shell options"।
shopt -s histappend
সকল ডিফল্ট শেল অপশন দেখতে shopt -p চালান।
# Output $ shopt -p shopt -u autocd shopt -u assoc_expand_once shopt -u cdable_vars shopt -u cdspell shopt -u checkhash shopt -u checkjobs shopt -s checkwinsize [...]
বাশ প্রম্পটে রঙ যোগ করার জন্য কিছু ভেরিয়েবল তৈরি করুন:
blk='\[\033[01;30m\]' # Black red='\[\033[01;31m\]' # Red grn='\[\033[01;32m\]' # Green ylw='\[\033[01;33m\]' # Yellow blu='\[\033[01;34m\]' # Blue pur='\[\033[01;35m\]' # Purple cyn='\[\033[01;36m\]' # Cyan wht='\[\033[01;37m\]' # White clr='\[\033[00m\]' # Reset
এটি ভিম (Vim) প্রেমীদের জন্য। এটি আপনাকে কমান্ড লাইনে ভিম কমান্ড ব্যবহার করতে দেবে। এটি সবসময় আমার .bashrc-এ যোগ করা প্রথম লাইন।
set -o vi
.bashrc-এ এলিয়াস তৈরি করার পদ্ধতি
আপনি যেসব কমান্ড ঘন ঘন চালান সেগুলোর জন্য এলিয়াস ব্যবহার করতে পারেন। এলিয়াস তৈরি করলে আপনি দ্রুত টাইপ করতে পারবেন, যা সময় বাঁচাবে এবং প্রোডাক্টিভিটি বাড়াবে।
এলিয়াস তৈরির সিনট্যাক্স হলো alias <my_alias>='longer command'। আপনি সবচেয়ে বেশি কোন কমান্ড চালান তা জানতে এই কমান্ডটি চালান যাতে টপ ১০ কমান্ডের লিস্ট পাওয়া যায়।
$ history | awk '{cmd[$2]++} END {for(elem in cmd) {print cmd[elem] " " elem}}' | sort -n -r | head -10
# Output 171 git 108 cd 62 vim 51 python3 38 history 32 exit 30 clear 28 tmux 28 tree 27 ls
যেহেতু আমি গিট খুব বেশি ব্যবহার করি, তাই সেটার জন্য এলিয়াস তৈরি করা চমৎকার ধারণা।
# View Git status. alias gs='git status' # Add a file to Git. alias ga='git add' # Add all files to Git. alias gaa='git add --all' # Commit changes to the code. alias gc='git commit' # View the Git log. alias gl='git log --oneline' # Create a new Git branch and move to the new branch at the same time. alias gb='git checkout -b' # View the difference. alias gd='git diff'
এখানে কিছু অন্যান্য উপযোগী এলিয়াস:
# Move to the parent folder. alias ..='cd ..;pwd' # Move up two parent folders. alias ...='cd ../..;pwd' # Move up three parent folders. alias ....='cd ../../..;pwd'
# Press c to clear the terminal screen. alias c='clear' # Press h to view the bash history. alias h='history' # Display the directory structure better. alias tree='tree --dirsfirst -F' # Make a directory and all parent directories with verbosity. alias mkdir='mkdir -p -v'
# View the calender by typing the first three letters of the month. alias jan='cal -m 01' alias feb='cal -m 02' alias mar='cal -m 03' alias apr='cal -m 04' alias may='cal -m 05' alias jun='cal -m 06' alias jul='cal -m 07' alias aug='cal -m 08' alias sep='cal -m 09' alias oct='cal -m 10' alias nov='cal -m 11' alias dec='cal -m 12'
# Output $ mar March 2021 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
.bashrc-এ ফাংশন ব্যবহার করার পদ্ধতি
এলিয়াস কাজ না করলে আরও জটিল কোডের জন্য ফাংশন চমৎকার।
ফাংশনের বেসিক সিনট্যাক্স:
function funct_name() { # code; }
এখানে কীভাবে একটি ডিরেক্টরির সবচেয়ে বড় ফাইলগুলো খুঁজে বের করতে হয়:
function find_largest_files() { du -h -x -s -- * | sort -r -h | head -20; }
# Output Downloads $ find_largest_files 709M systemrescue-8.00-amd64.iso 337M debian-10.8.0-amd64-netinst.iso 9.1M weather-icons-master.zip 6.3M Hack-font.zip 3.9M city.list.json.gz 2.8M dvdrental.tar 708K IMG_2600.JPG 100K sql_cheat_sheet_pgsql.pdf 4.0K repeating-a-string.txt 4.0K heart.svg 4.0K Fedora-Workstation-33-1.2-x86_64-CHECKSUM [...]
আপনি বাশ প্রম্পটে রঙ যোগ করতে এবং বর্তমান গিট ব্রাঞ্চ প্রদর্শন করতে পারেন এইভাবে:
# Display the current Git branch in the Bash prompt. function git_branch() { if [ -d .git ] ; then printf "%s" "($(git branch 2> /dev/null | awk '/\*/{print $2}'))"; fi } # Set the prompt. function bash_prompt(){ PS1='${debian_chroot:+($debian_chroot)}'${blu}'$(git_branch)'${pur}' \W'${grn}' \$ '${clr} } bash_prompt
হিস্টরি গ্রেপ (grep) করে পূর্বে চালানো কমান্ড সার্চ করুন:
function hg() { history | grep "$1"; }
# Output $ hg vim 305 2021-03-02 16:47:33 vim .bashrc 307 2021-03-02 17:17:09 vim .tmux.conf
গিট দিয়ে একটি নতুন প্রজেক্ট শুরু করার পদ্ধতি:
function git_init() { if [ -z "$1" ]; then printf "%s\n" "Please provide a directory name."; else mkdir "$1"; builtin cd "$1"; pwd; git init; touch readme.md .gitignore LICENSE; echo "# $(basename $PWD)" >> readme.md fi }
# Output $ git_init my_project /home/brandon/my_project Initialized empty Git repository in /home/brandon/my_project/.git/
আপনি কমান্ড লাইনে আবহাওয়ার রিপোর্টও পেতে পারেন। এতে curl, jq, এবং Openweathermap থেকে একটি API key লাগবে। আপনার লোকেশনের আবহাওয়া পেতে URL সঠিক কনফিগার করতে Openweathermap API ডকুমেন্টেশন পড়ুন।
curl এবং jq ইনস্টল করতে এই কমান্ডগুলো ব্যবহার করুন:
$ sudo apt install curl jq # OR $ sudo dnf install curl jq
function weather_report() { local response=$(curl --silent 'https://api.openweathermap.org/data/2.5/weather?id=5128581&units=imperial&appid=') local status=$(echo $response | jq -r '.cod') # Check for the 200 response indicating a successful API query. case $status in 200) printf "Location: %s %s\n" "$(echo $response | jq '.name') $(echo $response | jq '.sys.country')" printf "Forecast: %s\n" "$(echo $response | jq '.weather[].description')" printf "Temperature: %.1f°F\n" "$(echo $response | jq '.main.temp')" printf "Temp Min: %.1f°F\n" "$(echo $response | jq '.main.temp_min')" printf "Temp Max: %.1f°F\n" "$(echo $response | jq '.main.temp_max')" ;; 401) echo "401 error" ;; *) echo "error" ;; esac }
# Output $ weather_report Location: "New York" "US" Forecast: "clear sky" Temperature: 58.0°F Temp Min: 56.0°F Temp Max: 60.8°F
.bashrc-এ সিস্টেম ইনফরমেশন প্রিন্ট করার পদ্ধতি
টার্মিনাল খোলার সাথে সাথে উপযোগী সিস্টেম ইনফরমেশন প্রদর্শন করতে পারেন এইভাবে:
clear printf "\n" printf " %s\n" "IP ADDR: $(curl ifconfig.me)" printf " %s\n" "USER: $(echo $USER)" printf " %s\n" "DATE: $(date)" printf " %s\n" "UPTIME: $(uptime -p)" printf " %s\n" "HOSTNAME: $(hostname -f)" printf " %s\n" "CPU: $(awk -F: '/model name/{print $2}' | head -1)" printf " %s\n" "KERNEL: $(uname -rms)" printf " %s\n" "PACKAGES: $(dpkg --get-selections | wc -l)" printf " %s\n" "RESOLUTION: $(xrandr | awk '/\*/{printf $1" "}')" printf " %s\n" "MEMORY: $(free -m -h | awk '/Mem/{print $3"/"$2}')" printf "\n"
আউটপুট:
.bashrc ফাইল সোর্স করুন যাতে পরিবর্তনগুলো ইফেক্ট নেয়:
$ source ~/.bashrc
এখানে সব কাস্টম .bashrc সেটিংস একসাথে। একটি নতুন সিস্টেমে আমি .bashrc ফাইলের ডিফল্ট কোডের নিচে যেকোনো কাস্টমাইজেশন পেস্ট করি।
###################################################################### # # # ██████╗ █████╗ ███████╗██╗ ██╗██████╗ ██████╗ # ██╔══██╗██╔══██╗██╔════╝██║ ██║██╔══██╗██╔════╝ # ██████╔╝███████║███████╗███████║██████╔╝██║ # ██╔══██╗██╔══██║╚════██║██╔══██║██╔══██╗██║ # ██████╔╝██║ ██║███████║██║ ██║██║ ██║╚██████╗ # ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚═════╝ # # ###################################################################### set -o vi HISTTIMEFORMAT="%F %T " HISTCONTROL=ignoredups HISTSIZE=2000 HISTFILESIZE=2000 shopt -s histappend blk='\[\033[01;30m\]' # Black red='\[\033[01;31m\]' # Red grn='\[\033[01;32m\]' # Green ylw='\[\033[01;33m\]' # Yellow blu='\[\033[01;34m\]' # Blue pur='\[\033[01;35m\]' # Purple cyn='\[\033[01;36m\]' # Cyan wht='\[\033[01;37m\]' # White clr='\[\033[00m\]' # Reset alias gs='git status' alias ga='git add' alias gaa='git add --all' alias gc='git commit' alias gl='git log --oneline' alias gb='git checkout -b' alias gd='git diff' alias ..='cd ..;pwd' alias ...='cd ../..;pwd' alias ....='cd ../../..;pwd' alias c='clear' alias h='history' alias tree='tree --dirsfirst -F' alias mkdir='mkdir -p -v' alias jan='cal -m 01' alias feb='cal -m 02' alias mar='cal -m 03' alias apr='cal -m 04' alias may='cal -m 05' alias jun='cal -m 06' alias jul='cal -m 07' alias aug='cal -m 08' alias sep='cal -m 09' alias oct='cal -m 10' alias nov='cal -m 11' alias dec='cal -m 12' function hg() { history | grep "$1"; } function find_largest_files() { du -h -x -s -- * | sort -r -h | head -20; } function git_branch() { if [ -d .git ] ; then printf "%s" "($(git branch 2> /dev/null | awk '/\*/{print $2}'))"; fi } # Set the prompt. function bash_prompt(){ PS1='${debian_chroot:+($debian_chroot)}'${blu}'$(git_branch)'${pur}' \W'${grn}' \$ '${clr} } bash_prompt function git_init() { if [ -z "$1" ]; then printf "%s\n" "Please provide a directory name."; else mkdir "$1"; builtin cd "$1"; pwd; git init; touch readme.md .gitignore LICENSE; echo "# $(basename $PWD)" >> readme.md fi } function weather_report() { local response=$(curl --silent 'https://api.openweathermap.org/data/2.5/weather?id=5128581&units=imperial&appid=') local status=$(echo $response | jq -r '.cod') case $status in 200) printf "Location: %s %s\n" "$(echo $response | jq '.name') $(echo $response | jq '.sys.country')" printf "Forecast: %s\n" "$(echo $response | jq '.weather[].description')" printf "Temperature: %.1f°F\n" "$(echo $response | jq '.main.temp')" printf "Temp Min: %.1f°F\n" "$(echo $response | jq '.main.temp_min')" printf "Temp Max: %.1f°F\n" "$(echo $response | jq '.main.temp_max')" ;; 401) echo "401 error" ;; *) echo "error" ;; esac } clear printf "\n" printf " %s\n" "IP ADDR: $(curl ifconfig.me)" printf " %s\n" "USER: $(echo $USER)" printf " %s\n" "DATE: $(date)" printf " %s\n" "UPTIME: $(uptime -p)" printf " %s\n" "HOSTNAME: $(hostname -f)" printf " %s\n" "CPU: $(awk -F: '/model name/{print $2}' | head -1)" printf " %s\n" "KERNEL: $(uname -rms)" printf " %s\n" "PACKAGES: $(dpkg --get-selections | wc -l)" printf " %s\n" "RESOLUTION: $(xrandr | awk '/\*/{printf $1" "}')" printf " %s\n" "MEMORY: $(free -m -h | awk '/Mem/{print $3"/"$2}')" printf "\n"
উপসংহার
এই আর্টিকেলে আপনি শিখেছেন কীভাবে বিভিন্ন .bashrc অপশন, এলিয়াস, ফাংশন, এবং আরও অনেক কিছু কনফিগার করবেন যাতে আপনার ওয়ার্কফ্লো ব্যাপকভাবে উন্নত হয় এবং প্রোডাক্টিভিটি বাড়ে।
আমাকে গিটহাবে | Dev.to-তে ফলো করুন।