中国网管论坛's Archiver

小圈 发表于 2007-11-13 13:10

总结一下,希望对新手有用。(不断加入中)申精

这里写的只是容易引起对新手迷糊的地方。如果你是老手或系统程序员就不要在这里浪费时间了。为了方便我每次根据我的时间写一点点,有空就不断加入内容。
        第一次从何处写起呢?算了还是想到什么写什么吧!首先我们来说一个问题,就是我们装软件有些程序装了会在菜单生存并左边有个图标,有的只有文字没图标。有的装了什么也没有,以至刚学linux的(一般刚学的都装了桌面环境)都不知如何来运行自已装的程序。
    首先你用这个系统你要明白一个道理,这是全世界的程序员打造的系统。不是哪家公司的,所以很多标准无法统一。发行版众多,各个发行版都有自家的包管理。弄得新手认为在linux下装软件都有很多种认为很难弄懂。加上gnu下图形开发的程序语言也很多,桌面环境也很多。在不同环境下开发也各自应用自已的库。如kde用到qt库,gnome用到gtk库。再加上不断升级,如gtk,有的软件是在gtk1下开发的就要gtk1的库。有的软件是在gtk2下开发的就要gtk2的库。不管是用包管理来装软件还是自已用源码编译,一般装之前都会检查你相依的。一般现在在线包管理器都会自动安装你差的。手动源码安装就要你自已找了。(gentoo的emerge也会自动给你把差的安上)。说了这么多,你感觉很乱,其实这也是linux的一种特点吧。用win你象在逛一个商店。用linux你象在逛一个城市的商店,就连小卖部都在逛。所以你要更熟悉各种商品。不同商店的制度和服务。
    说到上面你应该明白一些了吧,现在回到正题。我们就以gnome为例吧,我们如何来管好自已的菜单。首先我们进入gnome桌面就初始化了一些变量。大部份配置在/etc下。如X11 , gnome ,gconf等这些目录,当然不一定是这些目录,不同发行版就不一样,这是一种自由但也容易引起初学者混乱。在/etc下这些配置定义了相关内容,如各种初始默认变量,搜索路径等。多数都是xml语法。这里就不详说了,我们只明白一个原理就行了,如在菜单里初始一个软件名字的内容。我们现在以一个普通身分登入,他有一个默认搜索图标文件的位置,一般在/usr/share/applications/下后缀都是desktop的。现在以这个gnome下的文本编辑器为例,用vi 把这个gedit.desktop打开如下:
[Desktop Entry]
Encoding=UTF-8
Name=Text Editor
Name[af]=Teksredigeerder
Name[am]=የጽሑፍ ማቀናጃ
Name[ar]=محرّر نصوص
Name[az]=Mətn Editoru
Name[be]=Рэдактар тэкстаў
Name[bg]=Текстов редактор
Name[bn]=টেক্সট এডিটার
Name[bn_IN]=টেক্সট এডিটার
Name[br]=Aozer Skridoù
Name[bs]=Tekst editor
Name[ca]=Editor de text
Name[cs]=Textový editor
Name[cy]=Golygydd Testun
Name[da]=Tekstredigering
Name[de]=Texteditor
Name[dz]=ཚིག་ཡིག་ཞུན་དགཔ།
Name[el]=Επεξεργαστής Κειμένου
Name[en_CA]=Text Editor
Name[en_GB]=Text Editor
Name[es]=Editor de textos
Name[et]=Tekstiredaktor
Name[eu]=Testu-editorea
Name[fa]=ویرایشگر متن
Name[fi]=Tekstieditori
Name[fr]=Éditeur de texte
Name[ga]=Eagarthóir Téacs
Name[gl]=Editor de texto
Name[gu]=લખાણ સંપાદક
Name[he]=עורך טקסט
Name[hi]=पाठ संपादक
Name[hr]=Uređivač teksta
Name[hu]=Szövegszerkesztő
Name[hy]=Տեքստի խմբագրիչ
Name[id]=Penyunting Berkas Teks
Name[is]=Texta Ritill
Name[it]=Editor di testo
Name[ja]=GNOME テキスト・エディタ
Name[ka]=ტექსტის რედაქტორი
Name[kn]=ಪಠ್ಯ ಸಂಪಾದಕ
Name[ko]=텍스트 편집기
Name[lt]=Tekstų redaktorius
Name[lv]=Teksta Redaktors
Name[mg]=Fanovana lahabolana
Name[mk]=Уредувач за текст
Name[ml]=രചന ചിട്ടപ്പെടുത്തല്‍‌ ഉപാധി
Name[mn]=Текст боловсруулагч
Name[mr]=पाठ्य संपादक
Name[ms]=Editor Teks
Name[nb]=Tekstredigering
Name[ne]=पाठ संपादक
Name[nl]=Tekst-editor
Name[nn]=Tekstredigering
Name[or]=ପାଠ୍ଯ ସମ୍ପାଦକ
Name[pa]=ਪਾਠ ਸੰਪਾਦਕ
Name[pl]=Edytor tekstu
Name[pt]=Editor de Texto
Name[pt_BR]=Editor de Texto
Name[ro]=Editor de text
Name[ru]=Текстовый редактор
Name[rw]=Umuhinduzi w'inyandiko
Name[sk]=Textový editor
Name[sl]=Urejevalnik besedil
Name[sq]=Editues teksti
Name[sr]=Вилењакова бележница
Name[sr@Latn]=Vilenjakova beležnica
Name[sv]=Textredigerare
Name[ta]=உரை பதிப்பான்
Name[th]=เครื่องมือแก้ไขข้อความ
Name[tk]=Metin Editçi
Name[tr]=Metin Düzenleyici
Name[uk]=Текстовий редактор
Name[vi]=Bộ soạn thảo văn bản
Name[wa]=Aspougneu di tecse
Name[xh]=Umhleli wombhalo
Name[zh_CN]=文本编辑器
Name[zh_HK]=文字編輯器
Name[zh_TW]=文字編輯器
Comment=Edit text files
Comment[af]=Redigeer tekslêers
Comment[am]=የጽሑፍ ፋይሎች ያስተካክሉ
Comment[ar]=حرّر ملفات نصية
Comment[az]=Mətn fayllarını redaktə edin
Comment[be]=Зьмяніць тэкставыя файлы
Comment[bg]=Редактиране на текстови файлове
Comment[bn]=টেক্সট ফাইল সম্পাদনা
Comment[bn_IN]=টেক্সট ফাইল সম্পাদনা
Comment[br]=Kemmañ restroù-skrid
Comment[bs]=Izmijeni tekstualne datoteke
Comment[ca]=Editeu fitxers de text
Comment[cs]=Úprava textových souborů
Comment[cy]=Golygu ffeiliau testun
Comment[da]=Redigér tekstfiler
Comment[de]=Textdateien bearbeiten
Comment[dz]=ཚིག་ཡིག་ཡིག་སྣོད་ ཞུན་དག་རྐྱབས།
Comment[el]=Επεξεργασία αρχείων κειμένου
Comment[en_CA]=Edit text files
Comment[en_GB]=Edit text files
Comment[es]=Edite archivos de texto
Comment[et]=Tekstifailide redigeerimine
Comment[eu]=Editatu testu-fitxategiak
Comment[fa]=ویرایش پرونده‌های متنی
Comment[fi]=Muokkaa tekstitiedostoja
Comment[fr]=Édite des fichiers texte
Comment[ga]=Eagar comhad Téacs
Comment[gl]=Editar ficheiros de texto
Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો
Comment[he]=ערוך קבצי טקסט
Comment[hi]=पाठ फ़ाइलें संपादित करें
Comment[hr]=Uređivanje tekstualne datoteke
Comment[hu]=Szövegfájlok szerkesztése
Comment[id]=Edit berkas teks
Comment[it]=Modifica file di testo
Comment[ja]=テキスト・ファイルを編集します
Comment[ka]=ტექსტური ფაილების რედაქტირება
Comment[kn]=ಪಠ್ಯ ಕಡತಗಳನ್ನು ಸಂಪಾದಿಸು
Comment[ko]=텍스트 파일을 편집합니다
Comment[lt]=Redaguoti tekstines rinkmenas
Comment[lv]=Rediģēt teksta failus
Comment[mg]=Hanova raki-dahabolana
Comment[mk]=Уреди текстуални датотеки
Comment[ml]=ടെക്സ്റ്റ് ഫയലുകളില്‍ മാറ്റം വരുത്തുക
Comment[mn]=Текст файл боловсруулах
Comment[mr]=पाठ्य फाइल संपादित करा
Comment[ms]=Edit fail teks
Comment[nb]=Rediger tekstfiler
Comment[ne]=पाठ फाइललाई संशोधन गर्नुहोस्
Comment[nl]=Tekstbestanden bewerken
Comment[nn]=Rediger tekstfiler
Comment[or]=ପାଠ୍ଯ ଫାଇଲଗୁଡ଼ିକୁ ସମ୍ପାଦନ କରନ୍ତୁ
Comment[pa]=ਪਾਠ ਫਾਇਲਾਂ ਸੋਧੋ
Comment[pl]=Edytor plików tekstowych
Comment[pt]=Editar ficheiros de texto
Comment[pt_BR]=Edite arquivos de texto
Comment[ro]=Editare fişiere text
Comment[ru]=Редактор текстовых файлов
Comment[sk]=Úprava textových súborov
Comment[sl]=Urejanje datotek z besedili
Comment[sq]=Përpuno files teksti
Comment[sr]=Уређивач текстуалних докумената
Comment[sr@Latn]=Uređivač tekstualnih dokumenata
Comment[sv]=Redigera textfiler
Comment[ta]=உரை கோப்புகளை திருத்தவும்
Comment[th]=แก้ไขแฟ้มข้อความ
Comment[tk]=Metin faýllary editle
Comment[tr]=Metin dosyalarını düzenle
Comment[uk]=Редактор текстових файлів
Comment[vi]=Soạn thảo tập tin văn bản
Comment[wa]=Asspougnî des fitchîs tecses
Comment[xh]=Hlela iifayili zombhalo
Comment[zh_CN]=编辑文本文件
Comment[zh_HK]=編輯文字檔
Comment[zh_TW]=編輯文字檔
Exec=gedit %U
Terminal=false
Type=Application
StartupNotify=true
MimeType=text/plain;
Icon=text-editor
Categories=GNOME;GTK;Application;Utility;TextEditor;
X-GNOME-DocPath=gedit/gedit.xml
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=gedit
X-GNOME-Bugzilla-Component=general
X-GNOME-Bugzilla-Version=2.16.2
这个看是很多,用到不多。Encoding指定的编码。Name就是显示的在菜单栏文字。他是根据你进系统使用的语言环境显示的,Comment就是你放在这个上面的如文本编辑器就提示编辑文本文件Exec=gedit %U就是调用的命令,如果你PATH没有这个路径,你可以在这儿写决对路径。Terminal=false不在终端执行。Type类型。tartupNotify=true在菜单栏显示。Icon=text-editor图标名字,后面就是定义的在菜单栏具体哪一项等。一般情况下如果你想定义一项可以打开一个例子自已写,注意一下这几个就行了,Name 就是你想在菜单里想要的文字,如果你用的语言刚好你把这项弄掉如Name[zh_CN]=文本编辑器他就会以英文显示,Exec就是你想执行软件命令,如果不是很清楚写成决对路径。Icon就是旁边的图标。他会在/usr/share/pixmaps找这个图标如
text-editor,如果没得这个名字的图标他就不显。所以改菜单图标很是简单。但是一般建议不在这里改,在用户目录的.themes和.icons里改。你可以去下一个主题,然后看下里面是怎样写的要不了多久就会明白。如果用户这个目录有相应的设置就会用户目录里的代替。这些都是/etc下一些配置文件和一些环境变量定义的。
  现在问题又来了,如果这些*.desktop在/usr/local/share以及/opt/*****/share以及~/home/***/share我们又如何让他在菜单栏里显。这个跟一个环境变量设置的路径有关,这么说还有一些问题又来了,我安装了一些软件没在那个默认目录也没在这个环境变量设置的路径里。也没给他创建相应的连接到这些目录为何装好后菜单里也有这项内容?这就是linux吧要有多自由就多自由,今天就差不多了吧,下次有空再说这两个问题。

