免得重新编译安装,作一个备份.
标签:Linux
学习Advanced Bash-Scripting Guide(即:高级Bash脚本编程指南)
shell脚本在unix,linux世界是一种重要和基础的技术,你看看linux中大量的系统配置文件都是shell脚本就知道了。它对这类系统的灵活和高效起着非常大的作用。
用好linux就必须有shell脚本编程的能力。
为此,我特地把学习这本电子书作为一个独立的目标,这个目标是学习linux总目标的一个分目标。
学习教程:《Advanced Bash-Scripting Guide》
学习时间:有空就看,不限时间。
准备学习两遍,第一遍粗看,看英文版,对其中的全部例子过一遍;第二遍看中文版,细看重点,并纠正自己的英文理解错误,争取学英语和学shell编程一举两得。
随时把学习心得和问题记成日记,并把英文的疑问也记下来。
欢迎有兴趣、有需要的朋友加入到这个学习目标的进行中来,大家互相交流和进步。
几个有趣的shell和一个执行结果有问题的shell
这两天在看那本讲bash编程的电子书。
在这本电子书中有几个有趣的shell脚本。
1、(abs-guide-3.7/HTML/sha-bang.html)
在一个文本文件的前面加上:#!/bin/more 就可以让文本文件自己显示自己; 在一个文件前面加上:#!/bin/rm 就可以自己删除自己;
2、找出存储设备的某类文件并把它们打包:
(abs-guide-3.7/HTML/special-chars.html)
find . -mtime -1 -type f -print0 | xargs -0 tar rvf "bak.tar"
3、一个执行结果不像书上说的那样的shell:
(abs-guide-3.7/HTML/special-chars.html)
|
从DOS引导linux系统
据说,linux本身的多重引导程序lilo和grub非常优秀了。但是,总还有优秀的事物无法解决的问题。巧得很,我就碰到两台机子不得不从DOS引导。
一台是单位的p4 1.8G, 40G, 256M, Windows XP的机器,挂了一块10G的redhat linux9.0;不知原来装Windows XP时用什么分的区,grub程序始终不能引导Windows XP;用pqmagic报告是分区表有问题,但是使用起来一切正常。
另一台是老掉牙床的486DX100, 28M,212M 装的win97,用来给小孩练打字;1.6G,装的是没有X图形界面的redhat linux9.0,在没有机器用的时候可以学习一下linux的脚本编程。但是老机只能从C或A启动,而且,那块1.6G的硬盘不知什么问题,不能设为主盘,只能是从盘或者single模式;老主板的另一个硬盘接口又不能用(一个叫LBA,一个叫AT,这个叫AT的不能用),最后只能从Windows 97下来引导linux了。
从DOS下引导linux需要一个叫作loadlin.exe的文件,你可以在下面下载到;
把loadlin.exe和你的linux系统需要启动的核心,比如:vmlinuz,和那个影像文件叫:initrd.img(如果有的话) 放在一个文件夹中,比如C:\linux文件夹中。
然后把一个DOS的批处理文件linux.bat放到比如:C盘中。
这样,当你进入纯DOS状态时(不是图形界面下的DOS),输入C:\linux.bat,就可以启动系统了。
我的linux.bat的内容:
|
上面这个办法是我从slackware发行包中的那个zipslack文件夹中学到的。zipslack是一个简化的linux,可以拷在一个windows分区中在dos状态下引导。这是关于zipslack的信息:http://www.slackware.org/zipslack/
|
Linux服务器网卡驱动安装及故障(转帖)
转自:http://www.ccw.com.cn/server/yyjq/htm2005/20050817_15OF4_3.htm
Linux服务器网卡驱动安装及故障排除
2005-08-17 16:04:42.107
计世网特约撰稿 曹江华
3.为新网卡设定IP地址
在Linux 网络设备在配置时被赋予别名,该别名由一个描述性的缩略词和一个编号组成。某种类型的第一个设备的编号为 0,其他设备依次被编号为 1、2、3,等。但是网卡并
不是最为裸设备出现在/dev目录下,而是存在内存中。eth0, eth1是以太网卡接口。它们用于大多数的以太网卡,包括许多并行端口以太网卡。本文主要讨论这类网卡。 为Linux以太网卡设定IP地址的方式非常灵活,你可以选择适合你工作情况的方法:
(1)使用ip或ifconfig命令
ifconfig命令是最重要的Linux网络命令,最主要的用途是设定、修改网卡的IP地址,修改网卡ip地址:
#ifconfig eth0 192.168.0.2 netmask 255.255.255.0
默认情况下, ifconfig 显示活动的网络设备。给这个命令添加一个 -a 开关就能看到所有设备。但是ifconfig命令设置网络设备的ip地址系统重新启动后设置会自动失效。所以它主要用于网卡状态调试。假设您要建立一个临时的网络配置以供测试。您可以使用发行版本中的工具来编辑配置,但是需要注意在完成测试之后,将所有设置恢复回去。通过使用 ifconfig ,我们无需影响已保存的设置,就能够快速地配置网卡。
Ip命令是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具。例如:ifconfig、route等。现在,绝大多数 Linux 发行版和绝大多数 UNIX都使用古老的arp, ifconfig和route命令。虽然这些工具能够工作,但它们在Linux2.2和更高版本的内核上显得有一些落伍。使用iproute2前你应该确认已经安装了这个工具。这个包的名字在RedHat Linux 9.0叫作“iproute2”,也可以在:ftp://ftp.inr.ac.ru/ip-routing/ 下载源代码安装。
如果希望在以太网接口eth0上增加一个地址10.0.0.1,掩码长度为24位,标准广播地址,标签为eth0:Alias:
#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias
(2)使用 netconfig命令
netconfig命令可以设置网络设备的ip地址,netconfig命令可以永久保存设置。
使用方法是:“netconfig ethX”。使用命令“netconfig eth0”后会在命令行下弹出一个对话框,这时即可进行设定见图2,
图2 netconfig配置界面
设定结束后用“tab”键选择“OK”即可保存设置并且退出。然后使用命令:“service network restart “激活即可生效。
(3)使用neat命令
使用neat命令需要配置好X window系统,在命令行下运行“neat”命令后添加IP地址和其他相关参数后保存设置,从新启动网络和网络服务或计算机,见图-3。
图-3 图形界面添加IP地址
另外neat命令还有一个同价命令:“redhat-config-network”,二者完全相同。Neat和redhat-config-config命令可以永久保存设置。
(4)修改TCP/IP网络配置文件
除非另行指定,Red Hat Linux 系统中大多数配置文件都在 /etc 目录中。网卡相关的TCP/IP网络配置文件是:/etc/sysconfig/network-scripts/ifcfg-ethx。其中x从0开始,第一个以太网配置文件即:/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi编辑器修改这个文件,也可以修改网卡IP地址。
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #设定网卡的名称,要跟文件名称对应 #
ONBOOT=yes #是否在开机的的时候启动网卡#
BOOTPROTO=static #启动的时候的 IP 取得的协议,这里是固定的,
如果是动态主机的话,要改成 dhcp 才行#
IPADDR=192.168.1.2 #IP 地址#
NETMASK=255.255.255.0 #子网掩吗#
NETWORK=192.168.1.0 #该网段的第一个 IP#
BROADCAST=192.168.1.255 #最后一个同网段的广播地址#
GATEWAY=192.168.1.2 #网关地址#
#GATEWAYDEV=eth0
存盘后使用命令:“service network restart “激活即可生效。这个方法同样可以永久保存设置。
(5)为网卡添加IPV6地址
和Windows系统相比Linux对Ipv6的支持更好,最早的支持Ipv6的Linux内核是 2.2.xxx。一般Linux基于2.4内核的Linux发行版本都可以直接使用Ipv6,使用前要看系统IPv6模块是否被加载,如果没有的话可以使用命令手工加载,这需要超级用户的权限。然后使用命令检测,如果显示IPv6地址(inet6 addr:fe80::200:e8ff:fea0:2586/64)证明IPv6已经加载。
# modprobe IPv6;#ifconfig -a
如果希望Linux系统启动时自动加载Ipv6模块,可以在配置文件:/etc/modules.conf中加入一行:
alias net−pf−10 ipv6 # automatically load IPv6 module on demand
把Redhat linux9.0运行在486DX100上了
没有装X图形界面的原来装在K6-2 450,mvp3主板上的Redhat linux9.0的1.6G的硬盘,不经修改就挂到一台老掉牙的486DX100,24M内存的机器上了。可以运行字符界面下面的所有程序。包括:vi,w3m,emacs等等。
今天,就在这台机器上看了那本讲bash编程的电子书(老婆学会了上网聊天,这几天的兴趣正浓,把那台好点的机器给占了),现学现用,把zhcon命令加入到/etc/profile文件的结束处,用户登录后就自动进入zhcon中文的控制台环境了。这就是bash编程教程的第一个例程的功效,bash的最简单的作用就是把一组命令组合在一起来完成一个任务,以后执行这个任务就执行这个bash脚本就是了,不必单独的输入一个一个的命令。
另外,由于这台机器的内存太少了,参照前段时间收藏的一篇讲系统服务的文章把/etc/rc3.d里面不必要的服务的前面的S通通换成K,这样,前面是K的服务就不会启动了。
我的启动级别是3,rc3.d里面的内容如下:
|
vi/vim 键盘图 (转帖)
转自:http://blog.linuxsky.net/3000/viewspace_1278_aid_279.html
图片故事
原贴地址: http://www.linuxsir.org/bbs/showthread.php?t=257834
献给vi的初学者!
英文源文件来自: http://www.viemu.com/
请注意:
1、不能代替通过文档学习,因为图片无法涵盖vi的所有功能
2、无法用几个中文字表达#、*、t等功能键的用法,只能保留英文
3、由于制作工具原因,中文未选用合适的粗体,哪位有时间帮忙做一下
简体中文pdf下载
简体中文SVG文件下载 英文源图
对岸的jserv在此基础上又制作了繁体版,见这儿http://blog.linux.org.tw/jserv/
如何扫描检查Linux磁盘(转帖)
如何扫描检查Linux磁盘
Wikipedia,自由的百科全书
Linux提供了一个磁盘检查工具,当磁盘出现错误的时候可以使用fsck对磁盘进行扫描和修复。以下让我们看看如何使用
fsck来检查磁盘分区。
fsck使用很简单,首先让我们看看fsck常用的参数:
-t : 给出文件系统格式(例如:vfat,ext3等),如果文件系统格式在 /etc/fstab 中已经定义或 Kernel 本身已经支持,则无需使用参数。
-A : 对/etc/fstab 中所有挂载的分区进行检查。
-C : 显示完整的检查进度。
-d : 显示 e2fsck 的 Debug 结果。
-p : 如果使用 -A 参数,则同时有多个 fsck 扫描并行工作。
-R : 如果使用 -A 参数,则省略 / 分区不检查。
-V : 详细显示模式。
-a : 如果扫描发现错误则自动尝试修复。
-r : 如果扫描发现错误则提示用户,由用户决定是否修复(交互模式)。
举例:
需要对所有以挂载的分区进行扫描,并且让系统自动修复所有错误。
# fsck -A -C -d -V -a
注意!
1. 如果磁盘含有NTFS分区,则不要对其进行扫描,否则有可能导致NTFS分区彻底损坏!
2. 建议在进行扫描前关闭所有服务!不要有磁盘写操作,否则可能导致磁盘分区检查失败甚至分区损坏!
总之,对于Linux系统经验相对较少的用户还是不推荐使用fsck进行检查的,fsck有一定的风险。如果磁盘分区出现异常最好还是求助于有经验的技术人员。
Do I do need try many linux distribution versions?
I have tried Redhat linux9.0, Ubuntu linux6.0.6, and, I want to try some another versions, like: Debian, slackware, Gentoo, etc..
I ask myself, do I do need try these things?
Of course, I will encouter many questions when I try a new linux distribution version, just like I am being encountered by trying ubuntu after I have being used Redhat linux9.0 some time, I resolved one by one matters, such as Chinese Input Method under Emacs, text console, compiling kernel, etc..
Now, I am aware of, that is, I have no need to try these things.
My goal is the jobs on the OS, not the OS itself.
Yes, I believe I can resolve all incoming matthers at last, I believe my ability. But, it really is a useless thing!
So, I stop this no end's action. I am back, back to my Redhat linux9.0, Ubuntu is a nice linux distribution, but it isn't a good choice for me: fisrt, my computer is too old, running it is a difficult thing; second, the high level auto installing software's style isn't prefer for me, I wish all the things is under control. when I runing: apt-get install ***, I can't know where my software to go? what place they go? third, there are always some little questions bother me, like chinese input method under text console and emacs, compiling kernel, etc..
So, ubuntu is a good but is a bit green apple for me, today, I have removed it from my computer, replace it by redhat linux9.0.
I think, I won't try other distribution versions, working on redhat9.0 is enough for me.
菜鸟编译内核(kernel2.6.0)(转)
转自:http://www.linuxbyte.net/view.php?skin=art&ID=3627
转载者前言:因为我的redhat linux9.0一直不能用手机U盘,一直想升级内核来解决这个问题,但是看了一些高手的文章,头都大了。只好放弃。我是菜鸟,看了这篇文章后,决定好像可以一试,所以就转载于此准备时候试一下。
正文
××××××××××××××××××××××××××××××××××××××××××××
[ZT]菜鸟编译内核(kernel2.6.0)
转贴自:linux技术中坚站(http://www.chinalinuxpub.com/)
http://www.chinalinuxpub.com/read.htm?id=1377
本文以RedHat9.0为平台 作者:飘雪心辰 2004年1月15日深夜
下载源代码
Linux内核总是不断发展的,最新的内核kernel2.6.0对USB2.0予以正式的支持,以及内核模块文件后缀最显著的一个变化由*.o到*.ko等等,我们可以从www.kernel.org下载到tarball的源代码包。
前期准备
大家都知道的要先升级“module-init-tools“软件包,否则的话,等你安装内核模块文件的时候,系统会提示你:Warning: you may need to install module-init-tools See http://www.codemonkey.org.uk/post-h...4.21-23.src.rpm
进入下载目录下并安装:
#rpm -e --nodeps modutils (强行卸载原有的modutilsRPM包)
#rpm -ivh modutils-2.4.21-23.src.rpm (把源代码包安装到了/usr/src/redhat目录下)
#cd /usr/src/redhat/SPECS (进入规范文件目录下)
#rpmbuild --bb modutils.spec (生成二进制的RPM包)
#cd ../RPMS/i386 (转入刚生成的二进制的RPM包所在位置)
#rpm -ivh modutils*.rpm (刚生成两个[modutils-2.4.21-23.i386.rpm与modutils-debuginfo-2.4.21.23.i386.rpm]二进制的RPM包,一起安装吧!)
因为是在RedHat9.0的平台,RedHat的用户可能还会遇到一些麻烦,我会慢慢说的,除了要以上的升级之外,还有个文件(/etc/rc.d/rc.sysinit)可能有缺陷,因为/proc/ksyms文件在新内核(kernel2.6.0)中已经没有了,打开文件命令如下:
#vi /etc/rc.d/rc.sysinit
找到:
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then
USEMODULES=y
fi
替换成:
if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null; then
USEMODULES=y
fi
也就是把“&& [ -f /proc/ksyms ]”去掉,保存文件(操作之前最好做备份以免删错,这个文件是系统初始脚本,重要的很),这样子内核才能加载模块,当然能启动iptable防火墙了,否则防火墙在新内核中启动时红色的“failed“非常醒目。(请在新内核中核查/proc/sys/kernel/modprobe中的内容是不是: /sbin/modprobe,也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)。下面开始构造新内核。
一、准备源代码
1、下载到tarball包之后,将内核tarball包复制到/usr/src目录下,假定包在当前目录中,运行以下命令:
#cp linux-2.6.0.tar.gz /usr/src
2、转到/usr/src目录并解开tarball包,
#cd /usr/src
#tar xvzf linux-2.6.0.tar.gz
3、如果你还下载了补丁包,则打上补丁,你也可以运行scripts/patch-kernel脚本文件自动打上补丁(准备好补丁包)或 #zcat patch-2.6.0.gz|patch -p1(我偷懒不打补丁的)。
二、定制内核
定制内核是门很大的学问,需要大量的硬件知识,特别是2.6.0的内核,如果你从2.4.N配置文件装载进去的,的确,很多人遇到过麻烦。我是重新配置文件(X窗口服务器进行),配制内核之前请清理源代码树,如果还没有进入/usr/src/linux-2.6.0目录,请进入此目录,命令如下:
#make mrproper (刚解开的tarball包不需此步骤)
#make gconfig (需要Gtk开发库的支持)
或make config
或make xconfig(需要Qt开发库的支持)
注意:如果你是ext3文件系统,则在定制内核配置文件时把对Ext3、Ext2文件的支持直接编译进内核,否则,等你启用新内核时机器就会当掉,出错信息如下:kernel panic : no init found ,try passing init = option to kernel......或者是:kernel panic:VFS:Unable to mount root fs on unknown-block(0,0),我一开始不知道,编译了好几次,系统总给我冷板凳坐,最后把对Ext3、Ext2文件系统的支持直接编译进内核,才解决此问题,还有把对“Module unloading“选项也选上,否则的话,你在新内核环境下无法卸载内核模块(rmmod命令不能用)。
三、编译内核及模块
定制好的内核配置文件(/usr/src/linux-2.6.0/.config)之后,激动的时刻到来了,编译内核及模块,
#make (此命令已完成make bzImage及make modules的工作),
bzImage内核文件在arch/i386/boot目录中,你的CPU不同内核文件存放位置也不同,我是Intel的CPU。
注意:我在RedHat7.2平台时曾出现无法编译的出错信息,出错信息如下:
/tmp/cc2Hu7sH.s:3: Error: Unknown pseudo-op: `.incbin'
make[1]: *** [usr/initramfs_data.o] Error 1
make: *** [usr] Error 2,
重新装了个9.0的才解决此问题。
说明:make命令在我的1.6GHz,128M的机器上跑了足足27分钟。
四、安装模块及内核文件
#make modules_install install
以上这个命令可以分解成make modules_install与make install,make modules_install安装内核模块到/lib/modules/2.6.0下。make install完成mkinitrd命令及内核(bzImage)和System.map的拷贝,请查看/boot目录,文件名是有区别的,如是GRUB 引导器,make install命令已帮你自动修改了引导选项,对于LILO则要手工修改,重写引导记录。
说明:make modules_install install这个命令在我的1.6GHz,128M的机器上只跑了三十几秒,很快的哦。
五、后记
最后的工作就是重启系统(#shutdown -r now),检验一下你的劳动成果吧。差点忘了还有一点,可能对你很重要,进入新内核之后我发现rpm命令不能用了,原来这是RPM的一个Bug,特别是对于RH9的用户,请打开/etc/profile文件,命令如下:
#vi /etc/profile (在文件的末尾加上几句如下)
if [`uname -r`="2.6.0" ];then
export LD_ASSUME_KERNEL=2.2.5
fi
也就是给系统加上一个全局的环境变量,也可直接键入#export LD_ASSUME_KERNEL=2.2.5。
使用新内核可能出现的问题及对策:
1、新内核根本起不来,解决方法:重新配置内核(学问挺大),也许还根引导记录有关(很少了);
2、新内核模块无法加载,会导致很多问题,比如了防火墙没法工作了,mount不上光盘和vfat及ntfs文件系统,其解决方法:升级module- init-tools软件包(我是modutils-2.4.21-23.src.rpm包),RedHat的用户可能还要修改 /etc/rc.d/rc.sysinit文件;
3、RedHat用户rpm命令不能使用,解决办法:请把变量在全局配置文件中声明。
好了,伟大的工程终于完工了。如果那位仁兄对我以上的步骤还有疑义或者更好的建议的话,请发E-mail:qzhou9887@hotmail.com也可QQ:44773295。