1 tar命令

 1 从网络上下载到的源码包, 最常见的是 .tar.gz 包, 还有一部分是 .tar.bz2包
要解压很简单 :
.tar.gz     格式解压为          tar   -zxvf   xx.tar.gz
.tar.bz2   格式解压为          tar   -jxvf    xx.tar.bz2
出现的问题:
2 用tar 解压 tar.bz2文件出错
debian:/usr/src# tar jxf linux-2.6.26.tar.bz2
tar: bzip2: Cannot exec: No such file or directory
tar: Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error exit delayed from previous errors
解决办法
安装bzip2软件包
apt-get install bzip2
3 tar: 从成员名中删除开头的“/”
解决:使用大写的P
[root@bj ~]# tar czPvf test.tar.gz /root/tomcat/
4 tar的增量备份
[root@192 ~]# tar -g /root/snapshot -czPvf /root/20161201.tar.gz /root/test.bak
tar: /root/test.bak:目录是新的
/root/test.bak/
/root/test.bak/1.txt
/root/test.bak/2.txt
/root/test.bak/4.txt
/root/test.bak/add.txt
[root@192 ~]# tar -zxvf 20161201.tar.gz 
tar: 从成员名中删除开头的“/”
/root/test.bak/
/root/test.bak/1.txt
/root/test.bak/2.txt
/root/test.bak/4.txt
/root/test.bak/add.txt

2 wget-c命令

1 wget -c 已经下载就不会再下载了
[root@192 sh]# wget -c http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.23.tar.bz2
--2016-11-23 18:18:12--  http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.23.tar.bz2
正在解析主机 mirrors.cnnic.cn (mirrors.cnnic.cn)... 218.241.113.17, 218.241.113.17
正在连接 mirrors.cnnic.cn (mirrors.cnnic.cn)|218.241.113.17|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 416 Requested Range Not Satisfiable

    文件已下载完成;不会进行任何操作。

3 cat命令和EOF标识输出shell到文件

cat命令和EOF标识输出shell到文件
链接:http://www.cnblogs.com/zht-blog/p/4065668.html
在某些场合,可能我们需要在脚本中生成一个临时文件,然后把该文件作为最终文件放入目录中。(可参考ntop.spec文件)这样有几个好处,其中之一就是临时文件不是唯一的,可以通过变量赋值,也可根据不同的判断生成不同的最终文件等等。
一、cat和EOF
cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的;
EOF是“end of file”,表示文本结束符。
结合这两个标识,即可避免使用多行echo命令的方式,并实现多行输出的结果。
二、使用
看例子是最快的熟悉方法:

# cat << EOF > test.sh
> #!/bin/bash
> #you Shell script writes here.
> EOF

结果:

引用
# cat test.sh
#!/bin/bash
#you Shell script writes here.

可以看到,test.sh的内容就是cat生成的内容。
三、其他写法
1、追加文件

# cat << EOF >> test.sh

2、换一种写法

# cat > test.sh << EOF

3、EOF只是标识,不是固定的

# cat << HHH > iii.txt
> sdlkfjksl
> sdkjflk
> asdlfj
> HHH

这里的“HHH”就代替了“EOF”的功能。结果是相同的。

引用
# cat iii.txt
sdlkfjksl
sdkjflk
asdlfj

4、非脚本中
如果不是在脚本中,我们可以用Ctrl-D输出EOF的标识

# cat > iii.txt
skldjfklj
sdkfjkl
kljkljklj
kljlk
Ctrl-D

结果:

引用
# cat iii.txt
skldjfklj
sdkfjkl
kljkljklj
kljlk
[root@192 sh]# cat <<EOF
> ^C
[root@192 sh]# cat <<EOF>test.sh
> #!/bin/sh
> #you shell script writes here
> EOF
[root@192 sh]# more test.sh 
#!/bin/sh
#you shell script writes here

4  echo

1 echo -e 允许后面的输出进行转义
echo -e \" <?php\nphpinfo();\n?>\"
2 得到名字
[root@192 sh]# echo /var/log/messages-20161118 |awk -F "/" '{print $NF}'
messages-20161118
[root@192 sh]# echo /var/log/messages-20161118 |xargs basename
messages-20161118
3 sed分割ip
[root@192 sh]# echo 192.168.57.131|sed 's/\./\n/g'
192
168
57
131
4 awk
awk获取某一列的值   以空格分隔
[root@192 sh]# awk '{print $3}' test.txt 
#IP
192.168.1.1
192.168.1.2
awk--head -1获取第一行
[root@192 sh]# cat /etc/passwd|awk '{print $1}'|head -1
root:x:0:0:root:/root:/bin/bash
awk--tail -1获取第一行
[root@192 sh]# cat /etc/passwd|awk '{print $1}'|tail -1
chy_:x:1006:1006::/home/chy_:/bin/bash
awk---F:  以:分隔
[root@192 sh]# cat /etc/passwd|awk -F: '{print $1}'|tail -1
chy_
awk以www.做分隔
[root@192 sh]# echo "http://www.baidu.con"|awk -F"www." '{print $2}'
baidu.con
awk -baidu.con变成baidu-con
[root@192 sh]# echo "http://www.baidu.con"|awk -F"www." '{print $2}'|awk -F. '{print $1"-"$2}'
baidu-con

 awk输出
[root@192 sh]# cat test.txt |awk 'NR==1 {print}'
192.168.57.132
[root@192 sh]# cat test.txt |awk '/132/'
192.168.57.132
php-config文件中长度大于100的行号
[root@test scripts]# cat php-config|awk 'length($0)>80{print NR}'
10
12
20
27
30
显示test.txt中的第3行至第5行的第一列与最后一列
[root@192 sh]# cat test.txt | awk 'NR==3, NR==5 {print $1,$NF}'
 136
 137
 123
