Hầu hết các shell đăng nhập theo số lượng trên một hệ thống mới được cài đặt đều không tương tác:
$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
  5 /bin/bash
 23 /bin/false
  1 /bin/sh
  1 /bin/sync
 17 /usr/sbin/nologin
Rõ ràng /bin/bashvà /bin/shlà vỏ truyền thống và chúng tương tác. Nhưng tất cả các mục khác trong danh sách đó là không tương tác. Nếu bạn đang đọc danh sách và không biết một trong số họ làm gì, bạn chỉ có thể tra cứu trang hướng dẫn của nó (ví dụ man nologinhoặc man sync).
Lệnh thực sự làm gì
Nhìn vào lịch sử đăng bài của Captain Man tôi thấy rằng họ khá thiếu kinh nghiệm với Unix. Vì vậy, có thể câu hỏi trong bình luận về việc không tuân theo liên quan đến dòng lệnh ở đầu câu trả lời, không chỉ đơn giản là đầu ra. Vì vậy, tôi cũng sẽ giải thích dòng lệnh, mặc dù nó thực sự lạc đề cho câu hỏi này.
Lệnh này là một đường ống Unix . Đường ống là một chuỗi các lệnh - bạn đọc nó từ trái sang phải - trong đó đầu ra của lệnh đầu tiên trở thành đầu vào của giây, đầu ra của giây trở thành đầu vào của thứ ba, và cứ thế, cho đến khi cuối đường ống. Đầu ra của quá trình cuối cùng được hiển thị trên thiết bị đầu cuối (trừ khi nó được chuyển hướng). Xem mục Wikipedia trên đường ống vỏ để biết thêm thông tin.
Nếu bạn không hiểu đường ống đang làm gì, bạn chỉ cần chạy nó theo phân đoạn để xem điều gì đang xảy ra. Bạn cũng có thể đọc trang hướng dẫn cho các lệnh đang được sử dụng (ở đây awk, sortvà uniq). Trong thực tế, bạn nên làm điều đó ngay bây giờ. Tôi sẽ đợi.
Hãy chạy các giai đoạn của đường ống tăng dần (bạn có thể thực hiện việc này một cách an toàn trên hệ thống Unix của riêng bạn):
~$ awk -F:  '{print $7}' <  /etc/passwd | sed -e 's/^/    /'
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
/usr/sbin/nologin
[ ... and so on, I've left the rest out ... ]
Đầu ra ở trên chỉ đơn giản là nội dung của trường thứ bảy từ /etc/passwdtệp. Đó là cơ sở dữ liệu (tệp văn bản phẳng) cho hệ thống biết vỏ đăng nhập của mọi người là gì. Nếu bạn muốn tìm hiểu thêm về việc /etc/passwdchỉ cần đọc nó (nó có thể đọc được trên thế giới) và xem trang hướng dẫn sử dụng (man 5 passwd).
Vì vậy, đọc toàn bộ danh sách ở đó bạn có thể biết được các mặt hàng phổ biến là gì, nhưng đó không phải là một định dạng tốt cho câu trả lời cho câu hỏi này, bởi vì câu hỏi thực sự là về các loại vỏ không tương tác phổ biến. Hãy đếm chúng lên. Cách đơn giản nhất để làm điều đó là sắp xếp các mục trước:
~$ awk -F:  '{print $7}' <  /etc/passwd | sort
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/false
[ ... and so on, I've left the rest out ... ]
Chúng tôi có thể sử dụng chương trình uniqđể chỉ cho chúng tôi các mục duy nhất:
~ $ awk -F: '{in $ 7}' </ etc / passwd | sắp xếp | uniq | sed -e 's / ^ / /' / bin / bash / bin / false / bin / sh / bin / sync / usr / sbin / nologin
Nhưng chờ đã, không có ích gì, có bao nhiêu trong số đó? Hãy hỏi uniq(đọc trang người đàn ông!):
~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c
      5 /bin/bash
     23 /bin/false
      1 /bin/sh
      1 /bin/sync
     17 /usr/sbin/nologin
Tất nhiên, đó là đầu ra mà chúng ta đã thấy ở đầu câu trả lời. Hãy sắp xếp lại để xem các mục theo thứ tự:
~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort
     17 /usr/sbin/nologin
      1 /bin/sh
      1 /bin/sync
     23 /bin/false
      5 /bin/bash
Đợi đã, điều đó không thể đúng, 17 đến trước 1 và 5 sau 23. Vấn đề là các mục đang được sắp xếp theo từ vựng . Hãy yêu cầu sortsắp xếp chúng theo số và theo thứ tự ngược lại:
~$ awk -F:  '{print $7}' <  /etc/passwd | sort | uniq -c | sort -n -r
     23 /bin/false
     17 /usr/sbin/nologin
      5 /bin/bash
      1 /bin/sync
      1 /bin/sh
Tôi nghĩ rằng điều đó giải thích mọi thứ trong câu trả lời ban đầu. Nếu bạn vẫn chưa rõ về chi tiết của những lệnh đó, bạn có thể đọc các trang hướng dẫn. Nếu bạn vẫn chưa rõ về các nguyên tắc của những gì đang diễn ra, có lẽ tốt hơn là bắt đầu bằng cách đọc một cuốn sách (trực tuyến hoặc trên giấy) giải thích Unix và Linux.
               
              
telnet towel.blinkenlights.nlcho một vỏ đăng nhập không tương tác ;-)