Cài đặt Zsh, hiểu rõ hơn, tối ưu và phím tắt cho Terminal

1.Mở đầu

  • Đã bao giờ bạn:

    👉 Rất ngại phải gõ lệnh trên Terminal.

    👉 Cảm thấy bối rối với các khái niệm Bash, Console, Terminal ... hay thậm chí là sự khác nhau giữa LinuxLinux Mint.

    👉 Nhìn thấy giao diện Terminal ở đâu đó rất đẹp, màu sắc hài hòa trong khi của mình thấy chữ nào cũng giống nhau.

    👉 Đã bao giờ bạn thấy đống nghiệp ấn phím tắt rồi xóa trắng cả màn hình Terminal trong khi bạn phải giữ phím Back Space để xóa từng kí tự một.

  • Vậy thì hôm nay,

    ✌️ Chúng ta sẽ cùng tìm hiểu cách tùy chỉnh, tối ưu cho Terminal

    ✌️ Hi vọng sẽ giúp các bạn tiết kiệm đôi chút thời gian và cảm thấy thoải mái khi áp dụng chúng.

Bạn nào muốn tìm hiểu Zsh luôn thì chuyển qua phần dưới đây !

Còn bây giờ, ta tìm hiểu một chút về họ hàng nhà shell đã nhé ! 💪💪💪

2. Shell

2.1 Shell là gì ?

  • Shell là một trình thông dịch dòng lệnh phát triển dành cho các máy tính chạy hệ điều hành có nhân Unix và Linux.
  • Nó cung cấp giao diện người dùng dưới dạng văn bản nằm giữa bạn và Linux (hay nói chính xác hơn là giữa bạn với nhân hệ điều hành).

-> Chức năng của Shell là gì ?

  • Việc thao tác trực tiếp tới phần nhân Linux là rất phức tạp và đòi hỏi ký thuật cao, để trách sự phức tạp cho người sử dụng và để bảo vệ nhân HĐH từ những sai sót của người sử dụng, shell đã được xây dựng thành lớp bao quanh nhân. Thuật ngữ Shell xuất phát từ nghĩa đen của nó (Shell -> Vỏ).
  • Người sử dụng gửi yêu cầu tới shell, chức năng chính của Shell là thông dịch chúng và sau đó gửi tới nhân HĐH.
  • Các lệnh này người dùng có thể nhập trực tiếp (khi bạn gõ lệnh trên Terminal chẳng hạn) hoặc thông qua dạng script (chạy file .sh)

-> Thông dịch hay biên dịch ?

  • Thông dịch - interpret nhé, chứ không phải biên dịch - compile. Điểm khác biệt giữa cách thức hoạt động của shell và trình biên dịch (compiler) đó là:
    • Các chương trình shell sẽ làm nhiệm vụ thông dịch các lệnh của người dùng sang chương trình có sẵn trên hệ thống từ đó thực thi các chức năng tương ứng. Shell đọc các lệnh trong script tuần tự từ trên xuống, tìm vị trí các lệnh đó trong hệ thống để thực thi.

    • Còn compiler sẽ biên dịch các lệnh trong script sang một dạng mà máy tính có thể hiểu được, ví dụ mã máy và sinh ra một chương trình (program) tương ứng.

      Ví dụ: Trình compiler của C biên dịch từ file .cpp ra file .exe. Sau đó hệ điều hành mới thực thi file .exe đó.

-> Một vài thông tin khác

  • Ngay khi user đăng nhập vào hệ thống, user đã sử dụng 1 shell nào đó. Shell là phương thức cơ bản mà user có thể tương tác với hệ thống, Shell giấu đi các chi tiết phức tạp bên dưới của hệ điều hành mà người dùng không thấy được.

  • Trên Mac OS X hay Ubuntu thì chương trình Shell có tên là Terminal.

  • Hoặc khi bạn tạo kết nối SSH tới máy chủ thì bạn cũng đang sử dụng chương trình Shell trên remote server (thường gọi là Console).

-> Okie, đó là lý do vì sao sinh ra thằng Shell, shell ở đâu thì gọi là Terminal, ở đâu thì gọi là Console, cơ bản là thế 👉👀👌

2.2 Các loại Shell

