Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Bí danh bash mà bạn không thể sống thiếu

Bí danh Bash là một phương pháp bổ sung hoặc ghi đè các lệnh Bash bằng các lệnh mới. Bí danh Bash giúp người dùng dễ dàng tùy chỉnh trải nghiệm của họ trong thiết bị đầu cuối POSIX. Chúng thường được định nghĩa trong $ HOME / .bashrc hoặc $ HOME / bash_aliases (phải được tải bởi $ HOME / .bashrc ).

Hầu hết các bản phân phối đều thêm ít nhất một số bí danh phổ biến trong .bashrc mặc định tệp của bất kỳ tài khoản người dùng mới nào. Đây là những cái đơn giản để chứng minh cú pháp của bí danh Bash:

alias ls='ls -F'
alias ll='ls -lh'

Tuy nhiên, không phải tất cả các bản phân phối đều có bí danh được điền sẵn. Nếu bạn thêm bí danh theo cách thủ công, thì bạn phải tải chúng vào phiên Bash hiện tại của mình:

$ source ~/.bashrc

Nếu không, bạn có thể đóng thiết bị đầu cuối và mở lại thiết bị đầu cuối để tải lại tệp cấu hình.

Với những bí danh đó được xác định trong tập lệnh khởi tạo Bash của bạn, sau đó bạn có thể nhập ll và nhận kết quả của ls -l và khi bạn nhập ls bạn nhận được, thay vì đầu ra của cũ thuần túy ls.

Những bí danh đó thật tuyệt khi có, nhưng chúng chỉ làm xước bề mặt của những gì có thể. Dưới đây là 10 bí danh Bash hàng đầu mà một khi bạn dùng thử, bạn sẽ không thể sống thiếu.

Thiết lập trước

Trước khi bắt đầu, hãy tạo một tệp có tên ~ / .bash_aliases :

$ touch ~/.bash_aliases

Sau đó, hãy đảm bảo rằng mã này xuất hiện trong ~ / .bashrc của bạn tệp:

if [ -e $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

Nếu bạn muốn tự mình thử bất kỳ bí danh nào trong bài viết này, hãy nhập chúng vào .bash_aliases của bạn và sau đó tải chúng vào phiên Bash của bạn bằng nguồn ~ / .bashrc lệnh.

Sắp xếp theo kích thước tệp

Nếu bạn đã bắt đầu cuộc sống máy tính của mình với trình quản lý tệp GUI như Nautilus trong GNOME, Finder trong MacOS hoặc Explorer trong Windows, thì có thể bạn đã quen với việc sắp xếp danh sách các tệp theo kích thước của chúng. Bạn cũng có thể làm điều đó trong một thiết bị đầu cuối, nhưng nó không chính xác ngắn gọn.

Thêm bí danh này vào cấu hình của bạn trên hệ thống GNU:

alias lt='ls --human-readable --size -1 -S --classify'

Bí danh này thay thế cho lt với ls lệnh hiển thị kích thước của từng mục, sau đó sắp xếp nó theo kích thước, trong một cột duy nhất, với ký hiệu để chỉ ra loại tệp. Tải bí danh mới của bạn rồi dùng thử:

$ source ~/.bashrc
$ lt
total 344K
140K configure*
 44K aclocal.m4
 36K LICENSE
 32K config.status*
 24K Makefile
 24K Makefile.in
 12K config.log
8.0K README.md
4.0K info.slackermedia.Git-portal.json
4.0K git-portal.spec
4.0K flatpak.path.patch
4.0K Makefile.am*
4.0K dot-gitlab.ci.yml
4.0K configure.ac*
   0 autom4te.cache/
   0 share/
   0 bin/
   0 install-sh@
   0 compile@
   0 missing@
   0 COPYING@

Trên MacOS hoặc BSD, ls lệnh không có các tùy chọn giống nhau, vì vậy bí danh này hoạt động thay thế:

alias lt='du -sh * | sort -h'

Kết quả của phiên bản này hơi khác một chút:

$ du -sh * | sort -h
0       compile
0       COPYING
0       install-sh
0       missing
4.0K    configure.ac
4.0K    dot-gitlab.ci.yml
4.0K    flatpak.path.patch
4.0K    git-portal.spec
4.0K    info.slackermedia.Git-portal.json
4.0K    Makefile.am
8.0K    README.md
12K     config.log
16K     bin
24K     Makefile
24K     Makefile.in
32K     config.status
36K     LICENSE
44K     aclocal.m4
60K     share
140K    configure
476K    autom4te.cache

Trên thực tế, ngay cả trên Linux, lệnh đó cũng hữu ích, bởi vì sử dụng ls liệt kê các thư mục và liên kết tượng trưng có kích thước bằng 0, đây có thể không phải là thông tin bạn thực sự muốn. Đó là sự lựa chọn của bạn.

Cảm ơn Brad Alexander về ý tưởng bí danh này.

Chỉ xem các ổ đĩa được gắn

Gắn kết lệnh được sử dụng để đơn giản. Chỉ với một lệnh, bạn có thể nhận được danh sách tất cả các hệ thống tệp được gắn trên máy tính của mình và nó thường được sử dụng để xem tổng quan về những ổ đĩa nào được gắn vào một máy trạm. Trước đây, thật ấn tượng khi thấy nhiều hơn ba hoặc bốn mục nhập bởi vì hầu hết các máy tính không có nhiều cổng USB hơn thế, vì vậy kết quả có thể quản lý được.

Máy tính hiện phức tạp hơn một chút và giữa LVM, ổ đĩa vật lý, bộ lưu trữ mạng và hệ thống tệp ảo, kết quả của mount có thể khó phân tích cú pháp:

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=8131024k,nr_inodes=2032756,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
[...]
/dev/nvme0n1p2 on /boot type ext4 (rw,relatime,seclabel)
/dev/nvme0n1p1 on /boot/efi type vfat (rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=ascii,shortname=winnt,errors=remount-ro)
[...]
gvfsd-fuse on /run/user/100977/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,relatime,user_id=100977,group_id=100977)
/dev/sda1 on /run/media/seth/pocket type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
/dev/sdc1 on /run/media/seth/trip type ext4 (rw,nosuid,nodev,relatime,seclabel,uhelper=udisks2)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)

