Điểm:18

Làm cách nào để tìm nguồn gốc của thao tác dòng lệnh?

lá cờ ng

Giả sử tôi có thể gõ abc trong dòng lệnh và nó sẽ chạy (vì vậy trình bao không nói "abc: lệnh không tìm thấy").

Làm thế nào tôi có thể tìm ra những gì abc là hay không? Nó là một kịch bản? Chương trình? Bí danh?

lá cờ cn
Bạn có thể chia sẻ thêm chi tiết? Nếu bạn nhập `abc` và trình bao trả về `không tìm thấy lệnh`, thì không có tập lệnh, chương trình hoặc bí danh nào trên hệ thống của bạn có thể trả lời câu hỏi đã cho
Peter Cordes avatar
lá cờ fr
@NicoHaase: Ban đầu tôi đã đọc nó theo cách đó, nhưng có vẻ như ý nghĩa dự định là "chạy `abc` không tạo ra" lệnh không tìm thấy ". Thay vào đó, nó làm điều gì đó, bất cứ điều gì." Việc có đầu ra được trích dẫn duy nhất trong câu hỏi là "không tìm thấy lệnh" làm cho phần đó thực sự nổi bật và cách diễn đạt được cho là mơ hồ với các nghĩa như "abc được cho là phải làm gì đó, nhưng thay vào đó, không tìm thấy lệnh trả về". Vì vậy, vâng, câu hỏi có thể sử dụng một bản chỉnh sửa để diễn đạt lại. Tôi đã gửi một bản chỉnh sửa để làm rõ, vì đã có 1 nhận xét và 1 câu trả lời dựa trên cách hiểu sai.
Điểm:26
lá cờ hr

Bạn có thể dùng loại lệnh, ví dụ. gõ abc. Ví dụ: trong bash shell:

$ gõ trong khi cd ls gcc apt
while là một từ khóa shell
cd là một shell dựng sẵn
ls được đặt bí danh là `ls --color=auto'
gcc là /usr/bin/gcc
apt được băm (/usr/bin/apt)

đồng bằng loại lệnh chỉ hiển thị kết quả đầu tiên. Nếu có nhiều phiên bản của abc ở các vị trí khác nhau trên của bạn CON ĐƯỜNG, hoặc abc được cung cấp dưới dạng cả từ khóa shell và tệp thực thi bên ngoài hoặc để xem cả phiên bản có bí danh và không có bí danh của lệnh, bạn có thể sử dụng gõ -a để liệt kê tất cả chúng, ví dụ:

$ loại -a thời gian
thời gian là một từ khóa vỏ
thời gian là /usr/bin/time

$ loại -a ls
ls được đặt bí danh là `ls --color=auto'
ls là /bin/ls

$ loại -a datamash
datamash là /usr/local/bin/datamash
datamash là /usr/bin/datamash

trong bash, loại chính nó là một nội dung shell. Các vỏ khác như zshkshdấu gạch ngang (trong đó cung cấp /bin/sh trong Ubuntu) cung cấp chức năng tương tự (mặc dù dấu gạch ngang hiện không cung cấp gõ -a). Trong tcsh, tương đương gần nhất là nội trang cái mà lệnh - không bị nhầm lẫn với bên ngoài cái mà lệnh - xem Tại sao không sử dụng â whichâ? Sau đó sử dụng cái gì?

Đối với các lệnh được xác định là chương trình bên ngoài (nghĩa là có đường dẫn, như /usr/bin/gcc) bạn có thể dùng tập tin lệnh để tìm ra loại chương trình:

$ tập tin /bin/ls /usr/bin/gcc /usr/sbin/adduser
/bin/ls: Đối tượng chia sẻ LSB 64-bit ELF, x86-64, phiên bản 1 (SYSV), được liên kết động, trình thông dịch /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=2f15ad836be3339dec0e2e6a3c637e08e48aacbd, cho GNU/Linux 3.2.0, bị loại bỏ
/usr/bin/gcc: liên kết tượng trưng tới gcc-9
/usr/sbin/adduser: Văn bản tập lệnh Perl có thể thực thi được
ilkkachu avatar
lá cờ co
và đối với các hàm shell, trong Bash, `type func` cũng sẽ in định nghĩa hàm.Trong Zsh thì không, nhưng bạn có thể chạy `typeset -p -f func` để xem
Điểm:6
lá cờ zw

Đối với các lệnh đã được cài đặt, hãy sử dụng câu trả lời của Steeldriver.

Đối với các lệnh chưa được cài đặt, hãy đọc bên dưới.

Có gói đặc biệt có tên lệnh không tìm thấy. Mục đích của nó là

Đề xuất cài đặt các gói trong các phiên bash tương tác

Sau khi cài đặt, gói này sẽ thực hiện công việc của nó và đề nghị bạn cài đặt gói gỡ lỗi với tên thực thi đã biết.


Nếu bạn biết tên thực thi và/hoặc một phần của đường dẫn tệp của nó, thì bạn có thể tìm thấy gói của nó bằng một trong hai tùy chọn:

  • địa phương tập tin apt qua

    Sudo apt-get cài đặt tệp apt
    cập nhật tập tin sudo apt
    thùng tìm kiếm tệp apt/htop
    

    để có được một cái gì đó như

    htop: /usr/bin/htop
    
  • trực tuyến bằng cách sử dụng tìm kiếm nội dung gói trên https://packages.ubuntu.com - xem kết quả tại liên kết này.

Điểm:3
lá cờ cn

Có một vài khả năng khác:

abc nào

sẽ trả về vị trí của chương trình abc trong hệ thống của bạn.

Ví dụ,

con mèo nào
/bin/mèo