Trong thế giới Unix/Linux có rất nhiều loại Shell.

  • Shell Bourne (SH)

    Do Steven Bourne viết, đó là Shell nguyên thuỷ có mặt trên hầu hết các hệ thống Unix/Linux…

    Nó rất hữu dụng cho việc lập trình Shell nhưng nó không xử lý tương tác người dùng như các Shell khác.

  • Bourne Again Shell (Bash)

    Thuộc nhóm Bourne Shell được viết bởi Brian Fox trong khuôn khổ một dự án của GNU cho việc thay thế sh, được công bố rộng rãi vào khoảng 1989.

    Đây là phần mở rộng của sh, nó kế thừa những gì sh đã có và phá huy những gì sh chưa có.

    Nó có giao diện lập trình rất mạnh và linh hoạt…Cùng với giao diện lệnh dễ dung…

    Đây là Shell được cài đặt mặc định trên các hệ thống Linux, Mac OS X, Darwin hiện nay.

  • Shell C (CSH)

    Đáp ứng tương thích cho người dùng.

    Nó hỗ trợ rất mạnh cho những Programmer C và với đặc tính tự động hoàn thành dòng lệnh

  • Zsh

    Đây là shell được đánh giá là mạnh nhất trong thời gian gần đây.

    Hỗ trợ rất nhiều những tính năng cực mạnh, nhưng việc cài đặt lại rất đơn giản.

Ngoài ra còn có một số Shell khác như: ssh, nfssh, mcsh

Sau đây chúng ta sẽ tìm hiểu về bashzsh nhé.

3. Tìm hiểu Bash

3.1 Thông tin cơ bản

  • shell được cài đặt mặc định trên các hệ thống Linux !

  • Ctrl + Alt + T: Phím tắt để mở Terminal

  • Giao diện của em nó đây các bác, nhìn quen nhỉ 😂

  • Gõ câu lệnh:

    ls -la ~/ | grep bash
    

    để liệt kê ra một số file cấu hình của bash.

  • Ta có thể dùng nano, vim, gedit hoặc Virual Studio Code để mở các file trên và xem chi tiết, cụ thể như sau:

    • .bash_history

      • Lưu lại lịch sử gõ lệnh
      • Trên màn hình Terminal, ấn phím Mũi tên trỏ lên trên hoặc Mũi tên trỏ xuống dưới để chuyển qua câu lệnh trước đó.
      • Note: Sau khi bạn thoát Terminal thì nội dung file này mới được cập nhật.
    • .bash_logout

      • Những câu lệnh sẽ được thực thi khi shell exits
    • .bashrc

      • Đây là file cấu hình của bash.
      • Mỗi khi bạn mở tab Terminal, cấu hình sẽ được cập nhật từ đây.

3.2 Giao diện

  • Chuột phải vào Terminal, chọn Preferences

  • Text / Colors / Scrolling / Command / Compatibility

  • Cứ lần lượt đi từng tab một, đọc hiểu và tùy biến chúng.

  • Trên đây là custom mà tác giả quen dùng khi sài bash, trông có vẻ dịu mắt hơn.

3.3 Tùy biến

  • Bạn đã bao giờ thắc mắc về dòng chữ [email protected]:~$ chưa ?

    Liệu chúng ta có thể thay đổi nội dung và màu sắc của nó không ?

    Câu trả lời là , chính ở file ~/.bashrc

  • Nếu như bạn sửa cấu hình cho bash ở file này, mà lỗi lầm hết cả, muốn khôi phục về mặc định thì bản gốc có ở đây nhé:

    ls -la /etc/skel
    cp /etc/skel/.bashrc ~/
    

    • Chúng ta cũng có thể tự tạo ra một file back_up riêng cho mình
      cp ~/.bashrc ~/.bashrc_bak
      

4. Tìm hiểu Zsh

4.1 Cài đặt

Zsh là một trình shell rất mạnh mẽ có thể tương tác như là một trình thông dịch và tương thích với Bash.

Oh-my-zsh là một plugin của Zsh dùng để thay đổi giao diện của Terminal và hỗ trợ các plugin khác, hiện đang cung cấp hơn 200 plugins và hơn 140 themes được phát triển từ cộng đồng.

A delightful community-driven (with 1700+ contributors) framework for managing your zsh configuration. Includes nearly 300 optional plugins (rails, git, OSX, hub, capistrano, brew, ant, php, python, etc), over 140 themes to spice up your morning, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.

Cài đặt szh:

sudo apt-get install zsh

Cài đặt Oh-my-zsh:

cd
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

4.2 Cài đặt themes

Mình xin giới thiệu themes Agnoster - khá đẹp và dịu mắt mà mình đang sử dụng.

Hình ảnh demo trên trang chủ của họ, lưu ý là mình có thể custom được tất cả các font và color cho nó nhé !