Để giải quyết vấn đề đó, hãy thử một bí danh như sau:

alias mnt="mount | awk -F' ' '{ printf \"%s\t%s\n\",\$1,\$3; }' | column -t | egrep ^/dev/ | sort"

Bí danh này sử dụng awk để phân tích cú pháp đầu ra của mount theo cột, giảm kết quả đầu ra đến những gì bạn có thể đang tìm kiếm (ổ đĩa cứng chứ không phải hệ thống tệp, được gắn kết):

$ mnt
/dev/mapper/fedora-root  /
/dev/nvme0n1p1           /boot/efi
/dev/nvme0n1p2           /boot
/dev/sda1                /run/media/seth/pocket
/dev/sdc1                /run/media/seth/trip

Trên MacOS, mount lệnh không cung cấp đầu ra quá dài dòng, vì vậy một bí danh có thể quá mức cần thiết. Tuy nhiên, nếu bạn thích một báo cáo ngắn gọn, hãy thử cách này:

alias mnt='mount | grep -E ^/dev | column -t'

Kết quả:

$ mnt
/dev/disk1s1  on  /                (apfs,  local,  journaled)
/dev/disk1s4  on  /private/var/vm  (apfs,  local,  noexec,     journaled,  noatime,  nobrowse)

Tìm một lệnh trong lịch sử grep của bạn

Đôi khi bạn tìm ra cách thực hiện điều gì đó trong thiết bị đầu cuối và tự hứa với bản thân rằng bạn sẽ không bao giờ quên những gì mình vừa học được. Sau đó một giờ trôi qua và bạn đã hoàn toàn quên những gì mình đã làm.

Tìm kiếm thông qua lịch sử Bash của bạn là điều mà mọi người phải làm theo thời gian. Nếu bạn biết chính xác những gì bạn đang tìm kiếm, bạn có thể sử dụng Ctrl + R để thực hiện tìm kiếm ngược trong lịch sử của mình, nhưng đôi khi bạn không thể nhớ chính xác lệnh mình muốn tìm.

Đây là một bí danh để làm cho công việc đó dễ dàng hơn một chút:

alias gh='history|grep'

Dưới đây là một ví dụ về cách sử dụng nó:

$ gh bash
482 cat ~/.bashrc | grep _alias
498 emacs ~/.bashrc
530 emacs ~/.bash_aliases
531 source ~/.bashrc

Sắp xếp theo thời gian sửa đổi

