Previous Next Table of Contents

5. Programy użytkowe i polecenia Linuxa

5.1 Co zrobić z plikiem o rozszerzeniu...

Oznaczenia:

Rozszerzenie            Typ                     Program
----------------------------------------------------------------------------
.1 - .8                 D                       man
.C                      Z                       g++
.Z                      A                       compress, uncompress
.arj                    A                       arj, unarj
.bz2                    A                       bzip2
.c                      Z                       gcc
.c++                    Z                       g++
.deb                    A                       dpkg
.dvi                    D                       tex
.gz                     A                       gzip, gunzip
.html                   D                       lynx
.info                   D                       info
.lsm                    D                       cat, more
.pl                     Z                       perl
.ps                     D                       ghostscript, ghostview
.rpm                    A                       rpm
.sh                     Z                       sh, csh
.tar                    A                       tar
.texi                   D                       info
.tgz                    A                       tar, gzip
.txt                    D                       more
.zip                    A                       zip

Jeśli w tabelce nie ma pliku, którego szukasz, użyj polecenia file, na przykład:

file 0223.lzh
0223.lzh: -                LHa 2.x? archive data [lh ]

5.2 Nie mogę uruchomić programów, mimo, że jestem w ich katalogu?

Otóż Linux, tak jak każdy system Unixowy przeszukuje w poszukiwaniu programów do uruchomienia wyłącznie ścieżki umieszczonej w zmiennej PATH. W związku z tym prawdopodobnie ścieżki, z której usiłujesz uruchomić program nie ma w tej zmiennej. Aby dodać aktualną ścieżkę do przeszukiwania, dopisz do pliku inicjalizującego (różne w zależności od tego, jakiej powłoki używasz) w miejscu nadawania wartości zmiennej PATH kropkę (.) Można też uruchamiać program poprzez dodanie w linii poleceń aktualnej ścieżki, czyli:

./nazwa_programu

Jednak dodanie aktualnego katalogu do przeszukiwanych katalogów nie jest zalecane ze względów bezpieczeństwa systemu. Szczegółów dowiesz się wraz z nabywaniem praktyki jako wieloletni administrator unix-ów :). Oczywiście jeśli komputer służy tylko do celów domowych, to spokojnie można tę ścieżkę dodać do zmiennej PATH.

5.3 Sendmail mi się długo uruchamia!

Zmiana w pliku network

W pliku /etc/sysconfig/network zmień linijkę:

networking=yes na:

networking=no

Oto nadesłana przez M.Tyralę kbns@zeus.polsl.gliwice.pl opinia na ten temat:

Taką poradę przeczytałem na tej liście, jednak trochę
później pojawił się post człowieka, któremu po takiej podmianie przestał
działać shutdown (oraz reboot i halt), sync powodował zawieszenie shella. Ja
te same objawy uzyskałem (dwukrotnie), wiec IMHO jest już jakaś
powtarzalność. Na newsach pojawił się głos jakiegoś 'guru', ale było w nim
tylko coś o RedHacie i odmóżdzeniu userów, aczkolwiek nic więcej. 

Zmienna HOSTNAME

Podobno pomaga też zmiana wartości zmiennej $HOSTNAME na inną niż localhost.

Oto co pisze RedHat w erracie do wersji 4.0 (sent by kbns@zeus.polsl.gliwice.pl):

(02-Dec-1996) On some machines, sendmail appears to pause when booting up. To fix this, either:

Use netcfg to change the hostname from localhost to localhost.localdomain, or

edit /etc/sysconfig/network and change the line which reads:

HOSTNAME=localhost to read:

HOSTNAME=localhost.localdomain

5.4 Jak stworzyć konto dla nowego użytkownika?

Zazwyczaj w każdej dystrybucji istnieje polecenie (często jest to po prostu skrypt powłoki) służący do tego celu. Nazywa się najczęściej adduser, useradd lub jakoś podobnie. Można również edytować bezpośrednio plik /etc/passwd aby dodać nową linijkę z pidem użytkownika.

Uwaga! Użytkownicy RedHata często mają problemy z powstającym w katalogu /etc plikiem .passwd.lock, który należy usunąć przed wykonaniem polecenia adduser. Można ten problem rozwiązać dodając do pliku inicjalizującego powłoki w katalogu root, czyli użytkownika, który ma prawo dodawać użytkowników, polecenie kasujące ten plik.

5.5 Program ,,jakiśtam'' działa zadowalająco, ale tworzy przy uruchomieniu za każdym razem plik core. Jak sobie z tym poradzić?