Cài đặt qua các bước sau:

  1. Install Powerline Font

    cd

    wget https://github.com/powerline/powerline/raw/develop/font/PowerlineSymbols.otf

    wget https://github.com/powerline/powerline/raw/develop/font/10-powerline-symbols.conf

    mkdir ~/.fonts/ #nếu chưa có thư mục

    mv PowerlineSymbols.otf ~/.fonts/

    mkdir -p .config/fontconfig/conf.d #nếu chưa có thư mục

  2. Clear fonts cache

    fc-cache -vf ~/.fonts/

  3. Move config file

    mv 10-powerline-symbols.conf ~/.config/fontconfig/conf.d/

  4. Config ZSH

    gedit ~/.zshrc

    Thay đổi dòng ZSH_THEME="robbyrussell" thành ZSH_THEME="agnoster"

    Restart Terminal

  5. Change terminal color to Solarize

    sudo apt-get install dconf-cli

    git clone git://github.com/sigurdga/gnome-terminal-colors-solarized.git ~/.solarized

    cd ~/.solarized

    ./install.sh

    Mình chọn Option 1 (Dark themes) vì nó khá dịu mắt

    Để active đc Dark themes thì phải chuột ở terminal

    Profiles>Profiles Preferences>Colors

    Text and Background Color >>> Built-in schemes: Solarized dark

    Palette >>> Built-in schemes: Tango

    Còn để thiết lập zsh là terminal mặc định trên Ubuntu:

  6. Change directory color to Solarize

    cd

    wget https://raw.githubusercontent.com/seebi/dircolors-solarized/master/dircolors.ansi-dark

    mv dircolors.ansi-dark .solarized

    gedit ~/.zshrc

    Thêm vào câu lệnh sau:

    eval `dircolors ~/.solarized/dircolors.ansi-dark`

Khởi động lại Terminal và bạn đã có một Terminal hoàn hảo hơn rất nhiều !

Xem thử thành quả nào:

  • Không bao giờ cần đến câu lệnh git branch nữa nhé !

  • Đối với git, Oh-my-zsh hỗ trợ một phím tắt như sau: gst -> git status gco -> git checkout gp -> git push ...

    Bạn có tham khảo thêm ở đây.

Hoàn hảo hơn chỗ nào nữa ? Hãy nhìn thêm bức ảnh sau.

  • Có sự khác biệt ở màu nền của vùng hiển thị tên branch khi mình thêm file mới.
  • Sau khi gõ git add ., có icon + kìa.
  • Sau khi commit bạn có thấy sự khác biệt gì chưa ?
  • Và còn nhiều điều nữa, bạn tự cảm nhận nhé !