Điều đó xảy ra vào thứ Hai hàng tuần:Bạn đi làm, bạn ngồi vào máy tính, bạn mở một thiết bị đầu cuối và bạn thấy mình đã quên mất mình đang làm gì vào thứ Sáu tuần trước. Những gì bạn cần là một bí danh để liệt kê các tệp được sửa đổi gần đây nhất.

Bạn có thể sử dụng ls lệnh tạo bí danh để giúp bạn tìm thấy nơi bạn đã dừng lại:

alias left='ls -t -1'

Đầu ra rất đơn giản, mặc dù bạn có thể mở rộng nó với - long tùy chọn nếu bạn thích. Bí danh, như được liệt kê, hiển thị thế này:

$ left
demo.jpeg
demo.xcf
design-proposal.md
rejects.txt
brainstorm.txt
query-letter.xml

Đếm tệp

Nếu bạn cần biết mình có bao nhiêu tệp trong một thư mục, giải pháp là một trong những ví dụ cổ điển nhất về xây dựng lệnh UNIX:Bạn liệt kê các tệp bằng ls , kiểm soát đầu ra của nó để chỉ là một cột với -1 rồi chuyển đầu ra đó đến wc (đếm từ) để đếm có bao nhiêu dòng của một tệp.

Đó là một minh chứng tuyệt vời về cách triết lý UNIX cho phép người dùng xây dựng các giải pháp của riêng họ bằng cách sử dụng các thành phần hệ thống nhỏ. Tổ hợp lệnh này cũng rất nhiều thứ để nhập nếu bạn tình cờ thực hiện nó nhiều lần trong ngày và nó không hoạt động chính xác cho một thư mục thư mục mà không sử dụng -R tùy chọn giới thiệu các dòng mới cho đầu ra và làm cho bài tập trở nên vô ích.

Thay vào đó, bí danh này giúp quá trình trở nên dễ dàng:

alias count='find . -type f | wc -l'

Cái này đếm các tệp, bỏ qua các thư mục, nhưng không nội dung của các thư mục. Nếu bạn có một thư mục dự án chứa hai thư mục, mỗi thư mục chứa hai tệp, bí danh trả về bốn tệp, vì có bốn tệp trong toàn bộ dự án.

$ ls
foo   bar
$ count
4

Tạo môi trường ảo Python

Bạn có viết mã bằng Python không?

Bạn có viết mã bằng Python nhiều không?

Nếu bạn làm vậy, thì bạn biết rằng việc tạo môi trường ảo Python yêu cầu ít nhất 53 lần nhấn phím.

Con số này là quá nhiều, nhưng điều đó dễ dàng bị phá vỡ với hai bí danh mới có tên là ve va :

alias ve='python3 -m venv ./venv'
alias va='source ./venv/bin/activate'

Đang chạy ve tạo một thư mục mới, được gọi là venv , chứa hệ thống tệp môi trường ảo thông thường cho Python3. va bí danh kích hoạt môi trường trong trình bao hiện tại của bạn:

$ cd my-project
$ ve
$ va
(venv) $

Thêm thanh tiến trình sao chép

Mọi người đều chọc phá các thanh tiến trình bởi vì chúng nổi tiếng là không chính xác. Tuy nhiên, trong sâu thẳm, chúng ta dường như đều muốn chúng. UNIX cp lệnh không có thanh tiến trình, nhưng nó có -v tùy chọn cho độ dài, nghĩa là nó lặp lại tên của mỗi tệp đang được sao chép vào thiết bị đầu cuối của bạn. Đó là một cách hack khá hay, nhưng nó không hoạt động hiệu quả khi bạn đang sao chép một tệp lớn và muốn có một số dấu hiệu về lượng tệp chưa được chuyển.

pv lệnh cung cấp thanh tiến trình trong quá trình sao chép, nhưng nó không phổ biến như một ứng dụng mặc định. Mặt khác, rsync lệnh được bao gồm trong cài đặt mặc định của hầu hết mọi hệ thống POSIX có sẵn và nó được công nhận rộng rãi là một trong những cách thông minh nhất để sao chép tệp cả từ xa và cục bộ.

Tốt hơn, nó có một thanh tiến trình tích hợp.

alias cpv='rsync -ah --info=progress2'

Sử dụng bí danh này giống như sử dụng cp lệnh:

