Polecenie, które pozwala na wygenerowanie zależności między załadowanymi modułami jądara Linuksa:
Przykładowy fragment diagramu:
sty 21
Posted by Łukasz Stelmach in Linux | Comments off
Polecenie, które pozwala na wygenerowanie zależności między załadowanymi modułami jądara Linuksa:
Przykładowy fragment diagramu:
sty 1
Posted by Łukasz Stelmach in Linux | Comments off
Jak chyba każdy korzystający ze stron podręcznika MAN wie, posiada on kilka rożnych sekcji. W każdej sekcji znajdują się opisy odpowiednich poleceń, plików konfiguracyjnych, wywołań systemowych i tak dalej (dokładną listę można poznać po wydaniu polecenia man man
).
Czasami zdarza się tak, że wpis o takiej samej nazwie istnieje w kilku sekcjach – na przykład strona podręcznika dla passwd
, istnieją wpisy odnoszące się zarówno do pliku binarnego jak i do pliku konfiguracyjnego o takiej nazwie. Wywołanie polecenia:
powinno wyświetlić jedną stronę. I tutaj zaczyna się niespodzianka, która mnie dzisiaj spotkała: wydawało mi się, że zostanie zawsze wyświetlona strona, która znajduje się w sekcji o najmniejszym numerze.
Jednak tak naprawdę wygląda to inaczej, o czym można przekonać się przeglądając stronę podręcznika man
:
Domyślnie wyszukuje we wszystkich dostępnych sekcjach, używając predefiniowanego porządku i pokazuje tylko pierwszą znalezioną stronę, nawet jeśli podana strona jest dostępna w kilku sekcjach.
Nie ma jednak żadnych informacji o faktycznej kolejności przeszukiwanych sekcji. Warto więc teraz odwołać się do pliku konfiguracyjnego /etc/manpath.config
, a tam można zaleźć taką linijkę:
I wszystko robi się jasne.
Tags: man
wrz 24
Posted by Łukasz Stelmach in Linux | 2 komentarze
Mały wpis ku pamięci: jak policzyć, ile miejsca zajmują w danym drzewie katalogów pliki z wybranymi rozszerzeniami.
W moim przypadku chciałem się dowiedzieć, ile miejsca zajmują filmy rodzinne. Pierwszym krokiem będzie odszukanie wszystkich filmów:
Zamiast używać standardowej konstrukcji -name
użyłem wyrażenia regularnego. Pozwoliło ona na dużo bardziej zwarte umieszczenie wszystkich rozszerzeń, które mnie interesują.
Teraz wypada wyświetlić informację, ile miejsca zajmuje każdy z plików. Można to tego użyć opcji -exec
w połączeniu z wywołaniem polecenia ls
, ale dużo lepszy efekt da użycie przełącznika -ls
. Efekt będzie podobny, a całość będzie funkcjonować dużo szybciej.
Ostatnim elementem będzie wyciągnięcie kolumny z wielkością pliku i jej zsumowanie, można to zrobić przy użyciu polecenia awk
:
I to w sumie rozwiązuje problem.
Ja jeszcze tylko chciałem mieć wielkość plików wyświetlaną w megabajtach. Można sobie do przeliczyć używając nawet zwykłego polecenia echo
, chociaż spada drastycznie czytelność kodu i tworzy się taki potworek:
sie 17
Posted by Łukasz Stelmach in Ciekawostki | Comments off
Do wykonania miałem bojowe zadanie: przygotowanie testu. Nic wielce skomplikowanego, ot pytanie wraz z kilkoma odpowiedziami. Pojawił się mały problem: trzeba odpowiedzi ustawić w jakiejś losowej kolejności w pliku tekstowym. Niby nic wielce trudnego, można od samodzielnie to zrobić, jednak łatwiej będzie to trochę automatyzować :).
Na szczęście zadanie to jest trywialne w przypadku użycia Vima. Posiada on odpowiednie polecenie: :sort
(więcej można przeczytać wydając komendę :help sort
), która pozwala na automatyczne posortowanie wybranych wierszy. Niestety, nie obsługuje ustawienia ich w kolejności losowej. Z pomocą natomiast może tutaj przyjść polecenie systemowe sort
wywoływane z parametrem -R
(przynajmniej w wersji 8.5 aplikacji, starsze wersje mogą tego przełącznika nie obsługiwać).
W moim przypadku procedura była następująca:
:!sort -R
Tags: losowe, sorotwanie, vim
Java zostanie pobrana ze strony Oracle, zainstalowana i odpowiednie powiązania zostaną automatycznie ustawione.
Więcej można przeczytać tutaj: Install Oracle Java in Ubuntu via PPA repository.
Java w wersji 7 został wydana jakiś czas temu, ale ciągle nie ma odpowiednich pakietów do instalacji w Ubuntu. Pewnie pojawią się wraz z edycją 11.10, ale czekać tak długo nie mam ochoty :).
Instalacja nowej wersji Javy sprowadza się do wykonania kilku kroków, jedyną niedogodnością jest konieczność ręcznego pilnowania nowych wydań JDK.
jdk-7-linux-x64.tar.gz
.
Zostanie utworzony katalog jdk1.7.0
a w nim Java w wersji 7.
/usr/lib/jvm/
pod nazwą java-7-oracle
, gdzie znajdują się dostępne wersje JVM w systemie.
root
. Należy więc wcześnie zmienić konto lub używać polecenie sudo
.root
a możliwość odczytu i wykonywania aplikacji powinni mieć wszyscy użytkownicy. Nie jest to krok być może konieczny, ale przy niektórych ustawianiach jego brak może uniemożliwić innym użytkownikom korzystania z Javy.
Jeżeli jednak umask
jest ustawiony na bardziej restrykcyjną wartość (w moim przypadku 007
) to pojawi się problem: zwykły użytkownik nie będzie mógł ani uruchomić ani nawet odczytać katalogu z Javą. Można to poprawić przy użyciu prostej instrukcji:
update-alternatives
. Mechanizm ten pozwala na zdefiniowania wielu rożnych aplikacji dostarczających daną funkcjonalność (np. wiele wersji Javy) oraz wybranie aplikacji, która będzie uruchamiana domyślnie.
W przypadku polecenia java
można sprawdzić jakie są jego różne implementacje:
W moim przypadku mam zainstalowane dwa różne JDK, z czego domyślnie ustawiona jest wersja Suna (teraz już Oracla).
Można teraz dodać implementację Java 7:
Numer 3
oznacza kolejny numer po ostatniej dostępnej wersji JVM.
Teraz pozostaje tylko wydanie polecenia:
A teraz mały test: wywołanie poleceń java
oraz javac
:
Jak widać domyślnie została wywołana wersja Javy 7, natomiast wywołanie kompilator ciągle odwołuje się do wersji 6. Poradzić sobie można z tym definiując kolejną alternatywę a następnie ją ustawiając. Natomiast ilość plików binarnych które trzeba ustawić oraz stron MAN, które należy zmienić jest znaczna. Można to sprawdzić przy pomocy polecenia:
update-java-alternatives
. Pozwoli ona na zmianę domyślnej implementacji wszystkich plików wykonywalnych oraz powiązanych z nimi stron MAN. Niestety, trzeba je odpowiednio skonfigurować, zanim zacznie działać poprawnie.
Pierwszym krokiem będzie dodanie odpowiednich alternatyw dla wszystkich plików binarnych. Można to zrobić przy pomocy prostego skryptu o nazwie update-alternatives-java-7
. Powstał on na bazie odpowiednich skryptów po instalacyjnych wykonywanych podczas instalacji OpenJDK w systemie.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #!/bin/bash # instalacja JRE-headless priority=100 basedir=/usr/lib/jvm/java-7-oracle basediralias=/usr/lib/jvm/java-7-oracle jdiralias=java-7-oracle mandir=/usr/lib/jvm/jdk1.7.0/man srcext=1.gz dstext=1.gz jre_tools='java keytool pack200 rmid rmiregistry unpack200 orbd servertool tnameserv' for i in $jre_tools; do unset slave1 slave2 || true if [ -e $mandir/man1/$i.$srcext ]; then slave1="--slave \ /usr/share/man/man1/$i.$dstext \ $i.$dstext \ $mandir/man1/$i.$srcext" fi update-alternatives --verbose \ --install \ /usr/bin/$i \ $i \ $basediralias/jre/bin/$i \ $priority \ $slave1 $slave2 done update-alternatives --verbose \ --install /usr/bin/jexec jexec $basediralias/jre/lib/jexec $priority # instalacja JRE jre_tools='policytool ControlPanel java_vm javaws jcontrol' for i in $jre_tools; do unset slave1 slave2 || true if [ -e $mandir/man1/$i.$srcext ]; then slave1="--slave \ /usr/share/man/man1/$i.$dstext \ $i.$dstext \ $mandir/man1/$i.$srcext" fi update-alternatives --verbose \ --install \ /usr/bin/$i \ $i \ $basediralias/jre/bin/$i \ $priority \ $slave1 $slave2 done # instalacja JDK jdk_tools='appletviewer apt extcheck idlj jar jarsigner javac javadoc javah javap jconsole jdb jhat jinfo jmap jps jrunscript jsadebugd jstack jstat jstatd native2ascii rmic schemagen serialver wsgen wsimport xjc' for i in $jdk_tools; do unset slave1 slave2 || true if [ -e $mandir/man1/$i.$srcext ]; then slave1="--slave \ /usr/share/man/man1/$i.$dstext \ $i.$dstext \ $mandir/man1/$i.$srcext" fi update-alternatives --verbose \ --install \ /usr/bin/$i \ $i \ $basediralias/bin/$i \ $priority \ $slave1 $slave2 done |
W skrypcie należy zwrócić szczególną uwagę na definicję odpowiednich ścieżek dostępu. Po jego wykonaniu zostaną zdefiniowanie odpowiednie alternatywy dla odpowiednich plików, ale nie zostaną one jeszcze uaktywnione.
Konfiguracja update-java-alternatives
sprowadza się do zdefiniowania odpowiedniego pliku konfiguracyjnego. Należy utworzyć (lokalizacja i nazwa pliku jest ważna) plik: /usr/lib/jvm/.java-7-oracle.jinfo
o następującej zawartości:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | name=java-7-oracle alias=java-7-oracle priority=100 section=non-free jre ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel jre java /usr/lib/jvm/java-7-oracle/jre/bin/java jre java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm jre javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws jre jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol jre keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool jre pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200 jre policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool jre rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid jre rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry jre unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200 jre orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd jre servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool jre tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv jre jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec jdk appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer jdk apt /usr/lib/jvm/java-7-oracle/bin/apt jdk extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck jdk idlj /usr/lib/jvm/java-7-oracle/bin/idlj jdk jar /usr/lib/jvm/java-7-oracle/bin/jar jdk jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner jdk javac /usr/lib/jvm/java-7-oracle/bin/javac jdk javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc jdk javah /usr/lib/jvm/java-7-oracle/bin/javah jdk javap /usr/lib/jvm/java-7-oracle/bin/javap jdk jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole jdk jdb /usr/lib/jvm/java-7-oracle/bin/jdb jdk jhat /usr/lib/jvm/java-7-oracle/bin/jhat jdk jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo jdk jmap /usr/lib/jvm/java-7-oracle/bin/jmap jdk jps /usr/lib/jvm/java-7-oracle/bin/jps jdk jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript jdk jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd jdk jstack /usr/lib/jvm/java-7-oracle/bin/jstack jdk jstat /usr/lib/jvm/java-7-oracle/bin/jstat jdk jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd jdk native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii jdk rmic /usr/lib/jvm/java-7-oracle/bin/rmic jdk schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen jdk serialver /usr/lib/jvm/java-7-oracle/bin/serialver jdk wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen jdk wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport jdk xjc /usr/lib/jvm/java-7-oracle/bin/xjc |
Teraz jest już dostępna nowa wersja JVM w systmie:
Pozostaje ustawić Jave 7 jako domyślną implementację JVM:
Tags: instalacja, Java
Arclite theme by digitalnature | powered by WordPress