5 获取IP
[root@192 sh]# ifconfig|grep "broadcast"|awk '{print $2}'|sed 's/addr://g'
192.168.57.132

5  du-sch

root@192 sh]# du -sh *
4.0K	auto_check_mysql.sh
4.0K	lamp.sh
4.0K	php.info
4.0K	rsa.sh
4.0K	test.txt
[root@192 sh]# du -shc *
4.0K	auto_check_mysql.sh
4.0K	lamp.sh
4.0K	php.info
4.0K	rsa.sh
4.0K	test.txt
20K	总用量

6 查询linux版本信息

系统版本
[root@test ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.5 (Santiago)
[root@test ~]# lsb_release -a
LSB Version:	:base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID:	RedHatEnterpriseServer
Description:	Red Hat Enterprise Linux Server release 6.5 (Santiago)
Release:	6.5
Codename:	Santiago
内核版本
[root@test ~]# cat /proc/version
Linux version 2.6.32-431.el6.x86_64 (mockbuild@x86-023.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Sun Nov 10 22:19:54 EST 2013
You have new mail in /var/spool/mail/root
[root@test ~]# uname -a
Linux test 2.6.32-431.el6.x86_64 #1 SMP Sun Nov 10 22:19:54 EST 2013 x86_64 x86_64 x86_64 GNU/Linux

7 查看机器的cpu和内存

[root@192 sh]# cat /proc/cpuinfo |grep "processor"|wc -l
1
[root@192 sh]# free -m
              total        used        free      shared  buff/cache   available
Mem:            977         239         578           6         159         581

8  时间变量

时间变量
YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
WEEK=`date +%u`

9 screen后台运行脚本

screen后台执行
crtl—+a+d进行保存
screen -ls  查看id
screen -r id 进入后台
或者
nohup mkdir -p/tmp &
也是在后台执行不会掉
只有&是在当前页面进行

10   2>&1

2>&1将标准出不标准输出错误均打印出来
[root@192 ~]# hhhh >/tmp/error 2>&1
[root@192 ~]# more /tmp/error 
-bash: hhhh: 未找到命令

11 csv文件

csv文件
扫描文件以,作分隔,csv文件上传到桌面excel直接可以打开

12 secure文件登陆纪录

secure文件登陆纪录,下面这条命令可以查看出哪些ip尝试登陆我们的ip
sort  --排序
uniq -c ---唯一值并排序
sort -nr --从大到小排序
[root@192 log]# grep -i "Failed password" /var/log/secure|awk '{print $(NF-3)}'|sort |uniq -c|sort -nr|more
2 192.168.57.1
$1>=10  将超过10次登陆失败的机器追加到host.deny中或者防火墙中,禁止他们登陆
[root@192 log]# grep -i "Failed password" /var/log/secure|awk '{print $(NF-3)}'|sort |uniq -c|sort -nr|awk '$1>=10 {print $2}'
执行
[root@192 sh]# !sh
sh -x auto_drop.sh 
+ IP=(`grep -i "Failed password" /var/log/secure|awk '{print $(NF-3)}'|sort |uniq -c|sort -nr|awk '{print $2}'`)
++ grep -i 'Failed password' /var/log/secure
++ awk '{print $2}'
++ awk '{print $(NF-3)}'
++ sort
++ uniq -c
++ sort -nr
++ echo 192.168.57.1
+ for i in '`echo ${IP[@]}`'
+ sed -i '/OUTPUT/a -A INPUT -s 192.168.57.1 -j DROP' /etc/sysconfig/iptables
+ service iptables restart
Redirecting to /bin/systemctl restart  iptables.service
[root@192 sh]# more auto_drop.sh 
#!/bin/sh
IP=(
`grep -i "Failed password" /var/log/secure|awk '{print $(NF-3)}'|sort |uniq -c|s
ort -nr|awk '{print $2}'`
)
#echo ${IP[@]}

for i in `echo ${IP[@]}`
do
	grep $i /etc/sysconfig/iptables >>/dev/null
	if [ $? -ne 0 ];then
		sed -i "/OUTPUT/a -A INPUT -s $i -j DROP" /etc/sysconfig/iptable
s
	fi
done
service iptables restart
加入到定时任务中去,五分钟执行一次
[root@192 sh]# crontab -l
*/5 * * * * /bin/sh /data/sh/suto_drop.sh >>/tmp/drop.log 2>&1
如何实现每秒运行一次这个脚本
[root@192 sh]# while sleep 1; do sh /data/sh/auto_drop.sh ;done

13 nmap如果ping禁止,用这个

14

 1) 删除匹配行

      sed -i '/匹配字符串/d'  filename  (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)
      sed -i '/HISTFILESIZE/d' /etc/bashrc
      参考
      https://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html

 2)  替换匹配行中的某个字符串

     sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
     sed -i 's/yes/old/g' netwrk
 3)  匹配前面是#的删除
    sed -i '/^[^#]/d' /etc/hosts.allow 
 4)  root用户环境变量不包括父目录+环境变量不包含权限为777的目录!
   echo $PATH | egrep '(^|:)(\.|:|$)'||echo "root用户环境变量不包括父目录!" >>$log_name
   echo $PATH | tr ':' ' '` -type d \( -perm -002 -o -perm -020 \) -ls||echo "环境变量不包含权限为777的目录!" >>$log_name
 5)#echo ${SOURCE_DIR[@]   @代表SOURCE_DIR中输入的所有数值 
 6)IP_ADDR=`tail -n 1000 /var/log/secure |grep "Failed password"| egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort -nr | uniq -c |awk ' $1>=4 {print $2}'`
  egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}  筛选IP