$ cpv bigfile.flac /run/media/seth/audio/
          3.83M 6%  213.15MB/s    0:00:00 (xfr#4, to-chk=0/4)

Một tác dụng phụ thú vị của việc sử dụng lệnh này là rsync sao chép cả tệp và thư mục mà không có -r gắn cờ cp nếu không sẽ yêu cầu.

Bảo vệ bạn khỏi tai nạn xóa tệp

Bạn không nên sử dụng rm yêu cầu. rm sách hướng dẫn thậm chí còn nói như vậy:

Cảnh báo :Nếu bạn sử dụng ‘rm’ để xóa tệp, thông thường có thể khôi phục nội dung của tệp đó. Nếu bạn muốn đảm bảo hơn rằng nội dung thực sự không thể khôi phục được, hãy cân nhắc sử dụng "shred".

Nếu bạn muốn xóa một tệp, bạn nên chuyển tệp đó vào Thùng rác, giống như khi bạn sử dụng máy tính để bàn.

POSIX giúp việc này trở nên dễ dàng vì Thùng rác là một vị trí thực tế, có thể truy cập được trong hệ thống tệp của bạn. Vị trí đó có thể thay đổi, tùy thuộc vào nền tảng của bạn:Trên FreeDesktop, Thùng rác được đặt tại ~ / .local / share / Trash , trong khi trên MacOS thì đó là ~ / .Trash , nhưng theo cách nào đó, nó chỉ là một thư mục mà bạn đặt các tệp mà bạn muốn khuất tầm nhìn cho đến khi bạn sẵn sàng xóa chúng mãi mãi.

Bí danh đơn giản này cung cấp cách chuyển tệp vào Thùng rác từ thiết bị đầu cuối của bạn:

alias tcn='mv --force -t ~/.local/share/Trash '

Bí danh này sử dụng mv ít được biết đến cờ cho phép bạn cung cấp tệp bạn muốn di chuyển làm đối số cuối cùng, bỏ qua yêu cầu thông thường để tệp đó được liệt kê trước. Giờ đây, bạn có thể sử dụng lệnh mới để di chuyển tệp và thư mục vào Thùng rác hệ thống của mình:

$ ls 
foo  bar
$ tcn foo
$ ls
bar

Bây giờ tệp đã "biến mất", nhưng chỉ cho đến khi bạn nhận ra trong mồ hôi lạnh rằng bạn vẫn cần nó. Tại thời điểm đó, bạn có thể cứu tệp khỏi Thùng rác hệ thống của mình; hãy nhớ boa Bash và mv các nhà phát triển đang trên đà phát triển.

Lưu ý: Nếu bạn cần một Thùng rác mạnh mẽ hơn lệnh tuân thủ FreeDesktop tốt hơn, xem Trashy.

Đơn giản hóa quy trình làm việc Git của bạn

Mọi người đều có một quy trình làm việc riêng, nhưng thường có những công việc lặp đi lặp lại cho dù thế nào đi nữa. Nếu bạn làm việc với Git một cách thường xuyên, thì có thể có một số trình tự bạn thấy mình lặp lại khá thường xuyên. Có thể bạn thấy mình quay trở lại nhánh chính và lặp đi lặp lại những thay đổi mới nhất trong ngày hoặc có thể bạn thấy mình đang tạo thẻ và sau đó đẩy chúng ra điều khiển từ xa hoặc có thể hoàn toàn là việc khác.

Bất kể bạn đã chán gõ câu thần chú Git nào, bạn có thể xoa dịu cơn đau bằng bí danh Bash. Phần lớn nhờ vào khả năng truyền các đối số tới hook, Git có một tập hợp phong phú các lệnh nội quan giúp bạn không phải thực hiện những kỳ công kỳ lạ trong Bash.

Ví dụ:trong khi bạn có thể gặp khó khăn trong việc xác định vị trí, trong Bash, thư mục cấp cao nhất của dự án (theo như Bash có liên quan, là một chỉ định hoàn toàn tùy ý, vì cấp cao nhất tuyệt đối của máy tính là thư mục gốc), Git biết cấp cao nhất của nó với một truy vấn đơn giản. Nếu bạn nghiên cứu về Git hook, bạn sẽ thấy mình có thể tìm ra tất cả các loại thông tin mà Bash không biết gì về nó, nhưng bạn có thể tận dụng thông tin đó với bí danh Bash.

Đây là bí danh để tìm cấp cao nhất của một dự án Git, bất kể bạn hiện đang làm việc ở đâu trong dự án đó và sau đó để thay đổi thư mục thành nó, hãy chuyển sang nhánh chính và thực hiện kéo Git:

alias startgit='cd `git rev-parse --show-toplevel` && git checkout master && git pull'

Loại bí danh này hoàn toàn không phải là một bí danh hữu ích phổ biến, nhưng nó chứng tỏ cách một bí danh tương đối đơn giản có thể loại bỏ rất nhiều thao tác điều hướng, lệnh và chờ đợi lời nhắc tốn công sức.

Bí danh đơn giản hơn và có lẽ phổ biến hơn đưa bạn trở lại cấp cao nhất của dự án Git. Bí danh này hữu ích vì khi bạn đang làm việc trên một dự án, dự án đó ít nhiều sẽ trở thành thư mục "trang chủ tạm thời" của bạn. Việc về "nhà" đơn giản như về nhà thực tế của bạn và đây là bí danh để thực hiện điều đó:

alias cg='cd `git rev-parse --show-toplevel`'

Bây giờ là lệnh cg đưa bạn lên đầu dự án Git của mình, bất kể bạn đã đi sâu vào cấu trúc thư mục của nó như thế nào.

Thay đổi thư mục và xem nội dung cùng một lúc

Đã từng (được cho là) ​​được đề xuất bởi một nhà khoa học hàng đầu rằng chúng ta có thể giải quyết nhiều vấn đề năng lượng của hành tinh bằng cách khai thác năng lượng tiêu tốn bằng cách gõ cd tiếp theo là ls .

Đó là một mô hình phổ biến, bởi vì nói chung khi bạn thay đổi các thư mục, bạn có sự thôi thúc hoặc nhu cầu xem những gì xung quanh.

Nhưng "đi bộ" cây thư mục trên máy tính của bạn không nhất thiết phải là một quá trình bắt đầu và dừng lại.

Điều này là gian lận, bởi vì nó hoàn toàn không phải là một bí danh, nhưng đó là một lý do tuyệt vời để khám phá các chức năng của Bash. Mặc dù bí danh rất tốt để thay thế nhanh chóng, Bash cho phép bạn thêm các chức năng cục bộ trong .bashrc của mình tệp (hoặc tệp chức năng riêng biệt mà bạn tải vào .bashrc , giống như bạn làm tệp bí danh của mình).

Để giữ mọi thứ theo mô-đun, hãy tạo một tệp mới có tên ~ / .bash_functions và sau đó có .bashrc của bạn tải nó:

if [ -e $HOME/.bash_functions ]; then
    source $HOME/.bash_functions
fi

Trong tệp chức năng, hãy thêm mã này:

function cl() {
    DIR="$*";
        # if no DIR given, go home
        if [ $# -lt 1 ]; then
                DIR=$HOME;
    fi;
    builtin cd "${DIR}" && \
    # use your preferred ls command
        ls -F --color=auto
}

Tải hàm vào phiên Bash của bạn và sau đó dùng thử:

$ source ~/.bash_functions
$ cl Documents
foo bar baz
$ pwd
/home/seth/Documents
$ cl ..
Desktop  Documents  Downloads
[...]
$ pwd
/home/seth

Các chức năng linh hoạt hơn nhiều so với bí danh, nhưng với sự linh hoạt đó, bạn có trách nhiệm đảm bảo rằng mã của bạn có ý nghĩa và thực hiện những gì bạn mong đợi. Bí danh có nghĩa là đơn giản, vì vậy hãy giữ chúng dễ dàng, nhưng hữu ích. Để có những sửa đổi nghiêm trọng về cách Bash hoạt động, hãy sử dụng các hàm hoặc tập lệnh shell tùy chỉnh được lưu vào một vị trí trong PATH của bạn .

Đối với hồ sơ, có một số thủ thuật thông minh để triển khai cd ls trình tự dưới dạng bí danh, vì vậy nếu bạn đủ kiên nhẫn, thì bầu trời là giới hạn ngay cả khi sử dụng bí danh khiêm tốn.

Bắt đầu phân biệt và hoạt động

Tùy chỉnh môi trường của bạn là điều làm cho Linux thú vị và tăng hiệu quả của bạn là điều làm cho Linux thay đổi cuộc sống. Bắt đầu với các bí danh đơn giản, chuyển sang các chức năng và đăng các bí danh bắt buộc phải có của bạn trong phần nhận xét!