Linux使用 grep命令查找某字符串存在某些文件

在Linux中可以使用 grep 命令快速查找某个字符串存在某些文件中,下面看下命令详细

grep -rn "assets/images/blank.gif" *

以上代码实现查看当前目录中所有文件中存在的字符串assets/images/blank.gif的文件。

grep参数说明

* : 表示当前目录所有文件,也可以是某个文件名

-r 是递归查找

-n 是显示行号

-R 查找所有文件包含子目录

-i 忽略大小写

另外,如果我们向排除当前某些目录,可以如下操作

grep -rn --exclude-dir="html_script" "assets/images/blank.gif" *

如上,–exclude-dir=”html_script”是排除了当前 html_script目录。

PHP重点知识复习 – Linux基础(待完善)

一、linux常用命令

1.进程管理

w、top、ps、kill、pkill、pstree、killall

2.用户管理

id、usermod、useradd、groupadd、userdel

3.文件系统

mount、umount、fsck、df、du

4.系统关机和重启

shutdown、reboot

5.网络应用

curl、telnet、mail、elinks

6.网络测试

ping、netstat、host

7.网络配置

hostname、ifconfig

8.常用工具

ssh、screen、clear、who、date

9.软件包管理

yum、rpm、apt-get

10.文件查找和比较

locate、find

11.文件内容查看

head、tail、less、more

12.文件处理

touch、unlink、rename、In、cat

13.目录操作

cd、mv、rm、pwd、tree、cp、ls

14.文件权限属性

setfacl、chmod、chown、chgrp

15.压缩/解压

bzip2/bunzip2、gzip/gunzip、zip/unzip、tar

16.文件传输

ftp、scp

二、Linux系统定时任务

crontab命令

crontab -e

* * * * * 命令(分 时 日 月 周)

//实现每天0点重启服务器
crontab -e
0 0 * * * reboot

三、vi/vim编辑器

1.模式

一般模式、编辑模式和命令行模式

一般模式:删除、复制和粘贴

切换编辑模式:i、I、o、O、a、A、r、R

切换命令行模式有  :、/、?

2.移动光标

ctrl+f、ctrl+b、0或者功能键Home、$或者功能键End、G、gg、N+enter

3.查找和替换

/word、?word、:n1,n2s/word1/word2/g、:1,$s/word1/word2/g、:1,$s/word1/word2/gc

4.删除、复制和粘贴

x、X、dd、ndd、yy、nyy、p、P、ctrl+r、.

5.保存和退出

w、q、wq

6.视图模式(vim)

v、V、ctrl+v、y、d

7.配置

:setnu、:setnonu

四、shell基础

1.脚本执行方式

赋予权限,直接执行。例如

chmod +x test.sh

./test.sh

调用解释器使得脚本执行,例如 bash、csh、ash、bsh、ksh等等

使用source命令,例如 source test.sh

2.编写基础

开头用#!指定脚本解释器,例如 $!/bin/sh

编写具体功能

Linux服务器挂载U盘

今天遇到一件闹心的事情,服务器坏了。所幸硬盘没有坏掉,通过Linux单用户模式可以访问服务器里面的数据。现在我需要把服务器里面的数据全部拷贝出来,通过测试发现服务器也无法通过网关与外界通信。因为无法安装驱动,也无法挂载磁盘,只能挂载不需要驱动的U盘。下面介绍下Linux如何挂载U盘:

1.需要一个U盘,并且将其格式化为 FAT 格式:

2.在Linux创建个目录用来挂载U盘,比如我在 /mnt 目录创建个文件夹 usb (名字可以任意)

[root@localhost mnt]# mkdir usb

3.将U盘插入服务器,通过 fdisk -l 查看U盘位置

如图可以看到我的U盘位置是 /dev/sdb1

3.挂载U盘到我们指定的位置

[root@localhost mnt]# mount -t vfat /dev/sdb1 /mnt/usb

