十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
grep命令
10年的惠来网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整惠来建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“惠来网站设计”,“惠来网站推广”以来,每个客户项目都认真落实执行。
grep
1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
2.格式及主要参数
grep [options]
主要参数: grep --help可查看
-c:只输出匹配行的计数。
-i:不区分大小写。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
--color=auto :可以将找到的关键词部分加上颜色的显示。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\:从匹配正则表达 式的行开始。
\:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的单个字符。
*:所有字符,长度可以为0。
3.grep命令使用简单实例
itcast$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行
itcast $ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
itcast $ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
itcast $ grep ‘wesest.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
4.grep命令使用复杂实例
明确要求搜索子目录:
grep -r
或忽略子目录
grep -d skip
如果有很多输出时,您可以通过管道将其转到’less’上阅读:
itcast$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就可以更方便地阅读。
有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 ,然后再试。
下面还有一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
例如:grep "abc\|xyz" testfile 表示过滤包含abc或xyz的行
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。
grep -n pattern files 即可显示行号信息
grep -c pattern files 即可查找总行数
还有些用于搜索的特殊符号:\ 和 \ 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\man\’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
‘^’: 指匹配的字符串在行首,
su和sudo这两个命令是Linux运维必须要会的,通常在生产环境中都是使用普通帐号来登录,再使用su或sudo来执行一些管理命令。
su:run a shell with substitute user and group ids
-,-l,--login 切换后使用指定用户的的shell。
-c,--command=COMMAND 可以在不切换当前shell的情况下,用指定的用户来执行一个命令;
如果在su的时候没有加”-“或“-l”或“--login”那么默认的会使用 当前用户 的shell来执行 ;
sudo的配置文件是: /etc/sudoers ,该文件可以定义哪个用户可以在哪个机器上以哪个用户的身份来执行哪些命令;
在配置sudo时必须使用 visudo 来编辑配置文件,因为使用visudo可以检查修改后的文件的语法是否正确;
可以将上面的配置行分成四部分:part1 part2 part3 part4
例如:
那么如果用户的数量过多的时候是不是要为每个用户来创建一个条目呢,很显示这样做是不科学的。所以sudo就引入了别名的概念,其实和组也差不多;
alias定义的语法:
要注意的是,这个Alias的名称一定要大写;
user1是一个用户,user2是一个组,所以user2的前面要加上%
可以使用主机名,IP地址,网段(网段的掩码可以写成255.255.255.0,也可以写成/24)
命令必须使用绝对路径。如果只指定了一个目录,那么用户就可以执行该目录下的所有的文件;上面的“=”右边的都可以使用“!”来取反。表示除了xxx以外;
例子 :请允许user1,user2,user3在192.168.20.44和192.168.10.0/24网段的机器上使用sudo切换到root用户来执行useradd和setup命令;
然后就可以使用user1,user2,user3这三个用户去测试了;
注意:当用户第一次执行sudo命令的时候是需要用户输入自己的密码的。当第一次输入正确后,这个密码就会被缓存5分钟,在5分钟内用户再次使用sudo来切换身份执行命令的时候就不需要再次输入自己的密码。
这样呢有些时候会有一个安全隐患,所以为了去掉这个5分钟,可以在使用sudo命令的时候加上“-k”参数,这样用户在每次执行sudo命令的时候都会让用户输入自己的密码。
如果想让某个用户在执行sudo的时候不需要输入自己的密码,那么可以在命令的前面添加NOPASSWD。/etc/sudoers的内容如下:
这样的话,user1,user2,user3这三个用户在执行指定的命令的时候就不需要输入自己的密码了。
如果其中的命令有的需要输入密码,有的不需要输入密码的话,那就把PASSWD:写在那些命令的前面。或是把NOPASSWD:写在最后一个命令中;
例子:让用户user4使用passwd来管理用户的密码,但是不能给root用户设置密码:
注意:如果最后不加上!/usr/bin/passwd root的话,那么会有很大的漏洞,user4可以修改root用户的密码;当添加上后,user4再次执行sudo passwd root的时候就会提示:
-ctime -1在一天前以内修改的,就是不包括前天
+1是一天前之外修改的,不包括昨天
!就是取反
确实是,我这么做也是显示不一样的
不过我在chinaunix提问了,有人做出来的结果是一样的
1.列出文件清单命令:ls
ls命令能够列出当前目录下的所有内容。ls 命令的执行方式为:
# ls [-选项] [文件名或者目录名]
进入到Linux命令行中后,我们至少要知道当前所处的位置有哪些内容,这些信息就可以使用ls命令来获得。
在Linux中,ls命令是最常使用的命令之一,因为在命令行下要随时查看目录内容。如果不加任何选项的话,ls命令仅列出当前目录下的文件和目录名,例如,想要查看/etc目录下的内容,可以使用下列命令:
# ls /etc
如果想要列出当前目录下所有文件,则可以使用下列命令:
# ls -a
2、cat命令
功能:在标准输出上显示文件。
语法:cat [-vTEuAte] 文件
例子: cat example.txt
cat -A exam2.txt
cat file1 file2 file2
3、more命令
功能:在终端屏幕按屏显示文本文件。
语法: more [-pcdls] 文件
例子: more example.c
more -dc example.c
more -c -10 example.c
4、less命令
less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户既
可以向前又可以向后翻阅文件。
5、head命令
功能:显示指定文件的前若干行。缺省设置为显示10行
语法:head [-n] 文件
例子: head example.c
head -3 example.c
6、tail命令
功能:显示指定文件的末尾若干行。缺省设置为显示10行
语法:tail [+ / - num ] [参数] 文件
+num 从第num行以后开始显示。- num 从距文件尾num行处开始显示。
例子: tail example.c
tail -4 example.c
7、grep、fgrep和egrep命令
功能:
这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
语法:
grep [-EFbcihlnvxef] [查找模式] [文件名1,文件名2,……]
egrep [选项] [查找模式] [文件名1,文件名2,……]
fgrep [选项] [查找模式] [文件名1,文件名2,……]
例子: grep "text file" example
grep data *
grep goto *.c
管道符是将前一步的计算结果作为下一步的输入值;反引号的作用就是将反引号内的linux命令先执行,然后将执行结果赋予变量。
你的理解基本正确,不过find会查找你指定目录的所有子目录,就是递归查找子目录里的内容。普通用户没有权限使用find,你可以执行 visudo 命令,里面有一行是
root ALL=(ALL)……
你也添加类似一行:
youruser ALL=(ALL)……
这样你这个用户就可以执行root的命令了:sudo find ……
root执行出来的应该和普通用户执行出来的一样啊,而且肯定root不会遇到permission deny的搜索结果。但普通用户限于权限问题,搜索有些位置的时候就会遇到permission deny的拒绝。
我也刚刚了解不久,期待完善