CentOS/Linux:如何编译最新版的linux 内核

当linux内核社区有新的版本发布的时候,如果你也想升级你的centos或者centos系统的内核版本,那么如何通过源码升级linux的内核吗。本文将会讲述如何从linux 内核官方下载最新的内核版本,并升级安装。

1、查看系统内核版本

1
2
#uname -r
2.6.18-92.el5

2、下载最新版本linux内核
输入下面的命令:

1
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.tar.gz  .

3、清除环境变量,即清除配置文件

1
$ make mrproper

4、 在菜单模式下选择需要编译的内核模块

1
$make menuconfig

#需要 gcc 和 ncurses-devel 的支持,如果没有安装,yum 安装

5、编译内核

1
#make && make modules_install && make install

或者逐步执行:

#make clean确保所有东西均保持最新状态.

#make bzImage 生成内核文件

#make modules 编译模块

#make modules_install 安装模块

#make install 安装

#mkinitrd /boot/initrd_2.6.18.img 根据内核版本和指定参数生成映像文件

#cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.18
#cp /usr/src/linux-2.6.18/System.map /boot/System.map-2.6.18

6、重新配置grub引导程序

1
#vi /boot/grub/grub.conf  #以新内核启动系统,重启系统;

CentOS7/RHEL7:如何创建并挂载SCSI 共享磁盘

在centos7 系统下我们如何来创建并挂载SCSI 共享磁盘呢?本文将会讲述通过两个虚拟机作为scsi的服务器端和客户端来配置创建并挂载scsi共享磁盘。

实验设备:

用虚拟机虚拟两个 centos6.3 -64bit 系统,并配置好yum

ip设置:
scsi服务端:10.1.1.222
scsi客户端(挂载端):10.1.1.1

1、在服务端安装软件并配置好共享的磁盘,首先在虚拟机中新加入一块硬盘,大小随意。(这里添加100G)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@localhost ~]# fdisk -l
 Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005bb6c

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         281     2048000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             281        2611    18717696   83  Linux

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077087

   Device Boot      Start         End      Blocks   Id  System

2、安装scsi服务端软件

1
yum install scsi-target-utils -y

共享磁盘(在配置文件中加入以下代码即可)

1
2
3
4
vim /etc/tgt/targets.conf
    <target iqn.2008-09.com.example:server.target1>
        backing-store /dev/sdb
    </target>

启动服务

1
service tgtd restart

关闭防火墙和selinux

3、在客户端安装客户端软件,并设置挂载

安装客户端软件

1
yum install iscsi-initiator-utils -y

查看是否有共享磁盘

1
iscsiadm --mode discoverydb --type sendtargets --portal 10.1.1.222 --discover

出现以下则表示有共享磁盘 10.1.1.222:3260,1 iqn.2008-09.com.example:server.target1

挂载磁盘

1
iscsiadm --mode node --targetname iqn.2008-09.com.example:server.target1 --portal 10.1.1.222:3260 --login

注意:中间2008-09这段是填写上面查询出来的那个磁盘名

成功挂载后有以下提示

1
2
3
[root@localhost ~]#  iscsiadm --mode node --targetname iqn.2008-09.com.example:server.target1 --portal 10.1.1.222:3260 --login
Logging in to [iface: default, target: iqn.2008-09.com.example:server.target1, portal: 10.1.1.222,3260] (multiple)
Login to [iface: default, target: iqn.2008-09.com.example:server.target1, portal: 10.1.1.222,3260] successful.

查看是否挂载成功
[root@localhost ~]# fdisk -l

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00036380

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         281     2048000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             281        2611    18717696   83  Linux

Disk /dev/sdb: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00077087

   Device Boot      Start         End      Blocks   Id  System

成功挂载100G硬盘。

CentOS 6.5:如何更换系统的默认yum软件源为163源

当CentOS6.5系统安装完成后,系统默认使用的是centos 官方的yum 软件仓库源,这些源站点都在国外,所以安装更新速度会很慢,那么我们可以更改yum更新源。原理很简单,就是把yum配置文件中的更新源改一下,这里直接用163的镜像站点中的配置文件。

更改方法如下:

1、进入yum配置文件目录

1
cd /etc/yum.repos.d/

2、备份配置文件

1
mv CentOS-Base.repo CentOS-Base.repo.bak

3、下载163的配置

1
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

4、改名

1
mv CentOS6-Base-163.repo CentOS-Base.repo

5、更新数据库

1
yum update

CentOS 6.3:如何配置并优化系统

当你当装完centos系统之后,需要做一些个性化的配置以及系统优化设置,本文将会讲述如何配置并优化刚装完的centos 6.3 操作系统。

全新以最小化包安装了的CentOS6.3系统,作为本地的Web服务器使用,现记录全过程配置网易163的yum源

1. 下载repo文件

1
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo .

2. 备份并替换系统的repo文件

1
2
3
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost ~]#mv CentOS-Base.repo CentOS-Base.repo.bak
[root@localhost ~]#mv /root/CentOS6-Base-163.repo CentOS-Base.repo

注意:如果直接下载在/etc/yum.repos.d/目录下,不要让.repo文件多于1个,比如:CentOS6-Base-163.repo、CentOS-Base.repo会出错

3. 执行yum源更新

1
2
[root@localhost ~]#yum clean all
[root@localhost ~]#yum makecache


优化系统

一、更新系统到最新

1
[root@web01yum.repos.d]# yum update

二、安装必要的软件包

1
[root@web01~]#yuminstall lrzsz sysstat –y

