Cài Oh My Zsh, Powerlevel10k, tối ưu và sử dụng phím tắt cho Terminal
Bài đăng này đã không được cập nhật trong 2 năm
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ệmBash
,Console
,Terminal
... hay thậm chí là sự khác nhau giữaLinux
vàLinux 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 nào đó
xóa trắng cả màn hình Terminal
trong khi bạn phải giữ phímBack 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ấythoải mái
khi áp dụng chúng.
Trước tiên, ta tìm hiểu một chút xem Terminal
từ đâu mà ra đã nhé ! 💪💪💪
Bạn nào muốn tìm hiểu Oh My Zsh
luôn thì chuyển qua Phần 4: Tìm hiểu Zsh !
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ânUnix 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ữngsai sót
của người sử dụng, shell đã được xây dựng thànhlớ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)
-> 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
hayUbuntu
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
-
Đâ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ề bash
và zsh
nhé.
3. Tìm hiểu Bash
3.1 Cơ bản
-
Là
shell
được cài đặt mặc định trên các hệ thốngLinux
! -
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ặcVirual 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ímMũi tên trỏ lên trên
hoặcMũ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
- Những câu lệnh sẽ được thực thi khi
-
.bashrc
- Đây là file cấu hình của
bash
. - Sẽ được đọc lên mỗi khi bạn mở tab
Terminal
mới
- Đây là file cấu hình của
-
3.2 Giao diện
-
Chuột phải vào
Terminal
, chọnPreferences
-
Ta có các tabs sau:
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.
-
Dưới đây là custom mà tác giả quen dùng khi sài
bash
.Trông có vẻ dịu mắt hơn (Mấy cái icon trên góc phải có vẻ khác khác là do mình cài theme Mac OS lên Ubuntu đó nhé ! )
3.3 Tùy biến
-
Bạn đã bao giờ thắc mắc về dòng chữ hiện ở phía trước con trỏ chuột (
trevn@tre-nitro-an515-51:~$
) 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ó chứ, chính ở biến
PS1
trong file~/.bashrc
.PS
là viết tắt củaPrompt Statement
, ngoài ra còn cóPS2
,PS3
,PS4
ở những vị trí khác. -
Có 2 cách để sửa các
PSx
:-
Cách 1: Sửa file
~/.bashrc
, cập nhật giá trị của biếnPS1="Hello World"
Rồi gõ
source ~/.bashrc
hoặc khởi động lạiTerminal
để reloadPS1
-
Cách 2: Export trực tiếp luôn
export PS1="\u@\H >" // trong đó \u: user_name, \H: host_name, @: kí tự đặc biệt.
-
-
Một vài tùy chỉnh phổ biến khác:
-
\d
: Ngày tháng năm -
\j
: Số lượng jobs mà được quản lý bởi shell -
\n
: Dòng mới -
\s
: Loại shell đang sử dụng (bash, zsh, ...) -
\t
: Thời gian (giờ:phút:giây) -
\@
: Giờ với định dạng 12-hour (AM/PM) -
\A
: Giờ với định dạng 24-hour -
\v
: BASH version -
\w
: Đường dẫn tới thư mục làm việc hiện tại. (Nếu là $HOME thì sẽ hiển thị ~) -
\w
: Tên của thư mục làm việc hiện tại. (Nếu là $HOME thì sẽ hiển thị ~) -
\$
: Nếu người dùng là root thì dấu nhắc lệnh sẽ hiển thị là#
, còn không thì$
-
-
Chỉnh màu:
export PS1="\e[0;36m\u@\h \W\$\e[0m"
Trong đó:
-
\e[
: Bắt đầu sử dụng tùy chỉnh màu từ đây -
0;36m
: Mã màu, trong đó:-
Trước dấu phẩy
- 0 – Bình thường
- 1 – In đậm
- 2 – Làm mờ
- 4 – Gạch chân
-
Sau dấu phẩy
- 30 – Black
- 31 – Red
- 32 – Green
- 33 – Brown
- 34 – Blue
- 35 – Purple
- 36 – Cyan
- 37 – Light gray
-
-
\u@\h \W\$
: Đoạn text hiển thị -
\e[0m
: Kết thúc tùy chỉnh màu ở đây
-
-
Note:
-
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ơ bản
-
sudo apt-get install zsh
Nếu muốn dùng
zsh
làm cài đặt mặc định thìchsh -s $(which zsh)
Logout rồi login lại là được
-
Tương tự
bash
, bạn có thể mở lên và xem file~/.zshrc
xem cài đặt củazsh
có gì hay. -
Chuyển đổi giữa
zsh
vàbash
Cũng khá đơn giản, chỉ cần gõ:
-
Nhìn chung thì dùng
Zsh
mượt và sướng hơn.-
Tính năng gợi ý
Ấn
cd
rồi ấntabs
,tabs
,tabs
... để cảm nhận thử sự khác biệt. -
Tính năng tự động sửa lỗi
-
Tối ưu performance, chạy nhanh hơn
-
Rồi còn nhiều nữa, các bạn có thể xem thêm ở đây
-
4.2 Plugin & theme
-
Có tới hàng trăm plugins, themes cho
Zsh
, việc cài đặt và quản lý chúng bằng cơm có vẻ khó khăn. -
Thế là bác Robby Russell mới nghĩ ra code một plugin, dùng nó để quản lý tất cả các plugin và theme khác, đó chính là Oh-my-zsh, được cộng đồng đánh giá khá cao.
-
Danh sách mà
Oh my zsh
hỗ trợ quản lý: -
Cài đặt Oh my zsh
cd sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
-
File cấu hình
Lúc này, kiểm tra lại file
~/.zshrc
sẽ thấy nội dung cũ của file đã được comment hết, thay vào đó.export ZSH="/home/trevn/.oh-my-zsh" ZSH_THEME="robbyrussell" // Dòng này để chỉ ra theme robbyrussell đang được sử dụng plugins=(git) // Dòng này để liệt kê các plugins đang sử dụng, hiện có git. source $ZSH/oh-my-zsh.sh // Câu này dùng để load cấu hình cho oh-my-zsh, bạn có thể mở file này lên xem thử.
4.2.1 Cài đặt plugin
-
Vầy là lúc này,
Terminal
đã được cài plugingit
, để xem có gì xịn xò:-
api-gateway
: Tên thư mục -
dev
: Tên branch -
Alias:
Thay vì gõ
git status
thì chỉ cần gõgst
là đủ. -
Còn nhiều điều lý thú nữa ở đây
-
-
Ngoài ta, còn một plugin nữa khá hay ho nên tham khảo là zsh-autosuggestions.
-
Plugin này gợi ý cho bạn câu lệnh bạn đang gõ, dựa trên lịch sử và số lần hoàn thành.
-
Cập nhật danh sách như sau
plugins=(git zsh-autosuggestions)
-
Và cái kết
-
Nhấn mũi tên
→
để đồng ý gợi ý này.
-
4.2.2 Cài đặt theme
-
Và mặc định đang sử dụng theme
robbyrussell
-
Mình thấy theme này cũng khá ổn rồi, bên cạnh đó giang hồ cũng hay đồn 2 themes xịn xò sau:
-
Sửa ZSH_THEME="robbyrussell" thành ZSH_THEME="agnoster"
Đúng như khuyến nghị, theme này tối ưu cho những người hay dùng
Git
.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 sẽ thấy có sự khác biệt !
-
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k ZSH_THEME="powerlevel10k/powerlevel10k"
-
5. Phím tắt
5.1 Tab
-
Ctrl + Alt + T
: Mở cửa sổ Terminal mới -
Ctrl + Shirt + T
: Mở TabTerminal
mới trên cửa sổTerminal
hiện tại -
Ctrl + D
: Đóng tabTerminal
hiện tại -
Alt + [1-> 9]
: Di chuyển đến tabTerminal
số 1->9
5.2 Văn bản
-
Ctrl + W
: Xóa một từ -
Ctrl + U
: Xóa trắng 1 dòng -
Ctrl + L
: Xóa toàn màn hình -
Ctrl + R
: Hiển thị gợi ý trong khi gõ lệnh
5.3 Toàn chương trình
-
Ctrl + Super + Mũi tên lên
: Max size terminal -
Ctrl + Super + Mũi tên xuống
: Thu nhỏ kích thước terminal hoặc thu về task bar -
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 -
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
5.4 Tạo alias
-
Thay vì cần gõ câu lệnh dài như này
git commit --amend --no-edit
-
Thì mình chỉ cần gán bí danh cho nó.
alias gcn!=git commit --amend --no-edit
Từ đó về sau, chỉ cần gõ
gcn!
là được. -
Vầy là chúng ta có thể tự tạo một bộ
alias
cho mình nhé ! -
Cài đặt theo cách trên chỉ khả dụng trong tabs Terminal hiện tại.
Để lâu dài thì cần sửa file
~/.bashrc
hoặc~/.zshrc
, thêm vào dòng sau:alias gcn!='git commit --amend --no-edit'
6. Fix một số lỗi
-
Không mở tab mới với current directory
# 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)"
-
Không tải được nvm
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
7. 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:
All rights reserved