Skip to content Skip to main navigation Skip to footer

Redhat

CentOS/Linux: 命令su、su-、sudo的不同之处


在linux系统中,由于root的权限过大,一般情况都不使用它。只有在一些特殊情况下才采用登录root执行管理任务,一般情况下临时使用root权限多采用su和sudo命令。
su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户wade登录的,但要添加用户任务,执行useradd ,wade用户没有这个权限,而这个权限恰恰由root所拥有。
解决办法无法有两个,一是退出wade用户,重新以root用户登录,但这种办法并不是最好的;二是我们没有必要退出wade用户,可以用su来切换到root下进行添加用户的工作,等任务完成后再退出root。我们可以看到当然通过su 切换是一种比较好的办法;通过su可以在用户之间切换,而超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证!
一、和su – 命令对比:
centos su sudo 命令
通过上图时间操作我们可以分析得出两个命令之间的区别:
1、参数 -, -l, –login
make the shell a login shell
su -,su -l或su –login 命令改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更PATH变量。用su -命令则默认转换成成root用户了。
而不带参数的“su命令”不会改变当前工作目录以及HOME,SHELL,USER,LOGNAME。只是拥有了root的权限而已。

2、su的优缺点:

su的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;
但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;
想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的。

二、su和sudo命令对比:

在普通用户下输入su命令后,会提示输入root账户的密码,然后就进入特权模式(跟用root登录系统完全一样),输入exit或者su – user 退出。
centos su sudo 命令
而采用sudo命令,只需输入当前用户的密码(也可以配置为不输入密码)即可执行需要root权限执行的命令:
centos su sudo 命令
通过上面的对比可以看出,sudo比su有很多优点:
1、普通用户不需要知道root的密码即可执行需要root权限的命令;
2、不会因忘记退出而采用root执行了会引起破坏性的命令(初学linux经常犯这个错);
3. 由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。
如果用su 来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到 sudo。
通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;
另外sudo 是需要授权许可的,所以也被称为授权许可的su;sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。

CentOS/RHEL:如何查看主板型号以及硬件信息


在centos系统下我们如何来查看主板的型号以及其它的硬件信息呢,比如硬盘,内存,网卡等
。本来将会讲述如何使用常用的一些linux工具来检测硬件的信息。
安装包命令查找:

yum whatprovides */lspci
 

查看主板型号:

dmidecode |grep -A16 "System Information$"
 

内存槽及内存条:

dmidecode |grep -A16 "Memory Device$"
 

硬盘:

fdisk -l
 
smartctl -a /dev/sda
HP SmartArray (cciss) hardware RAID controllers:
 
smartctl -d cciss,0 -a /dev/cciss/c0d0
 

网卡:

mii-tool
 

scsi/raid卡:

lspci
 

centos相关命令安装:

yum -y install smartmontools
yum install pciutils -y
 

CentOS/RHEL:如何使用Cp/rm/mv命令的强制覆盖操作

在centos linux系统上如果你想使用cp/rm/mv的强制覆盖操作,默认情况下,系统会对着几个命令做不能强制覆盖的别名操作。所以如何来取消命令的别名,执行强制覆盖操作呢。
习惯了freebsd里的cp/rm/mv等命令遇到同名文件时直接覆盖操作,而在linux中(不一定是全部,可能是我使用的几种),使用cp/rm/mv命令覆盖文件操作时总是提示输入yes或no,很是麻烦,一两个的也就算了,没什么,但有时会遇到大量文件的复制时,就麻烦了,要一个一个输入yes才能进行,即使加上了-f参数也无法达到强制覆盖。于是查阅资料后,找到一些小技巧,下面仅以cp命令为例,详细说明
一、使用unalias cp命令 解除对cp的别名(仅本次终端连接会话临时取消),我们先输入alias命令,查看系统内部已经设置的别名

 [root@localhost ~]# 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'
 

输入unalias cp命令,取消cp命令的别名

   [root@localhost ~]# unalias cp
    [root@localhost ~]# cp filename new/filename
    [root@localhost ~]#
 

使用unalias cp命令后,即可使用cp filename new/filename就不会提示输入yes或no了,是不是很方便
二、直接输入\cp命令,作用也是取消cp的别名

    [root@localhost ~]# \cp filename new/filename
    [root@localhost ~]#
 