另外,如果在安装时落下了安装需要的软件包组,可以在这里执行如下命令来安装。

1
2
[root@web01~]#yumgroupinstall “Development Tools”
[root@web01~]#yumgroupinstall “X software development”

三、清理开机自启动的服务
关闭所有开机自启动服务:

1
[root@web01~]# for test in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $testoff;done

打开crond、network、rsyslog、sshd开机自启动服务

1
[root@web01 ~]# for test in crond network rsyslog sshd;do chkconfig --level 3 $test on;done

查看处理结果:

1
2
3
4
5
[root@web01 ~]# chkconfig --list|grep 3:on
crond           0:off   1:off  2:on    3:on    4:on   5:on    6:off
network         0:off  1:off   2:on    3:on   4:on    5:on    6:off
rsyslog         0:off  1:off   2:on    3:on   4:on    5:on    6:off
sshd            0:off   1:off  2:on    3:on    4:on   5:on    6:off


四、更改ssh登陆配置

1
[root@web01 ~]# cp/etc/ssh/sshd_config /etc/ssh/sshd_config.back #备份配置文件
1
2
3
4
5
6
7
8
9
10
11
12
[root@web01 ~]# vim/etc/ssh/sshd_config
##########by test###########################

Port 11111

PermitRootLogin no                 #root用户禁止远程登陆

PermitEmptyPasswords no            #密码为空禁止登陆

UseDNS no                        #不使用DNS

##############################################
1
[root@web01 ~]# /etc/init.d/sshd restart     #重启后生效

五、将需要有root权限的用户名加入sudo挂了,这样用户通过自己的普通账户登陆,就可以以root的权限来管理整个系统。

1
[root@web01 ~]#visudo   #相当于直接编辑/etc/sudoer,使用命令方式更安全,推荐

在文件的中间如下内容的下面添加需要root权限的用户名,格式如下:

1
2
3
## Allow root to run any commands anywhere
root   ALL=(ALL)       ALL
test   ALL=(ALL)       ALL #表示test可拥有完全的系统管理员权限

普通用户环境变量问题和解决办法

对比root和test用户下默认的PATH环境变量

1
2
3
4
[root@web01 ~]# echo$PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[test@web01 ~]$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin

经过对比我们发现普通用户上了几个关键环境变量/usr/local/sbin:/sbin:/usr/sbin:是导致执行命令找不到的原因(除非带全路径执行)

解决办法:

编辑~/.bash_profile环境变量文件,把:/usr/local/sbin:/sbin:/usr/sbin:添加到PATH环境变量里,注意:每个路径之间要用冒号分割

1
2
3
4
[test@web01 ~]$ vim./.bash_profile
[test@web01 ~]$source ./.bash_profile   #使添加的内容生效
[test@web01 ~]$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/test/bin:/home/test/bin:/usr/local/sbin:/sbin:/usr/sbin

六、修改中文显示

通过快捷的命令方式在/etc/sysconfig/i18n中添加如下命令:

1
2
[root@web01 ~]# echo'LANG="zh_CN.GB18030"' >/etc/sysconfig/i18n
[root@web01 ~]#source /etc/sysconfig/i18n  #使修改生效

七、加大服务器文件描述符

1
2
[root@web01 ~]# vim/etc/security/limits.conf  (默认大小为1024)
*      -   nofile    65535

注意:配置完成后,重新登陆既可查看

1
2
[root@web01 ~]#ulimit -n
65535

八、调整内核参数文件/etc/sysctl.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
net.ipv4.tcp_fin_timeout= 2
net.ipv4.tcp_tw_reuse= 1
net.ipv4.tcp_tw_recycle= 1
net.ipv4.tcp_syscookies= 1
net.ipv4.tcp_keepalive_time= 600
net.ipv4.ip_local_port_range= 4000
net.ipv4.tcp_max_syn_backlog= 16384
net,ipv4.tcp_max_tw_buckets= 360000
net.ipv4.route.gc_timeout= 100
net.ipv4.tcp_syn_retries= 1
net.ipv4.tcp_synack_retries=1
net.ipv4.ip_conntrack_max= 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120

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工具来检测硬件的信息。

安装包命令查找:

1
yum whatprovides */lspci

查看主板型号:

1
dmidecode |grep -A16 "System Information$"

内存槽及内存条:

1
dmidecode |grep -A16 "Memory Device$"

硬盘:

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

网卡:

1
mii-tool

scsi/raid卡:

1
lspci

centos相关命令安装:

1
2
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命令,查看系统内部已经设置的别名

1
2
3
4
5
6
7
8
 [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命令的别名

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

使用unalias cp命令后,即可使用cp filename new/filename就不会提示输入yes或no了,是不是很方便

二、直接输入\cp命令,作用也是取消cp的别名

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

是不是比上一个方法更省事

三、使用管道的方式,自动输入yes

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

自己替我们输入了yes

原文:92csz.com

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

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

1
find . | xargs grep -ri "IBM"

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

1
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[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”中间打印主体信息,比如总共匹配三条信息,则输出如下:

1
2
3
4
5
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命令查看下当前时间

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

现在我们就来改

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

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

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

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

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

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

1
 yum -y install ntpdate ntp

Ubuntu系统的:

1
   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 安装

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

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

二、Crontab配置

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

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

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

1
 chkconfig --level 345 crond on

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

1
2
3
4
5
6
7
8
9
10
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列要运行的命令

例子:

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

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

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

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

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

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

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

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

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

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

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

每一小时重启apache

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

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

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

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

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

一月一号的4点重启apache

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

每半小时同步一下时间