Jeśli tworzy core to na pewno wszystko nie jest w porządku. Ale jeśli chcesz zabronić tworzenia core, bo i tak z nich nie korzystasz, ustaw odpowiedni limit. Dla powłoki bash istnieje polecenie ulimit, dla tcsh - limit, a dla ksh rlimit. Musisz przeczytać manual dla konkretnej powłoki. W bashu robi się to tak: ulimit -c 0

5.6 Jak zrobić, żeby poczta miała jako nadawcę adres typu Imię.Nazwisko@host.domena?

Chodzi o ukrycie prawdziwego loginu. Odpowiedzi udziela nasz niezastąpiony Bartek Maruszewski. Dzięki!

W katalogu /usr/src/sendmail-najnowsza.wersja/cf lub /usr/sendmail-cf/cf tworzymy plik nasza.domena.m4, w który wpisujemy:

---------- ciach ---------
divert(-1)
OSTYPE(linux)dnl

DOMAIN(generic)dnl
# poniżej zmiana
MASQUERADE_AS(nasza-domena)dnl

define(`HELP_FILE', `/etc/sendmail.hf')dnl

FEATURE(use_cw_file)dnl
FEATURE(genericstable)dnl zmiana loginów <-- to jest to
FEATURE(masquerade_envelope)dnl <-- a tutaj maskujemy to co pojawia
dnl się w programie czytającym pocztę w polu od kogo przyszło

MAILER(local)dnl
MAILER(smtp)dnl
---------- ciach ---------

Piszemy 'm4 m4/cf.m4 nasza-domena.m4 > sendmail.cf', ZACHOWUJEMY KOPIE działającego /etc/sendmail.cf i kopiujemy wygenerowany plik do /etc.

Tworzymy plik /etc/genericstable z wpisami:

jas     Janek.Kowalski
.
.
.

Następnie trzeba uruchomić 'makemap hash genericstable < genericstable' żeby zamienić genericstable na format, który rozumie sendmail. Te dwie nazwy w tym poleceniu mają być identyczne, nie pomyliłem się. makemap sam dopisze do pliku wyjściowego '.db'.

5.7 Jak kompilować jądro?

Po co kompilować jądro?

Istnieje wiele powodów, dla których ludzie kompilują jądra. Jednym z najczęstszych to po prostu chęć uaktualnienia swojego systemu. Linux jest bardzo szybko rozwijającym się systemem, w związku z tym dość często pojawiają się nowe wersje jąder. Należy jednak pamiętać, że tylko jądra z parzystą środkową liczbą wersji są uznawane za stabilne. Jądra z nieparzystą liczbą to tzw. jądra rozwojowe wprowadzające nowe features, które będą wbudowane kiedyś (po przetestowaniu) do serii stabilnej.

Inny powód samodzielnej kompilacji to chęć posiadania jądra systemu doskonale dopasowanego do potrzeb konkretnego użytkownika. Można tak skonfigurować jądro, aby miało wbudowane tylko sterowniki tych urządzeń, które posiadamy, tylko tych systemów plików, z którymi mamy do czynienia, etc.

Jak to się robi?

Po pierwsze musisz zdobyć źródła jądra. Oprócz oczywistej możliwości ściągnięcia ich z sieci, możesz je wziąć z każdej dystrybucji.

Zdobyty plik tar.gz o nazwie np. linux-2.0.33.tar.gz i rozmiarach około 7MB do 9MB należy rozpakować w katalogu /usr/src tak, aby powstał tam katalog linux zawierający źródła.

Następnie musimy skonfigurować instalację. Będąc w katalogu /usr/src/linux i będąc oczywiście zalogowanym jako root piszemy:

Pytania zadawane przez skrypt konfiguracyjny są na tyle oczywiste, że chyba nie potrzebujesz przy tym pomocy. Następnie należy stworzyć zależności:

make dep

...i rozpocząć kompilację....

make zImage

Zwróć uwagę na duże i małe litery w słowie zImage. Następnie (po około 10 minutach na Pentium 75) jeśli konfigurowałeś jądro jako modularne, musisz skompilować moduły i zainstalować je:

make modules
make modules_install

Stare moduły siedzące w /lib/modules/numer.starego.jądra/ można potem usunąć. Ale na razie zainstalujmy jądro. Jest w jednym podkatalogu źródeł /arch/i386/boot i nazywa się zImage. Teraz należy dowiedzieć się, gdzie lilo szuka jądra. Jest to napisane w /etc/lilo.conf. Najpierw robimy kopię zapasową poprzedniego działającego jądra w katalogu odszukanym w powyższym pliku (np. cp vmlinuz vmlinuz-old) i dopiero po zrobieniu kopii nagrywamy do tego katalogu nasze świeżutkie, jeszcze ciepłe jądro :)). Następnie edytujemy powyższy plik i robimy kopię akapitu opisującego nasze jądro i wpisujemy label=old i zmieniamy tam vmlinuz na vmlinuz-old. Ja mam taką zasadę, że nazywam jądra vmlinuz-x.y.z. Po tych modyfikacjach koniecznie wykonujemy

