显示标签为“Shell”的博文。显示所有博文
显示标签为“Shell”的博文。显示所有博文

2011年9月28日星期三

经典实用的Shell命令

1.[root@desktop huage]# yum provides */filename
   查找filename是由哪个RPM包提供

2.[root@desktop huage]# locate filename
   快速查找名为filename的文件

3.[root@desktop huage]#rename .JPG .jpg *.JPG
   批量修改文件的后缀名(适用于redhat分支)

4.[root@desktop huage]#ls |grep jpg|awk -F'.' '{print $1}'|xargs -i mv {}.jpg {}.JPG
   批量修改文件的后缀名(两组单引号之间有个空格)

   [root@desktop huage]# ls |grep jpg|awk -F'.' '{print $1}'|xargs -i -t mv {}.jpg {}.JPG
   批量修改文件的后缀名(-t:详细显示xargs命令后面的操作)

5.[root@Server huage]# ls |grep -v  rpm$ |xargs -i -t rm -rf {}
   删除当前目录下所有后缀不是rpm的文件(包括目录文件)

6.[root@Server huage]# ls -F |egrep -v "rpm$|/$" |xargs -i -t rm -rf {}
   删除当前目录下所有后缀不是rpm的文件(不包括目录文件)

7.[root@Server huage]# find . -type f -print |grep -v rpm$ |xargs -i -t rm -rf {}
   删除当前目录及其子目录下所有后缀不是rpm的文件

8.[root@Server huage]# ls -lSh
   用易于人类读写的单位按从大到小的顺序排序(主要用于文件的排序,不统计目录的具体大小)

9.[root@Server huage]# ls -lShr
   用易于人类读写的单位按从小到大的顺序排序(主要用于文件的排序,不统计目录的具体大小)

10.[root@Server huage]# ls |xargs du -sh |sort -h
     用易于人类读写的单位按从小到大的顺序排序(包括目录)

11.[huage@fedora ~]$ script
     记录接下来的所有终端输出

12.[huage@fedora ~]$ script huage
     记录所有终端输出到文件huage

13.[huage@fedora ~]$ time shell-command
     对shell-command命令计时,time后直接跟shell命令即可

14.[root@Server tmp]# find . -type f -exec chmod 644 {} \;
     或者:
     [root@Server tmp]# find . -type f -exec chmod 644 {} +
     将当前目录及其子目录下的所有文件的权限设为644

15.[root@Server tmp]# find . -type d -exec chmod 755 {} \;
     或者:
     [root@Server tmp]# find . -type d -exec chmod 755 {} +
     将当前目录及其子目录的权限设为755

16.[root@fedora huage]# find . -type f |xargs chmod 644
     将当前目录及其子目录下的所有文件的权限设为644(如果目录名中包含空格,则chmod对该目录无效)

17.[root@fedora huage]# find . -type d |xargs chmod 755
     将当前目录及其子目录的权限设为755(如果目录名中包含空格,则chmod对该目录无效)

注:在18和19例中,如果文件(包括目录文件)名中包含空格,则chmod命令对该文件无效,实际上是xargs命令无法正确处理文件名中包含空格的文件和目录文件。

28.[root@fedora huage]# python -m SimpleHTTPServer
     通过python的SimpleHTTPServer模块来快速搭建一个HTTP Server,之后可以通过 
     http://server-ip:8000或者http://localhost:8000来访问

19.[root@fedora huage]#
mail admin@huage.com -s "Backuping HUA is successfully done" < /root/huage/backup
用一条命令来发送邮件给admin@huage.com,且主题为"Backuping HUA is successfully done",邮件正文内容为"/root/huage/backup"。

20.[root@fedora huage]# mail huage@gmail.com -s "Backuping ADG is successfully done" < /root/hauge/backup-adg -- -f admin@google.com -F "The Admin of Google"

      发送一封主题为"Backuping ADG is successfully done"、邮件正文为"/root/hauge/backup-adg"的内容、发件人为admin@google.com且发件人显示名称为"The Admin of Google"的邮件给huage@gmail.com

21.[root@fedora huage]# du -sh /home/huage/public_html |mail -s "Moving Successful" huage@gmail.com -- -f admin@google.com -F "The Admin of Google"

      发送一封以"Moving Successful"为主题、以"du -sh /home/huage/public_html"输出内容为邮件正文、以admin@google.com为发件人且发件人的显示名称为"The Admin of Google"的邮件给huage@gmail.com

自动备份网站根目录

Auto backup up the root directory of website(自动备份网站根目录):

root@huage [~/huage]# cat /usr/local/bin/hua-backup
#!/bin/bash
HUA=/home/huage/
NAME=hua-`date +%Y%m%d`.tgz
cd $HUA
rm -rf public_html/bmz_cache/*
echo "Cache is cleaned."
tar -zcvf $NAME public_html
echo "The backuping process is successfully done."
mail admin@huage.com -s "Backuping HUA is successfully done" < /root/huage/backup
echo "Everything is successful completion."
exit 0

然后使用"crontab -e"命令编辑root用户的crontab文件,加入如下一行:
"0 0 * * 0 /usr/local/bin/hua-backup >/dev/null 2>&1"
,然后保存文件到"/var/spool/cron/root"就行了。

注:虽然hua-backup脚本放在系统PATH路径中,但/etc/crontab单独定义了"PATH=/sbin:/bin:/usr/sbin:/usr/bin",所以此处的脚步文件仍然要写完整路径,否则计划不能成功执行。

2011年9月26日星期一

Shell Script的基本格式

1.开始行一般是命令解释器,由#!+解释器的路径构成,Shell脚本的命令解释器一般为bash,即/bin/bash,所以Bash Shell脚本的第一行一般为#!/bin/bash;

2.结束行一般是exit 0;

注:在linux的Shell脚本中"#!"是一个双字节的magic number,而在某些BSD系统中,其脚本开始行是由"#! /bin/sh"构成,即"!"感叹号后面加了个空格,然后再加脚本解释器的路径,在这些系统中"#! "是一个4字节的magic number。

2011年8月29日星期一

>/dev/null 2>&1详解

>表示重定向
/dev/null表示空设备
2在shell中表示标准错误
&在此处表示等同于
& only means to run the process in the background if it appears at the end of the line.
1表示标准输出
2>&1表示将标准错误重定向等同于标准输出,因为标准输出重定向到了/dev/null,所以2>&1的意思是将标准错误也重定向到/dev/null


>/dev/null 2>&1
表示将shell语句的标准输出和错误输出都重定向到空设备

注:在linux中有三个标准I/O,0表示STDIN标准输入,1表示STDOUT标准输出,2表示STDERR标准错误,系统默认的如果没有指明I/O,一般是默认为是1STDOUT标准输出;0一般指键盘,1一般指屏幕。