Các phím tắt cho dòng lệnh là gì?


10

Tôi đang nói về các phím tắt mà bạn sử dụng trong dòng lệnh / thiết bị đầu cuối.

Ví dụ: Ctrl+ cgiết chết quá trình, Ctrl+ dđăng xuất đó, Ctrl+ zgửi quy trình đó đến nền ... vv

Tôi đã thử nghiệm một số và thấy rằng họ không phải là thiết bị đầu cuối (ví dụ gnome-terminal, xterm, konsole) cụ thể cũng không vỏ (ví dụ bash, zsh) cụ thể, họ thậm chí còn làm việc tại ttys.

Vì vậy, tôi muốn biết:

  • Ai cung cấp các phím tắt này?
  • Làm thế nào tôi có thể liệt kê và sửa đổi / định nghĩa chúng?

Cố gắng bind -pliệt kê, như help bindđối với người khác
Costas

Câu trả lời:


10

Trình điều khiển đầu cuối ( termios) của kernel giải thích các khóa đặc biệt có thể được gõ để gửi tín hiệu đến một quá trình, gửi cuối tệp, xóa các ký tự, v.v ... Đây là chức năng hạt nhân Unix cơ bản và rất giống với hầu hết các triển khai Unix và Linux.

Các sttymàn hình lệnh hoặc bộ các termioský tự đặc biệt, cũng như các thông số khác cho người lái xe dòng thiết bị đầu cuối.

Gọi stty -ađể xem các giá trị hiện tại của các ký tự đặc biệt và "cài đặt dòng thiết bị đầu cuối" khác. Trong các ví dụ sau, bạn có thể thấy đó intrCtrl+ C, eofCtrl+ D, suspCtrl+ Z. (Tôi đã xóa đầu ra khác để chỉ hiển thị các cài đặt ký tự đặc biệt):

stty -a ký tự đặc biệt trên GNU / Linux:

intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;

stty -a nhân vật đặc biệt trên FreeBSD:

cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
        erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

Ví dụ, để thay đổi giá trị của một ký tự đặc biệt, để thay đổi ký tự ngắt từ Ctrl+ Cthành Ctrl+ Egọi sttynhư thế này ( ^Enghĩa đen là hai ký tự, dấu mũ ( ^) theo sau là chữ cái E):

stty intr '^E'

Để biết thêm thông tin xem các trang người đàn ông cho sttytermios. Trên GNU / Linux, bạn cũng có thể xem tty_ioctltrang man.

Ghi chú:

Các intrchủ chốt ( Ctrl+ Ctheo mặc định), không thực sự giết chết quá trình, nhưng làm cho hạt nhân để gửi một tín hiệu ngắt ( SIGINT) cho tất cả các quá trình trong nhóm quá trình. Các quy trình có thể sắp xếp để bắt hoặc bỏ qua tín hiệu, nhưng hầu hết các quy trình sẽ chấm dứt, đó là hành vi mặc định.

Lý do Ctrl+ dđăng xuất bạn là vì trình điều khiển dòng thiết bị đầu cuối gửi EOF (cuối tệp) trên đầu vào tiêu chuẩn của shell. Shell thoát khi nhận được phần cuối của tệp trên đầu vào tiêu chuẩn của nó.


@Sukminder, trên FreeBSD, -atùy chọn POSIX đã được thêm vào stty.
RobertL

Tôi đã thử stty intr '^E'nó hoạt động (bộ) nhưng tạm thời và chỉ cho thiết bị đầu cuối / tty hiện tại. Làm cách nào để thay đổi toàn cầu & vĩnh viễn?
Pandya

Tôi nghĩ cách tốt nhất sẽ là gọi stty$ HOME / .profile hoặc $ HOME / .bashrc hoặc một số tệp khởi tạo shell khác của bạn.
RobertL

Tôi đã thử: nó hoạt động với thiết bị đầu cuối nhưng không có tác dụng trongtty
Pandya

Bạn đã thử những gì, bạn thấy gì, và bạn có ý nghĩa ttygì? Có lẽ đó có thể là một câu hỏi mới?
RobertL

14

Từ http://www.skork.com/2009/09/bash-shortype-for-maximum-productivity/

