文件与目录(权限,操作,搜索)
==================================================
一:权限
---------------------------------------------------------------------------------------------
用户和权限管理:
进程安全上下文:
进程:运行一个程序文件而产生,通常由一个用户发起;进程则以发起者的身份运行;
判断进程的发起者是否与文件属主相同,如果是,则以属主的身份来访问,从而应用属主权限;否则
判断进程的发起者是否属于文件的属组,如果是,则应用属组权限;否则
应用“其它”权限
例外场景:factl, suid, sgid, sticky
文件系统文件权限:
三类用户:
属主:owner, u
属组:group, g
其它:other, o
权限:
r: readable,可读
w: writable, 可写
x:excutable, 可执行
权限管理:
文件:
r:可获取文件的数据
w:可修改文件的数据
x:可将此文件运行为进程
目录:
r:可使用ls命令获取其下的所有文件列表;但不可以使用“ls -l”去获取详细信息,也不可以cd至此目录中
w:可修改此目录下的文件列表, 即可以在此目录下创建或删除文件
x:可以使用"ls -l“命令来获取其下的文件的详细属性信息,也可cd至此目录中
rwxrwxrwx:
owner: rwx
group: rwx
other: rwx
权限组合机制:
以owner为例:
二进制 八进制
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
例如:
rwxr-xr-x:755
rw-r--r--: 644
ownership: 仅管理员有权限
改属主:chown
改属组:chgrp
mode(permission):仅属主
chmod
---------------------------------------------------------------------------------------------
(*)chmod:改变文件模式位
SYNOPSIS:
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
OPTIONS:(用户的标识符:u,g,o,a)
(1) chmod [OPTION]... MODE[,MODE]... FILE...
MODE:
赋权表示法:直接操作一类用户的所有权限位rwx;
u=
g=
o=
a=
两类用户权限相同:ug=, go=
不同类的用户权限不同:u=,g=,o=
授权表示法:操作一类用户一位或多位权限;
u+, u-
g+, g-
o+, o-
a+, a-
两类用户权限收授机制相同:ug+, ug-, ...
不同类的用户权限不同:u+,g+,o+
~]# chmod u=rwx bash.sh
~]# chmod u-x bash.sh
(2) chmod [OPTION]... OCTAL-MODE FILE...
~]# chmod 755 bash.sh
(3) chmod [OPTION]... --reference=RFILE FILE...
--reference=RFILE:RFILE表示参考其权限模型;
~]# chmod --reference reference.sh bash.sh
-R, --recursive:递归修改;
~]# chmod -R 755 Public/
---------------------------------------------------------------------------------------------
(*)chown:更改文件所有者和组
SYNOPSIS
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
OPTIONS:
~]# chown mdx bash.sh (改变属主)
~]# chown mdx:user bash.sh (改变属主是mdx,属组是user)
~]# chown --reference reference.sh bash.sh (参照reference.sh的所有者和组)
-R, --recursive:递归修改(目录)
~]# chown –R root:root rootfs
---------------------------------------------------------------------------------------------
(*)chgrp:变更文件或目录的所属组
SYNOPSIS
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
OPTIONS:
~]# chgrp user bash.sh (变更bash.sh文件所属组为user)
~]# chgrp --reference reference.sh bash.sh (参照reference.sh文件进行所属组修改)
-R, --recursive:递归(目录)
~]# chgrp -R user Public/
---------------------------------------------------------------------------------------------
(*)umask:显示或设定文件模式掩码
文件:
666-umask
目录:
777-umask
注意:之所以文件用666去减,表示文件默认不能有执行权限;如果减得的结果中,u,g或o有执行权限时,则需要加1;
显示:
~]$ umask
0002
设定:
umask MASK
~]$ umask 0333
注意:此设定仅对当前shell进程有效
---------------------------------------------------------------------------------------------
二:查看,修改与统计
---------------------------------------------------------------------------------------------
(*)ls:列出指定目录下的内容
SYNOPSIS:
ls [OPTION]... [FILE]...
DESCRIPTION:
-a, --all:显示所有文件,包括.和..在内所有隐藏文件;
-A, --almost-all
-l:use a long listing format
drwxr-xr-x 2 root root 18 2月 29 03:38 account
drwxr-xr-x:
d:文件类型,一个字符;
rwxr-xr-x:文件权限,permission;
perm:
r:readable
w:writable
x: excutable
权限三位一组。
左三位:属主的访问权限。
中三位:属组的所有用户的访问权限。
右三位:其它(other)用户的访问权限。
2:数字,表示文件被硬链接的次数。
root:一个用户名,表示当前文件的属主(owner)。
root:一个组名,表示当前文件属组(group)。
18:一个数值,表示当前文件的size,默认单位为字节。
2月 29 03:38 :一个时间,表示文件最近一次被修改的时间。
account:文件名;
-h, --human-readable:对数值做单位换算。
-d:查看目录自身的属性。
-R:recursive,递归显示。
-r:reverse,降序显示。
--color={never|auto|always}:何时着色显示。
---------------------------------------------------------------------------------------------
(*)pwd:显示工作目录
~]$ echo $PWD (等同于 pwd)
/home/mdx
~]$ echo $OLDPWD (上一次的工作目录)
/home/mdx/man
~]$ pwd
/home/mdx
---------------------------------------------------------------------------------------------
(*)cd:change directory
SYNOPSIS:
cd: cd [-L|[-P [-e]]] [dir]
DESCRIPTION:
cd:切换回家目录。
注意:bash中,~表示用户的家目录。
cd ~:切换回家目录。
cd ~USERNAME:切换至指定用户的家目录。
cd -:在上一次所在目录与当前目录之间来回切换。
---------------------------------------------------------------------------------------------
(*)cat:连接并倾倒至输出设备。
SYNOPSIS:
cut OPTION... [FILE]...
DESCRIPTION:
-n, --number: 对显示出的行进行编号。
~]$ cat -n cd.php
-E, --show-ends:显示行结束符。
~]$ cat -E cd.php
Ctrl+c:中止当前命令。
---------------------------------------------------------------------------------------------
(*)tac: cat的逆序。
---------------------------------------------------------------------------------------------
(*)file:查看文件内容类型
SYNOPSIS:
file [-bchiklLNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname]
[-F separator] [-f namefile] [-m magicfiles] file ...
file -C [-m magicfiles]
file [--help]
OPTIONS:
~]$ file bash.sh
bash.sh: ASCII text
---------------------------------------------------------------------------------------------
(*)echo:回显命令
SYNOPSIS
echo [SHORT-OPTION]... [STRING]...
echo LONG-OPTION
DESCRIPTION:
-n:不自动附加换行符;
-e:启用转义符;
\n:换行
\b:退格
\t:水平制表符
\v:垂直制表符
数据有其类型:决定了其存储空间、能参与的运算
”127“:字符串
ASCII text:24bits
127:数值
0111 1111:8bits
bash是弱类型的编程语言,不严格区分数据类型,意味把所有数据统统当作字符串处理;
字符串类型的数据可不加引号;
引号有三种类型:', ", `
', ":字符引用
': 强引用,其内部的变量不会被替换;
":弱引用,其内部的变量会被替换;
`:命令引用
变量引用:${NAME}
---------------------------------------------------------------------------------------------
(*)mkdir:创建目录
SYNOPSIS:
mkdir [OPTION]... DIRECTORY...
DESCRIPTION:
-m, --mode=MODE:设定目录权限
~]$ mkdir -m 755 dir
-p, --parents:按需创建父目录路径。
~]$ mkdir -p a/b/c/d
-v, --verbose:打印创建目录的信息。
~]$ mkdir -v ab
mkdir: created directory ‘ab’
~]$ mkdir -pv a/b/c
mkdir: created directory ‘a’
mkdir: created directory ‘a/b’
mkdir: created directory ‘a/b/c’
---------------------------------------------------------------------------------------------
(*)rmdir:删除空目录
SYNOPSIS:
rmdir [OPTION]... DIRECTORY...
DESCRIPTION:
-p, --parents:删除指定的目录后,如果其父目录为空,则一并删除之
~]$ rmdir -p a/b/c
-v, --verbose:打印过程
~]$ rmdir -pv a/b/c/d
rmdir: removing directory, ‘a/b/c/d’
rmdir: removing directory, ‘a/b/c’
rmdir: removing directory, ‘a/b’
rmdir: removing directory, ‘a’
---------------------------------------------------------------------------------------------
(*)cp:复制文件或目录
SYNOPSIS:
单源复制:
cp [OPTION]... [-T] SOURCE DEST
注意:
如果 DEST 不存在(仅指基名所指定的文件不存在)。
事先创建DEST文件,而后复制源文件的内容导入至目标文件。
如果 DEST 存在。
如果 DEST 是目录:则在此目录中创建一个与原文件同名的文件,则导入其内容。
如果 DEST 是非目录文件:则覆盖目标文件。
多源复制:
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
注意:
DEST 存在,且必须是目录;否则即为错误。
DESCRIPTION:
~]$ cp file.sh a/ (不指定文件名则为默认)
~]$ ls a
file.sh
~]$ cp file.sh a/aa.sh (可以修改文件名)
~]$ ls a
aa.sh
-i, --interactive:交互式复制,即覆盖目标文件之前提醒用户确认。
~]$ cp -i file.sh a/ (没有同名文件不提示)
~]$ cp -i file.sh a/ (有同名文件需确认 y 或者 n)
cp: overwrite ‘a/file.sh’? y
-f, --force:强制覆盖目标文件。
~]$ cp -f file.sh a/
-R, -r, --recursive:递归复制目录及其内容。
~]$ cp -R man Public/
-P, --no-dereference:复制链接文件本身,而非默认的复制链接文件指向的源文件的内容。
--preserve[=ATTR_LIST]。
指明保留的源文件属性列表。
默认为mode,ownership,timestamps。
额外:context, links, xattr, all
-a, --archive:归档复制
-dR --preserve=all
注意:仅管理员可保留属主和属组属性;
---------------------------------------------------------------------------------------------
(*)mv:剪切 (重命名) 文件或目录
SYNOPSIS:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION:
-i, --interactive:交互式复制,即覆盖目标文件之前提醒用户确认。
-f, --force:强制覆盖目标文件。
---------------------------------------------------------------------------------------------
(*)rm:删除文件或目录
SYNOPSIS
rm [OPTION]... FILE...
OPTIONS
-i, --interactive:每次删除前提示
-f, --force:强制删除
-r, -R, --recursive:递归删除目录及其内容
---------------------------------------------------------------------------------------------
(*)more:CRT查看文件浏览过滤。(和cat的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。)
SYNOPSIS:
more [options] file [...]
OPTIONS:
+n 从笫n行开始显示
-n 定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c 从顶部清屏,然后显示
-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l 忽略Ctrl+l(换页)字符
-p 通过清除窗口而不是滚屏来对文件进行换页,与-c选项相似
-s 把连续的多个空行显示为一行
-u 把文件内容中的下画线去掉
COMMANDS:
Enter 向下n行,需要定义。默认为1行
Ctrl+F 向下滚动一屏
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
V 调用vi编辑器
!命令 调用Shell,并执行命令
q 退出more
---------------------------------------------------------------------------------------------
(*)less:less 与 more 类似,但 less 在查看之前不会加载整个文件。
SYNOPSIS
less -?
less --help
less -V
less --version
less [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]
[-b space] [-h lines] [-j line] [-k keyfile]
[-{oO} logfile] [-p pattern] [-P prompt] [-t tag]
[-T tagsfile] [-x tab,...] [-y lines] [-[z] lines]
[-# shift] [+[+]cmd] [--] [filename]...
(See the OPTIONS section for alternate option syntax with long option names.)
COMMANDS:
-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将“tab”键显示为规定的数字空格
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
---------------------------------------------------------------------------------------------
(*)head:输出文件的前n行
SYNOPSIS:
head [OPTION]... [FILE]...
DESCRIPTION:
~]$ head fstab
-n #:显示前n行
-#:等同于 -n #
~]$ head -3 fstab
---------------------------------------------------------------------------------------------
(*)tail:查看文件的后n行
SYNOPSIS:
tail [OPTION]... [FILE]...
DESCRIPTION:
~]$ tail fstab
-n #:显示后n行
-#: 等同于 -n #
-f:查看文件尾部内容结束后不退出,阻塞在文件上,追加了新内容时,会继续显示。
~]$ tail -f fstab
终止:Ctrl+c
---------------------------------------------------------------------------------------------
(*)stat:显示文件或文件系统状态
SYNOPSIS:
stat [OPTION]... FILE...
DESCRIPTION:
文件的数据组成部分:
元数据(metadata):存放于文件系统中的inode。
数据(data):data blocks。
文件的三个时间戳:
access time:atime,文件最近一次被访问的时间。
modify time:mtime,文件最近一次被修改的时间(数据)。
change time:ctime,文件最近一次改动的时间(元数据)。
~]$ stat fstab
File: ‘fstab’
Size: 541 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 134224909 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ mdx) Gid: ( 1000/ mdx)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2016-03-13 10:46:24.837003802 +0800
Modify: 2016-03-13 10:45:50.112004210 +0800
Change: 2016-03-13 10:45:50.112004210 +0800
Birth: -
---------------------------------------------------------------------------------------------
(*)touch:改变文件时间戳
SYNOPSIS:
touch [OPTION]... FILE...
DESCRIPTION:
-a:仅修改atime
-c, --no-create:不创建文件(默认,打开文件不存在就会创建)
~]$ touch -c bash.sh
~]$ ls
-m:仅修改mtime
-t STAMP:使用指定的日期时间。格式:[[CC]YY]MMDDhhmm[.ss]
---------------------------------------------------------------------------------------------
(*)wc:统计文件行数,单词数和字节数
SYNOPSIS:
wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F
DESCRIPTION:
~]$ wc fstab (默认格式)
12 60 541 fstab
行数 单词数 字节数 文件名
-c, --bytes:字节数
~]$ wc -c fstab
541 fstab
-l, --lines:行数
~]$ wc -l fstab
12 fstab
-w, --words:单词数
~]$ wc -w fstab
60 fstab
统计文数量但不输出文件名:
cat fstab |wc -l(-w,-c)
---------------------------------------------------------------------------------------------
(*)cut:从每行文件中删除部分,(分隔符)
SYNOPSIS:
cut OPTION... [FILE]...
DESCRIPTION:
-d, --delimiter=DELIM:以指定的字符为输入分隔符;默认为空白字符。
-f, --fields=LIST
#:指定的单个字段;
#,#:离散的多个字段;例如1,3,7;
#-#:连续的多个字段,例如4-7;
~]$ echo "a/b/c" |cut -d '/' -f 1
--output-delimiter=STRING :输出分隔符。
---------------------------------------------------------------------------------------------
(*)sort:文本文件排序
SYNOPSIS:
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F
DESCRIPTION:
-r, --reverse:逆序排序。
-u, --unique:相同的行只保留一次;连续且完全一样方为相同。
-t CHAR:指定分隔符。
-k #:用于做排序的字段。
-n, --numeric-sort:基于数值大小进行比较。
-f, --ignore-case:比较时忽略字符大小写。
---------------------------------------------------------------------------------------------
(*)uniq:重复报告或省略
SYNOPSIS:
uniq [OPTION]... [INPUT [OUTPUT]]
DESCRIPTION:
-d, --repeated:仅显示重复的行。
~]$ uniq -d fstab
-u, --unique:仅显示不曾重复的行。
~]$ uniq -u fstab
-c, --count:在每行的行首显示其出现的次数。
~]$ uniq -u fstab
---------------------------------------------------------------------------------------------
(*)diff:比较文件行
SYNOPSIS:
diff [OPTION]... FILES
DESCRIPTION:
-u, -U NUM, --unified[=NUM]:使用unified机制,即显示要修改的行上下文,默认为3行。
---------------------------------------------------------------------------------------------
(*)patch:应用更改文件(补丁)
SYNOPSIS:
patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]
[-o outfile][-p num][-r rejectfile][file]
DESCRIPTION:
-i /PATH/FROM/PATCH_FILE:指明补丁文件路径。
-R or --reverse:还原。
---------------------------------------------------------------------------------------------
(*)install:复制文件和设置属性
SYNOPSIS:
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...
DESCRIPTION:
-o OWNER:指定属主。
-g GROUP:指定属组。
-m MODE: 指定权限。
---------------------------------------------------------------------------------------------
(*)mktemp:创建临时文件或目录
SYNOPSIS:
mktemp [OPTION]... [TEMPLATE]
DESCRIPTION:
模板文件名:filename.XXX
至少三个X;
使用方式:用变量保存生成的文件路径;
myfile=$(mktemp /tmp/myfile.XXXX)
常用选项:
-d:创建临时目录而非文件;
-p DIR, --tmpdir[=DIR]:设定临时文件所在的目录;默认为当前目录,或为TMPDIR环境变量设定的路径;
---------------------------------------------------------------------------------------------
三:搜索匹配
Linux上文本处理三剑客:
grep, egrep, fgrep:文本搜索工具;基于”pattern“对给定文本进行搜索操作。
sed:Stream EDitor,流编辑器,行编辑工具;文本编辑工具。
awk:GNU awk,文本格式化工具;文本报告生成器.
---------------------------------------------------------------------------------------------
(*)awk:模式扫描和处理语言
推荐:http://linux.51yip.com/search/awk
SYNOPSIS:
awk -F CHAR '/pattern/{print $1, $2, ...}' FILE...
OPTIONS:
-F:指明输入分隔符。
$1, $2, ...:处理哪些字段。
~]$ awk -F ':' '/root/{print $7}' /etc/passwd
---------------------------------------------------------------------------------------------
(*)grep:打印出符合 pattern(过滤条件)的行
SYNOPSIS:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
OPTIONS:
--color[=WHEN], --colour[=WHEN]:对匹配到的文本着色后高亮显示。
example:
WHEN:never, always, auto(默认).
-i, --ignore-case:忽略字符大小写。
-o, --only-matching:仅显示匹配到的文本。
-v, --invert-match:反向匹配。
-E, --extended-regexp:支持扩展的正则表达式。
-q, --quiet, --silient:不输出任何信息,直接退出。
-n:输出行号。
-c:计算找到‘搜索字符串’的次数。
-A NUM, --after-context=NUM: 匹配结果并将匹配结果的后#行一并显示
-B NUM, --before-context=NUM: 匹配结果并将匹配结果的前#行一并显示
-C NUM, -NUM, --context=NUM:A and b 显示匹配结果前和后各几行。
-F, --fixed-strings:支持使用固定字符串,不支持正则表达式,相当于fgrep。
-G, --basic-regexp:支持使用基本正则表达式。
-P, --perl-regexp:支持使用pcre正则表达式。
-e PATTERN, --regexp=PATTERN:多模式机制。
-f FILE, --file=FILE:FILE为每行包含了一个pattern的文本文件,即grep script。
基本正则表达式元字符
字符匹配:
.:匹配任意单个字符。
[ ]:匹配范围内的任意单个字符。
[^ ]:匹配范围外的任意单个字符。
\d 或者 [:digit:] : 数字。等效于 [0-9]。
\D 匹配任意一个除十进制数字以外的字符,等价于[^0-9]
\s:匹配任意一个空白符,等价于[\f\n\r\t\v]
\f 匹配一个换页符。
\n 匹配一个换行符。
\r 匹配一个回车符。
\t 匹配一个制表符。
\v 匹配一个垂直制表符。
\S:匹配非打印字符以外字符。与 [^ \f\n\r\t\v] 等效
\w:匹配任意一个数字、字母或下画线,等价于[0-9a-zA-Z_]
\W:匹配一个除数字、字母或下画线以外的任意一个字符,等价于[^0-9a-zA-Z_]
[:lower:]:小写英文字母
[:upper:]:大写英文字母
[:alpha:]:所有字母
[:alnum:]:所有字母和数字,相当于[0-9a-zA-Z]
[:space:]:空白字符,相当于\s
[:blank:]:空格或制表符
[:punct:]:标点符号
[:xdigit:] :十六进制字符;任何数量或––F或F
[:print:] :任何可打印的字符(不控制字符)
[:graph:] :排除空白字符
[:cntrl:] :控制字符
匹配次数:
* :前面的字符任意次(0,1或多次)
\+ :前面的字符 1次 或多次
\? :前面的 0次或1次。
\{m\} :前面的字符出现m次,m为非负整数;
\{m,n\} :前面的字符出现m次,m为非负整数;[m,n]
注意:这几个字符需要转义。
匹配位置:
^ : 锚定行首
$ : 锚定行尾
\<或\b:词首锚定,格式为 \<PATTERN, \bPATTERN
\>或\b:词尾锚定,格式为 PATTERN\>, PATTERN\b
分组与引用:
分组:() 括号进行分组
pat1\(pat2\)pat3\(pat4\(pat5\)pat6\)
\(PATTERN\):将此PATTERN匹配到的字符当作一个整体进行处理。
引用:\1 \2 \3 分组括号中匹配到的字符被存储于正则表达式内部的变量中。
\1:pattern匹配到的第一组括号
\2:pattern匹配到的第二个括号
\3:pattern匹配到的第三个括号
.....
注意:按括号顺序进行排序。
instantiation:
~]# grep "\<[0-9]\{3,4\}\>" /etc/passwd
~]# grep -v "bash$" /etc/passwd
---------------------------------------------------------------------------------------------
(*)egrep:支持使用扩展正则表达式的grep命令,相当于grep -E;
SYNOPSIS
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
OPTIONS:与grep相同。
扩展正则表达式的元字符:
字符匹配:
.:任意单个字符
[ ]:范围内的任意单个字符
[^ ]:范围外的任意单个字符
匹配次数:
*:任意次;
?:0次或1次;
+:1次或多次;
{m}:匹配m次;
{m,n}:至少m次,至多n次;
{m,}:最少m次。
位置锚定:
^:行首
$:行尾
\<, \b:词首
\>, \b:词尾
分组及引用:
(pattern):分组,括号中的模式匹配到的字符会被记录于正则表达式引擎内部的变量中;
后向引用:\1, \2, ...
或者:
a|b:a或者b
C|cat:表示C或cat
(C|c)at:表示Cat或cat
---------------------------------------------------------------------------------------------
(*)find:递归搜索文件
SYNOPSIS:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
OPTIONS:
根据文件名查找:
-name "文件名称":支持使用glob
*, ?, [], [^]
例子 find /etc/ -name
-iname "文件名称":不区分字母大小写
-regex "PATTERN":以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称;
根据属主、属组查找:
-user USERNAME:查找属主为指定用户的文件。
group GRPNAME: 查找属组为指定组的文件。
-uid UserID:查找属主为指定的UID号的文件。
-gid GroupID:查找属组为指定的GID号的文件。
-nouser:查找没有属主的文件。
-nogroup:查找没有属组的文件。
根据文件类型查找:
-type TYPE:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
组合条件:
与:-a
或:-o
非:-not, !
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
~]# find /tmp \( -not -user root -a -not -name 'fstab' \) -ls
~]# find /tmp -not \( -user root -o -name 'fstab' \) -ls
根据文件大小来查找:
-size [+|-]#UNIT
常用单位:k, M, G
#UNIT: (#-1, #]
-#UNIT:[0,#-1]
+#UNIT:(#,oo)
根据时间戳:
以“天”为单位;
-atime [+|-]#,
#: [#,#+1)
+#: [#+1,oo]
-#: [0,#)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin
根据权限查找:
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可。
-MODE:每一类对象都必须同时拥有为其指定的权限标准。
处理动作:
-print:默认的处理动作,显示至屏幕;
-ls:类似于对查找到的文件执行“ls -l”命令;
-delete:删除查找到的文件;
-fls /path/to/somefile:查找到的所有文件的长格式信息保存至指定文件中;
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;
对于每个文件执行命令之前,都会交互式要求用户确认;
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令;
{}: 用于引用查找到的文件名称自身;
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;
有些命令不能接受过多参数,此时命令执行可能会失败;另一种方式可规避此问题:
find | xargs COMMAND
---------------------------------------------------------------------------------------------
(*)sed:用于筛选和转换文本的流编辑器
SYNOPSIS:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
DESCRIPTION:
script:
地址定界编辑命令
常用选项:
-n:不输出模式空间中的内容至屏幕;
-e script, --expression=script:多点编辑;
-f /PATH/TO/SED_SCRIPT_FILE
每行一个编辑命令;
-r, --regexp-extended:支持使用扩展正则表达式;
-i[SUFFIX], --in-place[=SUFFIX]:直接编辑原文件 ;
~]# sed -e 's@^#[[:space:]]*@@' -e '/^UUID/d' /etc/fstab
地址定界:
(1) 空地址:对全文进行处理;
(2) 单地址:
#:指定行;
/pattern/:被此模式所匹配到的每一行;
(3) 地址范围
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/
$:最后一行;
(4) 步进:~
1~2:所有奇数行
2~2:所有偶数行
编辑命令:
d:删除;
p:显示模式空间中的内容;
a \text:在行后面追加文本“text”,支持使用\n实现多行追加;
i \text:在行前面插入文本“text”,支持使用\n实现多行插入;
c \text:把匹配到的行替换为此处指定的文本“text”;
w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中;
r /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并;
=:为模式匹配到的行打印行号;
!:条件取反;
地址定界!编辑命令;
s///:查找替换,其分隔符可自行指定,常用的有s@@@, s###等;
替换标记:
g:全局替换;
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p:显示替换成功的行;
练习1:删除/boot/grub/grub2.cfg文件中所有以空白字符开头的行的行首的所有空白字符;
~]# sed 's@^[[:space:]]\+@@' /etc/grub2.cfg
练习2:删除/etc/fstab文件中所有以#开头的行的行首的#号及#后面的所有空白字符;
~]# sed 's@^#[[:space:]]*@@' /etc/fstab
练习3:输出一个绝对路径给sed命令,取出其目录,其行为类似于dirname;
~]# echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'
~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@'
高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d:删除模式空间中的行;
D:删除多行模式空间中的所有行;
示例:
sed -n 'n;p' FILE:显示偶数行;
sed '1!G;h;$!d' FILE:逆序显示文件的内容;
sed ’$!d' FILE:取出最后一行;
sed '$!N;$!D' FILE:取出文件后两行;
sed '/^$/d;G' FILE:删除原有的所有空白行,而后为所有的非空白行后添加一个空白行;
sed 'n;d' FILE:显示奇数行;
sed 'G' FILE:在原有的每行后方添加一个空白行;
---------------------------------------------------------------------------------------------
instantiation:
~]# egrep "^(s|S)" /tmp/meminfo
文件与目录(权限,操作,搜索)
最新推荐文章于 2020-11-12 13:53:24 发布