[转]linux NFS 配置步骤

[不指定 2009/07/06 14:02 | by ipaddr ]
 
NFS server可以看作是一个FILE SERVER,它可以让你的PC通过网络将远端得NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样。
 NFS协议从诞生到现在为止,已经有多个版本,如NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010)。
 二、各NFS协议版本的主要区别
 V3相对V2的主要区别:
 1、文件尺寸
 V2最大只支持32BIT的文件大小(4G),而NFS V3新增加了支持64BIT文件大小的技术。
 2、文件传输尺寸
 V3没有限定传输尺寸,V2最多只能设定为8k,可以使用-rsize and -wsize 来进行设定。
 3、完整的信息返回
 V3增加和完善了许多错误和成功信息的返回,对于服务器的设置和管理能带来很大好处。
 4、增加了对TCP传输协议的支持
 V2只提供了对UDP协议的支持,在一些高要求的网络环境中有很大限制,V3增加了对TCP协议的支持
 *5、异步写入特性
 6、改进了SERVER的mount性能
 7、有更好的I/O WRITES 性能。
 9、更强网络运行效能,使得网络运作更为有效。
 10、更强的灾难恢复功能。
 
 异步写入特性(v3新增加)介绍:
 NFS V3 能否使用异步写入,这是可选择的一种特性。NFS V3客户端发发送一个异步写入请求到服务器,在给客户端答复之前服务器并不是必须要将数据写入到存储器中(稳定的)。服务器能确定何时去写入数据或者将多个写入请求聚合到一起并加以处理,然后写入。客户端能保持一个数据的copy以防万一服务器不能完整的将数据写入。当客户端希望释放这个copy的时候,它会向服务器通过这个操作过程,以确保每个操作步骤的完整。异步写入能够使服务器去确定最好的同步数据的策略。使数据能尽可能的同步的提交何到达。与V2比较来看,这样的机制能更好的实现数据缓冲和更多的平行(平衡)。而NFS V2的SERVER在将数据写入存储器之前不能再相应任何的写入请求。
 
 V4相对V3的改进:
 1:改进了INTERNET上的存取和执行效能
 2:在协议中增强了安全方面的特性
 3:增强的跨平台特性
 三、CLIENT和SERVER的具体操作和设置
 在讲NFS SERVER的运作之前先来看一些与NFS SERVER有关的东西:
 RPC(Remote Procedure Call)
 NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议勇士用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER.所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
 
 NFS需要启动的DAEMONS
 pc.nfsd:主要复杂登陆权限检测等。
 rpc.mountd:负责NFS的档案系统,当CLIENT端通过rpc.nfsd登陆SERVER后,对clinet存取server的文件进行一系列的管理
 NFS SERVER在REDHAT LINUX平台下一共需要两个套件:nfs-utils和PORTMAP
 nfs-utils:提供rpc.nfsd 及 rpc.mountd这两个NFS DAEMONS的套件
 portmap:NFS其实可以被看作是一个RPC SERVER PROGRAM,而要启动一个RPC SERVER PROGRAM,都要做好PORT的对应工作,而且这样的任务就是由PORTMAP来完成的。通俗的说PortMap就是用来做PORT的mapping的。
 
 一:服务器端的设定(以LINUX为例)
 服务器端的设定都是在/etc/exports这个文件中进行设定的,设定格式如下:
 欲分享出去的目录 主机名称1或者IP1(参数1,参数2) 主机名称2或者IP2(参数3,参数4)
 上面这个格式表示,同一个目录分享给两个不同的主机,但提供给这两台主机的权限和参数是不同的,所以分别设定两个主机得到的权限。
 可以设定的参数主要有以下这些:
 rw:可读写的权限;
 ro:只读的权限;
 no_root_squash:登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限,此参数很不安全,建议不要使用。
 root_squash:在登入 NFS 主?C使用分享之目?的使用者如果是 root ?r,那????使用者的?嘞?⒈?嚎s成?槟涿褂谜撸ǔK?UID ? GID 都??成 nobody 那??身份;
 all_squash:不管登陆NFS主机的用户是什么都会被重新设定为nobody。
 anonuid:将登入NFS主机的用户都设定成指定的user id,此ID必须存在于/etc/passwd中。
 anongid:同 anonuid ,但是?成 group ID 就是了!
 sync:资料同步写入存储器中。
 async:资料会先暂时存放在内存中,不会直接写入硬盘。
 insecure 允许从这台机器过来的非授权访问。
 
 例如可以编辑/etc/exports为:
 /tmp     *(rw,no_root_squash)
 /home/public 192.168.0.*(rw)   *(ro)
 /home/test  192.168.0.100(rw)
 /home/linux  *.the9.com(rw,all_squash,anonuid=40,anongid=40)
 设定好后可以使用以下命令启动NFS:
 /etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默认启动的)
 /etc/rc.d/init.d/nfs start
 
 exportfs命令:
 如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:
 exportfs [-aruv]
 -a :全部mount或者unmount /etc/exports中的内容
 -r :重新mount /etc/exports中分享出来的目录
 -u :umount 目录
 -v :在 export 的?r候,将详细的信息输出到屏幕上。
 具体例子:
 [root @test root]# exportfs -rv <==全部重新 export 一次!
 exporting 192.168.0.100:/home/test
 exporting 192.168.0.*:/home/public
 exporting *.the9.com:/home/linux
 exporting *:/home/public
 exporting *:/tmp
 reexporting 192.168.0.100:/home/test to kernel
 
 exportfs -au <==全部都卸载了。
 
 
 
 客户段的操作:
 1、showmout命令对于NFS的操作和查错有很大的帮助,所以我们先来看一下showmount的用法
 showmout
 -a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。
 -e :显示指定的NFS SERVER上export出来的目录。
 例如:
 showmount -e 192.168.0.30
 Export list for localhost:
 /tmp *
 /home/linux *.linux.org
 /home/public (everyone)
 /home/test 192.168.0.100
 2、mount nfs目录的方法:
 mount -t nfs hostname(orIP):/directory /mount/point
 具体例子:
 Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs
 Solaris:mount -F nfs 192.168.0.1:/tmp /mnt/nfs
 BSD: mount 192.168.0.1:/tmp /mnt/nfs
 
 3、mount nfs的其它可选参数:
 HARD mount和SOFT MOUNT:
 HARD: NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到MOUNT上。
 SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。
 例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs
 对于到底是使用hard还是soft的问题,这主要取决于你访问什么信息有关。例如你是想通过NFS来运行X PROGRAM的话,你绝对不会希望由于一些意外的情况(如网络速度一下子变的很慢,插拔了一下网卡插头等)而使系统输出大量的错误信息,如果此时你用的是HARD方式的话,系统就会等待,直到能够重新与NFS SERVER建立连接传输信息。另外如果是非关键数据的话也可以使用SOFT方式,如FTP数据等,这样在远程机器暂时连接不上或关闭时就不会挂起你的会话过程。
 
 rsize和wsize:
 文件传输尺寸设定:V3没有限定传输尺寸,V2最多只能设定为8k,可以使用-rsize and -wsize 来进行设定。这两个参数的设定对于NFS的执行效能有较大的影响
 bg:在执行mount时如果无法顺利mount上时,系统会将mount的操作转移到后台并继续尝试mount,直到mount成功为止。(通常在设定/etc/fstab文件时都应该使用bg,以避免可能的mount不上而影响启动速度)
 fg:和bg正好相反,是默认的参数
 nfsvers=n:设定要使用的NFS版本,默认是使用2,这个选项的设定还要取决于server端是否支持NFS VER 3
 mountport:设定mount的端口
 port:根据server端export出的端口设定,例如如果server使用5555端口输出NFS,那客户端就需要使用这个参数进行同样的设定
 timeo=n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输。默认值是7/10妙(0.7秒)。如果网络连接不是很稳定的话就要加大这个数值,并且推荐使用HARD MOUNT方式,同时最好也加上INTR参数,这样你就可以终止任何挂起的文件访问。
 intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。
 udp:使用udp作为nfs的传输协议(NFS V2只支持UDP)
 tcp:使用tcp作为nfs的传输协议
 namlen=n:设定远程服务器所允许的最长文件名。这个值的默认是255
 acregmin=n:设定最小的在文件更新之前cache时间,默认是3
 acregmax=n:设定最大的在文件更新之前cache时间,默认是60
 acdirmin=n:设定最小的在目录更新之前cache时间,默认是30
 acdirmax=n:设定最大的在目录更新之前cache时间,默认是60
 actimeo=n:将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值,默认是没有启用。
 retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes
 noac:关闭cache机制。
 同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs
 请注意,NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式mount,虽然可以成功mount上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。
 
 
 4、/etc/fstab的设定方法
 /etc/fstab的格式如下:
 fs_spec   fs_file  fs_type   fs_options  fs_dump fs_pass 
 fs_spec:该字段定义希望加载的文件系统所在的设备或远程文件系统,对于nfs这个参数一般设置为这样:192.168.0.1:/NFS
 fs_file:本地的挂载点
 fs_type:对于NFS来说这个字段只要设置成nfs就可以了
 fs_options:挂载的参数,可以使用的参数可以参考上面的mount参数。
 fs_dump - 该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0
 fs_pass - 该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0 。
 
 5、与NFS有关的一些命令介绍
 nfsstat:
 查看NFS的运行状态,对于调整NFS的运行有很大帮助
 rpcinfo:
 查看rpc执行信息,可以用于检测rpc运行情况的工具。
 
 
 
 四、NFS调优
 调优的步骤:
 1、测量当前网络、服务器和每个客户端的执行效率。
 2、分析收集来的数据并画出图表。查找出特殊情况,例如很高的磁盘和CPU占用、已经高的磁盘使用时间
 3、调整服务器
 4、重复第一到第三步直到达到你渴望的性能
 
 
 与NFS性能有关的问题有很多,通常可以要考虑的有以下这些选择:
 
 WSIZE,RSIZE参数来优化NFS的执行效能
 WSIZE、RSIZE对于NFS的效能有很大的影响。
 wsize和rsize设定了SERVER和CLIENT之间往来数据块的大小,这两个参数的合理设定与很多方面有关,不仅是软件方面也有硬件方面的因素会影响这两个参数的设定(例如LINUX KERNEL、网卡,交换机等等)。
 下面这个命令可以测试NFS的执行效能,读和写的效能可以分别测试,分别找到合适的参数。对于要测试分散的大量的数据的读写可以通过编写脚本来进行测试。在每次测试的时候最好能重复的执行一次MOUNT和unmount。
 time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384
 用于测试的WSIZE,RSIZE最好是1024的倍数,对于NFS V2来说8192是RSIZE和WSIZE的最大数值,如果使用的是NFS V3则可以尝试的最大数值是32768。
 如果设置的值比较大的时候,应该最好在CLIENT上进入mount上的目录中,进行一些常规操作(LS,VI等等),看看有没有错误信息出现。有可能出现的典型问题有LS的时候文件不能完整的列出或者是出现错误信息,不同的操作系统有不同的最佳数值,所以对于不同的操作系统都要进行测试。
 
 设定最佳的NFSD的COPY数目。
 linux中的NFSD的COPY数目是在/etc/rc.d/init.d/nfs这个启动文件中设置的,默认是8个NFSD,对于这个参数的设置一般是要根据可能的CLIENT数目来进行设定的,和WSIZE、RSIZE一样也是要通过测试来找到最近的数值。
 
 UDP and TCP
 可以手动进行设置,也可以自动进行选择。
 mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR
 UDP有着传输速度快,非连接传输的便捷特性,但是UDP在传输上没有TCP来的稳定,当网络不稳定或者黑客入侵的时候很容易使NFS的 Performance 大幅降低甚至使网络瘫痪。所以对于不同情况的网络要有针对的选择传输协议。nfs over tcp比较稳定,nfs over udp速度较快。在机器较少网络状况较好的情况下使用UDP协议能带来较好的性能,当机器较多,网络情况复杂时推荐使用TCP协议(V2只支持UDP协议)。在局域网中使用UDP协议较好,因为局域网有比较稳定的网络保证,使用UDP可以带来更好的性能,在广域网中推荐使用TCP协议,TCP协议能让NFS在复杂的网络环境中保持最好的传输稳定性。可以参考这篇文章:http://www.hp.com.tw/ssn/unix/0212/unix021204.asp
 
 版本的选择
 V3作为默认的选择(RED HAT 8默认使用V2,SOLARIS 8以上默认使用V3),可以通过vers= mount option来进行选择。
 LINUX通过mount option的nfsvers=n进行选择。
 
 五、NFS故障解决
 1、NFSD没有启动起来
 首先要确认 NFS 输出列表存在,否则 nfsd 不会启动。可用 exportfs 命令来检查,如果 exportfs 命令没有结果返回或返回不正确,则需要检查 /etc/exports 文件。
 2、mountd 进程没有启动
 mountd 进程是一个远程过程调用 (RPC) ,其作用是对客户端要求安装(mount)文件系统的申请作出响应。mountd进程通过查找 /etc/xtab文件来获知哪些文件系统可以被远程客户端使用。另外,通过mountd进程,用户可以知道目前有哪些文件系统已被远程文件系统装配,并得知远程客户端的列表。查看mountd是否正常启动起来可以使用命令rpcinfo进行查看,在正常情况下在输出的列表中应该象这样的行:
 100005 1 udp 1039 mountd
 100005 1 tcp 1113 mountd
 100005 2 udp 1039 mountd
 100005 2 tcp 1113 mountd
 100005 3 udp 1039 mountd
 100005 3 tcp 1113 mountd
 如果没有起来的话可以检查是否安装了PORTMAP组件。
 rpm -qa|grep portmap
 3、fs type nfs no supported by kernel
 kernel不支持nfs文件系统,重新编译一下KERNEL就可以解决。
 4、can't contact portmapper: RPC: Remote system error - Connection refused
 出现这个错误信息是由于SEVER端的PORTMAP没有启动。
 5、mount clntudp_create: RPC: Program not registered
 NFS没有启动起来,可以用showmout -e host命令来检查NFS SERVER是否正常启动起来。
 6、mount: localhost:/home/test failed, reason given by server: Permission denied
 这个提示是当client要mount nfs server时可能出现的提示,意思是说本机没有权限去mount nfs server上的目录。解决方法当然是去修改NFS SERVER咯。
 7、被防火墙阻挡
 这个原因很多人都忽视了,在有严格要求的网络环境中,我们一般会关闭linux上的所有端口,当需要使用哪个端口的时候才会去打开。而NFS默认是使用111端口,所以我们先要检测是否打开了这个端口,另外也要检查TCP_Wrappers的设定。
 
 
 六、NFS安全
 NFS的不安全性主要体现于以下4个方面:
 
 1、新手对NFS的访问控制机制难于做到得心应手,控制目标的精确性难以实现
 2、NFS没有真正的用户验证机制,而只有对RPC/Mount请求的过程验证机制
 3、较早的NFS可以使未授权用户获得有效的文件句柄
 4、在RPC远程调用中,一个SUID的程序就具有超级用户权限.
 
 加强NFS安全的方法:
 1、合理的设定/etc/exports中共享出去的目录,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT仅仅有最小的权限,最好不要使用root_squash。
 2、使用IPTABLE防火墙限制能够连接到NFS SERVER的机器范围
 iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
 iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
 iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
 iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
 3、为了防止可能的Dos攻击,需要合理设定NFSD 的COPY数目。
 4、修改/etc/hosts.allow和/etc/hosts.deny达到限制CLIENT的目的
 /etc/hosts.allow
 portmap: 192.168.0.0/255.255.255.0 : allow
 portmap: 140.116.44.125 : allow
 
 /etc/hosts.deny
 portmap: ALL : deny
 5、改变默认的NFS 端口
 NFS默认使用的是111端口,但同时你也可以使用port参数来改变这个端口,这样就可以在一定程度上增强安全性。
 6、使用Kerberos V5作为登陆验证系统
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。