Phím tắt chỉnh sửa lệnh

  • Ctrl+ a- đi đến đầu dòng lệnh
  • Ctrl+ e- đi đến cuối dòng lệnh
  • Ctrl+ k- xóa từ con trỏ đến cuối dòng lệnh
  • Ctrl+ u- xóa từ con trỏ đến đầu dòng lệnh
  • Ctrl+ w- xóa từ con trỏ đến đầu từ (nghĩa là xóa ngược một từ)
  • Ctrl+ y- dán từ hoặc văn bản đã bị cắt bằng một trong các phím tắt xóa (chẳng hạn như phím tắt ở trên) sau con trỏ
  • Ctrl+ xx- di chuyển giữa bắt đầu dòng lệnh và vị trí con trỏ hiện tại (và quay lại lần nữa)
  • Alt+ b- di chuyển lùi một từ (hoặc đi đến bắt đầu từ mà con trỏ hiện đang bật)
  • Alt+ f- di chuyển về phía trước một từ (hoặc đi đến cuối từ mà con trỏ hiện đang bật)
  • Alt+ d- xóa đến cuối từ bắt đầu tại con trỏ (toàn bộ từ nếu con trỏ ở đầu từ)
  • Alt+ c- viết hoa đến cuối từ bắt đầu từ con trỏ (toàn bộ từ nếu con trỏ ở đầu từ)
  • Alt+ u- tạo chữ hoa từ con trỏ đến cuối từ
  • Alt+ l- tạo chữ thường từ con trỏ đến cuối từ
  • Alt+ t- hoán đổi từ hiện tại với trước đó
  • Ctrl+ f- di chuyển về phía trước một nhân vật
  • Ctrl+ b- di chuyển lùi một ký tự
  • Ctrl+ d- xóa ký tự dưới con trỏ
  • Ctrl+ h- xóa ký tự trước con trỏ
  • Ctrl+ t- hoán đổi ký tự dưới con trỏ với ký tự trước

Phím tắt thu hồi lệnh

  • Ctrl+ r- tìm kiếm lịch sử ngược
  • Ctrl+ g- thoát khỏi chế độ tìm kiếm lịch sử
  • Ctrl+ p- lệnh trước đó trong lịch sử (nghĩa là quay lại lịch sử lệnh)
  • Ctrl+ n- lệnh tiếp theo trong lịch sử (nghĩa là đi về phía trước trong lịch sử lệnh)
  • Alt+ .- sử dụng từ cuối cùng của lệnh trước

Phím tắt điều khiển lệnh

  • Ctrl+ l- xóa màn hình
  • Ctrl+ s- dừng đầu ra ra màn hình (đối với lệnh chạy dài)
  • Ctrl+ q- cho phép xuất ra màn hình (nếu trước đó đã dừng sử dụng lệnh ở trên)
  • Ctrl+ c- chấm dứt lệnh
  • Ctrl+ z- đình chỉ / dừng lệnh

Lệnh Bash Bang (!)

Bash cũng có một số tính năng tiện dụng sử dụng! (bang) để cho phép bạn thực hiện một số nội dung thú vị với các lệnh bash .

  • !! - chạy lệnh cuối
  • ! blah - chạy lệnh gần đây nhất bắt đầu bằng 'blah' (ví dụ: ls)
  • ! blah: p - in ra lệnh mà ! blah sẽ chạy (cũng thêm nó dưới dạng lệnh mới nhất trong lịch sử lệnh)
  • ! $ - từ cuối cùng của lệnh trước đó (giống như Alt +. )
  • ! $: p - in ra từ đó ! $ sẽ thay thế
  • ! * - lệnh trước ngoại trừ từ cuối cùng (ví dụ: nếu bạn nhập ' find some_file.txt / ', thì ! * Sẽ cung cấp cho bạn ' find some_file.txt ')
  • ! *: p - in ra những gì ! * sẽ thay thế

1
@Sukminder Không, Ctrl + S không dừng đầu ra. Bạn dường như nhầm lẫn nó với Ctrl + Z.
Gilles 'SO- ngừng trở nên xấu xa'

Xem thêm: Emacs.
Erich

Đẹp! Và có cách nào để tiếp cận ^U, điều đó stty -ađược xác định cho SIGKILL trên Linux, từ bash không? Tốt hơn là không xác định các công cụ đọc (có lẽ thông qua khóa mod / meta thứ ba). Tôi giả sử nó chỉ bị che khuất bởi ràng buộc đọc ctrl + u?
nyov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.