Lệnh thân thiện với người dùng để liệt kê tất cả người dùng trên hệ thống Ubuntu?


22

Có một lệnh thân thiện với người dùng mà tôi có thể sử dụng để liệt kê người dùng trong bảng điều khiển trên hệ thống Ubuntu không?

Khi tôi cat /etc/passwdnhận được một danh sách người dùng khó đọc. Sẽ thật tuyệt khi thấy một danh sách được sắp xếp theo thứ tự chữ cái, với các mục được sắp xếp thành các cột và với tên nhóm trong ngoặc đơn bên cạnh ID nhóm.


2
tốt, / etc / passwd được sắp xếp thành các cột ... nếu bạn muốn chỉ nhìn thấy một vài colums, có thể sử dụng cut. Đối với bảng chữ cái, có sort. Nếu bạn cần tên nhóm, hãy chơi với phép nối (mà thực tế có thể chỉ hiển thị một tập hợp con của các cột, btw).
njsg

Câu trả lời:


27

Cách tốt cho đầu ra tốt đẹp của tập tin / etc / passwd:

$ column -nts: /etc/passwd

Bây giờ bạn có thể sắp xếp nó:

$ column -nts: /etc/passwd | sort

Với tên nhóm trong cột cuối cùng (không có dấu ngoặc đơn):

$ paste -d: /etc/passwd <(groups $(cut -d: -f1 /etc/passwd) | sed 's/.*: //') | column -nts: | sort

Cảm ơn, các lệnh này làm những gì tôi muốn. Đối với một người mới thì điều này rất đáng ngại ... Tôi cho rằng tôi sẽ phải học cách tạo bí danh cho họ.
M. Dudley

Trên cột Centos không thích ntùy chọn này. column -ts: /etc/passwdlàm việc tốt
user1014251

9

Nếu bạn có quyền truy cập root trên máy, bạn có thể làm như sau:

sudo grep -vE '^[^*!]+:[*!]:' /etc/shadow | sort | cut -d: -f1 | while read user; do id $user; done | column -ts' ,' | vi '+set nowrap' -

Làm thế nào nó hoạt động

Trở thành root để đọc tập tin bóng. Bạn chỉ yêu cầu quyền root nếu bạn muốn kiểm tra xem người dùng có đặt mật khẩu không (người dùng), nếu không bạn chỉ có thể cat /etc/passwdthay vì sudo grep ...:

sudo 

Chỉ hiển thị người dùng có mật khẩu được đặt:

grep -vE '^[^*!]+:[*!]:' /etc/shadow

Sắp xếp theo tên người dùng:

sort 

Hủy tất cả thông tin ngoại trừ tên người dùng:

cut -d: -f1

Lặp lại thông qua tên người dùng và làm phong phú nó với thông tin nhóm:

while read user; do id $user; done

Định dạng đầu vào thành các cột:

column -ts' ,'

Sử dụng vi để xem kết quả:

vi '+set nowrap' - 

Nếu bạn không có quyền truy cập root,

thử cái gì đó như thế này:

cut -d: -f1 /etc/passwd | sort | while read user; do id $user; done | sed 's/\(\()\|^\)[^(]*(\|)\)/ /g' | column -t

Đầu ra của nó hơi khác một chút, nhưng tôi để nó như một bài tập cho người đọc để kết hợp hai phần trong câu trả lời này thành một cái gì đó hoàn toàn phù hợp với công việc. (Không phải bạn chỉ yêu sed?)


"Tôi để nó như một bài tập cho độc giả ..." :)
Emanuel Berg

1

Trong Ubuntu, nó có thể như sau:

bảy trường từ / etc / passwd được lưu trữ trong $ f1, f2 ..., $ f7

while IFS=: read -r f1 f2 f3 f4 f5 f6 f7
do
 echo "User $f1 use $f7 shell and stores files in $f6 directory."
done < /etc/passwd

1

Một cái gì đó tôi làm và nó hoạt động cho mục đích của tôi là

ls /home

Cấp, điều đó không thực sự cung cấp cho bạn danh sách người dùng thay vì danh sách thư mục nhà của người dùng và thư mục người dùng trong quá khứ nhưng bất kỳ lệnh nào bạn muốn thực hiện đối với người dùng không tồn tại thiết bị đầu cuối sẽ cho bạn biết và có thể là một gợi ý để xóa các tập tin nhà không có người dùng hoặc di chuyển nó!


Tôi thích điều này. Nó hoàn thành công việc ở mức độ cơ bản.
aalaap

0

Tôi nghĩ rằng điều này sẽ dễ dàng với join, nhưng joinyêu cầu các tệp được sắp xếp trên trường tham gia . Vì vậy, nó đòi hỏi (?) Một cách giải quyết với các tệp tạm thời. Đầu ra được sắp xếp theo người dùng và hiển thị ID người dùng, nhóm và nhóm.

uag () {
  TEMP_GROUPS=/var/tmp/sorted_groups
  TEMP_USERS=/var/tmp/sorted_users
  cat /etc/group  | tr ":" " " | sort -k 3 -o $TEMP_GROUPS
  cat /etc/passwd | tr ":" " " | sort -k 4 -o $TEMP_USERS
  join -1 4 -2 3 -o 1.1,2.1,2.3 $TEMP_USERS $TEMP_GROUPS | sort
  rm $TEMP_GROUPS $TEMP_USERS
}

Dịch một nhân vật sang người khác với tr; sorttheo một trường chính với -k, đầu ra để tập tin với -o; tham gia liên quan đến các trường trong tệp đầu tiên ( -1) và thứ hai ( -2), xuất các trường nhất định trong tệp đầu tiên ( -o 1.1) cũng như thứ hai ( ,2.1,2.3).


lưu ý rằng /tmpsẽ tốt hơn, bởi vì FHS tuyên bố /var/tmpsẽ không bị xóa khi khởi động lại, điều mà chúng tôi không thực sự cần.
strugee
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.