作者:KornLee 2005-02-03 15:49:57 来自:Linux先生

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是\"父子\"关系.

~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
--------------------------------------------------------------------------------
在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个(根据不同的linux操作系统的不同,命名不一样),

执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。
如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

因为在 ~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
执行顺序为:/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承
/etc/profile中的变量,他们是"父子"关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
/etc/profile和/etc/environment等各种环境变量设置文件的用处
先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。
将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。
用户环境建立的过程中总是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?
应该是先执行/etc/environment,后执行/etc/profile。
/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。
系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。
对于用户的SHELL初始化而言是先执行/etc/profile,再读取文件/etc/environment.对整个系统而言是先执行/etc/environment。这样理解正确吗?
/etc/enviroment --> /etc/profile --> $HOME/.profile -->$HOME/.env (如果存在)
/etc/profile 是所有用户的环境变量
/etc/enviroment是系统的环境变量
登陆系统时shell读取的顺序应该是
/etc/profile ->/etc/enviroment -->$HOME/.profile -->$HOME/.env
原因应该是jtw所说的用户环境和系统环境的区别了
如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应该是以用户环境为准了。

linux系统locale的设定

[不指定 2009/07/01 14:56 | by ipaddr ]
设定locale   让Linux能够输入中文
locale    软件运行时的语言环境