lilo

Następnie rebootujemy kompa i czekamy trzymając kciuki... Jeśli coś nie poszło, to można zresetować i przy lilo: wpisać old co wystartuje nam poprzednią wersję jądra.

5.8 Przy uruchamianiu systemu pojawiają się napisy z net-pf-4 i net-pf-5.

Wpisz do pliku /etc/conf.modules:

alias net-pf-4 off
alias net-pf-5 off

5.9 Po wystartowaniu Linuxa pojawia się komunikat: Cannot open root device 01:00 kernel panic: VFS: unable to mount root fs on 01:00

Odpowiedź nadesłana przez B.Maruszewskiego (thanx a lot)

Hmm, sprobujmy:
. klasycznie generujesz kernel (make menuconfig dep clean zImage modules
modules_install)
. instalujesz kernel (albo ręcznie albo jak_tam_to_robisz)
. "/sbin/mkinitrd /boot/nowy_init_rd numer.uzywanego.kernela"
. dopisujesz wygenerowany initrd jako root=/nowy_init_rd (o ile dobrze
pamiętam ...)
. uruchamiasz /sbin/lilo
. sprawdzasz czy to powinno działać
. trzy razy się modlisz
. sprawdzasz jeszcze raz
. rebootujesz
. piszesz na listę dlaczego nie poszło :-(

5.10 Czym się różni make clean od make mrproper przy kompilacji jądra?

Wykonanie

make clean

powoduje usunięcie stworzonych podczas kompilacji plików obiektowych (binariów), zaś

make mrproper

jak wyżej plus usunięcie konfiguracji jądra.

5.11 Jak wydrukować plik postscriptowy ,,w książeczkę''?

Metoda pierwsza. Nalezy sciągnąć sobie pakiet psutils, zainstalować, po czym wykonać:

psbook nasz_plik.ps | psnup -2 > nasz_plik-x.ps

W zbiorze wyjściowym mamy na przemian strony parzyste z nieparzystymi. Jeżeli chcielibyśmy mieć osobno parzyste, a osobno nieparzyste, to pomoże nam programik psselect:

psselect -o -r nasz_plik-x.ps nasz_plik-x-O.ps
psselect -e nasz plik-x.ps nasz_plik-x-E.ps

Przełącznik -r powoduje, że strony nieparzyste są w odwrotnej kolejności, co pozwala drukować najpierw jeden plik, po zadrukowaniu iluś tam kartek wyjmujemy je z drukarki, odwracamy stosik, wkładamy odwrócony stos z powrotem do drukarki i drukujemy zbiór drugi.

(Całość można załatwić dwoma wywołaniami programu pstops, jednak jego parametry wywołania mogą na początek wyglądać na nieco pogmatwane, więc moim zdaniem na początek lepiej jest pocyrkować trochę kilkoma programami wiedząc miej-więcej co się robi.)

Na deser wykonujemy:

man psbook
man psnup
man psselect
man pstops

Metoda druga. Używamy programu mpage, który jest chyba w większości dystrybucji. Wykonujemy:

mpage -O -r -o -A -t -P- nasz_plik.ps > nasz_plik-x-O.ps
mpage -E -o -A -t -P- nasz_plik.ps > nasz_plik-x-E.ps

W zbiorze nasz_plik-x-O.ps mamy strony nieparzyste (w odwrotnej kolejności), a w nasz_plik-x-E.ps -- parzyste.

No i oczywiście na koniec: man mpage

Nieco inaczej mają się sprawy, gdy plik *.ps powstał z pliku *.dvi, czyli gdy mamy dostęp do źródłowego *.dvi.

1. Jeżeli mamy strony A5 i tylko chcemy je umieścić po dwie na arkuszu A4 to można posłużyć się programem dvidvi.

dvidvi -m 4:-1,2\(4.25in,0in\) infile.dvi outfile-1.dvi
dvidvi -m 4:-3,0\(4.25in,0in\) infile.dvi outfile-2.dvi

Tak uzyskane dwa pliki dvi drukujemy naszą ulubioną metodą drukowania plików *.dvi.

2. Jeżeli strony w pliku *.dvi są rozmiaru A4, to robimy tak: do wywołania dvips'a dodajemy parametr -x707, czyli np:

dvips -x707 -o nasz_plik.dvi nasz_plik.ps

Po czym traktujemy otrzymany postscript tak:

pstops 0@1\(-0.7cm,-8cm\) nasz_plik.ps | psbook \
| psnup -2 -pa4 -Pa5 > nasz_plik-x.ps

Wartości przesunięć strony są dobrane eksperymentalnie i w razie gdyby coś było poprzesuwane należy je zmienić.

Dwa słowa o tym, dlaczego warto robić książeczki metodą jak powyżej, zamiast podanej na samym początku: Otóż w metodzie pierwszej czcionki zawarte w pliku postscriptowym są skalowane przez psnup-a, co nie wygląda ładnie (wystarczy się przyjrzeć uważnie literce `N'). W sposobie podanym na końcu czcionki w pliki *.ps są już odpowiedniej wielkości i po prostu efekt końcowy jest ładniejszy.

5.12 Jak dodać marginesy w pliku postscriptowym?

Do tego celu można użyć wymienionego w poprzednim pytaniu programu pstops. Wywołujemy go tak:

pstops 0@skala\(przesx,przesy\) plik_wej.ps > plik_wyj.ps

gdzie:

        skala  -- współczynnik skalowania strony (np 0.9)<b>
        przesx -- przesunięcie strony w poziomie (np 1cm)<b>
        przezy -- przesunięcie strony w pionie (np 2cm)<b>

Czyli przykładowe wywołanie może wuglądać tak:

pstops 0@0.9\(1cm,2cm\) plik_wej.ps >
plik_wyj.ps

Owszem, dodanie jakichś konkretnych marginesów wymaga trochę liczenia, ale to już jest łatwizna i na pewno sobie poradzisz!

5.13 Jak uruchomić telnet na konto root? Chciałbym administrować systemem zdalnie!

(Odpowiedź: kloczek :-)

Telnet na konto root'a jest zablokowany specjalnie z powodów bezpieczeństwa we wszystkich dystrybucjach Linuxa w konfiguracjach podstawowych. Poprostu jeżeli ktoś nieuprawniony przejmie w jakiś sposób hasło root'a to ma ułatwione zadanie przy wszelkiego rodzaju ingerencjach w systemie przy możliwości wejścia na konto root'a bezpośrednio. O wiele ważniejszym powodem jest to, że podczas negocjacji połączenia poprzez telnet/rsh/rlogin zarówno sam login jak i hasło są przesyłane jawnie. W przypadku łączenia się poprzez sieć publiczną czy segmenty sieci co do których nie mamy pewności, że nikt na nich nie podsłuchuje ruchu łączenie się poprzez telnet na konto root'a jest z powodów bezpieczeństwa niewskazane.

Do łączenia się poprzez sieć co do której nie mamy zaufania i to nie zależnie od tego czy chcemy łączyć się na konto root'a czy zwykłego użytkownika powinno wykorzystywać się ssh (secure shell). Poprawne zachowanie administratora powinno polegać jednak na tym, żeby do minimum ograniczał on czas spędzany na koncie root'a. W takim wypadku po zalogowaniu się na konto użytkownika, żeby zmienić sobie uprawnienia na czas wykonania jakiejś operacji wykorzystuje się polecenie su. Polecenie to powinno się wykonywać z dodatkowym parametrem "-" czyli su - żeby przy zmianie uprawnień został wywołany osobny shell z pełnym zestawem zmiennych środowiska właściwym dla root'a co też czasami może ustrzeże niedoświadczonych administratorów od subtelnych pomyłek czy błędów.

Blokada logowania się zdalnie na konto root'a jest wykonana poprzez wyszczególnienie w /etc/securetty listy urządzeń na jakie osoba z uprawnieniami root'a (uid=0, gid=0) może się logować bezpośrednio. W przypadku posiadania fragmentu sieci bezpiecznej, którą chcielibyśmy jedna wykorzystywać do logowania na root'a nie powinno się jednak modyfikować do tego celu pliku żeby dodać kolejne /dev/pty* gdyż nie ma możliwości w ten sposób zdeterminowania kierunków z jakich następuje logowanie, a tylko urządzenia. Czyli powinno się postępować jak powyżej z wykorzystaniem ssh i su.

ssh nie wchodzi w skład żadnej dystrybucji ze względów licencyjnych. Czyli po zainstalowaniu systemu należy ściągnąć ssh i je zainstalować. ssh jest dostępne w postaci gotowych skompilowanych pakietów deb, rpm, a w każdym innym wypadku można ściągnąć źródła, przekompilować całość i zainstalować.


Previous Next Table of Contents