中文怎么发音
Ubuntu 有奔头,乌版图
Fedora 费德勒,菲朵拉
Debian 迪扁,德槟
CentOS 桑托斯 森头斯  
   
Linux发展历史:
1) RedHat ---> 1.RedHat
               2.CentOS
               3.Fedora  桌面图形系统
   
   rpm, yum 命令

2) Debian ---> 1.Debian
               2.Ubuntu  桌面图形系统
               3.Knoppix
   
   apt-get, dpkg
   
3) Slackware --->

================================
使用find和wc命令统计代码行数
================================
wc -l `find . -name "*.js" | xargs`

查看当前目录下文件的个数 ls -l | grep "^-" | wc -l
查看当前目录下文件的个数,包括子目录里的。
ls -lR| grep "^-" | wc -l
查看某目录下文件夹(目录)的个数,包括子目录里的。
ls -lR| grep "^d" | wc -l

ls -l       长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)
grep "^-"   这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d
wc -l       统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数

=======================================
KB与KIB,free命令输出的是KB,不是KIB
=======================================
KB:
kilobyte(千字节),常写作KB或K,是一种资讯计量单位,现今通常在标示内存等具有一般容量的储存媒介之储存容量时使用。
1KB = 1,000Byte
1MB = 1,000KB
1GB = 1,000,000(106)KB
1TB = 1,000,000,000(109)KB
KIB:
Kibibyte是一种资讯计量单位,代表1024字节,即210字节,一般简称为KiB。Kibibyte是自来英文 kilo binary byte 的缩写,意思为“千位二进制字节”。
1KiB = 1,024Byte
1MiB = 1,024KiB
1GiB = 1,024MiB = 1,048,576 (10242)KiB
1TiB = 1,024GiB = 1,073,741,824 (10243)KiB
Byte:
字节,英文名称是Byte。Byte是Binary Term的缩写。一个字节代表八个比特。它是通常被作为计算机信息计量单位,不论被存储数据的类型为何。
Bit:
位(英语:Bit),亦称二进制位,指二进制中的一位,是信息的最小单位。Bit是Binary digit(二进制数位)的缩写
1个字节(Byte)——8个位(bit)
1个字(Word)——16个位(bit)

================================
configure,make,make install
================================
这里也简单介绍一下在Linux/Unix下安装软件的源码三部曲,在后面我们会经常看到它们的身影。
./configure  
make  
make install

./configure是用来检查环境变量及配置编译选项的,
make是用来将源代码编译成二进制文件的,
make install则会将make编译出来的文件安装到指定位置(或默认位置)。

tail -f SystemOut.log 可以实时观测 最新产生的log,会不停的刷新屏幕。
tar -zvxf v4.tar   解压
ll     并不是linux下一个基本的命令,它实际上是ls -l的一个别名
ll -a 显示隐藏目录。
dmesg|less  查询linux内核启动时的信息
less /var/log/dmesg

在linux递归删除某个文件夹(svn)的命令:
find . -name ".svn" -type d | xargs rm -rf 或者
find . -name ".svn" -type d -print -exec rm -rf {} ;

(1) "."表示从当前目录开始递归查找。
(2) “ -name "svn" "根据名称来查找。
(3) " -type d "查找的类型为目录
(4) "-print" 输出查找的文件目录名
(5) 最主要的是是-exec了,-exec选项后边跟着一个所要执行的命令,表示将find出来的文件或目录执行该命令。
exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{},一个空格和一个/,最后是一个分号。

find . -name "*.o"  | xargs rm -f
可以通过管道命令来操作,先find出主目录下想删除的文件,然后通过“xargs”这个构造参数列表并运行命令。
find named/ -name *.bak | xargs rm -f

find . -name ".svn" -type d | xargs rm -rf

==============================================
管道和命令替换的区别是:
==============================================
管道:      管道符号"|"左边命令的输出作为右边命令的输入
命令替换:  将命令替换符"``"中命令的输出作为其他命令相应位置的参数

# pstree -p `ps -e | grep server | awk '{print $1}'` | wc -l
这里利用了管道和命令替换,
就是说用``括起来的命令会优先执行,然后以其输出作为其他命令的参数,
上述就是用 ps -e | grep server | awk '{print $1}' 的输出(进程号),作为 pstree -p 的参数

--------------------
nohup 命令
--------------------
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
nohup就是不挂断的意思( no hang up)。
用途 LINUX命令用法,不挂断地运行命令。

nohup Command [ Arg ... ] [ & ]

nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。
要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,
那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.file文件中。
使用 jobs 查看任务。
使用 fg %n 关闭。

--------------------
nohup 与&区别
--------------------
1)普通的一些程序,& 结尾,终端关闭,那么程序也被关!
2)单是&, 后台运行,你关掉终端会停止运行 
3)nohup command &  后台运行,你关掉终端也会继续运行
4)一个很明显的区别是,&得后台,是终端关闭,自己也会退出,而nohup 则相当于一个独立的后台进程。 
5)nohup执行的话,不管终端机怎么操作,后台会一直执行 但是如果单&的话,终端机突然掉电或是拔网线时,后台会被堵死,无法运行

Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:
    /usr/local/mysql/bin/mysqld_safe –user=mysql &
但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,
那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:
    nohup /root/start.sh &
在shell中回车后提示:
    [~]$ appending output to nohup.out
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。
咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。
在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:
    他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;   **************重点****
    而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。
这个细节有人和我一样没注意到,所以在这儿记录一下了。

AIX, Linux下将脚本放到后台执行——加nohup与不加nohup的区别:
 
1)对于Linux下来说,当在系统上执行下面的命令,将test.sh脚本放到后台执行
    /location/test.sh &
此时,分两种情况考虑问题,
一:继续执行exit命令退出当前session, 则 test.sh这个脚本仍然在Linux系统里面运行,
二:不执行exit命令退出,而直接断开当前连接,则 test.sh脚本会立即退出

如果使用下面命令,将test.sh脚本放到后台执行
    nohup /location/test.sh &
则,针对上面的两种情况来说,test.sh脚本都会继续在系统上运行,所以,不管什么时候如果想把脚本放到后台执行,都需要使用nohup 和 & 命令。

2)对于AIX下来说,当在系统上执行下面的命令,将test.sh脚本放到后台执行
    /location/test.sh &
此时,按照上面Linux系统下的两种情况来看
一:继续执行exit命令退出当前session, 第一次会提示"You have running jobs", 再次执行exit后,test.sh脚本也将停止运行
二:不执行exit命令退出,而直接断开当前连接,则 test.sh脚本会立即退出

如果使用下面命令,将test.sh脚本放到后台执行
    nohup /location/test.sh &
则针对上面的两种情况来说,test.sh脚本都会继续在系统上运行。

------------------------------------------------
查找目录下的所有文件中是否含有某个字符串 
------------------------------------------------
find .|xargs grep -ri "IBM" 
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 
find .|xargs grep -ri "IBM" -l 
1.正则表达式  
  (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/、*、?等)组成。 
  (2)基本元字符集及其含义 
      ^ :只匹配行首。   如^a 匹配以a开头的行abc,a2e,a12,aaa,...... 
      $ :只匹配行尾。   如^a 匹配以a结尾的行bca,12a,aaa,....... 
      * :匹配0个或多个此单字符。 如(a)* 匹配 空,a,aa,aaa,.... 
      [] :只匹配[]内字符。可以是一个单字符,也可以是字符序列,用","将里面要匹配的不同字符串分开。也可以使用-来表示[]内字符序列的范围,如[1-5]表示[12345] 
      \ :只用来屏蔽一个元字符的特殊含义。 如\*,\',\",\|,\+,\^,\. 等 
      .:(点)只匹配任意单字符。 
      pattern\{n\}:只用来匹配前面pattern出现的次数.n为次数。如a\{2\}匹配aa. 
      pattern\{n,\}:含义同上,但次数最少为n.如a\{2,\}匹配aa,aaa,aaaa,..... 
      pattern\{n,m\}:含义同上,但次数在n和m之间。如a\{2,4\}匹配aa,aaa,aaaa三个 
  (3)举例说明: 
      ^$ :匹配空行 
      ^.$ :匹配包含一个字符的行 
    \*\.pas :匹配以*.pas结尾的所有字符或文件 
    [0123456789]或[0-9] :假定要匹配任意一个数字 
    [a-z] :任意小写字母 
    [A-Za-z] :任意大小写字母 
    [S,s] :匹配大小写S 
    [0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} :匹配IP地址 [0-9]\{3\}三个0-9组成的字符串;\. :匹配点(注意这里点是特殊的字符,所以要用"\"来屏蔽其含义) 
2.find介绍   (1)查找具有某些特征文件的命令,可遍历当前目录甚至于整个文件系统来查看某些文件或目录,其遍历大的文件系统时一般放在后台执行。 
  (2)find命令的一般形式 
      find pathname -options [-print -exec -ok] 
      -pathname :find命令所查找的目录路径。如用"."来表示当前的目录,用/来表示系统根目录 
      -print :find命令将匹配的文件输出到标准输出 
      -exec: find命令对匹配的文件执行该参数所给出的shell命令,相应的命令形式为 
        'command'{} \; (注意{}和\之间的空格) 
      -ok 和 -exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 
    options有如下几种: 
    -name :按照文件名查找文件 
    -perm :按照文件权限来查找文件 
    -user :按照文件属主来查找文件 
    -group :按照文件所属的组来查找文件 
    -mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。find命令还有-atime 和-ctime选项,但它们都和-mtime选项相似。 
    -size n[c]查找文件长度为n块的文件,带有c时表示文件长度以字节计。 
    -nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在 
    -newer file1 !file2查找更改时间比文件file1新但比文件file2旧的文件 
    -depth 先查找指定目录有无匹配文件,若无则再在子目录中查找 
    -type 查找某一类型的文件,如 
      b :块设备文件 
      d:目录 
      e:字符设备文件 
      p;管道文件 
      l:符号链接文件 
      f:普通文件 
  (3)find命令举例 
      find -name "*.txt" -print 查找txt结尾的文件并输出到屏幕上 
      find /cmd ".sh" -print 查找/cmd目录下所有sh文件,并输出 
      find . -perm 755 -print 查找当前目录下权限为755的文件,并输出 
      find `pwd` -user root -print 查找当前目录下属主为root的文件,并输出 
      find ./ -group sunwill -print 查找当前目录下所属主是sunwill的文件 
      find /var -mtime -5 -print 查找/var目录下更改时间为5天内的所有文件 
      find /var -mtime +5 -print 查找/var目录下更改时间为5天以前的所有文件 
      find /var -newer "myfile1" ! -newer "myfile2" -print 查找/var目录下比myfile1新,但是比myfile2旧的所有文件。 
      find /var -type d -print 查找/var目录下所有目录 
      find /var -type l -print 查找/var目录下所有的符号链接文件。 
      find . -size +1000000c -print 查找当前目录下大于1000000字节的文件 
      find / -name "con.file" -depth -print 查找根目录下有无"con.file",若无则在其子目录中查找 
      find . -type f -exec ls -l {} \; 查找当前目录下是否有普通文件,若有则执行ls -l 
    (4)xargs命令 
      在 使用find命令的-exec选项处理匹配到的文件时,find命令将所有匹配到的文件一起传递给exec。不幸的是,有些系统对能够传递给exec的命 令长度有限制,这样find命令运行几分钟之后就算出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs的用处所在,特别是与 find命令一起使用,exec会发起多个进程,而xargs会多个,只有一个 
      find ./ -perm -7 -print | xargs chmod o-w 查找权限为7的文件并传递给chmod处理 
3.grep介绍   (1)grep 的一般格式为 grep [options] 基本正则表达式 [文件] 
      字符串参数最好采用是双引号括,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串 
      -c:只输出匹配行的记数 
      -i:不区分大小写(只适用于单个字符) 
      -h:查询多个文件时不显示文件名 
      -H:只显示文件名 
      -l:查询多文件时只输出包含匹配字符的文件名 
      -n:只显示匹配行及其行号 
      -s:不显示不存在或无匹配文本的错误信息。 
      -v:显示不包含匹配文本的所有行。 
  (2)举例说明: 
      grep ^[^210] myfile 匹配myfile中以非2、1、0开头的行 
      grep "[5-8][6-9][0-3]" myfile 匹配myfile中第一位为5|6|7|8,第二位6|7|8|9,第三位为0|1|2|3的三个字符的行 
      grep "4\{2,4\}" myfile 匹配myfile中含有44,444或4444的行 
      grep "\?" myfile匹配myfile中含有任意字符的行 
  (3)grep命令类名 
      [[:upper:]]   表示[A-Z] 
      [[:alnum:]]   表示[0-9a-zA-Z] 
      [[:lower:]]   表示[a-z] 
      [[:space:]]   表示空格或者tab键 
      [[:digit:]]   表示[0-9] 
      [[:alpha:]]   表示[a-zA-Z] 
    如:grep "5[[:digit:]][[:digit:]]" myfile 匹配myfile中含有5开头接下去两位都是数字的行。 
4.awk介绍 
可以从文件或字符串中基于指定规则浏览和抽取信息,是一种自解释的变成语言。 
(1)awk命令行方式 awk [-F filed-spearator] 'command' input-files 
    awk脚本:所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它。awk脚本是由各种操作和模式组成。 
    模式部分决定动作语句何时触发及触发事件。(BEGIN,END) 
    动作对数据进行处理,放在{}内指明(print) 
(2)分隔符、域和记录 
    awk执行时,其浏览域标记为$1,$2,...$n.这种方法成为域标识。$0为所有域。 
(3)举例说明: 
      awk '{print $0}' test.txt |tee test.out 输出test.txt中所有行$0表示所有域 
      awk -F : '{print $1} test.txt |tee test.out'   同上。。只是分隔符为":" 
      awk 'BEGIN {print "IPDate\n"}{print $1 "\t" $4} END{print "end-of-report"}' test.txt 
      开始时打印“IPDate”结束时打印“end-of-report”中间打印主体信息,比如总共匹配三条信息,则输出如下:   
IPDate 
1 first 
2 second 
3 third 
end-of-report 
  (4)匹配操作符 ~ 匹配,!~ 不匹配 
      cat test.txt |awk '$0~/210.34.0.13/' 匹配test.txt中为210.34.0.13的行 
      awk '$0!~/210.34.0.13' test.txt     匹配test.txt中不是210.34.0.13的行 
      awk '{if($1=="210.34.0.13") print $0}' test.txt 匹配 test.txt中第一个域为210.34.0.13的行。
5.sed介绍     sed不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件,将输出到屏幕。 
    sed是一种很重要的文本过滤工具,使用一行命令或者使用管道与grep与awk相结合。是一种非交互性文本流编辑。 
    (1)调用sed的三种方式 
      使用sed命令行格式为:sed [options] sed命令 输入文件 
      使用sed脚本文件格式为:sed[options] -f sed脚本文件 输入文件 
      sed脚本文件[options] 输入文件 
      --不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。 
    (2)sed 命令的options如下 
        -n:不打印 
        -c:下一命令是编辑命令 
        -f:如果正在调用sed脚本文件 
    (3)sed在文件中查询文本的方式 
          --使用行号,可以是一个简单的数字,或是一个行号的范围 
          --使用正则表达式 
    (4)读取文本的方式 
          x       x为一行号 
          x,y       表示行号范围从x到y 
          /pattern/     查询包含模式的行 
          /pattern/pattern/ 查询包含两个模式的行 
          pattern/,x   在给定的行号上查询包含模式的行 
          x,/pattern/   通过行号和模式查询匹配行 
          x,y!       查询不包含指定行号x和y的行 
      (5)基本sed编辑命令 
            p   打印匹配行 
            d   删除匹配行 
            =   显示文件行号 
            a\   在定位行号后附加新文本信息 
            i\   在定位行号后插入新文本信息 
            c\   用新文本替换定位文本 
            s     使用替换模式替换相应模式 
            r     从另一个文件中读文件 
            w   写文本到一个文件 
            q     第一个模式匹配完成后推出或立即退出 
            l     显示与八禁止ASCII代码等价的控制字符 
            {}   在定位行执行的命令组 
            n     从另一个文件中读文本下一行,并附加在下一行 
            g     将模式2粘贴到/pattern n/ 
            y     传送字符 
    (6)举例说明: 
          sed -n '2p' test.txt 打印第二行的信息(注意:-n是不打印不匹配的信息,若没加-n,则打印文件的所有信息而不是匹配信息) 
          sed -n '1,4p' test.txt 打印第一行到第四行的信息 
          sed -n '/los/p' test.txt模式匹配los,并打印出来 
          sed -n '2,/los/p' test.txt 从第二行开始。。知道匹配第一个los 
          sed -n '/^$/p' test.txt 匹配空行 
          sed -n -e '/^$/p' -e '/^$/=' test.txt 打印空行及行号 
          sed -n '/good/a\morning' test.txt 在匹配到的good后面附加morning 
          sed -n '/good/i\morning' test.txt 在匹配到的good前面插入morning 
          sed -n '/good/c\morning' test.txt 将匹配到的good替换成morning 
          sed '1,2d' test.txt 删除第1和2行 
          sed 's/good/good morning/g' test.txt 匹配good并替换成goodmorning 
          send 's/good/& hello /p' test.txt 匹配到good就在其后面加上hello 
          send 's/good/ hello &/p' test.txt 匹配到good就在其前面加上hello 
6.合并与分割(sort,uniq,join,cut,paste,split)     (1)sot命令 
        sort [options] files 许多不同的域按不同的列顺序排序 
          -c 测试文件是否已经排序 
          -m 合并两个排序文件 
          -u 删除所有同样行 
          -o 存储sort结果的输出文件名 
          -t 域分隔符,用非空格或tab开始排序 
          +n :n 为列号,使用此列号开始排序 
          -n 指定排序是域上的数字分类项 
          -r 比较求逆 
        sort -c test.txt 测试文件是否分类过 
        sort -u test.txt 排序并合并一样的行 
        sort -r test.txt 以相反的顺序排列 
        sort -t "/" +2 test.txt 以"/"分隔,第二个域开始分类 
      (2)uniq命令 
          uniq [options ] files 从一个文本文件中去除或禁止重复行 
          -u 只显示不重复行 
          -d 只显示有重复数据行,每种重复行只显示其中一行 
          -c 打印每一重复行出现次数 
          -f :n为数字,前n个域被忽略 
          uniq -f 2 test.txt 忽略前2个域 
      (3)join 命令 
          join [options] file1 file2 用来将来自两个分类文本文件的行连在一起 
          -an,n为一数字,用于连接时从文件n中显示不匹配行 
          -onm ,连接域,n为文件号,m为域号 
          -jnm,n为文件号,m为域号,使用其他域作连接域 
          -t ,域分隔符。用来设置非空格或tab键的域分隔符。 
        (4)split命令 
          split -output_file_size intput_filename output_filename 
          用来将大文件分割成小文件。 
            -b n,每个分割文件的大小n 
            -C n,每个分割文件一行最多n字节 
            -l n,每个分割文件的行数 
            -n,同-l n 
            split -10 test.txt 将test.txt分割成10行的小文件 
        (5)cut 命令 
          cut -c n1-n2 filename 显示每行从开头算起 n1 到 n2 的文字。 
          cut -c 3-5 test.txt 显示test.txt中每行从第3到第5个字符

==============================================
linux下查看线程数的几种方法
==============================================
1、cat /proc/${pid}/status
2、pstree -p ${pid}
3、top -p ${pid} 再按H 或者
   直接输入 top -bH -d 3 -p ${pid}
   top -H手册中说:-H : Threads toggle
加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。
4、ps xH手册中说:H Show threads as if they were processes
这样可以查看所有存在的线程。
5、ps -mp <PID>手册中说:m Show threads after processes
这样可以查看一个进程起的线程数。

=======================
linux环境查看命令:
=======================
CPU:  cat /proc/cpuinfo,  top
进程: ps -ef
内存: cat /proc/meminfo, top, free
磁盘: df -sh, df -ht,df -lh,
磁盘分区情况: sfdisk -l, fdisk -l, parted, cat /proc/partitions,
IO:    iostat -x 1
操作系统: uname -a, cat /proc/version,more /etc/issue

[root@oam-nas ~]# more /etc/issue
Red Hat Enterprise Linux Server release 6.1 (Santiago)
Kernel \r on an \m

[root@oam-nas ~]# uname -a
Linux oam-nas 2.6.33.20 #1 SMP PREEMPT Wed Apr 3 17:07:07 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@oam-nas ~]# more /proc/version 
Linux version 2.6.33.20 (root@oam-nas) (gcc version 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC) ) #1 SMP PREEMPT Wed Apr 3 17
:07:07 CST 2013

如何知道自己的Linux发行版本的所支持的类型有哪些:
    以超级用户权限登陆Linux,进入/lib/modules/2.4.21-4.EL/kernel/fs/目录
    执行命令(不同Linux发行版本 的Fs目录有些不同你可以用查找FS文件夹的方法找到它):
(abigbadboy的内核版本是2.6.18-164.el5)
[root@rh root]# cd /lib/modules/2.6.18-164.el5/kernel/fs/                        
[root@localhost fs]# ls
autofs4     cramfs    ext3      fscache  hfsplus  lockd       nfsd      vfat
cachefiles  dlm       ext4      fuse     jbd      msdos       nls
cifs        ecryptfs  fat       gfs2     jbd2     nfs         squashfs
configfs    exportfs  freevxfs  hfs      jffs2    nfs_common  udf

查看开机信息: dmesg 
        Linux命令dmesg用来显示开机信息,kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,
        可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里
文件系统的挂载情况: cat /etc/fstab
查看文件系统:
    fdisk -l  ---查看磁盘信息以及分区表情况 或者使用 cat /proc/partitions
    df        ---当前系统剩余空间
    mount     ---查看目录挂载情况
查看某个目录的大小: du -sh /uploadimages 
系统运行情况: top,uptime
当前打开的服务: service --status-all
服务的运行级别: chkconfig --list
所有服务所占用的端口: cat /etc/services |less ------看所有服务所占用的端口
当前打开的端口: netstat -nat, netstat -tnlp
网络配置:ifconfig -a |grep add,
         ifup eth0,
         ifdown eth0,
         ethtool eth0,
         mii-tool -v eth0,
         /etc/init.d/network status,
         route, 
         /etc/sysconfig/network-scripts
         
[root@oam-nas2 yuanjs]# service network ?
用法:/etc/init.d/network {start|stop|status|restart|reload|force-reload}

环境变量: export
安装了哪些软件: rpm -qa , yum list,yum grouplist

top 看进程和cpu的使用率  
uptime 看cpu负载和系统运行时间。
free 看内存 虚拟内存 -m 是以兆为单位显示
df -hT 硬盘.查看个各个分区的使用情况,-h是以G为单位显示  -T是显示分区的系统类型
iostat -x 1 可以查看磁盘的IO信息

/sbin
/bin
/usr/sbin
/usr/bin
/usr/local/sbin
/usr/local/bin
/usr/lib64/qt-3.3/bin
/root/bin

========================
linux软件安装方式:
(dpkg,apt-get)(rpm,yum)
========================
APT --- Advanced Package Tool 
apt-get --------是debian、ubuntu发行版的包管理工具,与红帽中的yum工具非常类似。
apt-get install packagename   ---安装一个新软件包(参见下文的aptitude)
apt-get remove packagename    ---卸载一个已安装的软件包(保留配置文档)
apt-get autoremove packagename ---卸载一个已安装的软件包(删除配置文档)
软件源设置                                     /etc/apt/sources.list
更新软件源数据                                 apt-get update
更新已安装软件                                 apt-get upgrade
更换系统版本                                   apt-get dist-upgrade
通过安装包或卸载包来修复依赖错误               apt-get -f install
搜索软件源数据                                 apt-cache search foo
解压安装软件包                                 apt-get install foo
重新安装软件包                                 apt-get --reinstall install foo
删除软件包释放的内容                           apt-get remove foo
卸载软件,同时清除该软件配置文件               apt-get --purge remove foo
删除不需要的包                                 apt-get autoclean
删除所有已下载的包                             apt-get clean
自动安装编译一软件所需要的包                   apt-get build-dep foo
获取源码                                       apt-get source foo  apt-get source rox-filer
安装编译依赖                                   apt-get build-dep foo   apt-get build-dep rox-filer
解压源码                                       dpkg-source -x foo_version-revision.dsc dpkg-source -x rox_2.11-3.dsc
修改源码部分                                   nano ROX-Filer/src/main.c
创建包                                         dpkg-buildpackage -rfakeroot -b
修改软件可升级状态                             echo -e "foo hold" | dpkg --set-selections

dpkg --- Debian Packager ”的简写。为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除。
         所有源自“Debian”的“Linux ”发行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix”等。是Debian软件包管理器的基础,它被伊恩·默多克创建于1993年。
         dpkg与RPM十分相似,同样被用于安装、卸载和供给.deb软件包相关的信息。dpkg本身是一个底层的工具。上层的工具,
         如APT,被用于从远程获取软件包以及处理复杂的软件包关系。 
显示DEB包信息                                  dpkg -I xx.deb
显示DEB包文件列表                              dpkg -c xx.deb
安装DEB包                                      dpkg -i xx.deb
安装DEB包(指定根目录)                        dpkg --root=<directory> -i xx.deb
显示所有已安装软件                             dpkg -l
显示已安装包信息                               dpkg -s foo
显示已安装包文件列表                           dpkg -L foo
卸载包                                         dpkg -r foo
卸载软件包并删除其配置文件                     dpkg -P foo
重新配置已安装程序                             dpkg-reconfigure foo

yum --------Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora、RedHat、CentOS中的Shell前端软件包管理器。
            基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,
            无须繁琐地一次次下载、安装。
            
[root@localhost ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
 * base: mirrors.163.com
 * c6-media: 
 * centosplus: mirrors.163.com
 * extras: mirrors.163.com
 * updates: mirrors.163.com
file:///media/CentOS/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/CentOS/repodata/repomd.xml
Trying other mirror.
file:///media/cdrecorder/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrecorder/repodata/repomd.xml
Trying other mirror.
file:///media/cdrom/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/cdrom/repodata/repomd.xml
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: c6-media. Please verify its path and try again
提示没有找到YUM仓库文件,原因是镜像没有挂上或的YUM仓库路径写错了,也可能是这个YUM仓库路径无效。

解决办法:
把/etc/yum.repos.d/CentOS-Media.repo转移到其他文件夹。同时保证你的linux要能联网。
            
yum list 或者    yum grouplist  ---查找
yum install 或者 yum groupinstall ---安装
yum remove 或者  groupremove  ---卸载
yum info 或者 yum groupinfo  ---查看某包或者组的详细信息
yum deplist   ---显示软件包依赖关系

安装软件: yum install foo-x.x.x.rpm   (以foo-x.x.x.rpm为例)
删除软件:yum remove foo-x.x.x.rpm或者yum erase foo-x.x.x.rpm
升级软件:yum upgrade foo或者yum update foo
查询信息:yum info foo
搜索软件(以包含foo字段为例):yum search foo
显示软件包依赖关系:yum deplist foo

-e 静默执行 
  -t 忽略错误
  -R[分钟] 设置等待时间
  -y 自动应答yes
  --skip-broken 忽略依赖问题
  --nogpgcheck 忽略GPG验证

  check-update 检查可更新的包
  clearn 清除全部
  clean packages 清除临时包文件(/var/cache/yum 下文件)
  clearn headers 清除rpm头文件
  clean oldheaders 清除旧的rpm头文件
  deplist 列出包的依赖
  list 可安装和可更新的RPM包
  list installed 已安装的包
  list extras 已安装且不在资源库的包
  info 可安装和可更新的RPM包 信息
  info installed 已安装包的信息(-qa 参数相似)
  install[RPM包] 安装包
  localinstall 安装本地的 RPM包
  update[RPM包] 更新包
  upgrade 升级系统
  search[关键词] 搜索包
  provides[关键词] 搜索特定包文件名
  reinstall[RPM包] 重新安装包
  repolist 显示资源库的配置
  resolvedep 指定依赖
  remove[RPM包] 卸载包

rpm -----Redhat Package Manager  OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用 -vh:显示安装进度;
rpm -ivh packagename ---安装 比如: rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm tcl-devel-8.5.7-6.el6.x86_64.rpm tcl-pgtcl-1.6.2-3.el6.x86_64.rpm
rpm -ev packagename ---卸载 比如: rpm -ev tcl 
rpm -qa |grep php 查看当前系统安装了PHP了的哪些内容。
rpm -qpl xxxxxx.rpm   怎样查看rpm安装包的安装路径  ******

如何在Fedora,CentOS,RHEL中检查RPM包的依赖性    --- http://www.linuxidc.com/Linux/2014-08/105626.htm
$ rpm -qR  tcpdump    --- 注意,这种方法只适用于已安装的包。使用RPM命令可以列出目标包所依赖的所有包.
$ rpm -qpR tcpdump-4.4.0-2.fc19.i686.rpm  --- 如果你需要检查一个未安装包的依赖关系,使用 "-qpR"参数显示该包的依赖关系。

1.如何安装rpm软件包(强行安装)
执行下面的命令:
    rpm -i your-package.rpm   或者  rpm -i --force --nodeps  your-package.rpm (强制安装)
其中your-package.rpm是你要安装的rpm包的文件名,一般置于当前目录下。

安装过程中可能出现下面的警告或者提示: 
1)... conflict with ... 可能是要安装的包里有一些文件可能会覆盖现有的文件,缺省时这样的情况下是无法正确安装的:
    rpm --force -i  强制安装即可 
2)... is needed by ... 或... is not installed ... 此包需要的一些软件你没有安装可以用:
    rpm --nodeps -i  来忽略此信息

也就是说,rpm -i --force --nodeps  可以忽略所有依赖关系和文件问题,什么包都能安装上,但这种强制安装的软件包不能保证完全发挥功能。

2.如何卸载rpm软件包 (强行卸载)_
使用命令 rpm -ev 包名,包名可以包含版本号等信息,但是不可以有后缀.rpm 
比如卸载软件包proftpd-1.2.8-1,可以使用下列格式: 
rpm -e proftpd-1.2.8-1 
rpm -e proftpd-1.2.8 
rpm -e proftpd- 
rpm -e proftpd 
不可以是下列格式: 
rpm -e proftpd-1.2.8-1.i386.rpm 
rpm -e proftpd-1.2.8-1.i386 
rpm -e proftpd-1.2 
rpm -e proftpd-1

有时会出现一些错误或者警告: 
... is needed by ...   这说明这个软件被其他软件需要,不能随便卸载 
可以用:
    rpm -e --nodeps  (强制卸载)

强制卸载一个例子:
[root@A22770797 yuanjs]#  rpm -ev --nodeps httpd-2.2.15-9.el6.x86_64
warning: /etc/httpd/conf/httpd.conf saved as /etc/httpd/conf/httpd.conf.rpmsave
[root@A22770797 yuanjs]# rpm -qa|grep httpd
httpd-tools-2.2.15-9.el6.x86_64
[root@A22770797 yuanjs]# rpm -ivh httpd-2.2.15-9.el6.x86_64.rpm 
warning: httpd-2.2.15-9.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
   1:httpd                  ########################################### [100%]
[root@A22770797 yuanjs]# apachectl -v
Server version: Apache/2.2.15 (Unix)
Server built:   Apr  9 2011 08:58:28

====================================================================
Linux下which、whereis、locate、find 命令的区别
====================================================================
which      查看可执行文件的位置 : which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件 
whereis    配合数据库查看文件的位置 
locate     配合数据库查看文件的位置 
find       实际搜寻硬盘查询文件名称

1、which 
语法: 
[root@redhat ~]# which 可执行文件名称 
例如: 
[root@redhat ~]# which passwd 
/usr/bin/passwd 
which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件

2、whereis 
语法: 
[root@redhat ~]# whereis [-bmsu] 文件或者目录名称 
参数说明: 
-b : 只找二进制文件 
-m:  只找在说明文件manual路径下的文件 
-s : 只找source源文件 
-u : 没有说明文档的文件 
例如: 
[root@redhat ~]# whereis passwd 
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz 
将和passwd文件相关的文件都查找出来

[root@redhat ~]# whereis -b passwd 
passwd: /usr/bin/passwd /etc/passwd 
只将二进制文件查找出来

和find相比,whereis查找的速度非常快,这是因为linux系统会将 系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 
但是该数据库文件并不是实时更新,默认情况下是一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

3、 locate 
语法: 
[root@redhat ~]# locate 文件或者目录名称 
例如: 
[root@redhat ~]# locate passwd 
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_DB_war/DB.war/jsp/as/user/passwd.jsp 
/home/weblogic/bea/user_projects/domains/zhanggongzhe112/myserver/stage/_appsdir_admin_war/admin.war/jsp/platform/passwd.jsp 
/lib/security/pam_unix_passwd.so 
/lib/security/pam_passwdqc.so 
/usr/include/rpcsvc/yppasswd.x 
/usr/include/rpcsvc/yppasswd.h 
/usr/lib/perl5/5.8.5/i386-linux-thread-multi/rpcsvc/yppasswd.ph 
/usr/lib/kde3/kded_kpasswdserver.la 
/usr/lib/kde3/kded_kpasswdserver.so 
/usr/lib/ruby/1.8/webrick/httpauth/htpasswd.rb 
/usr/bin/vncpasswd 
/usr/bin/userpasswd 
/usr/bin/yppasswd 
…………

4、 find 
语法: 
[root@redhat ~]# find 路径 参数

参数说明:

时间查找参数: 
-atime n :将n*24小时内存取过的的文件列出来 
-ctime n :将n*24小时内改变、新增的文件或者目录列出来 
-mtime n :将n*24小时内修改过的文件或者目录列出来 
-newer file :把比file还要新的文件列出来 
名称查找参数: 
-gid n       :寻找群组ID为n的文件 
-group name  :寻找群组名称为name的文件 
-uid n       :寻找拥有者ID为n的文件 
-user name   :寻找用户者名称为name的文件 
-name file   :寻找文件名为file的文件(可以使用通配符)

例如: 
[root@redhat ~]# find / -name zgz 
/home/zgz 
/home/zgz/zgz 
/home/weblogic/bea/user_projects/domains/zgz 
/home/oracle/product/10g/cfgtoollogs/dbca/zgz 
/home/oracle/product/10g/cfgtoollogs/emca/zgz 
/home/oracle/oradata/zgz

[root@redhat ~]# find / -name '*zgz*' 
/home/zgz 
/home/zgz/zgz1 
/home/zgz/zgzdirzgz 
/home/zgz/zgz 
/home/zgz/zgzdir 
/home/weblogic/bea/user_projects/domains/zgz 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00006 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00002 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00004 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00008 
/home/weblogic/bea/user_projects/domains/zgz/zgz.log00005

当我们用whereis和locate无法查找到我们需要的文件时,可以使用find,但是find是在硬盘上遍历查 找,因此非常消耗硬盘的资源,而且效率也非常低,因此建议大家优先使用whereis和locate。

locate   是在数据库里查找,数据库大至每天更新一次。 
whereis  可以找到可执行命令和man page 
find     就是根据条件查找文件。 
which    可以找到可执行文件和别名(alias)

==================================
linuxshell中"2>&1"含义(重要)
==================================
脚本是:
nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &  "把标准错误输出重定向到标准输出,然后扔到/DEV/NULL下面去。"
对于&1 更准确的说应该是文件描述符 1,而1一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result,
然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出被合并了.
其中:
0表示键盘输入,
1表示屏幕输出,
2表示错误输出.
把标准错误输出重定向到标准输出,然后扔到/DEV/NULL下面去。

通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。

command >out.file 2>&1 &
1. command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
2. 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。
3. 最后一个&,是让该命令在后台执行。

试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.

---------------------------------------------------------------------------------------------------
你可以用
 ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
 ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
 ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
 ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。

Question:
1) 为何2>&1要写在后面?
    command > file 2>&1
 
  首先是command > file将标准输出重定向到file中, 
2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

2) command 2>&1 >file
  2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。
 
用strace可以看到:
1. command > file 2>&1
这个命令中实现重定向的关键系统调用序列是:
open(file) == 3
dup2(3,1)
dup2(1,2)
2. command 2>&1 >file
这个命令中实现重定向的关键系统调用序列是:
dup2(1,2)
open(file) == 3
dup2(3,1)
可以考虑一下不同的dup2()调用序列会产生怎样的文件共享结构。

================================================
/dev/zero和/dev/null的区别
================================================
使用/dev/null:
把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.

使用/dev/zero: 
像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.

/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件。

/dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
/dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。

dd --- disk dump
$dd if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r--r--     1 oracle    dba           1024 Jul 15 16:56 test.txt

禁止标准输出. 
1 cat $filename >/dev/null
2 # 文件内容丢失,而不会输出到标准输出.

禁止标准错误 (来自例子 12-3).    
1 rm $badname 2>/dev/null
2 #           这样错误信息[标准错误]就被丢到太平洋去了.

禁止标准输出和标准错误的输出.   
1 cat $filename 2>/dev/null >/dev/null
2 # 如果"$filename"不存在,将不会有任何错误信息提示.
3 # 如果"$filename"存在, 文件的内容不会打印到标准输出.
4 # 因此Therefore, 上面的代码根本不会输出任何信息.
5 #
6 # 当只想测试命令的退出码而不想有任何输出时非常有用。
7 #
8 #
9 # cat $filename &>/dev/null
10 # 也可以, 由 Baris Cicek 指出.

Deleting contents of a file, but preserving the file itself, with all attendant permissions (from Example 2-1 and Example 2-3):    
1 cat /dev/null > /var/log/messages
2 #: > /var/log/messages   有同样的效果, 但不会产生新的进程.(因为:是内建的)

4 cat /dev/null > /var/log/wtmp

自动清空日志文件的内容 (特别适合处理这些由商业Web站点发送的讨厌的"cookies"):
--------------------------------------------------------------------------------

例子 28-1. 隐藏cookie而不再使用
1 if [ -f ~/.netscape/cookies ] # 如果存在则删除.
2 then
3   rm -f ~/.netscape/cookies
4 fi

6 ln -s /dev/null ~/.netscape/cookies
7 # 现在所有的cookies都会丢入黑洞而不会保存在磁盘上了.

--------------------------------------------------------------------------------
使用/dev/zero 
像/dev/null一样, /dev/zero也是一个伪文件, 但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的). 写入它的输出会丢失不见, 而从/dev/zero读出一连串的null也比较困难, 虽然这也能通过od或一个十六进制编辑器来做到. /dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件.
--------------------------------------------------------------------------------

例子 28-2. 用/dev/zero创建一个交换临时文件
1 #!/bin/bash
2 # 创建一个交换文件.

4 ROOT_UID=0         # Root 用户的 $UID 是 0.
5 E_WRONG_USER=65    # 不是 root?

7 FILE=/swap
8 BLOCKSIZE=1024
9 MINBLOCKS=40
10 SUCCESS=0
11 
12 
13 # 这个脚本必须用root来运行.
14 if [ "$UID" -ne "$ROOT_UID" ]
15 then
16   echo; echo "You must be root to run this script."; echo
17   exit $E_WRONG_USER
18 fi 
19   
20 
21 blocks=${1:-$MINBLOCKS}          # 如果命令行没有指定,
22                                  #+ 则设置为默认的40块.
23 # 上面这句等同如:
24 # --------------------------------------------------
25 # if [ -n "$1" ]
26 # then
27 #   blocks=$1
28 # else
29 #   blocks=$MINBLOCKS
30 # fi
31 # --------------------------------------------------
32 
33 
34 if [ "$blocks" -lt $MINBLOCKS ]
35 then
36   blocks=$MINBLOCKS              # 最少要有 40 个块长.
37 fi 
38 
39 
40 echo "Creating swap file of size $blocks blocks (KB)."
41 dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks # 把零写入文件.
42 
43 mkswap $FILE $blocks             # 将此文件建为交换文件(或称交换分区).
44 swapon $FILE                     # 激活交换文件.
45 
46 echo "Swap file created and activated."
47 
48 exit $SUCCESS

--------------------------------------------------------------------------------

关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环回设备 (loopback device) (参考例子 13-8) 或"安全地" 删除一个文件(参考例子 12-55).
--------------------------------------------------------------------------------

例子 28-3. 创建ramdisk
1 #!/bin/bash
2 # ramdisk.sh

4 # "ramdisk"是系统RAM内存的一段,
5 #+ 它可以被当成是一个文件系统来操作.
6 # 它的优点是存取速度非常快 (包括读和写).
7 # 缺点: 易失性, 当计算机重启或关机时会丢失数据.
8 #+       会减少系统可用的RAM.
9 #
10 # 那么ramdisk有什么作用呢?
11 # 保存一个较大的数据集在ramdisk, 比如一张表或字典,
12 #+ 这样可以加速数据查询, 因为在内存里查找比在磁盘里查找快得多.
13 
14 
15 E_NON_ROOT_USER=70             # 必须用root来运行.
16 ROOTUSER_NAME=root
17 
18 MOUNTPT=/mnt/ramdisk
19 SIZE=2000                      # 2K 个块 (可以合适的做修改)
20 BLOCKSIZE=1024                 # 每块有1K (1024 byte) 的大小
21 DEVICE=/dev/ram0               # 第一个 ram 设备
22 
23 username=`id -nu`
24 if [ "$username" != "$ROOTUSER_NAME" ]
25 then
26   echo "Must be root to run ""`basename $0`""."
27   exit $E_NON_ROOT_USER
28 fi
29 
30 if [ ! -d "$MOUNTPT" ]         # 测试挂载点是否已经存在了,
31 then                           #+ 如果这个脚本已经运行了好几次了就不会再建这个目录了
32   mkdir $MOUNTPT               #+ 因为前面已经建立了.
33 fi
34 
35 dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE # 把RAM设备的内容用零填充.
36                                                       # 为何需要这么做?
37 mke2fs $DEVICE                 # 在RAM设备上创建一个ext2文件系统.
38 mount $DEVICE $MOUNTPT         # 挂载设备.
39 chmod 777 $MOUNTPT             # 使普通用户也可以存取这个ramdisk.
40                                # 但是, 只能由root来缷载它.
41 
42 echo """$MOUNTPT"" now available for use."
43 # 现在 ramdisk 即使普通用户也可以用来存取文件了.
44 
45 # 注意, ramdisk是易失的, 所以当计算机系统重启或关机时ramdisk里的内容会消失.
46 #
47 # 拷贝所有你想保存文件到一个常规的磁盘目录下.
48 
49 # 重启之后, 运行这个脚本再次建立起一个 ramdisk.
50 # 仅重新加载 /mnt/ramdisk 而没有其他的步骤将不会正确工作.
51 
52 # 如果加以改进, 这个脚本可以放在 /etc/rc.d/rc.local,
53 #+ 以使系统启动时能自动设立一个ramdisk.
54 # 这样很合适速度要求高的数据库服务器.
55 
56 exit 0

--------------------------------------------------------------------------------
最后值得一提的是, ELF二进制文件利用了/dev/zero.
/dev/null,外号叫无底洞,你可以向它输出任何数据,它通吃,并且不会撑着!
/dev/zero,是一个输入设备,你可你用它来初始化文件。
/dev/null------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
/dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。
$if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r--r--     1 oracle    dba           1024 Jul 15 16:56 test.txt

eg,find / -name access_log   2>/dev/null
这样,一些诸如一些错误信息就不会显示出来。

===============================
硬链接和软链接的区别
===============================
一.链接文件
    链接有两种方式,软链接和硬链接。
1.软链接文件
  软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
    链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象"),链接文件甚至可以循环链接自己。类似于编程语言中的递归。
  用ln -s 命令可以生成一个软连接,如下:
    ------------------------------------------------------------
  ln -s  source_file softlink_file
    ------------------------------------------------------------
  在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
2.硬链接文件
  info ln 命令告诉您,硬链接是已存在文件的另一个名字(A "hard link" is another name for an existing file),这多少有些令人困惑。
    硬连接的命令是:
    ------------------------------
  ln -d existfile newfile
    ------------------------------
  硬链接文件有两个限制
  1)、不允许给目录创建硬链接;
  2)、只有在同一文件系统中的文件之间才能创建链接。
  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。
    这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。
    
二.两者之间的区别
硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要  文件,以防止“误删”的功能。
其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个
连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。
软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

========================
Linux下chkconfig命令详解
========================
查看哪些服务打开了:sysv的服务可以用 chkconfig --list 来查看
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
使用语法:
chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

chkconfig在没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。
如果是,返回true,否则返回false。
如果在服务名后面指定了on,off或者reset,那么chkconfig 会改变指定服务的启动信息。
on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。
on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。

参数用法:
   --add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
   --del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
   --level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕。
      等级0表示:表示关机
      等级1表示:单用户模式
      等级2表示:无网络连接的多用户命令行模式
      等级3表示:有网络连接的多用户命令行模式
      等级4表示:不可用
      等级5表示:带图形界面的多用户模式
      等级6表示:重新启动
      需要说明的是,level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。

chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
    chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
    chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
    chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。

运行级文件:
每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。
例如,random.init包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.

使用范例:
chkconfig --list        #列出所有的系统服务
chkconfig --add httpd        #增加httpd服务
chkconfig --del httpd        #删除httpd服务
chkconfig --level httpd 2345 on        #设置httpd在运行级别为2、3、4、5的情况下都是on(开启)的状态
chkconfig --list        #列出系统所有的服务启动情况
chkconfig --list mysqld        #列出mysqld服务设置情况
chkconfig --level 35 mysqld on        #设定mysqld在等级3和5为开机运行服务,--level 35表示操作只在等级3和5执行,on表示启动,off表示关闭
chkconfig mysqld on        #设定mysqld在各等级为on,“各等级”包括2、3、4、5等级

如何增加一个服务:
1.服务脚本必须存放在/etc/init.d/目录下;
2.chkconfig --add servicename
    在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;
3.chkconfig --level 35 mysqld on
    修改服务的默认启动等级。
    
===============
 执行等级    
===============
[root@localhost ~]# cat /etc/inittab

# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

========================
Linux命令:declare
========================
功能说明:声明 shell 变量。
语 法:declare [+/-][afrix]
补充说明:declare为shell指令,在第一种语法中可用来声明变量并设置变量的属性([rix]即为变量的属性),在第二种语法中可用来显示shell函数。若不加上任何参数,则会显示全部的shell变量与函数(与执行set指令的效果相同)。
参 数:
  +/- "-"可用来指定变量的属性,"+"则是取消变量所设的属性。
  -a 定义为数组array
  -f 定义为函数function
  -i 定义为整数integer
  -r 定义为只读
  -x 定义为通过环境输出变量

declare -x XMLRPC_TRACE_XML=1 
declare +x XMLRPC_TRACE_XML

ATA --->PATA(IDE)
ATA --->SATA
SCSI --->SAS

hdb中的h代表IDE,如果显示为sdb,则代表SATA和SCSI
最后一个字幕b代表Primary总线,第二块硬盘即Slave位置

hda1  (IDE1:hard disk ) /boot 分区
hda2  (IDE1:hard disk )  /    分区
hdb   (IDE2)
sda   (SCSI1)
sdb   (SCSI2)

软盘一般为/dev/fd0 fd1,硬盘一般为/dev/hda hdb ,硬盘逻辑分区一般为期hda1 hda2…等等,光盘一般为/dev/hdc
swap分区、/ 分区和 /boot分区

more /etc/passwd  查看用户名和组
more /etc/group  查看组
more /etc/hosts   
more /etc/issue  查看OS版本
more /etc/networks
more /etc/protocols
more /etc/rpc
more /etc/services
more /etc/shadow  映射口令信息

chmod -R 777 xstart      recursive 递归的改变所有的权限。
chmod -R +x /opt  将/opt下所有目录、文件及其子目录文件设置为可执行权限(+X)。

chown root:root xstart   
chown -R root:root /opt 将/opt下所有目录及其子目录设置为root所拥有。

清除Linux防火墙:iptables -F     service iptables stop

--------------------------------------------------
指令名称 : chmod 
使用权限 : 所有使用者 
--------------------------------------------------
使用方式 : chmod [-cfvR] [--help] [--version] mode file... 
说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 
参数 : 
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中 
u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 
-c : 若该档案权限确实已经更改,才显示其更改动作 
-f : 若该档案权限无法被更改也不要显示错误讯息 
-v : 显示权限变更的详细资料 
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) 
--help : 显示辅助说明 
--version : 显示版本 
范例 :将档案 file1.txt 设为所有人皆可读取 : 
chmod ugo+r file1.txt  
将档案 file1.txt 设为所有人皆可读取 : 
chmod a+r file1.txt  
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 : 
chmod ug+w,o-w file1.txt file2.txt  
将 ex1.py 设定为只有该档案拥有者可以执行 : 
chmod u+x ex1.py  
将目前目录下的所有档案与子目录皆设为任何人可读取 : 
chmod -R a+r *  
此外chmod也可以用数字来表示权限如 chmod 777 file

语法为:chmod abc file 
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 
r=4,w=2,x=1 
若要rwx属性则4+2+1=7; 
若要rw-属性则4+2=6; 
若要r-x属性则4+1=7。 
范例: 
chmod a=rwx file  
和 
chmod 777 file  
效果相同 
chmod ug=rwx,o=x file  
和 
chmod 771 file  
效果相同 
若用chmod 4755 filename可使此程序具有root的权限

--------------------------------------------------
env命令:
--------------------------------------------------
#!/usr/local/bin/python
在 #!之后写上Python 解释器的完整路径
有一个更好的方案, 许多Unix 系统有一个命令叫 env, 位于 /bin 或 /usr/bin 中。它
会帮你在系统搜索路径中找到 python 解释器。 如果你的系统拥有 env, 你的启动行就可以改
为下面这样:
#!/usr/bin/env python
或者, 如果你的 env 位于 /bin 的话,
#!/bin/env python

[root@oam-nas2 yuanjs]# which env
/bin/env
[root@oam-nas2 yuanjs]# env --help
Usage: env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
Set each NAME to VALUE in the environment and run COMMAND.

-i, --ignore-environment  start with an empty environment
  -0, --null           end each output line with 0 byte rather than newline
  -u, --unset=NAME     remove variable from the environment
      --help     display this help and exit
      --version  output version information and exit

A mere - implies -i.  If no COMMAND, print the resulting environment.

Report env bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report env translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'env invocation'

看群晖的:
DiskStation> env
SSH_CLIENT=192.168.56.1 3402 22
MAIL=/var/mail/admin
USER=admin
OLDPWD=/var/services/homes/admin
HOME=/var/services/homes/admin
SSH_TTY=/dev/pts/0
PAGER=more
LOGNAME=admin
TERM=xterm
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
SHELL=/bin/sh
PWD=/
SSH_CONNECTION=192.168.56.1 3402 192.168.56.101 22
PGDATA=/var/service/pgsql
TZ=CST-8

看OMV:
root@openmediavault:/var/lib/php5# su openmediavault
$ env
LANGUAGE=zh_CN:zh
USER=openmediavault
SSH_CLIENT=192.168.56.1 2626 22
MAIL=/var/mail/openmediavault
SHLVL=1
OLDPWD=/tmp
HOME=/home/openmediavault
SSH_TTY=/dev/pts/0
LOGNAME=openmediavault
_=/bin/su
TERM=xterm
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
LANG=zh_CN.UTF-8
SHELL=/bin/sh
PWD=/var/lib/php5
SSH_CONNECTION=192.168.56.1 2626 192.168.56.102 22
$ exit
root@openmediavault:/var/lib/php5# env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=192.168.56.1 2626 22
SSH_TTY=/dev/pts/0
USER=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/var/lib/php5
LANG=zh_CN.UTF-8
SHLVL=1
HOME=/root
LANGUAGE=zh_CN:zh
LOGNAME=root
SSH_CONNECTION=192.168.56.1 2626 192.168.56.102 22
_=/usr/bin/env
OLDPWD=/tmp

===================================================
/etc/passwd 文件内容详细解释
===================================================
1、/etc/passwd包含用户信息
2、/etc/shadow包含passwd里面用户对应的密码
3、/etc/group包含组信息
4、/etc/gshadow包含组加密信息
5、*-应该是相应文件的备份,如果误操作可用此文件恢复:
/etc/passwd-
/etc/group-
/etc/shadow-
/etc/gshadow-
6、diff group group-看两个文件的区别。

程序用户账号的UID号默认在1-499之间,500-60000的UID号默认分配给普通用户账号使用。
而程序组账号的GID号默认在1-499之间,普通组账号使用的UID号默认为500-60000.
普通用户、组账号使用的默认UID、GID号范围定义在配置文件“/etc/login.defs”中。

系统帐号就是系统用的帐号,区别于个人帐号。其实就是一个帐号,和普通的个人帐号区别就是这个 ID 是系统程序用的。
Linux 下面的每个程序都是要有用户帐号来运行的,一些对外提供服务的程序,为了安全做隔离,都会用非 root 帐号来运行,这些非 root 帐号,专门用来跑程序的帐号,就是系统帐号。
其实这些程序也可以用一般的个人帐号来跑,不过一旦服务程序被攻破,这个帐号的个人数据也就会暴露了。
一般说来,系统帐号的帐号编号都是 <500 的,不过其实并不绝对。(uid 500前的系统用户,500后的创建的)

/etc/passwd  是存放用户的地方

用户名: 密码 : uid  : gid :用户描述:主目录:登陆shell
1        2      3      4     5         6        7

root:  x  : 0  :  0  : root : / root :  /  bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

UID : 每个用户必须被分配一个userid,”0”为root保留ID.
1-99为系统保留,分配给系统预定义帐号. HP-UX10.20支持2 147 483 646. HP-UX10.20以前支持不大于60000个.
系统中有一类用户称为伪用户(psuedo users),这些用户在/etc/passwd文件中也占有一条记录,但是不能登录,因为它们的登录Shell为空。它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。常见的伪用户如表8-1所示。
表8-1 /etc/passwd文件中常见的伪用户
伪  用  户
含     义
bin
拥有可执行的用户命令文件
sys
拥有系统文件
adm
拥有帐户文件
uucp
UUCP使用
lp
lp或lpd子系统使用
nobody
NFS使用
除了上面列出的伪用户外,还有许多标准的伪用户,例如:audit, cron, mail, usenet等,它们也都各自为相关的进程和文件所需要。

/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用“:”隔开。这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:

useradd -g mysql -d /home/test -m test(:新建一个用户test, 属于mysql组,开始目录是/home/test)

===================================================
Linux下passwd和shadow文件内容详解 
===================================================
一、/etc/passwd
/etc/passwd 文件是一个纯文本文件,每行采用了相同的格式: 
name:password:uid:gid:comment:home:shell 
name 用户登录名 
password 用户口令。此域中的口令是加密的,常用x表示。当用户登录系统时,系统对输入的口令采取相同的算法,与此域中的内容进行比较。如果此域为空,表明该用户登录时不需要口令。 
uid 指定用户的 UID。用户登录进系统后,系统通过该值,而不是用户名来识别用户。 
gid GID。如果系统要对相同的一群人赋予相同的权利,则使用该值。 
comment 用来保存用户的真实姓名和个人细节,或者全名。 
home 指定用户的主目录的绝对路径。 
shell 如果用户登录成功,则要执行的命令的绝对路径放在这一区域中。它可以是任何命令。
如果/etc/passwd文件存放的是用户的信息,由6个分号组成的7个信息,解释如下 
(1):用户名。 
(2):密码(已经加密) 
(3):UID(用户标识),操作系统自己用的 
(4):GID组标识。 
(5):用户全名或本地帐号 
(6):开始目录 
(7):登录使用的Shell,就是对登录命令进行解析的工具。
例如:abc:x:501:501::/home/abc:/bin/bash

二、/etc/shadow
如果查看/etc/shadow文件存放的特殊帐号信息如下: 
name:!!:13675:0:99999:7:::  
每一行给一个特殊帐户定义密码信息,每个字段用 : 隔开。 
字段 1 定义与这个 shadow 条目相关联的特殊用户帐户。 
字段 2 包含一个加密的密码。 
字段 3 自 1/1/1970 起,密码被修改的天数 
字段 4 密码将被允许修改之前的天数(0 表示“可在任何时间修改”) 
字段 5 系统将强制用户修改为新密码之前的天数(1 表示“永远都不能修改”) 
字段 6 密码过期之前,用户将被警告过期的天数(-1 表示“没有警告”) 
字段 7 密码过期之后,系统自动禁用帐户的天数(-1 表示“永远不会禁用”) 
字段 8 该帐户被禁用的天数(-1 表示“该帐户被启用”) 
字段 9 保留供将来使用

如果查看/etc/shadow下存放的普通帐号信息如下: 
(1):帐号名称 
(2):密码:这里是加密过的,但高手也可以解密的。要主要安全问题(代!符号标识该帐号不能用来登录) 
(3):上次修改密码的日期 
(4):密码不可被变更的天数 
(5):密码需要被重新变更的天数(99999表示不需要变更) 
(6):密码变更前提前几天警告 
(7):帐号失效日期 
(8):帐号取消日期 
(9):保留条目,目前没用 
例如:abc:!!:14768:0:99999:7:::

===================================================
详细解说/etc/group /etc/passwd /etc/shadow文件
===================================================
特别注意:
useradd –g users –G administrators admin
新增一个用户admin, 主组是users, 附组是administrators, 有个主组合附组的区别。小g时主组,大G是附组。附组信息会存放在/etc/group之中,主组信息只会存放在/etc/passwd中。

在Linux中,用户(User)和用户组(Group)的配置文件,是作为系统管理员的你最应该了解和掌握的系统基础文件之一。从另一方面来说,了解这些文件也是系统安全管理的重要组成部份,作为一个合格的系统管理员一定要对用户和用户组配置文件了解透彻才行;
一、用户(User)相关:
  谈到用户,就不得不谈用户管理、用户配置文件、以及用户查询和管理的控制工具;用户管理主要通过修改用户配置文件完成,用户管理控制工具最终目的也是为了修改用户配置文件。
  那么,什么是用户查询和管理控制工具呢?用户查询和控制工具是查询、添加、修改和删除用户等系统管理工具,比如查询用户的id和finger命
令,添加用户的useradd 或adduser 、userdel 用户的删除 、设置密码的passwd命令 、修改用户usermod
等等;我们需要知道的是通过用户查询和控制工具所进行的动作的最终目的也是修改用户配置文件;所以我们进行用户管理的时候,直接修改用户配置文件一样可以
达到用户管理的目的。
  了解了上面所说的,我们便能实实在在的感觉到用户(User)配置文件的重要性:其实用户和用户组在系统管理中是不可分割的,但为了说明问题,
我们还是得把用户(User)的配置文件单列出来解说,其中包括/etc/passwd 和/etc/shadow
文件;在这之中,你还能了解UID的重要性;
  通过本标题,您可以了解或掌握的内容有:了解/etc/passwd和/etc/shadow;什么UID ;
  与用户相关的系统配置文件主要有/etc/passwd
和/etc/shadow,其中/etc/shadow是用户资讯的加密文件,比如用户的密码口令的加密保存等;/etc/passwd
和/etc/shadow 文件是互补的;我们可以通过对比两个文件来差看他们的区别;
  1、关于/etc/passwd 和 UID;
  /etc/passwd 是系统识别用户的一个文件,做个不恰当的比喻,/etc/passwd
是一个花名册,系统所有的用户都在这里有登录记载;当我们以beinan 这个账号登录时,系统首先会查阅 /etc/passwd
文件,看是否有beinan 这个账号,然后确定beinan的UID,通过UID 来确认用户和身份,如果存在则读取/etc/shadow
影子文件中所对应的beinan的密码;如果密码核实无误则登录系统,读取用户的配置文件;
  1)/etc/passwd 的内容理解:
  在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,比如下面是我的系统中的/etc/passwd 的两行:
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:501:502::/home/linuxsir:/bin/bash
  第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 beinan 和linuxsir;
  第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;
  第三字段:UID ;请参看本文的UID的解说;
  第四字段:GID;请参看本文的GID的解说;
  第五字段:用户名全称,这是可选的,可以不设置,在beinan这个用户中,用户的全称是beinan sun ;而linuxsir 这个用户是没有设置全称;
  第六字段:用户的家目录所在位置;beinan 这个用户是/home/beinan ,而linuxsir 这个用户是/home/linuxsir ;
  第七字段:用户所用SHELL 的类型,beinan和linuxsir 都用的是 bash ;所以设置为/bin/bash ;
  2)关于UID 的理解:
  UID 是用户的ID 值,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID
,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs
可以查到,一般Linux发行版约定为60000; 在Linux 中,root的UID是0,拥有系统最高权限;
  UID 在系统唯一特性,做为系统管理员应该确保这一标准,UID
的唯一性关系到系统的安全,应该值得我们关注!比如我在/etc/passwd 中把beinan的UID
改为0后,你设想会发生什么呢?beinan这个用户会被确认为root用户。beinan这个帐号可以进行所有root的操作;
  UID 是确认用户权限的标识,用户登录系统所处的角色是通过UID 来实现的,而非用户名,切记;把几个用户共用一个UID
是危险的,比如我们上面所谈到的,把普通用户的UID 改为0,和root共用一个UID
,这事实上就造成了系统管理权限的混乱。如果我们想用root权限,可以通过su或sudo来实现;切不可随意让一个用户和root分享同一个UID ;
  UID是唯一性,只是要求管理员所做的,其实我们修改/etc/passwd 文件,可以修改任何用户的UID的值为0,
  一般情况下,每个Linux的发行版都会预留一定的UID和GID给系统虚拟用户占用,虚拟用户一般是系统安装时就有的,是为了完成系统任务所必须的用户,但虚拟用户是不能登录系统的,比如ftp、nobody、adm、rpm、bin、shutdown等;
  在Fedora 系统会把前499 个UID和GID 预留出来,我们添加新用户时的UID
从500开始的,GID也是从500开始,至于其它系统,有的系统可能会把前999UID和GID预留出来;以各个系统中/etc/login.defs
中的 UID_MIN 的最小值为准; Fedora 系统 login.defs的UID_MIN是500,而UID_MAX
值为60000,也就是说我们通过adduser默认添加的用户的UID的值是500到60000之间;而Slackware
通过adduser不指定UID来添加用户,默认UID 是从1000开始;
  2、关于/etc/shadow ;
  1)/etc/shadow 概说;
  /etc/shadow文件是/etc/passwd 的影子文件,这个文件并不由/etc/passwd
而产生的,这两个文件是应该是对应互补的;shadow内容包括用户及被加密的密码以及其它/etc/passwd
不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作,权限如下:
  -r——– 1 root root 1.5K 10月 16 09:49 /etc/shadow
  /etc/shadow 的权限不能随便改为其它用户可读,这样做是危险的。如果您发现这个文件的权限变成了其它用户组或用户可读了,要进行检查,以防系统安全问题的发生;
  如果我们以普通用户查看这个文件时,应该什么也查看不到,提示是权限不够:
  [beinan@localhost ~]$ more /etc/shadow
   /etc/shadow: 权限不够
  2)/etc/shadow 的内容分析;
  /etc/shadow 文件的内容包括9个段位,每个段位之间用:号分割;我们以如下的例子说明;
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;
  第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;
  第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;
  第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;
  第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;
  第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;
  第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
  第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
  第九字段:保留字段,目前为空,以备将来Linux发展之用;
  如果更为详细的,请用 man shadow来查看帮助,您会得到更为详尽的资料;
  我们再根据实例分析:
  beinan:$1$VE.Mq2Xf$2c9Qi7EQ9JP8GKF8gH7PB1:13072:0:99999:7:::
   linuxsir:$1$IPDvUhXP$8R6J/VtPXvLyXxhLWPrnt/:13072:0:99999:7::13108:
  第一字段:用户名(也被称之为登录名),在例子中有峡谷两条记录,也表示有两个用户beinan和linuxsir
  第二字段:被加密的密码,如果有的用户在此字段中是x,表示这个用户不能登录系统,也可以看作是虚拟用户,不过虚拟用户和真实用户都是相对的,系统管理员随时可以对任何用户操作;
  第三字段:表示上次更改口令的天数(距1970年01月01日),上面的例子能说明beinan和linuxsir这两个用户,是在同一天更改了用户密码,当然是通过passwd 命令来更改的,更改密码的时间距1970年01月01日的天数为13072;
  第四字段:禁用两次口令修改之间最小天数的功能,设置为0
  第五字段:两次修改口令间隔最多的天数,在例子中都是99999天;这个值如果在添加用户时没有指定的话,是通过/etc/login.defs来获取默认值,PASS_MAX_DAYS 99999;您可以查看/etc/login.defs来查看,具体的值;
  第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc
/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;在例子中的值是7 ,表示在用户口令将过期的前7天警告用户更改期口令;
  第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;在例子中,此字段两个用户的都是空的,表示禁用这个功能;
  第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;在例子中,
我们看到beinan这个用户在此字段是空的,表示此用户永久可用;而linuxsir这个用户表示在距1970年01月01日后13108天后过期,算
起来也就是2005年11月21号过期;哈哈,如果有兴趣的的弟兄,自己来算算,大体还是差不多的;);
  第九字段:保留字段,目前为空,以备将来Linux发展之用;
二、关于用户组;
  具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;在本标题下,您还能了解到什么是GID ;
  1、/etc/group 解说;
  /etc/group
文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用
户组的用户之间具有相似的特征。比如我们把某一用户加入到root用户组,那么这个用户就可以浏览root用户家目录的文件,如果root用户把某个文件
的读写执行权限开放,root用户组的所有用户都可以修改此文件,如果是可执行的文件(比如脚本),root用户组的用户也是可以执行的;
  用户组的特性在系统管理中为系统管理员提供了极大的方便,但安全性也是值得关注的,如某个用户下有对系统管理有最重要的内容,最好让用户拥有独立的用户组,或者是把用户下的文件的权限设置为完全私有;另外root用户组一般不要轻易把普通用户加入进去,
  2、/etc/group 内容具体分析
  /etc/group 的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:
  group_name:passwd:GID:user_list
  在/etc/group 中的每条记录分四个字段:
  第一字段:用户组名称;
  第二字段:用户组密码;
  第三字段:GID
  第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;
  我们举个例子:
  root:x:0:root,linuxsir 注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户(可以通过/etc/passwd查看);;
  beinan:x:500:linuxsir 注:用户组beinan,x是密码段,表示没有设置密码,GID是500,beinan用户组下包括linuxsir用户及GID为500的用户(可以通过/etc/passwd查看);
  linuxsir:x:502:linuxsir 注:用户组linuxsir,x是密码段,表示没有设置密码,GID是502,linuxsir用户组下包用户linuxsir及GID为502的用户(可以通过/etc/passwd查看);
  helloer:x:503: 注:用户组helloer,x是密码段,表示没有设置密码,GID是503,helloer用户组下包括GID为503的用户,可以通过/etc/passwd查看;
  而/etc/passwd 对应的相关的记录为:
  root:x:0:0:root:/root:/bin/bash
   beinan:x:500:500:beinan sun:/home/beinan:/bin/bash
   linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
   helloer:x:502:503::/home/helloer:/bin/bash
  由此可以看出helloer用户组包括 helloer用户;所以我们查看一个用户组所拥有的用户,可以通过对比/etc/passwd和/etc/group来得到;
  2、关于GID ;
  GID和UID类似,是一个正整数或0,GID从0开始,GID为0的组让系统付予给root用户组;系统会预留一些较靠前的GID给系统虚拟
用户(也被称为伪装用户)之用;每个系统预留的GID都有所不同,比如Fedora
预留了500个,我们添加新用户组时,用户组是从500开始的;而Slackware
是把前100个GID预留,新添加的用户组是从100开始;查看系统添加用户组默认的GID范围应该查看 /etc/login.defs 中的
GID_MIN 和GID_MAX 值;
  我们可以对照/etc/passwd和/etc/group 两个文件;我们会发现有默认用户组之说;我们在 /etc/passwd
中的每条用户记录会发现用户默认的GID
;在/etc/group中,我们也会发现每个用户组下有多少个用户;在创建目录和文件时,会使用默认的用户组;我们还是举个例子;
  比如我把linuxsir 加为root用户组,在/etc/passwd 和/etc/group 中的记录相关记录为:
  linuxsir用户在 /etc/passwd 中的记录;我们在这条记录中看到,linuxsir用户默认的GID为502;而502的GID 在/etc/group中查到是linuxsir用户组;
  linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash
  linuxsir 用户在 /etc/group 中的相关记录;在这里,我们看到linuxsir用户组的GID 为502,而linuxsir 用户归属为root、beinan用户组;
  root:x:0:root,linuxsir
   beinan:x:500:linuxsir
   linuxsir:x:502:linuxsir
  我们用linuxsir 来创建一个目录,以观察linuxsir用户创建目录的权限归属;
  [linuxsir@localhost ~]$ mkdir testdir
   [linuxsir@localhost ~]$ ls -lh
  总用量 4.0K
  drwxrwxr-x 2 linuxsir linuxsir 4.0K 10月 17 11:42 testdir
  通过我们用linuxsir 来创建目录时发现,testdir的权限归属仍然是linuxsir用户和linuxsir用户组的;而没有归属root和beinan用户组,明白了吧;
  但值得注意的是,判断用户的访问权限时,默认的GID 并不是最重要的,只要一个目录让同组用户可以访问的权限,那么同组用户就可以拥有该目录的访问权,在这时用户的默认GID 并不是最重要的;
  3、/etc/gshadow 解说;
  /etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc
/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极
有必要的。比如我们不想让一些非用户组成员永久拥有用户组的权限和特性,这时我们可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用
到用户组密码;
  /etc/gshadow 格式如下,每个用户组独占一行;
  groupname:password:admin,admin,…:member,member,…
  第一字段:用户组
  第二字段:用户组密码,这个段可以是空的或!,如果是空的或有!,表示没有密码;
  第三字段:用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割;
  第四字段:组成员,如果有多个成员,用,号分割;
  举例:
  beinan:!::linuxsir
   linuxsir:oUS/q7NH75RhQ::linuxsir
  第一字段:这个例子中,有两个用户组beinan用linuxsir
  第二字段:用户组的密码,beinan用户组无密码;linuxsir用户组有已经,已经加密;
  第三字段:用户组管理者,两者都为空;
  第四字段:beinan用户组所拥有的成员是linuxsir ,然后还要对照一下/etc/group和/etc/passwd
查看是否还有其它用户,一般默认添加的用户,有时同时也会创建用户组和用户名同名称; linuxsir 用户组有成员linuxisir ;
  如何设置用户组的密码? 我们可以通过 gpasswd 来实现;不过一般的情况下,没有必要设置用户组的密码;不过自己实践一下也有必要;下面是一个为linuxsir用户组设置密码的例子;
  gpasswd 的用法: gpasswd 用户组
  
[email=root@localhost]root@localhost[/email]
~]# gpasswd linuxsir
  正在修改 linuxsir 组的密码
  新密码:
  请重新输入新密码:
  用户组之间的切换,应该用 newgrp ,这个有点象用户之间切换的su ;我先举个例子:
  [beinan@localhost ~]$ newgrp linuxsir
  密码:
  [beinan@localhost ~]$ mkdir lingroup
   [beinan@localhost ~]$ ls -ld lingroup/
  drwxr-xr-x 2 beinan linuxsir 4096 10月 18 15:56 lingroup/
  [beinan@localhost ~]$ newgrp beinan
   [beinan@localhost ~]$ mkdir beinangrouptest
   [beinan@localhost ~]$ ls -ld beinangrouptest
  drwxrwxr-x 2 beinan beinan 4096 10月 18 15:56 beinangrouptest
  说明:我是以beinan用户组切换到linuxsir用户组,并且建了一个目录,然后再切换回beinan用户组,又建了一个目录,请观察两个目录属用户组的不同;还是自己体会吧;
三、通过用户和用户组配置文件来查询或管理用户;
  1、用户和用户组查询的方法;

  1)通过查看用户(User)和用户组的配置文件的办法来查看用户信息
  我们已经用户(User)和用户组(Group)的配置文件已经有个基本的了解,通过查看用户(User)和用户组的配置文件,我们就能做到对系统用户的了解,当然您也可以通过id 或finger 等工具来进行用户的查询等任务。
  对于文件的查看,我们可以通过 more 或cat 来查看,比如 more /etc/passwd 或cat /etc/passwd ;其它工具也一样,能对文本查看就行,比如less 也好
  比如我们可以通过more 、cat 、less命令对/etc/passwd 的查看,虽然命令不同,但达到的目的是一样的, 都是得到/etc/passwd 的内容;
  [root@localhost ~]# more /etc/passwd
   [root@localhost ~]# cat /etc/passwd
   [root@localhost ~]# less /etc/passwd

  2)通过id和finger 工具来获取用户信息;-------很重要-----
  除了直接查看用户(User)和用户组(Group)配置文件的办法除外,我们还有id和finger工具可用,我们一样通过命令行的操作,来
完成对用户的查询;id和finger,是两个各有测重的工具,id工具更测重用户、用户所归属的用户组、UID 和GID 的查看;而finger
测重用户资讯的查询,比如用户名(登录名)、电话、家目录、登录SHELL类型、真实姓名、空闲时间等等;

  id 命令用法;
  id 选项 用户名
  比如:我想查询beinan和linuxsir 用户的UID、GID 以及归属用户组的情况:
  [root@localhost ~]# id beinan
   uid=500(beinan) gid=500(beinan) groups=500(beinan)
  注:beinan的UID 是 500,默认用户组是beinan,默认用户组的GID 是500,归属于beinan用户组;
  [root@localhost ~]# id linuxsir
   uid=505(linuxsir) gid=502(linuxsir) groups=502(linuxsir),0(root),500(beinan)
  注:linuxsir的UID 是505,默认用户组是linuxsir ,默认用户组的GID 是502,归属于linuxsir(GID为502)、root(GID为0),beinan(GID为500);
  关于id的详细用法,我会在专门用户查询的文章来介绍;您可以通过man id 来查看用法,用起来还是比较简单的;
  
    finger 的用法
  finger 选项 用户名1 用户名2 …
  详细用法请参看man finger ;关于更为详细用法,我会在专门用户查询的文章来介绍;
  如果finger 不加任何参数和用户,会显示出当前在线用户,和w命令类似;对比一下;不过各有测重;

 [root@localhost ~]# w
   14:02:42 up 1:03, 3 users, load average: 0.04, 0.15, 0.18
   USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
   linuxsir tty1 - 13:39 22:51 0.01s 0.01s -bash
   beinan tty2 - 13:53 8:48 11.62s 0.00s /bin/sh /usr/X1
   beinan pts/0 :0.0 13:57 0.00s 0.14s 1.08s gnome-terminal

   [root@localhost ~]# finger
   Login Name Tty Idle Login Time Office Office Phone
   beinan beinan sun tty2 8 Oct 18 13:53
   beinan beinan sun pts/0 Oct 18 13:57 (:0.0)
   linuxsir linuxsir open tty1 22 Oct 18 13:39 linuxsir o +1-389-866-771
  如果我们在finger 后面加上用户名,就可以看到用户更为详细的信息,可以一次查看多个用户,用空格分开,比如下面的例子中,我们一次查询两个用户beinan和linuxsir的信息;
  [root@localhost ~]# finger beinan linuxsir
   Login: beinan 注:用户名(也是登录名) Name: beinan sun (用户名全称)
   Directory: /home/beinan 注:家目录 Shell: /bin/bash 注:所用SHELL类型
   On since Tue Oct 18 13:53 (CST) on tty2 10 minutes 55 seconds idle 注:空闲时间;
   On since Tue Oct 18 13:57 (CST) on pts/0 from :0.0
   No mail.
   No Plan.
   Login: linuxsir Name: linuxsir open
   Directory: /home/linuxsir Shell: /bin/bash
   Office: linuxsir office, +1-389-866-7715
   On since Tue Oct 18 13:39 (CST) on tty1 24 minutes 58 seconds idle
   No mail.
   No Plan.

  3)用户组查询的办法;
  我们可以通过用户来查询所归属的组,用groups 来查询;比如我查询beinan和linuxsir 所归属的组,我们可以用groups 来查询;
  [root@localhost ~]# groups beinan linuxsir
   beinan : beinan
   linuxsir : linuxsir root beinan
  注:这是通过groups 同时查看了用户beinan和linuxsir所归属的组;

  2、通过修改用户(User)和用户组(Group)配置文件的办法来添加;
  由于我们已经在前面说过,可以通过修改配置文件的办法来管理用户,所以此主题应该包括此内容;当然通过用户及用户组管理工具(比如
adduser、userdel、usermod 、userinfo、groupadd 、groupdel
、groupmod等)也是可以的,通过管理工具对用户的管理我们将要在专门一篇文章中介绍;
  通过修改用户(User)和用户组(Group)配置文件的方法管理用户之用户的添加流程;
  我们先以添加用户为例,对用户的删除和修改都比较简单;
  1)修改 /etc/passwd ,添加用户记录;
  我们按/etc/passwd的格式的约定来添加新的用户记录;当然您要让一个用户失效,可以删除您想要删除的用户记录;值得注意的是,不能让UID 重复;
  比如我想添加lanhaitun 这个用户,我发现UID 508没有用户用,并且我想把其用户组也设置为lanhaitun ,用户组的GID 也设置为508,如果GID 没有占用的话;
  我们要打开 /etc/passwd ,在最下面加一行;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash
  然后执行pwconv ,让/etc/passwd 和/etc/shadow同步,您可以查看 /etc/shadow的内容是否同步;
  [root@localhost beinan]# pwconv
  2)修改/etc/group
  首先,我们得查看是否有lanhaitun用户组,以及GID 508 是否被其它用户组占用;
  [root@localhost ~]# more /etc/group |grep lanhaitun
   [root@localhost ~]# more /etc/group |grep 508
  通过查看,我们发现没有被占用;所以我们要添加lanhaitun 的记录到 /etc/group
  lanhaitun:x:508:
  其次,是运行 grpconv 来同步/etc/group 和/etc/gshadow内容,您可以通过查看/etc/gshadow的内容变化确认是不是添加组成功了;
  [root@localhost beinan]# grpconv
  3)创建用户的家目录,并把用户启动文件也复制过去;
  创建用户的家目录,我们要以/etc/passwd 中添加的新用户的记录为准,我们在/etc/passwd
中添加新用户lanhaitun ,她的家目录是处于/home/lanhaitun ;另外我们还需要把/etc/skel
目录下的.*隐藏文件复制过去;
  [root@localhost ~]# cp -R /etc/skel/ /home/lanhaitun
   [root@localhost ~]# ls -la /home/lanhaitun/
   总用量 48
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 root root 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 root root 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 root root 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 root root 5619 10月 18 14:53 .canna
   -rw-r–r– 1 root root 438 10月 18 14:53 .emacs
   -rw-r–r– 1 root root 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 root root 4096 10月 18 14:53 .kde
   -rw-r–r– 1 root root 658 10月 18 14:53 .zshrc
  4)改变新增用户家目录的属主和权限;
  我们发现新增用户的家目录的属主目前是root ,并且家目录下的隐藏文件也是root权限;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 root root 4096 10月 18 14:53 /home/lanhaitun/
  所以我们要通过chown 命令来改变/home/lanhaitun目录归属为lanhaitun用户;
  [root@localhost ~]# chown -R lanhaitun:lanhaitun /home/lanhaitun
  查看是否已经更换了属主为lanhaitun用户所有;
  [root@localhost ~]# ls -ld /home/lanhaitun/
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
   [root@localhost ~]# ls -la /home/lanhaitun/
   总用量 48
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
  看来已经实现了;
  但这样还是不够的,因为/home/lanhaitun/的目录权限可能会过于公开;
  drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我们看到 /home/lanhaitun/ 目录的权限为 drwxr-xr-x ,也就是同组用户和其它用户组所能查看,为了保密,我们有理由把新增用户家目录的权限设置为只有其自己可读可写可执行;于是… …
  [root@localhost ~]# chmod 700 /home/lanhaitun/
   [root@localhost ~]# ls -ld /home/lanhaitun/
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 14:53 /home/lanhaitun/
  我们用其它用户,当然得把具有超级权限的root用户除外;比如我以beinan用户来查看lanhaitun的家目录会得到如下信息;
  [beinan@localhost ~]$ ls -la /home/lanhaitun/
   ls: /home/lanhaitun/: 权限不够
  如此看来,lanhaitun用户的家目录是安全的 
<IMG onmousewheel="return imgzoom(this);" οnmοuseοver="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" οnclick="if(!this.resized) {return true;} else {window.open('http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif');}" alt="" src="http://linux.qisi.org/wp-includes/images/smilies/icon_wink.gif" οnlοad="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  5)设置新增用户的密码;
  以上各步骤都就序了,我们得为新增用户设置密码了;要通过passwd 命令来生成;这个没有办法通过修改文件解决;
  passwd 的用法:
  passwd 用户
  [root@localhost ~]# passwd lanhaitun
   Changing password for user lanhaitun.
   New UNIX password: 注:输入您的密码
   Retype new UNIX password: 再输入一次
   passwd: all authentication tokens updated successfully. 注:设置密码成功
  6)测试添增用户是否成功;
  您可以用新增用户登录测试,也可以通过su 来切换用户测试;
  [beinan@localhost ~]$ su lanhaitun
   Password:
   [lanhaitun@localhost beinan]$ cd ~
   [lanhaitun@localhost ~]$ pwd
   /home/lanhaitun
   [lanhaitun@localhost ~]$ ls -la
   总用量 52
   drwx—— 3 lanhaitun lanhaitun 4096 10月 18 15:15 .
   drwxr-xr-x 10 root root 4096 10月 18 14:53 ..
   -rw-r–r– 1 lanhaitun lanhaitun 24 10月 18 14:53 .bash_logout
   -rw-r–r– 1 lanhaitun lanhaitun 191 10月 18 14:53 .bash_profile
   -rw-r–r– 1 lanhaitun lanhaitun 124 10月 18 14:53 .bashrc
   -rw-r–r– 1 lanhaitun lanhaitun 5619 10月 18 14:53 .canna
   -rw-r–r– 1 lanhaitun lanhaitun 438 10月 18 14:53 .emacs
   -rw-r–r– 1 lanhaitun lanhaitun 120 10月 18 14:53 .gtkrc
   drwxr-xr-x 3 lanhaitun lanhaitun 4096 10月 18 14:53 .kde
   -rw——- 1 lanhaitun lanhaitun 66 10月 18 15:15 .xauthOhEoTk
   -rw-r–r– 1 lanhaitun lanhaitun 658 10月 18 14:53 .zshrc
   [lanhaitun@localhost ~]$ mkdir testdir
   [lanhaitun@localhost ~]$ ls -lh
   总用量 4.0K
   drwxrwxr-x 2 lanhaitun lanhaitun 4.0K 10月 18 15:16 testdir
  通过上面一系列动作,我们会发现所创建的lanhaitun用户已经成功;
  2、通过修改用户(User)和用户组(Group)配置文件的办法来修改用户或用户组;
  我们可以修改/etc/passwd 和/etc/group 来达到修改用户和用户所归属的组,这个过程和添加新用户时差不多;比如我想修改lanhaitun的用户名全称、公司以及电话等信息;我们可以修改/etc/passwd 实现;
  1)修改用户信息;
  lanhaitun:x:508:508::/home/lanhaitun:/bin/bash 注:这是初始记录;
  我们可以修改为
  lanhaitun:x:508:508:lanhaitun wu,Office Dalian,13000000000:/home/lanhaitun:/bin/bash
  当然我们还可以修改用户的bash 类型,家目录等,当然如果修改家目录,还得进行建家目录、属主和权限的操作,这和前面添加用户的办法在程序上有些是相同的;
  修改完成后,我们要进行pwconv 同步,通过finger 来查看用户的信息等;
  [root@localhost lanhaitun]# pwconv
   [root@localhost lanhaitun]# finger lanhaitun
   Login: lanhaitun Name: lanhaitun wu
   Directory: /home/lanhaitun Shell: /bin/bash
   Office: Office Dalian, +1-300-000-0000
   Never logged in.
   No mail.
   No Plan.

  2)修改用户所归属的组,可以通过/etc/group 修改实现;
  当然修改用户和用户组,不仅能通过修改配置文件来实现,还能过过 usermod 及chfn来实现;我将在以后的文档中写一写,也比较简单;您可以通过man来查看用法;在这里我们先讲一讲如何通过修改配置文件来达到目的;
  如果我们想把lanhaitun 这个用户归属到root用户组,所以我们还能修改/etc/group 的办法来达到目的;找到/etc/group 中的root开头的一行,按其规划加入lanhaitun;
  root:x:0:root,lanhaitun
  如果不明白,看前面/etc/group的解释,谢谢;
  然后执行 grpconv 命令来同步/etc/group 和/etc/gshadow两个文件的内容;
  [root@localhost ~]# grpconv
  查看lanhaitun归属组的信息;
  [root@localhost ~]# id lanhaitun
   uid=508(lanhaitun) gid=508(lanhaitun) groups=508(lanhaitun),0(root)
  3)删除用户及用户组的办法;
  这个比较简单,我们可以通过删除/etc/passwd 和/etc/group 相应的用户和用户组记录就能达到目的,也能过过userdel 和groupdel 来实现对用户及用户组的删除;
  如果是通过修改用户和用户组配置文件的办法来删除用户,就是删除相应的记录就行了,如果不想保留其家目录,删除就是了。
  [root@localhost ~]# userdel lanhaitun
   [root@localhost ~]# userdel -r lanhaitun
  注:可以用userdel 来删除lanhaitun 用户,我们看到第二个例子中多了一个参数-r
,第一个例子是说只删除lanhaitun用户,其家目录和mail等仍会保存;加上-r
参数,是删除家目录及mail等;所以要小心操作;用userdel 删除用户的同时,也会把其用户组删除;我们可以通过/etc/passwd
和/etc/group 的内容变化来查看。

===================================================
linux系统账号和密码策略
===================================================
一.情况说明
为了满足系统安全性要求和最大限度的保障主机及数据安全。特为linux系统的账号和密码作以下安全策略设置。
Linux系统中对账号和密码的管理是通过下面这些配置文件:
         /etc/login.defs
         /etc/shadow
其中/etc/login.defs文件是一个全局性的文件它的设置是对系统中所有新创建的用户起作用(root用户除外)
然而/etc/shadow文件可以针对每个特定账号进行策略设置。
因此我们可以修改/etc/login.defs文件使以后新创建的用户都严格遵循策略限制,同时我们可以手动修改/etc/shadow文件对系统现有的账号进行设置以满足策略要求。

二.修改/etc/login.defs文件
修改账号密码最大有效使用时间
添加test账号测试效果并查看test账号目前信息
1.调整系统时间,人为使test账号过期
2.用test账号登陆系统
提示密码过期需要修改
系统提示需要修改账号密码。而且修改的密码必须符合密码复杂度要求,否则不予进入系统。
3.登陆系统后查看test账号情况
密码过期日期自动往后推移1天
而且从输出信息可以得知此账号过期时间已经往后又推迟了1天

三.在/etc/login.defs文件中还可以修改账号的密码长度
PASS_MIN_LEN    5       系统默认是最少5个字符

四.修改/etc/shadow文件
这个文件我们可以手动去修改但是为了安全和正确性,我们建议使用系统提供的一个命令来修改:chage
-m :密码可更改的最小天数。为零时代表任何时候都可以更改密码。
  -M :密码保持有效的最大天数。
  -W :用户密码到期前,提前收到警告信息的天数。
  -E :帐号到期的日期。过了这天,此帐号将不可用。
  -d :上一次更改的日期
  -l :例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
这个命令的使用必须是root账号(除了-l参数),因此我们可以使用以下命名和参数:
#chage –M 90 –W 7 账号   ?—修改密码有效期限为90天并且提前7天警告用户密码将过期
 
五.Sudo设置
 为了便于日后的维护和避免当root账号密码过期后无法操作系统的情况出现。特意为某个特殊账号配置sudo权限。
1. 基本步骤
以root用户登陆系统
运行#visudo
在文件的结尾添加内容:
test  ALL=(root)/usr/bin/chage
账号名称
主机名ALL代表所有主机
赋予普通用户具有root权限执行命令
赋予普通用户有执行chage的权限

======================================
Linux时钟简介:非常重要
======================================
Linux机器里有两个时钟,一个是硬件时钟(CMOS时钟),一个是内核时钟。
硬件时钟是电池驱动的,通过专门的芯片工作。可以通过BIOS设置屏或一些系统命令(如hwclock)进行设置。
内核时钟是由 内核维护的,启动时从硬件读取时间,之后独立运行。
RTC(Real Time Clock)
即Linux实时的时钟驱动,通常它们被嵌在计算机的芯片中,也有一些是在主板上使用Motorola MC146818(或clone)实现的。该硬件设备可映射到/dev/rtc, 供root编程访问。

Linux将时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟两种。系统时间是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的那个主板硬件时钟,这个时钟可以在BIOS的“Standard BIOS Feture”项中进行设置。 既然Linux有两个时钟系统,那么大家所使用的Linux默认使用哪种时钟系统呢?会不回出现两种系统时钟冲突的情况呢?这些疑问和担心不无道理。首 先,Linux并没有默认哪个时钟系统。当Linux启动时,系统时钟会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。
从Linux启动过程来看,系统时钟和硬件时钟不会发生冲突,但Linux中的所有命令(包括函数)都是采用的系统时钟设置。不仅如此,系统时钟和硬件时 钟还可以采用异步方式,即系统时间和硬件时间可以不同。这样做的好处对于普通用户意义不大,但对于Linux网络管理员却有很大的用处。例如,要将一个很大的网络中(跨越若干时区)的服务器同步,假如位于美国纽约的Linux服务器和北京的Linux服务器,其中一台服务器无须改变硬件时钟 而只需临时设置一个系统时间,如要将北京服务器上的时间设置为纽约时间,两台服务器完成文件的同步后,再与原来的时钟同步一下即可。这样系统和硬件时钟就 提供了更为灵活的操作。
在Linux中,用于时钟查看和设置的命令主要有date、hwclock和clock。其中,clock和hwclock用法相近,只不过clock命 令除了支持x86硬件体系外,还支持Alpha硬件体系。由于目前绝大多数用户使用x86硬件体系,所以可以视这两个命令为一个命令来学习。

1.hwclock –r : 查看硬件时钟是否为本地时间
为了查看硬件时钟是否为本地时间,运行命令hwclock –r。结果系统提示:“Could not open RTC: No such file or directory”,即找不到RTC文件。

2./dev/rtc如何创建RTC文件
cat /dev/rtc
cat /proc/driver/rtc   -----这个很重要
mknod /dev/rtc c 10 135
date

由于内核在编译过程中没有提供RTC支持,需要重新编译内核(或为内核增加一个module)。方法为,在make menuconfig阶段,选中“Character device”的“Enhanced Real Time Clock Support”一项的支持。为内核增加了该模块后,目录/proc/drive/下已出现了rtc文件,cat也能查看到正常的内容。但/dev/目录下仍没有rtc文件。
于是通过mknod命令在/dev目录下增加rtc文件。通过man rtc可以得知,RTC为只读字符设备,主10,从135。因此命令为“mknod /dev/rtc c 10 135”。命令执行完毕后,/dev下成功生成了rtc文件。运行hwclock –r,能够看到硬件时间为本地时间。通过date命令查看系统时间,却为UTC时间。这说明系统没有进行本地时间的设置。

3./etc/localtime   决定了哪个时区
[root@nas-oam1 etc]# date -R  查看时间和时区。
Mon, 23 Dec 2013 11:33:48 +0800
Linux的系统时区是通过符号连接/etc/localtime来得到的。
可以通过tzset命令来设置时区。如果没有该命令,可以通过命令“ln –s /etc/localtime /usr/share/zoneinfo/Asia/Shanghai”来将时区设置为亚洲的上海。

4./etc/sysconfig/clock
该配置文件可用来设置用户选择何种方式显示时间。
如果硬件时钟为本地时间,则UTC设为0(缺省值),并且不用设置环境变量TZ。
如果硬件时钟为UTC时间,则要设置UTC为1,并设置环境变量TZ(或配置文件/etc/TZ)为时区信息,如“Asia/Shanghai”。

我机器的硬件时间为本地时间,因此该配置文件内容为:
ZONE="Asia/Shanghai"
UTC=0
ARC=0

1.在虚拟终端中使用date命令来查看和设置系统时间
查看系统时钟的操作:
# date                    --------------------------有用

设置系统时钟的操作:
# date 091713272003.30    --------------------------有用
通用的设置格式:
# date 月日时分年.秒

2.使用hwclock或clock命令查看和设置硬件时钟
查看硬件时钟的操作:
# hwclock --show 或# clock –show --------------------------有用
2003年09月17日 星期三 13时24分11秒 -0.482735 seconds
设置硬件时钟的操作:
# hwclock --set --date="08/23/2013 09:52:00"
或者# clock --set --date="09/17/2003 13:26:00"
通用的设置格式:hwclock/clock --set --date=“月/日/年 时:分:秒”。

3.系统时钟和硬件时钟同步:
# hwclock --hctosys 或者   --------------------------有用
# clock --hctosys          --------------------------有用
上面命令中,--hctosys表示Hardware Clock to SYStem clock。

硬件时钟与系统时钟同步:
hwclock --systohc 或者     --------------------------有用
clock –systohc             --------------------------有用

注意的是:clock是hwclock的软链接
[root@oam-nas2 yuanjs]# ls -l /sbin/clock*
lrwxrwxrwx. 1 root root 7  4月  3 15:55 /sbin/clock -> hwclock

===============================
 linux 下修改日期和时间
===============================
我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成2009年11月13日的命令如下。 
#date -s 11/13/09 
将系统时间设定成下午1点12分0秒的命令如下。
#date -s 13:12:00

---- 注意,这里说的是系统时间,是linux由操作系统维护的。

在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性, Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。
#clock -w    ----这个命令强制把系统时间写入CMOS。

======================================
Linux时区简介:非常重要
======================================
CST China Standard Time        -----UTC+8:00 中国沿海时间(北京时间)
UTC 世界协调时间(Universal Time Coordinated,UTC)
GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地时间,如北京为早上八点(东八区),UTC时间就为零点,时间比北京时晚八小时,以此计算即可
HKT-8 香港时间
JST-9 Janpanese Standard Time 日本标准时间

《1》查看时区
The time zone of the system is defined by the contents of /etc/localtime.
1)cat /etc/localtime         查看当前选中哪个时区。--------重点----------
  cat /etc/timezone  unix
  cat /etc/TZ        unix
2)cat /etc/sysconfig/clock   查看当前系统时钟时区和硬件时钟时区以及他们的时差是多少
该配置文件可用来设置用户选择何种方式显示时间。
如果硬件时钟为本地时间,则UTC设为0,并且不用设置环境变量TZ。
如果硬件时钟为UTC时间,则要设置UTC为1,并设置环境变量TZ(或配置文件/etc/TZ)为时区信息,如“Asia/Shanghai”。
我机器的硬件时间为本地时间,因此该配置文件内容为:
ZONE="Asia/Shanghai"
UTC=0   #缺省值
ARC=0

如何查看硬件时钟是否为本地时间:
hwclock –r

《2》设置时区:
1)在/usr/share/zoneinfo/目录下查询想要更换的时区名称,修改格式同上
2)/etc/localtime可以是二进制文件也可以是软连接文件。
   将原有的localtime文件移走;
   # mv /etc/localtime /etc/localtime-old
3)两个方法:
   (1)做新的localtime文件,将对应的时区文件链接过来:
      # ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime    --------重点----------
   (2)或者cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime:
      # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime       --------重点----------
4)在/etc/sysconfig/clock文件上设置时区条目: (e.g. "Asia/Shanghai")  ----设置硬件时钟是否用local time or UTC
   ZONE="Asia/Shanghai"
   UTC=0   #缺省值 参考上面
   
[root@xiangfch etc]# cat /etc/sysconfig/clock
# The time zone of the system is defined by the contents of /etc/localtime.
# This file is only for evaluation by system-config-date, do not rely on its
# contents elsewhere.
ZONE="Asia/Shanghai"

======================================
linux下如何修改时区(TIMEZONE)
======================================
如何修改linux的timezone?谢谢!
你可以看看/etc路径下有没有一个文件localtime,如果有的话,它应该是一个软链接,更改链接指向就可以更改系统时区设定。

现在的集群软件,大部分都需要多台机器的时间差不能超过1000秒,所以如果用户都用date命令去修改时间,这个比较简单就不多说了。然而,有时候两台机器的时间虽然一致,但是时区却不同,那么用户就不得不去修改机器的时区,这个修改在不同操作系统是不同的,所以这里分别介绍一下主流操作系统修改时区的方法:

Solaris:
    在solaris中,修改时区需要修改/etc/TIMEZONE文件,其中的TZ=PRC就表示中国时区,我们可以将其替换为TZ=US/Pacific,再重启机器,就将时区修改为美国太平洋时区了。
    这里需要注意三点:
    1,在X86的机器上,需要再执行如下命令,更新/etc/rtc_config文件:
       # rtc -z zone-name(这里的zone-name就是/etc/TIMEZONE中TZ的值)
       # rtc -c
    2,到底有多少种时区可以选择呢?我们可以进入/usr/share/lib/zoneinfo目录,其中有很多目录,包括US,也有很多文件,比如PRC;这表示US下还有很多时区,而PRC就是统一的时区。正因为如此,我们才看到TZ=PRC和TZ=US/Pacific这两种不同的形式。
    3,需要重启系统使之生效。

Linux(Redhat and Suse):
    1,在/usr/share/zoneinfo/目录下查询想要更换的时区名称,修改格式同上
    2,将原有的localtime文件移走;
       # mv /etc/localtime /etc/localtime-old
    3,做新的localtime文件,将对应的时区文件链接过来
       # ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    4,与硬件同步
       # /sbin/hwclock --systohc

AIX:
    1,查看当前时区(其他操作系统是date命令即可)
       cat /etc/environment (查找TZ所在行)
    2,为了妥善起见,建议使用smit修改时区
       smit chtz
    3,所有的时区信息在/usr/share/lib/zoneinfo目录

HPUX:
    1,# set_parms timezone,可以通过交互的方式来修改时区。

所有Unix系统(不包括Linux),可以通过echo $TZ来查看当前时区。
    
另外你也可以安装system-config-date工具:
yum install system-config-date

更多信息:
Linux Time Zone Configuration guide:
Background - The Earth is divided into time zones that are 15 degrees of longitude each, for this corresponds to the amount of angular distance the Sun appears to travel in 1 hour. 0 degrees longitude runs through the Royal Observatory in Greenwich, England. This is the origin of Greenwich Mean Time, or GMT. For all practical purposes, GMT and UTC are the same. To complicate matters, some countries observe Daylight Savings Time (DST), while others do not. Even within some countries, some states or districts do not observe DST while the rest of the country does! DST can also begin and end on different days in different countries! What a mess...
There are several files and directories that are used for time zones, and several tools:
l         /etc/sysconfig/clock- this is a short text file that defines the timezone, whether or not the hardware clock is using UTC, and an ARC option that is only relevant to DEC systems.
      eg:/ect/sysconfig/clock file content on jstest3:
       ZONE="Asia/Shanghai"
       UTC=true
       ARC=false
    
l         /etc/localtime - this is a symbolic link to the appropriate time zone file in /usr/share/zoneinfo
l         /usr/share/zoneinfo - this directory contains the time zone files that were compiled by zic(The time zone compiler. Zic creates the time conversion information files.)These are binary files and cannot be viewed with a text viewer. The files contain information such as rules about DST. They allow the kernel to convert UTC UNIX time into appropriate local dates and times.
l         /etc/rc.d/rc.sysinit- This script runs once, at boot time. A section of this script sets the system time from the hardware clock and applies the local time zone information.
l         /etc/init.d/halt- This script runs during system shutdown. A section of this script synchronizes the hardware clock from the system clock.
l         /etc/adjtime - This file is used by the adjtimex function, which can smoothly adjust system time while the system runs. settimeofday is a related function.
l         redhat-config-date or dateconfig - These commands start the Red Hat date/time/time zone configuration GUI.
l         zdump - This utility prints the current time and date in the specified time zone. Example:
# zdump Japan
Japan Sat Mar 29 00:47:57 2003 JST
# zdump Iceland
Iceland Fri Mar 28 15:48:02 2003 GMT

RedHat Linux操作系统修改时区的方法
Most modern Linux distributions have user-friendly programs to set the timezone, often accesible through the program menus or right-clicking the clock in a desktop environment such as KDE or GNOME. Failing that it's possible to manually change the system timezone in Linux in a few short steps.
It's possible to change the system timezone in Linux in a few short steps.
Steps
1.     Logged in as root, check which timezone your machine is currently using by executing `date`. You'll see something like "Mon 17 Jan 2005 12:15:08 PM PST -0.461203 seconds", PST in this case is the current timezone.
2.     Change to the directory to /usr/share/zoneinfo, here you will find a list of time zone regions. Choose the most appropriate region, if you live in Canada or the US this directory is the "Americas" directory.
3.     If you wish, backup the previous timezone configuration by copying it to a different location. Such as `mv /etc/localtime /etc/localtime-old`.
4.     Create a symbolic link from the appropiate timezone to /etc/localtime. Example: `ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime`.
5.     If you have the utility rdate, update the current system time by executing `/usr/bin/rdate -s time.nist.gov`. (This step can be skip!)
6.     Set the ZONE entry in the file /etc/sysconfig/clock file (e.g. "America/Los_Angeles")
7.     Set the hardware clock by executing: ` /sbin/hwclock --systohc`
Tips
·       On some versions of RedHat Linux, Slackware, Gentoo, SuSE, Debian, Ubuntu, and anything else that is "normal", the command to display and change the time is 'date', not 'clock'
·       On RedHat Linux there is a utility called "Setup" that allows one to select the timezone from a list, but you must have installed the 'redhat-config-date' package.
Warnings
·       Some applications (such as PHP) have separate timezone settings from the system timezone.
·       On some systems, /etc/localtime is actually a symlink to the appropriate file under the /usr/share/zoneinfo directory (rather than a copy of that file).
·       On some systems, there is a system utility provided that will prompt for the correct timezone and make the proper changes to the system configuration. For example,Debianprovides the "tzsetup" utility.
Here is an example of changing the timezone: (Logged in as root)
In order to manually change the timezone, you can edit the /etc/sysconfig/clockfile and then make a new soft link to /etc/localtime. Here is an example of changing the timezone manually to "America/Denver":
1. Select the appropriate time zone from the /usr/share/zoneinfo directory. Time zone names are relative to that directory. In this case, we will select "America/Denver"
2. Edit the /etc/sysconfig/clocktext file so that it looks like this:
ZONE="America/Denver"
UTC=true
ARC=false
Of course, this assumes that your hardware clock is running UTC time...
3. Delete the following file: /etc/localtime (backup it when you need it !)
4. Create a new soft link for /etc/localtime. Here is an example of step 3 and step 4:
# cd /etc
# ls -al localtime
lrwxrwxrwx 1 root root 39 Mar 28 07:00 localtime -> /usr/share/zoneinfo/America/Los_Angeles
# rm /etc/localtime
# ln -s /usr/share/zoneinfo/America/Denver /etc/localtime
# ls -al localtime
lrwxrwxrwx 1 root root 34 Mar 28 08:59 localtime -> /usr/share/zoneinfo/America/Denver
# date
Fri Mar 28 09:00:04 MST 2003
 
extern configuration of timezone:
           ---- allows computers, servers, and network devices to synchronize their internal clock systems
NTP Configuration and Usage:
Background - Network Time Protocol (NTP) allows computers, servers, and network devices to synchronize their internal clock systems to an external reference source. In some cases, the reference source can be an atomic clock or GPS receiver. This is useful for a number of reasons. If you would like to automatically keep the time on your Linux system synchronized to standard world times, you have two built-in tools to do this:
ntpdate and ntpd (NTP Daemon)

ntpdate:
ntpdate was written by David L. Mills at the University of Delaware. For details on Dr. Mills, enter this: 
$ finger David.L.Mills@udel.eduntpdate allows you to view or set system time from one or more NTP servers. The first thing you need to do is find a time server you can query. Here is a list of public time servers, or you can use one of the following:
clock.redhat.com
clock2.redhat.com
ns1.tuxfamily.org
time.nist.gov
For example, if you only want to query an NTP server and make sure that you can reach it, use the following command:

# ntpdate -q clock2.redhat.com
server 66.187.224.4, stratum 1, offset -0.067532, delay 0.38452
28 Mar 18:14:20 ntpdate[10724]: adjust time server 66.187.224.4 offset -0.067532 sec
Note that some firewall systems do not allow NTP traffic. NTP uses UDP port 123. If you would like to query more than one server and 
# ntpdate clock2.redhat.com clock.redhat.com
28 Mar 18:20:59 ntpdate[10754]: adjust time server 66.187.233.4 offset -0.043222 sec
You can add the -v
This command is very similar to the rdate command. The ntpdate command can be used in startup scripts or cron jobs to automatically set the system time without running a dedicated server process. You will definitely want to try to retrieve the time from an NTP server with ntpdate before setting up your own NTP server. This will ensure that (a) you have connectivity (b) your firewall does not block NTP. Another thing to note about the ntpdate command is that it will not work in update mode if you are running a local NTP server process. It will work in query mode.

flag for verbose output.set your system clock with the result, use the following:
NTP Server:
The NTP server (ntpd) can be setup to run continuously. This will keep the system clock synchronized. You will also be able to server NTP clients on your LAN, if you wish. I had problems with the Red Hat configuration GUI not setting the NTP server up correctly.

The configuration file is /etc/ntp.conf, and there is also an /etc/ntp directory which contains keys and the drift file. I will show you a working configuration file, with comments:
# Prohibit general access to this service.
restrict default ignore
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1 
# -- CLIENT NETWORK -------
# Permit systems on this network to synchronize with this
# time service. Do not permit those systems to modify the
# configuration of this service. Also, do not use those
# systems as peers for synchronization.
# This is my internal LAN network address
restrict 192.168.212.0 mask 255.255.255.0 notrust nomodify notrap
# --- OUR TIMESERVERS ----- 
# or remove the default restrict line 
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
# The statements below limit what the servers can do to your server
# I am using IP instead of DNS name because the "restrict" construct
# requires IP addresses
restrict 66.187.224.4 mask 255.255.255.255 nomodify notrap noquery
restrict 80.67.177.2 mask 255.255.255.255 nomodify notrap noquery
# The server listed below is clock2.redhat.com
server 66.187.224.4
# The server listed below is ns1.tuxfamily.org
server 80.67.177.2
# --- NTP MULTICASTCLIENT ---
#multicastclient # listen on default 224.0.1.1
# restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# I don't want to use multicast for my NTP server
# --- GENERAL CONFIGURATION ---
#
# Undisciplined Local Clock. This is a fake driver intended for backup
# and when no outside source of synchronized time is available. The
# default stratum is usually 3, but in this case we elect to use stratum
# 0. Since the server line does not have the prefer keyword, this driver
# is never used for synchronization, unless no other other
# synchronization source is available. In case the local host is
# controlled by some external source, such as an external oscillator or
# another protocol, the prefer keyword would cause the local host to
# disregard all other synchronization sources, unless the kernel
# modifications are in use and declare an unsynchronized condition.
#
# If you un-comment the two statements below, you could run an NTP server
# off of your local (and inaccurate) system clock.
#restrict 127.127.1.0
#server 127.127.1.0
fudge 127.127.1.0 stratum 10 
#
# Drift file. Put this in a directory which the daemon can write to.
# No symbolic links allowed, either, since the daemon updates the file
# by creating a temporary in the same directory and then rename()'ing
# it to the file.
#
driftfile /etc/ntp/drift
broadcastdelay 0.008

#
# Authentication delay. If you use, or plan to use someday, the
# authentication facility you should make the programs in the auth_stuff
# directory and figure out what this number should be on your machine.
#
# I am not using any authentication for this simple setup.
authenticate no

#
# Keys file. If you want to diddle your server at run time, make a
# keys file (mode 600 for sure) and define the key number to be
# used for making requests.
#
# PLEASE DO NOT USE THE DEFAULT VALUES HERE. Pick your own, or remote
# systems might be able to reset your clock at will. Note also that
# ntpd is started with a -A flag, disabling authentication, that
# will have to be removed as well.
#
keys /etc/ntp/keys
After you install this new version of the config file, you can start the service with /etc/init.d/ntpd startTo monitor the service, you can run the following command: ntpdc -p or ntpdc -p -n
If you are really impatient, you can use this command to watch the system until it synchronizes: watch nptdc -p -n
The ntpdc command can be run interactively as well. There are a number of informative ntpdc commands, such as iostats, sysstats, and peers.
When enough time has gone by, one of the servers will have an * placed in front of it to tell you that your system is synchronized to it. The lower the stratum number, the more accurate the server.
If you want to have the NTP server start up automatically, you can use the checkconfig command as follows:
# chkconfig --level 345 ntpd on
# chkconfig --level 0126 ntpd off
# chkconfig --list | grep ntpd
ntpd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
To see that your NTP server is listening on UDP port 123, use the following command: netstat -tunaPlease note that the NTP server makes NTP queries from a UDP source port of 123. Some firewalls will not allow this, even if ntpdate worked (ntpdate uses a source port > 1023.) 
You can also use the ntpq utility, and the ntptrace utility for additional diagnostic support. For complete documentation on setting up and using NTP servers, see http://www.ntp.org/.
 
 
 
How to Set the Time Zone in Unix:
Step1
Turn your machine on and locate the time zone file. You can do this by entering “command /etc/TIMEZONE.”
Step2
Locate the line within this file that indicates what time zone you’re clock is set to. It will look like this: TZ=US/Pacific. In this example, the time zone is set to the Pacific time zone of the U.S.
Step3
Change the value of the time zone to the desired time zone. This could be, for example, U.S./Eastern. It is important to know what time zone you are in so the time zone function can be set correctly.
Step4
Reboot your machine for the changes to take effect. Shut down and restart your computer. This will cause the computer’s clock to reset and show the correct time zone

===================================================
浅谈RedHat AS中英文字符集配置
===================================================
linux字符集查看与设置redhat 5.8
locale      查看当前设置的字符集  the current locale environment
locale -a   查看可以支持的所有的locale  Write names of available locales.
locale -m   查看所有支持的字符集(CP1125,UTF-8,ISO-8859-1等) Write names of available charmaps.
echo $LANGUAGE    查看当前默认设置 
echo $LANG    查看当前默认设置 
echo $LC_ALL

记录系统默认使用语言的文件是/etc/sysconfig/i18n,如果默认安装的是中文的系统,i18n的内容如下:
LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" SUPPORTED="zh_CN.UTF-8:zh_CN:zh"

LANG变量: 是language的简称,稍微有英语基础的用户一看就看出来这个变量是决定系统的默认语言的,即系统的菜单、程序的工具栏语言、输入法默认语言等。
SYSFONT:  是system font的简称,决定系统默认用哪一种字体。
SUPPORTED:决定系统支持的语言,即系统能够显示的语言。
需要说明的是,由于计算机起源于英语国家,因此,不管你把这些变量设置成什么,英语总是默认支持的,而且不管用什么字体,英文字体总包含在其中。

locale字符集的设置:
1.临时  LANG="zh_CN.UTF-8" ;   export LANG= "zh_CN.UTF-8"
2.永久  修改/etc/sysconf/i18n文件,把 LANG="zh_CN.UTF-8"

/etc/environment  控制GNOME的语言环境(可以自己创建这个文件)
/etc/sysconfig/i18n 控制启动过程以及真个系统的语言环境

[root@jsjzhang ~]$ cat /etc/environment
#中文界面配置
LANGUAGE="zh_CN:zh:en_US:en"
LC_ALL=zh_CN.UTF-8
LANG=zh_CN.UTF-8
GST_ID3_TAG_ENCODING=GB2312

#英文界面配置
#LANGUAGE="en_US:en"
#LC_CTYPE=zh_CN.UTF-8
#LANG=en_GB.UTF-8
#GST_ID3_TAG_ENCODING=GBK

[root@jsjzhang ~]$ cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"

如果只修改/etc/environment文件,而不修改/etc/sysconfig/i18n文件,
那么启动过程还是中文,只是Gnome环境变成了英文。
要配置从启动过程到Gnome环境均是英文,并让Fcitx中文输入法能够在英文环境下正常使用,
除按上面修改/etc/environment文件外,还要如下修改/etc/sysconfig/i18n文件:

[root@jsjzhang ~]# vim /etc/sysconfig/i18n
#LANG="zh_CN.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
LANG="en_US.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:zh_CN.GBK:zh_CN.GB18030:zh_CN.GB2312"
SYSFONT="latarcyrheb-sun16"

---------------------------------------
如何设置linux的locale
---------------------------------------
1.查看语言设置:
[root@brs98 ~]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

2.编写/etc/environment文件
vi /etc/environment
LC_ALL=zh_CN.UTF-8

3.编写/etc/sysconfig/i18n文件
vi /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
SYSFONT="latarcyrheb-sun16"

4.重启机器:
reboot

===================================================
/etc/profile和/etc/environment的比较
===================================================
Question:
先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。用户环境建立的过程中总 是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?

Answer:
/etc/profile 是所有用户的环境变量
/etc/enviroment是系统的环境变量
登陆系统时shell读取的顺序应该是 
    /etc/enviroment -> /etc/profile -->$HOME/.profile -->$HOME/.env
原因应该是下面所说的用户环境和系统环境的区别了:
/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。
系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG 是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。

(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)~/.bashlogin: 该文件包含专用于当登录时,执行该文件. 
(6)~/.profile: 该文件包含专用于当登录完成后,执行该文件. 
(7) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
官方文档:
http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.baseadmn/doc/baseadmndita/etc_env_file.htm
  
The /etc/environment, /etc/profile, and ~/.profile files are run once at login time and ~/.env also run at login time. 
The ~/.env file, on the other hand, is run every time you open a new shell or a window.
* /etc/environment file
  The first file that the operating system uses at login time is the /etc/environment file. The /etc/environment file contains variables specifying the basic environment for all processes.
* /etc/profile file
  The second file that the operating system uses at login time is the /etc/profile file.
* .profile file
  The .profile file is present in your home ($HOME) directory and lets you customize your individual working environment.
* .env file
  A fourth file that the operating system uses at login time is the .env file, if your .profile contains the following line: export ENV=$HOME/.env
  
===================================================
如何改变linux的语言环境
===================================================
1)全局(所有用户):
/etc/sysconfig/i18n
/etc/i18n 或者  ~/.i18n

将文件中的LANG=zh_CN.UTF-8更改为LANG=en_US.UTF-8。
其他字符集。
LANG=en_US.UTF-8
LANG=zh_CN.gbk

2)个体用户:
~/.bash_profile个人路径与环境变量的文件名称。
~/.bashrc:重要的个人设定文件

/etc/profile: ---->~/.bash_profile
/etc/bashrc : ---->~/.bashrc

---------------------------------------
LINUX SSH显示中文乱码,如何解决?
---------------------------------------
ssh登陆后,执行: 
export LANG=zh_CN.gb2312
就可以显示中文了。
编辑/etc/sysconfig/i18n 将LANG="zh_CN.UTF-8" 改为 LANG="zh_CN.GB18030" 可永久显示中文 或者 LANG="zh_CN.gb2312"

export LANG=US_EN 你这样 按照我说的做,进入字符界面,输入gdm 出现一个让你登陆的界面,那有个language选项,选择simple chinese就OK了

[root@php ~]# vi  /etc/sysconfig/i18n 
#LANG="zh_CN.UTF-8"
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030;zh_CN.GB2313:zh_CN"
SUPPORTED="zh_CN.GB18030;zh_CN;zh:en_US.UTF-8;en_US:en"
SYSFONT="lat0-sun16"

如果ls -al 显示的中文目录是乱码的话,那么就是客户端的字符集有问题:
如果你用的secureCRT的话,可以设置客户端的字符集,可以是GB2312,UTF-8等

---------------------------------------
linux下强制踢掉登陆用户,查询终端
---------------------------------------
查看机器中登陆的用户
[root@sunsyk ~]# w
 16:29:02 up 2 days,  2:35,  5 users,  load average: 0.03, 0.05, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    :0.0             Tue15    2days  1:44   0.04s -bash
root     pts/2    :0.0             Tue15   46:42m  0.05s  0.05s bash
root     pts/3    :0.0             Tue15    2days  0.02s  0.02s bash
root     pts/4    172.20.52.114    14:17   58:48   0.16s  0.03s sqlplus
root     pts/5    172.20.52.114    15:31    0.00s  0.03s  0.00s w
我把pts/1踢掉(只有root才能去踢掉用户)
[root@sunsyk ~]# pkill -kill -t pts/0,pts/1,pts/2,pts/12,pts/15   -kill 是signal -t terminal

查看是不是踢掉
[root@sunsyk ~]# w
 16:34:16 up 2 days,  2:40,  2 users,  load average: 0.00, 0.05, 0.02
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/4    172.20.52.114    14:17    1:04m  0.16s  0.03s sqlplus
root     pts/5    172.20.52.114    15:31    0.00s  0.03s  0.00s w
root可以踢掉其他用户包括自己

------------------------------------------------------------------------------
Linux命令kill和signal
------------------------------------------------------------------------------
kill命令用于终止指定的进程(terminate a process),是Unix/Linux下进程管理的常用命令。通常,我们在需要终止某个或某些进程时,先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令的另外一个用途就是向指定的进程或进程组发送信号(The  command kill sends the specified signal to the specified process or process group),或者确定进程号为PID的进程是否还在。比如,有许多程序都把SIGHUP信号作为重新读取配置文件的触发条件。

一 常用参数
格式:kill <pid>
格式:kill -TERM <pid>
发送SIGTERM信号到指定进程,如果进程没有捕获该信号,则进程终止(If no signal is specified, the TERM signal is sent.  The TERM signal will kill processes which do not catch this signal.)
 
格式:kill -l
列出所有信号名称(Print a list of signal names.  These are found in /usr/include/linux/signal.h)。只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。下面是常用的信号:
HUP     1    终端断线
INT       2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM    15    终止
KILL      9    强制终止
CONT   18    继续(与STOP相反, fg/bg命令)
STOP    19    暂停(同 Ctrl + Z)
格式:kill -l <signame>
显示指定信号的数值。
 
格式:kill -9 <pid>
格式:kill -KILL <pid>
强制杀掉指定进程,无条件终止指定进程。
 
格式:kill %<jobid>
格式:kill -9 %<jobid>
杀掉指定的任务(使用jobs命令可以列出)
 
格式:kill -QUIT <pid>
格式:kill -3 <pid>
使得程序正常的退出。
 
killall命令 
killall命令杀死同一进程组内的所有进程。其允许指定要终止的进程的名称,而非PID。 
# killall httpd  
 
二 示例
1)先用ps查找进程,然后用kill杀掉。
[root@new55 ~]# ps -ef|grep vim 
root      3368  2884  0 16:21 pts/1    00:00:00 vim install.log
root      3370  2822  0 16:21 pts/0    00:00:00 grep vim
[root@new55 ~]# kill 3368 
[root@new55 ~]# kill 3368 
-bash: kill: (3368) - 没有那个进程
 
2)init进程是不可杀的。
3)列出所有信号名称
[root@new55 ~]# kill -l 
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
[root@new55 ~]#
 
/usr/include/linux/signal.h 写道
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL SIGIO
/*
#define SIGLOST 29
*/
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED 31
/* These should not be considered constants from userland. */
#define SIGRTMIN 32
#define SIGRTMAX _NSIG
 
参考:
http://codingstandards.iteye.com/blog/847299

------------------------------------------------------------------------------
Linux下用于查看系统当前登录用户信息的4种方法
------------------------------------------------------------------------------
作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动。有些时候,你甚至需要知道他(她)们正在做什么。本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法。
1. 使用w命令查看登录用户正在使用的进程信息
w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括:

用户名称
用户的机器名称或tty号
远程主机地址
用户登录系统的时间
空闲时间(作用不大)
附加到tty(终端)的进程所用的时间(JCPU时间)
当前进程所用时间(PCPU时间)
用户当前正在使用的命令
w命令还可以使用以下选项

-h忽略头文件信息
-u显示结果的加载时间
-s不显示JCPU, PCPU, 登录时间
$ w
 23:04:27 up 29 days,  7:51,  3 users,  load average: 0.04, 0.06, 0.02
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
ramesh   pts/0    dev-db-server        22:57    8.00s  0.05s  0.01s sshd: ramesh [priv]
jason    pts/1    dev-db-server        23:01    2:53   0.01s  0.01s -bash
john     pts/2    dev-db-server        23:04    0.00s  0.00s  0.00s w

$ w -h
ramesh   pts/0    dev-db-server        22:57   17:43   2.52s  0.01s sshd: ramesh [priv]
jason    pts/1    dev-db-server        23:01   20:28   0.01s  0.01s -bash
john     pts/2    dev-db-server        23:04    0.00s  0.03s  0.00s w -h

$ w -u
 23:22:06 up 29 days,  8:08,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
ramesh   pts/0    dev-db-server        22:57   17:47   2.52s  2.49s top
jason    pts/1    dev-db-server        23:01   20:32   0.01s  0.01s -bash
john     pts/2    dev-db-server        23:04    0.00s  0.03s  0.00s w -u

$ w -s
 23:22:10 up 29 days,  8:08,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM               IDLE WHAT
ramesh   pts/0    dev-db-server        17:51  sshd: ramesh [priv]
jason    pts/1    dev-db-server        20:36  -bash
john     pts/2    dev-db-server         1.00s w -s

2.使用who命令查看(登录)用户名称及所启动的进程
who命令用于列举出当前已登录系统的用户名称。其输出为:用户名、tty号、时间日期、主机地址。

$ who
ramesh pts/0        2009-03-28 22:57 (dev-db-server)
jason  pts/1        2009-03-28 23:01 (dev-db-server)
john   pts/2        2009-03-28 23:04 (dev-db-server)
如果只希望列出用户,可以使用如下语句:
$ who | cut -d' ' -f1 | sort | uniq
john
jason
ramesh
补充:users命令,可用于打印输出登录服务器的用户名称。该命令除了有help和version选项外,再没有其他选项。如果某用户使用了多个终端,则相应的会显示多个重复的用户名。
$ users
john jason ramesh
3. 使用whoami命令查看你所使用的登录名称
whoami命令用于显示登入的用户名。

$ whoami
john
whoami命令的执行效果和id -un的效果完全一样,例如:
$ id -un
john
whoami命令能显示当前登入的用户名称,以及当前所使用的tty信息。该命令的输出结果包括如下内容:用户名、tty名、当前时间日期,同时还包括用户登录系统所使用的链接地址。
$ who am i
john     pts/2        2009-03-28 23:04 (dev-db-server)

$ who mom likes
john     pts/2        2009-03-28 23:04 (dev-db-server)

Warning: Don't try "who mom hates" command.
当然,如果你使用su命令改变用户,则该命令(whoami)所显示的结果将随之改变。

4. 随时查看系统的历史信息(曾经使用过系统的用户信息)
last命令可用于显示特定用户登录系统的历史记录。如果没有指定任何参数,则显示所有用户的历史信息。在默认情况下,这些信息(所显示的信息)将来源于/var/log/wtmp文件。该命令的输出结果包含以下几列信息:

用户名称
tty设备号
历史登录时间日期
登出时间日期
总工作时间
$ last jason
jason   pts/0        dev-db-server   Fri Mar 27 22:57   still logged in
jason   pts/0        dev-db-server   Fri Mar 27 22:09 - 22:54  (00:45)
jason   pts/0        dev-db-server   Wed Mar 25 19:58 - 22:26  (02:28)
jason   pts/1        dev-db-server   Mon Mar 16 20:10 - 21:44  (01:33)
jason   pts/0        192.168.201.11  Fri Mar 13 08:35 - 16:46  (08:11)
jason   pts/1        192.168.201.12  Thu Mar 12 09:03 - 09:19  (00:15)
jason   pts/0        dev-db-server   Wed Mar 11 20:11 - 20:50  (00:39

-----------------------------------------------------
查找文件和查找文件中的字符:
-----------------------------------------------------
查找文件中的字符:grep
-R, -r, --recursive       equivalent to --directories=recurse
      --include=FILE_PATTERN  search only files that match FILE_PATTERN
      --exclude=FILE_PATTERN  skip files and directories matching FILE_PATTERN
      --exclude-from=FILE   skip files matching any file pattern from FILE
      --exclude-dir=PATTERN  directories that match PATTERN will be skipped.
-R 表示在其子目录下也查找。

grep -FR  'type="array"' ./*  查找当前目录下的文件以及子目录中是否含有这种字符串type="array"

grep 'type="array"' ./* |less  查找当前目录下的文件中是否含有这种字符串type="array"

假设您正在‘/usr/src/linux/Documentation’目录下搜索带字符串‘magic’的文件:
$ grep magic /usr/src/linux/Documentation/*

当然,如果预料到有许多输出,您可以通过 管道 将其转到‘less’上阅读
$ grep magic /usr/src/linux/Documentation/* | less

有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,‘grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。
下面是一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
这里还有些用于搜索的特殊符号:
< 和 > 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、‘manic’、‘man’等,
grep \'<man\' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep \'<man>\' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字符串。
\'^\':指匹配的字符串在行首,
\'$\':指匹配的字符串在行尾,
如果您不习惯命令行参数,可以试试图形界面的‘grep’,如 reXgrep 。这个软件提供 AND、OR、NOT 等语法,还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出,不妨试试 fungrep 。

.grep 搜索字符串
命令格式:
grep string filename
寻找字串的方法很多,比如说我想找所有以M开头的行.此时必须引进pattern的观
念.以下是一些简单的□例,以及说明:
^M 以M开头的行,^表示开始的意思
M$ 以M结尾的行,$表示结束的意思
^[0-9] 以数字开始的行,[]内可列举字母
^[124ab] 以1,2,4,a,或b开头的行
^b.503 句点表示任一字母
* 星号表示0个以上的字母(可以没有)
+ 加号表示1个以上的字母
. 斜线可以去掉特殊意义
<eg> cat passwd | grep ^b 列出大学部有申请帐号者名单
cat passwd | grep ^s 列出交换学生申请帐号者名单
cat passwd | grep \'^b.503\' 列出电机系各年级...
grep \'^.\' myfile.txt 列出所有以句点开头的行

查找文件: find, locate, whereis
-name 按照文件名查找文件
-perm 按照文件权限来查找文件
-prune 不在当前指定的目录中查找
-user 按照文件属主来查找文件
-group 按照文件所属的组来查找文件
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前.
-nogroup 查找无有效所属组的文件,即该文件所属的组不存在
-nouser 查找无有效属主的文件
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件
-type 查找某一类型的文件 
文件类型:
b 块设备文件
d 目录
c 字符设备文件
p 管道文件
l 符号链接文件
f 普通文件
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找
-mount 在查找文件时不跨越文件系统mount点
-follow 如果find命令遇到符号链接文件,就跟踪到链接所指向的文件
-cpio 对匹配的文件使用cpio命令,就将这些文件备份到磁盘设备中

对find命令选项的一些例子:
$ find /etc -name oamdatcfg.ini 在/etc目录下查找所有的目录是否有oamdatcfg.ini这个文件。
$ find /etc -type d 在/etc目录下查找所有的目录
$ find /etc -user yaoyuan #在/etc目录下查找文件属主为yaoyuan的文件
$ find . -size +1000000c #在当前目录下查找文件长度大于1 M字节的文件 
  
whereis命令会在指定的目录中查找符合条件的文件,文件应的属性应属于原始代码,二进制文件,或是帮助文件.

选项:
-b 只查找二进制文件
-B 只在设置的目录下查找二进制文件
-f 不显示文件名前的路径名称
-m 只查找说明文件
-M 只在设置的目录下查找说明文件
-s 只查找原始代码文件
-S 只在设置的目录下查找原始代码文件
-u 查找不包含指定类型的文件

whereis例子
$ whereis mysql
mysql: /usr/bin/mysql /etc/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

locate命令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找符合条件的文件或目录

选项:
-u 建立数据库,由根目录开始
-U 建立数据库,可以指定开始的位置
-e 将排除在寻找的范围之外
-f 将特定的档案系统排除在外
-q 安静模式,不会显示任何错误讯息
-n 至多显示n个输出
-r 使用正规运算式 做寻找的条件
-o 指定数据库存的名称
-d 指定数据库的路径
-h 显示辅助讯息
-v 显示更多的讯息
-V 显示程序的版本讯息

$ locate inittab
/usr/lib/upstart/migrate-inittab.pl
/usr/share/terminfo/a/ansi+inittabs

rm -r recursive 删除目录和下面的文件
   -f force 强迫删除文件
rm -rf 目录或者文件。
   
-----------------------------------------------------
touch命令:
-----------------------------------------------------
TOUCH(1)                         User Commands                        TOUCH(1)
NAME
       touch - change file timestamps
SYNOPSIS
       touch [OPTION]... FILE...
DESCRIPTION
       Update  the  access  and modification times of each FILE to the current time.
       A FILE argument that does not exist is created empty, unless -c  or  -h is supplied.
       A  FILE  argument  string of - is handled specially and causes touch to change the times of the file associated with standard output.
       Mandatory arguments to long options are  mandatory  for  short  options too.
       -a     change only the access time
       -c, --no-create
              do not create any files

-d, --date=STRING
              parse STRING and use it instead of current time

-f     (ignored)

-h, --no-dereference
              affect each symbolic link instead of any referenced file (useful
              only on systems that can change the timestamps of a symlink)

-m     change only the modification time

-r, --reference=FILE
              use this file’s times instead of current time

-t STAMP
              use [[CC]YY]MMDDhhmm[.ss] instead of current time

--time=WORD
              change the specified time: WORD is access, atime, or use: equiv-
              alent to -a WORD is modify or mtime: equivalent to -m  
       --help display this help and exit

--version
              output version information and exit

Note that the -d and -t options accept different time-date formats.

DATE STRING
       The  --date=STRING  is  a mostly free format human readable date string
       such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29  16:21:42"  or
       even  "next Thursday".  A date string may contain items indicating cal-
       endar date, time of day, time zone, day of week, relative  time,  rela-
       tive date, and numbers.  An empty string indicates the beginning of the
       day.  The date string format is more complex than is easily  documented
       here but is fully described in the info documentation.
  
-----------------------------------------------------
less命令:
-----------------------------------------------------

SEARCHING

/pattern          *  Search forward for (N-th) matching line.
  ?pattern          *  Search backward for (N-th) matching line.
  n                 *  Repeat previous search (for N-th occurrence).
  N                 *  Repeat previous search in reverse direction.
  ESC-n             *  Repeat previous search, spanning files.
  ESC-N             *  Repeat previous search, reverse dir. & spanning files.
  ESC-u                Undo (toggle) search highlighting.
  &pattern          *  Display only matching lines
        ---------------------------------------------------
        Search patterns may be modified by one or more of:
        ^N or !  Search for NON-matching lines.
        ^E or *  Search multiple files (pass thru END OF FILE).
        ^F or @  Start search at FIRST file (for /) or last file (for ?).
        ^K       Highlight matches, but don't move (KEEP position).
        ^R       Don't use REGULAR EXPRESSIONS.
   
-----------------------------------------------------
如何更改当前用户、密码或者切换用户、注销用户:
-----------------------------------------------------
第一次修改root密码的话  命令是  sodu passwd root

su 和 su -:命令 su 给你到根账号或系统上其它账号的访问权。当你在用户账号的 shell 内键入 su 来切换到根账号时,你就能够改变重要的系统文件(若不小心,你会损坏它们)。使用 su - 命令使你成为使用根账号 shell 的根用户。登录为根用户时请务必小心。

su yuanjs  表示以yuanjs登陆,但是当前的路径不发生改变
su - yuanjs 表示以yuanjs登陆,同时当前的路径变为yuanjs账号的home路径
su     表示以root登陆,但是当前的路径不发生改变
su -    表示以root登陆,同时当前的路径变为root账号的home路径

sudo   功能说明:以其他身份来执行指令。
语  法:sudo [-bhHpV][-s <shell>][-u <用户>][指令] 或 sudo [-klv]
例子:
jorge@ubuntu:~$ sudo killall rm

更改密码:
名称:passwd
  
  使用权限:所有使用者
  
  使用方式:passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
  
  说明:用来更改使用者的密码
  
  参数:
  -k  keep non-expired authentication tokens
  -l 关闭账号密码。效果相当于usermod -L,只有root才有权使用此项。
  -u 恢复账号密码。效果相当于usermod -U,同样只有root才有权使用。
  -g 修改组密码。gpasswd的等效命令。
  -f 更改由finger命令访问的用户信息。
  -d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用.
  -S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用.
  [username] 指定帐号名称.

最常用最简单的用法: passwd   tom,修改tom用户密码。
sudo su先切到root再用passwd修改,具体参数可使用passwd -help

不用root登录也可以,如果你是系统安装时指定的用户,默认有sudo权限,可以直接
$ sudo passwd user1
接下来同上

-------------------------------------------
linux introduction:
-------------------------------------------
On top of the Linux kernel effort, the creators of Linux also drew on a great deal of system software and applications that are now bundled with Linux distributions from the GNU software effort (GNU stands for “GNU is Not UNIX”), which is directed by the Free Software Foundation (www.gnu.org). There is a vast amount of software that can be used with Linux, making it an operating system that can compete with or surpass features available in any other operating system in the world.

If you have heard Linux described as a free version of UNIX, there is good reason for it. Although much of the code for Linux started from scratch, the blueprint for what the code would do was created to follow POSIX (Portable Operating System Interface for UNIX) standards. POSIX is a computer industry operating system standard that every major version of UNIX complied with. In other words, if your operating system was POSIX-compliant, it was UNIX.

netstat -tnlp |grep smb
netstat -lan |grep 80  查询被打开80端口的东东
或者
netstat -nat  查询哪个IP地址和它建立连接

-------------------------------------------
vncserver配置:
-------------------------------------------
netstat -tlnp |grep vnc 或者netstat -tlnp |grep vino
service vncserver status
service vncserver stop
service vncserver start
service vncserver restatus
ps -ef|grep vino

[root@ganshuai ~]# netstat -tlnp |grep vino
tcp        0      0 :::5900                     :::*                        LISTEN      11099/vino-server
tcp        0      0 :::5901                     :::*                        LISTEN      4696/vino-server

-------------------------------------------
linux的版本:
-------------------------------------------
Mandriva 10.1
Novell Linux Desktop 9.x (2.6.4)
Red Flag Linux Desktop 4.1, 5.0
Red Hat Linux AS 4.0 (2.6.9)  Application Server
Red Hat Linux ES 4.0 (2.6.9)  Enterprise Server
Red Hat Linux WS 4.0 (2.6.9)  Workstation Server
SuSE Professional 9.2 (2.6.4), 9.3, 10.0  欧洲流行
Turbolinux 10 S (2.6) 亚洲流行
Fedora: from Redhat linux
Ubunton Linux

-------------------------------------------
Linux内核和版本查询命令
-------------------------------------------
一:命令: uname -a
  作用: 查看系统内核版本号及系统名称

二:命令: cat /proc/version
  作用: 查看目录"/proc"下version的信息,也可以得到当前系统的内核版本号及系统名称
  补充说明:
  /proc文件系统,它不是普通的文件系统,而是系统内核的映像,也就是说,该目录中的文件是存放在系统内存之中的,它以文件系统的方式为访问系统内核数据的操作提供接口。而我们使用命令“uname -a"的信息就是从该文件获取的,当然用方法二的命令直接查看它的内容也可以达到同等效果.另外,加上参数"a"是获得详细信息,如果不加参数为查看系统名称。

三、查看redhat的release版本
  # more /etc/redhat-release  或者 cat /etc/*release
  CentOS release 4.4 (Final)

四、lsb_release -a
  登录到服务器执行 lsb_release -a ,即可列出所有版本信息

for example:
[root@RH52173 X11]# lsb_release -a
LSB Version:    :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 5.2 (Tikanga)
Release:        5.2
Codename:       Tikanga

五. 查看etc下的issue文件。
#more /etc/issue

-------------------------------------------
Fedora:
-------------------------------------------
In 2003, Red Hat, Inc. changed the name of the distribution from Red Hat Linux to Fedora Core and moved its commercial efforts toward its Red Hat Enterprise Linux products. It then set up Fedora to be: 
1.Sponsored by Red Hat 
2.Supported by the Linux community 
3.Inclusive of high-quality, cutting-edge open source technology 
4.A proving ground for software slated for commercial Red Hat deployment and support 
With the recent split between community (Fedora) and commercial (Red Hat Enterprise Linux) versions of Red Hat Linux, Red Hat has created a model that can suit the fast-paced changes in the open source world, while still meeting the demands for a well-supported commercial Linux distribution. 
Technical people have chosen Red Hat Linux because of its reputation for solid performance. With the new Fedora Project, Red Hat has created an environment where open source developers can bring high-quality software packages to Red Hat Linux that would be beyond the resources of Red Hat, Inc. to test and maintain on its own.
Over 1,600 individual software packages (compared to just over 600 in Red Hat Linux 6.2) are included in Fedora Core 3. These packages contain features that would cost you hundreds or thousands of dollars to duplicate if you bought them as separate commercial products. These features let you: 
1.Connect your computers to a LAN or the Internet. 
2.Create documents and publish your work on paper or on the Web.
3.Work with multimedia content to manipulate images, play music files, view video, and even burn your own CDs. 
4.Play games individually or over a network. 
5.Communicate over the Internet using a variety of Web tools for browsing, chatting, transferring files, participating in newsgroups, and sending and receiving e-mail. 
6.Protect your computing resources by having Red Hat Linux act as a firewall and/or a router to protect against intruders coming in through public networks. 
7.Configure a computer to act as a network server, such as a print server, Web server, file server, mail server, news server, and a database server. 
This is just a partial list of what you can do with Red Hat's Fedora. Using this book as your guide, you will find that there are many more features built into Fedora as well.

-------------------------------------------
Linux下JDK的安装与配置.
Red Hat Linux下安装JDK :
-------------------------------------------
1、授予权限:chmod 777 jdk-1_5_0_11-linux-i586-rpm.bin 
2、解压rpm.bin文件:./jdk-1_5_0_11-linux-i586-rpm.bin 
3、安装命令:rpm -ivh jdk-1_5_0_11-linux-i586.rpm 
4. 卸载命令: rpm -e jdk-1_5_0_11-linux-i586
5. 查找命令: rpm -qa jdk-1_5_0_11-linux-i586
   rpm -qa |grep vnc   q---query a---all package
-------------------------------------------
Linux下JDK环境变量配置 :
-------------------------------------------
1、使用SSH Secure Shell Client连接至Linux 
2、执行:vi /etc/profile 命令,使用vi编辑/etc/profile文件。
3、在export PATH USER LOGNAME MAIL HOS ...

-------------------------------------------
常用Shell类型:
-------------------------------------------
Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell(简称sh)、C-Shelll(简称csh)、Korn Shell(简称ksh)和Bourne Again Shell (简称bash)。
(1)Bourne Shell是AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。
(2)C Shell是加州伯克利大学的Bill Joy为BSD Unix开发的,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。
(3)Korn Shell是AT&T Bell实验室的David Korn开发的,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。
(4)Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。

---------------
rename 命令:
---------------
foo1 foo2 foo10 foo99
rename foo foo0  foo??
rename foo foo0  foo?
foo 表示被替换的旧内容
foo0 用来被替换的新内容
foo?? 表示那些文件被替换 一个pattern

1.
查看当前进程ID (KornShell):
$echo $$
4992

grep  a*.txt &      将当前任务放置到后台去执行。
jobs  察看所有的正在执行的任务。
bg 察看后台的任务 第一个字符为  $jobspec
bg $jobspec   继续执行后台的$jobspec任务
fg $jobspec   将后台的$jobspec任务移动到前台来执行。
ctrl+z (挂起当前正在执行的前台进程)把进程放到后台,并使之休眠.如果想将其返回请使用:fg      
ctrl+D 文件结束符可以用

bg [jobspec ...]
              Resume each suspended job jobspec in the background, as if it had been started  with  &.   If
              jobspec  is not present, the shella€?s notion of the current job is used.  bg jobspec returns 0
              unless run when job control is disabled or, when run with job control enabled, any  specified
              jobspec was not found or was started without job control.
fg [jobspec]
              Resume jobspec in the foreground, and make it the current job.  If jobspec  is  not  present,
              the  shella€?s  notion  of  the  current  job is used.  The return value is that of the command
              placed into the foreground, or failure if run when job control is disabled or, when run  with
              job  control enabled, if jobspec does not specify a valid job or jobspec specifies a job that
              was started without job control.

jobs [-lnprs] [ jobspec ... ]
       jobs -x command [ args ... ]
              The first form lists the active jobs.  The options have the following meanings:
              -l     List process IDs in addition to the normal information.
              -p     List only the process ID of the joba€?s process group leader.
              -n     Display information only about jobs that have changed status since the user  was  last
                     notified of their status.
              -r     Restrict output to running jobs.
              -s     Restrict output to stopped jobs.

If  jobspec  is given, output is restricted to information about that job.  The return status
              is 0 unless an invalid option is encountered or an invalid jobspec is supplied.

If the -x option is supplied, jobs replaces any jobspec found in command  or  args  with  the
              corresponding process group ID, and executes command passing it args, returning its exit sta-
              tus.

ctrl+z进入后台的程序,怎么重新到前台来? fg 必须在同一个console中。
楼主先用ps查一下你的那个任务的名称如我打开了vi,然后再crtl+z,再ps看一下命令名,fg 一下就行了
[root@red9 ~]# vi sendmail----1
[1]+  Stopped                 vim sendmail----1
[root@red9 ~]# ps
  PID TTY          TIME CMD
3119 pts/0    00:00:00 bash
3194 pts/0    00:00:00 vim
3195 pts/0    00:00:00 ps
[root@red9 ~]# fg 3194
-bash: fg: 3194: no such job
[root@red9 ~]# fg vim
vim sendmail----1

2. 
查看跟指定程序相关的进程:
$ps -A | grep ....bat
 8360  0:00 cmd /c ....bat

$ps -ef | grep ....bat 
 
pgrep 和pkill:  查询process和杀死process. 
pgrep= ps -ef|grep ...   比如:pgrep php-cgi  查找进程名为php-cgi的进程
pkill= killall           比如:pkill php-cgi  杀死所有进程名为php-cgi的进程

pgrep -u root,daemon     ---will list the processes owned by root OR daemon.
pgrep -u root sshd       ---will only list the processes called sshd AND owned by root.

ps的选项:
-a              Select all processes except both session leaders (see
                       getsid(2)) and processes not associated with a
                       terminal.
-A              Select all processes. Identical to -e.
-e              Select all processes. Identical to -A.
-f              does full-format listing. This option can be combined
                       with many other UNIX-style options to add additional
                       columns. It also causes the command arguments to be
                       printed. When used with -L, the NLWP (number of
                       threads) and LWP (thread ID) columns will be added. See
                       the c option, the format keyword args, and the format
                       keyword comm.

3.
$kill -9 $pid
$killall php-cgi   杀死所有进程名为php-cgi的进程

4.
查看window系统启动状况:
$uptime
12:55pm  up  3:41, 1 session, load average: 0.00, 0.00, 0.00.

5.
$who am i  显示当前用户名
$which is java
$where

6.
ps -ef | grep tty   or    ps -ef | grep java
ll
find . -name java
chmod +x file

grep [options] pattern [files..]
tee

7.ls --color
clear 
zip
unzip
zipinfo

gzip    .gz   gzip -dvf
gunzip        gunzip -dvf

--------------------------
tar     .tar
--------------------------
按照约定俗成,用 gzip 来压缩的文件的扩展名是 .gz;
用 bzip2 来压缩的文件的扩展名是 .bz2;用 zip 压缩的文件的扩展名是 .zip。
用 gzip 压缩的文件可以使用 gunzip 来解压;用 bzip2 压缩的文件可以使用 bunzip2 来解压;
用 zip 压缩的文件可以使用 unzip 来解压。

1)tar 文件是几个文件和(或)目录在一个文件中的集合。这是创建备份和归档的佳径。
    tar -cvf filename.tar directory/file 
    filename.tar 代表你创建的文件,directory/file 代表你想放入归档文件内的文件和目录。 
2)要抽取 tar 文件的内容,键入:
    tar -xvf filename.tar
3)要列出 tar 文件的内容,键入:
    tar -tvf filename.tar
    tar xvzf htdoc.tar.gz
4) tar -xzvf ht.tar -C unzipped
  加压文件ht.tar到目录unzipped之下。
  
       tar -cf archive.tar foo bar
              # Create archive.tar from files foo and bar.
       tar -tvf archive.tar
              # List all files in archive.tar verbosely.
       tar -xf archive.tar
              # Extract all files from archive.tar.
              Main operation mode:
       -A, --catenate, --concatenate
              append tar files to an archive
       -c, --create
              create a new archive
       -d, --diff, --compare
              find differences between archive and file system
       --delete
              delete from the archive (not on mag tapes!)
       -r, --append
              append files to the end of an archive
       -t, --list
       -x, --extract, --get
              extract files from an archive
       -C, --directory=DIR
              change to directory DIR

8. 删除非空目录下所有内容.
rm -dfr c:/wasx
rm -rf  file/directory   强制删除file或者directory.

9. rmdir 只能删除空目录.

-----------------------
ftp:
-----------------------
ftp
ftp 9.181.85.65 200
ftp>help
ftp>open  9.181.85.65 200
ftp>close  is similiar to ftp>disconnect 
ftp>get remote-file [local-file]

ftp>cd       ----change remote directory
ftp>lcd      ----change local directory
ftp>quit

8.
三者区别:
bash test.sh
. test.sh
./test.sh     test.sh必须有x权限.

9.
看空间大小:
df   disk free space.
du   disk used

10.
history, less history,  less .bash_history, history| grep man

11.ifconfig

12.任务管理器:
free
time
timex
top  能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
ps -A
ps -aux
vmstat Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。

iostat 是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

uname -a 显示操作系统信息
uptime 现在的时间 系统开机运转到现在经过的时间 连线的使用者数量 最近一分钟,五分钟和十五分钟的系统负载 参数: -V 显示版本资讯。

ksysguard  -------KDE system guard
gnome-system-monitor   -------------GNOME

13. 显示操作系统信息:察看linux内核version
uname -a
uname -v
uname -r

14.
whereis java
who -a
whoami
which gcc
    
strings
history 
script

15.配置网卡等信息:
setup

启动服务使用命令:
ntsysv

16.
mount  /dev/hda1 /mnt/c
umount /mnt/c   
 
17.
runlevel
telinit

由LILO引导,读取配置文件/etc/inittab中设置的系统运行级别,级别分类如下: 
级别 内容

0 低级系统初始化、关闭电源 
1 单用户或管理等级。可以运行象详细的磁盘检查等在多任务情况下可能运行的任务。 
2 多用户方式但无网络支持。 
3 全方位等级,启动全部功能。 
4 暂时未使用 
5 图形终端方式登录Linux 
6 中断系统后重启,sync+reboot 
 
可用runlevel查看系统当前运行级别,telinit 更改init状态。

more /etc/issue

=============================
redhat skills:
=============================
redhat-config-keyboard  system-config-keyboard
[Ctrl] + [Alt] + [Backspace] = 杀死你当前的 X 会话。杀死图形化桌面会话,把你返回到登录屏幕。如果正常退出步骤不起作用,你可以使用这种方法。 
[Ctrl] + [Alt] + [Delete] = 关机和重新引导 Red Hat Linux。关闭你当前的会话然后重新引导 OS。只有在正常关机步骤不起作用时才使用这种方法。 
[Ctrl] + [Alt] + [Fn] = 切换屏幕。[Ctrl]+[Alt] + 功能键之一会显示一个新屏幕。根据默认设置,从 [F1] 到 [F6] 是 shell 提示屏幕,[F7] 是图形化屏幕。 
[Alt] + [Fn] = 切换屏幕。[Ctrl]+[Alt] + 功能键之一会显示一个新屏幕。根据默认设置,从 [F1] 到 [F6] 是 shell 提示屏幕,[F7] 是图形化屏幕。
[Alt] + [Tab] = 在图形化桌面环境中切换任务。如果你同时打开了不止一个应用程序,你可以使用 [Alt] + [Tab] 来在打开的任务和应用程序间切换。 
[Tab] =命令行自动补全。使用 shell 提示时可使用这一命令。键入命令或文件名的前几个字符,然后按 [Tab] 键,它会自动补全命令或显示匹配你键入字符的所有命令。

[Ctrl] + [a] = 把光标移到行首。它在多数文本编辑器和 Mozilla 的 URL 字段内可以使用。 
[Ctrl] + [d] = 从 shell 提示中注销(并关闭)。使用该快捷键,你就不必键入 exit 或 logout。 
[Ctrl] + [e] = 把光标移到行尾。它在多数文本编辑器和 Mozilla 的 URL 字段内都可使用。 
[Ctrl] + [l] = 清除终端。该快捷操作与在命令行键入 clear 作用相同。 
[Ctrl] + [u] = 清除当前行。如果你在终端下工作,使用这一快捷操作可以清除从光标处到行首的字符。

系统配置命令:
setup
system-config-network
system-config-XXX

system-config-authentication     system-config-packages
system-config-date               system-config-printer
system-config-display            system-config-printer-gui
system-config-keyboard           system-config-printer-tui
system-config-language           system-config-rootpassword
system-config-mouse              system-config-securitylevel
system-config-network            system-config-securitylevel-tui
system-config-network-cmd        system-config-services
system-config-network-druid      system-config-soundcard
system-config-network-gui        system-config-time
system-config-network-tui        system-config-users

对service的管理:
1.运行命令进入GUI: system-config-services

2.通过命令行来控制:
查看SMB:
/etc/init.d/smb status 
pgrep smbd
pgrep nmbd
netstat -tlnp |grep smb

查看配置情况。
testparm

/etc/init.d/smb start
/etc/init.d/smb restart
/etc/init.d/smb stop

[root@localhost ~]# service smb start
启动 SMB 服务:                                            [  确定  ]
启动 NMB 服务:                                            [  确定  ]
[root@localhost ~]# service smb stop
[root@localhost ~]# service smb restart

关机和重启机器命令:
reboot == shutdown -r now
halt   == shutdown -h now

工作区切换器:
图形化桌面给你提供了使用多个工作区的能力。因此你不必把所有运行着的应用程序都堆积在一个可视桌面区域。工作区切换器把每个工作区(或桌面)都显示为一个小方块,然后在上面显示运行着的应用程序。你可以用鼠标点击任何一个小方块来切换到那个桌面上去。你还可以使用键盘快捷方式:
[Ctrl]-[Alt]-[向上箭头]、[Ctrl]-[Alt]-[向下箭头]、[Ctrl]-[Alt]-[向右箭头]或 [Ctrl]-[Alt]-[向左箭头]来在桌面间切换。

[鼠标中间键] = 粘贴突出显示的文本。使用鼠标左键来突出显示文本。把光标指向你想粘贴文本的地方。点击鼠标中间键来粘贴它。在两键鼠标系统中,如果你把鼠标配置成模拟第三键,你可以同时点击鼠标的左右两键来执行粘贴。

[向上]和[向下]箭头 = 显示命令历史。当你使用 shell 提示时,按[向上]或 [向下]箭头来前后查看你在当前目录下键入的命令历史。当你看到你想使用的命令时,按 [Enter] 键。

history = 显示命令历史。在 shell 提示中键入它来显示你所键入的被编号的前 1000 个命令。要显示较短的命令历史,键入 history f之后,空一格,在键入一个数字。例如:history 20。 
exit = 注销。在 shell 提示中键入它会注销当前的用户或根用户帐号。 
reset = 刷新 shell 提示屏幕。如果字符不清晰或乱码的话,在 shell 提示下键入这个命令会刷新屏幕。
clear = 清除 shell 提示屏幕。在命令行下键入它会清除所有这个 shell 提示屏幕中显示的数据。

要把你的系统引导入基于文本的安装程序,你需要在 boot: 提示下键入 text 命令。

1.在 X 下复制和粘贴文本:在 X 窗口系统下使用鼠标来复制和粘贴文本是一项简单操作。要复制文本,只需点击鼠标,把它在文本上拖过来突出显示该文本。要把文本粘贴到某处,在需要放置文本的地方点击鼠标的中间按钮。

2.su 和 su -:命令 su 给你到根账号或系统上其它账号的访问权。当你在用户账号的 shell 内键入 su 来切换到根账号时,你就能够改变重要的系统文件(若不小心,你会损坏它们)。使用 su - 命令使你成为使用根账号 shell 的根用户。登录为根用户时请务必小心。

su yuanjs  表示以yuanjs登陆,但是当前的路径不发生改变
su - yuanjs 表示以yuanjs登陆,同时当前的路径变为yuanjs账号的home路径
su     表示以root登陆,但是当前的路径不发生改变
su -    表示以root登陆,同时当前的路径变为root账号的home路径

sudo   功能说明:以其他身份来执行指令。
语  法:sudo [-bhHpV][-s <shell>][-u <用户>][指令] 或 sudo [-klv]
例子:
jorge@ubuntu:~$ sudo killall rm

3.startx 来启动图形化桌面。

4.创建新的或额外的用户帐号的方式有两种,使用图形化的 用户管理器或在 shell 提示下执行。 
  (1) 启动图形界面: shell命令  redhat-config-users   (system-config-users)
  (2) shell:
2.1打开 shell 提示。
2.2如果你没有登录为根用户,键入命令 su - 然后输入根口令。
2.3在命令行中键入useradd,随后一个空格和你创建的新用户的用户名(譬如,useradd zhangsan)。按 [Enter] 键。通常,用户名是按用户的姓名变化得来的,如 Zhang San 的用户名是 zhangsan。用户帐号名可以 从用户的姓名、简称、或出生地等变化出来。 
2.4键入 passwd,随后一个空格和该用户名(譬如,passwd zhangsan)。 
2.5在 New password: 提示下为新用户输入一个口令,然后按 [Enter]。
2.6在 Retype new password: 提示下,输入同一口令来确认你的选择。

/etc/group文件
/etc/passwd文件
    
查看linux下用户组是哪个命令!
察看 /etc/group文件
用cat /etc/passwd |cut -f 1 -d :
用浏览文件的命令可以到/etc/passwd中查看用户文件
例如less /etc/passwd
或者 cat /etc/passwd
chmod这个命令是用来改权限的
o 是owner的意思 -rw 就是把 读和写的权限去掉
如果要加上的话就 +rw 就行了

5.man command| col -b | lpr
以上命令把分开的命令并入一个独特的功能。man command 会把 command 的说明书的内容输出给 col,这个命令会格式化内容,使其适合打印页的大小。lpr 命令把格式化后的内容发送给打印机。

6.软件包管理工具安装文档:
要安装所有 Red Hat Linux 指南手册,改换到包含 RPM 文件的目录中,键入以下命令: 
rpm -ivh rhl-*.rpm
要只安装某一本指南手册,把 rhl-*.rpm 替换成该指南手册的文件全名。譬如,《Red Hat Linux 入门指南》的文件名会类似于 rhl-gsg-en-9.noarch.rpm,因此,你应该键入以下命令来把它安装到你的系统上: 
rpm -ivh /mnt/cdrom/rhl-gsg-en-9.noarch.rpm

7.虚拟控制台注销
如果你在使用 X 窗口系统,却在控制台上登录了,键入 exit 或 [Ctrl]-[D] 来从控制台会话中注销。
 
8.虚拟控制台关闭
要在 shell 提示下关闭计算机,键入以下命令: 
halt

9.面板
2.2.4. 在面板上添加图标和小程序
要使面板适合你的个人需要,你可以在上面添加更多小程序和启动器图标。 
要在面板上添加小程序,右击面板上的未用区域,选择「添加到面板」,然后从「附件」菜单中选择。选定了小程序后,它就会出现在你的面板上。在图 2-8中,显示当前本地天气和气温的「气象报告」小程序被添加到面板上。 
要在面板上添加一个启动器,右击面板上的未用区域,选择「添加到面板」 => 「启动器...」。这会启动一个对话框。你可以在该对话框中输入应用程序的名称、位置和启动它的命令(如 /usr/bin/foo),甚至为这个应用程序选择一个图标。点击「确定」,这个新启动器图标就会出现在面板上。 
窍门 
  另一种在面板上添加启动器的快捷方式是:右击面板上的未用区域,选择 「添加到面板」 => 「从菜单启动」。然后,选择一个出现在菜单中的应用程序。这会自动按照该程序在「主菜单」中的属性来添加启动器图标。 
2.2.5. 配置桌面面板
你可以自动或手工地隐藏面板;把它放置在桌面上的任一边上;改变它的大小和颜色;或者改变它的行为方式。要改变默认的面板设置,右击面板上的未用区域,选择「属性」。你可以设置面板的大小;它在桌面上的位置;以及你是否想在不使用面板时自动隐藏它(「自动隐藏」)。如果你选择了要自动隐藏面板,除非你把鼠标移到面板上(叫做徘徊,hovering),它就不会出现在桌面上。

10.使用 Nautilus
按照默认设置,把文件从一个目录中拖放到另一个目录中会移动文件。要把文件复制到另一个目录中,在拖放时按[Ctrl]键。 
按照默认设置,你的主目录中的图像文件会被显示为缩略图标(thumbnail)。对于文本文件来说,这意味着你会在图标中看到实际文本的一部分。对于图像文件来说,你会看到一个该图像的按比例缩小的版本(或thumbnail)。要关闭这项功能,选择「编辑」 => 「首选项」;从左侧的菜单中选择「预览」;从「显示缩略图标」的拉下菜单中选择「从不」。禁用这项(以及其它)预览功能会加快 Nautilus 的运行速度。

11.配置日期和时间
system-config-date &
redhat-config-date &

12. 挂载和卸载软盘
在使用软盘之前,它一定要先被挂载。要挂载软盘,把它插入软盘驱动器,然后在 shell 提示下键入 mount /mnt/floppy/ 。
你可以通过使用 cd /mnt/floppy/ 命令转换到那个目录里来存取软盘上的内容。

当你完成了软盘上的任务后,在把它从驱动器中弹出之前,你应该先卸载它。关闭所有可能还在使用软盘上文件的程序或展示软盘内容的程序(如 Nautilus 或 Konqueror),然后在 shell 提示下键入以下命令:
umount /mnt/floppy/

13.linux格式化:
使用 mke2fs:  /sbin/mke2fs /dev/fd0
mke2fs 是用来在硬盘分区或软盘之类的设备上创建一个 Linux ext2 文件系统的命令。基本上说,mke2fs 格式化某设备,并创建一个可以用来贮存文件和数据的、空白的、Linux 兼容的设备。
把你的软盘插入驱动器内,然后在 shell 提示下使用以下命令:
/sbin/mke2fs /dev/fd0
在 Linux 系统上,/dev/fd0 是指第一个软盘驱动器。如果你的计算机上不止有一个软盘驱动器,你的主软盘驱动器将会是 /dev/fd0,你的第二软盘驱动器将会是 /dev/fd1,依此类推。 
mke2fs 工具有许多选项。 -c 选项使 mke2fs 命令在创建文件系统之前检查设备上的坏块。其它选项在 mke2fs 的说明书(man)页中有详细说明。
一旦你已经在软盘上创建了 ext2 文件系统,你就可以在 Red Hat Linux 系统上使用它了。

使用 gfloppy:  /usr/bin/gfloppy
要启动 gfloppy,点击「主菜单」 => 「系统工具」 => 「软盘格式化器」。在 shell 提示下,键入 /usr/bin/gfloppy。如图 4-2所示,gfloppy 的界面很小,且只有极少选项。对多数用户来说,默认设置已经足够满足需要,然而,如果必要的话,你可以用 MS-DOS 文件系统来格式化软盘。你还可以选择你的软盘的密度(如果你使用的不是通常的高密度 3.5" 1.44MB 软盘的话)。如果这个软盘从前格式化为 ext2 的话,你还可以选择来快速格式化(quick format)该软盘。 
插入软盘,按你自己的需要来改变 gfloppy 中的设置;然后点击「格式化」。在主窗口的上部会出现一个状态箱,向你显示格式化和校验过程的状态(参见图 4-3)。当它结束后,你就可以弹出软盘,然后关闭 gfloppy 程序。

14.在 MS-DOS 软盘上存放 Linux 文件
要把 Linux 机器上的文件复制到 MS-DOS 格式化的软盘上,以便使 Windows 机器能够读取它,你应该使用 gfloppy(参见第 4.1.3.1 节)工具和 MS-DOS (FAT) 文件系统来格式化软盘。然后按照第 4.1.1 节中描述的方法把它挂载到 Linux。使用以下命令来复制文件(把 filename 替换为你要复制的文件): 
cp filename /mnt/floppy
然后,你便可以卸载软盘并把它从驱动器中弹出。软盘中的新文件现在就可以从你的 Windows 机器上被存取了。

1
top 看当前运行的进程
kill -9 pid 终止某进程(树)
cd 返回根目录
pwd 显示当前目录
3 less more查看文本文件指令 在less中打入v键就会启动vi编辑当前文件
4 mkdir、rm mv 改变文件名和目录名的命令
cp 复制文件和目录命令
man 命令使用方法参考工具,很有用
nano是一个小巧自由,并且友好的编辑器
5
vi有两种模式,一种是命令模式,一种是编辑模式。进入vi以后,默认处于命令模式。

现在我们执行vi LoveLetter。进入以后,按一下键盘上的Insert功能键或者i键可以进入编辑状态,可以插入字符,再按一下Insert变成复盖模式,这两种模式的区别很容易体现,大家尝试一下就可以了。上下左右四个方向键可以移动光标。基本的编辑命令和Windows里面没有区别。是不是很容易呢?当你把需要的内容输入完成以后,我们要保存,这时候按一下ESC键从编辑模式回到命令模式,首先输入一个冒号“:”,也就是按住SHIFT键不放再按分号“;”这样首先输入一个“:”,然后,输入w,回车,就可以保存我们编辑的内容到LoveLetter文件。现在我们按一下Insert就可以继续编辑。再按 ESC,输入“:”,再按w又可以保存。可是现在我们不需要保存,我们想要不保存就退出,怎么做呢?当我们输入w的时候是write的意思,保存,那么我们输入q就是quit退出的意思。好,输入q,回车,vi提示我们刚才进行的修改还没有保存,所以记住!一旦需要放弃我们的修改,不能直接用q命令退出,而需要用“q!”命令。输入q!,好了,退出了。
我们想看看我们刚才编辑的LoveLetter是不是真的保存好了,再vi LoveLetter,ok,看到了吧?现在我们想要直接退出,就可以只输入“:q”就可以了,不用输入那个“!”因为我们没有修改文件内容。如果我们修改一下这篇文章,我们在退出的时候可以输入“ESC : wq”就可以了。不需要把w和q分成两次输入。
6 linux中可以用amount命令将iso文件挂接为目录:mount -t iso9660 -o loop /home/kris/somewhat.iso /mnt/cdrom
7 file 检查文件的类型
8 wall write mesg
9 reset 重置终端,当屏幕发生问题的时候用此方法
10 env 显示环境变量
11 改变系统语言的方式:运行 export   LC_ALL="en_US"   LANG=en_US 就可以改成英文。要想一直输出E文.可以到 /etc/sysconfig/i18n里修改LANG="en_US. Utf-8"
12 查看本机ip:ifconfig -a
13 mount光盘:mount/dev/cdrom /mnt/cdrom,然后就可以在/mnt/cdrom中看到光盘内容了 。用umount /mnt/cdromo 可以卸载光盘。只有卸载光盘以后才能将光盘弹出。
14 在linux的提示符下输入文件名等的时候,可以输入部分文件名然后按Tab键即可智能补全。
15 redhat中安装rpm包的方法:rpm -i "包路径";要升级包可以rpm -U packagename。包的删除比较容易,使用:# rpm -e packagename就能够删除自己想要删除的包,不需要知道版本和路径
16 启动即运行vsftp方法,运行ntsysv,选中列表中的vsftpd即可。
17 查看文件内容:cat 文件名
18 find / -name "*network*" -print 查找根目录下所有包含network的文件
find / -iname "*network*" -print 查找根目录下所有包含network的文件,忽略大小写
19 useradd user1 建立一个用户,不过在为用户设定密码之前这个用户是不能使用的,设定密码的命令为passwd user1
20 ls的时候文件名旁边如果有“*”号,表示它是可执行文件,只要运行“*/文件名”即可运行。
21 重启网络service network restart
22 字符界面进入图形界面:startx,图形界面返回字符界面:注销即可。
23 安装VMWare,然后虚拟机网络类型选NAT即可实现主机和虚拟机之间的通信,要远程登录linux还需要安装telnet服务,root默认不能通过telnet登录
24 删除非空目录:rm -rf 目录名
25 解压cpio的方法:cpio -idmv < ***.cpio
26 UE中编辑的shell脚本到unix中运行提示“h^M: is not an identifier”,解决方法:dtox a.txt >b.txt 转换为unix格式,或者使用UE中的“文件”“转换”“DOS转Unix”功能。第二种更方便
27 find /usr -name httpd
28 解压some.tgz的方法:首先gunzip some.tgz,生成some.tar,然后tar -xvf some.tar解压
29 将gcc加入路径的方法:
PATH=$PATH:/usr/gnu/bin/
export PATH
30 sh脚本的变量的赋值等号两边不能有空格
31 sh脚本中命令行之间不能有空行,if语句后的条件前后要有空格
32 判断当前终端类型echo $TERM
33 重新获取ip的方式:/etc/init.d/network   restart  
34 Linux中录入ESC转义符的方法:首先按下Ctrl+V,然后按下ESC键
35 以后台方式运行一个程序,也就是脚本退出、shell退出都不会导致程序退出:命令后加“&”
36 登录自启动的脚本放在“/etc/profile”文件中,比如配置Java的环境变量就必须在这个文件中加入:
pathmunge /usr/java/j2re1.4.2_14/bin/ after
JAVA_HOME="/usr/java/j2re1.4.2_14/"

注意JAVA_HOME中的等号两边不能有空格,否则JAVA_HOME会被当成命令处理!!!!!!!!!!!!!!!!!!!1
37 如果系统出现乱码修改LANG环境变量即可。以前批量系统就出现过此问题
39 windows下的trace对应Linux的"traceroute ip地址"
40 Linux下使用U盘的方法,插入U盘,在mnt下创建目录usb;然后运行“fdisk -l”,这样会显示所有的设备,因为一般的U盘都是Fat格式的,所以找到格式为FAT的硬盘的标识符,比如sdb1,然后运行mount -t vfat /dev/sdb1 /mnt/usb;这样就U盘就挂接到/mnt/usb下了;卸载的时候umount /mnt/usb

一、Fedora 是什么,与Redhat的关系;
Fedora 是什么?如果您是初学Linux,可能在 LinuxSir.Org 上看到 Fedora&Redhat 讨论区,之所以把Fedora和Redhat这两个Linux的发行版放在一起,主要是他们的联系太密切了。Redhat 自9.0以后,不再发布桌面版的,而是把这个项目与开源社区合作,于是就有了Fedora 这个 Linux 发行版。Fedora 可以说是Redhat 桌面版本的延续,只不过是与开源社区合作。
可能有的初学者会问,什么是Linux发行版呢??Fedora是不是能装在电脑上的独立系统??是的,Fedora 是一个独立的操作系统,是Linux的一个版本,Linux有好多版本,比如 Debian、SuSE、Archlinux、Mandrakelinux以及Slackware 等;因为Linux是开放源代码的操作系统,所以如果您技术精通一点的话,您自己完全有能力做出自己的Linux发行版。

二、Fedora 和 Redhat 的官方地址;
Fedora 的官方地址是 http://fedora.redhat.com
Redhat 的官方地址: http://www.redhat.com

=========================================================
十条 Linux 新手必知
=========================================================
有网友提到基本配置文件,字体,输入法,驱动安装,我都觉得
这些不是一开始使用Linux需要学习的东西,比如我现在对字体
配置还不明白,呵呵,学习下面这些东西最好就在虚拟终端下,
不要弄 X 界面了。

每一条基本是一个归类,如果新手能事先看纸质的书,能节约自己
不少时间,减少对Linux的恐惧感以及挫折感,这些都是基本知识,
不需要图形界面。

1. i386启动过程、硬盘分区、单用户进入系统;
原因:装系统、grub、急救系统跟这个很有关系

2. 发行版的概念,明白Linux这个词是一个泛称,熟悉各自发行版
的包管理工具,比如rpm,apt,yum;清楚各自发行版的手册在哪里,
各个软件的手册在哪里;
原因:提问时说出发行版的名字和版本,虽然都是Linux,不少设置
在不同发行版是有差异的。新手装软件别无它途,别想着编译到HOME
目录了,如果在公共服务器上没权限就自己弄虚拟机吧,现在vmware
server都免费了,速度慢点无所谓,学这些基本知识足够了。

3. 系统基本使用,如下命令:(下面的4,5,6跟这个结合起来学习)
bash    环境变量,HOME下几个配置文件,PATH的用途, 能写简单的脚本;
*man*,cd, pwd, ls, mkdir, rmdir, cp, rm, mv, find,
grep/egrep/fgrep, df, du, vim(先这个吧,Emacser就不要争了,
nano之类的也不谈), chmod, chown, more/less, head, tail,
cat, tar, gzip, bzip2, who, whoami, w, top, ifconfig,
ping, tracert, passwd, adduser/useradd, mail/mailx/mutt,
mount, umount, clear,reset,lftp/ncftp, fdisk/cfdisk/parted,
ps, kill, killall, jobs, bg, fg, crontab, at, batch, dmesg,
talk, message
原因:差不多是日常使用命令的80%了。

4. 文件系统的知识:
Linux目录结构(FHS),每个目录的用途,为什么没有Windows下
的盘符,常见文件系统类型(ext2, ext3, reiserfs, jfs, xfs,
ntfs, vfat, iso9660),符号链接和硬链接,特殊文件类型(
字符设备文件,块设备文件,socket...),相对路径和绝对路径,
/etc/fstab
原因:真是很基本。

5. 权限问题,包括/etc/passwd, /etc/group, /etc/shadow,
权限位rwxsSt的概念, uid, gid
原因:基本,系统安全首先从这里开始。

6. 进程的概念,特别是子进程、父进程的关系,能通过ps命令
输出的pid, ppid找出这个关系;信号的概念,知道用kill发信号;
前台进程和后台进程;守护进程;管道,输入输出的重定向;
原因:常识问题。

7. linux日志系统,了解/var/log下各种日志的用途
原因:系统出了问题先看看有无可疑log。

8. 系统启动脚本的熟悉,对init那一套清楚,知道怎么
启动、重启、停止服务,怎么往这一套机制里增加服务删除
服务
原因:基本,也是学习shell脚本的好起点

9. TCP/IP的基本概念和使用,包括:
  OSI网络模型;
  以太网和MAC地址;
  IP协议和IP地址,IP地址段的表示法;
  ICMP和DHCP协议的作用;
  DNS系统;
  TCP协议和UDP协议,端口的概念,客户机/服务器模型;
  /etc/hosts 
  /etc/resolv.conf 
  /etc/services,
  /etc/network/interfaces文件的作用;
  ifconfig arp arping ping telnet ssh netstat route ip traceroute常用网络工具的使用;
原因:UNIX从一开始就跟网络结下不解之缘,所以了解网络的
基本问题是非常必要的。

10. X window的基本概念,弄明白X server和 X client的含义,这方面有王垠的《理解 Xwindow》:
http://learn.tsinghua.edu.cn:8080/2001315450/x.html
原因:以后就步入X window的世界了,路还很长,先打点基础:-)

推荐书籍:
《Computer Systems: A Programmer's Perspective》
《深入理解计算机系统》,中国电力出版社 译
了解计算机基础知识,这本书很好。

《UNIX简明教程》(UNIX Made Simple)
(英)Peter McBride 译:钟向群,机械工业出版社
强烈推荐,在图书馆可以找到

《Linux系统管理用户指南》,清华出版社
cathayan推荐

《UNIX教程》
以前在书店翻过,好像还不错,Pearson Education出的

《UNIX操作系统》
O'Reilly出的,认这牌子,www.oreilly.com.cn有书单,
不妨看看。

-------------------------------------------
kill,killall,pkill,ps,pgrep:
-------------------------------------------
pgrep 和pkill:  查询process和杀死process. 
pgrep= ps -ef|grep ...   比如:pgrep php-cgi  查找进程名为php-cgi的进程
pkill= killall           比如:pkill php-cgi 杀死所有进程名为php-cgi的进程

pgrep -u root,daemon     ---will list the processes owned by root OR daemon.
pgrep -u root sshd       ---will only list the processes called sshd AND owned by root.

1)ps命令:
ps的选项:
-a              Select all processes except both session leaders (seegetsid(2)) and processes not associated with a terminal.
-A              Select all processes. Identical to -e.
-e              Select all processes. Identical to -A.
-f              does full-format listing. This option can be combined
                       with many other UNIX-style options to add additional
                       columns. It also causes the command arguments to be
                       printed. When used with -L, the NLWP (number of
                       threads) and LWP (thread ID) columns will be added. See
                       the c option, the format keyword args, and the format
                       keyword comm.
x               Lift the BSD-style "must have a tty" restriction, which is imposed upon the set of all processes when some BSD-style
                       (without "-") options are used or when the ps personality setting is BSD-like. The set of processes selected in this
                       manner is in addition to the set of processes selected by other means. An alternate description is that this option
                       causes ps to list all processes owned by you (same EUID as ps), or to list all processes when used together with the
                       a option.
u               display user-oriented format

ps ax, ps axu
To see every process on the system using BSD syntax:
          
2)kill命令:
kill的应用是和ps 或pgrep 命令结合在一起使用的;
kill 的用法:
kill [信号代码]   进程ID
注:信号代码能省略;我们常用的信号代码是 -9 ,表示强制终止;
举例:
[root@localhost ~]# ps auxf |grep httpd
root 4939 0.0 0.0 5160 708 pts/3 S+ 13:10 0:00 \_ grep httpd
root 4830 0.1 1.3 24232 10272 ? Ss 13:02 0:00 /usr/sbin/httpd
apache 4833 0.0 0.6 24364 4932 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4834 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4835 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4836 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4837 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4838 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4839 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
apache 4840 0.0 0.6 24364 4928 ? S 13:02 0:00 \_ /usr/sbin/httpd
我们查看httpd 服务器的进程;你也能用pgrep -l httpd 来查看;
我们看上面例子中的第二列,就是进程PID的列,其中4830是httpd服务器的父进程,从4833-4840的进程都是他4830的子进程;如果我们杀掉父进程4830的话,其下的子进程也会跟着死掉;
[root@localhost ~]# kill 4840 注:杀掉4840这个进程;
[root@localhost ~]# ps -auxf |grep httpd 注:查看一下会有什么结果?是不是httpd服务器仍在运行?
[root@localhost ~]# kill 4830 注:杀掉httpd的父进程;
[root@localhost ~]# ps -aux |grep httpd 注:查看httpd的其他子进程是否存在,httpd服务器是否仍在运行?
对于僵尸进程,能用kill -9 来强制终止退出;
比如一个程式已完全死掉,如果kill 不加信号强度是没有办法退出,最佳的办法就是加信号强度 -9 ,后面要接杀父进程;比如;
[root@localhost ~]# ps aux |grep gaim
beinan 5031 9.0 2.3 104996 17484 ? S 13:23 0:01 gaim
root 5036 0.0 0.0 5160 724 pts/3 S+ 13:24 0:00 grep gaim

[root@localhost ~]# pgrep -l gaim
5031 gaim
[root@localhost ~]# kill -9 5031
2 killall

3)killall 命令:
通过程式的名字,直接杀死所有进程。
用法:killall 正在运行的程式名
killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程式在运行;
举例:
[root@localhost beinan]# pgrep -l gaim
2979 gaim
[root@localhost beinan]# killall gaim
                       
-------------------------------------------
Linux命令:killall - 杀死指定名字的进程
-------------------------------------------
用途说明
killall命令用于杀死指定名字的进程(kill processes by name)。我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,
        我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一,这真是一个太好用的命令了。
常用参数
格式:killall <command-name>
杀死指定名字的进程。实际上是向名字为<command-name>的所有进程发送SIGTERM信号,如果这些进程没有捕获这个信号,那么这些进程就会直接被干掉了。
格式:killall -<signame> <command-name>
格式:killall -<signum> <command-name>
    发送指定的信号到名字为<command-name>的所有进程。指定的信号可以是名称<signame>,也可以是信号对应的数字<signum>。下面是常用的信号:第一列为<signame>,第二列为<signum>,第三列为信号的含义。
第一列为<signame>,      第二列为<signum>,       第三列为信号的含义。
HUP                         1                       终端断线
INT                         2                       中断(同 Ctrl + C)
QUIT                        3                       退出(同 Ctrl + \)
TERM                        15                      终止
KILL                        9                       强制终止
CONT                        18                      继续(与STOP相反, fg/bg命令)
STOP                        19                      暂停(同 Ctrl + Z)

格式:killall -l
列出支持的信号。 
使用示例

示例一
[root@jfht ~]# killall -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
[root@jfht ~]#

示例二
[root@jfht ~]# killall tail
[root@jfht ~]# killall tail
tail: no process killed
[root@jfht ~]#
示例三

这个例子展示怎样把所有的登录后的shell给杀掉,因为有些bash实际上已经没有终端相连接了。
[root@jfht ~]# w
 21:56:35 up 452 days,  5:16,  3 users,  load average: 0.05, 0.06, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    220.112.87.62    21:53    0.00s  0.02s  0.00s w
root     pts/9    220.112.87.62    21:53    2:44   0.02s  0.02s -bash
root     pts/10   220.112.87.62    21:53    3:13   0.01s  0.01s -bash
[root@jfht ~]# killall -9 bash
此bash也被·卡掉了,所以连接丢失了。现在重新连接并登录。
Last login: Mon Apr  4 21:53:23 2011 from 220.112.87.62
[root@jfht ~]# w
 21:56:52 up 452 days,  5:16,  1 user,  load average: 0.28, 0.10, 0.02
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    220.112.87.62    21:56    0.00s  0.01s  0.00s w

查看机器中登陆的用户
[root@sunsyk ~]# w
 16:29:02 up 2 days,  2:35,  5 users,  load average: 0.03, 0.05, 0.01
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    :0.0             Tue15    2days  1:44   0.04s -bash
root     pts/2    :0.0             Tue15   46:42m  0.05s  0.05s bash
root     pts/3    :0.0             Tue15    2days  0.02s  0.02s bash
root     pts/4    172.20.52.114    14:17   58:48   0.16s  0.03s sqlplus
root     pts/5    172.20.52.114    15:31    0.00s  0.03s  0.00s w
我把pts/1踢掉(只有root才能去踢掉用户)
[root@sunsyk ~]# pkill -kill -t pts/1
[root@sunsyk ~]# pkill -kill -t pts/2
[root@sunsyk ~]# pkill -kill -t pts/3

===================================================
[root@localhost boot]# cat /boot/grub/grub.conf
===================================================
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.33.20)
root (hd0,0)
kernel /vmlinuz-2.6.33.20 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=128M rhgb quiet
initrd /initrd-2.6.33.20.img
title Red Hat Enterprise Linux (2.6.32-131.0.15.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-131.0.15.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=128M rhgb quiet
initrd /initramfs-2.6.32-131.0.15.el6.x86_64.img
[root@localhost boot]#

===================================================
[root@localhost boot]# cat /etc/inittab
===================================================
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

id:5:initdefault:
[root@localhost boot]#

=======================
source 命令:
=======================
source filename [arguments]
              Read  and execute commands from filename in the current shell environment and return the
              exit status of the last command executed from filename.  If filename does not contain  a
              slash,  file names in PATH are used to find the directory containing filename.  The file
              searched for in PATH need not be executable.  When bash is not in posix mode,  the  cur-
              rent directory is searched if no file is found in PATH.  If the sourcepath option to the
              shopt builtin command is turned off, the PATH is not searched.   If  any  arguments  are
              supplied,  they  become  the positional parameters when filename is executed.  Otherwise
              the positional parameters are unchanged.  The return status is the status  of  the  last
              command  exited within the script (0 if no commands are executed), and false if filename
              is not found or cannot be read.

===================================================
如何让客户端putty支持中文显示:
===================================================
选择Translation---->UTF-8 ---〉Apply

===================================================
如何运行执行文件
===================================================
. filename  ---->表示通过bash执行filename
sh filename ---->表示通过bash执行filename
./filename  ---->filename有X(执行)权限。 ./表示当前路径.如果你跑到其他的目录去了,得用绝对路径了

linux下可执行文件,如果是在/bin或者/usr/bin  里头,就直接敲文件名就可以运行.
如果是在其他文件夹里,比如说运行/root里头的  time文件
你就  cd /root  然后./time

umask变量
umask 用户掩码,由3个八进制数字组成,分别对应着用户、分组和其他用户。
用户 分组 其他用户
R W X R W X R W X
R禁止读 W禁止写 X禁止执行

===================================================
configure命令
===================================================
[root@localhost xmlrpc]# ./configure -h
`configure' configures this package to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.
Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in `/usr/local/bin', `/usr/local/lib' etc.  You can specify an installation prefix other than `/usr/local' using `--prefix', for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
  --target=TARGET   configure for building compilers for TARGET [HOST]

Optional Features and Packages:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-libdir=NAME      Look for libraries in .../NAME rather than .../lib
  --with-php-config=PATH  Path to php-config php-config
  --with-xmlrpc=DIR     Include XMLRPC-EPI support
  --with-libxml-dir=DIR     XMLRPC-EPI: libxml2 install prefix
  --with-libexpat-dir=DIR   XMLRPC-EPI: libexpat dir for XMLRPC-EPI (deprecated)
  --with-iconv-dir=DIR      XMLRPC-EPI: iconv dir for XMLRPC-EPI
  --enable-shared=PKGS  build shared libraries default=yes
  --enable-static=PKGS  build static libraries default=yes
  --enable-fast-install=PKGS  optimize for fast installation default=yes
  --with-gnu-ld           assume the C compiler uses GNU ld default=no
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --with-pic              try to use only PIC/non-PIC objects default=use both
  --with-tags=TAGS      include additional configurations automatic

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
              nonstandard directory <lib dir>
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Configure命令参数解释说明
 'configure'脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的.带上'-- help'选项执行'configure'脚本可以看到可用的所有选项.尽管许多选项是很少用到的,但是当你为了特殊的需求而configure一个包时,知道他们的存在是很有益处的.下面对每一个选项进行简略的介绍:
--cache-file=FILE
  'configure'会在你的系统上测试存在的特性(或者bug!).为了加速随后进行的配置,测试的结果会存储在一个cache file里.当configure一个每个子树里都有'configure'脚本的复杂的源码树时,一个很好的cache file的存在会有很大帮助.
--help
  输出帮助信息.即使是有经验的用户也偶尔需要使用使用'--help'选项,因为一个复杂的项目会包含附加的选项.例如,GCC包里的'configure'脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项.
--no-create
  'configure'中的一个主要函数会制作输出文件.此选项阻止'configure'生成这个文件.你可以认为这是一种演习(dry run),尽管缓存(cache)仍然被改写了.
--quiet
--silent
  当'configure'进行他的测试时,会输出简要的信息来告诉用户正在作什么.这样作是因为'configure'可能会比较慢,没有这种输出的话用户将会被扔在一旁疑惑正在发生什么.使用这两个选项中的任何一个都会把你扔到一旁.(译注:这两句话比较有意思,原文是这样的:If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)
--version
  打印用来产生'configure'脚本的Autoconf的版本号.
--prefix=PEWFIX
  '--prefix'是最常用的选项.制作出的'Makefile'会查看随此选项传递的参数,当一个包在安装时可以彻底的重新安置他的结构独立部分. 举一个例子,当安装一个包,例如说Emacs,下面的命令将会使Emacs Lisp file被安装到"/opt/gnu/share":
$ ./configure --prefix=/opt/gnu

--exec-prefix=EPREFIX
与'--prefix'选项类似,但是他是用来设置结构倚赖的文件的安装位置.编译好的'emacs'二进制文件就是这样一个问件.如果没有设置这个选项的话,默认使用的选项值将被设为和'--prefix'选项值一样.

--bindir=DIR
  指定二进制文件的安装位置.这里的二进制文件定义为可以被用户直接执行的程序.
--sbindir=DIR
  指定超级二进制文件的安装位置.这是一些通常只能由超级用户执行的程序.
--libexecdir=DIR
  指定可执行支持文件的安装位置.与二进制文件相反,这些文件从来不直接由用户执行,但是可以被上面提到的二进制文件所执行.
--datadir=DIR
  指定通用数据文件的安装位置.
--sysconfdir=DIR
  指定在单个机器上使用的只读数据的安装位置.
--sharedstatedir=DIR
  指定可以在多个机器上共享的可写数据的安装位置.
--localstatedir=DIR
  指定只能单机使用的可写数据的安装位置.
--libdir=DIR
  指定库文件的安装位置.
--includedir=DIR
  指定C头文件的安装位置.其他语言如C++的头文件也可以使用此选项.
--oldincludedir=DIR
  指定为除GCC外编译器安装的C头文件的安装位置.
--infodir=DIR
  指定Info格式文档的安装位置.Info是被GNU工程所使用的文档格式.
--mandir=DIR
  指定手册页的安装位置.
--srcdir=DIR
  这个选项对安装没有作用.他会告诉'configure'源码的位置.一般来说不用指定此选项,因为'configure'脚本一般和源码文件在同一个目录下.
--program-prefix=PREFIX
  指定将被加到所安装程序的名字上的前缀.例如,使用'--program-prefix=g'来configure一个名为'tar'的程序将会使安装的程序被命名为'gtar'.当和其他的安装选项一起使用时,这个选项只有当他被`Makefile.in'文件使用时才会工作.
--program-suffix=SUFFIX
  指定将被加到所安装程序的名字上的后缀.
--program-transform-name=PROGRAM
  这里的PROGRAM是一个sed脚本.当一个程序被安装时,他的名字将经过`sed -e PROGRAM'来产生安装的名字.
--build=BUILD
  指定软件包安装的系统平台.如果没有指定,默认值将是'--host'选项的值.
--host=HOST
  指定软件运行的系统平台.如果没有指定,将会运行`config.guess'来检测.
--target=GARGET
  指定软件面向(target to)的系统平台.这主要在程序语言工具如编译器和汇编器上下文中起作用.如果没有指定,默认将使用'--host'选项的值.
--disable-FEATURE
  一些软件包可以选择这个选项来提供为大型选项的编译时配置,例如使用Kerberos认证系统或者一个实验性的编译器最优配置.如果默认是提供这些特性,可以使用'--disable-FEATURE'来禁用它,这里'FEATURE'是特性的名字.例如:
$ ./configure --disable-gui
-enable-FEATURE[=ARG]
  相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用'--enable-FEATURE'来起用它.这里'FEATURE'是特性的名字.一个特性可能会接受一个可选的参数.例如:
$ ./configure --enable-buffers=128
`--enable-FEATURE=no'与上面提到的'--disable-FEATURE'是同义的.
--with-PACKAGE[=ARG]
 
  在自由软件社区里,有使用已有软件包和库的优秀传统.当用'configure'来配置一个源码树时,可以提供其他已经安装的软件包的信息.例如, 倚赖于Tcl和Tk的BLT器件工具包.要配置BLT,可能需要给'configure'提供一些关于我们把Tcl和Tk装的何处的信息:
$ ./configure --with-tcl=/usr/local --with-tk=/usr/local
'--with-PACKAGE=no'与下面将提到的'--without-PACKAGE'是同义的.
--without-PACKAGE
  有时候你可能不想让你的软件包与系统已有的软件包交互.例如,你可能不想让你的新编译器使用GNU ld.通过使用这个选项可以做到这一点:
$ ./configure --without-gnu-ld
--x-includes=DIR
  这个选项是'--with-PACKAGE'选项的一个特例.在Autoconf最初被开发出来时,流行使用'configure'来作为 Imake的一个变通方法来制作运行于X的软件.'--x-includes'选项提供了向'configure'脚本指明包含X11头文件的目录的方法.
--x-libraries=DIR
  类似的,'--x-libraries'选项提供了向'configure'脚本指明包含X11库的目录的方法.
  在源码树中运行'configure'是不必要的同时也是不好的.一个由'configure'产生的良好的'Makefile'可以构筑源码属于另一棵树的软件包.在一个独立于源码的树中构筑派生的文件的好处是很明显的:派生的文件,如目标文件,会凌乱的散布于源码树.这也使在另一个不同的系统或用不同的配置选项构筑同样的目标文件非常困难.建议使用三棵树:一棵源码树(source tree),一棵构筑树(build tree),一棵安装树(install tree).这里有一个很接近的例子,是使用这种方法来构筑GNU malloc包:
$ gtar zxf mmalloc-1.0.tar.gz
$ mkdir build && cd build
$ ../mmalloc-1.0/configure
creating cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc ) works... yes
checking whether the C compiler (gcc ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for a BSD compatible install... /usr/bin/install -c
checking host system type... i586-pc-linux-gnu
checking build system type... i586-pc-linux-gnu
checking for ar... ar
checking for ranlib... ranlib
checking how to run the C preprocessor... gcc -E
checking for unistd.h... yes
checking for getpagesize... yes
checking for working mmap... yes
checking for limits.h... yes
checking for stddef.h... yes
updating cache ../config.cache
creating ./config.status
  这样这棵构筑树就被配置了,下面可以继续构筑和安装这个包到默认的位置'/usr/local':
$ make all && make install

==============================
如何配置Linux网卡
==============================
网卡的配置:
(注:ifconfig命令设置的IP地址即时生效,但是重启机器后,IP地址又回复到原IP地址,所以ifconfig命令只能用于设置临时的IP地址)

1个命令:system-config-network
1个菜单:system-> preferences-> network connections

1).网卡配置文件
对于网卡信息的配置通常包括:配置IP地址、子网掩码和网关。网卡信息保存在网卡配置文件中。网卡配置文件位于/etc/sysconfig/network-scripts目录下。
一块网卡对应一个网卡配置文件,配置文件命名规则:

ifcfg-网卡类型以及网卡的序列号

由于以太网卡类型是eth,网卡的序列号从0开始,所以第一块网卡的配置文件名称为ifcfg-eth0,第二块网卡为ifcfg-eth1,以此类推。

网卡配置文件中常用配置文件内容如下:
DEVICE=eth0,定义该网卡的识别名称。
BOOTPROTO=dhcp,启动该网卡的识别名称。static或者none:代表固定的IP地址;bootp或者dhcp:通过BOOTP或DHCP协议取得IP地址。     
HWADDR=00:02:B3:0B:64:22,该网卡的MAC地址。
ONBOOT=yes,(最重要)启动network服务时,是否启用该网卡。当RedHat系统启动network服务时,
                network服务一次读取保存于/etc/sysconfig/network-scripts/目录下所有网卡的配置文件。
                如果网卡配置文件的ONBOOT设置为yes,则network服务就会调用ifup命令启动该网卡;
                如果网卡的配置文件的ONBOOT参数为no,network会跳过启动这个网卡的工作。
TYPE=Ethernet,网卡的类型。
USERCTL=no,是否允许普通用户启动或者停止该网卡。
IPV6INIT=no,是否在该网卡上启动IPV6的功能。
PEERDNS=yes,是否允许网卡在启动时向DHCP服务器查询DNS信息,并自动覆盖/etc/resolv.conf配置文件。

以下配置项用于指定该网卡的静态IP地址,此时BOOTPROTO必须为static或者none。
IPADDR=192.168.1.55,静态方式指定网卡的IP地址。
NETMASK=255.255.255.0,定义该网卡的子网掩码。
MTU=1500,设置网卡的MAC帧最大传输单位大小。
GATEWAY=192.168.1.1,设置网络的默认网关。
DNS1=192.168.128.5,指定主要的DNS服务器地址。
DNS2=192.168.128.6,指定备用的DNS服务器地址。

2).配置网卡信息 
配置网卡信息可以直接修改网卡配置文件中的相关内容,但是这种方法对用户的要求比较高。
在RedHat Enterprise Linux5中常用于设置IP地址的三个命令,分别是:system-config-network、setup和ifconfig。
其中ifconfig设置IP地址的方法将在常用命令部分中介绍。
(1)system-config-network命令
在命令提示行下输入system-config-network命令将会启动可视化网络配置界面(对于新手这个方式比较简单)

(2)setup设置网卡信息
在命令行下输入setup命令后将会进入系统设置界面,然后选择网卡设置进入网卡设置界面(很多系统都可以使用setup命令设置,运用比较广)

(3)ifconfig网卡常用命令
ifconfig命令的功能比较强大,可以用来查看和设置网卡信息。
a.查看网卡信息
命令语法:ifconfig [参数]
参数说明:
无参数:显示当前活动的网卡
- a:显示系统中所有网卡的配置信息
网卡设备名称:显示指定网卡的配置信息
eg:查看eth0网卡信息:#ifconfig eth0

b.设置IP地址
命令语法:ifconfig 网卡设备名 IP地址 netmask 子网掩码
(注:ifconfig命令设置的IP地址即时生效,但是重启机器后,IP地址又回复到原IP地址,所以ifconfig命令只能用于设置临时的IP地址)
eg:ifconfig eth0 192.168.168.156 netmask 255.255.255.0

c.修改MAC地址
命令语法:ifconfig 网卡设备名 hw ether MAC地址
(注:修改网卡的MAC地址前要禁用网卡,修改后要启用网卡)
eg:ifconfig eth0 hw ether 00:0C:29:03:F3:76

几个常用的命令:
1.ifdown 禁用网卡
语法:ifdown 网卡设备名  或者ifconfig 网卡设备名 down
2.ifup 启用网卡
语法:ifup 网卡设备名    或者ifconfig 网卡设备名 up
3.绑定IP和MAC地址
实现方法:创建/etc/ethers文件,文件内容“ip地址 mac地址”,然后执行“arp -f”命令,使得配置生效。
eg:将IP地址193.168.168.154与MAC地址00:0C:29:03:F3:75绑定。
#echo "193.168.168.154 00:0C:29:03:F3:75">>/etc/ethers
#arp -f

例子:
[root@localhost network-scripts]# more ifcfg-eth4
DEVICE=eth4
NM_CONTROLLED=yes
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME="System eth4"
UUID=84d43311-57c8-8986-f205-9c78cd6ef5d2
IPADDR=192.168.0.15
PREFIX=24
HWADDR=00:22:93:72:95:A8

[root@localhost network-scripts]# more ifcfg-eth6
DEVICE=eth6
HWADDR=00:22:93:73:2c:42
NM_CONTROLLED=yes
ONBOOT=no
BOOTPROTO=none
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
IPADDR=192.168.0.6
NETMASK=255.255.255.0
DNS1=' '
GATEWAY=192.168.0.1

[root@localhost network-scripts]# more ifcfg-eth7
DEVICE=eth7
NM_CONTROLLED=yes
ONBOOT=yes
BOOTPROTO=dhcp
TYPE=Ethernet
IPV6INIT=no
USERCTL=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME="System eth7"
UUID=1e690eec-2d2c-007e-535f-a873a2b375d5
HWADDR=00:22:93:73:2C:43
PEERDNS=yes
PEERROUTES=yes

--------------------------------------------
Linux系统下ifconfig命令使用及结果分析 
--------------------------------------------
Linux下网卡命名规律:eth0,eth1。第一块以太网卡,第二块。lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位。它代表你的机器本身。

1、ifconfig是查看网卡的信息。 
ifconfig [Interface] 
Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信息 
例如:ifconfig eth0 
eth0 Link encap:Ethernet
            HWaddr 00:0C:29:F3:3B:F2
            inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
            UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
            RX packets:78 errors:0 dropped:0 overruns:0 frame:0
            TX packets:104 errors:0 dropped:0 overruns:0 carrier:0
            collisions:0 txqueuelen:100
            RX bytes:11679 (11.4 Kb)
            TX bytes:14077 (13.7 Kb)
            Interrupt:10 Base address:0x1080 
我们可以看到 
第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址) 
第二行:网卡的IP地址、子网、掩码 
第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节 
第四、五行:接收、发送数据包情况统计 
第七行:接收、发送数据字节数统计信息。

2、ifconfig 配置网卡 
配置网卡的IP地址 
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 
在eth0上配置上192.168.0.1 的IP地址及24位掩码。若想再在eth0上在配置一个192.168.1.1/24 的IP地址怎么办?用下面的命令 
ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0 
这时再用ifconifg命令查看,就可以看到两个网卡的信息了,分别为:eth0和eth0:0。若还想再增加IP,那网卡的命名就接着是:eth0:1、eth0:2...想要几个就填几个。ok! 
配置网卡的硬件地址 
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx 
就将网卡的硬件地址更改了,此时你就可以骗过局域网内的IP地址邦定了。 
将网卡禁用 
ifconfig eth0 down 
将网卡启用 
ifconfig eth0 up 
ifconfig 命令的功能很强大,还可以设置网卡的MTU,混杂模式等。就不一一介绍了,用时间可以自己研究一下。 
注意:用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了

3.查看IP地址分配: ip addr
[root@localhost version]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:22:93:72:95:ac brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:22:93:72:95:ad brd ff:ff:ff:ff:ff:ff
4: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:22:93:72:95:aa brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:22:93:72:95:ab brd ff:ff:ff:ff:ff:ff
    inet6 fe80::222:93ff:fe72:95ab/64 scope link 
       valid_lft forever preferred_lft forever
6: eth4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 00:22:93:72:95:a8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.15/24 brd 192.168.0.255 scope global eth4
7: eth5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:22:93:72:95:a9 brd ff:ff:ff:ff:ff:ff
    inet 10.118.202.16/24 brd 10.118.202.255 scope global eth5
    inet6 fe80::222:93ff:fe72:95a9/64 scope link 
       valid_lft forever preferred_lft forever
8: eth10: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:19:c6:9d:76:e4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.15/24 brd 192.168.0.255 scope global eth10
9: eth12: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:19:c6:9d:76:e5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.16/24 brd 192.168.0.255 scope global eth12
10: eth13: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:19:c6:9d:76:e6 brd ff:ff:ff:ff:ff:ff
11: eth11: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN qlen 1000
    link/ether 00:19:c6:9d:76:e7 brd ff:ff:ff:ff:ff:ff
    
--------------------------------------------
linux 下route命令
--------------------------------------------
在路由表中,缺省路由以目的网络为0.0.0.0、子网掩码为0.0.0.0的形式出现。如果数据包的目的地址不能与任何路由相匹配,那么系统将使用缺省路由转发该数据包。
route add default gw 10.118.202.1  增加一条缺省路由,网关是10.118.202.1   ---非常重要

http://blog.sina.com.cn/s/blog_67146a750100zoyi.html

为了让设备能访问另一个子网,需要在设备里增加路由到子网络,下面是一些资料。基本操作如下:
一般来说,都是为了能访问别的子网才设置路由的,比如说,你的主机处于192.168.10.0/24,而你想访问192.168.20.0/24网的主机,当然你知道一个网关IP,例如192.168.10.1(必须和你主机处于同一子网),那么,你可以这样配置路由。
添加路由
    route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.10.1

查看路由状态
    route -n

删除路由
    route del -net 192.168.20.0 netmask 255.255.255.0
 
路由修改route       
    我们在网路基础的时候谈过关于路由的问题,两部主机之间一定要有路由才能够互通 TCP/IP 的协定,否则就无法进行连线啊!
一般来说,只要有网路介面,该介面就会产生一个路由,例如在鸟哥实验室内部的主机有一个 eth0 及 lo ,所以:

命令格式:
[root@linux ~]# route [-nee]
[root@linux ~]# route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
[root@linux ~]# route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]

观察的参数:
   -n  :不要使用通讯协定或主机名称,直接使用 IP 或 port number;
   -ee :使用更详细的资讯来显示
增加 (add) 与删除 (del) 路由的相关参数:
   -net    :表示后面接的路由为一个网域;
   -host   :表示后面接的为连接到单部主机的路由;
   netmask :与网域有关,可以设定 netmask 决定网域的大小;
   gw      :gateway 的简写,后续接的是 IP 的数值喔,与 dev 不同;
   dev     :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0 等
   
范例一:单纯的观察路由状态
[root@linux ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 eth0
0.0.0.0         192.168.10.30   0.0.0.0         UG    0      0        0 eth0
[root@linux ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
default         server.cluster      0.0.0.0         UG    0      0        0 eth0

由上面的例子当中仔细观察 route 与 route -n 的输出结果,你可以发现有加 -n参数的主要是显示出 IP ,至于使用 route 而已的话,显示的则是『主机名称』喔!也就是说,在预设的情况下, route 会去找出该 IP 的主机名称,如果找不到呢?就会显示的钝钝的(有点小慢),所以说,鸟哥通常都直接使用 route -n 啦!由上面看起来,我们也知道 default = 0.0.0.0/0.0.0.0 ,而上面的资讯有哪些你必须要知道的呢?
· Destination, Genmask:这两个玩意儿就是分别是 network 与netmask 啦!所以这两个咚咚就组合成为一个完整的网域!
· Gateway:该网域是通过那个 gateway 连接出去的? 如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过区域网路的 MAC 直接传讯;如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。
· Flags:总共有多个旗标,代表的意义如下:                        
o U (route is up):该路由是启动的;                       
o H (target is a host):目标是一部主机 (IP) 而非网域;                       
o G (use gateway):需要透过外部的主机 (gateway) 来转递封包;                       
o R (reinstate route for dynamic routing):使用动态路由时,恢复路由资讯的旗标;                       
o D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由                       
o M (modified from routing daemon or redirect):路由已经被修改了;                       
o !  (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
· Iface:这个路由传递封包的介面。

此外,观察一下上面的路由排列顺序喔,依序是由小网域(192.168.10.0/24 是 Class C),逐渐到大网域(169.254.0.0/16 Class B) 最后则是预设路由 (0.0.0.0/0.0.0.0)。然后当我们要判断某个网路封包应该如何传送的时候,该封包会经由这个路由的过程来判断喔!举例来说,我上头仅有三个路由,若我有一个传往 192.168.10.20 的封包要传递,那首先会找 192.168.10.0/24 这个网域的路由,找到了!所以直接由 eth0 传送出去;如果是传送到 Yahoo 的主机呢? Yahoo 的主机 IP 是 202.43.195.52,我通过判断 
1)不是 192.168.10.0/24,
2)不是 169.254.0.0/16 结果到达 
3)0/0 时,OK!传出去了,透过 eth0 将封包传给 192.168.10.30那部 gateway 主机啊!所以说,路由是有顺序的。因此当你重复设定多个同样的路由时,例如在你的主机上的两张网路卡设定为相同网域的 IP 时,会出现什么情况?会出现如下的情况:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
也就是说,由于路由是依照顺序来排列与传送的,所以不论封包是由那个介面 (eth0, eth1) 所接收,都会由上述的 eth0 传送出去,所以,在一部主机上面设定两个相同网域的 IP 本身没有什么意义!有点多此一举就是了。除非是类似虚拟主机 (Xen, VMware 等软体) 所架设的多主机时,才会有这个必要~

范例二:路由的增加与删除
[root@linux ~]# route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0
# 上面这个动作可以删除掉 169.254.0.0/16 这个网域!
# 请注意,在删除的时候,需要将路由表上面出现的资讯都写入
# 包括  netmask , dev 等等参数喔!注意注意
[root@linux ~]# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0
# 透过 route add 来增加一个路由!请注意,这个路由必须要能够与你互通。
# 举例来说,如果我下达底下的指令就会显示错误:
# route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254
# 因为我的环境内仅有 192.168.10.100 这个 IP ,所以不能与 192.168.200.254
# 这个网段直接使用 MAC 互通!这样说,可以理解喔!?
[root@linux ~]# route add default gw 192.168.10.30
# 增加预设路由的方法!请注意,只要有一个预设路由就够了喔!
# 在这个地方如果您随便设定后,记得使用底下的指令重新设定你的网路
# /etc/init.d/network restart
      如果是要进行路由的删除与增加,那就得要参考上面的例子了,其实,使用 man route 里面的资料就很丰富了!仔细查阅一下囉!你只要记得,当出现『SIOCADDRT: Network is unreachable』这个错误时,肯定是由于 gw 后面接的 IP 无法直接与您的网域沟通 (Gateway 并不在你的网域内),所以,赶紧检查一下是否输入错误啊!加油吧!

例如:
[root@oam1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth8
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 eth3
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
169.254.0.0     0.0.0.0         255.255.0.0     U     1006   0        0 eth8

[root@oam1 ~]# route del -net 192.168.0.0 netmask 255.255.255.0 dev eth3

[root@oam1 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth8
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
link-local      *               255.255.0.0     U     1006   0        0 eth8

# route 命令添加的路由,机器重启或者网卡重启后就没掉了,在linux下设置永久路由的方法:
1.在/etc/rc.local里添加
2.在/etc/sysconfig/network里添加到末尾
3./etc/sysconfig/static-router :
any net x.x.x.x/24 gw y.y.y.y

------------------------
WINDOWS下的route命令:
------------------------
ROUTE语法
route [-f] [-p] [Command] [Destination] [mask Netmask] [Gateway] [metric Metric] [if Interface]

简单的的操作如下,
1.查看路由状态:route print
    只查看ipv4(ipv6)路由状态:route print -4(-6)
    
2.添加路由:route add 目的网络 mask 子网掩码 网关                 ——重启机器或网卡失效
    route add 192.168.20.0 mask 255.255.255.0 192.168.10.1
    
3.添加永久:route -p add 目的网络 mask 子网掩码网关
    route -p add 192.168.20.0 mask 255.255.255.0 192.168.10.1
    
4.删除路由:route delete 目的网络 mask 子网掩码
    route delete 192.168.20.0 mask 255.255.255.0
    
------------------------
traceroute命令
------------------------
如果是跟踪路由,windows下可以使用tracert ip地址,linux下用traceroute ip地址。

[root@oam-nas2 yuanjs]# traceroute 10.118.4.157
traceroute to 10.118.4.157 (10.118.4.157), 30 hops max, 60 byte packets
 1  10.118.202.1 (10.118.202.1)  1.801 ms  3.990 ms  7.271 ms
 2  10.118.246.73 (10.118.246.73)  1.092 ms  1.794 ms  2.465 ms
 3  10.118.246.6 (10.118.246.6)  174.842 ms  176.603 ms  178.407 ms
 4  10.118.4.157 (10.118.4.157)  0.262 ms  0.237 ms  0.195 ms

C:\Documents and Settings\yuanjinsong>tracert 10.118.202.16
Tracing route to 10.118.202.16 over a maximum of 30 hops

1     3 ms     1 ms     1 ms  10.118.4.129
  2    <1 ms    <1 ms    <1 ms  10.118.246.5
  3     1 ms     1 ms     2 ms  10.118.246.74
  4    <1 ms    <1 ms    <1 ms  10.118.202.16

Trace complete.

C:\Documents and Settings\yuanjinsong>tracert 10.118.202.96

Tracing route to 10.118.202.96 over a maximum of 30 hops

1     2 ms     1 ms     2 ms  10.118.4.129
  2    <1 ms    <1 ms    <1 ms  10.118.246.5
  3     1 ms     1 ms     1 ms  10.118.246.74
  4     *        *        *     Request timed out.
  5     *        *

C:\Documents and Settings\yuanjinsong>tracert proxynj.zte.com.cn

Tracing route to proxynj.zte.com.cn [10.41.70.8]
over a maximum of 30 hops:

1   700 ms     1 ms     1 ms  10.118.4.129
  2    <1 ms    <1 ms    <1 ms  10.118.246.5
  3    25 ms    25 ms    26 ms  10.118.254.253
  4    38 ms    29 ms    28 ms  ^C
  
------------------------------------------------------------------------
常用网络配置命令:
------------------------------------------------------------------------    
1)首先后插卡插上网线,使用命令:mii-tool eth0 ,mii-tool eth1 ... mii-tool eth13
  查看哪些网口是:link。记录这些网口号。
  也可以使用ethtool eth0 的命令
2)从后插卡拔掉网线,使用命令:mii-tool 有link状态的网口号
  看哪个从link变为no link
  
ifconfig -a |grep add
ifup eth0
ifdown eth0
ethtool eth0
mii-tool -v eth0
/etc/init.d/network status
route

service --status-all
service network restart --启动网络配置
setup
startx

------------------------------------------------------------------------
如何配置路由使得不同网段互相访问:
------------------------------------------------------------------------
在路由表中,缺省路由以目的网络为0.0.0.0、子网掩码为0.0.0.0的形式出现。如果数据包的目的地址不能与任何路由相匹配,那么系统将使用缺省路由转发该数据包。
route add default gw 10.118.202.1  增加一条缺省路由,网关是10.118.202.1   ---非常重要
或者route add df gw 10.118.202.1

碰到一个问题:同网段的ip可以Ping通,但是不同网段不能ping通
答案:没有设置路由。
[root@oam1 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.118.202.0    *               255.255.255.0   U     1      0        0 eth9
192.168.0.0     *               255.255.255.0   U     0      0        0 eth10
192.168.0.0     *               255.255.255.0   U     0      0        0 eth8
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
link-local      *               255.255.0.0     U     1005   0        0 eth3
link-local      *               255.255.0.0     U     1009   0        0 eth10

通过上面的命令可以看到,如果ping 10.118.4.140的话,没有路由可以选择,所以无法ping通。
需要增加一个缺省路由,指定网关和物理网口,通过这个物理网口和网关连接到另外一个网段。
进入/etc/sysconfig/network-scripts目录下:
vim ifcfg-eth9,指定如下内容:
DEVICE=eth9                    //设备名
BOOTPROTO=none
NETMASK=255.255.255.0          //子网掩码
TYPE=Ethernet                  //设备类型
HWADDR=00:22:93:72:b1:ab
IPADDR=10.118.202.201          //IP地址
IPV6INIT=no
ONBOOT=yes                     //OS启动的时候,自动加载
USERCTL=no
DEFAULTROUTE=YES               //----------指定这是缺省路由
GATEWAY=10.118.202.1           //----------指定网关地址。

然后查看一下路由信息:
[root@oam1 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.118.202.0    *               255.255.255.0   U     1      0        0 eth9
192.168.0.0     *               255.255.255.0   U     0      0        0 eth10
192.168.0.0     *               255.255.255.0   U     0      0        0 eth8
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
link-local      *               255.255.0.0     U     1005   0        0 eth3
link-local      *               255.255.0.0     U     1009   0        0 eth10
default         10.118.202.1    0.0.0.0         UG    0      0        0 eth9

此时看到有了一个缺省路由,所有不是本网段(10.118.202.*)的地址全部走这个路由。

------------------------------------------------------------------------
我使用过的Linux命令之ifconfig - 网络配置命令 
------------------------------------------------------------------------
我使用过的Linux命令之ifconfig - 网络配置命令
[root@csp ~]# ifconfig --help
Usage:
  ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]
  [add <address>[/<prefixlen>]]
  [del <address>[/<prefixlen>]]
  [[-]broadcast [<address>]]  [[-]pointopoint [<address>]]
  [netmask <address>]  [dstaddr <address>]  [tunnel <address>]
  [outfill <NN>] [keepalive <NN>]
  [hw <HW> <address>]  [metric <NN>]  [mtu <NN>]
  [[-]trailers]  [[-]arp]  [[-]allmulti]
  [multicast]  [[-]promisc]
  [mem_start <NN>]  [io_addr <NN>]  [irq <NN>]  [media <type>]
  [txqueuelen <NN>]
  [[-]dynamic]
  [up|down] ...

用途说明
ifconfig命令常用来显示系统中的网络接口(网卡)信息,也可以用来配置网络接口(configure a network interface),如激活、关闭、设置地址等。在Linux系统中,网卡命名规律:eth0为第一块以太网卡(Ethernet Card),eth1为第二块。lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位。

常用参数
格式:ifconfig

显示当前激活的网络接口信息。
If no arguments are given, ifconfig displays the status of the currently active interfaces.

格式:ifconfig {INTERFACE}

显示指定网络接口的信息。比如:eth0, eth1。
If a single interface  argument  is given, it displays the status of the given interface only;

格式:ifconfig -a

显示所有网络接口的信息,无论是否激活。
if a single -a argument is given, it displays the status of all interfaces, even those that are down.  
Display info on all network interfaces on server, active or inactive.

其他格式,用来配置网络接口。
Otherwise, it configures an interface.

格式:ifconfig {INTERFACE} up

格式:ifup {INTERFACE}

激活指定网络接口。比如:eth0, eth1。
This  flag  causes the interface to be activated.  It is implicitly specified if an address is assigned to the interface.

格式:ifconfig {INTERFACE} down

格式:ifdown {INTERFACE}

关闭指定网络接口。
This flag causes the driver for this interface to be shut  down.

格式:ifconfig {INTERFACE} {IP}

格式:ifconfig {INTERFACE} {IP} netmask {NETMASK}

为指定网络接口设置IP地址和掩码,并自动激活。比如:eth0, eth0:0, eth0:1,后两个为虚拟网卡。

格式:ifconfig {INTERFACE} add {IP}

格式:ifconfig {INTERFACE}:0 {IP}

为指定网络接口添加IP地址。

格式:ifconfig {INTERFACE} del {IP}
为指定网络接口删除IP地址。

使用示例
示例一 通过ifconfig命令查看当前网络接口及状态
ifconfig不带参数,只打印处于激活状态的网络接口。

[root@jfht ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:1B:78:40:8C:20  
          inet addr:211.103.28.xx  Bcast:211.103.28.31  Mask:255.255.255.224
          inet6 addr: fe80::21b:78ff:fe40:8c20/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:134856806 errors:0 dropped:0 overruns:0 frame:0
          TX packets:140723373 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1680519599 (1.5 GiB)  TX bytes:2804853589 (2.6 GiB)
          Interrupt:114 Memory:fa000000-fa012800

ifconfig eth0 192.168.1.1/24 -----添加静态IP地址192.168.1.1 255.255.255.0 到eth0网口上,但是重启机器后失效。
          
现在解释一下输出信息的含义:

eth0:网络接口
link encap:网络类型
HWaddr:网卡物理地址
Inet addr :IP地址
Bcast:广播地址
Mask:子网掩码
UP:正在使用的网络接口
RX packets,TX packets接收和传输的数据包个数
RX byte,TX byte表示接搜和传输的具体数目
Interrupt:终端信息
Base address:内存地址

eth1      Link encap:Ethernet  HWaddr 00:1B:78:40:8C:22  
          inet addr:192.168.1.191  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::21b:78ff:fe40:8c22/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:29821173 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28680326 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4264958692 (3.9 GiB)  TX bytes:427504706 (407.7 MiB)
          Interrupt:122 Memory:f8000000-f8012800

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:30263265 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30263265 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:63016162 (60.0 MiB)  TX bytes:63016162 (60.0 MiB)

ifconfig命令跟上-a参数,打印所有配置的网络接口,不论其是否激活。 
[root@jfht ~]# ifconfig -a 
eth0      Link encap:Ethernet  HWaddr 00:1B:78:40:8C:20  
          inet addr:211.103.28.xx  Bcast:211.103.28.31  Mask:255.255.255.224
          inet6 addr: fe80::21b:78ff:fe40:8c20/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:134856877 errors:0 dropped:0 overruns:0 frame:0
          TX packets:140723396 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1680524793 (1.5 GiB)  TX bytes:2804859207 (2.6 GiB)
          Interrupt:114 Memory:fa000000-fa012800

eth1      Link encap:Ethernet  HWaddr 00:1B:78:40:8C:22  
          inet addr:192.168.1.191  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::21b:78ff:fe40:8c22/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:29821183 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28680336 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4264959332 (3.9 GiB)  TX bytes:427505346 (407.7 MiB)
          Interrupt:122 Memory:f8000000-f8012800

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:30263271 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30263271 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:63016642 (60.0 MiB)  TX bytes:63016642 (60.0 MiB)

sit0      Link encap:IPv6-in-IPv4  
          NOARP  MTU:1480  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

ifconfig命令跟上指定网络接口名称,就可以查看具体的网卡信息了。 
[root@jfht ~]# ifconfig eth1 
eth1      Link encap:Ethernet  HWaddr 00:1B:78:40:8C:22  
          inet addr:192.168.1.191  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::21b:78ff:fe40:8c22/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:29821190 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28680343 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4264959780 (3.9 GiB)  TX bytes:427505794 (407.7 MiB)
          Interrupt:122 Memory:f8000000-f8012800

[root@jfht ~]# 
示例二 在VMWare虚拟机中用ifconfig命令关闭和激活网卡
VMWare虚拟机,网络连接采用NAT方式,操作系统为RHEL3.4。从Windows的cmd窗口通过ping命令来确认。

开始时,eth0处于激活状态。 
C:\Users\zhy>ping 192.168.227.128

正在 Ping 192.168.227.128 具有 32 字节的数据:
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64

192.168.227.128 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

在Linux的console中执行 ifconfig eth0 down 命令之后,就无法ping通了。 
C:\Users\zhy>ping 192.168.227.128

正在 Ping 192.168.227.128 具有 32 字节的数据:
请求超时。
请求超时。
来自 192.168.227.1 的回复: 目标主机无法访问。
请求超时。

192.168.227.128 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 1,丢失 = 3 (75% 丢失),

在Linux的console中执行 ifconfig eth0 up 命令之后,又可以ping通了。 
C:\Users\zhy>ping 192.168.227.128

正在 Ping 192.168.227.128 具有 32 字节的数据:
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.128 的回复: 字节=32 时间<1ms TTL=64

192.168.227.128 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

示例三 为一块网卡配置多个地址
在eth0上已经有一个ip地址了,再在其上增加一个ip地址。

[root@node34 root]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.128  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14766 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18009 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1530995 (1.4 Mb)  TX bytes:3088071 (2.9 Mb)
          Interrupt:10 Base address:0x2000

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2310 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2310 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:203796 (199.0 Kb)  TX bytes:203796 (199.0 Kb)

[root@node34 root]# 
[root@node34 root]# ifconfig eth0:1 192.168.227.188 netmask 255.255.255.0 
[root@node34 root]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.128  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14878 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18097 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1541605 (1.4 Mb)  TX bytes:3097295 (2.9 Mb)
          Interrupt:10 Base address:0x2000

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.188  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14883 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18106 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1541935 (1.4 Mb)  TX bytes:3098261 (2.9 Mb)
          Interrupt:10 Base address:0x2000

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2312 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2312 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:203972 (199.1 Kb)  TX bytes:203972 (199.1 Kb)

C:\Users\zhy>ping 192.168.227.188

正在 Ping 192.168.227.188 具有 32 字节的数据:
来自 192.168.227.188 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.188 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.188 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.227.188 的回复: 字节=32 时间<1ms TTL=64

192.168.227.188 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

[root@node34 root]# ifconfig eth0:1 del 192.168.227.188 
[root@node34 root]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.128  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15306 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18496 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1585467 (1.5 Mb)  TX bytes:3141665 (2.9 Mb)
          Interrupt:10 Base address:0x2000

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.189  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:15311 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18505 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1585797 (1.5 Mb)  TX bytes:3142711 (2.9 Mb)
          Interrupt:10 Base address:0x2000

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2322 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2322 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:204852 (200.0 Kb)  TX bytes:204852 (200.0 Kb)

C:\Users\zhy>ping 192.168.227.188

正在 Ping 192.168.227.188 具有 32 字节的数据:
来自 192.168.227.1 的回复: 目标主机无法访问。
请求超时。
请求超时。
请求超时。

192.168.227.188 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 1,丢失 = 3 (75% 丢失),

示例四 使用ifconfig命令配置的网络设置,在机器重启之后就无效了
用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。

[root@node34 root]# ifconfig eth0:1 192.168.227.189 
[root@node34 root]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.128  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:215 errors:0 dropped:0 overruns:0 frame:0
          TX packets:251 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:21887 (21.3 Kb)  TX bytes:22716 (22.1 Kb)
          Interrupt:10 Base address:0x2000

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.189  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:215 errors:0 dropped:0 overruns:0 frame:0
          TX packets:251 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:21887 (21.3 Kb)  TX bytes:22716 (22.1 Kb)
          Interrupt:10 Base address:0x2000

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:394 errors:0 dropped:0 overruns:0 frame:0
          TX packets:394 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:29423 (28.7 Kb)  TX bytes:29423 (28.7 Kb)

[root@node34 root]# reboot

Broadcast message from root (pts/1) (Thu Jul 21 19:49:25 2011):

The system is going down for reboot NOW!
[root@node34 root]#

Last login: Wed Jul 20 12:19:18 2011 from 192.168.227.1
[root@node34 root]# ifconfig -a 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.128  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:77 errors:0 dropped:0 overruns:0 frame:0
          TX packets:104 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8916 (8.7 Kb)  TX bytes:10906 (10.6 Kb)
          Interrupt:10 Base address:0x2000

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:354 errors:0 dropped:0 overruns:0 frame:0
          TX packets:354 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:25651 (25.0 Kb)  TX bytes:25651 (25.0 Kb)

[root@node34 root]#

示例五 系统中网络接口配置文件样本,采用DHCP方式,并增加虚拟网卡
[root@node34 root]# cat /etc/sysconfig/network-scripts/ifcfg-eth0   
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp

[root@node34 root]# cat /etc/sysconfig/network-scripts/ifcfg-eth0:0   
DEVICE=eth0:0
ONBOOT=yes
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=192.168.227.227
NETMASK=255.255.255.0
ONBOOT=yes

[root@node34 root]# service network restart 
正在关闭接口 eth0:                                        [  确定  ]
关闭环回接口:                                             [  确定  ]
设置网络参数:                                             [  确定  ]
弹出环回接口:                                             [  确定  ]
弹出界面 eth0:                                            [  确定  ]

[root@node34 root]# ifconfig -a 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.128  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:389 errors:0 dropped:0 overruns:0 frame:0
          TX packets:341 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:40273 (39.3 Kb)  TX bytes:37785 (36.8 Kb)
          Interrupt:10 Base address:0x2000

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:E3:D2:65  
          inet addr:192.168.227.227  Bcast:192.168.227.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:389 errors:0 dropped:0 overruns:0 frame:0
          TX packets:341 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:40273 (39.3 Kb)  TX bytes:37785 (36.8 Kb)
          Interrupt:10 Base address:0x2000

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:355 errors:0 dropped:0 overruns:0 frame:0
          TX packets:355 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:25703 (25.1 Kb)  TX bytes:25703 (25.1 Kb)

[root@node34 root]#

示例六 系统中网络接口配置文件样本,固定IP地址
[root@jfht ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
# Broadcom Corporation NetXtreme II BCM5706 Gigabit Ethernet
DEVICE=eth0
BOOTPROTO=static
BROADCAST=211.103.28.31
HWADDR=00:1B:78:40:8C:20
IPADDR=211.103.28.xx
IPV6INIT=yes
IPV6_AUTOCONF=yes
NETMASK=255.255.255.224
NETWORK=211.103.28.0
ONBOOT=yes
[root@jfht ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 
# Broadcom Corporation NetXtreme II BCM5706 Gigabit Ethernet
DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:1B:78:40:8C:22
IPADDR=192.168.1.191
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
[root@jfht ~]#

问题思考
相关资料
【1】OldHawk Linux系统下ifconfig命令使用及结果分析
http://www.cnblogs.com/taobataoma/archive/2007/12/27/1016689.html
【2】鸟哥的Linux私房菜 ifconfig
http://linux.vbird.org/linux_server/0140networkcommand.php#ifconfig
【3】豆豆网 Redhat Linux网卡配置与绑定
http://tech.ddvip.com/2007-11/119605865737942.html

=====================================
iconv:
=====================================

一、利用iconv命令进行文件内容编码转换
  用法: iconv [选项…] [文件…]
  有如下选项可用:
  输入/输出格式规范:
  -f, --from-code=名称 原始文本编码
  -t, --to-code=名称 输出编码
  信息:
  -l, --list 列举所有已知的字符集
  输出控制:
  -c 从输出中忽略无效的字符
  -o, --output=FILE 输出文件
  -s, --silent 关闭警告
  --verbose 打印进度信息
  -?, --help 给出该系统求助列表
  --usage 给出简要的用法信息
  -V, --version 打印程序版本号
  例子:
  iconv -f gb2312 -t utf-8 aaa.txt >bbb.txt
  这个命令读取aaa.txt文件,从gb2312编码转换为utf-8编码,其输出定向到bbb.txt文件。注:windows下写字板生成的txt一般是gb18030编码,如果指定错误会报如下错误:iconv: 未知 6071 处的非法输入序列

二、文件名编码转换因为现在用linux,原来在windows里的文件都是用GBK编码的。所以copy到linux下是乱码,文件内容可以用iconv来转换可是好多中文的文件名还是乱码,找到个可以转换文件名编码的命令,就是convmv。convmv命令详细参数
  例如convmv -f GBK -t UTF-8 *.mp3不过这个命令不会直正的转换,你可以看到转换前后的对比。如果要直正的转换要加上参数 --notestconvmv -f GBK -t UTF-8 --notest *.mp3-f 参数是指出转换前的编码,-t 是转换后的编码。这个千万不要弄错了。不然可能还是乱码哦。还有一个参数很有用。就是 -r 这个表示递归转换当前目录下的所有子目录。* 需要安装 convmv-1.10-1.el5.noarch.rpm

三、更好的傻瓜型命令行工具enca,它不但能智能的识别文件的编码,而且还支持成批转换。
  1.安装
  $sudo apt-get install enca
  2.查看当前文件编码
  enca -L zh_CN ip.txt
  Simplified Chinese National Standard; GB2312
  Surrounded by/intermixed with non-text data
  3.转换
  命令格式如下
  $enca -L 当前语言 -x 目标编码 文件名
  例如要把当前目录下的所有文件都转成utf-8
  enca -L zh_CN -x utf-8 *
  enca -L zh_CN file 检查文件的编码
  enca -L zh_CN -x UTF-8 file 将文件编码转换为"UTF-8"编码
  enca -L zh_CN -x UTF-8 < file1 > file2 如果不想覆盖原文件可以这样,很简单吧。

Q&A:
[root@localhost ScriptTools]# iconv -t UTF-8 -f GB2312 /home/yuanjs/ZXUSP_V01.02.10/code/scripts/usrdef_cliscript/network_cli.xml > /home/temp.xml
iconv: 未知 8649 处的非法输入序列
[root@localhost ScriptTools]#

我把它改为iconv -c -f gb18030 -t utf-8 $1 > $2,多加了一个-c,忽略无效的字符。
发现转化过来基本正确(起码汉字的翻译全对了,也没有丢失数据),但是有个小地方出错了,如下图2.
而且转化过来的大小也不一样,如下图1.

=====================================
Linux 使用 cp 命令强制覆盖功能
=====================================
我们平常在Linux中使用 cp 命令时,会发现将一个目录中文件复制到另一个目录具有相同文件名称时,
即使添加了 -rf 参数强制覆盖复制时,系统仍然会提示让你一个个的手工输入 y 确认复制,令人不胜其烦.
那么这是由于什么原因引起的?要知道原因,你可以在命令行中输入 alias 命令 ,以下是是alias命令的输出
[root@test-01 yum]# alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

这里我们只关系红色字体的那一行,也就是与cp 相关的一行,看见没有?我们平时使用 cp 命令,虽然没有添加任何参数 ,
但系统默认会在我们使用 cp 命令时自动添加 -i 参数,www.linuxidc.com这个就是别名的作用.那么这个 -i 参数又有什么用呢?使用 man cp 命令查看
 -i, --interactive
              prompt before overwrite
-i 即交互的缩写方式,也就是在使用 cp 命令作文件覆盖操作之前,系统会要求确认提示.这个本来是系统的一个保险措施.
如果有很多文件要复制,觉得一个一个输入y 确认麻烦的话,可以使用如下方法解决:

方法一:
# unalias cp
去掉 cp 命令的别名,这时你再用 cp -rf 复制文件时,就不会要求确认啦.
不过这里还是建议大家在复制完成后,还是恢复 cp 的别名方式,因为可以多一层保险嘛,是人都会有犯混的时候,给自己加一个保险,有保障呀.
恢复的方法很简单
#alias cp='cp -i'
这样就行啦.

方法二
    输入\cp命令,作用也是取消cp的别名。
    [root@localhost ~]#\cp -fr src dest

方法三
    输入yes|cp -fr src dest,使用管道自动输入yes。
    [root@localhost ~]#yes | cp -fr src dest   让管道自动输入一大堆得yes,就可以完成了强行复制了。
    那有人会问dos的copy命令怎么实现强行复制的呢?答案是用来 xcopy /y src dest 来实现强行复制。

=====================================    
察看当前目录下各子目录及文件大小
=====================================    
du: disk usage
1.用du命令怎么察看当前目录下各子目录及文件大小,每个文件以及目录的大小
   du *
   
2.察看某个目录的大小。
    du -sH * 或者 du -sh
    
Linux下面查看目录大小以及文件数量命令
1.查看目录的大小:
[root@vps 1010 shellimage]#du -sh
上面这个是查看当前目录的大小,

如果是要查看指定目录的大小则:
[root@vps 1010 shellimage]#du -sh /uploadimages   *****************重要命令
这里是查看根目录下的uploadimages目录的大小.
 
2.查看当前目录文件总数:
[root@vps 1010 shellimage]#find . -type f |wc -l
上面这个是查看当前目录文件总数,如果是要查看指定目录的总数则:

[root@vps 1010 shellimage]#find /uploadimages -type f |wc -l
这里的f是表示文件,改成d则表示目录
    
=====================================    
查看Linux磁盘空间大小命令
=====================================
df: disk free
一、df 命令;
df 是来自于coreutils 软件包,系统安装时,就自带的;我们通过这个命令可以查看磁盘的使用情况以及文件系统被挂载的位置;
举例:
[root@localhost beinan]# df -lh           *****************重要命令
Filesystem 容量 已用 可用 已用% 挂载点
/dev/hda8 11G 6.0G 4.4G 58% /
/dev/shm 236M 0 236M 0% /dev/shm
/dev/sda1 56G 22G 35G 39% /mnt/sda1

我们从中可以看到,系统安装在/dev/hda8 ;还有一个56G的磁盘分区/dev/sda1挂载在 /mnt/sda1中;
其它的参数请参考 man df

二、fdsik
fdisk 是一款强大的磁盘操作工具,来自util-linux软件包,我们在这里只说他如何查看磁盘分区表及分区结构;参数 -l ,通过-l 参数,能获得机器中所有的硬盘的分区情况;
[root@localhost beinan]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux
在 上面Blocks中,表示的是分区的大小,Blocks的单位是byte ,我们可以换算成M,比如第一个分区/dev/hda1的大小如果换算成M,应该是6144831/1024=6000M,也就是6G左右,其实没有这么 麻烦,粗略的看一下把小数点向前移动三位,就知道大约的体积有多大了;
System 表示的文件系统,比如/dev/hda1 是NTFS格式的;/dev/hda2 表示是fat32格式的文件系统;.
在此例中,我们要特别注意的是/dev/hda3分区,这是扩展分区;他下面包含着逻辑分区,其实这个分区相当于一个容器;从属于她的有 hda5,hda6,hda7,hda8,hda9 ;
我们还注意到一点,怎么没有hda4呢?为什么hda4没有包含在扩展分区?一个磁盘最多有四个主分区; hda1-4算都是主分区;hda4不可能包含在扩展分区里,另外扩展分区也算主分区;在本例中,没有hda4这个分区,当然我们可以把其中的一个分区设 置为主分区,只是我当时分区的时候没有这么做而已;
再仔细统计一下,我们看一看这个磁盘是不是还有空间?hda1+hda2+hda3=实际已经分区的体积,所以我们可以这样算 hda1+hda2+hda3=6144831+16386300+39728745 = 62259876 (b),换算成M单位,小数点向前移三位,所以目前已经划分好的分区大约占用体积是62259.876(M),其实最精确的计算 62259876/1024=60800.67(M);而这个磁盘大小是80.0 GB (80026361856byte),其实实际大小也就是78150.744(M);通过我们一系列的计算,我们可以得出这个硬盘目前还有使用的空间;大约还有18G未分区的空间;

fdisk -l 能列出机器中所有磁盘的个数,也能列出所有磁盘分区情况;比如:
[root@localhost beinan]# fdisk -l
Disk /dev/hda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 765 6144831 7 HPFS/NTFS
/dev/hda2 766 2805 16386300 c W95 FAT32 (LBA)
/dev/hda3 2806 7751 39728745 5 Extended
/dev/hda5 2806 3825 8193118+ 83 Linux
/dev/hda6 3826 5100 10241406 83 Linux
/dev/hda7 5101 5198 787153+ 82 Linux swap / Solaris
/dev/hda8 5199 6657 11719386 83 Linux
/dev/hda9 6658 7751 8787523+ 83 Linux

Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83 Linux

通过上面我们可以知道此机器有两块硬盘,我们也可以指定fdisk -l 来查看其中一个硬盘的分区情况;
[root@localhost beinan]# fdisk -l /dev/sda
Disk /dev/sda: 60.0 GB, 60011642880 bytes
64 heads, 32 sectors/track, 57231 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 57231 58604528 83 Linux
通过上面情况可以知道,在/dev/sda 这个磁盘中,只有一个分区;使用量差不多是百分百了;
我们还可以来查看 /dev/hda的
[root@localhost beinan]# fdisk -l /dev/hda
自己试试看?

三、cfdisk 来自于util-linux的软件包;
cfdisk 也是一款不错的分区工具;在有些发行版中,此工具已经从util-linux包中剔除;cfdisk 简单易用是他的特点;和DOS中的fdisk 相似;在本标题中,我们只来解说如何查看机器的中的磁盘分区状况及所用的文件系统等;
查看磁盘分区的用法 cfdisk -Ps 磁盘设备名;
比如
[root@localhost beinan]cfdisk -Ps
[root@localhost beinan]cfdisk -Ps /dev/hda
[root@localhost beinan]cfdisk -Ps
Partition Table for /dev/hda
First Last
# Type Sector Sector Offset Length Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
1 Primary 0 23438834 63 23438835 Linux (83) Boot
2 Primary 23438835 156296384 0 132857550 Extended (05) None
5 Logical 23438835 155268224 63 131829390 Linux (83) None
6 Logical 155268225 156296384 63 1028160 Linux swap (82) None
我们只用的参数 -Ps,就列出了磁盘的分区情况;目前在Slackware Debian Mandrake 等主流发行版中存在cfdisk ,而fedora 4.0把这个小工具剔除了;有点可惜;这是我在Slackware中操作的;
如果您这样操作,就更直观了;
[root@localhost beinan]cfdisk 磁盘设备名
举例:
[root@localhost beinan]cfdisk /dev/hda
您所看到的是如下的模式:
cfdisk 2.12a
Disk Drive: /dev/hda
Size: 80026361856 bytes, 80.0 GB
Heads: 255 Sectors per Track: 63 Cylinders: 9729
Name Flags Part Type FS Type [Label] Size (MB)
-------------------------------------------------------------------------------------------
hda1 Boot Primary Linux ReiserFS 12000.69
hda5 Logical Linux ReiserFS 67496.65
hda6 Logical Linux swap 526.42
[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ] [ Quit ]
[ Type ] [ Units ] [ Write ]
Toggle bootable flag of the current partition
您进入了cfdisk 的操作界面;用键盘移动指针到[Quit]就可以退出;

四、parted 功能不错的分区工具;在Fedora 4.0中有带,可以自己安装上;在此主题中,我们只说如何查看磁盘的分区情况;
调用方法简单,parted 默认是打开的设备是/dev/hda ,也可以自己指定;比如 parted /dev/hda 或/dev/sda 等;退出的方法是 quit
[root@localhost beinan]# parted
使用 /dev/hda
(parted) p
/dev/hda 的磁盘几何结构:0.000-76319.085 兆字节
磁盘标签类型:msdos
Minor 起始点 终止点 类型 文件系统 标志
1 0.031 6000.842 主分区 ntfs 启动
2 6000.842 22003.088 主分区 fat32 lba
3 22003.088 60800.690 扩展分区
5 22003.119 30004.211 逻辑分区 reiserfs
6 30004.242 40005.615 逻辑分区 reiserfs
7 40005.646 40774.350 逻辑分区 linux-swap
8 40774.381 52219.094 逻辑分区 ext3
9 52219.125 60800.690 逻辑分区 reiserfs
我们在partd 的操作面上,用p就可以列出当前磁盘的分区情况,如果想要查看其它磁盘,可以用 select 功能,比如 select /dev/sda ;

五、qtparted ,与parted 相关的软件还有qtparted ,也能查看到磁盘的结构和所用的文件系统,是图形化的;
[beinan@localhost ~]# qtparted
图形化的查看,一目了然;

六、sfdisk 也是一个分区工具,功能也多多;我们在这里只说他的列磁盘分区情况的功能;
[root@localhost beinan]# sfdisk -l
自己看看吧;
sfdisk 有几个很有用的功能;有兴趣的弟兄不妨看看;

七、partx 也简要的说一说,有些系统自带了这个工具,功能也简单,和fdisk 、parted、cfdisk 来说不值一提;不用也罢;
用法: partx 设备名
[root@localhost beinan]# partx /dev/hda
# 1: 63- 12289724 ( 12289662 sectors, 6292 MB)
# 2: 12289725- 45062324 ( 32772600 sectors, 16779 MB)
# 3: 45062325-124519814 ( 79457490 sectors, 40682 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)
# 5: 45062388- 61448624 ( 16386237 sectors, 8389 MB)
# 6: 61448688- 81931499 ( 20482812 sectors, 10487 MB)
# 7: 81931563- 83505869 ( 1574307 sectors, 806 MB)
# 8: 83505933-106944704 ( 23438772 sectors, 12000 MB)
# 9: 106944768-124519814 ( 17575047 sectors, 8998 MB)

八、查看目前机器中的所有磁盘及分区情况:---------------------最终办法
[beinan@localhost ~]$ cat /proc/partitions
major minor #blocks name
3 0 78150744 hda
3 1 6144831 hda1
3 2 16386300 hda2
3 5 8193118 hda5
3 6 10241406 hda6
3 7 787153 hda7
3 8 11719386 hda8
3 9 8787523 hda9
8 0 58605120 sda
8 1 58604528 sda1

============================
fstab(/etc/fstab)
============================
fstab(/etc/fstab)是Linux下比较重要的配置文件,它包含了系统在启动时挂载文件系统和存储设备的详细信息。下面是我机子上的fstab文件:
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot1            /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-sda11        swap                    swap    defaults        0 0
/dev/sda6               /mnt/winE               vfat    defaults        0 0
/dev/sda8               /mnt/winG               ntfs    defaults        0 0
可以看到这个文件有六列,下面以最后一列为例一一作解释,这里假设你对mount命令比较熟悉:
1.第1列是需要挂载的文件系统或存储设备,这里为我Windows上的G盘,分区为/dev/sda8.
2.第2列是挂载点,我选择为/mnt/winG.
3.第3列指定文件系统或分区的类型,我的G盘是NTFS类型的,在Linux下表示为ntfs.
File types:
  1) Linux file systems: ext2, ext3, jfs, reiserfs, reiser4, xfs, swap.
  2) Windows:
      vfat = FAT 32, FAT 16
      ntfs= NTFS
      Note: For NTFS rw ntfs-3g
  3) CD/DVD/iso: iso9660
  4) Network file systems:
  5) nfs:      server:/shared_directory /mnt/nfs nfs  0 0 
  6) smb:      //win_box/shared_folder /mnt/samba smbfs rw,credentials=/home/user_name/winbox-credentials.txt 0 0
  7) auto: The file system type (ext3, iso9660, etc) it detected automatically. Usually works. Used for removable devices (CD/DVD, Floppy drives, or USB/Flash drives) as the file system may vary on these devices.
4.第4列为挂载选项,详细参考man mount. 下面列出一些常用的选项:
   auto: 系统自动挂载,fstab默认就是这个选项
   ro: read-only
   rw: read-write
   defaults: rw, suid, dev, exec, auto, nouser, and async.
5.第5列为dump选项,设置是否让备份程序dump备份文件系统,0为忽略,1为备份。
6.第6列为fsck选项,告诉fsck程序以什么顺序检查文件系统,0为忽略。
参考资料:
“How to edit and understand /etc/fstab”:
http://www.tuxfiles.org/linuxhelp/fstab.html
"How to fstab":
http://ubuntuforums.org/showthread.php?t=283131
                
================================
ssh服务安装、开启、关闭、查询
================================
如果你用的是redhat的话,默认就安装了,而且默认在35启动,
如果没有,更改/etc/ssh/sshd_config配置文件.
如果仅仅想拒绝几个用户,就加入DenyUsers xxx xxx即可.如果仅仅想让几个特定用户登录,就加入AllowUsers xxx xxx 即可.
记住不要同时配置DenyUsers和AllowUsers.配置后重启sshd服务即可.
登录方法:xxx@服务器ip,xxx为服务器上用户名
如: [email]root@192.168.1.1[/email],

<1>运行setup,在系统服务里选择sshd就行了,如果控制得看配置文件了
   setup-system-services选择sshd
<2>chkconfig --level 2345 sshd on
    --level 指定系统在2345运行级别时,通常在35中开启就行,开启(on)sshd服务,关闭则用(off)

临时控制启动停止则用:/etc/rc.d/init.d/sshd start | stop | restart | status

<3>介绍OpenSUSE 11.1中如何开启ssh服务 
以下步骤输入命令:
1、修改sshd_config文件,命令为:vi /etc/ssh/sshd_config 
2、将#PasswordAuthentication no的注释去掉,并且将NO修改为YES 
3、将#PermitRootLogin yes的注释去掉 
4、重新启动SSH服务,命令为:/etc/init.d/sshd restart 
5、验证SSH服务状态,命令为:/etc/init.d/sshd status

<4>安装:在光盘上找到openssh,用rpm安装即可
启动:一般来讲安装之后是自动启动,手工启动可以/etc/init.d/sshd start或者service sshd start
屏蔽某个用户:修改/etc/passwd,把这个用户的shell(冒号分隔的最后一拦)改成/bin/false

dropbear是嵌入式linux的轻量级ssh软件。

==========================
top命令显示内容的详细解释
==========================
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。

top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0

统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比  user 
1.0% sy 内核空间占用CPU百分比          system
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比  nice
98.7% id 空闲CPU百分比                 idle
0.0% wa 等待输入输出的CPU时间百分比    wait
0.0% hi
0.0% si

最后两行为内存信息。内容如下:

Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量

Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。

序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
    D=不可中断的睡眠状态
    R=运行
    S=睡眠
    T=跟踪/停止
    Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

* A: PID        = Process Id                               0x00008000  debug flag (2.5)
* E: USER       = User Name                                0x00024000  special threads (2.5)
* H: PR         = Priority                                 0x001D0000  special states (2.5)
* I: NI         = Nice value                               0x00100000  PF_USEDFPU (thru 2.4)
* O: VIRT       = Virtual Image (kb)
* Q: RES        = Resident size (kb)
* T: SHR        = Shared Mem size (kb)
* W: S          = Process Status
* K: %CPU       = CPU usage
* N: %MEM       = Memory usage (RES)
* M: TIME+      = CPU Time, hundredths
  b: PPID       = Parent Process Pid
  c: RUSER      = Real user name
  d: UID        = User Id
  f: GROUP      = Group Name
  g: TTY        = Controlling Tty
  j: P          = Last used cpu (SMP)
  p: SWAP       = Swapped size (kb)
  l: TIME       = CPU Time
  r: CODE       = Code size (kb)
  s: DATA       = Data+Stack size (kb)
  u: nFLT       = Page Fault count
  v: nDRT       = Dirty Pages count
  y: WCHAN      = Sleeping in Function
  z: Flags      = Task Flags <sched.h>
* X: COMMAND    = Command name/line

默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容:

通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。

命令使用
1.工具(命令)名称
top
2.工具(命令)作用
显示系统当前的进程和其他状况; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,
直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.
该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
3.环境设置
在Linux下使用。
4.使用方法
4.1 使用格式
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
4.2 参数说明
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
n iterations

4.3 其他
下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。
这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
Ctrl+L 擦除并且重写屏幕。
h或者? 显示帮助画面,给出一些简短的命令总结说明。
k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;
  如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
i 忽略闲置和僵死进程。这是一个开关式命令。
q 退出程序。
r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。
  输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
S 切换到累计模式。
s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。
  需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
f或者F 从当前显示中添加或者删除项目。
o或者O 改变显示项目的顺序。
l 切换显示平均负载和启动时间信息。
m 切换显示内存信息。                   ---------------重要
t 切换显示进程和CPU状态信息。          ---------------重要
c 切换显示命令名称和完整命令行。       ---------------重要
M 根据驻留内存大小进行排序。           ---------------重要
P 根据CPU使用百分比大小进行排序。      ---------------重要
T 根据时间/累计时间进行排序。          ---------------重要
W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

========================
free命令看内存:重要啊
========================
free -m  以兆为单位
free 或者 free -k    以KB为单位 (缺省)
free -b   以B为单位

http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html
Linux上的free命令详解
解释一下Linux上free命令的输出。
下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:
FO[2][1] = 24677460
FO[3][2] = 10321516  
                   1          2          3          4          5          6
1              total       used       free     shared    buffers     cached
2 Mem:      24677460   23276064    1401396          0     870540   12084008
3 -/+ buffers/cache:   10321516   14355944
4 Swap:     25151484     224188   24927296

公式:************************************************
1) total = used ( "buffers" + "cached" + "actual used memory") + free
2) - buffer/cache = used - ( buffers + cached )   //出去所有缓冲之后,真正使用的程序内存   已经使用了的内存最小值(used memory min) 上半区间
3) + buffer/cache = free +   buffers + cached     //空闲内存+所有缓冲,还可以使用多少内存  还可以使用的内存最大值(free memory max) 下半区间
4) ("- buffer/cache") 已使用内存容量最小值 + ("+ buffer/cache") 可用内存最大值  = total

free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。
free输出地第二行和第三行是比较让人迷惑的。这两行都是说明内存使用情况的。第一列是总量(total),第二列是使用量(used),第三列是可用量(free)。

1)第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:
24677460KB(缺省时free的单位为KB)物理内存,即FO[2][1];
在这些物理内存中有23276064KB(即FO[2][2])被使用了;
还用1401396KB(即FO[2][3])是可用的;
这里得到第一个等式:
FO[2][1] = FO[2][2] + FO[2][3]
FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。
FO[2][5]表示被OS buffer住的内存。
FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:
A buffer is something that has yet to be "written" to disk. 
A cache is something that has been "read" from the disk and stored for later use.
也就是说 buffers 是用于存放要输出到disk(块设备)的数据的,而 cached 是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么FO[2][6](cached memory)比较大,而FO[2][3]比较小的原因。我们可以做一个简单的测试:
释放掉被系统cache占用的数据;
echo 3>/proc/sys/vm/drop_caches
读一个大文件,并记录时间;
关闭该文件;
重读这个大文件,并记录时间;
第二次读应该比第一次快很多。原来我做过一个BerkeleyDB的读操作,大概要读5G的文件,几千万条记录。在我的环境上,第二次读比第一次大概可以快9倍左右。

2)free输出的第二行是从一个应用程序的角度看系统内存的使用情况。
对于FO[3][2],即-buffers/cache,表示一个应用程序认为系统被用掉多少内存;
对于FO[3][3],即+buffers/cache,表示一个应用程序认为系统还有多少内存;
因为被系统cache和buffer占用的内存可以被快速回收,所以通常FO[3][3]比FO[2][3]会大很多。

这里还用两个等式:
FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]
这二者都不难理解。
free命令由procps.*.rpm提供(在Redhat系列的OS上)。free命令的所有输出值都是从/proc/meminfo中读出的。
在系统上可能有meminfo(2)这个函数,它就是为了解析/proc/meminfo的。procps这个包自己实现了meminfo()这个函数。可以下载一个procps的tar包看看具体实现,现在最新版式3.2.8。

===============================
LINUX进程内存占用查看
===============================
重要公式:
VIRT= SWAP(虚拟内存中被换出的大小) + RES
RES=CODE(可执行代码) + DATA(数据段+栈)

VSZ:  virtual size 虚拟内存大小 VSZ= VIRT
RSZ:  resource size 实际占用内存大小 RSZ= RES
RSS:  resident set size in kilobytes
VIRT: 进程使用的虚拟内存总量,单位kb。           VIRT=SWAP+RES
SWAP: 进程使用的虚拟内存中,被换出的大小,单位kb。
RES:  进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE: 可执行代码占用的物理内存大小,单位kb
DATA: 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR:  共享内存大小,单位kb

可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:
LINUX进程内存占用查看方法
(1)top
可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令:
$ top -u oracle
$ top -p 14596 
(2)pmap
可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:
$ pmap -d 14596
Address:   start address of map
Kbytes:    size of map in kilobytes
RSS:       resident set size in kilobytes
Dirty:     dirty pages (both shared and private) in kilobytes
Mode:      permissions on map: read, write, execute, shared, private (copy on write)
Mapping:   file backing the map, or ’[ anon ]’ for allocated memory, or  ’[ stack ]’ for the program stack
Offset:    offset into the file
Device:    device name (major:minor)
       
Address:0001000-0024000 进程所占的地址空间
Kbytes 该虚拟段的大小
RSS 设备号(主设备:次设备)
Anon 设备的节点号,0表示没有节点与内存相对应
Locked 是否允许swapped
Mode 权限:r=read, w=write, x=execute, s=shared, p=private(copy on write)

Linux性能测试 pmap命令
名称:
       pmap - report memory map of a process(查看进程的内存映像信息)
用法
       pmap [ -x | -d ] [ -q ] pids...
       pmap -V
选项含义
       -x   extended       Show the extended format. 显示扩展格式
       -d   device         Show the device format.   显示设备格式
       -q   quiet          Do not display some header/footer lines. 不显示头尾行
       -V   show version   Displays version of program. 显示版本
扩展格式和设备格式域:
        Address:  start address of map  映像起始地址
        Kbytes:  size of map in kilobytes  映像大小
        RSS:  resident set size in kilobytes  驻留集大小
        Dirty:  dirty pages (both shared and private) in kilobytes  脏页大小
        Mode:  permissions on map 映像权限: r=read, w=write, x=execute, s=shared, p=private (copy on write)  
        Mapping:  file backing the map , or '[ anon ]' for allocated memory, or '[ stack ]' for the program stack.  映像支持文件,[anon]为已分配内存 [stack]为程序堆栈
        Offset:  offset into the file  文件偏移
        Device:  device name (major:minor)  设备名

举例:
查看进程1的设备格式
[root@C44 ~]#  pmap -d 1
1:   init [5]                    
Address   Kbytes Mode  Offset           Device    Mapping
00934000      88 r-x-- 0000000000000000 008:00005 ld-2.3.4.so
0094a000       4 r---- 0000000000015000 008:00005 ld-2.3.4.so
0094b000       4 rw--- 0000000000016000 008:00005 ld-2.3.4.so
0094e000    1188 r-x-- 0000000000000000 008:00005 libc-2.3.4.so
00a77000       8 r---- 0000000000129000 008:00005 libc-2.3.4.so
00a79000       8 rw--- 000000000012b000 008:00005 libc-2.3.4.so
00a7b000       8 rw--- 0000000000a7b000 000:00000   [ anon ]
00a85000      52 r-x-- 0000000000000000 008:00005 libsepol.so.1
00a92000       4 rw--- 000000000000c000 008:00005 libsepol.so.1
00a93000      32 rw--- 0000000000a93000 000:00000   [ anon ]
00d9d000      52 r-x-- 0000000000000000 008:00005 libselinux.so.1
00daa000       4 rw--- 000000000000d000 008:00005 libselinux.so.1
08048000      28 r-x-- 0000000000000000 008:00005 init
0804f000       4 rw--- 0000000000007000 008:00005 init
084e1000     132 rw--- 00000000084e1000 000:00000   [ anon ]
b7f5d000       8 rw--- 00000000b7f5d000 000:00000   [ anon ]
bffee000      72 rw--- 00000000bffee000 000:00000   [ stack ]
ffffe000       4 ----- 0000000000000000 000:00000   [ anon ]
mapped: 1700K    writeable/private: 276K    shared: 0K
[root@C44 ~]#

最后一行的值
mapped 表示该进程映射的虚拟地址空间大小,也就是该进程预先分配的虚拟内存大小,即ps出的vsz
writeable/private  表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小      
shared 表示进程和其他进程共享的内存大小

查看进程1的设备格式,不显示头尾行
[root@C44 ~]#  pmap -d -q 1
1:   init [5]                    
00934000      88 r-x-- 0000000000000000 008:00005 ld-2.3.4.so
0094a000       4 r---- 0000000000015000 008:00005 ld-2.3.4.so
0094b000       4 rw--- 0000000000016000 008:00005 ld-2.3.4.so
0094e000    1188 r-x-- 0000000000000000 008:00005 libc-2.3.4.so
00a77000       8 r---- 0000000000129000 008:00005 libc-2.3.4.so
00a79000       8 rw--- 000000000012b000 008:00005 libc-2.3.4.so
00a7b000       8 rw--- 0000000000a7b000 000:00000   [ anon ]
00a85000      52 r-x-- 0000000000000000 008:00005 libsepol.so.1
00a92000       4 rw--- 000000000000c000 008:00005 libsepol.so.1
00a93000      32 rw--- 0000000000a93000 000:00000   [ anon ]
00d9d000      52 r-x-- 0000000000000000 008:00005 libselinux.so.1
00daa000       4 rw--- 000000000000d000 008:00005 libselinux.so.1
08048000      28 r-x-- 0000000000000000 008:00005 init
0804f000       4 rw--- 0000000000007000 008:00005 init
084e1000     132 rw--- 00000000084e1000 000:00000   [ anon ]
b7f5d000       8 rw--- 00000000b7f5d000 000:00000   [ anon ]
bffee000      72 rw--- 00000000bffee000 000:00000   [ stack ]
ffffe000       4 ----- 0000000000000000 000:00000   [ anon ]
[root@C44 ~]#

查看进程1的扩展格式

[root@C44 ~]#  pmap -x 1
1:   init [5]                    
Address   Kbytes     RSS    Anon  Locked Mode   Mapping
00934000      88       -       -       - r-x--  ld-2.3.4.so
0094a000       4       -       -       - r----  ld-2.3.4.so
0094b000       4       -       -       - rw---  ld-2.3.4.so
0094e000    1188       -       -       - r-x--  libc-2.3.4.so
00a77000       8       -       -       - r----  libc-2.3.4.so
00a79000       8       -       -       - rw---  libc-2.3.4.so
00a7b000       8       -       -       - rw---    [ anon ]
00a85000      52       -       -       - r-x--  libsepol.so.1
00a92000       4       -       -       - rw---  libsepol.so.1
00a93000      32       -       -       - rw---    [ anon ]
00d9d000      52       -       -       - r-x--  libselinux.so.1
00daa000       4       -       -       - rw---  libselinux.so.1
08048000      28       -       -       - r-x--  init
0804f000       4       -       -       - rw---  init
084e1000     132       -       -       - rw---    [ anon ]
b7f5d000       8       -       -       - rw---    [ anon ]
bffee000      72       -       -       - rw---    [ stack ]
ffffe000       4       -       -       - -----    [ anon ]
-------- ------- ------- ------- -------
total kB    1700       -       -       -
[root@C44 ~]#

循环显示进程3066的设备格式的最后1行,间隔2秒,

[root@C44 ~]#  while true; do pmap -d  3066 | tail -1; sleep 2; done
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K
mapped: 5412K    writeable/private: 2028K    shared: 0K

(3)ps
如下例所示:
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  其中rsz是是实际内存
$ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle |  sort -nrk5
其中rsz为实际内存,上例实现按内存排序,由大到小

======================================
cat /proc/cpuinfo, /proc/meminfo
======================================
root@OpenWrt:/etc# cat /proc/meminfo
MemTotal:        2075484 kB
MemFree:         1973816 kB
Buffers:               0 kB
Cached:            46160 kB
SwapCached:            0 kB
Active:            41032 kB
Inactive:          18840 kB
Active(anon):      14228 kB
Inactive(anon):      264 kB
Active(file):      26804 kB
Inactive(file):    18576 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:       1318912 kB
HighFree:        1257656 kB
LowTotal:         756572 kB
LowFree:          716160 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         13712 kB
Mapped:             8524 kB
Shmem:               780 kB
Slab:              26024 kB
SReclaimable:      19176 kB
SUnreclaim:         6848 kB
KernelStack:        1104 kB
PageTables:         1268 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1037740 kB
Committed_AS:     433552 kB
VmallocTotal:     245760 kB
VmallocUsed:        3744 kB
VmallocChunk:     234168 kB

查看虚拟内存信息
root@OpenWrt:/etc# cat /proc/vmstat 
nr_free_pages 493360
nr_inactive_anon 66
nr_active_anon 3580
nr_inactive_file 4644
nr_active_file 6703
nr_unevictable 0
nr_mlock 0
nr_anon_pages 3457
nr_mapped 2131
nr_file_pages 11542
nr_dirty 0
nr_writeback 0
nr_slab_reclaimable 4796
nr_slab_unreclaimable 1731
nr_page_table_pages 323
nr_kernel_stack 154
nr_unstable 0
nr_bounce 0
nr_vmscan_write 0
nr_vmscan_immediate_reclaim 0
nr_writeback_temp 0
nr_isolated_anon 0
nr_isolated_file 0
nr_shmem 195
nr_dirtied 4280
nr_written 4280
nr_anon_transparent_hugepages 0
nr_free_cma 0
nr_dirty_threshold 33300
nr_dirty_background_threshold 16650

====================
telinit 或 init 区别
====================
首先需要说明的的是,telinit 是init 的一个软连接。当系统起来后,init进程会占用PID 1,init程序会在入口处判断PID,如果不是1,就退出init处理程序,转而调用telinit.
if (!isinit) exit(telinit(p, argc, argv));, 作者这么设计,也就是为了让用户少敲三个字母而已。
好了,下面转入正题
telinit 或 init 命令
用途
初始化并控制进程
语法
{ telinit |init } {0| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c |h | Q | q | S | s | M | m | N }
描述
init 命令初始化并控制进程。其首要任务是基于从文件 /etc/inittab 读入的记录启动进程。/etc/inittab 文件通常请求 init 命令在用户可登录的每一行上运行 getty 命令。init 命令控制系统所需的独立进程。
组成 init 命令的进程分派操作的主要进程是 /usr/sbin/getty。/usr/sbin/getty 进程启动单独终端行。其它典型地由init 命令分派的进程为守护进程和 shell。
链接到 init 命令的telinit 命令,指引init 命令的操作。telinit 命令引用单字符参数并通过kill 子例程发出init 命令从而执行适当的操作。
telinit 命令将系统设置在一特定的运行级别上。运行级别是允许仅选中的进程组存在的软件配置。系统可以在下列的运行级别之一上:
0-9 告知 init 命令将系统放置在 0-9 的其中一个运行级别上。当init 命令请求运行级别在0-9 中的更改时,它中止所有当前运行级别上的进程然后重新启动与新运行级别关联的任何进程。
0-1 预留给操作系统供将来使用。
2 包含运行在多用户环境之中的所有终端进程和守护进程。在多用户环境中,/etc/inittab 文件被设置,所以init 命令为系统的每一个终端创建一个进程。控制台设备驱动程序也被设置在所有运行级别上运行,因此系统仅能在活动的控制台上运行。
3-9 可根据用户的偏好定义。
S、s、M、m 告诉 init命令进入维护方式。当系统从另一运行级别进入维护方式,只有系统控制台被用作终端。
下列参数也作为 init 命令的伪指令:
a、b、c、h 告诉 init 命令只处理那些位于/etc/inittab 文件中,在运行级别字段中为 a、b、c 或h 的记录。这四个参数 a、b、c 和h 不是真正的运行级别。它们与运行级别的不同之处在于 init 命令无法要求整个系统进入运行级别a、b、c 或 h。
当 init 命令在/etc/inittab 文件中找到运行级别字段的值为 a、b、c 或h 的记录时,它会启动此进程。然而,它不会杀死处于当前运行级别的任何进程;除了已经运行在当前的系统运行级别的进程外,还会启动在运行级别字段中值为a、b、c 或h 的进程。真正的运行级别与 a、b、c 或h 的另一个区别在于以a、b、c 或h 开始的进程不会在 init 命令更改运行级别时停止。有三种方式停止a、b、c 或h 进程:
在 Action 字段中输入 off。
删除整个对象。
用 init命令进入维护状态。
Q,q 告诉 init 命令重新检查 /etc/inittab文件。
N 发送信号阻止进程被重新派生。
当系统启动时,当根文件系统已在预初始化过程之中安装,则发生下列事件序列:
init 命令作为启动过程的最后一步运行。
init 试图读/etc/inittab 文件。
如果 /etc/inittab 文件存在, init 命令试图定位 /etc/inittab文件中的一个 initdefault 条目。
如果 initdefault 条目存在,init 命令用指定的运行级别作为初始系统运行级别。
如果 initdefault 条目不存在,init 命令请求用户从系统控制台(/dev/console)输入一个运行级别。
如果用户输入了 S,s,M 或 m运行级别,init命令进入维护运行级别。这些是仅有的不要求正确格式的/etc/inittab 文件的运行级别。
如果 /etc/inittab 文件不存在,init 命令缺省将系统置于维护运行级别。
init 命令每 60 秒重读/etc/inittab 文件。如果 /etc/inittab 自从init 命令上次读取它时发生了改变,/etc/inittab文件中的新命令在系统启动时执行。
如请求 init 命令改变运行级别,init 命令读 /etc/inittab 文件以识别应当存在于新运行级别的进程。 然后,init 命令取消所有不应该运行在新级别上的进程,并启动所有应该运行在新级别上的进程。
在这些运行级别的每一级别上由 init 命令运行的进程定义在文件 /etc/inittab 之中。通过让 root 用户运行telinit 命令来改变运行级别,该命令链接到init 命令。该用户运行的init 命令向在系统启动时初始化的原始init 命令发送适当的信号。缺省运行级别可通过修改/etc/inittab 文件中 initdefault 项的运行级别来更改。
在维护运行级别, /dev/console 控制台终端对读写开放。提示输入 root 密码。当成功输入 root 用户密码时,su 被调用。有两种方法可以退出维护运行级别:
如果 shell 终止了,init 命令要求一个新的运行级别。

init(或telinit)命令可以用信号通知init 命令并强制其改变系统的运行级别。
在系统试图启动时,init 命令提示输入一个新运行级别(initdefault 为维护时)的明显失败的原因可能是终端控制台设备(/dev/console) 被转换到一个并非物理控制台的设备上。倘若如此,而您希望在物理控制台而非 /dev/console 上工作,可以通过按物理控制台设备上的 DEL(删除)键强制 init 命令转换到物理控制台。
当 init 命令提示输入一个新的运行级别,输入 0 到 9 中的任一位或以下任一字母 S、s、M 或m。如果输入的是 S 、s、M 或m,init命令以维护方式操作,其额外结果是:如果此前控制被强制转换到物理控制台,/dev/console 文件也被转换到该设备。init 命令生成一条消息到 /dev/console 文件事先已连接到的设备上。
如果您输入了 0 到 9 运行级别,init 命令进入相应的运行级别。init 命令拒绝任何其它输入并重新提示您输入正确值。 如果这是init 命令第一次进入任意运行级别而非维护级别,它搜索/etc/inittab 文件中的带boot 或 bootwait 关键字的条目。如果init 命令找到了这些关键字,它执行相应的任务,假如输入的运行级别与条目的运行级别相匹配的话。例如,如果init 命令找到 boot 关键字,它引导机器。系统的任意特定的初始化,诸如检测和安装文件系统,都发生在系统允许任何用户操作之前。然后init 命令扫描/etc/inittab 文件查找为该运行级别处理的所有条目。接着它继续 /etc/inittab 文件的正常处理。
运行级别 2 缺省定义为包含运行在多用户环境的所有终端进程和守护进程。在多用户环境中,/etc/inittab 文件被设置以使得init 命令为系统的每一终端创建进程。
对终端进程而言,shell 终止是因为一明确输入的文件结束符,或断开连接。当init 命令收到一个进程已中止的信号,它在 /etc/utmp 文件和 /var/adm/wtmp 文件之中记录该事实及其原因。/var/adm/wtmp 文件记录已启动的进程的历史。
要在 /etc/inittab 文件之中启动每一进程,init 命令等待其一后继过程停止,等待一电源故障信号 SIGPWR,或直到init 命令由init 或 telinit 命令发出以改变系统的运行级别。当上述三个条件之一发生时,init 命令重新检查/etc/inittab 文件。即使已经有新的条目添加到 /etc/inittab 文件,init 命令仍在等待三个条件之一的发生。为提供瞬时响应,请运行telinit -q 命令来重新检查/etc/inittab 文件。
如果 init 命令发现其连续在文件 /etc/inittab 中运行一个条目( 225 秒内超过 5 次),它假定在条目命令字符串中存在一个错误。然后它打印一个出错信息到控制台,并在系统出错日志中记录一个错误。发送该消息后,60 秒内该条目不运行。如果该错误继续发生,该命令将每 240 秒仅重新生成该条目 5 次。init 命令继续假定出错,直到该命令在时间间隔内 5 次不响应,或直到其收到一个用户的信号。init 命令仅在错误第一次出现时记录该错误。
当 telinit 命令请求init 命令改变运行级别,init 命令向当前运行级别内未定义的所有进程发送一个 SIGTERM信号。在以信号 SIGKILL 中止这些进程前,init 命令等待 20 秒。
如果 init 命令收到一个SIGPWR 信号,且不在维护方式下,它扫描 /etc/inittab 文件查找特定的电源故障条目。在任何其它进一步的进程运行之前,init 命令调用与这些条目关联的任务(如果运行级别允许的话)。按这个方法,无论何时系统遇到电源故障,init 命令都可以执行 清除和记录功能。需要注意的是,这些电源故障条目不应该使用最先初始化的设备。
环境
因为 init 命令是系统每个进程的终极祖先,系统的每一其它进程继承该init 命令的环境变量。作为其初始化序列的一部分,init 命令读/etc/environment 文件,并将该文件中发现的任一赋值复制到传递给其所有子进程的环境中。因为init 子进程在注册会话中不运行,它们不继承init 命令的 umask 设置。这些进程可以设置 umask 为任意它们所需要的值。/etc/inittab 文件中的由init 执行的命令使用init 的 ulimit 值而非 /etc/security/limits 中所给出的缺省值。结果为由命令行成功执行的命令在由init 调用时可能执行不正确。任何有特殊 ulimit 需要的命令应包含特定的操作以设置为所需要的ulimit 值。
示例
要请求 init 命令重新检查/etc/inittab 文件,输入:
telinit  q
要请求 init 命令进入维护方式,输入:
telinit  s

===========================
ldconfig详解  
===========================
ldconfig - configure dynamic linker run-time bindings

1)添入/etc/ld.so.conf, 然后执行 /sbin/ldconfig
2)安装完后,ubuntu需要加载库的路径,修改文件/etc/ld.so.conf,在文件后增加安装的库路径:/usr/local./lib;
  然后使用root权限,加载库路径:sudo ldconfig。
ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig
ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.
ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.
ldconfig命令行用法如下:
ldconfig [-v|--verbose] [-n] [-N] [-X] [-f CONF] [-C CACHE] [-r ROOT] [-l] [-p|--print-cache] [-c FORMAT] [--format=FORMAT] [-V] [-?|--help|--usage] path...
ldconfig可用的选项说明如下:
(1) -v或--verbose : 用此选项时,ldconfig将显示正在扫描的目录及搜索到的动态链接库,还有它所创建的连接的名字.
(2) -n : 用此选项时,ldconfig仅扫描命令行指定的目录,不扫描默认目录(/lib,/usr/lib),也不扫描配置文件/etc/ld.so.conf所列的目录.
(3) -N : 此选项指示ldconfig不重建缓存文件(/etc/ld.so.cache).若未用-X选项,ldconfig照常更新文件的连接.
(4) -X : 此选项指示ldconfig不更新文件的连接.若未用-N选项,则缓存文件正常更新.
(5) -f CONF : 此选项指定动态链接库的配置文件为CONF,系统默认为/etc/ld.so.conf.
(6) -C CACHE : 此选项指定生成的缓存文件为CACHE,系统默认的是/etc/ld.so.cache,此文件存放已排好序的可共享的动态链接库的列表.
(7) -r ROOT : 此选项改变应用程序的根目录为ROOT(是调用chroot函数实现的).选择此项时,系统默认的配置文件/etc/ld.so.conf,实际对应的为 ROOT/etc/ld.so.conf.如用-r /usr/zzz时,打开配置文件/etc/ld.so.conf时,实际打开的是/usr/zzz/etc/ld.so.conf文件.用此选项,可以大大增加动态链接库管理的灵活性.
(8) -l : 通常情况下,ldconfig搜索动态链接库时将自动建立动态链接库的连接.选择此项时,将进入专家模式,需要手工设置连接.一般用户不用此项.
(9) -p或--print-cache : 此选项指示ldconfig打印出当前缓存文件所保存的所有共享库的名字.
(10) -c FORMAT 或 --format=FORMAT : 此选项用于指定缓存文件所使用的格式,共有三种:old(老格式),new(新格式)和com

NAME
 ldconfig - configure dynamic linker run-time bindings
  
SYNOPSIS
 ldconfig [OPTION...]
  
DESCRIPTION
 ldconfig creates the necessary links and cache (for use by the run-time linker, ld.so) to the most recent shared libraries found in the directories specified on the command line, in the file /etc/ld.so.conf, and in the trusted directories (/usr/lib and /lib). ldconfig checks the header and file names of the libraries it encounters when determining which versions should have their links updated. ldconfig ignores symbolic links when scanning for libraries.
 ldconfig will attempt to deduce the type of ELF libs (ie. libc 5.x or libc 6.x (glibc)) based on what C libraries if any the library was linked against, therefore when making dynamic libraries, it is wise to explicitly link against libc (use -lc). ldconfig is capable of storing multiple ABI types of libraries into a single cache on architectures which allow native running of multiple ABIs, like ia32/ia64/x86_64 or sparc32/sparc64.
 Some existing libs do not contain enough information to allow the deduction of their type, therefore the /etc/ld.so.conf file format allows the specification of an expected type. This is only used for those ELF libs which we can not work out. The format is like this "dirname=TYPE", where type can be libc4, libc5 or libc6. (This syntax also works on the command line). Spaces are not allowed. Also see the -p option.
 Directory names containing an = are no longer legal unless they also have an expected type specifier.
 ldconfig should normally be run by the super-user as it may require write permission on some root owned directories and files. If you use -r option to change the root directory, you don&apos;t have to be super-user though as long as you have sufficient right to that directory tree.
  
OPTIONS
 -v --verbose
Verbose mode. Print current version number, the name of each directory as it is scanned and any links that are created.
 -n
Only process directories specified on the command line. Don&apos;t process the trusted directories (/usr/lib and /lib) nor those specified in /etc/ld.so.conf. Implies -N.
 -N
Don&apos;t rebuild the cache. Unless -X is also specified, links are still updated.
 -X
Don&apos;t update links. Unless -N is also specified, the cache is still rebuilt.
 -f conf
Use conf instead of /etc/ld.so.conf.
 -C cache
Use cache instead of /etc/ld.so.cache.
 -r root
Change to and use root as the root directory.
 -l
Library mode. Manually link individual libraries. Intended for use by experts only.
 -p --print-cache
Print the lists of directories and candidate libraries stored in the current cache.
 -c --format=FORMAT
Use FORMAT for the cache file. Choices are old, new and compat (the default).
 -? --help --usage
Print usage information.
 -V --version
Print version and exit.
  
EXAMPLES
 # /sbin/ldconfig -v
will set up the correct links for the shared binaries and rebuild the cache.
 # /sbin/ldconfig -n /lib
as root after the installation of a new shared library will properly update the shared library symbolic links in /lib.

===============================
umask  --- user's mask
ulimit --- user's limit
===============================
umask [-p] [-S] [mode]
              The  user  file-creation mask is set to mode.  If mode begins with a digit, it is interpreted as an octal number; otherwise it
              is interpreted as a symbolic mode mask similar to that accepted by chmod(1).  If mode is omitted, the  current  value  of  the
              mask is printed.  The -S option causes the mask to be printed in symbolic form; the default output is an octal number.  If the
              -p option is supplied, and mode is omitted, the output is in a form that may be reused as input.  The return status  is  0  if
              the mode was successfully changed or if no mode argument was supplied, and false otherwise.
              
limit [-HSTabcdefilmnpqrstuvx [limit]]
              Provides control over the resources available to the shell and to processes started by it, on systems that allow such control.
              The -H and -S options specify that the hard or soft limit is set for the given resource.  A hard limit cannot be increased  by
              a  non-root  user  once  it  is set; a soft limit may be increased up to the value of the hard limit.  If neither -H nor -S is
              specified, both the soft and hard limits are set.  The value of limit can be a number in the unit specified for  the  resource
              or  one of the special values hard, soft, or unlimited, which stand for the current hard limit, the current soft limit, and no
              limit, respectively.  If limit is omitted, the current value of the soft limit of the  resource  is  printed,  unless  the  -H
              option  is  given.   When  more  than  one resource is specified, the limit name and unit are printed before the value.  Other
              options are interpreted as follows:
              -a     All current limits are reported
              -b     The maximum socket buffer size
              -c     The maximum size of core files created
              -d     The maximum size of a process’s data segment
              -e     The maximum scheduling priority ("nice")
              -f     The maximum size of files written by the shell and its children
              -i     The maximum number of pending signals
              -l     The maximum size that may be locked into memory
              -m     The maximum resident set size (many systems do not honor this limit)
              -n     The maximum number of open file descriptors (most systems do not allow this value to be set)
              -p     The pipe size in 512-byte blocks (this may not be set)
              -q     The maximum number of bytes in POSIX message queues
              -r     The maximum real-time scheduling priority
              -s     The maximum stack size
              -t     The maximum amount of cpu time in seconds
              -u     The maximum number of processes available to a single user
              -v     The maximum amount of virtual memory available to the shell
              -x     The maximum number of file locks
              -T     The maximum number of threads

If limit is given, it is the new value of the specified resource (the -a option is display only).  If no option is given, then
              -f  is  assumed.   Values  are  in 1024-byte increments, except for -t, which is in seconds, -p, which is in units of 512-byte
              blocks, and -T, -b, -n, and -u, which are unscaled values.  The return status is 0 unless an invalid  option  or  argument  is
              supplied, or an error occurs while setting a new limit.

一、默认权限与umask设置
umask        是通过八进制数值定义用户创建文件或目录的默认权限。umask表示的是禁止权限。不过文件和目录有点不同。对于文件来说,umask的设置是在假定文件拥有八进制666权限上进行的,文件的权限就是666减去umask的掩码数值;对于目录来说,umask 的设置是在假定文件拥有八进制777权限上进行,目录八进制权限777减去umask 的掩码数值。
范例:
jinsuo@jinsuo-desktop:~$ umask 066
jinsuo@jinsuo-desktop:~$ mkdir tsmk1
jinsuo@jinsuo-desktop:~$ ls -l
drwx--x--x  2 jinsuo jinsuo    4096 2010-05-07 09:25 tsmk1

说明:
umask 一般都是存放在用户相关Shell的配置文件中,比如用户目录下的 .bashrc 或 .profile ,也可以放在全局性的用户配置文件中,还可以放在Shell 全局配置文件中,比如/etc/profile 。 umask 放在相关的配置文件中,目的是当管理员创建用户时,系统会自动为用户创建的文件或目录配置默认的权限代码。

二 、ulimit的使用
ulimit命令用来限制进程对某类资源的使用。limit命令对资源的限制分为二类:
硬限制在整个系统内对资源的限制,只能由root用户修改。
软限制对新创建进程的默认的限制,可增加到系统范围内的硬限制。

ulimit用于shell启动进程所占用的资源,是shell内建命令
语法格式:
ulimit [-acdfHlmnpsStvw] [size]
参数介绍:
-H 设置硬件资源限。
-S 设置软件资源限制。
-a 显示当前所有的资源限制。
-c size:设置core文件的最大值。单位:blocks
-d size:设置数据段的最大值。单位:kbytes
-f size:设置创建文件的最大值。单位:blocks
-l size:设置在内存中锁定进程的最大值。单位:kbytes
-m size:设置可以使用的常驻内存的最大值。单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值。单位:n
-p size:设置管道缓冲区的最大值。单位:kbytes
-s size:设置堆栈的最大值。单位:kbytes
-t size:设置CPU使用时间的最大上限。单位:seconds
-v size:设置虚拟内存的最大值。单位:kbytes 。

-a显示软限制
-Ha显示硬限制

如:ulimit -t 60用户想把CPU时间限制为每个进程60秒)

linux修改ulimit应该注意的
如果你碰到类似的错误提示
ulimit: max user processes: cannot modify limit: 不允许的操作
ulimit: open files: cannot modify limit: 不允许的操作

为啥root用户是可以的?普通用户又会遇到这样的问题?
看一下/etc/security/limits.conf大概就会明白。
linux对用户有默认的ulimit限制,而这个文件可以配置用户的硬配置和软配置,硬配置是个上限。
超出上限的修改就会出“不允许的操作”这样的错误。

在limits.conf加上
*        soft    noproc  10240
*        hard    noproc  10240
*        soft    nofile  10240
*        hard    nofile  10240
就是限制了任意用户的最大线程数(noproc)和文件数(nofile)为10240

==================================
SElinux以及防火墙的关闭
==================================
iptables用于设置防火墙(firewall), 即管理内外通信。
SELinux主要用于对文件(file), 文件夹 (directory), 过程(process)的限制。

关闭SELinux的方法:
1.修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
2.如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式 
在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux

查看selinux状态:
/usr/bin/setstatus -v 
如下:
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted 
  
getenforce/setenforce  查看和设置SELinux的当前工作模式。
SELinux相关的工具
/usr/bin/setenforce 修改SELinux的实时运行模式
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式

如果要彻底禁用SELinux 需要在/etc/sysconfig/selinux中设置参数selinux=0 ,或者在/etc/grub.conf中添加这个参数
在启动的时候,也可以通过传递参数selinux给内核来控制它。(Fedora 5默认是有效)
kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet selinux=0

察看系统的状态,以下是运行输出,请参考
/usr/bin/setstatus -v
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Policy version: 18

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
#SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
SELINUX有「disabled」「permissive」,「enforcing」3种选择。

三种选项的说明:
Disabled就不用说了
permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用。相当于Debug模式。
Enforcing就是你违反了策略,你就无法继续操作下去。

Linux关闭防火墙
1)重启后永久性生效:
  开启: chkconfig iptables on
  关闭: chkconfig iptables off
2)即时生效,重启后失效:
  开启: service iptables start
  关闭: service iptables stop

3).清除Linux防火墙:iptables -F     service iptables stop

需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。
在开启了防火墙时,做如下设置,开启相关端口,
修改/etc/sysconfig/iptables 文件,添加以下内容:
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
  -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
或者:
  /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着。
  /etc/rc.d/init.d/iptables stop 关闭防火墙
    
建议的关闭防火墙命令是
  iptables -P INPUT ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT ACCEPT
  iptables -F
注:
fedora下:
  /etc/init.d/iptables stop

ubuntu下,由于UBUNTU没有相关的直接命令,请用如下命令:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
暂时开放所有端口
Ubuntu上没有关闭iptables的命令

====================================================
linux之cp/scp命令详解  
====================================================

==========================
名称:cp
==========================
使用权限:所有使用者
使用方式:
cp [options] source dest
cp [options] source... directory
说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。
把计
-a 尽可能将档案状态、权限等资料都照原状予以复制。
-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。
-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。
范例:
将档案 aaa 复制(已存在),并命名为 bbb :
cp aaa bbb
将所有的C语言程式拷贝至 Finished 子目录中 :
cp *.c Finished

==========================
命令:scp
==========================
不同的Linux之间copy文件常用有3种方法:
第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy。
第二种方法就是采用samba服务,类似Windows文件copy 的方式来操作,比较简洁方便。
第三种就是利用scp命令来进行文件复制。
    scp是有Security的文件copy,基于ssh登录。操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。
    scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root
    然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了。
    如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。
    scp root@172.19.2.75:/home/root/full.tar.gz home/daisy/full.tar.gz

==================================================== 
scp命令:
linux的scp命令可以在linux之间复制文件和目录;  
====================================================
scp 可以在 2个 linux 主机间复制文件; 
命令基本格式: 
       scp [可选参数] file_source file_target 
       
======================== 
从本地复制到远程 
======================== 
* 复制文件: 
        * 命令格式: 
                scp local_file remote_username@remote_ip:remote_folder 
                或者 
                scp local_file remote_username@remote_ip:remote_file 
                或者 
                scp local_file remote_ip:remote_folder 
                或者 
                scp local_file remote_ip:remote_file 
                第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名; 
                第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名; 
        * 例子: 
                scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music 
                scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3 
                scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music 
                scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3 
* 复制目录: 
        * 命令格式: 
                scp -r local_folder remote_username@remote_ip:remote_folder 
                或者 
                scp -r local_folder remote_ip:remote_folder 
                第1个指定了用户名,命令执行后需要再输入密码; 
                第2个没有指定用户名,命令执行后需要输入用户名和密码; 
        * 例子: 
                scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/ 
                scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/ 
                上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录 
======================== 
从远程复制到本地 
========================
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可; 
例如: 
        scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3 
        scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/
最简单的应用如下 : 
scp 本地用户名@IP地址 文件名1 远程用户名@IP地址 文件名 2

[本地用户名@IP地址] 可以不输入 , 可能需要输入远程用户名所对应的密码 . 
可能有用的几个参数 : 
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 . 
-C 使能压缩选项 . 
-P 选择端口 . 注意 -p 已经被 rcp 使用 . 
-4 强行使用 IPV4 地址 . 
-6 强行使用 IPV6 地址 .
 
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

============================================
linux脚本:2>&1  
============================================
0 标准输入  
1 标准输出
2 标准错误输出
标准输入(standard input)的文件描述符是 0
标准输出(standard output)是 1
标准错误(standard error)是 2

&0 表示文件描述符0
&1 表示文件描述符1
&2 表示文件描述符2

ommand >out.file 2>&1 & 命令的解释:
command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。
2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。
最后一个&,是让该命令在后台执行。
试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.
你可以用ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。

--------------------------
为何2>&1要写在后面?
--------------------------
     command > file 2>&1
首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,
也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

command 2>&1 >file
2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。
用strace可以看到:
1. command > file 2>&1
    这个命令中实现重定向的关键系统调用序列是:
    open(file) == 3
    dup2(3,1)    1复制3的行为
    dup2(1,2)    2复制1的行为
2. command 2>&1 >file
    这个命令中实现重定向的关键系统调用序列是:
    dup2(1,2)    1复制2的行为
    open(file) == 3
    dup2(3,1)    3复制1的行为
  可以考虑一下不同的dup2()调用序列会产生怎样的文件共享结构。请参考APUE 3.10, 3.12

>和>>都是重定向输出
1> 指标准信息输出路径(也就是默认的输出方式)
2> 指错误信息输出路径
2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)

补充问题4<&0:
<和<<都是重定向输入
<0指标准输入路径
4<&0 指的是将文件描述符4指定为标准输入(实际可选4到9之间任意一个数字)

1. 标准输入的控制
语法:"命令 < 文件" 将文件做为命令的输入。
例如:
mail -s “mail test” wesongzhou@hotmail.com < file1 将文件file1 当做信件的内容,主
题名称为mail test,送给收信人。

2. 标准输出的控制
语法:"命令 > 文件" 将命令的执行结果(命令执行结果)送至指定的文件中。
例如:
ls -l > list 将执行“ls -l” 命令的结果写入文件list 中。

语法:"命令 >! 文件" 将命令的执行结果(命令执行结果)送至指定的文件中,若文件已经存在,则覆盖。
例如:
ls -lg >! list 将执行“ls - lg” 命令的结果覆盖写入文件list 中。

语法:"命令 >& 文件" 将命令执行时屏幕上所产生的任何信息(屏幕的任何信息)写入指定的文件中。
例如:
cc file1.c >& error 将编译file1.c 文件时所产生的任何信息(屏幕的任何信息)写入文件error 中。

语法:"命令 >> 文件" 将命令执行的结果(命令执行结果)附加到指定的文件中。
例如:
ls - lag >> list 将执行“ls - lag” 命令的结果附加到文件list 中。

语法:"命令 >>& 文件" 将命令执行时屏幕上所产生的任何信息(屏幕的任何信息)附加到指定的文件中。
例如:
cc file2.c >>& error 将编译file2.c 文件时屏幕所产生的任何信息附加到文件error 中。

"关于输入、输出和错误输出":
在字符终端环境中,标准输入/标准输出的概念很好理解。输入即指对一个应用程序或命令的输入,无论是从键盘输入还是从别的文件输入;输出即指应用程序或命令产生的一些信息;与 Windows 系统下不同的是,Linux 系统下还有一个标准错误输出的概念,这个概念主要是为程序调试和系统维护目的而设置的,错误输出与标准输出分开可以让一些高级的错误信息不干扰正常的输出信息,从而方便一般用户的使用。在 Linux 系统中:标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕(上面的 std 表示 standard)。在 BASH 中使用这些概念时一般将标准输出表示为 1,将标准错误输出表示为 2。下面我们举例来说明如何使用他们,特别是标准输出和标准错误输出。
输入、输出及标准错误输出主要用于 I/O 的重定向,就是说需要改变他们的默认设置。

先看这个例子:
$ ls > ls_result
$ ls -l >> ls_result
上面这两个命令分别将 ls 命令的结果输出重定向到 ls_result 文件中和追加到 ls_result 文件中,而不是输出到屏幕上。">"就是输出(标准输出和标准错误输出)重定向的代表符号,连续两个 ">" 符号,即 ">>" 则表示不清除原来的而追加输出。

下面再来看一个稍微复杂的例子:
$ find /home -name lost* 2> err_result
这个命令在 ">" 符号之前多了一个 "2","2>" 表示将标准错误输出重定向。由于 /home 目录下有些目录由于权限限制不能访问,因此会产生一些标准错误输出被存放在 err_result 文件中。大家可以设想一下 find /home -name lost* 2>>err_result 命令会产生什么结果?

如果直接执行 find /home -name lost* > all_result ,其结果是只有标准输出被存入 all_result 文件中,要想让标准错误输出和标准输出一样都被存入到文件中,那该怎么办呢?

看下面这个例子:
$ find /home -name lost* > all_result 2>& 1
上面这个例子中将首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到 all_result 这个文件中。这样我们就可以将所有的输出都存储到文件中了。

为实现上述功能,还有一种简便的写法如下:
$ find /home -name lost* >& all_result

如果那些出错信息并不重要,下面这个命令可以让你避开众多无用出错信息的干扰:
$ find /home -name lost* 2> /dev/null

同学们回去后还可以再试验一下如下几种重定向方式,看看会出什么结果,为什么?
$ find /home -name lost* > all_result 1>& 2
$ find /home -name lost* 2> all_result 1>& 2
$ find /home -name lost* 2>& 1 > all_result

另外一个非常有用的重定向操作符是 "-",请看下面这个例子:
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)

该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。

下面还几种不常见的用法:
n<&- 表示将 n 号输入关闭
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭

今天一个朋友去参加了腾讯的招聘会,和他谈起招聘试题时,看到了这么一个题目:请解释 2 >& 1。
相信Linux 脚本编程的大虾们,一定知道这种用法。但是我却只知道 2 > 1的意思,不明白加上&号后是什么意思。这可不好,这可是面试题,说不定以后找工作面试的时候碰到呢?
于是决定搞定它,下面是Google后整理的资料,和大家分享下。
1、相关知识
        1)默认地标准的输入为键盘,但是也可以来自文件或管道(pipe |)。
        2)默认地标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes `)。
        3) 默认地标准的错误输出到终端,但是也可以重定向到文件。
        4)标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示。
        5)其实除了以上常用的3中文件描述符,还有3~9也可以作为文件描述符。3~9你可以认为是执行某个地方的文件描述符,常被用来作为临时的中间描述符。

2、解决2 >& 1
shell中可能经常能看到:>/dev/null 2>&1 
分解这个组合:“>/dev/null 2>&1” 为五部分。
            1:> 代表重定向到哪里,例如:echo '123' > /home/123.txt
            2:/dev/null 代表空设备文件
            3:2> 表示重定向stderr标准错误
            4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1       ---------重要------------ 好像不太对。
            5:1 表示stdout标准输出,系统默认值是1,所以'>/dev/null'等同于 '1>/dev/null'
                因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”
                那么>/dev/null 2>&1语句执行过程为:
                1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
                2>&1 :接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

---------重要------------                
说清楚了吗,大家理解下吧!顺便对比述说下这么用的好处!在Linux下最常用的方式有两种:
    command > file 2>file  与command > file 2>&1
它们有什么不同的地方吗?
首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中。command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。

3、扩展一下
另外一个非常有用的重定向操作符是 '-',请看下面这个例子:
     $ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
 该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到/dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。

下面还几种不常见的用法:
n<&- 表示将 n 号输入关闭
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭

=======================================
如何查看Linux是32bit还是64bit
=======================================
$su - root
#file /sbin/init
/sbin/init: ELF ;32-bit; LSB executable, Intel 80386......
即是32位的 linux, 如是64位的, 显示的是 64-bit

===================================================
Linux:ldd命令介绍及使用方法-打印共享库的依赖关系
===================================================
1、首先ldd不是一个可执行程序,而只是一个shell脚本

2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE等。当LD_TRACE_LOADED_OBJECTS环境变量不为空时,任何可执行程序在运行时,它都会只显示模块的dependency,而程序并不真正执行。要不你可以在shell终端测试一下,如下:
  (1) export LD_TRACE_LOADED_OBJECTS=1
  (2) 再执行任何的程序,如ls等,看看程序的运行结果

3、ldd显示可执行模块的dependency的工作原理,其实质是通过ld-linux.so(elf动态库的装载器)来实现的。我们知道,ld-linux.so模块会先于executable模块程序工作,并获得控制权,因此当上述的那些环境变量被设置时,ld-linux.so选择了显示可执行模块的dependency。

4、实际上可以直接执行ld-linux.so模块,如:/lib/ld-linux.so.2 --list program(这相当于ldd program)ldd命令使用方法(摘自ldd --help)
  名称 ldd 打印共享库的依赖关系
  大纲 ldd [选项]... 文件...
  描述 ldd 输出在命令行上指定的每个程序或共享库需要的共享库。
  选项
  --version
  打印ldd的版本号
  -v --verbose
  打印所有信息,例如包括符号的版本信息
  -d --data-relocs
  执行符号重部署,并报告缺少的目标对象(只对ELF格式适用)
  -r --function-relocs
  对目标对象和函数执行重新部署,并报告缺少的目标对象和函数(只对ELF格式适用)
  --help 用法信息
  ldd的标准版本与glibc2一起提供。Libc5与老版本以前提供,在一些系统中还存在。在libc5版本中长选项不支持。另一方面,glibc2版本不支持-V选项,只提供等价的--version选项。
  如果命令行中给定的库名字包含'/',这个程序的libc5版本将使用它作为库名字;否则它将在标准位置搜索库。运行一个当前目录下的共享库,加前缀"./"。
  ldd不能工作在a.out格式的共享库上。
  ldd不能工作在一些非常老的a.out程序上,这些程序在支持ldd的编译器发行前已经创建。如果你在这种类型的程序上使用ldd,程序将尝试argc = 0的运行方式,其结果不可预知。

======================================
LVM命令---快速参考
物理卷命令
======================================
pvcreate    创建LVM磁盘(即物理卷)
pvdisplay   显示卷组中的物理卷信息
pvchange   设置PV的性能,允许或拒绝从这个磁盘上分配置另外的PE。
pvmove    在一个卷组中从源到目的移动已经分配的PE
 
卷组命令
 
vgcreate    创建卷组
vgdisplay   显示卷组的信息
vgchange   激活或者撤消卷组,允许卷组使用或不使用quorum来挂载
vgextend    通过添加磁盘扩充卷组
vgreduce   删除磁盘来缩减卷组,vgscan 扫描所有磁盘寻找卷组
vgsync     同步镜像
remove     删除卷组
vgexport   从系统中删除一个卷组,但不修改在基于物理卷的信息
vgimport   通过扫描使用vgexport命令输出的物理卷在系统中增加一个
卷组
Vgcfgbackup  保存卷组的配置信息,记住一个卷组有一个或多个物理卷组成
vgcfgrestore  恢复卷的配置信息
 
逻辑卷命令
 
lvcreate   生成逻辑卷
lvdisplay  显示逻辑卷的信息
lvchange   改变逻辑卷的特性,包括可用性、调度策略、权限、块重定
位、分配策略、镜像缓存的可用性lvextend  增加逻辑卷的空间
extendfs  扩展文件系统的大小
lvreduce  减少逻辑卷的空间
lvremove  删除逻辑卷
lvsplit   分割镱像的逻辑卷
lvmerge   合并lvsplit过的逻辑卷
lvsync    同步逻辑卷
lvmmigrate 在一个分区中为逻辑卷迁移准备一个ROOT文件
lvlnboot   用来建立root,primary swap,or dump逻辑卷
lvlnboot   删除lvlnboot建立的逻辑卷

修改卷组
 
vgextend 例子
 
1.创建PV
 # pvcreate/dev/rdsk/c0t0d0
 # pvcreate/dev/rdsk/c0t5d0
2.增加pv到vg中
 #vgextend/dev/vg01 /dev/dsk/c0t4d0
3.使用下面命令验证卷组包含的磁盘
 #vgdisplay /dev/vg01
  可以看到磁盘在这个标头下
 ---Physical Volumes-----
 vgreduce 
  可以使用vgreduce来从卷组中删除磁盘。但是必须首先删除其上的逻 
 辑的卷,无论任何时候从root卷组中增加或删除磁盘,如果它没被设置为自动运行,都必须使用
Lvlnboot命令去更新卷组启盘存领教的启  动数据。
  vgremove 
  如果要将一个卷组删除,那么可以使用vgremove命令。vgremove仅删除一个被vgreduce命减少为一个物理卷的卷组,这个可以通过vgdisplay命令看到,检查这两行
   curpv 1
   actpv 1
如果两个值互不相同,就不能删除卷组。如果cur pv的值比较高,但在/etc/lvmtab和vgdisplay -v 的输出中卷组只有一个物理卷,将不能对它进行删除。除非这些丢失的PV被执行vgcfgrestore,如果不这样做,那么唯一的办法就是进行vgvexport---这个最有效的。
增加逻辑卷的大小
可以使用lvextend命令增加逻辑的大小,也可以在特定的磁盘上指定你想要增加的磁盘空间,或者让LVM决定它的分布。
  假定想增加逻辑卷/dev/vg01/lvol4到200M,目前大小是100M
  #lvextend -L 200/dev/vg01/lvol4
扩展逻辑卷到特定磁盘上
 假定卷组中有多个磁盘并且其中两个是同一型号,你想扩展一个磁盘上的一个275M的逻辑卷到400M,同时你想确保增量被分配在同型号的另一个磁盘上。
 #lvextend -L 400 /dev/vg01/lvol4 
 扩展文件系统
 文件系统的容量增长与所在逻辑卷的增长一致,使用extendfs命令增加。extendfs 读取当前的超块来找出妆前的文件系统格式,然后使用这些信息去生志逻辑卷所需要的术面组。一旦这些操作完成将会用新的信息更新超块,extendfs要求使用字符设备文件。
  #extendfs /dev/vg01/rlvol4
指定mount点。
运行bdf 查看增加的容量。
====注:extendfs 被执行前必须umount文件系统=====
 
使用lvreduce命令来减少空间
 
注:减少逻辑卷的大小将会因为空间的回收而丢失数据,若事先没有进行备份。不要使用newfs命令减少文件系统的大小。
减少逻辑卷的大小
假定有80M的逻辑卷,你不再需要其中的数据,并且其它的应用也只需要40M的空间。
#lvreduce -L 40/dev/vg03/lvol4
在磁盘间移动逻辑卷中的数据
在一个卷组中,可以使用pvmove命令将包含在一个逻辑卷中的数据从一个磁盘移动到另一个磁盘上。
例:你可移动一个逻辑卷上的数据从一个磁盘到另外一个磁盘上,而将第一个磁盘上的空间用作它用。并且,能够移动所有的数据库从一个盘到另外一个,例如你想从卷组中删除一个盘,你就可以这么做,当将磁盘上的逻辑数据删除后,就可以从卷组中删除这个磁盘。
例:
移动逻辑卷的数据从其中一个盘到另外一盘
假如你想把逻辑卷/dev/vg01/markets中的数据从/dev/dsk/c0t3d0到
/dev/dsk/c0t4d0
注:当发出这个命令时你必须使用-n 标志在源磁盘上指定那个逻辑卷,也必须在命令行首先指定源磁盘
例如:
#pvmove -n/dev/vg01/markets /dev/dsk/c0t3d0 /dev/dks/c0t4d0
移动一个盘上的所有数据到另外一盘
如:#pvmove /dev/dsk/c0t4d0 /dev/dsk/c0t5d0
删除逻辑卷---如要删除数据加-f
#lvremove /dev/vg3/lv012
创建一个启动盘
1)pvcreate -B
2)vgextend
3)mkboot
如:
在root卷组中创建启动盘
在两种特殊的情况下创建可启盘是很有用的
 
1)为root逻辑卷做镜像
2)创建新的root 逻辑卷
 增加一个可启动磁盘到root卷组中
1)pvcreate -B 生成物理卷
2)vgextend 增加磁盘到卷组中
3)使用mkboot将(lif)放在启动区中
4)使用mkboot -a命令修改lif 区中的auto文件

----------------------------
Linux的syslog.conf文件解读          
----------------------------
1.日志文件由系统日志和内核日志监控程序syslogd(syslog daemon) 与klogd(kernel daemon) 控制, 
在/etc/syslog.conf 文件中配置这两个监控程序默认活动。
/etc/syslog.conf文件是Linux日记系统的配置文件。ubuntu(Debian)下为/etc/rsyslog.conf:
日志文件按/etc/syslog.conf 配置文件中的描述进行组织。下图是/etc/syslog.conf 文件的内容:
[root@localhost ~]# cat /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.
authpriv.* /var/log/secure

# Log all the mail messages in one place.
mail.* -/var/log/maillog

# Log cron stuff
cron.* /var/log/cron

# Everybody gets emergency messages
*.emerg *

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log
local7.* /var/log/boot.log

syslog.conf 行的基本语法是: 
[ 消息类型] [ 处理方案] 
注意:中间的分隔符必须是Tab 字符

(1).消息类型是由" 消息来源" 和" 紧急程度" 构成,中间用点号连接。
例如上图中,news.crit 表示来自news 的“ 关键” 状况。在这里,news 是消息来源,crit 代表关键状况。通配符* 可以代表一切消息来源。

说明:
第一条语句*.info ,将info 级以上(notice,warning,err,crit,alert 与emerg )的所有消息发送到相应日志文件。
日志文件类别(按重要程度分类)日志文件可以分成八大类,下面按重要性从大到下列出:
emerg  emergency , 紧急
alert ,             警报
crit  critical ,   关键
errerror ,          错误
warning             警告
notice               通知
info                信息
debug               调试
none                 不输出任何消息

(2).处理方案
" 处理方案" 选项可以对日志进行处理。可以把它存入硬盘,转发到另一台机器或显示在管理员的终端上。
处理方案一览:
文件名  写入某个文件,要注意绝对路径。 
@ 主机名 转发给另外一台主机的syslogd 程序。
@IP 地址 同上,只是用IP 地址标识而已。
/dev/console 发送到本地机器屏幕上。
* 发送到所有用户的终端上。 
| 程序 通过管道转发给某个程序。
例如:
kern.emerg /dev/console( 一旦发生内核的紧急状况,立刻把信息显示在控制台上)

说明: 
如果想修改syslogd 的记录文件,首先你必须杀掉syslogd 进程,在修改完毕后再启动syslogd 。攻击者进入系统后通常立刻修改系统日志,因 此作为网管你应该用一台机器专门处理日志信息,其他机器的日志自动转发到它上面,这样日志信息一旦产生就立刻被转移,这样就可以正确记录攻击者的行为,将日志文件记录到远程主机 ,远程主机就是我们本文要配置的syslog 服务器。

2.syslog服务器配置实践步骤
例如: 10.0.0.1 为syslog 服务器 10.0.0.2 为客户机 
步骤: 
1). 服务端配置 
vi /etc/sysconfig/syslog 
    sysLOGD_OPTIONS = “-r –m 0” ## -r 意思是接受远程的日志 
    重起syslog 服务 /etc/rc.d/init.d/syslog restart 
2). 客户端配置 
    vi /etc/syslog.conf 
    在消息去向处添加 @10.0.0.1 
    例如:*.info;mail.none;authpriv.none;cron.none @10.0.0.1
    存盘退出重起服务 
        /etc/rc.d/init.d/syslog restart 
    ( 知识点:直接查看日志尾部: tail /var/log/messages 或者tail /var/log/boot 这样就可以看到syslog 重起)

注意:日志服务使用的端口是:514/udp syslog 服务器应该打开这个端口
syslog 日志服务器端不能根据源地址过滤,为了防止外网向日志服务器写垃圾信息要在网络拓扑中解决,网关上做限制外网访问514 端口。
如果服务器比较多的话,这样形成的日志比较大,要做好日志的分析

declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
----------------------------
tail命令
----------------------------
root@OpenWrt:/tmp# tail --help
BusyBox v1.19.4 (2013-08-21 23:32:15 CST) multi-call binary.

Usage: tail [OPTIONS] [FILE]...

Print last 10 lines of each FILE (or stdin) to stdout.
With more than one FILE, precede each with a filename header.

-f Print data as file grows            *******非常有用
-s SECONDS Wait SECONDS between reads with -f
-n N[kbm] Print last N lines
-c N[kbm] Print last N bytes
-q Never print headers
-v Always print headers

N may be suffixed by k (x1024), b (x512), or m (x1024^2).
If N starts with a '+', output begins with the Nth item from the start
of each file, not from the end.

tail -f SystemOut.log 可以实时观测 最新产生的log,会不停的刷新屏幕。

------------------------------------------------------------
linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
------------------------------------------------------------
功能说明:建立用户帐号。 
语  法:useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>][-u <uid>][用户帐号] 
          或 useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s <shell>]

补充说明:useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。

参  数: 
 -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。  
 -d<登入目录>  指定用户登入时的启始目录。 
 -D  变更预设值. 
 -e<有效期限>  指定帐号的有效期限。 
 -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。 
 -g<群组>  指定用户所属的群组。 
 -G<群组>  指定用户所属的附加群组。 
 -m  自动建立用户的登入目录。 
 -M  不要自动建立用户的登入目录。 
 -n  取消建立以用户名称为名的群组. 
 -r  建立系统帐号。 
 -s<shell>   指定用户登入后所使用的shell。 
 -u<uid>  指定用户ID。

名称:adduser 
1.作用 (linuxso注:useradd和adduser相同,但是addgroup是不存在的命令,所以建议使用useradd,当然你的习惯才是最重要的.)

  useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户。

2.格式

  useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name

3.主要参数

  新帐号建立当不加-D参数,useradd指令使用命令列来指定新帐号的设定值and使用系统上的预设值.新使用者帐号将产生一些系统档案,使用者目录建立,拷备起始档案等,这些均可以利用命令列选项指定。此版本为RedHatLinux提供,可帮每个新加入的使用者建立个别的group,毋须添加-n选项。useradd可使用的选项为-ccomment新帐号password档的说明栏。-dhome_dir新帐号每次登入时所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。

  -e expire_date 帐号终止日期。日期的指定格式为MM/DD/YY。

  -f inactive_days 帐号过期几日后永久停权。当值为0时帐号则立刻被停权。而当值为-1时则关闭此功能,预设值为-1

  -g initial_group group名称或以数字来做为使用者登入起始群组(group)。群组名须为现有存在的名称。群组数字也须为现有存在的群组。预设的群组数字为1。

  -G group,[...] 定义此使用者为此一堆groups的成员。每个群组使用","区格开来,不可以夹杂空白字元。群组名同-g选项的限制。定义值为使用者的起始群组。

  -m 使用者目录如不存在则自动建立。如使用-k选项skeleton_dir内的档案将复制至使用者目录下。然而在/etc/skel目录下的档案也会复制过去取代。任何在skeleton_diror/etc/skel的目录也相同会在使用者目录下一一建立。The-k同-m不建立目录以及不复制任何档案为预设值。

  -M 不建立使用者目录,即使/etc/login.defs系统档设定要建立使用者目录。

  -n 预设值使用者群组与使用者名称会相同。此选项将取消此预设值。

  -r 此参数是用来建立系统帐号。系统帐号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建立的帐号不会建立使用者目录,也不会在乎纪录在/etc/login.defs.的定义值。如果你想要有使用者目录须额外指定-m参数来建立系统帐号。这是REDHAT额外增设的选项。

  -s shell 使用者登入后使用的shell名称。预设为不填写,这样系统会帮你指定预设的登入shell。

  -u uid 使用者的ID值。必须为唯一的ID值,除非用-o选项。数字不可为负值。预设为最小不得小于999而逐次增加。0~999传统上是保留给系统帐号使用。改变预设值当-D选项出现时,useradd秀出现在的预设值,或是藉由命令列的方式更新预设值。可用选项为∶

  -b default_home 定义使用者所属目录的前一个目录。使用者名称会附加在default_home后面用来建立新使用者的目录。当然使用-d后则此选项无效。

  -e default_expire_date 使用者帐号停止日期。

  -f default_inactive 帐号过期几日后停权。

  -g default_group 新帐号起始群组名或ID。群组名须为现有存在的名称。群组ID也须为现有存在的群组。

  -s default_shell 使用者登入后使用的shell名称。往后新加入的帐号都将使用此shell.如不指定任何参数,useradd显示目前预设的值。注记系统管理者有义务在/etc/skel目录下放置使用者定义档。 
  4.说明 资料整理 www.linuxso.com

  useradd可用来建立用户账号,它和adduser命令是相同的。账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。

  5.应用实例

  建立一个新用户账户,并设置ID:

  #useradd caojh -u 544

  需要说明的是,设定ID值时尽量要大于500,以免冲突。因为Linux安装后会建立一些特殊用户,一般0到499之间的值留给bin、mail这样的系统账号。

[root@linux ~]# useradd [-u UID] [-g initial_group] [-G other_group] 
> -[Mm] [-c 说明栏] [-d home] [-s shell] username 
参数: 
-u :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个帐号; 
-g :后面接的那个群组名称就是我们上面提到的 initial group 啦~ 
该 group ID (GID) 会被放置到 /etc/passwd 的第四个栏位内。 
-G :后面接的群组名称则是这个帐号还可以支援的群组。 
这个参数会修改 /etc/group 内的相关资料喔! 
-M :强制!不要建立使用者家目录 
-m :强制!要建立使用者家目录! 
-c :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们设定的啦~ 
-d :指定某个目录成为家目录,而不要使用预设值; 
-r :建立一个系统的帐号,这个帐号的 UID 会有限制 (/etc/login.defs) 
-s :后面接一个 shell ,预设是 /bin/bash 的啦~ 
范例:

范例一:完全参考预设值建立一个使用者,名称为 vbird1 
[root@linux ~]# useradd vbird1

--------------------------------------------------------
关于Linux系统清理/tmp/文件夹,你可能想知道的
--------------------------------------------------------
http://www.opsers.org/base/clean-up-on-the-linux-system-tmp-folder-you-may-want-to-know.html
我们知道,在Linux系统中/tmp文件夹里面的文件会被清空,至于多长时间被清空,如何清空的,可能大家知识的就不多了,所以,今天我们就来剖析一个这两个问题。

在RHEL\CentOS\Fedora\系统中(本次实验是在RHEL6中进行的)
先来看看tmpwatch这个命令,他的作用就是删除一段时间内不使用的文件(removes files which haven’t been accessed for a period of time)。具体的用法就不多说了,有兴趣的自行研究。我们主要看看和这个命令相关的计划任务文件。 
他就是/etc/cron.daily/tmpwatch,我们可以看一下这个文件里面的内容 
#! /bin/sh 
flags=-umc 
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \ 
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \ 
        -X ‘/tmp/hsperfdata_*’ 10d /tmp 
/usr/sbin/tmpwatch "$flags" 30d /var/tmp 
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do 
    if [ -d "$d" ]; then 
        /usr/sbin/tmpwatch "$flags" -f 30d "$d" 
    fi 
done

这个脚本大家仔细分析一下就明白了,第一行相当于一个标记(参数),第二行就是针对/tmp目录里面排除的目录,第三行,这是对这个/tmp目录的清理,下面的是针对其他目录的清理,就不说了。
我们就来看/usr/sbin/tmpwatch "$flags" 30d /var/tmp这一行,关键的是这个30d,就是30天的意思,这个就决定了30天清理/tmp下不访问的文件。如果说,你想一天一清理的话,就把这个30d改成1d。这个你懂的……哈哈!
但有个问题需要注意,如果你设置更短的时间来清理的话,比如说是30分钟、10秒等等,你可以在这个文件中设置,但你会发现重新电脑,他不清理/tmp文件夹里面的内容,这是为什么呢?这就是tmpwatch他所在的位置决定的,他的上层目录是/etc/cron.daily/,而这个目录是第天执行一次计划任务,所以说,你设置了比一天更短的时间,他就不起作用了。这下明白了吧。 
所以结论是:在RHEL6中,系统自动清理/tmp文件夹的默认时限是30天 (********************)

在Debian\Ubuntu系统中(Ubuntu10.10为实验环境)
在Ubuntu系统中,在/tmp文件夹里面的内容,每次开机都会被清空,如果不想让他自动清理的话,只需要更改rcS文件中的TMPTIME的值。 
我们看如何来修改 
sudo vi /etc/default/rcS
把 
TMPTIME=0
修改成 
TMPTIME=-1或者是无限大
改成这样的话,系统在重新启动的时候就不会清理你的/tmp目录了。 
依些类推,如果说要限制多少时间来更改的话,就可以改成相应的数字(本人没有测试,我是这么理解的)
所以结论是:在Ubuntu中,系统自动清理/tmp文件夹的时限默认每次启动(********************)

--------------------------------------------------------
Linux下如何获取硬盘分区的UUID?
--------------------------------------------------------
最近刚装上LINUX,一装上就遇到了问题,就是无法挂载硬盘的问题,在网上搜了一些相关的资料,
实施的时候才发现需要用到一个叫UUID的东东,于是上网搜了一下,找到了一个相对较全的资料,如下:
1. 通过浏览 /dev/disk/by-uuid/ 下的设备文件信息。
# ls -l /dev/disk/by-uuid/
------
lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> http://www.cnblogs.com/sdb5
lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -> http://www.cnblogs.com/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"

Linux UUID的作用及意义
原因1:它是真正的唯一标志符
UUID为系统中的存储设备提供唯一的标识字符串,不管这个设备是什么类型的。如果你在系统中添加了新的存储设备如硬盘,
很可能会造成一些麻烦,比如说启动的时候因为找不到设备而失败,而使用UUID则不会有这样的问题。

原因2:设备名并非总是不变的
自动分配的设备名称并非总是一致的,它们依赖于启动时内核加载模块的顺序。如果你在插入了USB盘时启动了系统,
而下次启动时又把它拔掉了,就有可能导致设备名分配不一致。使用UUID对于挂载移动设备也非常有好处──例如我有一个24合一的读卡器,
它支持各种各样的卡,而使用UUID总可以使同一块卡挂载在同一个地方。

原因3:Ubuntu中的许多关键功能现在开始依赖于UUID
例如grub──系统引导程序,现在可以识别UUID,打开你的/boot/grub/menu.lst,你可以看到类似如下的语句:
title Ubuntu hardy (development branch), kernel 2.6.24-16-generic
root (hd2,0)
kernel /boot/vmlinuz-2.6.24-16-generic root=UUID=c73a37c8-ef7f-40e4-b9de-8b2f81038441 ro quiet splash
initrd /boot/initrd.img-2.6.24-16-generic
quiet

==============================================
如何禁止cron发用户邮件
==============================================
经常会遇到这样的问题,登陆系统或者敲命令时,系统总会提示:
You have new mail in /var/spool/mail/root
有时很烦,具体产生的原因如下:
cron中执行的脚本有输出导致的。很多人写脚本都不考虑标准输出和错误输出如何处理,这样一旦有输出,cron就会把输出内容发邮件给当前用户。很多网上说的停止MTA(sendmail or postfix)等是不管用的,删除sendmail命令也不行。
比较普通的处理方法就是在每条cron后面添加如下方法进行屏蔽。
>/dev/null 2>&1      "把标准错误输出重定向到标准输出,然后扔到/DEV/NULL下面去。"
OR
&> /dev/null
如:
*/2 * * * * /usr/local/sbin/dog_lighttpd.sh >/dev/null 2>&1
但是有时候还不够方便,比如刚接手的一个项目,里面已经写了300多条cron了,即使写脚本添加屏蔽也比较烦。
那么还有更简单的方法:
直接:crontab -e
在第一行添加:MAILTO=""
原来在/etc/crontab中定义了收件人,所以我们把收件人滞空就可以了。
其实最根本的方法还是大家养成脚本规范的好习惯。

dailybuild脚本内容:
[root@xiangfch /]# cat /home/datebuild/datebuild.sh
#!/bin/bash
DATE=`date "+%Y-%m-%d"`
cd /home/datebuild
mkdir -p $DATE
cd $DATE
svn co http://10.118.202.87/svn/webserver/ZXOIS-SYC_V01.01.10/ --username liruibin --password Hanfeizi1983 >/dev/null 2>&1 
cd ZXOIS-SYC_V01.01.10/openwrt
sh toreadynas.sh  >/dev/null 2>&1 
sh tobuildnas.sh 1>/home/datebuild/$DATE/build.log 2>&1
cd /home/datebuild/$DATE
if [ `find ./ZXOIS-SYC_V01.01.10/openwrt/bin/x86/ |grep .vmdk | wc -l` -eq 0 ];then
echo -e "failed" >/home/datebuild/$DATE/result.txt
else
echo -e "succeed" >/home/datebuild/$DATE/result.txt
fi

==============================================
linux下邮件查看命令
==============================================
系统提供了用户之间通信的邮件系统,当用户打开终端注册登录时发现系统给出如下信息:
    you have mail.
 
这时用户可通过键入mail命令读取信件:
    $ mail
mail程序将逐个显示用户的信件,并依照时间顺序,显示最新的信件。每显示一段信件,mail都询问用户是否要对该信件作些处理。
1)若用户回答d,则表示删除信件;
2)若仅按回车键,表示对信件不作任何改动(信件仍旧保存,下次还可读这一信件);
3)若回答p,则要求重复显示信件;
4)s filename表示要把信件存入所命名的文件;
5)若回答q,表示要从mail退出。

[root@localhost ~]# mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/root": 76 messages 76 unread
>U 1 root@localhost.local Mon Jan 19 15:43 24/936   "Cron <root@localhost>"
U 2 root@localhost.local Mon Jan 19 15:44 24/936   "Cron <root@localhost>"
U 3 root@localhost.local Mon Jan 19 15:45 24/936   "Cron <root@localhost>"
U 4 root@localhost.local Mon Jan 19 15:46 24/936   "Cron <root@localhost>"
U 5 root@localhost.local Mon Jan 19 15:47 24/936   "Cron <root@localhost>"
> 表示当前邮件    U 表示未读
& p           //显示当前邮件
Message 1:
From root@localhost.localdomain Mon Jan 19 15:43:02 2009
Date: Mon, 19 Jan 2009 15:43:02 +0800
From: root@localhost.localdomain (Cron Daemon)

& 2           //显示标号为2的文件
Message 2:

其他常用参数: 
unread 标记为未读邮件
h|headers 显示当前的邮件列表
l|list 显示当前支持的命令列表
?|help 显示多个查看邮件列表的命令参数用法
d 删除当前邮件,指针并下移。 d 1-100 删除第1到100封邮件
f|from 只显示当前邮件的简易信息。 f num 显示某一个邮件的简易信息
f|from num 指针移动到某一封邮件
z 显示刚进行收件箱时的后面二十封邮件列表
more|p|page 阅读当前指针所在的邮件内容 阅读时,按空格键就是翻页,按回车键就是下移一行
t|type|more|p|page num 阅读某一封邮件
n|next|{什么都不填} 阅读当前指针所在的下一封邮件内容,阅读时,按空格键就是翻页,按回车键就是下移一行
v|visual 当前邮件进入纯文本编辑模式
n|next|{什么都不填} num 阅读某一封邮件
top 显示当前指针所在的邮件的邮件头
file|folder 显示系统邮件所在的文件,以及邮件总数等信息
x 退出mail命令平台,并不保存之前的操作,比如删除邮件
q 退出mail命令平台,保存之前的操作,比如删除已用d删除的邮件,已阅读邮件会转存到当前用户家目
录下的mbox文件中。如果在mbox中删除文件才会彻底删除。

在linux文本命令平台输入 mail -f mbox,就可以看到当前目录下的mbox中的邮件了。
cd 改变当前所在文件夹的位置
写信时,连按两次Ctrl+C键则中断工作,不送此信件。
读信时,按一次Ctrl+C,退出阅读状态。
检查所传送的电子邮件是否送出,或滞留在邮件服务器中 语法:/usr/lib/sendmail -bp
若屏幕显示为“Mail queue is empty” 的信息,表示mail 已送出。
若为其他错误信息,表示电子邮件因故尚未送出。

===================
linux 命令英文全称  
===================
rc = run command
rc.d = run command directory
init.d = initialization directory
initrd = initialize ram disk
initab = initialization table
fstab = file system table
httpd =http daemon
mysqld = mysql daemon
sshd = Secure SHell daemon
mingetty 是一个最小化的用于虚拟控制台的 getty 程序
getty (get teletypewriter)功能说明:设置终端机模式,连线速率和管制线路。
tty(teletypewriter) n.电传打字机 功能说明:显示终端机连接标准输入设备的文件名称

/bin = BINaries
/dev = DEVices
/etc = ETCetera 等等;附加物;附加的人;以及其它
/lib = LIBrary
/proc = PROCesses
/sbin = Superuser BINaries
/tmp = TeMPorary
/usr = Unix Shared Resources
/var = VARiable
FIFO = First In, First Out
GRUB = GRand Unified Bootloader
IFS = Internal Field Seperators
LILO = LInux LOader
MySQL = My是最初作者女儿的名字,SQL = Structured Query Language
PHP = Personal Home Page Tools = PHP Hypertext Preprocessor
PS = Prompt String
Perl = "Pratical Extraction and Report Language" = "Pathologically Eclectic Rubbish Lister"
Python 得名于电视剧Monty Python's Flying Circus
Tcl = Tool Command Language
Tk = ToolKit
VT = Video Terminal
YaST = Yet Another Setup Tool
apache = "a patchy" server
apt = Advanced Packaging Tool
ar = archiver
as = assembler
awk = "Aho Weiberger and Kernighan" 三个作者的姓的第一个字母
bash = Bourne Again SHell
bc = Basic (Better) Calculator
bg = BackGround
biff = 作者Heidi Stettner在U.C.Berkely养的一条狗,喜欢对邮递员汪汪叫。
cal = CALendar
cat = CATenate
cd = Change Directory
chgrp = CHange GRouP
chmod = CHange MODe
chown = CHange OWNer
chsh = CHange SHell
cmp = compare
cobra = Common Object Request Broker Architecture
comm = common
cp = CoPy
cpio = CoPy In and Out
cpp = C Pre Processor
cron = Chronos 希腊文时间
cups = Common Unix Printing System
cvs = Current Version System
daemon = Disk And Execution MONitor
dc = Desk Calculator
dd = Disk Dump
df = Disk Free
diff = DIFFerence
dmesg = diagnostic message
du = Disk Usage
ed = editor
egrep = Extended GREP
elf = Extensible Linking Format
elm = ELectronic Mail
emacs = Editor MACroS
eval = EVALuate
ex = EXtended
exec = EXECute
fd = file descriptors
fg = ForeGround
fgrep = Fixed GREP
fmt = format
fsck = File System ChecK
fstab = FileSystem TABle
fvwm = F*** Virtual Window Manager
gawk = GNU AWK
gpg = GNU Privacy Guard
groff = GNU troff
hal = Hardware Abstraction Layer
joe = Joe's Own Editor
ksh = Korn SHell
lame = Lame Ain't an MP3 Encoder
lex = LEXical analyser
lisp = LISt Processing = Lots of Irritating Superfluous Parentheses
ln = LiNk
lpr = Line PRint
ls = list
lsof = LiSt Open Files
m4 = Macro processor Version 4
man = MANual pages
mawk = Mike Brennan's AWK
mc = Midnight Commander
mkfs = MaKe FileSystem
mknod = MaKe NODe
motd = Message of The Day
mozilla = MOsaic GodZILLa
mtab = Mount TABle
mv = MoVe
nano = Nano's ANOther editor
nawk = New AWK
nl = Number of Lines
nm = names
nohup = No HangUP
nroff = New ROFF
od = Octal Dump
passwd = PASSWorD
pg = pager
pico = PIne's message COmposition editor
pine = "Program for Internet News & Email" = "Pine is not Elm"
ping = 拟声 又 = Packet InterNet Grouper
pirntcap = PRINTer CAPability
popd = POP Directory
pr = pre
printf = PRINT Formatted
ps = Processes Status
pty = pseudo tty
pushd = PUSH Directory
pwd = Print Working Directory
rc = runcom = run command, rc还是plan9的shell
rev = REVerse
rm = ReMove
rn = Read News
roff = RunOFF
rpm = RPM Package Manager = RedHat Package Manager
rsh, rlogin, rvim中的r = Remote
rxvt = ouR XVT
seamoneky = 我
sed = Stream EDitor
seq = SEQuence
shar = SHell ARchive
slrn = S-Lang rn
ssh = Secure SHell
ssl = Secure Sockets Layer
stty = Set TTY
su = Substitute User
svn = SubVersioN
tar = Tape ARchive
tcsh = TENEX C shell
tee = T (T形水管接口)
telnet = TEminaL over Network
termcap = terminal capability
terminfo = terminal information
tex = τ?χνη的缩写,希腊文art
tr = traslate
troff = Typesetter new ROFF
tsort = Topological SORT
tty = TeleTypewriter
twm = Tom's Window Manager
tz = TimeZone
udev = Userspace DEV
ulimit = User's LIMIT
umask = User's MASK
uniq = UNIQue
vi = VIsual = Very Inconvenient
vim = Vi IMproved
wall = write all
wc = Word Count
wine = WINE Is Not an Emulator
xargs = eXtended ARGuments
xdm = X Display Manager
xlfd = X Logical Font Description
xmms = X Multimedia System
xrdb = X Resources DataBase
xwd = X Window Dump
yacc = yet another compiler compiler  
grep 就表示 "全局查找正则表达式并且打印结果行" grep全称是Global Regular Expression Print

Fedora 16 Beta i686 上的文件结构:
/
|-- bin
|-- boot
|-- dev
|-- etc
|-- home
|-- lib
|-- lost+found
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
|-- sbin
|-- srv
|-- sys
|-- tmp
|-- usr
`-- var

Debian 下的目录结构
├── bin           基础系统所需要的最基础的命令
├── boot          内核及引导系统程序
│   └── grub    引导配置文件,如menu.lst 或grub.cfg都在里面
├── dev           设备文件
├── emul         
│   └── ia32-linux
├── etc           系统配置文件
├── home          普通用户家目录
├── initrd.img   
├── lib            动态链接共享库
├── lib32          32位库文件
├── lib64 -> /lib  库文件
├── lost+found     文件碎片
├── media          挂载储存设备的挂载目录
├── mnt            挂载储存设备的挂载目录
├── opt            可选安装目录
├── proc           进程信息及内核信息的内存映射
├── root           root的家目录
├── sbin           系统管理的命令
├── selinux        安全服务
├── srv            服务启动之后需要提取的数据
├── sys            内核设备树
├── tmp            临时文件
├── usr            应用程序和文件
│   ├── bin      系统用户使用的应用程序
│   ├── games    游戏
│   ├── include  开发和编译应用程序所需要的头文件 
│   ├── lib      常用的动态链接库和软件包的配置文件
│   ├── lib32    常用的动态链接库和软件包的配置文件32位
│   ├── lib64 -> lib
│   ├── local    本地安装的程序
│   ├── sbin     超级用户使用的比较高级的管理程序和系统守护程序
│   ├── share    系统共用
│   └── src      内核源代码
├── var
│   ├── backups  备份
│   ├── cache    应用程序的缓存文件
│   ├── lib      系统正常运行时要改变的文件
│   ├── local    /usr/local 中安装的程序的可变数据
│   ├── lock    锁定文件
│   ├── log     系统日志
│   ├── mail    邮件日志相关
│   ├── opt     opt目录的变量数据
│   ├── run     保存到下次引导前有效的关于系统的信息文件
│   ├── spool   打印机、邮件、代理服务器等假脱机目录
│   └── tmp     比/tmp 允许的大或需要存在较长时间的临时文件
└── vmlinuz  
sudo tree / -L 1 > ~/tree

linux常用命令-part3相关推荐

  1. Linux常用命令帅哥特供版

    [TOC] Linux常用命令Json帅哥特供版 没错这里的帅哥指的就是我自己 把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝 ...

  2. linux常用命令(转载)

    Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错.我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短 ...

  3. linux常用命令汇总

    linux常用命令汇总,以便需要时快速查询 中文释义 相应命令 备注 在文件中查找 grep error catalina.out 在catalina.out文件中查找error信息 重启nginx ...

  4. Linux常用命令大全-toolfk程序员在线工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  5. LINUX常用命令(基础)

    LINUX常用命令(基础) 收藏LINUX常用命令(基础) 1. man 对你熟悉或不熟悉的命令提供帮助解释eg:man ls 就可以查看ls相关的用法注:按q键或者ctrl+c退出,在linux下可 ...

  6. DOS 和 Linux 常用命令的对比

    此为转载文章,转自:http://www.huihoo.org/gnu_linux/ch-doslinux.html Red Hat Linux 9: Red Hat Linux 入门指南 后退 前进 ...

  7. Linux常用命令(echo、date、ls、cd、history、cat)

    一.linux常用命令有很多今天我们来总结一下常用的入门命令: 1.linux下关机命令:poweroff.init 0.halt.shutdown -h now 2.linux下重启命令:reboo ...

  8. Linux初学者接住了---Linux常用命令

    前言 本文整理了Linux常用命令,分类整理,举例说明使用方法,希望为大家带来便利.命令严格区分大小写,一般是小写,tab键补全. Linux常用命令 前言 一.文件处理命令 1.命令格式 目录处理命 ...

  9. Linux 常用命令笔记

    Linux 常用命令笔记 1. locate locate:用来定位文件的位置,如:locate a.txt 但是这个命令有延迟,也就是新建的文件不一定能搜索到,如果非要找到新建的文件可以使用 upd ...

  10. Linux 常用命令使用方法

    Linux 常用命令使用方法 1.# 表示权限用户(如:root),$ 表示普通用户  开机提示:Login:输入用户名  password:输入口令   用户是系统注册用户成功登陆后,可以进入相应的 ...

最新文章

  1. shell脚本 逐行读取文本并且 进行字符串的截取
  2. python 开运算_形态学去噪python(开运算,闭运算)
  3. 滴滴顺风车GM:大多数产品经理定义是狭隘的
  4. 五层架构(MVC+biz+lib)
  5. Postgresql中的hybrid hash join(无状态机讲解)
  6. 内核错误Linux,ubuntu14.04更新内核出错
  7. python invalid literal for int_求助!运行出现错误“ValueError: invalid literal for int() ··...
  8. visionpro图片读取、写入
  9. pandorabox 潘多拉固件路由器作为无线打印机服务器记录
  10. 文献参考文献著录规则
  11. 网店java_php网店系统与java网店系统的区别
  12. Adobe软件注册机
  13. 单臂路由实现VLAN间通信
  14. 两台计算机之间的远程连接
  15. 体育赛事系统设计方案
  16. 双重认证怎么开_facebook bm认证很重要
  17. 微商如何用百度来进行引流推广?
  18. 聊聊CentOS停止维护,要我说这是件大好事!
  19. 【龙芯1B】:龙芯1B200字号修改程序(基于龙芯1B200)
  20. win10电脑用蓝牙实现文件传输,安卓手机通过蓝牙将文件传送到电脑

热门文章

  1. SpringBoot基础学习之整合Swagger框架(下篇)
  2. android studio 使用lint工具优化app时全过程记录
  3. john5(john5和曼森的关系)
  4. 网盘翻车不断,我是如何低价自建一个自用网盘
  5. Depsolving loop limit reached
  6. Hadoop集群能打开50070端口网页不能打开8088端口网页
  7. 在线教育的优势强调实时直播、实时互动
  8. 如何做好互联网广告销售
  9. 广东工业大学2020级年ACM第一次月赛
  10. 基于matlab下数字信号的课程设计,基于Matlab的数字信号处理课程设计