Cách cài đặt và sử dụng Fish Shell trên VPS Ubuntu
Các hệ điều hành giống Linux và Unix đủ may mắn để có khá nhiều lựa chọn thay thế cho hầu hết mọi thành phần của môi trường hoạt động của chúng. Một trong những thành phần mà user server tương tác nhiều nhất là shell dòng lệnh. Trong khi hầu hết các hệ thống đi kèm với bash
shell, viết tắt của “Bourne again shell” theo tên người tạo ra vỏ sh
ban đầu là người tiền nhiệm của nó, có những tùy chọn khác mà nhiều user sẽ được hưởng lợi khi kiểm tra. Bạn có thể đã nghe nói về zsh
phổ biến, bạn có thể tìm hiểu về nó tại đây .
Một loại vỏ đầy đủ tính năng khác sẽ là chủ đề của hướng dẫn này là vỏ fish
. Vỏ fish
là một shell lệnh hiện đại, hấp dẫn và mạnh mẽ có thể mở rộng khả năng của shell bash
thông thường. Trong hướng dẫn này, ta sẽ tìm hiểu cách cài đặt, cấu hình và sử dụng thay thế shell này.
Ta sẽ sử dụng chúng trên version VPS Ubuntu 12.04, nhưng bạn nên có thời gian dễ dàng để điều chỉnh nó cho phù hợp với bản phân phối bạn chọn.
Cách cài đặt Vỏ cá
May mắn thay cho ta , repository Ubuntu 12.04 mặc định chứa các gói binary fish
.
Ta có thể cài đặt nó theo cách thông thường bằng cách cập nhật index gói local của ta và kéo gói vào hệ thống của ta :
sudo apt-get update sudo apt-get install fish
Đó là tất cả những gì ta cần làm để đưa shell mới vào hệ thống của bạn .
Để bắt đầu chơi xung quanh, ta sẽ bắt đầu một vỏ fish
mới từ trong phiên hiện tại của ta . Ta sẽ thảo luận sau về cách thay đổi vỏ mặc định của bạn nếu bạn quyết định rằng fish
đó là dành cho bạn:
fish
demouser@host ~>
Bạn có thể thấy rằng dấu nhắc của bạn đã thay đổi. Thay vì "$" như dấu nhắc cho user bình thường, bạn sẽ thấy ký tự ">".
Làm quen với một số tính năng bề ngoài
Ngay lập tức, ta có thể bắt đầu thấy một số ưu điểm của shell này bằng cách thực hiện các thói quen bình thường của ta trong shell. Những điều này hầu hết được thực hiện bởi các chức năng đi kèm mà ta sẽ xem xét ở phần sau.
Ví dụ: nếu bạn liệt kê nội dung của một folder , bạn sẽ nhận thấy rằng chúng tự động được thêm vào bằng một ký tự ở cuối cho biết loại file :
ls
bin/ etc/ lib/ media/ proc/ sbin/ sys/ var/ boot/ home/ lib64/ mnt/ root/ selinux/ tmp/ vmlinuz@ dev/ initrd.img@ lost+found/ opt/ run/ srv/ usr/
Đây là kết quả giống như ls -F
, phân loại nội dung theo loại.
Nếu bạn nhập đường dẫn file , dù là tương đối hay tuyệt đối, bạn sẽ thấy rằng shell fish
gạch dưới các đường dẫn folder để dễ hiểu hơn trong nháy mắt:
<pre>
cd <span style = “text-decoration: underline;”> / home / demo </span>
</pre>
Nếu terminal của bạn có khả năng hiển thị kết quả có màu, bạn sẽ nhận thấy rằng dấu nhắc của bạn cũng tự động được tô màu. Hơn nữa, nó có màu linh động. Nếu bạn nhập một cái gì đó không phải là lệnh hợp lệ, nó sẽ hiển thị màu đỏ.
Cái này sẽ có màu đỏ:
ech
Tuy nhiên, khi bạn thêm chữ “o” cuối cùng, biến nó thành một lệnh, bạn sẽ thấy nó ngay lập tức chuyển sang màu xanh lục. Điều này cung cấp cho bạn phản hồi hữu ích có thể giúp bạn dễ dàng phát hiện sớm lỗi chính tả.
Sử dụng tính năng Hoàn thành TAB để có thời gian dễ dàng hơn
Bạn cũng có thể nhận thấy rằng việc hoàn thành TAB rất tuyệt vời:
cd / ## Hit the TAB key at this point
/bin/ (Directory) /media/ (Directory) /srv/ (Directory) /boot/ (Directory) /mnt/ (Directory) /sys/ (Directory) /dev/ (Directory) /opt/ (Directory) /tmp/ (Directory) /etc/ (Directory) /proc/ (Directory) /usr/ (Directory) /home/ (Directory) /run/ (Directory) /var/ (Directory) /lib/ (Directory) /sbin/ (Directory) /lib64/ (Directory) /selinux/ (Directory)
Như bạn thấy , fish
chỉ liệt kê một cách thông minh các folder cho lệnh cd
, vì đây là những giá trị duy nhất có ý nghĩa.
Nếu ta sử dụng một lệnh chung chung hơn, ta sẽ thấy tất cả các danh sách (và loại của chúng) thay vào đó:
touch / ## Hit the TAB key at this point
/bin/ (Directory) /proc/ (Directory) /boot/ (Directory) /root/ (Directory) /dev/ (Directory) /run/ (Directory) /etc/ (Directory) /sbin/ (Directory) /home/ (Directory) /selinux/ (Directory) /initrd.img (Symbolic link, 15MB) /srv/ (Directory) /lib/ (Directory) /sys/ (Directory) /lib64/ (Directory) /tmp/ (Directory) /lost+found/ (Directory) /usr/ (Directory) /media/ (Directory) /var/ (Directory) /mnt/ (Directory) /vmlinuz (Symbolic link, 5.2MB) /opt/ (Directory)
Một tính năng hữu ích tương tự là định dạng lệnh man
. Nếu ta muốn xem tất cả các trang người fish
, ta có thể sử dụng tính năng hoàn thành tab:
man fish ## Hit the TAB key at this point
fish (1: the friendly interactive shell) fish_indent (1: indenter and prettifier) fish_pager (1: internal command used by fish) fishd (1: universal variable daemon)
Theo cách tương tự, bạn có thể nhận được trợ giúp đầy đủ tính năng bằng bất kỳ trình duyệt web terminal nào bạn có bằng cách sử dụng hệ thống trợ giúp tích hợp sẵn:
help
fish home | Main documentation page | Design document | Commands | FAQ | License Fish user documentation 1 Table of contents • Fish user documentation □ Table of contents □ Introduction □ Syntax overview □ Help □ Tab completion
Trên máy của tôi, thao tác này đã mở hệ thống trợ giúp trong trình duyệt web w3m
terminal. Bạn có thể theo dõi bất kỳ liên kết nào giống như trong trình duyệt thông thường và có thể thoát bằng lệnh “q”. Nếu bạn muốn xem trợ giúp cho một lệnh cụ thể mà cá biết, chỉ cần sử dụng nó làm đối số sau đó:
help cd
cd - change directory Synopsis cd [DIRECTORY] Description Changes the current directory. If DIRECTORY is supplied it will become the new directory. If DIRECTORY is a relative path, the paths found in the CDPATH environment variable array will be tried as prefixes for the specified path. If CDPATH is not set, it is assumed to be '.'. If DIRECTORY is not specified, $HOME will be the new directory. Back to index.
, bạn có thể xem những lệnh trợ giúp nào có sẵn bằng cách sử dụng TAB hoàn thành:
help ## Type a space to let fish know you are finished with the command, and then hit the TAB key at this point
alias (Help for the specified command) and (Help for the specified command) begin (Help for the specified command) bg (Help for the specified command) bind (Help for the specified command) block (Help for the specified command) break (Help for the specified command) breakpoint (Help for the specified command) . . .
Một cách khác để thực hiện một số nhiệm vụ phổ biến
Nhiều người đã sử dụng bash
và thậm chí sh
trong nhiều năm sẽ quen với cách mà những chiếc vỏ này hoạt động. Mặc dù fish
mang theo phần lớn di sản của những lớp vỏ này, nhưng nó sửa đổi hành vi để có thể cải thiện.
Chuyển hướng, Đường ống và Ký tự đại diện
Một ví dụ dễ hiểu về điều này là chuyển hướng. Chuyển hướng bình thường và các đường ống hoạt động giống như với bash
:
- | : Đường ống kết quả của lệnh ở bên trái đến đầu vào của lệnh ở bên phải
- < : Lấy đầu vào chuẩn từ file ở bên phải thay vì bàn phím
- > : Ghi kết quả chuẩn vào file ở bên phải thay vì màn hình
Tuy nhiên, một sự khác biệt là cách bạn chuyển hướng lỗi tiêu chuẩn. Bạn làm điều này với ký tự carat:
- ^ : Chuyển hướng lỗi tiêu chuẩn đến vị trí bên phải.
Điều này cung cấp một cách dễ dàng để chuyển hướng một bộ mô tả file sang một bộ mô tả file khác. Nhớ lại rằng mỗi bộ mô tả file thường được liên kết với một số:
- 0 : Đầu vào chuẩn. Đầu vào lệnh của bạn theo mặc định là bàn phím.
- 1 : Đầu ra tiêu chuẩn. Đầu ra của lệnh của bạn là màn hình theo mặc định.
- 2 : Sai số tiêu chuẩn. Các lỗi lệnh của bạn được in ra màn hình theo mặc định.
Ta có thể chuyển hướng một bộ mô tả file này sang bộ mô tả file khác bằng cách sử dụng ký tự “&” theo sau là số bộ mô tả.
Ví dụ: ta có thể chuyển hướng kết quả tiêu chuẩn của một lệnh thành một file và sau đó trỏ lỗi tiêu chuẩn của nó vào file kết quả tiêu chuẩn của ta bằng lệnh thông tin như sau:
ls /etc >ls_results.txt ^&1
Tất cả kết quả tiêu chuẩn được đưa vào file ls_results.txt
và sau đó lỗi tiêu chuẩn được đặt ở vị trí mà kết quả tiêu chuẩn đang được chuyển hướng (tệp ở trên).
Đối với các ký tự đại diện, fish
lại sử dụng hầu hết các giá trị mặc định từ bash
. Chúng bao gồm:
- * : Khớp bất kỳ chuỗi ký tự nào không bao gồm “/”.
- ? : Điều này trùng với bất kỳ ký tự đơn lẻ nào, không bao gồm “/”.
Một ký tự đại diện bổ sung cực kỳ hữu ích là ký tự đại diện đệ quy:
- ** : Khớp bất kỳ chuỗi nào bao gồm “/”.
Điều này được dùng để dễ dàng thêm chức năng đệ quy vào các lệnh. Mặc dù ls
có tùy chọn đệ quy, ta có thể làm điều này với fish
. Ta có thể tìm thấy tất cả các file kết thúc bằng .conf
trong folder /etc
của ta bằng lệnh :
ls /etc/**.conf
/etc/adduser.conf /etc/apparmor/subdomain.conf . . .
Trên máy của tôi, hai dòng kết quả hiển thị điều này đang hoạt động. Một file nằm trong folder trên cùng mà ta đang tìm kiếm và file tiếp theo nằm trong folder con.
Tạo chức năng và alias
Ta có thể tạo các hàm và alias trong fish
bằng một cú pháp dễ sử dụng.
Định dạng cơ bản là như sau:
<pre>
function <span class = “highlight”> tên hàm </span>
<span class = “highlight”> nội dung hàm </span>
kết thúc
</pre>
Nếu bạn muốn phân tích cú pháp các đối số trong hàm của bạn , bạn có tất cả chúng được group lại với nhau trong biến $argv
. Chúng được lưu trữ dưới dạng một mảng.
Ví dụ: ta có thể tạo một hàm như thế này sẽ in ra tất cả các đối số của ta :
function say_hello echo hello $argv end
Ta có thể gọi điều này bằng một hoặc nhiều đối số và nó sẽ chuyển tất cả chúng vào lệnh echo
:
say_hello John Doe
hello John Doe
Nếu ta muốn truy cập một biến cụ thể, hãy kéo nó ra khỏi mảng đối số bằng số tham chiếu (trong fish
, mảng bắt đầu từ 1, không phải 0). Ta có thể sửa đổi tập lệnh trước đó của bạn để chỉ sử dụng đối số thứ 2:
function hello_sir echo hello Mr. $argv[2] end
Sau đó, ta có thể gọi hàm này và ta sẽ nhận được một kết quả khác:
hello_sir John Doe
hello Mr. Doe
Ta có thể thấy tất cả các hàm đã xác định bằng lệnh :
functions -a
Bạn có thể xóa một trong các chức năng của bạn bằng lệnh :
<pre>
functions -e <span class = “highlight”> function_name </span>
</pre>
Đối với alias , bash
shell có một lệnh cụ thể. Trong fish
, nó sử dụng cùng một cú pháp hàm.
Điều duy nhất cần lưu ý là nếu lệnh thay thế hoặc thay thế lệnh mà nó đang tham chiếu, bạn phải thêm nội trang command
để yêu cầu shell không gọi hàm một cách đệ quy mà sử dụng lệnh bên ngoài.
Ví dụ: nếu ta muốn lệnh cat
bao gồm đánh số theo mặc định, ta có thể cần xác định lại lệnh để bao gồm cờ đó. Hãy nhớ chuyển biến đối số để nó có thể phân tích cú pháp các tên file một cách chính xác:
function cat command cat -n $argv end
Bây giờ, khi ta gọi cat
, kết quả sẽ được đánh số tự động:
cat /etc/hosts
1 127.0.0.1 localhost fish fish 2 3 # The following lines are desirable for IPv6 capable hosts 4 ::1 ip6-localhost ip6-loopback 5 fe00::0 ip6-localnet 6 ff00::0 ip6-mcastprefix 7 ff02::1 ip6-allnodes 8 ff02::2 ip6-allrouters
Nếu bạn đang sử dụng một hàm để overrides mặc định của lệnh, bạn cũng có thể sử dụng nội trang command
để bỏ qua bất kỳ sửa đổi nào bạn đã thực hiện và lấy lệnh ban đầu.
command cat /etc/hosts
127.0.0.1 localhost fish fish # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Lịch sử đơn giản hóa
Mặc dù bash
cung cấp một tập hợp các hàm lịch sử rất phức tạp, nhưng hữu ích, fish
giải quyết những vấn đề này và làm việc trên việc cải thiện những điều cơ bản để giải quyết các vấn đề sử dụng.
Bạn có thể di chuyển lên theo thứ tự thời gian trong lịch sử của bạn bằng cách sử dụng phím UP
. Bạn có thể di chuyển theo hướng ngược lại bằng cách sử dụng phím DOWN
. Điều này là khá tiêu chuẩn.
Nếu ta muốn quay lại dấu nhắc của bạn , ta chỉ cần nhấn phím thoát.
Ta cũng có thể nhập một phần của lệnh trước đó và sau đó nhấn phím UP
để tìm kiếm các version mới nhất của lệnh cụ thể đó.
Hơn nữa, ta có thể sử dụng các lệnh ALT-UP
và ALT-DOWN
để chỉ gọi lại các đối số dòng lệnh.
Ví dụ: giả sử ta đã liệt kê nội dung của một folder :
ls /etc
acpi/ groff/ ltrace.conf rmt* adduser.conf group magic rpc alternatives/ group- magic.mime rsyslog.conf apm/ grub.d/ mailcap rsyslog.d/ apparmor/ gshadow mailcap.order screenrc . . .
Ta nhận ra rằng đây là folder mà ta đang tìm kiếm và ta muốn chuyển sang nó ngay bây giờ. Ta có thể bắt đầu bằng lệnh lệnh mới:
cd # Don't press return yet
Bây giờ, ta có thể chèn các đối số từ lệnh cuối cùng bằng cách nhấn các ALT-UP
:
cd # Hit Alt-UP and get... cd /etc
Đây là một ví dụ rất đơn giản, nhưng bạn có thể thấy điều này có thể cực kỳ hữu ích như thế nào, đặc biệt là vì bạn có thể cuộn qua các đối số lệnh trước đó.
Một loại lịch sử khác mà fish
cung cấp là lịch sử folder . Đây là một tính năng tuyệt vời cho phép bạn quay trở lại cơ bản qua lịch sử cd
của bạn để đến các folder trước đó.
Bạn có thể xem lịch sử folder của bạn bằng lệnh :
dirh
Bạn có thể di chuyển tới lui trong lịch sử folder của bạn bằng cách nhấn ALT-LEFT
và ALT-RIGHT
khi ở dấu nhắc lệnh trống. Điều này sẽ cho phép bạn dễ dàng luân chuyển giữa các folder .
Tạo các file cấu hình của bạn và thay đổi Shell mặc định của bạn
Nếu bạn thấy rằng bạn thích vỏ fish
, có thể bạn cần bao gồm một số tùy chỉnh để định hình môi trường của bạn.
Mặc dù bạn có thể quen với việc đưa các tùy chỉnh vào các file ~/.bashrc
hoặc ~/.bash_profile
, nhưng chúng không được sử dụng cho shell này.
Để cấu hình các tùy chọn của bạn, bạn nên tạo một file tại ~/.config/fish/config.fish
. Tất cả các file cấu hình fish
phải kết thúc bằng .fish
. Thông thường, đường dẫn ~/.config/fish/
sẽ được tạo khi bạn sử dụng shell lần đầu tiên.
Nếu bạn muốn bắt đầu với một file ví dụ, bạn có thể sao chép nó từ folder gói fish
:
cp /usr/share/fish/config.fish ~/.config/fish
Sau đó, bạn có thể chỉnh sửa nó giống như các file nào khác:
nano ~/.config/fish/config.fish
Khi bạn làm quen với file , có lẽ bạn nên xóa bất kỳ thứ gì mà bạn chưa tùy chỉnh cá nhân.
Tốt nhất là không thêm các chức năng trực tiếp vào file cấu hình này. Thay vào đó, bạn nên tạo một folder có tên là các functions
trong folder cấu hình fish
của bạn:
mkdir ~/.config/fish/functions
Bên trong folder này, tạo các file cho từng chức năng bạn muốn thực hiện. Miễn là mỗi file kết thúc bằng .fish
, shell sẽ tìm thấy chúng và kết hợp chúng vào môi trường của nó. Mỗi hàm phải nằm trong file riêng của nó mà không có gì khác.
Ví dụ: ta có thể tạo một file để cung cấp hàm hello_sir
trong mỗi phiên cho user của ta , ta có thể nhập nó (trước khi tiếp tục, hãy nhớ bỏ đặt alias cat
mà ta đã tạo trước đó với set -e cat
nếu bạn chưa làm như vậy đã sẵn sàng):
cat > ~/.config/fish/functions/hello_sir.fish function hello_sir echo hello Mr. $argv[2] end
Sau khi end
nhập, nhấn CTRL-D
để kết thúc quá trình nhập. Điều này bây giờ sẽ có sẵn mỗi khi shell được tải. Nếu ta cũng muốn thêm hàm say_hello
của say_hello
, ta cần một file riêng.
Nếu bạn cần một chút cảm hứng, bạn có thể xem qua các chức năng fish
mặc định:
cd /usr/share/fish/functions ls
Sau khi bạn đã cấu hình shell theo ý muốn của bạn , bạn có thể cần sử dụng fish
làm shell mặc định của bạn . Để làm điều này, bạn có thể sử dụng lệnh chsh
.
Đầu tiên, ta cần biết đường dẫn đến vỏ fish
:
which fish
/usr/bin/fish
Tiếp theo, ta có thể thay đổi shell của bạn bằng lệnh :
chsh -s /usr/bin/fish
Bạn cần nhập password để xác nhận. Sau khi hoàn tất, mỗi khi bạn đăng nhập, bạn sẽ nhận được một dấu nhắc fish
.
Nếu bạn muốn thay đổi trở lại shell khác của bạn , bạn có thể chỉ định nó bằng đường dẫn theo cách tương tự:
chsh -s /bin/bash
Kết luận
Đến đây, bạn đã tương đối quen thuộc với những điều cơ bản về cách sử dụng vỏ fish
. Nó là một nền tảng trung gian tốt cho nhiều người, bởi vì nó tuân theo quy ước ở những nơi có ý nghĩa, nhưng bổ sung thêm chức năng mà các vỏ trước đó còn chỗ để cải thiện.
Chắc chắn là có nhiều điều để học hỏi, nhưng bạn nên có một nền tảng tốt để khám phá thêm. Hãy nhớ sử dụng hệ thống trợ giúp tuyệt vời có sẵn thông qua lệnh help
.
<div class = “author”> Bởi Justin Ellingwood </div>
Các tin liên quan
Cách thiết lập hệ thống tệp phân tán Tahoe-LAFS trên server Ubuntu 14.042014-04-03
Cách cài đặt Hadoop trên Ubuntu 13.10
2014-03-20
Cách cài đặt ProcessWire trên VPS Ubuntu
2014-03-20
Cách cài đặt Hadoop trên Ubuntu 13.10
2014-03-20
Cách cài đặt HHVM (Máy ảo HipHop) trên VPS Ubuntu 13.10
2014-03-18
Cách thiết lập server cloud Ubuntu cho ứng dụng web Python
2014-02-25
Cách cài đặt và bắt đầu với CMS Mezzanine trên Django trên Ubuntu
2014-02-25
Cách cài đặt Django CMS phiên bản 3 Beta 3 với Django 1.6 trên Ubuntu
2014-02-25
Làm thế nào để Dockerise và triển khai nhiều ứng dụng WordPress trên Ubuntu
2014-02-13
Cách cài đặt Ruby 2.1.0 và Sinatra trên Ubuntu 13 với RVM
2014-02-10