Note:

  1. Nếu như bạn cài zsh sau khi bạn cài ruby thì zsh sẽ không nhận được cấu hình cho ruby:
  • Cấu hình ruby (cài từ rvm) cho zsh, bạn thêm dòng sau vào file ~/.zshrc: [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

  • Nếu bạn cài ruby từ rbenv, chạy các câu lệnh sau:

    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv

    echo 'eval "$(rbenv init -)"' >> ~/.zshenv

    echo 'source $HOME/.zshenv' >> ~/.zshrc

    exec $SHELL

  1. Chuyển đổi giữa zsh và bash:

    Cũng khá đơn giản, các bạn làm như sau:

4.3 Cài đặt plugin

Như đã nói ở trên, zsh hỗ trợ rất nhiều plugin, bạn có thể tham khảo ở đây Chính bạn hãy tự sử dụng và trải nghiệm. Mình xin suggest plugin này:

4.4 Fix một số lỗi

Không mở tab với với current directory

nano ~/.zshrc

Thêm vào cuối file đoạn code sau:

# emulate bash PROMPT_COMMAND (only for zsh)
precmd() { eval "$PROMPT_COMMAND" }
# open new terminal in same dir
PROMPT_COMMAND='pwd > "${HOME}/.cwd"'
[[ -f "${HOME}/.cwd" ]] && cd "$(< ${HOME}/.cwd)"

5. Phím tắt

5.1 Tab

  1. Ctrl + Alt + T: Mở Terminal

  2. Ctrl + Shirt + T: Mở Tab mới

  3. Ctrl + D: Đóng tab hiện tại

  4. Alt + [1-> 9]: Di chuyển đến tab số 1->9

5.2 Văn bản

  1. Ctrl + W: Xóa một từ

  2. Ctrl + U: Xóa trắng 1 dòng

  3. Ctrl + L: Xóa toàn màn hình

  4. Ctrl + R: Hiển thị gợi ý trong khi gõ lệnh

5.3 Toàn chương trình

  1. Ctrl + Super + Mũi tên lên: Max size terminal

  2. Ctrl + Super + Mũi tên xuống: Thu nhỏ kích thước terminal hoặc thu về task bar

  3. Ctrl + Super + Mũi tên trái: Hiện thị terminal với 1 nửa màn hình bên trái

  4. Ctrl + Super + Mũi tên phải: Hiện thị terminal với 1 nửa màn hình bên phải

  • Thời gian đầu mới sử dụng Terminal để lập trình RoR , mình mở rất nhiều của sổ Terminal, mỗi khi cần chuyển Terminal cũ để làm việc lại mất thời gian để mò xem nó ở đâu, Alt + Tab mỏi cả tay.
  • Sau đó mình sử dụng Ctrl + Shirt + T để mở tab mới trên cửa sổ hiện tại luôn.
  • Thường sẽ là 3 tab:
    • Tab thứ nhất chạy rails s
    • Tab thứ hai chạy rails c
    • Tab thứ ba chạy git
    • Cố định vậy, mọi thứ có vẻ đã vào quy cũ, đỡ rối hơn rồi hehe.

Bạn có thể tham khảo thêm ở đây.

5.4 Tạo alias

Ví dụ: Khi bạn muốn ghi nhận tất cả thay đổi vào commit gần nhất mà không cần chỉnh sửa nội dung commit, bạn dùng câu lệnh sau:

git commit --amend --no-edit

Hơi dài phải không, bạn có thể tạo một alias cho nó, chỉ cần gõ gcne chẳng hạn, câu lệnh trên sẽ được thực thi. Cách làm như sau:

gedit ~/.zshrc

alias gcne="git commit --amend --no-edit"

Mỗi lần bạn mở Terminal thì Shell sẽ load cấu hình từ file tương ứng.

Nếu bạn dùng Bash thì Shell sẽ load từ file ~/.bashrc

Nếu bạn dùng Zsh thì Shell sẽ load từ file ~/.zshrc

Do đó sau khi bạn sửa file config thì cần mở new terminal tab nhé !

Bạn có thể thiết kế bộ alias cho riêng mình rồi đấy !

Note: Bạn nên cẩn thận với con dao hai lưỡi này ! Nếu bạn tạo alias là alias git status="sudo rm -rf /" rồi chạy thử thì sẽ được một bài học lớn đó. Đừng thử khi chưa hiểu nhé 😄

6. Phím tắt trong Google Chrome

Như đã nói ở đầu bài viết, mình xin chia sẻ một vài phím tắt mình mong là sẽ hữu dụng và giúp ích các bạn, có một chút tương tự như đối với Terminal:

Bạn có thế tìm kiếm tất tần tật ở đây. Mình liệt kê một số phím tắt hay dùng.

Ctrl + Shirt + N: Mở tab ẩn danh

Ctrl + T: Mở Tab mới

Alt + D sau đó Alt + Enter: Nhân đôi tab hiện tại

Ctrl + W hoặc Ctrl + F4: Đóng tab hiện tại

Ctrl + R / F5: Reload trang

Ctrl + H: Mở trang Lịch sử trong tab mới

Ctrl + J: Mở trang hiển thị list các tài nguyên đã tải xuống trong tab mới

Ctrl + U: Hiển thị mã nguồn HTML không thể chỉnh sửa của trang hiện tại


Ctrl + Super + Mũi tên lên: Max size GC

Ctrl + Super + Mũi tên xuống: Thu nhỏ kích thước GC hoặc thu về taskbar

Ctrl + Super + Mũi tên trái: Hiện thị GC với 1 nửa màn hình bên trái

Ctrl + Super + Mũi tên phải: Hiện thị GC với 1 nửa màn hình bên phải

Ctrl + Shift + B: Hiển thị hoặc ẩn thanh Dấu trang


Ctrl + -: Phóng to trang

Ctrl + -: Thu nhỏ trang

Ctrl + 0: Trả lại mọi nội dung trên trang về kích thước mặc định

Ctrl + 9: Mở tab cuối cùng

Alt/Ctrl + [1-> 9]: Di chuyển đến tab số 1->9


Alt + D hoặc Ctrl + L: Bôi đen đường link trên URL

Ctrl + E: Search với Google

Nhập tên trang web + Ctrl + Enter -> Thêm www. và .com vào tên trang web rồi mở trang web đó trong tab hiện tại

Nhập cụm từ tìm kiếm + Alt + Enter -> Mở tab mới và thực hiện tìm kiếm trên Google.


Alt + Mũi tên trái: Mở trang trước từ lịch sử duyệt web của bạn trong tab hiện tại

Alt + Mũi tên phải: Mở trang tiếp theo từ lịch sử duyệt web của bạn trong tab hiện tại

Ctrl + Shift + Delete: Xóa dữ liệu duyệt web

Shift + F5 hoặc Ctrl + Shift + r: Tải lại trang bỏ qua dữ liệu được lưu trong cache.

F: Full màn hình youtube.

Tham khảo:

  1. https://google.com
  2. https://viblo.asia/p/terminal-bot-te-nhat-va-de-su-dung-voi-terminator-va-zsh-tren-ubuntu-pDOKjkrXzPr

All Rights Reserved