locale分类:
语言符号及其分类(LC_CTYPE),数字 (LC_NUMERIC),比较和排序习惯(LC_COLLATE),时间显示格式(LC_TIME),货币单位(LC_MONETARY),信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES),姓名书写方式(LC_NAME),地址书写方式(LC_ADDRESS),电话号码书写方式 (LC_TELEPHONE),度量衡表达方式(LC_MEASUREMENT),默认纸张尺寸大小(LC_PAPER)和locale对自身包含信息的概述(LC_IDENTIFICATION)。
eg:
$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"                    #用户所使用的语言符号及其分类
LC_NUMERIC="en_US.UTF-8"                #数字
LC_TIME="en_US.UTF-8"                      #时间显示格式
LC_COLLATE="en_US.UTF-8"                #比较和排序习惯
LC_MONETARY="en_US.UTF-8"             #LC_MONETARY
LC_MESSAGES="en_US.UTF-8"             #信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等
LC_PAPER="en_US.UTF-8"                    #默认纸张尺寸大小
LC_NAME="en_US.UTF-8"                     #姓名书写方式
LC_ADDRESS="en_US.UTF-8"               #地址书写方式
LC_TELEPHONE="en_US.UTF-8"             #电话号码书写方式
LC_MEASUREMENT="en_US.UTF-8"        #度量衡表达方式
LC_IDENTIFICATION="en_US.UTF-8"      #对自身包含信息的概述
LC_ALL=

