2008-11-05 44 views
18

Đôi khi tôi cần truy cập một số máy chủ chạy Linux (hoặc có thể là SO khác), nhưng tôi không biết cách xác minh distribution nào đang được sử dụng trên máy chủ. là những lần mà ngay cả người "chịu trách nhiệm" đối với máy chủ không biết).Làm thế nào để phát hiện phân phối Linux nào đang được sử dụng

Có cách nào dễ dàng và đáng tin cậy để khám phá điều đó, một cách thống nhất và nhất quán trên tất cả chúng?

+0

@Peter: Có thực sự cần phải thay đổi 'phân phối' thành 'phân phối' không? –

Trả lời

-1

Hãy thử uname -a

0

Bạn có thể sử dụng 'uname':

[[email protected] ~]$ uname -a 
Linux localhost 2.6.26-ARCH #1 SMP PREEMPT Tue Aug 26 21:15:43 UTC 2008 i686 AMD Athlon(tm) 64 Processor 3000+ AuthenticAMD GNU/Linux 
+1

uname hiển thị phiên bản và kiến ​​trúc, nhưng không phân phối (Red Hat, SuSE, Ubuntu, ....) –

+1

bình thường phân bổ thêm vào phiên bản, như trong ví dụ phân phối là Arch Linux. Và đối với Arch, tất cả các ý tưởng được đề cập khác ngoại trừ/etc/issue cũng không hoạt động. Vì vậy, tại sao downvote? – ypnos

0
uname -r 

nên in phiên bản kernel đang chạy (ít nhất, nó làm cho Linux, không biết nếu nó tương tự cho * BSD hoặc những người khác). Điều đó không giống như bản phân phối nhưng phiên bản hạt nhân thường bao gồm tên distro nếu nó được tùy chỉnh, như "2.6.27-gentoo-r1" hoặc một cái gì đó.

Init thường in nội dung nào đó khi khởi động, nhưng điều đó không tốt khi chạy.

Nếu không, như tôi biết không có bất kỳ điều gì phổ quát.

20
cat /etc/*release 

Hầu hết các bản phân phối đặt một tập tin ra mắt vào /etc/ (như /etc/redhat-release, /etc/gentoo-release, vv) mà thường có số phiên bản của bạn phân phối trong đó.

1

Trong .cshrc của tôi, tôi có

setenv DISTRO ` cat /proc/version | sed 's/.*(//' | sed 's/)).*//' ` 

Đối ksh/Bash người dùng, tôi đoán nó dịch để

export DISTRO=` cat /proc/version | sed 's/.*(//' | sed 's/)).*//' ` 

