egrep
【使用权限】
所有使用者
【语法】
egrep [选项] [查找模式] [文件名1,文件名2,……]
【功能说明】
以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。
【参数】
- 选项:
- E 每个模式作为一个扩展的正则表达式对待。
- F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。
- b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。
- c 只显示匹配行的数量。
- i 比较时不区分大小写。
- h 在查找多个文件时,指示grep不要将文件名加入到输出之前。
- l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。
- n 在输出前加上匹配串所在行的行号(文件首行行号为1)。
- v 只显示不包含匹配串的行。
- x 只显示整行严格匹配的行。
- e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。
- f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。
- 用于egrep和 grep -E的元字符扩展集
+:匹配一个或多个先前的字符。如:\‘[a-z]+able\‘,匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。
?:匹配零个或多个先前的字符。如:\‘gr?p\‘匹配gr后跟一个或没有字符,然后是p的行。
a|b|c:匹配a或b或c。如:grep|sed匹配grep或sed
():分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。
x{m},x{m,},x{m,n}:作用同x{m},x{m,},x{m,n}
【实例】
- -c 参数的使用
[[email protected] ~]# egrep -c MANPATH /etc/man.config ----à统计含有MANPATH的行数
23
[[email protected] ~]#
- -n 参数的使用
[[email protected] ~]# egrep -n MANPATH /etc/man.config ----à输出含有MANPATH的行数,并显示所在行的行号
11:# when
MANPATH contains an empty substring), to find out where the cat
18:#
MANPATH manpath_element
[corresponding_catdir]
19:#
MANPATH_MAP
path_element manpath_element
41:# Every
automatically generated MANPATH includes these fields
43:MANPATH /usr/man
44:MANPATH /usr/share/man
45:MANPATH /usr/local/man
46:MANPATH /usr/local/share/man
47:MANPATH /usr/X11R6/man
……
[[email protected] ~]#
- egrep正则表达式中的使用(grep也适用)
[[email protected] ~]# cat >> /tmp/liqunyan.txt << liqunyan
----à创建测试文件(根据鸟哥书上写的)
>
"Open Source" is a good mechanism to develop programs.
> apple is
my favorite food.
> Football
game is not use feet only.
> this
dress doesn‘t fit me.
> However,
this dress is about $ 3183 dollars.
> GNU is
free air not free beer.
> Her hair
is very beauty.
> I can‘t
finish the test.
> Oh! The
soup taste good.
>
motorcycle is cheap than car.
> This
window is clear.
> the
symbol ‘*‘ is represented as start.
> Oh!My
god!
> The gd
software is a library for drafting programs.
> You are
the best is mean you are the no. 1.
> The world
<Happy> is the same with "glad".
> I like
dog.
> google is
the best tools for search keyword.
>
goooooogle yes!
> go! go!
Let‘s go.
> # I am
VBird
>
>
>
liqunyan
[[email protected] ~]# egrep -n ‘t[ae]st‘ /tmp/liqunyan.txt ----à查找tast或者test
8:I can‘t
finish the test.
9:Oh! The soup
taste good.
[[email protected]
~]# egrep -n ‘oo‘
/tmp/liqunyan.txt ----à查找含有oo字符的行
1:"Open
Source" is a good mechanism to develop programs.
2:apple is my
favorite food.
3:Football
game is not use feet only.
9:Oh! The soup
taste good.
18:google is
the best tools for search keyword.
19:goooooogle
yes!
[[email protected]
~]# egrep -n ‘[^g]oo‘
/tmp/liqunyan.txt ----à查找不是以g开头的并含有oo字符的行
2:apple is my
favorite food.
3:Football
game is not use feet only.
18:google is
the best tools for search keyword.
19:goooooogle
yes!
[[email protected]
~]# egrep -n ‘[^a-z]oo‘
/tmp/liqunyan.txt ----à查找不是以小写字母开头的含有oo字符的行
3:Football
game is not use feet only.
[[email protected] ~]# egrep -n ‘[0-9]‘ /tmp/liqunyan.txt ----à查找含有数字的行
5:However,
this dress is about $ 3183 dollars.
15:You are the
best is mean you are the no. 1.
[[email protected] ~]# egrep -n ‘^the‘ /tmp/liqunyan.txt ----à查找以the开头的行
12:the symbol
‘*‘ is represented as start.
[[email protected] ~]# egrep -n ‘^[a-z]‘ /tmp/liqunyan.txt ----à查找以小写字母开头的行
2:apple is my
favorite food.
4:this dress
doesn‘t fit me.
10:motorcycle
is cheap than car.
12:the symbol
‘*‘ is represented as start.
18:google is
the best tools for search keyword.
19:goooooogle
yes!
20:go! go!
Let‘s go.
[[email protected] ~]# egrep -n ‘go*‘ /tmp/liqunyan.txt ----à查找go(不含o或者含有一个1以上)的行
1:"Open
Source" is a good mechanism to develop programs.
3:Football
game is not use feet only.
9:Oh! The soup
taste good.
13:Oh!My god!
14:The gd
software is a library for drafting programs.
16:The world
<Happy> is the same with "glad".
17:I like dog.
18:google is
the best tools for search keyword.
19:goooooogle
yes!
20:go! go!
Let‘s go.
[[email protected] ~]# egrep -n ‘go+‘ /tmp/liqunyan.txt ----à查找go(至少含有1个o)的行
1:"Open
Source" is a good mechanism to develop programs.
9:Oh! The soup
taste good.
13:Oh!My god!
18:google is
the best tools for search keyword.
19:goooooogle
yes!
20:go! go!
Let‘s go.
[[email protected] ~]#
grep
【使用权限】
所有使用者
【语法】
grep [-acinv]
[-A <显示行数>] [-B<显示行数>] [-C<显示行数>] [--color=auto] “查找字符串” filename
【参数】
-a:将binary(二进制)文件以text文件的方式查找数据
-c: 计算找到“查找字符串”的次数
-i:忽略大小写的不同
-n:顺便输出行号
-v:反向选择,即显示出没有’查找字符’内容的那一行
--color=auto:可以将找到关键字部分加上颜色
-A<显示行数>或—after-context=<显示行数>:除了显示符合查找字符串的那一行之外,并显示该行之后的那几行的内容
-B<显示行数>或—before-context=<显示行数>:除了显示符合查找字符串的那一行之外并显示该行之前的那几行的内容>
-C<显示行数>或—coutext<显示行数>:除了显示符合查找字符串的那一行之外并显示该行前后的内容
【实践】
- 输出行号并忽略大小写
[[email protected] ~]$ cat test.txt 1sb in the moring 1SB in the evening 2 in the moring 2sb in the evening 3sb in the moring 3sb in the evening [[email protected] ~]$ grep -in sb test.txt 1:1sb in the moring 2:1SB in the evening 4:2sb in the evening 5:3sb in the moring 6:3sb in the evening |
- 计算test.txt要查找的字符“sb”和“SB”有多少个
[[email protected] ~]$ grep -c sb test.txt 4 [[email protected] ~]$ grep -c SB test.txt 1 |
- 反向查找并忽略大小写
[[email protected] ~]$ grep -iv sb test.txt 2 in the moring |
- -A、-B、-C的使用
[[email protected] ~]$ grep -iv sb -A 1 test.txt #-----à将目标及后一行输出 2 in the moring 2sb in the evening [[email protected] ~]$ grep -iv sb -B 1 test.txt #-----à将目标及前一行输出 1SB in the evening 2 in the moring [[email protected] ~]$ grep -iv sb -C 1 test.txt #------à将目标及前一行和后一行都输出 1SB in the evening 2 in the moring 2sb in the evening |
vi/vim
基本上vi共分为3种模式,分别是一般模式、编辑模式、命令行模式。
- 一般模式
以vi打开一个文件就直接进入一般模式了(默认模式)。在这个模式,你可以使用上下键来移动光标,可以删除字符或者删除整行,也可以复制、粘贴你的文件数据。但是无法编辑文件内容。
- 编辑模式
在一般模式下,按下“i、I、a、A、o、O、r、R”等任何一个字母之后才会进入编辑模式,编辑文件内容。退回到一般模式,需要按下【Esc】。
- 命令行模式
在一般模式中,输入“:、/、?”3个中任何一个按钮,就可以将光标移动到最下面的那一行。在这个模式中,可以提供你查找数据的操作,而读取、保存、大量替换字符、离开vi、显示行号等操作。退回到一般模式,需要按下【Esc】。
注意:vi的三种模式只有一般模式可以与编辑、命令行模式切换,编辑模式与命令行模式之间不能切换的。
一般模式常用按键说明:
- 移动光标的方法
n<space> |
将光标向右移动这一行的n个字符 |
0或功能键[Home] |
数字0,将光标移到这一行的最前面字符处 |
$或功能键[End] |
将光标移动到这一行的最后字符处 |
G |
将光标移动到最后一行的行首 |
nG |
将光标移动到这个文件的第n行行首 |
gg |
将光标移动到第一行的行首,相当于1G |
- 查找与替换
/word |
向下寻找一个名称为word的字符串 |
?word |
向上寻找一个名称为word的字符串 |
n |
代表前一个查找的操作 |
N |
与n相反,为“反向”进行前一个查找操作 |
:n1,n2s/word1/word2/g |
在第n1行与n2行之间查找word1这个字符串,并将该字符串替换为word2 |
:1,$s/word1/word2/g |
从第一行到最后一行查找word1字符串,并将该字符串替换为word2 |
:1.$s/word1/word2/gc |
从第一行到最后一行查找word1字符串,并将该字符串替换为word2.且在替换前显示提示字符给用户确认(confirm)是否需要替换 |
- 删除、复制与粘贴
x,X |
在一行字中,x为向后删除一个字符,X想前删除一个字符 |
nx |
连续向后删除n个字符 |
dd |
删除光标所在的那一行 |
ndd |
删除光标所在的向下n行 |
d$ |
删除从光标所在处到该行的最后一个字符 |
d0 |
删除从光标所在处到该行的第一个字符 |
yy |
复制光标所在的那一行 |
nyy |
复制光标所在的向下n行 |
y0 |
复制光标所在的那个字符到该行行首的所有字符 |
y$ |
复制光标所在的那个字符到该行行尾的所有字符 |
p,P |
p为将已复制的数据在光标下一行粘贴,P则为粘贴在光标的上一行 |
- 其他操作符
u |
复原前一个操作(相当于浏览器的“后退”按钮) |
[ctrl+r] |
重做上一个操作(相当于浏览器的“前进”按钮) |
. |
小数点,意思是重复前一个操作的意思 |
一般模式切换到编辑模式的可用的按钮说明:
i,I |
进入插入模式:i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处插入 |
a,A |
进入插入模式:a为从目前光标所在的下一个字符开始插入,A为从光标所在的行最后一个字符处插入 |
o,O |
进入插入模式:o为在目前光标所在的下一行插入新的一行,;O为在目前光标所在处的上一行插入新的一行 |
r,R |
进入替换模式:r只会替换光标所在的那个字符一次,R会一直替换光标所在的文字,直到按下[Esc]为止 |
一般模式切换到命令行模式的可用按钮说明:
:w |
将编辑的数据写入硬盘文件中 |
:w! |
若文件属性为“只读”时,强制写入该文件。到底能不能写入,还是跟你对该文件的文件权限有关 |
:q |
离开vi |
:q! |
若曾修改过文件,又不想存储,使用“!”为强制离开不保存文件 |
:wq |
保存后离开,若为“:wq!”则为强制保存后离开 |
ZZ |
若文件没有变更,则不保存离开,若文件已经被更改过,则保存后离开 |
:w[filename] |
将编辑的数据保存成另一个文件 |
:r[filename] |
在编辑的数据中,读入另一个文件的数据,即将“filename”这个文件内容加到光标所在行后面 |
:n1,n2w[filename] |
将n1,n2的内容保存成filename这个文件 |
:!command |
暂时离开vi命令行模式下,。执行command的显示结果 |
:set nu |
显示行号 |
:set nonu |
取消行号 |
关于练习:鸟哥私房菜第三版page281有练习。
文本源链接:http://linux.vbird.org/linux_basic/0310vi/man.config
chmod
【使用权限】
所有使用者
【语法】
chmod [-cfvR] [--help] [--version] mode
file
【功能说明】
设定文件和目录的权限
【参数】
-c:若该档案权限确实已经更改,才显示其更改动作
-f:若该档案权限无法被更改也不要显示错误讯息
-v:显示权限变更的详细资料
-R:对目前目录下的所有档案与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help:显示辅助说明
--version:显示版本
mode:权限设定字串,格式如下:[ugoa…][+-=][rwxX…][…]其中u表示该文件的拥有者,g表示与该档案的拥有者属于同一个群组者,o表示其他以外的人,a表示这三者皆是。
+表示增加权限,-表示取消权限,=表示唯一设定权限
【实践】
========================将文件设为所有人皆可读取======================== [[email protected] ~]# ll ett.txt ---------- 1 root root 26 05-23 00:08 [[email protected] ~]# chmod a+r ett.txt [[email protected] ~]# ll ett.txt -r--r--r-- 1 root root 26 05-23 00:08 =======================递归设置目录文件权限============================= [[email protected] ~]# chmod 000 -R qinbf/ [[email protected] ~]# ll ….. d--------- 2 root root 4096 05-21 02:29 qinbf ….. [[email protected] ~]# cd qinbf #---------------à老师,这里root自己也没有r和x权限,会什么可以进入目录,并浏览目录呢 [[email protected] qinbf]# ll 总计 8 ---------- 1 root root 0 05-21 02:29 ---------- 1 root root 0 05-21 02:29 [[email protected] ~]# chmod u+rx -R qinbf [[email protected] ~]# ll …… dr-x------ 2 root root 4096 05-21 02:29 qinbf ……. [[email protected] ~]# cd qinbf [[email protected] qinbf]# ll 总计 8 -r-x------ 1 root root 0 05-21 02:29 -r-x------ 1 root root 0 05-21 02:29 ================================数字设定权限=========================== [[email protected] qinbf]# ll 总计 8 ---------- 1 root root 0 05-21 02:29 ---------- 1 root root 0 05-21 02:29 [[email protected] qinbf]# chmod 752 * [[email protected] qinbf]# ll 总计 8 -rwxr-x-w- 1 root root 0 05-21 02:29 -rwxr-x-w- 1 root root 0 05-21 02:29 |
chown
【使用权限】
root权限
【语法】
chown
[-cfhvR] [--help] [--version] user[:group]
file
【功能说明】
更改文件或目录的所有者或群组
【参数】
-c:若该档案权限确实已经更改,才显示其更改动作
-f:若该档案权限无法被更改也不要显示错误讯息
-v:显示权限变更的详细资料
-R:对目前目录下的所有档案与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help:显示辅助说明
--version:显示版本
user:新的档案拥有者
group:新的档案拥有者群组
【实践】
[[email protected] qinbf]# ll 总计 8 -rwxr-x-w- 1 root root 0 05-21 02:29 -rwxr-x-w- 1 root root 0 05-21 02:29 [[email protected] qinbf]# chown qinbf.qinbf baoliu.txt [[email protected] qinbf]# ll 总计 8 -rwxr-x-w- 1 qinbf qinbf 0 05-21 02:29 -rwxr-x-w- 1 root root |
chgrp
【使用权限】
root权限
【语法】
chgrp
[-cfvR] group file
【功能说明】
可采用群组名称或群组识别码的方式改变文件或目录的所属群组
【参数】
-c:若该档案权限确实已经更改,才显示其更改动作
-f:若该档案权限无法被更改也不要显示错误讯息
-v:显示权限变更的详细资料
-R:对目前目录下的所有档案与子目录进行相同的权限变更(即以递归的方式逐个变更)
【实践】
[[email protected] qinbf]# ll 总计 8 -rwxr-x-w- 1 qinbf qinbf 0 05-21 02:29 -rwxr-x-w- 1 root root [[email protected] qinbf]# chgrp root -v baoliu.txt “baoliu.txt” 的所属组已更改为 root [[email protected] qinbf]# ll 总计 8 -rwxr-x-w- 1 qinbf root 0 05-21 02:29 -rwxr-x-w- 1 root root 0 05-21 02:29 paichu.txt |
echo
【使用权限】
所有使用者
【语法】
echo [-ne] [字符串]或 echo
[--help][--version]
【功能说明】
显示文字,默认会将结果字符串送往标准输出。输出的字符串以空白字符隔开,并在最后加上换行号
【参数】
-n:不要在最后自动换行
-e:若字符串出现以下字符,则特别处理,而不会将它当成一般文字输出:
\a:发出警告声
\b:删除前一个字符
\c:最后不加上换行号
\f:换行但光标仍旧停留在原来的位置
\n:换行且光标移至行首
\r:光标移至行首。但不换行
\t:插入tab
\v:与\f相同
\\: 插入\字符
\nnn:插入nnn(八进制)所代表的的ASCII字符
--help:显示帮助
--version:显示版本信息
Echo要变换颜色的时候,要使用参数-e
【实践】
- 使用echo输出变量信息
[[email protected] ~]$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/qinbf/bin:/usr/local/sbin:/sbin:/usr/sbin |
- echo的默认使用
[[email protected] ~]$ echo hello qinbf hello qinbf |
- \\参数的使用
[[email protected] ~]$ echo hello \\ qinbf hello \ qinbf |
- 参数\n的使用
[[email protected] ~]$ echo -e "hello\nqinbf" hello qinbf |
- 往文件写内容,如果文件不存在则创建文件
[[email protected] ~]$ ll test/ 总计 0 [email protected] ~]$ echo "hello qinbf">test/qinbf.txt [[email protected] ~]$ ll test/ 总计 8 -rw-rw-r-- 1 qinbf qinbf 12 05-21 15:49 qinbf.txt |
- 给用户设置密码
[[email protected] ~]# echo "qbf8038" | passwd --stdin test Changing password for user test. passwd: all authentication tokens updated successfully. |
umask
【使用权限】
所有用户
【语法】
umask mode
【功能】
控制文件或目录的默认权限
【参数】
mode:指的是数字权限(0-7)
【实践】
[[email protected] test]# ll #----------à当前的目录为空 总计 0 [[email protected] ~]# umask #--------à查看当前uamsk值 0022 [[email protected] test]# touch qinbf.txt #---------à创建新文件 [[email protected] test]# ll 总计 4 -rw-r--r-- 1 root root 0 05-27 20:58 #------à当前文件的权限为644,此为文件默认权限666减去022(umask值)所得 [[email protected] test]# umask 044 #---------à修改umask值为044 [[email protected] test]# touch qinbf2.txt #---------à创建新文件 [[email protected] test]# ll 总计 8 -rw--w--w- 1 root root 0 05-27 20:59 #--------à新文件的权限为422,此为文件的默认权限666减去umask值044所得 -rw-r--r-- 1 root root 0 05-27 20:58 [[email protected] test]# umask 555 #---------à修改umask值为555 [[email protected] test]# touch qinbf3.txt #---------à创建新文件 [[email protected] test]# ll 总计 12 -rw--w--w- 1 root root 0 05-27 20:59 --w--w--w- 1 root root 0 05-27 20:59 -rw-r--r-- 1 root root 0 05-27 20:58 [[email protected] test]# umask 666 #---------à修改umask值为666 [[email protected] test]# touch qinbf4.txt #---------à创建新文件 [[email protected] test]# ll 总计 16 -rw--w--w- 1 root root 0 05-27 20:59 --w--w--w- 1 root root 0 05-27 20:59 ---------- 1 root root 0 05-27 21:00 #----------à新建的文件权限为空 -rw-r--r-- 1 root root 0 05-27 20:58 |
chattr/lsattr
【使用权限】
所有使用者
【语法】
chattr [-RVf] [-v version] [mode] files; lsattr [file]
【功能说明】
chattr控制文件或目录更底层的属性;lsattr是查看文件的特殊属性
【参数】
mode部分
+:在原有参数设定基础上,追加参数
-:在原有参数设定基础上,移除参数
=:更新为指定参数设定
A:文件或目录的atime(access time)不可被修改,可以有效预防手提电脑磁盘I/O错误的发生
S:硬盘I/O同步选项,功能类似sync
a:即append,设定参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性
c:即compress,设定文件是否经压缩后再存储,读取时需要经过自动解压操作
d:即no dump,设定文件不能成为dump的备份目标
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增。I参数对于文件系统的安全设置有很大帮助。
j:即journal,设定此参数使得当通过mount参数:data=ordered或者data=writeback挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定为data=journal,则该参数自动失效
s:保密性地删除文件或目录,即硬盘空间被全部收回
u:与s相反,当设定为u,数据内容其实还存在磁盘中,可以用于undeletion。
各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全。而i是更为严格的安全设定,只有superuser
CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。
【实践】
[[email protected] ~]$ chattr +i 1.html #----------à只有root权限才有添加i的权限 chattr: 不允许的操作 while setting flags on 1.html [[email protected] ~]$ sudo su - [sudo] password for qinbf: [[email protected] ~]# cd /home/qinbf [[email protected] qinbf]# ll 总计 44 -rw-rw-r-- 1 qinbf qinbf 0 05-30 21:08 1.html -rw-rw-r-- 1 qinbf qinbf 0 05-30 21:08 2.html -rw-rw-r-- 1 qinbf qinbf 0 05-30 21:08 3.html -rw-rw-r-- 1 qinbf qinbf 14 05-30 20:05 grep.html -rw-rw-r-- 1 qinbf qinbf 17 05-30 20:05 qinbf.html -rw-rw-r-- 1 qinbf qinbf 30 05-30 20:05 student.html -rw-rw-r-- 1 qinbf qinbf 206 05-30 20:48 [[email protected] qinbf]# chattr +i 1.html #----------àroot添加成功 [[email protected] qinbf]# lsattr ----i-d------ ./1.html ------------- ./grep.html ------------- ./qinbf.html ------------- ./test.sh ------------- ./3.html ------------- ./2.html ------------- ./student.html [[email protected] qinbf]# echo "qinbf" -bash: 1.html: 权限不够 [[email protected] qinbf]# chmod 777 1.html chmod: 更改 [[email protected] ~]$ echo "qinbf">>1.html #-----------à用户本身具有w权限也无法添加内容 -bash: 1.html: 权限不够 [[email protected] ~]$ chmod 777 1.html chmod: 更改 |