locale定义文件放在/usr/share/i18n/locales

字符集就是字符,尤其是非英语字符在系统内的编码方式,也就是通常所说的内码,所有的字符集都放在 /usr/share/i18n/charmaps,所有的字符集也都是用Unicode编号索引的。Unicode用统一的编号来索引目前已知的全部的符号。而字符集则是这些符号的编码方式,或者说是在网络传输,计算机内部通信的时候,对于不同字符的表达方式,Unicode是一个静态的概念,字符集是一个动态的概念,是每一个字符传递或传输的具体形式.

Locale 是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]].
生成的locale放在/usr/lib/locale/目录中

自定义locale

优先级的关系
LC_ALL>LC_*>LANG
LC_ALL的值将覆盖所有其他的locale设定

查看zh_CN使用的编码:
/usr/lib/locale/zh_CN/LC_* 说明了使用何种编码

Linux 切换 locale 的四种方法
1) 从CDE登录屏幕上修改locale
选择 options -> languages -> choose the new locale
2) 临时设置locale(shell相关的)
ksh : LANG=<locale>
sh : LANG=<locale>
export LANG
csh : setenv LANG <locale>
bash: export LANG=en_US(zh.GBK)
3) vi /etc/default/init 
add
LANG=<locale>
LC_ALL=<locale>
reboot。
4) .cshrc/.profile/.bashrc: 设置$LANG


Linux Terminal对NLS的支持
前言:虽然通过setenv LANG/LC_ALL让Linux支持NLS界面,但是在Terminal中要显示NLS语言还需要设置Terminal的语言支持来显示命令行的结果显示。
网上搜索结果表明,KDE对NLS支持不是很好,KDE的Konsole找不到方便地设置语言的位置。但是GNOME的Terminal则很方便设置支持语言。