và tất nhiên điều này có thể không hoạt động để phân phối yêu thích của bạn. (Tôi đã có vấn đề với Oracle's Unbreakable Linux cho một cái gì đó tương tự như Redhat, nhưng nó đã đủ tốt cho mục đích của tôi.)

Cập nhật tháng 8 năm 2016 tôi đã không sử dụng Linux theo cách này trong một thời gian (năm 2008 là một thời gian dài trước đây). Dường như điều này không làm việc nữa cho các hệ thống hiện tại của tôi.

+0

Ẩn náu 'cat x | sed y | sed z' là tất nhiên tốt hơn bằng văn bản 'sed-y -e z x'. Xem thêm [sử dụng vô ích 'cat'] (http://www.iki.fi/era/unix/award.html) – tripleee

6

Đây là một vấn đề khó khăn hơn xuất hiện.

Đối với hệ thống Linux, hãy sử dụng lsb_release.

$ lsb_release --all 
No LSB modules are available. 
Distributor ID: Ubuntu 
Description: Ubuntu 8.04.1 
Release:  8.04 
Codename:  hardy 
$ lsb_release -i 
Distributor ID: Ubuntu 

Điều này có giới hạn rằng lsb_release chỉ hoạt động đối với bản phát hành Linux.

Đối với tất cả các hệ thống Unix, bạn cũng có thể phân tích cú pháp không xác định.

$ uname -a 
Linux blue-laptop 2.6.24-21-generiC#1 SMP Tue Oct 21 23:43:45 UTC 2008 i686 GNU/Linux 

Bạn có thể tìm thấy một số thông tin về hệ thống và bản phân phối tại uname Wikipedia page.

+1

Thu hẹp hơn,' lsb_release' chỉ hoạt động trên các hệ thống Linux cố gắng tuân theo [Chuẩn Linux Cơ sở] (https://en.wikipedia.org/wiki/Linux_Standard_Base) thông số kỹ thuật. – tripleee

1

Tôi thấy rằng/etc/issue thường có nội dung về phân phối đang được sử dụng.

Nhưng tôi không biết về tính khả dụng của nó trên tất cả các bản phân phối.

+0

Thật không may, nhiều distro có một/etc/vấn đề rất tối thiểu mà chỉ có một cái gì đó như "Đây là \ n. \ O (\ s \ m \ r) \ t" trong đó, mà không đưa ra thông tin thực sự về distro. –

+0

Đúng, nó hoạt động trên Ubuntu. Tôi đã nhận "Ubuntu 16.04.1 LTS \ n \ l'". Có, \ n và \ l là chữ (không phải ASCII 13 và 10). –

3

Bạn nên tự hỏi mình có thực sự cần biết distro nào đang được sử dụng hay không (có lẽ vì bạn muốn xây dựng một gói cụ thể cho bản phân phối này). Trong nhiều trường hợp khác, nó là một ý tưởng tốt hơn nhiều, để chỉ kiểm tra và xem liệu các tính năng bạn cần có hay không. Điều này có thể trông giống như nhiều công việc hơn bởi vì bạn phải kiểm tra từng tính năng một, nhưng theo cách này, phần mềm của bạn trở nên linh hoạt hơn nhiều.

+0

một cái gì đó giống như những gì 'cấu hình' làm, huh? điểm tốt – Seiti

+0

Yupp, giống như 'configure' hoặc CMake: http://www.cmake.org/ – WMR

1

proc file system: Thư mục trong Linux có tất cả thông tin về cấp phần cứng. Vì vậy, chỉ cần nhập

cd /proc/ 

Ở đó bạn sẽ tìm thấy một mỏ vàng thông tin được lưu trữ trong tệp văn bản cho tất cả thông tin tùy ý về hệ thống.

+2

Vì vậy, 'cat/proc/version' sẽ trả về thông tin về phiên bản. – Henrik

+0

'cd/proc' của chính nó không có gì hữu ích. Bạn không cần phải 'cd' vào một thư mục để đọc các tập tin ở đó, và thông thường không cần (mặc dù trong một trình bao tương tác, nó giúp bạn không gõ đường dẫn dài; nhưng các script thường hiếm khi cần' cd'). – tripleee

+0

Nhiều tệp trong 'proc' sử dụng chuỗi C, vì vậy chúng không phải là văn bản thuần túy về mặt kỹ thuật. Hãy thử 'tr '\ 000' '\ 012' tripleee

0

Có các lệnh khác nhau mà bạn có thể sử dụng để kiểm tra xem phân phối nào đang được sử dụng. Ở đây tôi chỉ đề cập đến 5 trong số họ.

  1. lsb_relase -a

lsb_release cung cấp thông tin phân phối cụ thể. Trong khi đó, -a hiển thị tất cả thông tin về phân phối. Bạn cũng có thể sử dụng -d chỉ hiển thị mô tả.

  1. uname -a

uname cũng cung cấp thông tin hệ thống. Trong khi -a hiển thị tất cả thông tin. Bạn có thể sử dụng man uname để có các tùy chọn khác.

  1. cat/etc/* giải phóng

Bạn cũng có thể sử dụng cat lệnh để in ra tất cả các thông tin phát hành cụ thể từ vv thư mục. Lệnh này thực sự đọc các tệp lsb-releaseos-release từ thư mục /etc.

  1. cat/etc/vấn đề

Lệnh này đọc vấn đề tập tin từ /etc thư mục.

  1. cat/proc/phiên bản

Lệnh này đọc phiên bản tập tin từ /proc thư mục. /proc thư mục chứa thông tin về quy trình hệ thống.

Các vấn đề liên quan