小圈 发表于 2007-11-13 13:11

我想了一下,这样没弄过顺序我也不好写,我就重开机写起吧,因为我是直接在论坛上写的,也没仔细检查核实难免有很多错误,给爱好linux系统一个快速进入的过程。
  今天写开机到叫输用户名和密码这一节。各个发行版的具体位置有可能不一样,反正是撑握一个原理过程就行了,我现在要的一些例子是从我的lfs系统cp出来的,有可能和你不一样,但大体差不多。我们不深入某个问题的细节上去,不然就没得完了。这样对你对我都好大家相当有一个重头到尾的学习过程。
  机子加电后首先bios自检,根据cmos里的设置搜索处于活动状态可引导的设备。假入硬盘主引导记录(mbr)是grub,这样就启动了grub这个微系统。他会去读menu.lst这个配置文件。大部份系统都有个grub.conf这个文件,但menu.lst是这个grub.conf的连接。如果配置文件出错,就不会显示grub那个菜单栏,而进入到命令模式。这些好象我以前写过,就不详说了,不清楚可以本论坛搜一下。
  当我们在grub选了linux内核那一项就开始加载linux内核了,当核内核完成后首先加载的是一个init程序。所以他的进程编号pid永远是1。可用top命令查看。我们先说说init在哪个包里。他是你装的Sysvinit包,这个包有如下一些内容:

bootlogd 把启动信息记录到一个日志文件
halt   正常情况下等效于 shutdown 加上 -h 参数(当前系统运行级别是 0 时除外)。它将告诉内核去中止系统,并在系统正在关闭的过程中将日志记录到 /var/log/wtmp 文件里。
init   当内核已经初始化硬件,接管引导程序,开启指令线程时,init 会被第一个启动。
killall5 发送一个信号到所有进程,但那些在它自己设定级别的进程将不会被这个运行的脚本所中断。
last   给出哪一个用户最后一次登录(或退出登录),它搜索 /var/log/wtmp 文件,出给出系统引导、关闭、运行级别改变等信息。
lastb   给出登失败的尝试,并写入日志 /var/log/btmp
mesg   控制是否允许其他用户也有向系统所有用户发送信息的权限
mountpoint 检查给定的目录是否是一个挂载点
pidof   报告给定程序的PID号
poweroff 告诉内核中止系统并且关闭系统(参见 halt)
reboot   告诉内核重启系统(参见 halt)
runlevel告前一个和当前的系统运行级别,并且将最后一些运行级别写入 /var/run/utmp
shutdown 系统安全关闭,向所有线程发送关闭信号并且通知所有已经登录的系统用户系统即将关闭。
sulogin 允许 root 登录,它通常情况下是在系统在单用户模式下运行时,由 init 所派生。
telinit 告诉 init 将切换到那一个运行级
utmpdump以一个多用户友好的方式列出已经给出的登录文件的目录
wall   向所有已经登录的用户写入一个信息

这里init会根据/etc/inittab配置文件来执行一些脚本进行系统初始化,下面是我的:

# Begin /etc/inittab

id:5:initdefault:   默认启动运行的级别,这个5就可以改成你想进入模式。

si::sysinit:/etc/rc.d/init.d/rc sysinit 这一项定义了启动各种级别都要运行的共同部分的脚本,如设置主机名,path等

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3   
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6   我这里定义了7种运行级别,一般系统都是。

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin 允许root登录,单模式下,

1:2345:respawn:/sbin/agetty -I '\033(K' tty1 9600
2:2345:respawn:/sbin/agetty -I '\033(K' tty2 9600
3:2345:respawn:/sbin/agetty -I '\033(K' tty3 9600
4:2345:respawn:/sbin/agetty -I '\033(K' tty4 9600
5:2345:respawn:/sbin/agetty -I '\033(K' tty5 9600
6:2345:respawn:/sbin/agetty -I '\033(K' tty6 9600 这里定义的控制台个数

# End /etc/inittab

各种级别的用途一般发行版都是这样的:但也可以完全不这样,要据自已情况定:
运行级别0 停止整个系统
运行级别1 单用户或管理模式
运行级别2 多用户模式;部分网络服务被启动。
运行级别3 正常模式,启动所有的网络服务
运行级别4 用户定义的模式,可以使用该级别来定制所需要运行的服务
运行级别5 图形模式
运行级别6 重启动
  大部份用户一般就在3和5这里转换。如果你想知道你当前的运行级别:可以 who -r 来查看。
这里我们说说这些运行级别到底执行了哪些脚本,在哪里执行。我们可以看看上面的0-6是不是前面有个rc的命令路径,我的在/etc/rc.d/init.d/这个目录有个rc 脚本。我现在是5就是运行的这一行:l5:5:wait:/etc/rc.d/init.d/rc 5
实际就是运行rc这个脚本给个参数5,你可以用你的系统看一下,有可能名字不一样。我们先进rc5这个目录用ls -l 看一下如下:
lrwxrwxrwx 1 root root 18 12-24 06:27 S10sysklogd -> ../init.d/sysklogd
lrwxrwxrwx 1 root root 14 01-10 19:32 S20dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root 17 12-24 06:27 S20network -> ../init.d/network
lrwxrwxrwx 1 root root 19 01-12 18:13 S21haldaemon -> ../init.d/haldaemon
lrwxrwxrwx 1 root root 15 01-17 00:00 S25pppoe -> ../init.d/pppoe
lrwxrwxrwx 1 root root 16 01-22 17:47 S25random -> ../init.d/random
lrwxrwxrwx 1 root root 15 01-22 20:06 S40fcron -> ../init.d/fcron
lrwxrwxrwx 1 root root 13 12-26 02:31 S70gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root 13 01-11 23:12 S95gdm -> ../init.d/gdm
看左边,所有都是指向init.d这个目录的连接,所以全部脚本都在init.d这个目录。我们这里顺便说下连接也许你明白硬连接和软连接,但决对路径和相对路径连接你明白吗。大家都知道cd ..是回到级目录,那下面你看有什么区别:
cd /home/mm/ss/
ln -s aa /home/mm/bb/kk
ln -s aa ../bb/kk
第二个连接就是说bb上几级路径改名也不会出现断连。