GNOME和KDE的切换
一、设置GNOME或者KDE为默认的启动桌面环境
方法1:修改/etc/sysconfig/desktop,根据需要将“DESKTOP”后面的内容改为KDE或GNOME。
方法2:在当前用户目录下建立“.xinitrc”这个文件(注意文件名前有一个点号,代表建立的是一个隐藏文件),
文件的内容就一行startkde或gnome-session,根据自己的需要选择KDE或GNOME。
二、GNOME和KDE的切换(“#”后面为输入命令)
1.如果需要切换到GNOME:
#switchdesk gnome  
2.如果需要切换到KDE:
#switchdesk kde

修改默认字符集
把default的字符集由utf-8改做GB2312,并 edit smb.conf,加入
[root@btirsvr31 ~]# more /etc/sysconfig/i18n
#LANG="en_US.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
#SYSFONT="latarcyrheb-sun16"

LANG="zh_CN.GB18030"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="latarcyrheb-sun16"

vsftpd.conf 字符集配置
charset_filter_enable=YES
charset_client=GBK
charset_server=UTF8

http://www.ibm.com/developerworks/cn/linux/l-rpm/?S_TACT=105AGX52&S_CMP=tech-51CTO

文分为两部分,第一部分阐述了 rpm 工具的功能以及 rpmbuild 工具,详细的介绍了 spec文件的书写规则以及关键部分,第二部分对一个典型的 spec 文件做了详细的分析。
一 、rpm 介绍

1. 概述

RPM全称是 Red Hat Package Manager(Red Hat包管理器)。几乎所有的 Linux 发行版本都使用这种形式的软件包管理安装、更新和卸载软件。

RPM是一个开放的软件包管理系统。它工作于Red Hat Linux以及其它Linux和UNIX 系统,可被任何人使用。redhat软件公司鼓励其它厂商来了解RPM并在自己的产品中使用它。RPM的发布基于GPL协议。对于最终用户来说,使用RPM所提供的功能来维护系统是比较容易和轻松的。安装、卸载和升级RPM软件包只需一条命令就可以搞定。RPM维护了一个所有已安装的软件包和文件的数据库,可以让用户进行查询和验证工作。在软件包升级过程中,RPM会对配置文件进行特别处理,绝对不会丢失以往的定制信息。对于程序员RPM可以让我们连同软件的源代码打包成源代码和二进制软件包供最终用户使用。

RPM拥有功能强大的查询选项。我们可以搜索数据库来查询软件包或文件。也可以查出某个文件属于哪个软件包或出自哪儿。RPM软件包中的文件是以压缩格式存放的,拥有一个定制的二进制头文件,其中包含有关包和内容的信息,可以让我们对单个软件包的查询简便又快速。

RPM另一个强大的功能是进行软件包的验证。如果我们担心误删了某个软件包中的某个文件,我们就可以对它进行验证。任何非正常现象将会被通知。如果需要的话还可以重新安装该软件包。在重新安装过程中,所有被修改过的配置文件将被保留。

RPM设计目标之一就是要保持软件包的原始特征, 就象该软件的原始发布者发布软件时那样。通过使用RPM我们可以拥有最初的软件和最新的补丁程序,还有详细的软件构建信息。

概括的说:RPM有五种基本的操作功能(不包括创建软件包):安装、卸载、升级、查询、和验证。关于rpm命令的使用我们可以用以下命令:

[root@hostname root]rpm -help

来获的。

2.RPM工具功能

1) 安装

rpm -i ( or --install) options file1.rpm ... fileN.rpm 通过rpm -ivh可以把rpm软件包安装到系统中,当然也可以使用不同的参数选项,笔者建议使用-ivh ,使用该选项可以解决大部分rpm软件包的安装,至于详细的参数说明可用查看rpm的man 文档。

2 )删除

rpm -e ( or --erase) options pkg1 ... pkgN 如果某个软件包你再也不想使用了,那就用以上这个命令彻底的把你指定的rpm软件包清除掉把。

3 )升级

rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm 由于开源软件更新速度快,用户当然要使用最新版本的软件包,此时最合适的就是rpm升级功能,当然最理想的参数选项就是-Uvh。

4 )查询

rpm -q ( or --query) options 实际上我们通常使用rpm工具最多的功能还是它的查询功能,比如查看软件包的版本、依赖关系等软件包的详细说明都要用到。最有用的参数选项是-qpi。

5 )校验已安装的软件包

rpm -V ( or --verify, or -y) options 一般我们可用通过该命令来验证已安装软件包,根据笔者的经验该命令一般没什么用途,只做一个了解就ok了。

3.spec文件规范

能熟练掌握以上命令以及部分参数含义,管理日常的rpm软件包就不成问题了。然而随着Linux风靡全球,越来越多的开发者喜欢采用RPM格式来发布自己的软件包。那么RPM软件包是怎样制作的呢?对大多数Linux开发工程师来说是比较陌生的。

其实,制作RPM软件包并不是一件复杂的工作,其中的关键在于编写SPEC软件包描述文件。要想制作一个rpm软件包就必须写一个软件包描述文件(SPEC)。这个文件中包含了软件包的诸多信息,如软件包的名字、版本、类别、说明摘要、创建时要执行什么指令、安装时要执行什么操作、以及软件包所要包含的文件列表等等。

描述文件说明如下:

(1) 文件头

一般的spec文件头包含以下几个域:

Summary:
用一句话概括该软件包尽量多的信息。

Name:
软件包的名字,最终RPM软件包是用该名字与版本号,释出号及体系号来命名软件包的。

Version:
软件版本号。仅当软件包比以前有较大改变时才增加版本号。

Release:
软件包释出号。一般我们对该软件包做了一些小的补丁的时候就应该把释出号加1。

Vendor:
软件开发者的名字。

Copyright:
软件包所采用的版权规则。具体有:GPL(自由软件),BSD,MIT,Public Domain(公共域),Distributable(贡献),commercial(商业),Share(共享)等,一般的开发都写GPL。

Group:
软件包所属类别,具体类别有:
Amusements/Games (娱乐/游戏)
Amusements/Graphics(娱乐/图形)
Applications/Archiving (应用/文档)
Applications/Communications(应用/通讯)
Applications/Databases (应用/数据库)
Applications/Editors (应用/编辑器)
Applications/Emulators (应用/仿真器)
Applications/Engineering (应用/工程)
Applications/File (应用/文件)
Applications/Internet (应用/因特网)
Applications/Multimedia(应用/多媒体)
Applications/Productivity (应用/产品)
Applications/Publishing(应用/印刷)
Applications/System(应用/系统)
Applications/Text (应用/文本)
Development/Debuggers (开发/调试器)
Development/Languages (开发/语言)
Development/Libraries (开发/函数库)
Development/System (开发/系统)
Development/Tools (开发/工具)
Documentation (文档)
System Environment/Base(系统环境/基础)
System Environment/Daemons (系统环境/守护)
System Environment/Kernel (系统环境/内核)
System Environment/Libraries (系统环境/函数库)
System Environment/Shells (系统环境/接口)
User Interface/Desktops(用户界面/桌面)
User Interface/X (用户界面/X窗口)
User Interface/X Hardware Support (用户界面/X硬件支持)