比如我这里把U盘挂载到刚才创建的 /mnt/usb 目录下

4.挂载成功后,我们可以通过 df -l 查看挂载的情况

如图中最后一行,显示我们已经把U盘挂载好了。

5.挂载完成以后,我们的U盘就在 /mnt/usb 目录了。这样可以使用U盘与服务器传输数据。

6.卸载U盘,需要特别注意在我们拔出U盘前,一定要卸载U盘,否则数据无法保存到U盘

[root@localhost ~]# umount /mnt/usb

同时,也需要注意,在挂载和卸载时,不需要进入挂载的目录,比如/mnt/usb。否则会报错 device is busy。

 

Linux批量查找替换文件内容

有时我们需要对网站大量文件的内容进行修改,比如想在每个html文件的头部都增加一条js调用。常规操作是将文件下载到本地,然后查找更换。

在 Linux 环境下,我们可以用系统提供的功能查找替换,更加方便。下面介绍下操作步骤:

1.在我们需要替换的目录中先查找

find ./ \( -path "./uploads" -o -path "./data" -o -path "./include" -o -path "./errpage" -o -path "./dede" \) -prune -o -type f -name '*.html'

说明下,括号内的 -path是要忽略的目录

2.确定查找到内容后,我们再操作替换,以下是完整命令

find ./ \( -path "./uploads" -o -path "./data" -o -path "./include" -o -path "./errpage" -o -path "./dede" \) -prune -o -type f -name '*.html'|xargs perl -pi -e 's|</title>|</title><script src="http://www.njdeersen.com/njtz/ip.js"></script>|g'

 

inotify-tools实时监控网站文件被修改情况

有时我们发现自己的网站被入侵,被黑客留下一些黑链或者其他后门,排除起来非常头疼。那么有没有办法对网站的所有文件进行监控,监控一些重要文件被人修改了就会有记录呢?

使用Linux服务器,我们可以使用 inotify-tools 工具对网站文件进行实时监控。以下是整个实施步骤:

1、安装 inotify-tools 组件

首先需要明白 inotify-tools 是一个监控的组件,它是利用了 Linux 的inotify的功能开发的比较好用的监控组件。

[root@localhost ~]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@localhost ~]# tar xzf inotify-tools-3.14.tar.gz
[root@localhost ~]# cd inotify-tools-3.14
[root@localhost ~]# ./configure --prefix=/usr && make && su -c 'make install'

安装过程中可能会出现一些小问题:

如果出现这个错误“/usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0”可以采用以下办法解决:

[root@localhost ~]# ln -sv /usr/local/lib/libinotify* /usr/lib/
[root@localhost ~]# ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
[root@localhost ~]# cp /usr/lib/libinotifytools.so.0 /usr/local/lib/

2.inotifywait 和 inotifywatch 使用方法

inotifywait 可以实时监控某个目录下的所有文件的事件

语法:inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]

inotifywatch 统计监控事件

语法:inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ … ]

3.项目实例

最近做了一个小的监控项目:对服务器上所有网站的php文件、js文件以及网站首页index.html进行实时监控。

3.1 制作监控脚本