这个init.d目录根据你装系统内容不同,各个发行版脚本的写法有可能不同。但原理是一样的。以S开头就是要执行的脚本启动相应的程序服务,以K开头的就是杀死关闭相应的服务。这里看不到以K开头的,你进运行级别6重启目录就可以看到了。所以你在菜单系统-关机-重启就是调用了运行级别6。所以这样你完全可以根据自已来定义各种级别运行的内容。比如我想用运行级别3就进入图形界面,我的图形登录用的是gdm,这样我就在运行级别3作个到init.d/gdm的符号连接。另外忘了说了S,K后面的数字是启动的顺序和停止顺序。启动从小到大,K当然就是从大到小了。我的pppoe拔号总是有点小问题,所以我写了个放在init.d目录,其它0-6目录做相应符号连接,开始启动这个就用S开头,结束就用K开头比如在运行级别6就是以K开头的符号连接。我们现在打开一个来看看,就打开pppoe吧,内容:

#!/bin/sh
# Begin $network_devices/services/pppoe
. /etc/sysconfig/rc
. $rc_functions

case "$1" in
    start)
          boot_mesg "Bringing up the ADSL interface..."
          /usr/sbin/pppoe-start
          evaluate_retval
          progressbar 75 (这个没什么用,我加的起动画面进度条执行先后顺序)
          ;;

    stop)
          boot_mesg "Bringing down the ADSL interface..."
          /usr/sbin/pppoe-stop
          evaluate_retval
          progressbar 80
          ;;

    restart)
    ${0} stop
    sleep 1
    ${0} start
    ;;

    *)
          echo "Usage: $0 {start|stop|restart}"
          exit 1
          ;;
esac

# End $network_devices/services/pppoe
上面 start , stop , restart 都是系统脚本的参数,里面就是一些相关的内容了。比如我给他作了个符号连接到5用图形登就自动连上网,如果你想断开某个服务。不用重启到其它模式,可以手动运行,如断掉网络连接,停掉这个服务就行了,执行下面命令:
/etc/rc.d/init.d/pppoe stop
其它的应该明白了吧,就是写下决对路径 加上 stop ,start ,restart 就是停掉,开始,重启。但你得看下各个脚本用的参数有可能不一样。
  这样如果你想起动时运行一个程序,写个相应的脚本放到init.d 目录然后给你的启动级别的目录做个相应的的连接就行了。所以上面几个运行级别你完全可以自已定义,可以互换,修改。根据你的情况把默认的级别想启动的都启动,相停的都停掉。无非做个连接或删掉连接。(这前面就相当于开机自动运行的)。如果你启动后,发现想关一些服务或想开一些服务。就到/etc/rc.d/init.d手动执行就行了。
  好了,继续,其它相应的执行完后就会这一步,执行login命令,这个就会叫你输入用户名和密码。当然图形登录如用gdm登录,过程有点复杂,装这个会相关很多包,gdm不同配置也相关很多内容,现在写这里有点过早。就到这里吧,上面的不同发行版有可能略有不同,反正就从/etc/inittab这个文件入手,看一下应该知道其它的了。不同启动风格的脚本也可能不同,如bsd启动脚本的风格我也重没用过。反正就是明白一个道理,活学活用,根据自已系统,多看看/etc 下的配置文件,多加练习就慢慢熟悉了。你才会感到这个系统想怎么玩就怎么玩。

hahatiger 发表于 2007-11-13 13:12

沙发,我是新手,学习了

lulu-bitscn 发表于 2007-11-13 13:46

顶一下

我是菜鸟

iamshiyu 发表于 2007-11-13 22:41

太好了,多谢lz的经验了。
对于rc.d下面的那些东西有了更深入的认识……:lol
另外那个pppoe的系统服务中,evaluate_retval是什么?
楼主能否给介绍下你编的那个progressbar的内容和用途?:loveliness:

chenpingchen 发表于 2007-11-15 15:58

希望多点这中帖,和大家共同进步。

ljsdjj1122 发表于 2007-11-27 14:06

红包送上,继续努力

网尽天下美女 发表于 2007-11-28 00:42

进来支持一下

页: [1]

Powered by Discuz! Archiver 6.1.0  © 1999-2008 bbs.bitsCN.com