Source:
源程序软件包的名字。如 stardict-2.0.tar.gz。

%description:
软件包详细说明,可写在多个行上。

(2)%prep段

这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令,命令可以有很多行,如我们常写的tar解包命令。

(3)build段

本段是建立段,所要执行的命令为生成软件包服务,如make 命令。

(4)%install段

本段是安装段,其中的命令在安装软件包时将执行,如make install命令。

(5)%files段

本段是文件段,用于定义软件包所包含的文件,分为三类--说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别。

(6)%changelog段

本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发布的软件包中,以便查询之用。每一个修改日志都有这样一种格式:第一行是:* 星期 月 日 年 修改人 电子信箱。其中:星期、月份均用英文形式的前3个字母,用中文会报错。接下来的行写的是修改了什么地方,可写多行。一般以减号开始,便于后续的查阅。

4.打包

如果想发布rpm格式的源码包或者是二进制包,就要使用rpmbuild工具(rpm最新打包工具)。如果我们已经根据本地源码包的成功编译安装而写了spec文件(该文件要以.spec结束),那我们就可以建立一个打包环境,也就是目录树的建立,一般是在/usr/src/redhat/目录下建立5个目录。它门分别是BUILD、SOURCE、SPEC、SRPM、RPM。其中BUILD目录用来存放打包过程中的源文件,SOURCE用来存放打包是要用到的源文件和patch,SPEC用来存放spec文件,SRPM、RPM分别存放打包生成的rpm格式的源文件和二进制文件。当然我们可以根据需要来选用不同的参数打包文件,笔者总结如下3条。

1) 只生成二进制格式的rpm包
rpmbuild -bb xxx.spec
用此命令生成软件包,执行后屏幕将显示如下信息:(每行开头为行号)

1 Executing: %prep
2 + umask 022
3 + cd /usr/src/dist/BUILD
4 + exit 0
5 Executing: %build
6 + umask 022
7 + cd /usr/src/dist/BUILD

生成的文件会在刚才建立的RPM目录下存在。

2)只生成src格式的rpm包

rpmbuild -bs xxx.spec

生成的文件会在刚才建立的SRPM目录下存在。

3) 只需要生成完整的源文件

rpmbuild -bp xxx.spec

源文件存在目录BUILD下。

读者朋友可能对这个命令不太明白,这个命令的作用就是把tar包解开然后把所有的补丁文件合并而生成一个完整的具最新功能的源文件。

4) 完全打包

rpmbuild -ba xxx.spec

产生以上3个过程分别生成的包。存放在相应的目录下。

软件包制作完成后可用rpm命令查询,看看效果。如果不满意的话可以再次修改软件包描述文件,重新运行以上命令产生新的RPM软件包。

二.典型spec文件分析

通过第一部分的介绍,我们对软件包的管理以及spec文件的一些细节应该掌握的差不多了,接下来通过分析kaffeine.spec(kaffeine是linux平台下的媒体播放器)文件来让读者朋友实践一回spec文件的规范和书写。

Kaffeine.spec文件内容如下:

%define debug_package %{nil}
Name:         kaffeine
Version:        0.4.3
Release:        25
Summary:        A xine-based Media Player for KDE
Group:          Applications/Multimedia
License:        GPL
URL:            http://kaffeine.sourceforge.net/
Source0:        kaffeine-0.4.3.tar.bz2
Source1:        logo.png
Source2: icon.tgz
Source3:        kaffeine.desktop
Source4:        codecs.tgz
Patch: kaffeine-0.4.3-fix-hide-crash.patch
Patch1:kaffeine-0.4.3-without-wizard.patch
BuildRoot:      /var/tmp/kaffeine-root
%description
Kaffeine is a xine based media player for KDE3. It plays back CDs,
DVDs, and VCDs. It also decodes multimedia files like AVI, MOV, WMV,
and MP3 from local disk drives, and displays multimedia streamed over
the Internet. It interprets many of the most common multimedia formats
available - and some of the most uncommon formats, too. Additionally,
Kaffeine is fully integrated in KDE3, it supports Drag and Drop and
provides an editable playlist, a bookmark system, a Konqueror plugin,
a Mozilla plugin, OSD an much more.

以上这部分就是我们第一部分所说的文件头。这一部分主要包括软件包的名称、版本、源代码和patch等信息,通过这些关键字我们可以一目了然。查看以上内容,我们会全面了解该软件包。

接下来的这一个段就是核心部分,涉及到解包、补丁、编译、安装的过程。

