如果对实例中涉及的相关Linux命令不了解,可以参考:Linux下sed,awk,grep,cut,find等常用命令介绍
查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
解决方法:
find . -type f -perm 644 -exec ls -l {} \;
find ./ -type f -perm 644 | xargs ls –l
Linux文件查找命令find,xargs
find命令的格式:
find pathname -options [-print -exec -ok ...]
find 命令的参数:
-perm 按照文件权限模式查找 读权限:r:4 写权限:w:2 执行权限:x:1 文件属主具有读、写权限: rw:4+2=6 其他用户具有读权限:r:4 -type 查找的文件类型 -type f 文件 -type d 目录 -type l 符号链接文件 -exec -exec 参数后面跟的是 command命令 command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';' '{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理 对于不同的系统,直接使用分号可能会有不同的意义, 使用转义符 '\'在分号前明确说明 xargs find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。
查找系统中所有文件长度为0的普通文件,并列出它们的完整路径
解决方法:
find / -type f -size 0 -exec ls -l {} \;
查找/arthinking目录中更改时间在7日以前的普通文件,并在删除之前询问它们
解决方法:
find arthinking -type f -mtime +7 -ok rm {} \;
find 命令的参数:
-mtime
最近规定时间内修改过的文件 -mtime 0:最近一天内被修改过的文件 -mtime +1:1天以前被修改过的文件
-ok
在执行ok之后的命令之前询问,而使用exec就不用询问,直接执行
查找系统中所有属于root组的文件 并列出它们的完整路径
解决方法:
find / -group root -exec ls -l {} \;
find 命令的参数:
-group:查找属于group指定用户组的文件
myfile.html内容如下:This is what I meant. 删除HTML标记,也就是要得到:This is what I meant.
解决方法:
cat myfile.html| sed 's///g;s/<\/b>//g'
cat命令:
cat主要有三大功能: 1.一次显示整个文件。 $ cat filename 2.从键盘创建一个文件。 $ cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件。 $cat file1 file2 > file
sed简介:
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
sed命令解释:
s/re/string 用string替换正则表达式re。 g 获得内存缓冲区的内容,并替代当前模板块中的文本。 ; 如果在一行中有多个命令,要用分号隔开。
使用tr命令将trkh.txt文件的空行删除
解决方法:
tr -s ['\n']<trkh.txt
关于tr命令:
通过使用 tr,可以非常容易地实现 sed 的许多最基本功能。可以将 tr 看作为 sed 的(极其)简化的变体。使用tr命令可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。
tr的命令格式为:
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file
-s
删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
input-file
转换文件名。也可以使用其他格式输入,但这种格式是最常用的。
在txt目录下搜索所有包含有‘the’单词的.c文件,列出文件名
解决方法:
grep -lr "the" *.c
(如果是文件名中包含则这样写:ls | grep 'the.*\.c')
grep简介:
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、 egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是 fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux 使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
-l
打印匹配模板的文件清单
-r
递归地搜索目录。在缺省情况下,按照到目录的链接。
使用grep将express文件里以数字开头的行删除掉
解决方法:
grep '[[:digit:]]' express
[:digit:]
数字字符
^
锚定行的开始
[^]
匹配一个不在指定范围内的字符
查出所有用户名至少有4个字符的己登录用户
解决方法:
who | cut –d’ ’ -f 1 | grep '\w\{4,\}'
其他解法:
users | awk '{if($1~/.....*/) print $1}'
(说明:把users用户名送入管道,使用awk匹配第一个域 $1~/.....*/即至少有4个字符的用户)
关于who命令:
who命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即使通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。
关于cut命令:
cut命令可以从一个文本文件或者文本流中提取文本列,具体的说就是在文件中负责剪切数据用的。cut是以每一行为一个处理对象的,这种机制和sed是一样的。
cut -d'分隔字元' -f fields
参数∶ -d ∶后面接分隔字元。与 -f 一起使用; -f ∶依据 -d 的分隔字元将一段讯息分割成为数段,用 -f 取出第几段的意思; -c ∶以字元 (characters) 的单位取出固定字元区间;
关于grep的命令参数:
\w
匹配文字和数字字符,也就是[A-Za-z0-9]
x\{m,\}
重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
'\w\{4,\}'即是至少有4个字符的已登录用户
查出系统中所有用户标识号大于99的用户
解决方法:
cut -d: -f 1,3 /etc/passwd | grep '[0-9]\{3,\}' | cut -d: -f 1
其他解法:
cat /etc/passwd | awk 'BEGIN{FS=":"}{if($3>99) print $1}'
(说明:输出passwd的内容到管道,使用awk,BEGIN{FS=":"}表示先设置使用分号划分域,如果$3>99,即第三个划分的域(用户标识)大于99,则输出$1(用户名))
关于cut的几个命令参数
-d:
表示用‘:’分隔剪切数据
/etc/passwd
/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
-f 1,3 /etc/passwd 即是选择passwd文件中的以冒号分隔的第一列和第三列,grep ‘[0-9]\{3,\}’即是使用grep匹配包含大于99的数据项
系统中用户标识号大于99的用户数
解决方法:
cut -d: -f 1,3 /etc/passwd |grep '[0-9]\{3,\}' | wc -l
关于WC命令:
该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
该命令各选项含义如下:
- c 统计字节数。 - l 统计行数。 - w 统计字数。
wc –l统计输出的行数,即是符合条件的用户数
按文件大小的降序列出目录中的所有文件
解决方法:
ls -l | sort -nrk 5
关于ls命令:
ls 命令经常要使用,通过使用 ls 命令可以查看linux文件夹包含的文件,查看文件权限(包括目录、文件夹、文件权限),查看目录信息等等,ls 命令在平常的linux操作中使用很频繁,所以这里介绍下 ls 命令的相关使用方法。
选项说明:
-a 用于显示所有文件和子目录(保罗点文件)。 -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来。 -r 将目录的内容清单以英文字母顺序的逆序显示。 -t 按文件修改时间进行排序,而不是按文件名进行排序。
关于sort命令
Sort命令的功能是对文件中的各行进行排序。Sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,Sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
-n
按照数字方式排序。不加-n参数时排序结果根据最左面的数字开始,等同于字母的比较方式。按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。
-r
颠倒指定排序的顺序。
-k
作用是根据某个列来排序,默认是第1列(从1开始)。
-t
表示分割符,以:分割,默认情况下以空格分割
-nrk 5即是按照数字方式倒序排序,根据文件属性的第5列即是文件大小排序