Nếu chương trình abc của bạn đi kèm với một số tài liệu, bạn có thể tìm thêm về nó bằng cách chạy

người đàn ông abc

Điều này sẽ hiển thị cho bạn trang thủ công nếu có cho chương trình này. Bạn có thể tìm hiểu thêm về cách sử dụng, tùy chọn dòng lệnh và tham số của nó. Bạn thậm chí có thể tìm thấy các ví dụ về cách sử dụng abc hoặc một trang web nơi những người bảo trì duy trì chương trình.

Một giải pháp thay thế cho các trang thủ công hoặc thủ công là một tiện ích có tên là info. Thay vào đó, một số nhà bảo trì chương trình muốn cung cấp cho bạn nội dung giống hoặc tương tự với trang hướng dẫn sử dụng thông tin.

thông tin abc

chẳng hạn sẽ cho bạn thấy những trợ giúp nào có thể được cung cấp.

Vì bạn đã đề cập đến các bí danh, nên bạn có thể hiển thị các bí danh và định nghĩa của chúng bằng lệnh bí danh

bí danh

Đây là đầu ra mẫu trên máy Ubuntu 20.04 của tôi

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echoterminal || echo error)" "$(history|tail -n1|sed -e '\''s/^ \s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
bí danh egrep='egrep --color=auto'
bí danh fgrep='fgrep --color=auto'
bí danh grep='grep --color=auto'
bí danh l='ls -CF'
bí danh la='ls -A'
bí danh ll='ls -alF'
bí danh ls='ls --color=auto'
dave58 avatar
lá cờ tr
:-) Các phương pháp tôi sử dụng ...
mondotofu avatar
lá cờ cn
Những kỹ thuật này cũng có thể chuyển sang nhiều phiên bản Unix/Linux.
ilkkachu avatar
lá cờ co
Điều này sẽ bỏ lỡ các hàm shell và ví dụ: nội trang Shell thường không có trang man hoặc trang thông tin của riêng chúng.
dave58 avatar
lá cờ tr
@ilkkachu: Trong trường hợp đó (hàm Shell tích hợp sẵn), phương thức được thảo luận trong câu trả lời chính ở trên, 'loại' tích hợp sẵn, cung cấp kết quả phù hợp. Bạn nên lưu ý rằng câu trả lời của mondotofu là sự mở rộng của các câu trả lời trước đó... [ví dụ: "Có một số khả năng khác:" ]
ilkkachu avatar
lá cờ co
@ dave58, trong trường hợp đó, có lẽ nên tham khảo các câu trả lời và giải pháp khác ở đó, đồng thời thảo luận về những hạn chế của các giải pháp được trình bày ở đây. "các khả năng khác" cũng giống như chúng là những lựa chọn thay thế và không chỉ là thông tin bổ sung, nhưng đó có thể chỉ là tôi.
Điểm:-1
lá cờ br

Tôi cho rằng chúng ta đang nói về đánh đập vỏ (hoặc có thể zsh nếu nó đủ tương tự) ở đây ...

Các lệnh như cái màở đâu, mà các câu trả lời khác đã đề cập, hãy tìm các tệp phù hợp trong các thư mục được liệt kê trong CON ĐƯỜNG biến môi trường. Vì vậy, bạn cũng có thể kiểm tra một lệnh gọi là abc trong các thư mục đó theo cách thủ công. Các ở đâu lệnh thực hiện nhiều hơn một chút, kiểm tra các địa điểm được liệt kê trong các biến môi trường khác, tìm kiếm các tệp khớp với tên được cung cấp với một số tiện ích mở rộng tiêu chuẩn, v.v... Ngoài ra, nếu abc được tìm thấy ở nhiều địa điểm, cái mà chỉ hiển thị cái sẽ được chạy trong khi ở đâu cho thấy tất cả chúng.

Vỏ cũng có thể ánh xạ abc thành bí danh shell hoặc hàm shell. Bí danh có thể được liệt kê với bí danh lệnh tích hợp sẵn và chúng khá đơn giản.

Tên chức năng Shell có thể được liệt kê với sắp chữ -F, vì vậy bạn có thể tìm kiếm đầu ra từ lệnh đó để tìm kiếm abc. Nếu bạn muốn đặt mã nào được liên kết với một hàm trình bao nhất định, bạn có thể sử dụng gõ abc.

Điểm:-3
lá cờ st

Giả sử tôi có thể gõ abc trong dòng lệnh và nó làm bất cứ điều gì nhưng trở lại

abc: lệnh không tìm thấy

Làm thế nào tôi có thể tìm ra những gì abc là hay không? Nó là một kịch bản? Chương trình? Bí danh?

Không có cái nào ở trên. Nếu nó không được tìm thấy, thì nó không là gì cả. Bạn có thể tạo hoặc cài đặt (hoặc thêm vào đường dẫn tìm kiếm) một tập lệnh hoặc chương trình hoặc bí danh có tên abc, thì nó sẽ là tập lệnh hoặc chương trình hoặc bí danh. Nhưng hiện tại thì chưa là gì cả.

lá cờ ng
Câu hỏi nói rằng việc gõ `abc` có *không* trả về "không tìm thấy lệnh".
ilkkachu avatar
lá cờ co
nếu một cái gì đó là "bất cứ thứ gì trừ X", điều đó có nghĩa là nó chắc chắn không phải X, có khả năng hoàn toàn ngược lại. Tôi không vui vẻ gì vào buổi sáng trước khi tôi uống cà phê, và rõ ràng ở đây là mục đích là để hỏi về một tình huống mà lệnh làm điều gì đó, bất cứ điều gì, _ ngoại trừ_ tạo ra lỗi đó.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.