%prep
%setup -q
%patch -p1
%patch1 -p1
%Build
make -f admin/Makefile.common cvs
./configure --prefix=/usr
make
#for mo files
pushd po
rm *.gmo
make
popd
%install
mkdir -p $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/share/services
cp $RPM_BUILD_ROOT/usr/share/apps/kaffeine/mms.protocol $RPM_BUILD_ROOT/usr/share/services
cp $RPM_BUILD_ROOT/usr/share/apps/kaffeine/rtsp.protocol $RPM_BUILD_ROOT/usr/share/services
#mkdir -p $RPM_BUILD_ROOT/usr/lib/firefox/plugins
#cp $RPM_BUILD_ROOT/usr/lib/kaffeineplugin/kaffeineplugin.so
$RPM_BUILD_ROOT/usr/lib/firefox/plugins
cp %{SOURCE1} $RPM_BUILD_ROOT/usr/share/apps/kaffeine
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine.png
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine-pause.png
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine-play.png
rm -rf $RPM_BUILD_ROOT/usr/share/icons/hicolor/*/apps/kaffeine-record.png
mkdir -p $RPM_BUILD_ROOT/usr/share/icons/crystalsvg
tar zxvf %{SOURCE2} -C $RPM_BUILD_ROOT/usr/share/icons/crystalsvg
mkdir -p $RPM_BUILD_ROOT/usr/share/applnk/App/Multimedia
cp -r %{SOURCE3} $RPM_BUILD_ROOT/usr/share/applnk/App/Multimedia
mkdir -p $RPM_BUILD_ROOT/usr/lib/win32
tar zxvf %{SOURCE4} -C $RPM_BUILD_ROOT/usr/lib/win32
%clean
rm -rf $RPM_BUILD_ROOT
%post
ln -s /dev/cdrom /dev/dvd
ln -s /dev/cdrom /dev/rdvd
%files
%defattr(-,root,root)
/usr

这部分内容与所要打的包有关系,我们要根据具体情况来写出编译过程。这部分内容是最复杂的内容,当然,我们也可以看出,这样的写法其实就是在写一种规范化的脚本,说到脚本,读者朋友门就应该领会到这部分内容的灵活性了。

%changelog
* Fri Jul 1  2005 AiLin Yang <alyang@redflag-linux.com> -0.4.3-25
- modified the fullscreen bottom control panel
* Fri Jun 17 2005 xxx <xxx@redflag-linux.com> -0.4.3-24
- Modified to use xshm as video driver.
* Thu Jun 16 2005 AiLin Yang <alyang@redflag-linux.com>
- delete the option of Embed in system tray in configwidget
* Tue Jun 14 2005 AiLin Yang <alyang@redflag-linux.com>
- add fullscreen bottom control panel
- update kaffine to support my fullscreen bottom control panel

这部分内容可以说是spec文件的最后内容了,它对团队软件开发以及后续的软件维护至关重要,它相当于一个日志,记录了所有的基于该软件包的修改、更新信息。




小结

在Linux下RPM软件包的管理与RPM软件包的制作关键在rpm工具的使用和spec描述文件的起草。要想制作一个RPM格式的软件包必须编写软件包描述文件。其标准命名格式为:软件名-版本号-释出号.spec,这个文件详细描述了有关该软件包的诸多信息,如软件名,版本,类别,说明摘要,创建时要执行什么指令,安装时要执行什么操作,以及软件包所要包含的文件等等。有了这个文件RPM就可以制作出相应的rpm软件包。



关于作者

杨爱林,Linux 研发工程师, 通过 alyang@redflag-linux.com 可以跟他联系。

http://blogs.msdn.com/ie/archive/2009/05/06/session-cookies-sessionstorage-and-ie8.aspx

For Internet Explorer 8, we’ve made browser session handling a lot simpler.  For instance, say you want to have two Hotmail windows open, each logged into a different account.  Simply click the New Session item on the File menu, and a new browser window will open.  The new browser window will not share session cookies with the original browser window, so you can log into Hotmail (and most web applications) as a different user.  For command line junkies, you can run iexplore.exe with the -nomerge parameter.

In contrast, if you click New Window, New Tab, or Duplicate Tab on the File menu, or click on a desktop shortcut, the new tab or window will share session cookies with the original tab.  This is called “session merging.”

Why do browsers implement Session Merging?

Proper support for Session Merging is important because most web applications are written to expect it.  For instance, when a web application opens a popup window, it usually does so with the expectation that the popup window will share cookies with the main window, so that the user will remain logged in and their preferences will remain available, etc.  Similarly, when the user uses the Duplicate Tab command, they reasonably expect the new tab to show them the same content as the original tab-- sharing cookies is critical for that scenario to work correctly. 

On the other hand, the authors of the HTML5 draft noted that cookie sharing across windows and tabs can introduce some problems:

For example, a user could be buying plane tickets in two different windows, using the same site. If the site used cookies to keep track of which ticket the user was buying, then as the user clicked from page to page in both windows, the ticket currently being purchased would "leak" from one window to the other, potentially causing the user to buy two tickets for the same flight without really noticing.

For that reason, the HTML5 sessionStorage feature is designed such that even tabs within the same browser session have independent storage objects.  If you change a sessionStorage attribute’s value in one tab, that change won’t be reflected within another tab, even within the same browser session.  In contrast, the localStorage attribute behaves more like a persistent cookie—changes to localStorage attribute’s values are reflected in all browser tabs within all active (and future) browser sessions.

I’ve created a simple test page which you can use to explore session merging and IE8’s New Session option.

Source:
http://kbase.redhat.com/faq/FAQ_79_9558.shtm

Issue:
Why is the fdisk utility not allowing me to create a partition that is greater than 2TB in size?

Symptom:
fdisk unable to create partition greater than 2 TB

Solution:
The fdisk utility can only create partitions that does not exceed 95,000 cylinders or 2TB size. To get around the limitation, the partition needs to be created using parted with GPT as its disklabel.

GUID Partition Table (GPT) was originally introduced for iA64 systems. Currently parted is the only partitioning tool under Linux that can handle > 2TB partition and GPT disklabel.

The example below demonstates how to create a 3TB partition:

1. Run parted:

parted /dev/sdj

2. Once at the "parted" prompt, change the disklabel to gpt:

mklabel gpt

3. Create the 3 TB partition:

mkpart primary 0 3001G
(一直漂注:可以使用mkpart primary 0 -1将整个硬盘分给第一个分区)
(使用rm删除已有分区)

4. Save the changes and quit:

quit

5. Afterwards, create the filesystem:

mkfs.ext3 /dev/sdj1


在redhat的系统下,我们经常实用chkconfig来管理开机进程。

在Ubuntu下,想要调整开机进程(添加一个或者删除一个服务)我们都比较头疼,得手动到不同的运行等级里mv一下,把S改成K或者把K改成S,

为此心烦不已,但是现在有了sys-rc-conf!让我们一起步入新时代。对于debain系统。安装真是非常简单,在新立得软件包立查找,添加,应用。或者直接

sudo apt-get install sysv-rc-conf

就完成了安装。

sudo sysv-rc-conf就可以对不同runlevel下的进程进行管理了。。可视化做得比chkconfig还爽。。太方便了

(鱼漂补充:Redhat还可以使用ntsysv来管理开机进程)

I am now building rpms on, and using a multi-lib arch (x86_64) for the first time ... when using the standard command:

rpm -qa | grep pkg_name

The results might be pkg_name.i386 or pkg_name.x86_64 ... or both.  But, the way it is shown by the default query format, looks the same ... like this:

pkg_name
pkg_name
----------------------------
example:

[root at x86-64 ~]# rpm -qa | grep popt

popt-1.9.1-21
popt-1.9.1-21
----------------------------

To fix this problem on multi-lib machines (and change the default query format), you can change your .rpmmacros (or create a .rpmmacros) in your user home directory and add this line:

%_query_all_fmt %%{name}-%%{version}-%%{release}.%%{arch}

---------------------------
Now the result of the above example is:

[root at x86-64 ~]# rpm -qa | grep popt

popt-1.9.1-21.x86_64
popt-1.9.1-21.i386
---------------------------

By the way, you can also use --queryformat like this:
rpm -q --queryformat='%{NAME}-%{VERSION}.%{ARCH}\n'

Linux下硬件分析工具

[不指定 2009/05/10 00:52 | by ipaddr ]
Linux下硬件分析工具

一、列出PCI, USB设备
可以使用lspci列出所有的PCI设备,使用lsusb列出所有的USB设备,两者都可以使用-v, -vv获得更详细的硬件信息。使用--help查看更多的选项。
可以使用lshw显示详细硬件信息,使用lshw -html > ipaddr.html以HTML格式输出到ipaddr.html

二、列出硬盘分区
fdisk -l /dev/sda

parted /dev/sda 后,再使用print显示分区信息

可以使用smartctl获取硬盘的smart信息。

三、检测硬件
Redhat下有一个Kudzu工具,可以检测到新安装的硬件
可以使用lsmod列出Linux加载了哪些模块和驱动有;使用modprobe加载模块。

四、查看BIOS信息
可以使用以下命令查看BIOS信息:
biosdecode
dmidecode

---------------------------
以下内容来自互联网:
---------------------------
系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态
用户
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务

  Fstab 文件大家都很熟悉,Linux 在启动的时候通过 fstab 中的信息挂载各个分区,一个典型的分区条目就像这样:
  /dev/sdb5 /mnt/usb vfat utf8,umask=0 0 0
  /dev/sda4 为需要挂载的分区,sda4 是 Linux 检测硬盘时按顺序给分区的命名,一般来讲,这个名称并不会变化,但是如果你有多块硬盘,硬盘在电脑中的顺序变化的时候,相同的名称可能代表着不同的硬盘分区,如果你是从 USB 设备启动,与其他 USB 设备的插入顺序也会导致分区识别的困难。
  这个时候 UUID 就派上用场了,UUID 全称是 Universally Unique Identifier,也就是说,每个分区有一个唯一的 UUID 值,这样就不会发生分区识别混乱的问题了。
  在 fstab 中用 UUID 挂载分区,看起来向这样:
  UUID=1234-5678 /mnt/usb vfat utf8,umask=0 0 0
  在 UUID= 后面填入分区相应的 UUID 值,就可以正确挂载分区了。
  那么,我们如何知道一个分区的 UUID 呢?
  有 3 种方法:
  1. 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息。
  # ls -l /dev/disk/by-uuid/
  ------
  lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> ../../sdb5
  lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -> ../../sda4
  .....
  2. 通过 vol_id 命令。
  # vol_id /dev/sdb5
  ID_FS_USAGE=filesystem
  ID_FS_TYPE=vfat
  ID_FS_VERSION=FAT32
  ID_FS_UUID=0909-090B
  ID_FS_UUID_ENC=0909-090B
  ID_FS_LABEL=SWAP
  ID_FS_LABEL_ENC=SWAP
  ID_FS_LABEL_SAFE=SWAP
  3. 通过 blkid 命令
  # blkid /dev/sdb5
  /dev/sdb5: LABEL="SWAP" UUID="0909-090B" TYPE="vfat"
  通过这三种方法都可以获得分区的 UUID,UUID 依据分区不同,长度和格式都不相同。
分页: 4/12 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]