doc/documentation/content/hu/articles/linux-users/_index.adoc
Li-Wen Hsu a9a9e66105
Use correct syntax markup for shell
Approved by:	carlavilla
2021-03-14 20:08:55 +08:00

387 lines
21 KiB
Text

---
title: FreeBSD gyorstalpaló Linux® felhasználók számára
authors:
- author: Ferrell, John
copyright: 2008 A FreeBSD Dokumentációs Projekt
releaseinfo: "$FreeBSD$"
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---
= FreeBSD gyorstalpaló Linux(R) felhasználók számára
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:toc-title: Tartalom
:table-caption: Táblázat
:figure-caption: Ábra
:example-caption: Példa
include::shared/hu/urls.adoc[]
[.abstract-title]
Kivonat
Ez a cikk azért íródott, hogy röviden megismertesse a FreeBSD alapjait a középhaladó-haladó Linux(R) felhasználókkal.
_Fordította: Páli Gábor, utolsó ellenõrzés: 2010.11.28._
'''
toc::[]
[[intro]]
== Bevezetés
Ebben a leírásban a FreeBSD és a Linux(R) közti alapvetõ eltéréseket igyekszünk szemléltetni, aminek révén a középhaladó és haladó Linux(R) felhasználók pillanatok alatt bepillantást nyerhetnek a FreeBSD alapjaiba. Ez egyszerûen csak egy szakmai jellegû bevezetés, és nem foglalkozik a két rendszer felépítése közti "filozófiai" különbségekkel.
A leírás feltételezi, hogy korábban már telepítettük a FreeBSD rendszert. Amennyiben ezt még nem tettük volna meg, vagy segítségre lenne szükségünk a telepítésben, akkor olvassuk el a FreeBSD kézikönyv link:{handbook}#install[A FreeBSD telepítése] címû fejezetét.
[[shells]]
== Parancsértelmezõk: hova tûnt a Bash?
A Linuxról áttérõ felhasználók gyakran meglepõdnek azon, hogy a FreeBSD-ben nem a Bash az alapértelmezett parancsértelmezõ. Sõt, a Bash még az alaprendszerben sem található meg. Helyette a man:tcsh[1] az alapértelmezett parancsértelmezõ a FreeBSD-ben. Természetesen a Bash, a többi szintén közkedvelt parancsértelmezõhöz hasonlóan megtalálható a FreeBSD <<SOFTWARE, Csomag- és Portgyûjteményében>>.
Ha más parancsértelmezõket is telepítettünk, akkor a man:chsh[1] parancs segítségével tudjuk megváltoztatni az alapértelmezett parancsértelmezõnket. A `root` felhasználó alapértelmezett parancsértelmezõjének megváltoztatását azonban nem javasoljuk. Ennek oka, hogy azok a parancsértelmezõk, amelyek nem részei az alaprendszernek, általában a [.filename]#/usr/local/bin# vagy a [.filename]#/usr/bin# könyvtárakban találhatóak, és bizonyos vészhelyzetekben elõfordulhat, hogy ezeket az állományrendszereket nem tudjuk csatlakoztatni. Ilyen esetekben a `root` sem lesz képes elérni a saját alapértelmezett parancsértelmezõjét, amivel lényegében megakadályozzuk, hogy be tudjon jelentkezni. Erre a célra a `root` felhasználó egy alternatíváját, a `toor` felhasználót hozták létre, amelyet az alaprendszeren kívül található parancsértelmezõkkel is használhatunk. A link:{faq}#TOOR-ACCOUNT[toor hozzáférésérõl] a GYIK biztonsági kérdésekkel foglalkozó részében tudhatunk meg többet (angolul).
[[software]]
== Csomagok és portok: szoftverek telepítése FreeBSD alatt
A szoftverek telepítésének hagyományos UNIX(R)-os megoldásain (a forrás letöltésén, kitömörítésén, a forráskód módosításán és lefordításán) túl az alkalmazások telepítésének további két módját is felkínálja a FreeBSD: ezek a csomagok és a portok. A rendszerhez elérhetõ összes port és csomag teljes listáját http://www.freebsd.org/ports/[ezen] a címen érhetjük el.
[[packages]]
=== Csomagok
A csomagok lényegében elõre lefordított alkalmazások, amelyek megfelelnek a Debian/Ubuntu rendszerekben megtalálható [.filename]#.deb#, vagy a Red Hat/Fedora rendszerekben megtalálható [.filename]#.rpm# állományoknak. A csomagok a man:pkg_add[1] segítségével telepíthetõek. Például az alábbi parancs az Apache 2.2 alkalmazást rakja fel:
[source,shell]
....
# pkg_add /tmp/apache-2.2.6_2.tbz
....
Az `-r` kapcsolóval arra utasítjuk a man:pkg[add] programot, hogy magától töltse le és telepítse a csomagot, valamint annak függõségeit:
[source,shell]
....
# pkg_add -r apache22
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/Latest/apache22.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/expat-2.0.0_1.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/perl-5.8.8_1.tbz... Done.
[nyissz]
To run apache www server from startup, add apache22_enable="YES"
in your /etc/rc.conf. Extra options can be found in startup script.
....
[NOTE]
====
Ha a FreeBSD valamelyik kiadását használjuk (6.2, 6.3, 7.0 stb., tehát CD-rõl telepítettük), akkor a `pkg_add -r` az adott kiadáshoz tartozó csomagokat fogja letölteni. Ezek a csomagok azonban _nem feltétlenül_ az alkalmazás legújabb verziójához tartoznak. Ezt az alapértelmezett viselkedést felül tudjuk bírálni, ha a `PACKAGESITE` környezeti változót az link:ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/[ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/] értékre állítjuk, és így például a 6.X sorozathoz készült legfrissebb csomagokat tölthetjük le.
A FreeBSD különbözõ változatairól a link:{version-guide}[Válasszuk ki a nekünk igazán megfelelõ FreeBSD verziót!] címû cikkben olvashatunk bõvebben.
====
A csomagok használatával kapcsolatban a FreeBSD kézikönyvében kaphatunk részletesebb felvilágosítást, lásd link:{handbook}#packages-using[A csomagrendszer használata].
[[ports]]
=== Portok
A FreeBSD-ben az alkalmazások telepítésének másik módja a Portgyûjtemény használata. A Portgyûjtemény lényegében [.filename]#Makefile# állományok és javítások gyûjteménye, amelyek a különféle alkalmazások forráskódját készítik fel arra, hogy a FreeBSD-n is használhatóak legyenek. Amikor telepítünk egy portot, akkor a rendszer elõször letölti az alkalmazás forráskódját, elvégzi a szükséges módosításokat, lefordítja a forrást és végül telepíti az alkalmazást (valamint mindezt megteszi az összes függõsége esetében).
A Portgyûjtemény, vagy gyakran egyszerûen csak a "portfa", a [.filename]#/usr/ports# könyvtárban található. Itt nyilván feltételezzük, hogy a Portgyûjteményt is kiválasztottuk a FreeBSD telepítése során. Amennyiben a Portgyûjteményt még nem telepítettük volna, a man:sysinstall[8] segítségével feltehetjük a telepítõlemezrõl, vagy esetleg a man:csup[1], illetve man:portsnap[8] használatával letölthetjük a FreeBSD Projekt valamelyik szerverérõl. A Portgyûjtemény telepítésének részletes bemutatása megtalálható a kézikönyv link:{handbook}#ports-using[4.5.1. szakaszában].
A telepítéshez (általában) csak be kell lépnünk az adott port könyvtárába és el kell indítanunk a fordítást. A következõ példában az Apache 2.2 alkalmazást telepítjük a Portgyûjteménybõl:
[source,shell]
....
# cd /usr/ports/www/apache22
# make install clean
....
A portok alkalmazásának egyik legnagyobb elõnye, hogy a szoftverek telepítése során testre tudjuk szabni azok beállításait. Például amikor az Apache 2.2 alkalmazást portként telepítjük, a `WITH_LDAP` man:make[1] változó megadásával engedélyezhetjük a mod_ldap használatát:
[source,shell]
....
# cd /usr/ports/www/apache22
# make WITH_LDAP="YES" install clean
....
A Portgyûjteménnyel kapcsolatos további információk tekintetében olvassuk el a FreeBSD kézikönyv link:{handbook}#ports-using[A Portgyûjtemény használata] címû szakaszát.
[[which]]
=== Portok vagy csomagok, mégis melyiket használjam?
A csomagok tulajdonképpen elõre lefordított portok, ezért igazából csak abban van köztük különbség, hogy forrásból (portok) vagy binárisan telepítjük-e az alkalmazásokat. Mindegyik módszernek megvannak a maga elõnyei:
.Csomagok (bináris)
* Gyorsabb telepítés (a nagyobb alkalmazások lefordítása viszont nagyon sokáig is eltarthat).
* Nem szükséges megértenünk a szoftverek lefordításának mikéntjét.
* Nem kell fordítóprogramokat telepítenünk a rendszerünkre.
.Portok (forrás)
* A telepítés beállításait tetszõlegesen szabályozhatjuk. (A csomagok általában szabványos beállításokkal készülnek. A portok esetében azonban lehetõségünk van ezeket kedvünk szerint megváltoztatni, mint például további modulok fordítását kérni, vagy átállítani a telepítés alapértelmezett helyét.)
* Ha késztetést érzünk, akkor akár a saját javításainkat is beletehetjük a forráskódba.
Ha nincsenek különös igényeink, akkor a csomagok minden bizonnyal tökéletesen megfelelnek számunkra. Amikor viszont valamit külön be szeretnénk állítani, akkor ahhoz a portokat érdemes választanunk. (Ne felejtsük el azonban, hogy ha elsõsorban a csomagokhoz ragaszkodunk, de mégis módosítanunk kell valamit bennük, akkor a `make package` parancs kiadásával a portokból is tudunk csomagot készíteni, majd átmásolni azokat más szerverekre.)
[[startup]]
== A rendszer indítása: hova lettek a futási szintek?
A Linux(R) a SysV rendszerindítási sémáját alkalmazza, miközben a FreeBSD a hagyományos BSD típusú man:init[8] megoldást. A BSD típusú man:init[8] esetén nincsenek futási szintek és nem létezik [.filename]#/etc/inittab# állomány. Helyette az man:rc[8] vezérli a rendszer indítását. Az [.filename]#/etc/rc# szkript beolvassa az [.filename]#/etc/defaults/rc.conf# és [.filename]#/etc/rc.conf# állományokat, amelyekbõl megállapítja, hogy milyen szolgáltatásokat indítson el. A megadott szolgáltatásokat ezután az [.filename]#/etc/rc.d# és a [.filename]#/usr/local/etc/rc.d# könyvtárakban található megfelelõ indítószkriptek segítségével indítja el. Ezek a szkriptek hasonlóak a Linux(R) rendszereken az [.filename]#/etc/init.d# könyvtárban található szkriptekhez.
****
_A szolgáltatások indításáért felelõs szkriptek miért két különbözõ helyen találhatóak?_ Az [.filename]#/etc/rc.d# könyvtárban található szkriptek az "alaprendszer" részei (mint például a man:cron[8], man:sshd[8], man:syslog[3] és a többi). A [.filename]#/usr/local/etc/rc.d# könyvtárban pedig a felhasználó által telepíthetõ alkalmazások, például az Apache, Squid stb. szkriptjei találhatóak.
_Mi a különbség az "alaprendszerben" található és a felhasználó által telepített alkalmazások között?_ A FreeBSD-t egy összefüggõ operációs rendszerként fejlesztik. Ezt másképpen úgy lehetne fogalmazni, hogy a rendszermagot, a rendszerszintû függvénykönyvtárakat és a hozzájuk tartozó programokat (mint például a man:ls[1], man:cat[1], man:cp[1] stb.) együtt fejlesztik és adják ki. Ezt nevezzük az "alaprendszernek". A felhasználó által telepíthetõ alkalmazások lényegében azok, amelyek nem részei ennek az "alaprendszernek", például az Apache, X11, Mozilla Firefox stb. Ezek általában a FreeBSD <<SOFTWARE, Csomag- és Portgyûjteményébõl>> telepíthetõek. Mivel a felhasználók által telepített alkalmazásokat igyekszünk elkülöníteni az "alaprendszertõl", ezért ezek a [.filename]#/usr/local/# könyvtárba kerülnek. Ennek következtében a felhasználók által telepített binárisok a [.filename]#/usr/local/bin# könyvtárban, míg a hozzájuk tartozó konfigurációs állományok a [.filename]#/usr/local/etc# könyvtárban találhatóak, és így tovább.
****
A szolgáltatásokat az [.filename]#/etc/rc.conf# állományban (lásd man:rc.conf[5]) tudjuk engedélyezni a `SzolgáltatásNév_enable="YES"` sor megadásával. A rendszer alapértelmezett beállításait az [.filename]#/etc/defaults/rc.conf# állományban találhatjuk meg, ezeket az [.filename]#/etc/rc.conf# állományban tudjuk felülbírálni. Az alkalmazásokhoz tartozó szolgáltatások engedélyezésének lépéseihez pedig a telepítésük után ne felejtsük el átolvasni a hozzájuk tartozó dokumentációt.
Az [.filename]#/etc/rc.conf# állományból származó most következõ rövid kódrészlet az man:sshd[8] és Apache 2.2 szolgáltatásokat engedélyezi, valamint az Apache számára beállítja az SSL használatát.
[.programlisting]
....
# az SSHD engedélyezése
sshd_enable="YES"
# az Apache és benne az SSL támogatásának engedélyezése
apache22_enable="YES"
apache22_flags="-DSSL"
....
Miután az [.filename]#/etc/rc.conf# állományban engedélyeztük a szolgáltatásokat, a parancssorból el is tudjuk indítani ezeket (a rendszer újraindítása nélkül):
[source,shell]
....
# /etc/rc.d/sshd start
....
Ha egy szolgáltatást nem engedélyeztünk, akkor a parancssorból a `forcestart` paraméter megadásával tudjuk elindítani:
[source,shell]
....
# /etc/rc.d/sshd forcestart
....
[[network]]
== A hálózat beállítása
[[interfaces]]
=== Hálózati interfészek
A hálózati csatolófelületekre a Linux esetén alkalmazott általános _ethX_ alakú azonosítók helyett a FreeBSD az adott hálózati kártya meghajtójának nevével és utána egy sorszámmal hivatkozik. Az man:ifconfig[8] itt látható kimenetében két Intel(R) Pro 1000 hálózati kártya jelenik meg (em0 és em1):
[source,shell]
....
% ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
ether 00:50:56:a7:70:b2
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
ether 00:50:56:a7:03:2b
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
....
[[ipaddress]]
=== Az IP-cím beállítása
Az interfészekhez az man:ifconfig[8] paranccsal tudunk IP-címet rendelni. Az IP-címek beállítása azonban csak akkor marad meg az újraindítást követõen is, ha felvesszük az [.filename]#/etc/rc.conf# állományba. A most következõ példában megadunk egy hálózati nevet, IP-címet és egy alapértelmezett átjárót:
[.programlisting]
....
hostname="szerver1.minta.com"
ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
defaultrouter="10.10.10.1"
....
DHCP esetén használjuk a következõt:
[.programlisting]
....
hostname="szerver1.minta.com"
ifconfig_em0="DHCP"
....
[[firewall]]
== Tûzfalak
Hasonlóan a Linuxban található IPTABLES megoldáshoz, a FreeBSD is kínál fel rendszermagszintû tûzfalazást. A FreeBSD jelen pillanatban három tûzfalat támogat:
* link:{handbook}#firewalls-ipfw[IPFIREWALL]
* link:{handbook}#firewalls-ipf[IPFILTER]
* link:{handbook}#firewalls-pf[PF]
Az IPFIREWALL, avagy IPFW (az IPFW szabályrendszereit az man:ipfw[8] paranccsal tudjuk kezelni) a FreeBSD fejlesztõi által készített és karbantartott tûzfal. A forgalomszabályozás megvalósításához és különbözõ típusú hálózati kapcsolatok szimulációjához az IPFW kiegészíthetõ a man:dummynet[4] használatával.
Ez az IPFW szabály engedélyezi a beérkezõ SSH-kapcsolatokat:
[.programlisting]
....
ipfw add allow tcp from any to me 22 in via $ext_if
....
Az IPFILTER tûzfalat Darren Reed dolgozta ki. Nem csak FreeBSD alatt találkozhatunk vele, több operációs rendszerre is portolták, többek közt NetBSD-re, OpenBSD-re, SunOS-re, HP/UX-ra és Solarisra.
Ez az IPFILTER parancs engedélyezi a beérkezõ SSH-kapcsolatokat:
[.programlisting]
....
pass in on $ext_if proto tcp from any to any port = 22
....
Az utolsó tûzfal, a PF, az OpenBSD Projekt fejlesztése. A PF eredetileg az IPFILTER leváltására készült. Emiatt a PF szabályainak megadási módja nagyon hasonlít az IPFILTER esetében megismertekhez. A minõségalapú (QoS) forgalomszabályozás létrehozásához a PF az man:altq[4] megoldásával egészíthetõ ki.
Ez a PF parancs engedélyezi a beérkezõ SSH-kapcsolatokat:
[.programlisting]
....
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
....
[[updates]]
== A FreeBSD frissítése
A FreeBSD rendszer háromféleképpen frissíthetõ: forráskódból, binárisan és telepítõlemezek használatával.
A forráskódon keresztüli frissítés ugyan a legbonyolultabb ezek közül, azonban ez kínálja fel egyben a legnagyobb rugalmasságot is. Ennek során szinkronizálnunk kell a FreeBSD forráskódjának nálunk levõ (helyi) másolatát a FreeBSD CVS (Concurrent Versioning System) szervereivel. Miután ez megtörtént, le tudjuk fordítani a rendszermagot és a hozzá tartozó programokat. A források frissítésével kapcsolatban olvassuk el a FreeBSD kézikönyv link:{handbook}#updating-upgrading[frissítésrõl szóló fejezetét].
A bináris frissítés a Linux(R) típusú rendszereken elérhetõ `yum` vagy `apt-get` parancsok esetén megszokottakhoz hasonló. A man:freebsd-update[8] parancs letölti a frissítéseket és telepíti ezeket. Ez a frissítési folyamat a man:cron[8] használatával ütemezhetõ.
[NOTE]
====
Amikor a man:cron[8] segítségével ütemezzük a frissítéseket, a man:crontab[1] állományban lehetõség szerint a `freebsd-update cron` parancsot használjuk, ezáltal igyekezzünk csökkenteni annak valószínûségét, hogy egyszerre több számítógép is ugyanakkor terhelje a szervert.
[.programlisting]
....
0 3 * * * root /usr/sbin/freebsd-update cron
....
====
Az utolsó frissítési módszer, a telepítõlemezek használata lényegében egy egyértelmû folyamat. Indítsuk el számítógépünket a telepítõlemezrõl, és a telepítõben válasszuk a frissítés (upgrade) opciót.
[[procfs]]
== procfs: eltûnt, de nem nyomtalanul
A Linux(R) alatt a [.filename]#/proc/sys/net/ipv4/ip_forward# használatával tudjuk megmondani, hogy az IP-csomagok továbbítása engedélyezett-e rendszerünkben. Mivel a man:procfs[5] a FreeBSD jelenlegi verzióiban már elavultnak számít, ezért ezt a man:sysctl[8] paranccsal nézhetjük meg a rendszer egyéb beállításai mellett. (A `sysctl` viszont Linux(R) alatt is egyaránt megtalálható.)
Ha az IP-csomagok továbbításáról szóló példánál maradunk, akkor az alábbi módon kérdezhetjük le, hogy engedélyezett-e a FreeBSD rendszerünkön:
[source,shell]
....
% sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
....
Az `-a` paraméter megadásával a rendszer összes jelenlegi beállítását le tudjuk kérdezni:
[source,shell]
....
% sysctl -a
kern.ostype: FreeBSD
kern.osrelease: 6.2-RELEASE-p9
kern.osrevision: 199506
kern.version: FreeBSD 6.2-RELEASE-p9 0: Thu Nov 29 04:07:33 UTC 2007
root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
kern.maxvnodes: 17517
kern.maxproc: 1988
kern.maxfiles: 3976
kern.argmax: 262144
kern.securelevel: -1
kern.hostname: server1
kern.hostid: 0
kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 }
kern.posix1version: 200112
...
....
[NOTE]
====
Bizonyos `sysctl`-értékek írásvédettek.
====
Adódhatnak olyan alkalmak, amikor mégis szükségünk lehet a procfs használatára, mint például régi szoftverek futtatása, a rendszerhívások nyomkövetése a man:truss[1] segítségével, vagy a link:{handbook}#linuxemu[bináris Linux kompatibilitás] használata. (Noha a bináris Linux kompatibilitás egy saját procfs állományrendszert, egy man:linprocfs[5] rendszert használ.) A procfs típusú állományrendszerek csatlakoztatásához a következõt kell megadnunk az [.filename]#/etc/fstab# állományban:
[source,shell]
....
proc /proc procfs rw,noauto 0 0
....
[NOTE]
====
A `noauto` beállítás megadásával megakadályozzuk, hogy a [.filename]#/proc# a rendszerindítás során magától csatlakoztatódjon.
====
A procfs típusú állományrendszereket így lehet csatlakoztatni:
[source,shell]
....
# mount /proc
....
[[commands]]
== Gyakori parancsok
[[packageCommands]]
=== A csomagok kezelése
[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Linuxos parancs (Red Hat/Debian)
| A FreeBSD-s megfelelõje
| Leírás
|`yum install csomag` / `apt-get install csomag`
|`pkg_add -r csomag`
|A _csomag_ telepítése egy távoli számítógéprõl
|`rpm -ivh csomag` / `dpkg -i csomag`
|`pkg_add -v csomag`
|Csomag telepítése
|`rpm -qa` / `dpkg -l`
|`pkg_info`
|A telepített csomagok megjelenítése
|===
[[systemCommands]]
=== A rendszer kezelése
[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Linuxos parancs
| A FreeBSD-s megfelelõje
| Leírás
|`lspci`
|`pciconf`
|A PCI-os eszközök megjelenítése
|`lsmod`
|`kldstat`
|A betöltött rendszermagmodulok felsorolása
|`modprobe`
|`kldload` / `kldunload`
|Modulok betöltése és eltávolítása
|`strace`
|`truss`
|A rendszerhívások nyomkövetése
|===
[[conclusion]]
== Lezárás
Bízunk benne, hogy ez a leírás eleget mutatott be ahhoz, hogy elkezdjünk ismerkedni a FreeBSD-vel. Ha az érintett témák még jobban érdekelnek minket, vagy olyanról szeretnénk többet megtudni, ami itt nem szerepelt, akkor mindenképpen olvassunk bele a link:{handbook}[FreeBSD kézikönyvbe].