是不是比上一个方法更省事
三、使用管道的方式,自动输入yes

    [root@localhost ~]# yes | cp filename new/filename
    cp: overwrite `new/filename'? [root@localhost ~]#
 

自己替我们输入了yes
原文:92csz.com

CentOS/linux:如何查找目录下文件中是否包含指定字符串

在centos linux系统下查找文件中是否包含特定的行是经常会做的事情。那么如何来查看特定目录下的文件中是否包含特定的字符串呢?我们可以使用linux find命令来实现。
输入下面的命令:

find . | xargs grep -ri "IBM"
 

查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名

find . | xargs grep -ril "IBM"
 

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查找文件长度为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个字符
原文 92csz.com

centOS/RHEL:如何修改系统时间为北京时间

修改美国vps的系统时间为北京时间
也许大家在使用国外vps时感觉vps上的时间不是北京时间,感觉很别扭,今天我们就来改回为北京时间,首先登录你的vps,先用date命令查看下当前时间

    [root@centos ~]#date
    Sun Aug 14 23:18:41 EDT 2011
 

现在我们就来改

 [root@centos ~]# rm -rf /etc/localtime
    [root@centos ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 

再用date命令看下,你的vps的时间改变了吗?大部分linux vps的母鸡是允许每个vps修改时间的!看vpsma的时间已经修改好了。

    [root@centos ~]# date
    Mon Aug 15 11:20:00 CST 2011
 

如果此时你的vps时间已经改成北京时间就不用看下面了,如果此时你的vps时间还没有修改好。再试下命令:

  [root@centos ~]# ntpdate stdtime.sinica.edu.tw
 

使用ntpdate stdtime.sinica.edu.tw 时候如果提示这个命令,先安装 ntpdate就可以了。
centos 系统的vps用命令:

 yum -y install ntpdate ntp
 

Ubuntu系统的:

   sudo apt-get install -y ntpdate ntp
 

安装完毕再试这个命令,如果还不可以的话,一般情况就是母鸡做了设置不让修改你vps的时间了。
原文:92csz.com

CentOS/Linux:如何安装并使用Crontab工具

本文将会讲述如何在centos linux系统中使用任务计划工具crontab。
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活。crond 常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
一、Crontab 安装

[root@CentOS ~]# yum -y install vixie-cron
[root@CentOS ~]# yum -y install crontabs
 

说明:
vixie-cron 软件包是 cron 的主程序;
crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

二、Crontab配置

cron 是 linux 的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

service crond start     //启动服务
service crond stop      //关闭服务
service crond restart   //重启服务
service crond reload    //重新载入配置
service crond status    //查看crontab服务状态
 

在CentOS系统中加入开机自动启动:

 chkconfig --level 345 crond on
 

cron 的主配置文件是 /etc/crontab,它包括下面几行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
 

前四行是用来配置 cron 任务运行环境的变量。
SHELL 变量的值告诉系统要使用哪个 shell 环境(在这个例子里是 bash shell);
PATH 变量定义用来执行命令的路径。
cron 任务的输出被邮寄给 MAILTO 变量定义的用户名。
如果 MAILTO 变量被定义为空白字符串(MAILTO=””),电子邮件就不会被寄出。
HOME 变量可以用来设置在执行命令或脚本时使用的主目录。
限制对 cron 的使用:
/etc/cron.allow和/etc/cron.deny 文件被用来限制对 cron 的使用。
这两个使用控制文件的格式都是每行一个用户。
两个文件都不允许空格。
如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。
使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。
无论使用控制文件中的规定如何,root 都总是可以使用 cron。
如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。
如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。
三、crontab 命令
功能:设置计时器。
语法:crontab[-u <用户名称>][配置文件] 或 crontab [-u <用户名称>][-elr] 解释:cron 是一个常驻服务,它提供计时器的功能,让用户在特定的时间得以执行预设的指令或程序。只要用户会编辑计时器的配置文件,就可以使 用计时器的功能。其配置文件格式如下:Minute Hour Day Month DayOFWeek Command
参数:
-e 编辑该用户的计时器设置。
-l 列出该用户的计时器设置。
-r 删除该用户的计时器设置。
-u<用户名称>  指定要设定计时器的用户名称。
格式:
* *  *  *  *  command
分 时 日 月 周  命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
 

上面的例子表示每星期六的11 : 00 pm重启apache。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
 

每一小时重启apache

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
 

晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
 

每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
 

一月一号的4点重启apache

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
 

每半小时同步一下时间

CentOS/Linux:如何检测硬盘的坏道

本文将会讲述如何使用硬盘状态的测试工具来检测硬盘的坏道。下面主要通过操作三个硬盘测试工具来进行.
硬盘状态测试工具:smartctl、Badblocks、hdparm
安装smartctl 工具
输入下面的命令:

[root@qy ~]#yum install smartmontools -y
 

启动SMART

# smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda
 

对/dev/sda分区进行检查
输入下面的命令:

smartctl -a /dev/sda
 

命令输出:

smartctl 5.42 2011-10-20 r3458[i686-linux-2.6.18-194.el5PAE] (local build)
Copyright (C) 2002-11 by Bruce Allen,http://smartmontools.sourceforge.net
 Vendor:               SEAGATE
Product:              ST3146356SS
vision:             HS09
User Capacity:        146,815,733,760 bytes [146 GB]
Logical block size:   512 bytes
Logical Unit id:      0x5000c50004fa837f
Serial number:        3QN0EL91
Device type:          disk
Transport protocol:   SAS
Local Time is:        Fri Oct 31 10:45:58 2014 CST
Device supports SMART and is Enabled
Temperature Warning Disabled or NotSupported
SMART Health Status: OK   #版本的不通这里显示的也不一样。
 Current Drive Temperature:     30 C
Drive Trip Temperature:        68 C
Elements in grown defect list: 0  #才是出坏道,俗称成长坏道。
Vendor (Seagate) cache information
 Blocks sent to initiator = 3752023409
 Blocks received from initiator = 3916316860
 Blocks read from cache and sent to initiator = 4025399956
 Number of read and write commands whose size <= segment size =3339079605
 Number of read and write commands whose size > segment size = 2746
Vendor (Seagate/Hitachi) factoryinformation
 number of hours powered up = 34120.02
 number of minutes until next internal SMART test = 1
 Error counter log:
 Errors Corrected by          Total   Correction     Gigabytes    Total
              ECC          rereads/    errors  algorithm      processed    uncorrected
          fast | delayed   rewrites  corrected invocations   [10^9 bytes]  errors
read:  248894024        0         0 248894024   248894024      85241.186           0
write:         0        0         0         0          0     30998.996           0
verify:  340001        0        0    340001     340001        141.757           0
Non-medium errorcount:       51  #非介质错误。意思是说不是盘的问题,一般是电缆、传输、校验问题,可以忽略的。
No self-tests have been logged
Long (extended) Self Test duration: 1740seconds [29.0 minutes]
 

可以用命令直接查看硬盘的好坏:

[root@qy ~]# smartctl -H /dev/sda
smartctl 5.42 2011-10-20 r3458[i686-linux-2.6.18-194.el5PAE] (local build)
Copyright (C) 2002-11 by Bruce Allen,http://smartmontools.sourceforge.net
 SMART Health Status: OK
 
[root@localhost ~]# smartctl -H /dev/sda
smartctl 5.43 2012-06-30 r3573 [x86_64-linux-2.6.32-358.el6.x86_64] (local build)
Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net
 === START OF READ SMART DATA SECTION ===
SMART STATUS RETURN: incomplete response, ATA output registers missing
SMART overall-health self-assessment test result: PASSED
Warning: This result is based on an Attribute check.
 

OK和PASSED都属于磁盘是正常的。
Badblocks工具测试正常,无坏道信息:
badblocks命令可以检查磁盘装置中损坏的区块。执行该指令时须指定所要检查的磁盘装置,及此装置的磁盘区块数。
badblocks -s//显示进度 -v//显示执行详细情况 /dev/sda1
badblocks -s//显示进度 -w//以写去检测 -v//显示执行详细情况 /dev/sda2
注意,不能以写的方式检测已经挂载的硬盘

[root@qy ~]# badblocks -s -v /dev/sda
Checking blocks 0 to 143374740
Checking for bad blocks (read-only test):done
Passcompleted, 0 bad blocks found.
 

此磁盘通过测试,没有坏道(坏块)。您可以放心使用。
不论是什么类型的坏道,均建议您首先进行数据备份!把重要数据进行备份然后再尝试修复。如果您有重要数据却无法读取(磁盘出现异常),那么请立即停止使用此磁盘并找专业人员进行修复。
使用hdparm测试
测试硬盘读写速度

# hdparm -Tt /dev/sda
/dev/sda:
Timing cached reads:
1918 MB in  2.00 seconds = 959.62 MB/sec
Timing buffered disk reads:  184 MB in  3.00 seconds =  61.26 MB/sec
 

hdparm可检测,显示与设定IDE或SCSI硬盘的参数。
可以使用sg_vpd命令查看硬盘转速,sg_vpd命令是sg3_utils其中一个工具.
下载地址:http://sg.danny.cz/sg/sg3_utils.html
[root@qy sg3_utils-1.39]# sg_vpd /dev/sda
测试硬盘坏道
关于smart检测硬盘命令补充:
smartctl -a 检查该设备是否已经打开SMART技术。
smartctl -s on 如果没有打开SMART技术,使用该命令打开SMART技术。
smartctl -t short 后台检测硬盘,消耗时间短;
smartctl -t long 后台检测硬盘,消耗时间长;
smartctl -C -t short 前台检测硬盘,消耗时间短;
smartctl -C -t long 前台检测硬盘,消耗时间长。其实就是利用硬盘SMART的自检程序。 s
martctl -X 中断后台检测硬盘。
smartctl -l selftest 显示硬盘检测日志。
smartctl -l error 显示硬盘错误汇总。
首先通过dmesg工具,确认一下硬盘的设备符号。例如一个IDE硬盘连接到Primary IDE 总线上的Slave位置,硬盘设备符号是/dev/hdb,hdb中的h代表IDE,如果显示为sdb,则代表SATA和SCSI,最后一个字幕b代表Primary总线,第二块硬盘即Slave位置,确认硬盘是否打开了SMART支持:

# smartctl -i /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF INFORMATION SECTION ===
Device Model:     HITACHI HTS543225L9SA00
Serial Number:    090131FB2F32YLG28JEA
Firmware Version: FBEZC48C
User Capacity:    250,059,350,016 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Vrsion is:   8
ATA Standard is:  ATA-8-ACS revision 3f
Local Time is:    Wed May 25 10:10:39 2011 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
//表示启用了smart支持如果看到SMART support is: Disabled表示SMART未启用,执行如下命令,启动SMART
 
# smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
opyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.
SMARTAttribute Autosave Enabled.
SMART Automatic Offline Testing Enabled every four hours.
 

现在硬盘的SMART功能已经被打开,执行如下命令查看硬盘的健康状况

# smartctl -H /dev/sda
smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build)
Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
 

请注意result后边的结果:PASSED,这表示硬盘健康状态良好;如果这里显示Failure,那么最好立刻给服务器更换硬盘。SMART只能报告磁盘已经不再健康,但是报警后还能继续运行多久是不确定的。通常,SMART报警参数是有预留的,磁盘报警后,不会当场坏掉,一般能坚持一段时间,有的硬盘SMART报警后还继续跑了好几年,有的硬盘SMART报错后几天就坏了。但是一旦出现报警,侥幸心里是万万不能的……
原文:51cto

CentOS/Linux:如何理解系统的目录结构

对于初学linux的人来说,一定要对系统的目录结构有深入的了解,也是刚开始学linux必须掌握的知识点。本文将会讲述linux的目录结构以及对目录结构里的不同目录做分析。
linux的系统目录结构如下图
linux 目录结构
/: 根目录,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中
/bin:/usr/bin: 可执行二进制文件的目录,如常用的命令ls、tar、mv、cat等。
/boot: 放置linux系统启动时用到的一些文件。/boot/vmlinuz为linux的内核文件,以及/boot/grub。建议单独分区,分区大小100M即可
/dev: 存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt。
/etc: 系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。注:/etc/X11存放与x windows有关的设置。
/home: 系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据
/lib:/usr/lib:/usr/local/lib: 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。
/lost+fount: 系统异常产生错误时,会将一些遗失的片段放置于此目录下,通常这个目录会自动出现在装置目录下。如加载硬盘于/disk 中,此目录下就会自动产生目录/disk/lost+found
/mnt:/media: 光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。
/opt: 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下
/proc: 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
/root: 系统管理员root的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
/sbin:/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能”查看”而不能设置和使用。
/tmp: 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
/srv: 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内
/usr: 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc: 系统说明文件存放目录。/usr/share/man: 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
/var: 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log,/var/log/message: 所有的登录文件存放目录,/var/spool/mail: 邮件存放的目录,/var/run: 程序或服务启动后,其PID存放在该目录下。建议单独分区,设置较大的磁盘空间
------------------------------------------
/dev: 目录
  dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。
Linux沿袭Unix的风格,将所有设备认成是一个文件。备文件分为两种:块设备文件(b)和字符设备文件(c)
设备文件一般存放在/dev目录下,对常见设备文件作如下说明:
/dev/hd[a-t]:IDE设备
/dev/sd[a-z]:SCSI设备
/dev/fd[0-7]:标准软驱
/dev/md[0-31]:软raid设备
/dev/loop[0-7]:本地回环设备
/dev/ram[0-15]:内存
/dev/null:无限数据接收设备,相当于黑洞
/dev/zero:无限零资源
/dev/tty[0-63]:虚拟终端
/dev/ttyS[0-3]:串口
/dev/lp[0-3]:并口
/dev/console:控制台
/dev/fb[0-31]:framebuffer
/dev/cdrom => /dev/hdc
/dev/modem => /dev/ttyS[0-9] /dev/pilot => /dev/ttyS[0-9] /dev/random:随机数设备
/dev/urandom:随机数设备
/dev目录下的节点是怎么创建的?
devf或者udev会自动帮你创建得。
kobject是sysfs文件系统的基础,udev通过监测、检测sysfs来获取新创建的设备的。
------------------------------------------
/etc: 目录
包含很多文件.许多网络配置文件也在/etc 中.
/etc/rc or /etc/rc.d or /etc/rc*.d   启动、或改变运行级时运行的scripts或scripts的目录.
/etc/passwd 用户数据库,其中的域给出了用户名、真实姓名、家目录、加密的口令和用户的其他信息.
/etc/fstab 启动时mount -a命令(在/etc/rc 或等效的启动文件中)自动mount的文件系统列表. Linux下,也包括用swapon -a启用的swap区的信息.
/etc/group 类似/etc/passwd ,但说明的不是用户而是组.
/etc/inittab init 的配置文件.
/etc/issue getty 在登录提示符前的输出信息.通常包括系统的一段短说明或欢迎信息.内容由系统管理员确定.
/etc/motd  Message Of The Day,成功登录后自动输出.内容由系统管理员确定.经常用于通告信息,如计划关机时间的警告.
/etc/mtab  当前安装的文件系统列表.由scripts初始化,并由mount 命令自动更新.需要一个当前安装的文件系统的列表时使用,例如df 命令.
/etc/shadow 在安装了影子口令软件的系统上的影子口令文件.影子口令文件将/etc/passwd 文件中的加密口令移动到/etc/shadow 中,而后者只对root可读.这使破译口令更困难.
/etc/login.defs login 命令的配置文件.
/etc/printcap 类似/etc/termcap ,但针对打印机.语法不同.
/etc/profile , /etc/csh.login , /etc/csh.cshrc  登录或启动时Bourne或C shells执行的文件.这允许系统管理员为所有用户建立全局缺省环境.
/etc/securetty 确认安全终端,即哪个终端允许root登录.一般只列出虚拟控制台,这样就不可能(至少很困难)通过modem或网络闯入系统并得到超级用户特权.
/etc/shells 列出可信任的shell.chsh 命令允许用户在本文件指定范围内改变登录shell.提供一台机器FTP服务的服务进程ftpd 检查用户shell是否列在 /etc/shells 文件中,如果不是将不允许该用户登录.
/etc/sysconfig 网络配置相关目录
------------------------------------------
/proc: 目录
/proc/cmdline 加载 kernel 时所下达的相关参数!查阅此文件,可了解系统是如何启动的!
/proc/cpuinfo 本机的 CPU 的相关资讯,包含时脉、类型与运算功能等
/proc/devices 这个文件记录了系统各个主要装置的主要装置代号,与 mknod 有关呢!
/proc/filesystems 目前系统已经加载的文件系统罗!
/proc/interrupts 目前系统上面的 IRQ 分配状态。
/proc/ioports 目前系统上面各个装置所配置的 I/O 位址。
/proc/kcore 这个就是内存的大小啦!好大对吧!但是不要读他啦!
/proc/loadavg 还记得 top 以及 uptime 吧?没错!上头的三个平均数值就是记录在此!
/proc/meminfo 使用 free 列出的内存资讯,嘿嘿!在这里也能够查阅到!
/proc/modules 目前我们的 Linux 已经加载的模块列表,也可以想成是驱动程序啦!
/proc/mounts 系统已经挂载的数据,就是用 mount 这个命令呼叫出来的数据啦!
/proc/swaps 到底系统挂加载的内存在哪里?呵呵!使用掉的 partition 就记录在此啦!
/proc/partitions 使用 fdisk -l 会出现目前所有的 partition 吧?在这个文件当中也有纪录喔!
/proc/pci 在 PCI 汇流排上面,每个装置的详细情况!可用 lspci 来查阅!
/proc/uptime 就是用 uptime 的时候,会出现的资讯啦!
/proc/version 核心的版本,就是用 uname -a 显示的内容啦!
/proc/bus/* 一些汇流排的装置,还有 U盘 的装置也记录在此喔!
------------------------------------------
/usr: 目录
/usr 文件系统经常很大,因为所有程序安装在这里. /usr 里的所有文件一般来自Linux distribution;本地安装的程序和其他东西在/usr/local 下.这样可能在升级新版系统或新distribution时无须重新安装全部程序.
/usr/etc 存放设置文件
/usr/games 存放游戏和教学文件
/usr/include 存放C开发工具的头文件
/usr/share 存放结构独立的数据
/usr/bin   几乎所有用户命令.有些命令在/bin 或/usr/local/bin 中.
/usr/sbin  根文件系统不必要的系统管理命令,例如多数服务程序.
/usr/share/man , /usr/share/info , /usr/share/doc 手册页、GNU信息文档和各种其他文档文件.
/usr/include C编程语言的头文件.为了一致性这实际上应该在/usr/lib 下,但传统上支持这个名字.
/usr/lib 程序或子系统的不变的数据文件,包括一些site-wide配置文件.名字lib来源于库(library); 编程的原始库存在/usr/lib 里.
/usr/local 本地安装的软件和其他文件放在这里.
/usr/src 存放程序的源代码
------------------------------------------
/var: 目录
/var 包括系统一般运行时要改变的数据.每个系统是特定的,即不通过网络与其他计算机共享.
/var/catman 当要求格式化时的man页的cache.man页的源文件一般存在/usr/man/man* 中;有些man页可能有预格式化的版本,存在/usr/man/cat* 中.而其他的man页在第一次看时需要格式化,格式化完的版本存在/var/man 中,这样其他人再看相同的页时就无须等待格式化了. (/var/catman 经常被清除,就象清除临时目录一样.)
/var/lib 系统正常运行时要改变的文件.
/var/local /usr/local 中安装的程序的可变数据(即系统管理员安装的程序).注意,如果必要,即使本地安装的程序也会使用其他/var 目录,例如/var/lock .
/var/lock 锁定文件.许多程序遵循在/var/lock 中产生一个锁定文件的约定,以支持他们正在使用某个特定的设备或文件.其他程序注意到这个锁定文件,将不试图使用这个设备或文件.
/var/log 各种程序的Log文件,特别是login (/var/log/wtmp log所有到系统的登录和注销) 和syslog (/var/log/messages 里存储所有核心和系统程序信息. /var/log 里的文件经常不确定地增长,应该定期清除.
/var/run 保存到下次引导前有效的关于系统的信息文件.例如, /var/run/utmp 包含当前登录的用户的信息.
/var/spool mail, news, 打印队列和其他队列工作的目录.每个不同的spool在/var/spool 下有自己的子目录,例如,用户的邮箱在/var/spool/mail 中.
/var/tmp 比/tmp 允许的大或需要存在较长时间的临时文件. (虽然系统管理员可能不允许/var/tmp 有很旧的文件.)
------------------------------------------
比较重要的目录
在 Linux 系统中,有几个目录是特别需要注意的,以下提供几个需要注意的目录,以及预设相关的用途: 
/etc: 这个目录相当重要,如前所述,你的开机与系统数据文件均在这个目录之下,因此当这个目录被破坏,那你的系统大概也就差不多该死掉了!而在往后的文件中,你会发现我们常常使用这个目录下的 /etc/rc.d/init.d 这个子目录,因为这个 init.d 子目录是开启一些 Linux 系统服务的 scripts (可以想成是批次檔 )的地方。而在 /etc/rc.d/rc.local 这个文件是开机的执行档。
 
/bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的数据都放在这几个目录中,所以如果你在提示字符下找不到某个执行档时,可以在这四个目录中查一查!其中, /bin, /usr/bin 是给系统使用者使用的指令,而 /sbin, /usr/sbin 则是给系统管理员使用的指令!  
/usr/local: 这是系统预设的让你安装你后来升级的套件的目录。例如,当你发现有更新的 Web 套件(如 Apache )可以安装,而你又不想以 rpm 的方式升级你的套件,则你可以将 apache 这个套件安装在 /usr/local 底下。安装在这里有个好处,因为目前大家的系统都是差不多的,所以如果你的系统要让别人接管的话,也比较容易上手呀!也比较容易找的到数据喔!因此,如果你有需要的话,通常我都会将 /usr/local/bin 这个路径加到我的 path 中。 
/home: 这个是系统将有账号的人口的家目录设置的地方。
/var: 这个路径就重要了!不论是登入、各类服务的问题发生时的记录、以及常态性的服务记录等等的记录目录,所以当你的系统有问题时,就需要来这个目录记录的文件数据中察看问题的所在啰!而 mail 的预设放置也是在这里,所以他是很重要的
 
/usr/share/man, /usr/local/man: 这两个目录为放置各类套件说明档的地方,例如你如果执行 man man,则系统会自动去找这两个目录下的所有说明文件
文件种类:
谈完了文件格式之后,再来谈谈所谓的文件种类吧!我们在刚刚的属性介绍中提到了最前面的标志 ( d 或 – ) 可以代表目录或文件,那就是不同的文件种类啦!Linux 的文件种类主要有底下这几种:
正规文件( regular file ):就是一般类型的文件,在由 ls –al 所显示出来的属性方面,第一个属性为 [ – ]。另外,依照文件的内容,又大略可以分为两种文件种类:
纯文字文件(ascii) :这是 Unix 系统中最多的一种啰,几乎只要我们可以用来做为设定的文件都属于这一种;
二进制文件(binary) :通常执行档除了 scripts (文字型批次文件)之外,就是这一种文件格式;
目录 (directory):就是目录!第一个属性为 [ d ];
连结档 (link):就是类似 Windows 底下的快捷方式啦!第一个属性为 [ l ];
设备档 (device):与系统周边相关的一些文件,通常都集中在 /dev 这个目录之下!通常又分为两种:
区块 (block) 设备档 :就是一些储存数据,以提供系统存取的接口设备,简单的说就是硬盘啦!例如你的一号硬盘的代码是 /dev/hda1 等等的文件啦!第一个属性为 [ b ];
字符 (character) 设备档 :亦即是一些串行端口的接口设备,例如键盘、鼠标等等!第一个属性为 [ c ]。
Linux 的文件系统( inode ):
在 Linux 系统当中,每个文件不止有文件的内容数据,还包括文件的种种属性,例如:所属群组、所属使用者、能否执行、文件建立时间、文件特殊属性等等。我们将每个文件的内容分为两个部分来储存,一个是文件的属性,另一个则是文件的内容。
为了应付这两个不同的咚咚,所以 ext2 规划出 inode 与 Block 来分别储存文件的属性( 放在 inode 当中 )与文件的内容( 放置在 Block area 当中 )。当我们要将一个 partition 格式化( format )为 ext2 时,就必须要指定 inode 与 Block 的大小才行,也就是说,当 partition 被格式化为 ext2 的文件系统时,他一定会有 inode table 与 block area 这两个区域。
Block 已经在前面说过了,他是数据储存的最小单位。那么 inode 是什么?!简单的说, Block 是记录『文件内容数据』的区域,至于 inode 则是记录『该文件的相关属性,以及文件内容
放置在哪一个 Block 之内』的信息。简单的说, inode 除了记录文件的属性外,同时还必须要具有指向( pointer )的功能,亦即指向文件内容放置的区块之中,好让操作系统可以正确的去
取得文件的内容啊
原文:iteye.com

CentOS/RHEL:如何安装字体文件“宋体/新宋体”

在centos 或者rhel系统下当你把系统的编码改为zh_CN后,系统里的中文都不能正常显示,这是因为缺少必要的字体文件,所以我们需要在系统里安装字体文件。那么如何来安装呢?本文将会讲述如何在centos系统下安装字体“宋体”和“新宋体”。
安装步骤如下:
1. #cd /usr/share/fonts/default
2. mkdir -p ./truetype/simsun
3. 取得simsun.tcc文件;如果网上下载不到则在windows操作系统取得该文件
4. 上传simsun.tcc文件到/usr/share/fonts/default/truetype/simsun目录中
5. 执行 mkfontscale,生成了fonts.scale文件
6. 执行 mkfontdir,生成了fonts.dir文件
7. chkfontpath -a /usr/share/fonts/default/truetype/simsun
8. service xfs reload
重新登录,即可正确显示中文了。

CentOS/RHEL:如何配置点对点的VPN 服务器

一个传统的 VPN(如 OpenVPN、PPTP)由一个 VPN 服务器和一个或多个连接到这台服务器的客户端组成。当任意两个 VPN 客户端彼此通信时,VPN 服务器需要中继它们之间的 VPN 数据流量。这样一个中心辐射型的 VPN 拓扑结构存在的问题是,当连接的客户端增多以后,VPN 服务器很容易成为一个性能上的瓶颈。从某种意义上来说,中心化的 VPN 服务器也同样成为一个单点故障的来源,也就是当 VPN 服务器出现故障的时候,整个 VPN 都将无法被任何 VPN 客户端访问。
centos vpn
点对点 VPN(又称 P2P VPN)是另一个 VPN 模型,它能解决传统的基于服务器-客户端模型的 VPN 存在的这些问题。一个 P2P VPN 中不再有一个中心的 VPN 服务器,任何拥有一个公开 IP 地址的节点都能引导其他节点进入 VPN。当连接到一个 VPN 之后,每一个节点都能与 VPN 中的任何其他节点直接通信,而不需要经过一个中间的服务器节点。当然任何节点出现故障时,VPN 中的剩余节点不会受到影响。节点中的延迟、带宽以及 VPN 扩展性在这样的设定中都有自然的提升,当你想要使用 VPN 进行多人游戏或者与许多朋友分享文件时,这都是十分理想的。
开源的 P2P VPN 实现已经有几个了,比如 Tinc、peerVPN,以及 n2n。在本教程中,我将会展示如何在 Linux 上用 n2n 配置点对点 VPN。
n2n 是一个开源(GPLv3)软件,它允许你在用户间构建一个加密的 2/3 层点对点 VPN。由 n2n 构建的 VPN 是“对 NAT 友好”的,也就是说,不同 NAT 路由器后方的两个用户可以通过 VPN 直接与对方通信。n2n 支持对称的 NAT 类型,这是 NAT 中限制最多的一种。因此,n2n 的 VPN 数据流量是用 UDP 封装的。
一个 n2n VPN 由两类节点组成:边缘(edge)节点和超级(super)节点。一个边缘节点是一台连接到 VPN 的电脑,它可能在一个 NAT 路由器后方。一个超级节点则是拥有一个可以公共访问的 IP 地址的电脑,它将会帮助 NAT 后方的边缘节点进行初始通信。想要在用户中创建一个 P2P VPN 的话,我们需要至少一个超级节点。
centos vpn
准备工作
在这篇教程中,我将会创建一个拥有 3 个节点的 P2P VPN:一个超级节点和两个边缘节点。唯一的要求是,边缘节点需要能够 ping 通超级节点的 IP 地址,而它们是否在 NAT 路由器之后则没有什么关系。
在 Linux 上安装 n2n
若想用 n2n 构建一个 P2P VPN,你需要在每个节点上安装 n2n,包括超级节点。
由于它非常精简的依赖需求,在大多数 Linux 平台上 n2n 都能被轻松编译。
在基于 Debian 的系统上安装 n2n:

$ sudo apt-get install subversion build-essential libssl-dev
$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
$ cd n2n/n2n_v2
$ make
$ sudo make install
 

在基于 Red Hat 的系统上安装 n2n:

$ sudo yum install subversion gcc-c++ openssl-devel
$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n
$ cd n2n/n2n_v2
$ make
$ sudo make install
 

用 n2n 配置一个 P2P VPN
如前文所述,我们需要至少一个超级节点,它将会作为一个初始化引导服务器。我们假设这个超级节点的 IP 地址是 1.1.1.1。
超级节点:
在一个作为超级节点的电脑上运行下面的命令。其中“-l <端口>”指定超级节点的监听端口。运行 supernode 并不需要 root 权限。

$ supernode -l 5000
 

边缘节点:
在每个边缘节点上,使用下面的命令来连接到一个 P2P VPN。edge 守护程序将会在后台运行。
边缘节点 #1:

$ sudo edge -d edge0 -a 10.0.0.10 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5b
 

边缘节点 #2:

$ sudo edge -d edge0 -a 10.0.0.11 -c mynetwork -u 1000 -g 1000 -k password -l 1.1.1.1:5000 -m ae:e0:4f:e7:47:5c
 

下面是对命令行的一些解释:
“-d <接口名>”选项指定了由 edge 命令创建的 TAP 接口的名字。
“-a ”选项(静态地)指定了分配给 TAP 接口的 VPN 的 IP 地址。如果你想要使用 DHCP,你需要在其中一台边缘节点上配置一台 DHCP 服务器,然后使用“-a dhcp:0.0.0.0”选项来代替。
“-c <组名>”选项指定了 VPN 组的名字(最大长度为 16 个字节)。这个选项可以被用来在同样一组节点中创建多个 VPN。
“-u”和“-g”选项被用来在创建一个 TAP 接口后降权放弃 root 权限。edge 守护进程将会作为指定的用户/组 ID 运行。
“-k <密钥>”选项指定了一个由 twofish 加密的密钥来使用。如果你想要将密钥从命令行中隐藏,你可以使用 N2N_KEY 环境变量。
“-l ”选项指定了超级节点的监听 IP 地址和端口号。为了冗余,你可以指定最多两个不同的超级节点(比如 -l <超级节点 A> -l <超级节点 B>)。
“-m ”给 TAP 接口分配了一个静态的 MAC 地址。不使用这个参数的话,edge 命令将会随机生成一个 MAC 地址。事实上,为一个 VPN 接口强制指定一个静态的 MAC 地址是被强烈推荐的做法。否则,比如当你在一个节点上重启了 edge 守护程序的时候,其它节点的 ARP 缓存将会由于新生成的 MAC 地址而遭到污染,它们将不能向这个节点发送数据,直到被污染的 ARP 记录被消除。
centos vpn
至此,你应该能够从一个边缘节点用 VPN IP 地址 ping 通另一个边缘节点了。
故障排除
1.在调用 edge 守护程序的时候得到了如下错误。

 n2n[4405]: ERROR: ioctl() [Operation not permitted][-1]
 

注意 edge 守护进程需要超级用户权限来创建一个 TAP 接口。因此需要确定用 root 权限来执行,或者对 edge 命令设置 SUID。之后你总是可以使用“-u”和“-g”选项来降权放弃 root 权限。
总结
n2n 可以成为对你来说非常实用的免费 VPN 解决方案。你可以轻松地配置一个超级节点,无论是用你自己家里的网络,还是从云主机提供商购买一个可以公共访问的 VPS 实例。你不再需要把敏感的凭据和密钥放在第三方 VPN 提供商的手里,使用 n2n,你可以在你的朋友中配置你自己的低延迟、高带宽、可扩展的 P2P VPN。
你对 n2n 有什么想法吗?请在评论中分享你的观点。
原文:Linux中国

CentOS/RHEL:如何删除系统中旧的内核(kernel)

当你更新系统的时候,也会默认的更新系统的内核,这样系统中的内核版本就会比较多,那么CentOS 更新了内核之后,会导致启动时会增加很多启动项,如果我们可以删除旧的内核的话,那样就可以保持系统内核启动项的简洁,保留最新的内核,这样可以释放一些磁盘空间(/boot)。本文将会从下面的两个方法来删除系统中旧的内核版本。
1# 查看已经安装的内核
输入下面的命令:

rpm -q kernel
 

显示结果:

kernel-2.6.32-279.14.1.el6.i686
kernel-2.6.32-279.el6.x86_64
kernel-2.6.32-358.6.1.el6.x86_64
 

2# 删除旧的内核
方法一:
安装yum-utls: yum install -y yum-utils
设置你想要保留多少旧的内核,比如我想保留两个:sudo package-cleanup –oldkernels –count=2
再次用rpm -q kernel查看内核信息,只剩最新的两个:

kernel-2.6.32-279.el6.x86_64
kernel-2.6.32-358.6.1.el6.x86_64
 

方法二:
输入下面的命令,卸载掉其中的一个老的内核版本:

rpm -e kernel-2.6.32-279.14.1.el6.i686
 

3#设置永久的内核安装数量 ,我设置的是两个

sudo vi /etc/yum.conf
 

设置

installonly_limit=2
 

当你重启后你就会看到只剩下两个内核启动项了。

CentOS/RHEL:如何查看系统的发行版本号

对于linux系统,有很多不同的发行版本,比如说redhat, fedora, centos, ubuntu 或者其它的很多不同版本。那么如何来查看远程主机的linux发行版本呢。本文将会讲述查看linux发行版本的方法。
如何查看远程主机CentOS的版本?
通过 /etc/issue 文件,这个文件是控制台界面,用来登录时的提示信息的,而这个提示信息就有CentOS的版本。
下面就显示一下我的电脑的CentOS版本:

        [root@syy ~]# cat /etc/issue
        CentOS release 6.5 (Final)
        Kernel \r on an \m
        [root@syy ~]#
 

从上面的输出可以看出linux的发行版本是CentOS 6.5 。

CentOS 7/RHEL 7: 如何创建本地YUM软件仓库源

本文中的“本地YUM源”包括三种类型:一是直接使用CentOS光盘作为本地yum源,优点是简单便捷,缺点是光盘软件包可能不完整(centos 7 Everything 总共才6.57G);二是同步CentOS官方源到本地(相当于创建了一个公共镜像),优点是最靠谱,缺点是占空间费流量;三是创建完全自定义的本地源,优点是灵活性最大,缺点是只是作为其他源的补充。本文将会从下面三个方法来讲述如何搭建centos 7系统的yum 软件源仓库
一、使用CentOS光盘作为本地yum源
(1) 实体机上直接放入光盘
(2) VMware Workstation 虚拟机:虚拟机–>可移动设备–>CD/DVD–>连接

mkdir /mnt/cdrom #创建目录
mount /dev/cdrom /mnt/cdrom #挂载
umount /mnt/cdrom #卸载
 

若不想每次都要放光盘,那就复制光盘文件到本地硬盘吧

cp -avf /mnt/cdrom /yum # -a:该选项保留链接、文件属性,并递归地复制目录
 

创建repo文件

    cat >>/etc/yum.repos.d/CentOS-Local.repo<<-EOF
    &#91;Local&#93;
    name=Local Yum
    baseurl=file:///yum/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    enabled=1
 &#91;/code&#93;
问:为什么连createrepo软件都不用安装?
createrepo 的作用是创建索引文件的(位于repodata文件夹),光盘中连GPG-KEY都有了。
<strong>二、如何为CentOS创建公共镜像</strong>
详细说明见官方中文文档:http://wiki.centos.org/zh/HowTos/CreatePublicMirrors
提供一个SHELL脚本,然后cron自动运行~~
http://wangyan.org/blog/centos-local-yum-repo.html
脚本稍作修改,换成中科大的镜像源。可用镜像列表见:http://www.centos.org/download/mirrors/
 
    localpath="/mirrors/CentOS"
    mirror="mirrors.hustunique.com::centos"
    rsync="rsync -avzH --delete"
    verlist="7"
    baselist="centosplus extras fasttrack os updates"
    archlist="x86_64"
    for ver in $verlist
    do
        for base in $baselist
        do
            for arch in $archlist
            do
                remote=$mirror/$ver/$base/$arch/
                mkdir -pv $localpath/$ver/$base/$arch/
                $rsync $remote $localpath/$ver/$base/$arch/
            done
        done
    done
 

三、创建完全自定义的本地源
把平时收藏的一些RPM软件包放在一个目录里,就变成一个自定义源了,可以用YUM来管理,灵活性相当大。
1、创建本地yum仓库

    mkdir -p /yum/local #可以有N级目录
    cp ... #复制RPM包到上述目录
 

2、创建repo文件

    cat >>/etc/yum.repos.d/CentOS-Local.repo<<-EOF
    &#91;Local&#93;
    name=Local Yum
    baseurl=file:///yum/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    enabled=1
 &#91;/code&#93;
<strong>3、安装createrepo</strong>
 
    yum install createrepo #使用yum安装createrepo
    rpm -ivh http://mirror.centos.org/centos/7/os/x86_64/Packages/createrepo-0.9.9-23.el7.noarch.rpm
 

4、创建索引

    createrepo /yum
    yum makecache #更新缓存
 

四、添加yum源

     [1] Add RPMforge Repository for yum because that has many useful packages.
    [root@dlp ~]#
    wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
    [root@dlp ~]#
    rpm -Uvh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
    Preparing… ###################################### [100%] 1:rpmforge-release ###################################### [100%]
    [root@dlp ~]#
    sed -i -e "s/enabled = 1/enabled = 0/g" /etc/yum.repos.d/rpmforge.repo
    [2] Add repository EPEL that is provided from Fedora project.
    [root@dlp ~]#
    wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    [root@dlp ~]#
    rpm -Uvh epel-release-6-8.noarch.rpm
    Preparing… ###################################### [100%] 1:epel-release ###################################### [100%]
    [root@dlp ~]#
    sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/epel.repo
 

五、参考
http://m.oschina.net/blog/88071
http://jingyan.baidu.com/article/e9fb46e1aed8207521f7662c.html
http://blog.chinaunix.net/uid-28283843-id-3930474.html
http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-102-5/

CentOS/Linux: 如何压缩并解压缩归档文件

在日常的工作中我们经常需要将多个文件做归档处理即打包成一个文件。本文将会讲述如何来压缩文件以及如何解压缩文件。
1. 文件压缩的原理:目前,计算机系统中都是使用bytes单位来计量的,不过,事实上,计算机最小的计量单位应该是bits才对,此外,我们也知道1byte=8bits。即每个byte当中会有8个空格,而每个空格可以是0或1,所以,如果我们要记录1这个数字,那么就会将另外的7个空格浪费掉。而压缩技术就是通过一些算法,将这些没有使用的控件丢出来,以让档案占用的空间变小。另一种压缩技术将重复的数据进行统计记录。比如,1111……1共100个1时,压缩技术就会记录为100个1,而不是实际存储100个1。
2. 文件后缀与压缩方式
1)*.Z:compress程序压缩的档案
2)*.gz:gzip程序压缩过的档案
3)*.bz2:bzip2程序压缩的档案
4)*.tar:tar程序打包的数据,并没有压缩过。
5)*.tar.gz:tar程序打包的档案,并且经过gzip压缩过
6)*.tar.bz2:tar程序打包的档案,并且经过bzip2的压缩
3. linux上常见的压缩指令就是gzip与bzip2,至于compress已经退出流行了。gzip是由GNU计划所开发出来的指令,该指令已经取代了compre。后来GNU又开发出bzip2这个压缩比更好的压缩指令。不过,这些指令通常仅能针对一个档案压缩与解压缩,如此一来,每次压缩与解压缩都要一大堆档案。因此,可以用tar进行打包。tar将很多档案打包成一个档案,甚至是目录。单纯的tar只是打包的功能。
4.compress [-rcv] 档案或目录:非常老的指令,需要安装ncompress软件。gzip可以解开这个指令压缩的档案。
1)-r:可以连同目录下的档案同时压缩
2)-c:将压缩数据输出到屏幕,可以通过>filename 另存到指定的档案,源文件依然存在
3)-v:可以显示出压缩后的档案信息以及压缩过的一些档案名变化
在预设情况下,源文件会被压缩文件替换掉。
uncompress 档案.Z:解压文件,解压后会去掉后缀,还原成源文件。
5. gzip [-cdtv#] 档名;zcat 档名.gz:压缩解压缩档案,参数:
1)-c:将压缩的数据显示到屏幕上,可透过数据流导向来处理
2)-d:加压缩的参数
3)-t:可以用来检验一个压缩文件的一致性,看档案有无错误
4)-v:可以显示出原档案/压缩文件的压缩比等信息
5)-#:压缩等级,-1最快,但压缩比最差,-9最慢,但压缩比最好,预设是-6,在#处输入数字
该指令在预设情况下会将档案压缩成后缀为.gz的档案名,源文件就不再存在了。另外该指令压缩的文件也可以被windos下的winrar软件解压。
zcat这个指令可以读取gzip压缩后的文件
6. bzip2 [-cdkzv#] 档名,bzcat 档名.bz2:提供比gzip更好的压缩方案,参数:
1)-c:将压缩的过程产生的数据输出到屏幕上
2)-d:解压缩的参数
3)-k:保留源文件,而不会删除原始档案
4)-z:压缩的参数
5)v:可以显示出原档案/压缩文件案的压缩比等信息
6)-#:与gzip同样的,都是在计算压缩比参数,-9最佳,-1最快
bzcat:同样可以读取压缩过的文件
7. tar [-jz] [cv] [-f 建立的档名] filename:打包并压缩
tar [-jz] [tv] [-f 建立的档名] :查看档名
tar [-jz] [xv] [-f 建立的档名] [-C 目录] :解压缩
参数:
1)-c:建立打包档案,可搭配-v来擦看过程中被打包的档名
2)-t:查看打包档案的内容还有哪些档名
3)-x:解包或解压缩的功能,可以搭配-C在特定目录下解开
特别注意:-c,-t,-x不能同时出现在一条指令中
4)-j:透过bzip2的支持进行压缩/解压缩:此时档案名最后为*.tar.bz2
5)-z:透过gzip的支持进行压缩/解压缩:此时档名最好为tar.gz
6)-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来
7)-f filename:-f后面要立刻接要被处理的档名
8)-C目录:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项
9)-p:保留备份数据的原本权限与属性,常用于备份重要的配置文件
10)-P:保留绝对路径,亦即允许备份数据中含有根目录存在之意
11)–exclude=FILE:在压缩过程中,不要讲FILE打包。
指令套餐:
压缩:tar –jcv –f filename.bar.bz2 要被压缩的档案或目录名称
查询:tat –jtv –f filename.tar.bz2
减压缩:tar –jxv –f filename.tar.bz2 -C 欲解压缩的目录
上述j的位置也可换成-z代表gzip压缩方式。
8. dump [-Suvj] [-level] [-level] [-f 备份档案] 待备份的档案;dump W:参数,
1)-S:仅列出后面的待备份数据需要多少空间才能备份完毕
2)-u:将这次dump的时间记录到etc/dumpdates档案中
3)-v:将dump的档案过程显示出来
4)-j:加入bzip2的支持,将数据进行压缩,默认是bzip2压缩等级为2
5)-level:等级,从-0~-8
6)-f filename:后面接产生的档案
7)-W:列出在etc/fstab里面的具有dump设定的partition是否有备份过
9. restore -r [-f dumpfile]:还原整个文件系统,参数:
1)-t:此模式用在查看dump起来的备份文件中含有什么重要数据
2)-C:此模式可以将dump内的数据拿出来跟实际文件系统作比较
3)-i:进入互动模式,可以仅还原部分档案,用在dump目录时的还原
4)-r:将整个文件系统还原的一种模式,用在还原针对文件系统dump备份
5)-h:查看完整备份数据中的inode与文件系统label等信息
6)-f:后面就接你要处理的那个dump档案
7)-D:与-C进行搭配,可以查出后面接的挂载点与dump内有不同的档案。
10. mkisofs [-o 映像档][-rv][-m file] 待备份的文件 …[-V vol] –graft-point isodir=systemdir …,参数:
1)-o:后面接你想要产生的那个映像档档名
2)-r:透过Rock Ridge产生Unix/Linux的档案数据,可记录较多的信息
3)-v:显示建置ISO的过程
4)-m file:-m为排除档案的意思,后面的档案不备份到映像档
5)-V vol:建立Volume,有点像Windos在档案总管内看到的CD title的东西
6)-graft-point:graft有转嫁或移植的意思,
11. cdrecord:光盘刻录指令
12 .dd -if=inputfile of=outfile bs=blocksize count=number:参数,
1)if:就是要备份的档案,也可以是装置
2)of:就是备份的目标档案,也可以是装置
3)bs:规划的一个block大小,若未指定则预设512bytes
4)count:多少个bs的意思
13. cpio –ovcB >[file|device] 备份;cpio -ivcdu <[file|device] 还原;cpio -ivct <[file|device] 查看,参数:
1)-o:将数据copy输出到档案或装置上
2)-B:让预设的Blocks可以增加至5120bytes,预设是512bytes,这样可以让大档案存取速度更快
3)-i:将数据自档案或装置copy到系统当中
4)-d:自动建立目录
5)-u:自动将较新的档案覆盖较旧的档案
6)-t:需要配合-i选项,可用在“查看”以cpio建立的档案或装置的内容
7)-v:让存储的过程中文件名可以在屏幕上显示
8)-c:一种较新的portable format方式存储

9个常用的查看文件内容的linux命令

在centos或者rhel系统下如何来查看目录下的文件内容,本文将会介绍9个常用的linux命令用来查看文件的内容
1. cat [-AbEnTv] 文件路径:以只读的形式显示指定的文件,参数:
1)-A:等于-vET,可以列出一些特殊字符而不是空白而已
2)-b:列出行号,仅列出非空百行的行号
3)-E:将结尾的断行以$符显示出来
4)-n:打印出行号(包括空白行)
5)-T:将Tab键以^I显示出来
6)-v:列出一些看不出来的特殊字符
2.tac 文件路径:从后到前的显示文件。
3.nl [-bnw] 文件名:添加行号输出,参数:
1)-b:指定好好的显示方式,-b a:列出包括空行在内的行号;-b t:列出非空行的行号(默认)。
2)-n:列出行号的表示方法,-n ln:行号在屏幕的最左方显示;-n rn:行号在自己字段的最右方显示,且不加0;-n rz:行号在自己字段的最右方显示,且加上0
3)-w:行号字段的占用位数
以上这些指令都是直接将整个文件名,显示在屏幕上,下面指令可以实现分页。
4.more 文件名路径:以分页的形式显示文件名,打开时,快捷键有:
空格键:向下翻页
Enter:向下一行
/字符串:向下搜索指定的字符串
q:离开more
b或ctr+b:上一页,对管线无效
5.less 文件名路径:以分页的形式显示文件名,打开时,快捷键有:
空格键或pagedown:向下翻页
pageup:向上翻页
/字符串:向下搜索指定的字符串
?字符串:向上搜索指定的字符串
n:重复前一个搜寻
N:方向重复前一个搜寻
q:离开more
6.head [-n] number 文件名路径:列出文件名的前n行,如果n为负数,则表示列出到倒数n行哪里。
7.tail [-fn] number 文件名路径:取后面几行,参数:
-nnumber:显示最后number行,默认显示最后10行,若在number前加+行,则表示显示number行以后的内容
-f:持续侦测后面接的档名,需要ctr+c终止。(常用来监听日志文件)
8.od [t TYPE] 文件名:读取二进制文件,其中TYPE的类型有,a:利用默认的字符来显示,c:使用ASCII字符来输出,d[size]:利用十进制来输出数据,每个整数占用size bytes;f[size]:利用浮点数来输出数据,每个数占用size bytes;o[size]:利用八进制来输出数据,每个整数占用size bytes;x[size]:利用十六进制来输出数据,每个整数占用size bytes。
9.touch [-acdmt] 文件名:创建空文件名,或修改文件名的各种时间,参数:
1)-a:仅修订atime
2)-c:仅修改文件名的时间,若文件名不存在则不建立新文件名
3)-d:后面可以接欲修订的日期而不用是当前日期,也可以使用—date=”日期或时间”,可以用”2 days ago”这种语句
4)-m仅修改mtime
5)-t后面可以接欲修订的时间而不用是当前时间,格式为[YYMMDDhhmm] 若文件名不存在则表示新建空文件名各个时间值均为当前时间。
原文:51cto

centos/Linux 系统运行级别和启动过程

对于linux初学者来说,了解linux系统的运行级别以及系统的启动过程是必须要掌握的知识。也是学习linux的基础。本文将会讲述linux系统里都有那些运行级别以及linux系统的启动过程。
Linux 系统主要运行级别
1)0:关机
2)1:单用户
3)2:多用户状态没有网络服务
4)3:多用户状态有网络服务
5)4:系统未使用保留给用户
6)5:图形界面
7)6:系统重启
注:常用运行级别是3和5,要修改运行级别可改文件/etc/inittab的id:5:initdefault中的数字。
linux系统启动过程:
1)加载BIOS,当你打开计算机电源,计算机会首先加载BIOS信息,BIOS中包含了CPU相关信息,设备启动顺序信息,硬盘信息,内存信息,PnP特性等等。这样计算机就知道去读取哪个硬件设备了。
2)读取MBR,众所周知,磁盘第0磁道第一个扇区被称为MBR(Master Boot Record),即主引导记录,它的大小是512字节,存有预启动信息,分区表信息。系统找到BIOS所指定的硬盘MBR后,就会将其复制到0X7c00地址所在的物理内存中。内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
3)Boot Loader:就是在操作系统内核运行之前的一段小程序。通常这段小程序,我们可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。Boot Loader有若干种,其中最常用的有Grub,Lilo和spfdisk。比如grub,系统同会读取内存中的grub配置信息(一般是menu.lst,或grub.lst),并按照此配置信息来启动不同的操作系统。
4) 加载内核:根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK,booting the kernel”。系统将解压后的内核放置在内存中,并调用star_kernel()函数来启动一系列的初始化函数,并初始化各种设备,完成linux核心环境的建立。至此,linux内核已经建立起来了,基于linux的程序应该可以正常运行了。
5) 用户层init依据inittab文件来设定运行级别:内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件进行初始化工作。其实/init/inittab文件最主要的作用就是设定Linux运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。运行等级见1。
6) init进程执行rc.sysinit:在设定了运行等级后,linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序它做的工作非常多,包括设定Path,设定网络配置(/etc/sysconfig/network)、启动swap分区,设定/proc等等。
7)启动内核模块:具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
8) 执行不同运行级别的脚本程序:根据运行界别的不同,系统运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
9) 执行/etc/rc.d/rc.local:rc.local就是在一切初始化工作后,linux留给用户进行个性化的地方。你可以把你想要设置和启动的东西放到这里。
10)执行/bin/login程序,进入登录状态:此时,系统已经进入到等待用户输入username和password的时候了,你已经可以用自己的账号登入系统了。
原文:http://blog.chinaunix.net/uid-26495963-id-3066282.html

CentOS/Linux:如何修改系统的硬件时间

在centos linux里有两种时间,一种是系统的当前时间,另一种是系统的硬件时间,也就是有系统bios维护的时间。在linux下,如果只是用date命令更改了系统时间,那么系统重启后,依旧是不对的,所以我们可以直接设置系统的硬件时间,这样系统启动后,系统就会自动读取硬件时间并更新为当前系统时间。
使用Centos,遇到本地时间对不上,直接敲命令:date -s “2014-12-25 15:15:15″是立即生效了,但是重启后,系统时间还是原来的。
1.date {查看目前本地的时间}

[root@osetc ~]# date
Wed Jan  7 10:10:59 CST 2015
 

2.hwclock –show {查看硬件的时间}

[root@osetc ~]# hwclock --show
Wed 07 Jan 2015 10:11:19 AM CST  -0.793403 seconds
 

3.如果硬件的时间是对不上,那就对硬件的时间进行修改、
4.hwclock –set –date ‘014-12-15 15:15:15’ {设置硬件时间}
5.hwclock –hctosys {设置系统时间和硬件时间同步}
6.clock -w {保存时钟}
7.最后在通过重启,init 6 快速重启后,查看系统时间是否真正生效!!!!1

CentOS/Linux:如何配置SSH无密码登录

当你在搭建集群或者在配置hadoop大数据集群环境的时候,都需要配置节点之间的无密码访问。本文将会讲述如何来设置ssh无密码登录。
ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,以CentOS为例。
有机器A,B。现想A通过ssh免密码登录到B。
1.在A机下生成公钥/私钥对。

[osetc@A ~]$ ssh -keygen -t rsa -P ''
 

-P表示密码,-P ” 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
它在登录用户的家目录下生成.ssh目录,.ssh下有id_rsa和id_rsa.pub。
2.把A机下的id_rsa.pub复制到B机下,在B机的.ssh/authorized_keys文件里,我用scp复制。

[test@A ~]$ scp .ssh/id_rsa.pub test@B:/home/chenlb/id_rsa.pub test@B's password: id_rsa.pub                                    100%  223     0.2KB/s   00:00
 

由于还没有免密码登录的,所以要输入密码。
3.B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里,如果没有.ssh/authorzied_keys,就新建一个。

[test@B ~]$ cat id_rsa.pub >> .ssh/authorized_keys [test@B ~]$ chmod 600 .ssh/authorized_keys
 

authorized_keys的权限要是600。
这样A机就可以登录B机了。

[test@A ~]$ ssh B
 The authenticity of host 'B (B)' can't be established. RSA key fingerprint is 00:a6:a8:87:eb:c7:40:10:39:cc:a0:eb:50:d9:6a:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'B' (RSA) to the list of known hosts.
Last login: Thu Jul  3 09:53:18 2008 from test
 

第一次登录是时要你输入yes
登录的机子可有私钥,被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对,当然也可以用dsa(对应的文件是id_dsa,id_dsa.pub)
想让A,B机无密码互登录,那B机以上面同样的方式配置即可。

CentOS/Linux:如何使用sudo命令

在linux系统中,由于root的权限过大,一般情况都不使用它。只有在一些特殊情况下才采用登录root执行管理任务,一般情况下临时使用root权限多采用su和sudo命令。
一、su和sudo命令对比:
在普通用户下输入su命令后,会提示输入root账户的密码,然后就进入特权模式(跟用root登录系统完全一样),输入exit或者su – user 退出:

$su
Password:
#ls /root
anaconda-ks.cfg  install.log  install.log.syslog
#exit
$ls /root
ls: cannot open directory /root: Permission denied #提示没有权限
 

而采用sudo命令,只需输入当前用户的密码(也可以配置为不输入密码)即可执行需要root权限执行的命令:

$ls /root
ls: cannot open directory /root: Permission denied #提示没有权限
 
$sudo ls /root
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for Oracle:    #输入普通用户oracle的密码
anaconda-ks.cfg  install.log  install.log.syslog
 

通过上面的对比可以看出,sudo比su有很多优点:
1、普通用户不需要知道root的密码即可执行需要root权限的命令;
2、不会因忘记退出而采用root执行了会引起破坏性的命令(初学linux经常犯这个错);
二、配置普通用户有使用sudo命令的权限:
在linux系统中,新建用户并没有执行sudo权限,如新建一个AAA的用户,输入sudo命令会有如下提示:

aaa is not in the sudoers file.  This incident will be reported.
 

这句的意思是在sudoers文件中不存在aaa这个用户,这个时间会被报告给管理员。既然知道问题处于sudoers这个文件,那我们就看看这个文件为何方神圣:

[root@dbs aaa]# vi /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# ost_Alias     MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
 

输入i,对文件进行编辑,发现底部有只读提示:
— INSERT — W10: Warning: Changing a readonly file
应该是没有权限,退出编辑状态后查看权限:

[root@dbs aaa]# ll /etc/sudoers
-r--r-----. 1 root root 3825 Jul 22 01:05 /etc/sudoers
 

原来root也只有只读权限,难怪,首先修改权限以让root有完全控制权限:

[root@dbs aaa]#chmod 740 /etc/sudoers
 

再次编辑,这次没有出现只读提示了,找到如下字段:

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
Oracle  ALL=(ALL)       ALL
aaa     ALL=(ALL)       ALL
 

添加aaa用户,添加后如aaa ALL=(ALL) ALL
修改完后输入:wq保存,保存后记得把权限修改回去,否则会有错误提示

#chmod 440 /etc/sudoers
 

权限一定是440,否则就会有错误提示。
OK,在aaa用户下就可以正常使用sudo命令咯。

CentOS/Linux:如何挂载移动硬盘并设置开机自动挂载

在centos linux系统下,如果我们想使用移动硬盘或新增加的硬盘里的数据,那么如何来挂载移动硬盘呢,并且如何设置当系统下次启动的时候,移动硬盘能够自动挂载。本文将会讲述挂载移动硬盘并设置自动挂载的方法。
Linux的硬盘识别:
sda 表示第1块SCSI硬盘
hda 表示第1块IDE硬盘
scd0 表示第1个USB光驱
一般使用“fdisk -l”命令可以列出系统中当前连接的硬盘
步骤:
1.关闭服务器加上新硬盘
2.启动服务器,以root用户登录
3.查看硬盘信息
输入下面的命令:

fdisk -l
 

输出:

 Disk /dev/sda: 146.1 GB, 146163105792 bytes
255 heads, 63 sectors/track, 17769 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
    Device Boot       Start          End       Blocks    Id   System
/dev/sda1    *            1           13       104391    83   Linux
/dev/sda2               14         5112     40957717+   83   Linux
/dev/sda3             5113         5243      1052257+   82   Linux swap /
Solaris
/dev/sda4             5244        17769    100615095     5   Extended
/dev/sda5             5244        17769    100615063+   83   Linux
Disk /dev/sdb: 291.3 GB, 291331192320 bytes
255 heads, 63 sectors/track, 17769 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb1: 291.3 GB, 291331192320 bytes
 

4.创建新硬盘分区
fdisk可以用m命令来看fdisk命令的内部命令;
a:命令指定启动分区;
d:命令删除一个存在的分区;
l:命令显示分区ID号的列表;
m:查看fdisk命令帮助;
n:命令创建一个新分区;
p:命令显示分区列表;
t:命令修改分区的类型ID号;
w:命令是将对分区表的修改存盘让它发生作用。
输入下面的命令:

fdisk /dev/sdb
 

输出:

Command (m for help):n
Command action
     e    extended    //输入e为创建扩展分区
     p    primary partition (1-4)
p
Partion number(1-4):1
Command (m for help): w
 

输入n回车,再输入p回车,再输出1回车,一路回车,最后输入w回车保存。
查看一下:fdisk -l
可以看到/dev/sdb1分区
5.格式化分区:
输入下面的命令:

mkfs.ext3 /dev/sdb1
 

6.创建/data目录:

mkdir /data
 

7.挂载分区:

mount /dev/sdb1 /data
 

8.配置开机自动挂载因为mount挂载在重启服务器后会失效,所以需要将分区信息写到/etc/fstab文件中让它永久挂载:

vi /etc/fstab
 

加入下面的行:

LABEL=/data             /data                   ext3     defaults         1 2
 

查看cat /etc/fstab

LABEL=/                  /                        ext3     defaults         1 1
LABEL=/data              /data                    ext3     defaults         1 2
LABEL=/boot              /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-hda3          swap                     swap     defaults         0 0
 

9.重启系统

reboot
 

CentOS/Linux:如何设置系统启动后直接进入命令行模式

本文将会讲述如何在centos linux系统下配置系统的运行级别。CentOS中如何进入图形界面和文字界面,Linux真正的服务器是不会运行图形化界面的,怎么样才能在不卸载桌面的前提下开机直接进入命令界面呢?(我安装的是CentOS 6.0)下面就简单介绍以下:
一、如果要进入图形界面:
1.首先得安装有图形界面,一般为X-window图形界面。
2.启动linux在终端下输入:startx 即可进入X11的图形操作界面。
二、在图形界面还可以在多个界面中进行切换:在X-window图形操作界面中按“Alt+Ctrl+功能键Fn n=1~6 ”就可以进入Console字符操作界面。按“Alt+Ctrl+F7”即可回到刚才的X-window中。
三、如何每次都自动进入xwindos或者字符界面?
开机后进入图形化界面还是进入命令行取决于inittab文件中的配置。该文件位于etc目录下。

# vi /etc/
 

找到下面的语句,并更改id的值为3:

# Default runlevel. The runlevels used by RHS are:
#1 – Single user mode    –单用户模式
#2 – Multiuser, without NFS (The same as 3, if you do not havenetworking)    –多用户模式,不支持NFS
#3 – Full multiuser mode    –多用户模式
# 4 – unused    –没有使用
# 5 – X11    –图形界面方式
# 6 – reboot (Do NOT set initdefault to this)    –重新启动
id:5:initdefault:    –默认运行等级是5,只要将此处改成 id:3:initdefault:即可
 

另外在文本模式如果想启动图形界面,可以使用下面的方法:

# startx
 

CentOS/Linux:如何利用iptables防火墙限速及限制IP的连接数

centos linux下的默认防火墙就是iptables,如何通过对iptable防火墙的设置来限速并限制每个IP地址的连接数呢。

第一步:建立adsl连接,在系统设置——网络设置处有。在图形界面下很容易搞定。
第二步:打开IP转发和伪装(也就是路由与NAT)
1、作为根用户打开/etc/sysconfig/network文件,在文件增加以下一行: GATEWAYDEV=PPP0 这句话的作用是设定默认路由,有时没有也可
2、打开IP转发功能:打开/etc/sysctl.conf文件,修改net.ipv4.ip_forward=0一行,改0改为1
3、重启系统 第三步,设置iptables防火墙,决定那些IP能通过linux主机上网。 下面以允许 192.168.0.0网段为例:
(1)、打开终端在#字提示符下输入以下命令:

iptables -t nat -I POSTROUTING -o ppp0 -j MASQUERADE #这句意思是伪装从pppo出去的
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT #这句意思是转发来自192.168.0.0网段的通讯
iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT #这句意思是转发到达192.168.0.0网段的通讯
iptables -A FORWARD -s ! 192.168.0.0/24 -j DROP #这句意思是拒绝转发非192.168.0.0网段的通讯。
 

(2)、保存以上防火墙规则,以保证重启后还有效 输入下面命令:

iptables-save > /etc/sysconfig/iptables
 

这样,你的linux路由器应该就能跑起来了。
PS: 所有命令都要区分大小写。 限速的实现:在linux中有专门限速的软件–tc,但TC的语法新手难以掌握,我们可以在防火墙上通过限定某个IP或某段IP在一秒内通过的数据包的 数量来限速。 下面以限制192.168.0.2这个IP的网速为例说说。 在桌面环境下打开/etc/syscofngi/iptables 有没有发现,刚才的设定全记录在这个文件里,现在做的就在这个文件里添加规则就得了。
1、先要找到filter
2、在filter下面一行增加以下两行

-A FORWARD -m limit -d 192.168.0.2 --limit 30/sec -j ACCEPT
# 这句意思是限定每秒只转发30个到达192.168.0.2的数据包(约每秒45KB 一个数据包是1.5KB)
-A FORWARD -d 192.168.0.2 -j DROP
#这句作用是超过限制的到达192.168.0.2的数据包不通过)
 

(3)、重启系统,限速就实现了。

reboot
 

(4)、限制上传速度也一样,把上面两条中的d 改为s就得了。 限制每ip连接数 ,内核 2.3以上,否则要打conlimit补丁,重编译内核。

iptables -I FORWARD -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT
iptables -I INPUT -p tcp -s 192.168.0.0/24 -m connlimit --connlimit-above 20 -j REJECT
 

CentOS/linux:如何使用性能监测工具 dstat

在进行性能测试的时候,我们一般需要检测很多方面的数据,这些数据包括CPU占用,内存占用情况,网络状况,load average,进程信息,磁盘信息等等。利用系统提供的命令一般来说可以完成这些数据的监测,但是一般来说,这些命令都是分散的,比如vmstat,iostat,ss,netstat。但是这样一来,命令太分散了,此时就迫切需要一款,可以集中监控的工具, dstat 即可以实现集中监控上述各项指标:
特性:
结合了vmstat,iostat,ifstat,netstat以及更多的信息
实时显示统计情况
在分析和排障时可以通过启用监控项并排序
模块化设计
使用python编写的,更方便扩展现有的工作任务
容易扩展和添加你的计数器(请为此做出贡献)
包含的许多扩展插件充分说明了增加新的监控项目是很方便的
可以分组统计块设备/网络设备,并给出总数
可以显示每台设备的当前状态
极准确的时间精度,即便是系统负荷较高也不会延迟显示
显示准确地单位和和限制转换误差范围
用不同的颜色显示不同的单位
显示中间结果延时小于1秒
支持输出CSV格式报表,并能导入到Gnumeric和Excel以生成图形
dstat 默认情况下系统也并没有安装,下载链接:
Centos/Redhat下载链接: http://pkgs.repoforge.org/dstat/
dstat
安装完后就可以使用了,dstat非常强大,可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。
直接使用dstat,默认使用的是-cdngy参数,分别显示cpu、disk、net、page、system信息,默认是1s显示一条信息。可以在最后指定显示一条信息的时间间隔:默认情况下隔1秒显示一次,一直显示;
如 dstat 5 就是每5秒显示1条信息, dstat 1 10 即每1秒显示一条信息,一共显示10次;
默认情况下分五个区域:
1、 –total-cpu-usage—- CPU使用率
usr:用户空间的程序所占百分比;
sys:系统空间程序所占百分比;
idel:空闲百分比;
wai:等待磁盘I/O所消耗的百分比;
hiq:硬中断次数;
siq:软中断次数;
2、 -dsk/total- 磁盘统计
read:读总数
writ:写总数
3、 -net/total- 网络统计
recv:网络收包总数
send:网络发包总数
4、 —paging– 内存分页统计
in: pagein(换入)
out:page out(换出)
注:系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,通常情况下当系统已经开始用交换空间的时候,就说明你的内存已经不够用了,或者说内存非常分散,理想情况下page in(换入)和page out(换出)的值是0 0。
5、 –system– 系统信息
int:中断次数
csw:上下文切换
注:中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。
默认情况下,dstat 会每隔一秒刷新一次数据,一直刷新并一直输出,按 Ctrl+C 退出 “dstat”;
dstat 还有许多具体的参数,可通过man dstat命令查看,常用参数如下:
-l :显示负载统计量
-m :显示内存使用率(包括used,buffer,cache,free值)
-r :显示I/O统计
-s :显示交换分区使用情况
-t :将当前时间显示在第一行
–fs :显示文件系统统计数据(包括文件总数量和inodes值)
–nocolor :不显示颜色(有时候有用)
–socket :显示网络统计数据
–tcp :显示常用的TCP统计
–udp :显示监听的UDP接口及其当前用量的一些动态数据
这里只是一部分,dstat还附带一些插件扩展它的功能,可以查看/usr/share/dstat目录来查看它们的一些使用方法,常用的有这些:
–disk-util :显示某一时间磁盘的忙碌状况
–freespace :显示当前磁盘空间使用率
–proc-count :显示正在运行的程序数量
–top-bio :指出块I/O最大的进程
–top-cpu :图形化显示CPU占用最大的进程
–top-io :显示正常I/O最大的进程
–top-mem :显示占用最多内存的进程
例:
1、监控swap,process,sockets,filesystem并显示监控的时间
dstat
通过dstat –list可以查看dstat能使用的所有参数,其中上面internal是dstat本身自带的一些监控参数,下面/usr/share/dstat中是dstat的插件,这些插件可以扩展dstat的功能,如可以监控电源(battery)、mysql等。
但这些插件并不能直接使用,它只是列出了可以提供这些功能,如果想用具体的监控插件还需要安装对应的包;

CentOS和Redhat发行版linux内核版本的对应关系汇总

由于Redhat和CentOS的发行版本现在众多,所以我们应该知道CentOS和Redhat及linux内核之间版本的对应关系对维护系统还是很有帮助的。对应的列表如下:
Redhat 9.0———————————————2.4.20-8
RHEL 3 Update 8————————————2.4.21-47
RHEL 4 ————————————————2.6.9-5
RHEL 4 Update 1————————————2.6.9-11
RHEL 4 Update 2————————————2.6.9-22
RHEL 4 Update 3————————————2.6.9-34
RHEL 4 Update 4————————————2.6.9-42
RHEL 4 Update 5————————————2.6.9-55
RHEL 4 Update 6————————————2.6.9-67
RHEL 4 Update 7————————————2.6.9-78
CentOS 5/RHEL 5 ———————————2.6.18-8
CentOS 5.1/RHEL 5 Update 1——————2.6.18-53
CentOS 5.2/RHEL 5 Update 2——————2.6.18-92
CentOS 5.3/RHEL 5 Update 3——————2.6.18-128
CentOS 5.4/RHEL 5 Update 4——————2.6.18-164
CentOS 5.5/RHEL 5 Update 5——————2.6.18-194
CentOS 5.6/RHEL 5 Update 6——————2.6.18-238
CentOS 5.7/RHEL 5 Update 7——————2.6.18-274
CentOS 5.8/RHEL 5 Update 8——————2.6.18-308
CentOS 5.9/RHEL 5 Update 9——————2.6.18-348
CentOS 5.10/RHEL 5 Update 10——————2.6.18-371
CentOS 6.0/RHEL 6 Update 0——————2.6.32-71
CentOS 6.1/RHEL 6 Update 1——————2.6.32-131
CentOS 6.2/RHEL 6 Update 2——————2.6.32-220
CentOS 6.3/RHEL 6 Update 3——————2.6.32-279
CentOS 6.4/RHEL 6 Update 4——————2.6.32-358
CentOS 6.5/RHEL 6 Update 5——————2.6.32-431
更完整的一个对照表格
CentOS version Architectures[13]RHEL base KernelCentOS release dateRHEL release date Delay (days)
2.1 i386 2.1 2.4.9 14 May 2004[1] 17 May 2002[14] 728
3.1 i386, x86-64, IA-64, s390, s390x 3.1 2.4.21-15 19 March 2004[15] 23 October 2003[14] 148
3.3 i386, x86-64, IA-64, s390, s390x 3.3 2.4.21-20 17 September 2004 3 September 2004 14
3.4 i386, x86-64, IA-64, s390, s390x 3.4 2.4.21-27 23 January 2005 12 December 2004 42
3.5 i386 3.5 2.4.21-32 10 June 2005[16] 18 May 2005 23
3.6 i386 3.6 2.4.21-37 1 November 2005[17] 28 September 2005 34
3.7 i386, x86-64, IA-64, s390, s390x 3.7 2.4.21-40 10 April 2006[18] 17 March 2006 23
3.8 i386, x86-64 3.8 2.4.21-47 25 August 2006[19] 20 July 2006 36
3.9 i386, x86-64, IA-64, s390, s390x 3.9 2.4.21-50 26 July 2007[20] 15 June 2007 41
4.0 i386, x86-64, various 4.0 2.6.9-5 9 March 2005[21] 14 February 2005[22] 23
4.1 i386, IA-64, s390 4.1 2.6.9-11 12 June 2005[23] 8 June 2005 4
4.2 i386, x86-64, IA-64, s390, s390x, alpha 4.2 2.6.9-22 13 October 2005[24] 5 October 2005 8
4.3 i386, x86-64, IA-64, s390, s390x 4.3 2.6.9-34 21 March 2006[25] 12 March 2006 9
4.4 i386, x86-64 4.4 2.6.9-42 30 August 2006[26] 10 August 2006 20
4.5 i386, x86-64, IA-64 4.5 2.6.9-55 17 May 2007[27] 1 May 2007 16
4.6 i386, x86-64, IA-64, Alpha, s390, s390x, PowerPC (beta), SPARC (beta) 4.6 2.6.9-67 16 December 2007[28] 16 November 2007[29] 30
4.7 i386, x86-64 4.7 2.6.9-78 13 September 2008[30] 24 July 2008[31] 51
4.8 i386, x86-64 4.8 2.6.9-89 21 August 2009[32] 18 May 2009[33] 95
4.9 i386, x86-64 4.9 2.6.9-100 2 March 2011[34] 16 February 2011[35] 14
5.0 i386, x86-64 5.0 2.6.18-8 12 April 2007[36] 14 March 2007[37] 28
5.1 i386, x86-64 5.1 2.6.18-53 2 December 2007[38] 7 November 2007[39] 25
5.2 i386, x86-64 5.2 2.6.18-92 24 June 2008[40] 21 May 2008[41] 34
5.3 i386, x86-64 5.3 2.6.18-128 31 March 2009[42] 20 January 2009[43] 69
5.4 i386, x86-64 5.4 2.6.18-164 21 October 2009[44] 2 September 2009[45] 49
5.5 i386, x86-64 5.5 2.6.18-194 14 May 2010[46] 31 March 2010[47] 44
5.6 i386, x86-64 5.6 2.6.18-238 8 April 2011[48] 13 January 2011[49] 85
5.7 i386, x86-64 5.7 2.6.18-274 13 September 2011[50] 21 July 2011[51] 54
5.8 i386, x86-64 5.8 2.6.18-308 7 March 2012[52] 21 February 2012[53] 15
5.9 i386, x86-64 5.9 2.6.18-348 17 January 2013[54] 7 January 2013[55] 10
5.10 i386, x86-64 5.10 2.6.18-371 19 October 2013[56] 30 September 2013[57] 19
6.0 i386, x86-64 6.0 2.6.32-71 10 July 2011[58] 10 November 2010[59] 242
6.1 i386, x86-64 6.1 2.6.32-131 9 December 2011[60] 19 May 2011[61] 204
6.2 i386, x86-64 6.2 2.6.32-220 20 December 2011[62] 6 December 2011[63] 14
6.3 i386, x86-64 6.3 2.6.32-279 9 July 2012[64] 21 June 2012[65] 18
6.4 i386, x86-64 6.4 2.6.32-358 9 March 2013[66] 21 February 2013[67] 15
6.5 i386, x86-64 6.5 2.6.32-431 1 December 2013[68] 21 November 2013[69] 10
来源:51cto

CentOS/Linux:如何安装EPEL 软件仓库

在centos下,默认的yum 软件仓库并不会包含所有你想安装的包。那么如果想通过yum命令来安装不在yum默认软件库里的包的时候,就可以尝试安装EPEL软件仓库
想用Red Hat Enterprise Linux,但苦于囊中羞涩(欢迎购买 RHEL AS Subscription:US$1,499 / year),好在还有centos可选,但总感觉它的包少了点。好在现在可以使用Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux),EPEL是RHEL 的 Fedora 软件仓库,把它添上,你就可以获得 RHEL AS 的高质量、高性能、高可靠性,又需要方便易用(关键是免费)的软件包更新功能。
EPEL(http://fedoraproject.org/wiki/EPEL) 是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL,就像在 Fedora 上一样,可以通过 yum install package-name,随意安装软件。
安装 EPEL:
* RHEL 4(centos 4):

su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-9.noarch.rpm'
 

* RHEL 5(centos 5):

su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm'
 

安装完毕之后,即可使用 yum 来安装软件,比如 Nagios:

yum install nagios
 

若要查看 EPEL Repo 中是否存在某个软件包:

yum search package-name
 

CentOS 6.5:如何安装ntopng

在centos系统下如何来安装ntopng软件呢? 默认情况下,ntopng不在centos默认的yum 软件库里,所以需要安装epel repo.
环境: Centos 6.5 的系统,需要安装最新版 ntopng。
准备: 因为官方没有详细的安装文档, 所以安装会需要很多依赖包, 我会把这些包分别列出
来。
我们采用的是源码编译,所以编译环境的 Gcc 等就不用多说
最简单就是安装光盘源的 “Development Tools” ,另外准备 EPEL 的安装源。
1.下载安装 EPEL 安装源

wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm
 

2.把这些包全部安装,不然会报错。

yum groupinstall “Development Tools”
yum install libpcap-devel glib2-devel GeoIP-devel libxml2-devel
libxml2-devel redis autoconf automake sqlite-devel
 

最后 3 个非常重要 autoconf automake sqlite-devel

3.下载 ntopng1.2.1

官方的下载被墙掉了, 我用的 VPN 代理美国的 IP 下载的。 我把源码上传到网盘, 可以直
接下载 http://yunpan.cn/cA7XcqEzTDNza 提取码 2142
4.解压&编译
1.2.1 新版本的官方给出了安装方法
(这个源码包里附带了用户手册)
ntopng1
所以按照步骤来
上述的包都安装后,基本是不会出错的。
执行完./configure 后
会提示执行
You are now ready to compile typing /usr/bin/gmake
Please do not forget to download GeoIP databases doing: /usr/bin/gmake geoip
这是联网下载 ip 数据库
执行即可 /usr/bin/gmake geoip
然后就是 make&make install 编译过程比较长。
5.配置文件的修改
需要添加配置文件,

mkdir /etc/ntopng/ntopng.conf
 

添加信息
ntopng1
6.启动 ntopng
启动之前先启动

/etc/init.d/redis start
 

启动ntopng
ntopng1
7.登陆
http://192.168.1.229:3000
Username: admin
Password : admin
预览:
ntopng

CentOS/Linux: 10最常用的linux命令

在你准备使用Linux系统作为网站服务器系统之前,我建议大家先学习一些基本的Linux系统的操作命令,这些命令都是在日常操作中和配置Linux服务器网络环境时要用到的,了解和掌握这些命令,将有助于你更好的使用Linux服务器。本文将以CentOS 6.5为例简单讲解一下Linux系统下常用的基本操作命令。
首先大家可以使用virtualbox安装一个CENTOS6.5系统,或者直接购买一个安装了centos系统的云主机,国内推荐阿里云,橙云主机其实也不错,不过我个人在使用过程中感觉速度不是很理想,特别是磁盘性能方面。国外的大家根据实际情况选择吧,我这里就不推荐了,免得被说是广告。
登录服务器实现远程控制
windows用户推荐使用Xshell(下载地址)
mac用户可以使用系统终端工具
登录服务器之后就可以开始命令行操作了
查看你当前所在的位置 pwd( print working directory )

pwd
 

会显示当前的位置,例如:

/root
 

改变你所在的目录位置 cd( change directory )

cd /home
 

会让你进入到根目录下面的 home 这个目录里面,/ 表示根目录,如果用 pwd 查看一下会返回:

/home
 

另外cd /root = cd ~
列出目录里的东西 ls

ls
 

ls 命令应该是 list 的简称,列出的意思,这个命令可以配合一些参数,例如:

ls -la
 

这样会使用更详细的形式列出文件与目录,并且会包含目录里面隐藏的文件,l 表示 long,a 表示 all 。在命令的后面你可以指定具体要列出的目录,例如:

ls -la /usr/local
 

这会列出在系统根目录下面的 usr 目录下面的 local 这个目录里的所有的东西。如果想查看命令详细的使用说明,可以加上 –help 参数:

ls --help
 

现在,你已经学会了一个简单的 ls 命令去列出目录里的东西,在使用其它命令的时候,你也可以这样来用,你知道命令的后面可以添加一些参数,去做更具体的事情,想得到命令的使用说明,就去在命令后面添加一个 –help 参数,命令的后面也可以添加更具体的信息,比如一个目录的位置,一个文件的名称等等。
创建目录 mkdir( make directory )

mkdir
 

下面,我们可以在你当前所在的位置去创建一个新的目录,记得使用 pwd 命令确定一下你的位置:

mkdir www
 

上面这行命令会在当前位置上去创建一个叫 www 的目录。使用 ls 命令,可以查看一下当前目录里面的东西。在安装WDCP时,我们要在根目录下创建一个WWW目录来挂载数据盘,使用的命令应该是

mkdir /www
 

删除目录或文件 rm( remove )

rm
 

在命令的后面,加上你想要删除的东西,可能是一个目录的名称,或者一个文件的名称。注意想要删除目录的时候,你需要添加两个参数:-r -f,可以将两个参数系在一起,如-rf

rm -rf www
 

这里,r 参数可以让 rm 命令递归删除目录及其内容,f 参数是 force ,表示强制删除。合起来这行命令的意思是,递归的强制删除 www 这个目录,以及这个目录里面的所有的东西。
编辑文件 vi:

vi hello.txt
 

上面的命令会去编辑当前目录下面的 hello.txt 这个文件,如果这个文件不存在,会打开一个空白的文件,这样你在保存并退出以后 ,就可以创建一个叫做 hello.txt 的文件。vi 工具的使用需要配合一些按键,比如打开文件以后,你想编辑这个文件,可以进入到编辑模式,按一下键盘上的 i 键或者insert键,然后用上下左右按键去浏览到文件的某个位置上。编辑好以后,要按一下 esc 键,退出编辑模式,然后输入 : (冒号),再输入 wq ,表示保存并退出。如果你不想保存所做的修改,可以输入 : q 。有的时候,在编辑一些只读文件,你需要再添加一个 ! ,比如 :wq! ,或者 q! 。
i ,输入编辑模式。
esc,退出模式。
:wq,保存文件并退出。
:wq!,强制保存并退出。
:q,直接退出不保存修改。
/,可以进行搜索,在 / 后面加上要搜索的文字,然后回车。
n,可以查找下一处。
N,可以查找上一处。
ctrl+f,向后翻页。
ctrl+b,向前翻页。
详细的使用说明,可以查看 vi 命令的帮助,vi –help 。
移动/重命名目录或文件 mv( move )
移动或重命名目录或者文件,使用的是同一个命令:
mv 要移动的目录/文件 移动之后的目录/文件
在这个后面先指一定想要移动的目录或者文件的位置,一个空格,后面再加上移动以后的目录和文件所在的位置。这里我们得先理解一下几个路径的意思:
/
表示系统的根目录。
~
表示当前所登录的用户的主目录。
.
一个点表示当前的目录。
../
两个点加一个斜线,表示上一级目录。
../../
表示上两级目录。知道了这些,我们就可以去移动目录或文件了。

mv www www1
 

上面这行命令的意思是,把当前目录里面的 www 这个目录重命名为 www1 。

mv www1 ../
 

这样会把 www1 这个目录移动到当前目录的上一级目录下面,你可以进入到当前目录的上一级目录:

cd ../
 

然后列出目录里面的东西:

ls
 

看到 www1 目录了吗?删除它可以使用 rm 命令加上 rf 参数:

rm -rf www1
 

再用 ls 看一下,是不是 www1 已经不在了。
* 号表示所有的文件或目录,比如你想把某个目录下面的所有的目录或文件移动到某个地方,可以这样:

mv /home/www/web1/* /home/www/gb1982
 

上面命令会把 /home/www/web1 里面的东西全部都移动到 /home/www/gb1982 这个目录里面。
复制目录或文件 cp( copy )
cp 要复制的东西 要复制到哪里
比如你当前目录下面有一个 hello.txt 文件,你想复制一份,复制以后的文件叫 hello.bak ,可以这样:

cp hello.txt hello.bak
 

你想把 hello.bak 复制到某个目录的下面:

cp hello.bak /home/bak
 

这样会把 hello.bak 这个文件复制到 /home/bak 里面,注意,bak 这个目录必须已经存在了。
复制目录,你需要添加一个 -R 的参数,它会递归的去复制目录以及目录里面的所有的东西。比如要把 www 这个目录复制一份,复制以后的目录名是 www1:

cp -R www www1
 

原文

CentOS/RHEL 如何配置系统防火墙

在centos 系统下我想只开放某一个端口号或者禁止某个ip访问本主机,该如何来配置系统的防火iptables呢。本文将会将一些centos或rhel系统下的关于iptable防火墙的基本配置知识。
Iptables是linux下的防火墙,同时也是服务名称。

service  iptables  status        查看防火墙状态
service  iptables  start           开启防火墙
service  iptables  stop           关闭防火墙
service  iptables  restart        重启防火墙
 

防火墙开放特定端口:
编辑文件/etc/sysconfig/iptables ,输入下面的命令:

vim   /etc/sysconfig/iptables
 

添加:

 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
 

保存对防火墙的设置

serivce iptables save
 

查看iptables规则及编号

iptables -nL --line-number
 

关闭所有的INPUT FORWARD(转发) OUTPUT的所有端口

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
 

只打开22端口

iptables -A  INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
 

参数讲解:
–A 参数就看成是添加一条规则
–p 指定是什么协议,我们常用的tcp 协议,当然也有udp,例如53端口的DNS
–dport 就是目标端口,当数据从外部进入服务器为目标端口
–sport 数据从服务器出去,则为数据源端口使用
–j 就是指定是 ACCEPT -接收 或者 DROP 不接收
禁止某个IP访问

iptables -A INPUT -p tcp -s 192.168.1.2 -j DROP
 

–s 参数是来源(即192.168.1.2)
后面拒绝就是DROP
删除规则

iptables -D INPUT 2
 

删除INPUT链编号为2的规则

CentOS如何查看程序的内存分配

在centos下如何来查看一段C语言程序的内存分配情况呢?下面我会举一个C语言的例子,并运行该程序,查看该程序运行时的内存分配情况。
C语言代码:
[cc lang=”c”] #include
#include
int main()
{
printf(“%d\n”,getpid());
while(1);
}
[/code] 编译并执行上面的程序,并打开另一个终端,输入cat /proc/10073/maps,出现如下显示:

 08048000-08049000 r-xp 00000000 fd:01 14844      /home/Alex/DaNei/Interview/a.out
    08049000-0804a000 r--p 00000000 fd:01 14844      /home/Alex/DaNei/Interview/a.out
    0804a000-0804b000 rw-p 00001000 fd:01 14844      /home/Alex/DaNei/Interview/a.out
    4427b000-4429a000 r-xp 00000000 fd:01 393917     /usr/lib/ld-2.17.so
    4429a000-4429b000 r--p 0001e000 fd:01 393917     /usr/lib/ld-2.17.so
    4429b000-4429c000 rw-p 0001f000 fd:01 393917     /usr/lib/ld-2.17.so
    442a3000-4445b000 r-xp 00000000 fd:01 393918     /usr/lib/libc-2.17.so
    4445b000-4445c000 ---p 001b8000 fd:01 393918     /usr/lib/libc-2.17.so
    4445c000-4445e000 r--p 001b8000 fd:01 393918     /usr/lib/libc-2.17.so
    4445e000-4445f000 rw-p 001ba000 fd:01 393918     /usr/lib/libc-2.17.so
    4445f000-44462000 rw-p 00000000 00:00 0
    b7752000-b7753000 rw-p 00000000 00:00 0
    b7769000-b776b000 rw-p 00000000 00:00 0
    b776b000-b776c000 r-xp 00000000 00:00 0          [vdso]
    bfe13000-bfe34000 rw-p 00000000 00:00 0          [stack]
 

实际上,第一行是代码区所占的内存空间,804800-804900,实际上几乎所有的linux程序代码段都是从804800开始的,第二行是全局栈区所占的内存空间,第三行是堆空间所占的内存空间,最后一行是局部栈所占的内存空间。 同时,我们会发现除了代码段的权限是r-xp(可读-不可写-可执行-私有保护)之外,其他三个都是不可执行的。

CentOS/Linux:如何查看SSH的版本号

在centos系统下我们经常回使用ssh安全加密协议,那么如何来查看ssh协议的版本号呢。
安全Shell(SSH)通过加密的安全通信通道来远程登录或者远程执行命令。SSH被设计来替代不安全的明文协议,如telnet、rsh和rlogin。SSH提供了大量需要的特性,如认证、加密、数据完整性、授权和转发/通道。
SSH1 vs. SSH2
SSH协议规范存在一些小版本的差异,但是有两个主要的大版本:SSH1 (版本号 1.XX) 和 SSH2 (版本号 2.00)。
事实上,SSH1和SSH2是两个完全不同互不兼容的协议。SSH2明显地提升了SSH1中的很多方面。首先,SSH是宏设计,几个不同的功能(如:认证、传输、连接)被打包进一个单一的协议,SSH2带来了比SSH1更强大的安全特性,如基于MAC的完整性检查,灵活的会话密钥更新、充分协商的加密算法、公钥证书等等。
SSH2由IETF标准化,且它的实现在业界被广泛部署和接受。由于SSH2对于SSH1的流行和加密优势,许多产品对SSH1放弃了支持。在写这篇文章的时候,OpenSSH仍旧支持SSH1和SSH2,然而在所有的现代Linux发行版中,OpenSSH服务器默认禁用了SSH1。
检查支持的SSH协议版本

方法一

如果你想检查本地OpenSSH服务器支持的SSH协议版本,你可以参考/etc/ssh/sshd_config这个文件。用文本编辑器打开/etc/ssh/sshd_config,并且查看”Protocol”字段。
如果如下显示,就代表服务器只支持SSH2。

Protocol 2
 

如果如下显示,就代表服务器同时支持SSH1和SSH2。

Protocol 1,2
 

方法二
如果因为OpenSSH服务其运行在远端服务器上而你不能访问/etc/ssh/sshd_config。你可以使用叫ssh的SSH客户端来检查支持的协议。具体说来,就是强制ssh使用特定的SSH协议,接着我么查看SSH服务器的响应。
下面的命令强制ssh使用SSH1:

$ ssh -1 user@remote_server
 

下面的命令强制ssh使用SSH2:

$ ssh -2 user@remote_server
 

如果远程SSH服务器只支持SSH2,那么第一个带“-1”的选项就会出现像下面的错误信息:

Protocol major versions differ: 1 vs. 2
 

如果SSH服务器同时支持SSH1和SSH2,那么两个命令都有效。
方法三
另一个检查版本的方法是运行SSH扫描工具,叫做scanssh。这个命令行工具在你想要检查一组IP地址或者整个本地网络来升级SSH1兼容的SSH服务器时很有用。
下面是基本的SSH版本扫描语法。

$ sudo scanssh -s ssh -n [ports] [IP addresses or CIDR prefix]
 

“-n”选项可以指定扫描的SSH端口。你可以用都好分隔来扫描多个端口,不带这个选项,scanssh会默认扫描22端口。
使用下面的命令来发现192.168.1.0/24本地网络中的SSH服务器,并检查SSH协议v版本:

$ sudo scan -s ssh 192.168.1.0/24
 

如果scanssh为特定IP地址报告“SSH-1.XX-XXXX”,这暗示着相关的SSH服务器支持的最低版本是SSH1.如果远程服务器只支持SSH2,scanssh会显示“SSH-2.0-XXXX”。
原文:linux中国