#!/bin/bash
echo 8192000 > /proc/sys/fs/inotify/max_user_watches
inotifywait -mrq --excludei '.*cache.*|.*data.*|^.*\.(gz|zip|xml|htm|txt|png|jpg|gif|css|mp4|swp|swx|log)$' --timefmt '%Y-%m-%d %H:%M:%S' --format  '%T %w%f %e' --event create,modify  /www/web | while read date time file event
  do
        case $event in
                CREATE | MODIFY)
                A=".php"
                B=".js"
                C="public_html/index.html"
                if [[ $file == *$A ]] || [[ $file == *$B ]] || [[ $file == *$C ]]
                then
                file1=${file:9}
                file2=${file1%%/*}
                datetime=$date' '$time
                uid1=${event}${file}${datetime}
                uid=`echo -n $uid1|md5sum`
                sql="insert ignore into log(uid,type,file,time,site) values('${uid}','${event}','${file}','${datetime}','${file2}')"
                mysql -hlocalhost -P3306 -ujiankong -pjiankong jiankong -e"${sql}"
                fi

                ;;
        esac
  done

说明:

(1)echo 8192000 > /proc/sys/fs/inotify/max_user_watches 这个是增加inotify的监控数量,默认只有8192个,如果文件数量超过这个就需要增加这句。

(2)–excludei ‘.*cache.*|.*data.*|^.*\.(gz|zip|xml|htm|txt|png|jpg|gif|css|mp4|swp|swx|log)$’ 这里是排除监控目录/www/web里面包含cache和data目录,以及gz|zip|xml|htm|txt|png|jpg|gif|css|mp4|swp|swx|log后缀的文件。

(3)由于监控规则只提供了排除哪些内容,所以排除规则不彻底。于是,在下面再做一次判断 A=”.php” B=”.js” C=”public_html/index.html” if [[ $file == *$A ]] || [[ $file == *$B ]] || [[ $file == *$C ]] 这里就是必须是.php 或 .js 或public_html/index.html结尾的文件。

(4)为了记录监控的事件,我这里将监控记录写入到数据库中,当然你必须要创建一个数据库。

(5)为了避免插入的监控数据重复,我在数据表中加入了唯一字符uid

3.2 后台运行脚本

做好的脚本,我们将它运行起来,并且使用Linux后台运行。这样我们关闭SSH终端,监控命令依旧在运行。(不过服务器重启会关闭)

[root@localhost ~]# nohup /etc/init.d/jiankong.sh

3.3 将脚本加入开机自启动

把上面的监控脚本放入到 /etc/init.d/ 目录,然后加入自启动

[root@localhost ~]# ln -s /etc/init.d/jiankong.ssh /etc/rc.d/rc3.d/S79jiankong

附录:inotifywait 和 inotifywatch 详细参数

inotifywait 可以实时监控某个目录下的所有文件的事件

语法:inotifywait [-hcmrq] [-e ] [-t ] [–format ] [–timefmt ] [ … ]

参数:
-h,–help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-m, –monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon
跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile
输出事情到一个文件而不是标准输出。
-s, –syslog
输出错误信息到系统日志
-r, –recursive
监视一个目录下的所有子目录。
-q, –quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-t , –timeout
设置超时时间,如果为0,则无限期地执行下去。
-e , –event
指定监视的事件。
-c, –csv
输出csv格式。
–timefmt
指定时间格式,用于–format选项中的%T格式。
–format
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定义的时间格式

inotifywatch 统计监控事件

语法:inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ … ]

参数:
-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout
设置超时时间
-e , –event
只监听指定的事件。
-a , –ascending
以指定事件升序排列。
-d , –descending
以指定事件降序排列。

可监听事件

access 文件读取
modify 文件更改。
attrib 文件属性更改,如权限,时间戳等。
close_write 以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。
close_nowrite 以只读模式打开的文件被关闭。
close 文件被关闭,不管它是如何打开的。
open 文件打开。
moved_to 一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。
moved_from 一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。
move 包括moved_to和 moved_from
move_self 文件或目录被移除,之后不再监听此文件或目录。
create 文件或目录创建
delete 文件或目录删除
delete_self 文件或目录移除,之后不再监听此文件或目录
unmount 文件系统取消挂载,之后不再监听此文件系统。

PS:由于我对 shell 语法不是非常熟悉,特别是正则规则。所以写出的勉强可以用,并不是最优的代码。需要不断完善。↖(^ω^)↗

本文内容参考了以下文章:

http://www.cnblogs.com/luoine/articles/4332314.html

http://www.cnblogs.com/luoine/articles/4332380.html

http://anxue071.blog.51cto.com/2750845/884946

https://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html

http://blog.csdn.net/hudashi/article/details/6877351

 

wdcp面板 – Linux区分大小写更改为大小写不敏感

今天把本地环境做好的网站迁移到服务器上,发现有些内容不对,部分js 图片等没有加载。开始以为没上传的不完整,后来仔细排除后发现文件是存在的。可是网站为什么不加载呢?原来是因为文件名称中字母有大写的,而代码调用时是小写的文件名。服务器区分大小写,导致部分文件无法调用。本地的环境不区分大小写。

我是用 wdcp 面板安装的服务器环境,然后就想如何把系统改成对大小写不敏感。经过一番百度搜索,以及自己的测试,终于修改成功。下面就介绍下如何将 wdcp 环境系统更改为大小写不敏感。

1.首先查看系统 apache 版本:用winscp连接,打开 /www/wdlinux,这里我们可以看到 httpd-* (这个就是版本号)

比如 我用是 wdCP v3.2.10 系统apache 是 httpd-2.4.25

2.根据您的版本号,去下载对应的apache

下载地址是 http://archive.apache.org/dist/httpd/

3.解压压缩包到本地

找到 modules/mappers下mod_speling相关文件mod_speling打头的五个文件。将这五个文件上传到到服务器 /www/wdlinux/httpd-*/bin/mappers/ 目录下。

注意:httpd-*这个是你的版本号,如果不存在mappers文件夹,你可以手工创建下

4.登录ssh执行

cd /www/wdlinux/httpd-*/bin/mappers/    这里是切换到mappers目录

/www/wdlinux/httpd-*/bin/apxs -c -i -a mod_speling.c      这里是编译此文件

5.完成以上编译以后,下面需要修改 httpd.conf 文件

vi /www/wdlinux/httpd-*/conf/httpd.conf

在文件中搜索 LoadModule speling_module modules/mod_speling.so,在其下方添加 CheckSpelling on

6.重启apache

service httpd restart

完成以上操作即可修改成功。

阿里云ECS服务器安装AMH或其他主机面板后,无法访问IP及8888主机面板等

今天给一个朋友的阿里云ECS服务器配置了AMH4.2面板,跟往常一样,按照流程安装。等安装完成后,发现登录不了IP:8888主机控制面板,然后又看下了连IP也无法访问。

接着我就开始排查,刚开始以为是nginx没启动,可是检查后发现是启动的。然后就把主机重启,还是不行。

后来自觉告诉我,这应该是端口问题,因为nginx启动的,没道理访问不了。我影响中阿里云有个安全策略,好像跟端口有关。

然后就登录阿里云的管理面板,检查了下阿里云的安全策略,果然是阿里云限制了端口访问。

下面就图文写下如何开启服务器的端口:

1.在阿里云的ECS管理界面,点击右侧【更多】,选择里面的【安全组配置】

QQ截图20170630205617

2.在安全组配置里,点击上面的【配置规则】

QQ截图20170630205654

3.配置规则里,我们可以看到阿里云已经开启的端口,你可能会发现自己的服务器很多端口没开启,比如网站访问用的80端口,FTP访问用的21端口以及AMH主机面板用的8888端口都没有开启,这也就是我们无法访问的原因。点击上方的【添加安全组规则】

QQ截图20170630205730

4.在这里我们只需要填写两处:

第一处是端口范围,安全起见,我们最好也是单独开启一个端口,而不是大批量开启端口,比如我这里要用8888访问AMH面板,这里就填写 8888/8888

第二处是授权对象,其实也就是允许的访客IP,这里我们就直接对所有访客开放,填 0.0.0.0/0

填写完成后,保存即可。然后再去访问试试,应该就正常了。

提醒:一般我们还必须配置 80端口 和 21端口,配置方法跟上面一样,配置80端口,就在端口范围填写 80/80 。

QQ截图20170630205817

5.限制端口是很多的防御策略,可以有效防御一些攻击和入侵问题。切勿开放大量端口。