Jak uzyskać dostęp do nazwy dystrybucji w wierszu polecenia?

12

Mam wiele dystrybucji, z którymi gram. Etykietuję karty SD, ale:

  1. Są do góry nogami
  2. Zazwyczaj jestem w innym pokoju z RPi

Skonfigurowałem usługę w init.d, która informuje mnie poprzez Pushover, kiedy moje Pi się wyłącza lub uruchamia (używając API przez curl).

Chciałbym, żeby to obejmowało to, z której aktualnie korzystam dystrybucji.

Widzę na moim najnowszym bootie (gra z adafruit Raspbian):

Linux raspberrypi 3.1.9adafruit+ #8 PREEMPT Wed Aug 1 18:02:42 EDT 2012 armv6l

Jak mogę uzyskać te informacje w swoim skrypcie?

Zainstalowałem lsb-release, ale daje mi to tylko:

pi@raspberrypi / $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux testing/unstable
Release:    testing/unstable
Codename:   n/a

Który wyglądałby tak samo jak mój zwykły Raspbian.

Ponadto prawdopodobnie chciałbym wskazać coś na temat konkretnej instancji na karcie SD (ponieważ prawdopodobnie będę mieć wiele takich samych bazowych dystrybucji). Oczywiście mogę po prostu upuścić plik w tym samym miejscu na każdej karcie SD, ale czy istnieje konwencja, gdzie umieszczać tego rodzaju informacje?

Cade Roux
źródło
Łał super. Czy możesz wskazać, w jaki sposób stworzyłeś tę funkcję pushover / init.d? Zadam pytanie, jeśli odpowiesz :)
Zlatko,
@zladuric Zarejestruj się na pushover.net, aby założyć konto. Curl API jest dość prosty. Skonfigurowałem prosty skrypt w init.d jako „usługę” i po prostu wysyła różne powiadomienia przy starcie / zatrzymaniu. Technicznie jest to powiadomienie o zatrzymaniu startu, więc jeśli kiedykolwiek zostanie „uruchomione”, wyśle ​​powiadomienie. W praktyce nic ich nie uruchamia ani nie zatrzymuje poza uruchomieniem i wyłączeniem. Jeśli potrzebujesz pełnego kodu, śmiało i zadaj pytanie.
Cade Roux,

Odpowiedzi:

8
$ uname -a
Linux raspberrypi 3.1.9+ #174 PREEMPT Sun Jul 22 19:04:28 BST 2012 armv6l GNU/Linux
John La Rooy
źródło
7

Próbować

cat /etc/*-release

Na moim pulpicie daje

NAME="Arch Linux"
ID=arch
PRETTY_NAME="Arch Linux"
ANSI_COLOR="0;36"
HOME_URL="https://www.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://bugs.archlinux.org/"

Po sprawdzeniu oficjalnych zdjęć Raspberry Pi (Raspbian i Arch) /etc/os-releasejest dostępny na obu i zawiera co najmniej właściwości NAME i PRETTY_NAME.

Jak wyodrębnić nazwę dystrybucji?

To całkiem proste, spróbuj

$ cat /etc/os-release | perl -n -e '/^NAME=\"([a-zA-Z ]*)\"$/ && print "$1\n"'
Arch Linux

Bibliografia

  1. HowTo: Find My My Distribution Linux Name and Version
Alex Chamberlain
źródło
Wygląda dobrze. Ostatecznie nie ma znaczenia, czy jest to naprawdę uniwersalne, o ile działa dla danych dystrybucji. Łatwo byłoby umieścić własny plik w systemie plików, jeśli eksperymentowano z plikiem, który domyślnie go nie ma.
Chris Stratton,
4

Jak wspomniano, możesz użyć uname, ale pokaże to tylko wersję jądra. Jeśli masz tę samą wersję jądra na kilku różnych dystrybucjach / kartach (co jest bardzo prawdopodobne, ponieważ kilka z nich używa tego samego jądra podstawowego), otrzymasz taki sam wynik dla każdego z nich. Zatem najlepszym sposobem na rozróżnienie dystrybucji jest użycie czegoś innego niż jądro. Nie ma jednak uniwersalnego sposobu. Jednym prostym sposobem byłoby użycie nazwy hosta (i zmiana jej dla każdej dystrybucji).

cat / proc / version / proc / sys / kernel / hostname

lub

nazwa hosta && uname -a

Krzysztof Adamski
źródło
cat / proc / version / proc / sys / kernel / hostname
Krzysztof Adamski
nazwa hosta && uname -a (przy założeniu, że nazwa hosta działa - w tej chwili nie można uruchomić pi)
Chris Stratton