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/bash
và /bin/sh
là 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 nologin
hoặ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
, sort
và 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/passwd
tệ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/passwd
chỉ 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 sort
sắ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.nl
cho một vỏ đăng nhập không tương tác ;-)