常见shell操作
一、find命令详细
find命令 -- 之查找指定时间内修改过的文件
比如我们要查找linux下指定时间内做过改动的文件,我们可以用find命令,其实find命令的功能十分强大,下面我们通过几个简单的例子来学习下find命令的简单用法:
find /opt -iname "*" -atime 1 -type f
找出 /opt 下一天前访问过的文件
选项 OPTIONS
所有的选项都总是返回真值,它们总会被执行,除非放在表达式中执行不到的地方。因此,清楚起见,最好把它们放在表达式的开头部分。
-daystart
从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime, -cmin, -ctime, -mmin, and -mtime)。
-amin n
对文件的最近一次访问是在 n 分钟之前。
-anewer file
对文件的最近一次访问比 file 修改时间要晚。如果命令行中 -follow 在 -anewer 之前,(也只有在这种情况下 -anewer会受 -follow 的影响)。
-atime n
对文件的最近一次访问是在 n*24 小时之前。
-cmin n
对文件状态的最近一次修改是在 n 分钟之前。
-cnewer file
对文件状态的最近一次修改比 file 修改时间要晚。如果命令行中 -follow 在 -cnewer 之前,(也只有在这种情况下-cnewer 会受 -follow 的影响)。
-ctime n
对文件状态的最近一次修改是在 n*24 小时之前。
-mmin n
对文件数据的最近一次修改是在 n 分钟之前。
-mtime n
对文件数据的最近一次修改是在 n*24 小时之前。
-mtime : 指定时间曾被改动过的文件,意思是文件內容被更改过
-ctime : 指定时间曾被更改过的文件,意思是文件权限被更改过
-atime : 指定时间曾被存取过的文件,意思是文件被读取过
1. 时间是以 24 小时为一个单位,而不是以天的
2. 2011/09/08 12:00 时间开始找一天內的,会列出 2011/09/07 12:00 ~ 2011/09/08 12:00 时间內的文件
找出 3 天"以前"被改动过的文件 (前第三天以前 → 2011/09/05 12:00 以前的文件) (> 72 小时)
- find /var/log/ -mtime +3 -type f -print
找出 3 天內被改动过的文件 (2011/09/05 12:00 ~ 2011/09/08 12:00 內的文件) (0 ~ 72 小时內)
- find /var/log/ -mtime -3 -type f -print
找出前第 3 天被改动过的文件 (2011/09/04 12:00 ~ 2011/09/05 12:00 內的文件) (72 ~ 96 小时)
- find /var/log/ -mtime 3 -type f -print
找出第 3 天被改动过的文件 (也可以这样写)
- find /var/log/ -mtime +2 -mtime -4 -type f -print
二、常用命令分类总结
1,在某个路径下查文件。
在/etc下查找“*.log”的文件
find /etc -name "*.log"
2,扩展,列出某个路径下所有文件,包括子目录。
find /etc -name "*"
3,在某个路径下查找所有包含“hello abcserver”字符串的文件。
find /etc -name "*" | xargs grep "hello abcserver"
或者find /etc -name "*" | xargs grep "hello abcserver" > ./cqtest.txt
4,网上摘抄的几个和查找文件或文件内容相关的命令详说:
正则表达式
\分别表示单词的开始和结束
ex: \ 以T或者t开头,om结尾的单词
正则表达式的元字符集:
1) ^行首 /^love/ 以love开头的行;
2) $行尾 /love$/ 以love结尾的行;
3) . /l..e/ 匹配所有这样的行,字母l后面紧跟任意两个字符然后是e的行
4) * 重复0次或者任意多次前面字符
5) [x-y] 字符范围
6) [^x-y] 排除字符范围
7) \ 转义字符
8) \ 界定单词的开头和结尾
9) \( \) 标记后面用到的匹配字符 \(love\)able \1er=loveable lover
10) x\{m,n\} 重复字符x至少m此,至多n次
---------------------------------------------------------------------------
---------------------------------------------------------------------------
grep家族
RE--regular expression; g: global; p: print
出了上面10种元字符集,grep还支持下面的RE
\w 字母或者数字
\W 非单词字符(标点符号)
+ 重复一个或者多个前面的字符
| 或 love(a:b)表示lovea或者lobeb
?单个字符
grep返回状态值($?) 0表示成功,1表示失败,2表示没有找到文件
rgrep递归访问目录树
---------------------------------------------------------------------------
ls -l |grep ^d 显示目录
grep -n -v -# -A# -B#
-i 不区分大小写
-n 显示匹配行和行号
-v只显示不匹配行
-#显示匹配行上下#行
-A#匹配行后面打印#行
-B#匹配行前面打印#行
-c 只输出匹配行的行数
-h 查询多文件的时候不显示匹配的文件名字
-l 查询多文件只显示匹配的文件名
-s 不显示错误信息
grep与正则表达式同用
grep "^[^abc]" *.f 提取行首不是abc的行
grep "[0-9]\{3\}[8]" *.f 提取类似xxx8的行,x表示任意数字
grep "a\{2\}" *.f 显示a至少出现两次的行,注意grep是以行处理单位的
grep -n "^$" file 列出空行的行号
-E参数,可以使用"与"和"或"模式
grep -E "abc | def" *.f 显示包含abc或者def的行
ex:
ls -l | grep "^$" 显示目录
ls -l | grep "^d" 显示文件
ls -l | grep "^d..x..x..x" 显示特定权限的目录
ps aux | grep "httpd" |grep -v "grep"
---------------------------------------------------------------------------
---------------------------------------------------------------------------
**使用find和xargs
1. find pathname -options [-print -exec -ok]
-optinos
1)-name:按照文件名查找
find ~ -name "*.txt" -print
find ~ -name "[a-z][0-9].txt" -print
2)-perm:按照权限查找文件
find ~ -perm 755 -print 查找权限为755的文件
find ~ -perm 007 -print 查找o位置上具有7权限的文件
find ~ -perm 4000 -print 查找具有suid的文件
3)-prune
不在当前目录下查找
4)-user和-nouser
find ~ -user zhao -print 查找文件属主是zhao的文件
find ~ -nouser -print 查找文件属主已经被删除的文件
5)-group和-nogroup
find ~ -group zhao -print 查找文件群组是zhao的文件
6)按照时间
find ~ -mtime -5 -print 文件更改时间在5天内的文件
find ~ -mtime +3 -print 文件更改时间在3天前的文件
find ~ -newer file1 -print 查找比文件file1新的文件
7)按照类型查找
find ~ -type d -print 查找所有目录
8)按照大小
find ~ -size +1000000C -print 查找文件大小大于1000000字节(1M)的文件
9)查找位于本文件系统里面的文件
find / -name "*.txt" -mount -print
-exec,-ok:find命令对于匹配文件执行该参数所给出shell命令,相应命令形式为: 'command' {} \;
-ok 在执行命令前要确认
find ~ -type f -exec ls -l {} \;
find / -name "*.log" -mtime +5 -ok rm {} \;
find . -name core -exec rm {} \;
使用-x dev参数
防止find搜索其他分区
find . -size 0 -exec rm {} \;
删除尺寸为0的文件
2. xargs与-exec功能类似
find ~ -type f | xargs ls -l
find / -name "*.log" -type f -print| xargs grep -i DB0
find . -type f |xargs grep -i "Mary"
在所有文件中检索字符串Mary
ls *~ |xargs rm -rf
删除所有以~结尾的文件
---------------------------------------------------------------------------
---------------------------------------------------------------------------
SED:
=====
sed [options] sedcommand inputfile >outputfile
sed不接触初始输入文件,对其不做修改,若想保存改动,重要将输出重定向到一个文件即可
a\: 当前行后面加入一行或者文本
c\: 用信文本替换本行的文本
d: 删除一行
D: 删除模板块的第一行
i\: 在当前行上面插入文本
h: 拷贝模板块的内容到内存缓冲区
H: 追加模板块的内容到内存缓冲区
g: 获得内存缓冲区内容,并替换当前模板中的文本
G: 获得内存缓冲区内容,并追加到当前模版块文本的后面
n: 读取下一个输入行,用下一个命令处理新行而不是第一个命令
N: 追加下一个输入行到模版块后面,并在二者间插入一个新行,改变当前行的号码
p: 打印模板块的行
P: 打印模板块的地一行
q: 退出sed
r file: 从file中读行
!: 表示后面的命令对所有没有选中的行起作用
s/re/strint/: 用string替换正则表达式re
=: 打印当前行号
#command: 把注释扩展到下一个换行符号前
l 打印匹配行,包括显示控制符号
**替换标记
g: 行内全部替换
p: 打印行
w: 把行写入一个文件
x: 互换模板块和缓冲区中的文本
y: 把一个字符翻译成另外一个字符
**sed中元字符可以使用正则表达式中所有的
新加:
& 保存搜索字符 s/love 用**love**代替love
**sed定位文本的方式
x 行号
x-y 从x行到y行
/patern/ 查询包括patern的行
x,y! 不包括指定x-y行号的行
ex:
sed '/Tom/d' file
删除包含Tom的行;
sed '/Tom/!d' file
删除所有不包含Tom的行;
sed -n /north/p' file
打印包含north的行;
sed ‘3d' file
删除第三行;
sed '3,$d' file
删除第三行到最后一行;
sed '$d' file
删除最后一行;
sed '/north/d' file
删除包含north的行;
sed -n 's/west/north/g' file
替换所有west为north;
sed -n 's/^west/north/p' file
一行的开头的west用north替换,并打印发生替换的行;
sed 's/[0-9][0-9]$/&.5/' file
所有以两个数字结尾的行,最后两个数字被他们自己替换并附加.5;
sed -n 's/\(Mar\)got/\1ianne/p' file
将Margot替换为Marianne,并打印发生替换的行;
sed 's#abc#ABC#g' file
所有abc由ABC替换,(所有s后面紧跟的字符都被认为是新的分隔符);
sed '/west/,/east/p' file
打印包含west行和包含east行中间的所有行;
sed '1,/east/s/$' file
地一行和包含east行之间的所有行的行尾加上字符串**A**;
sed -e '1,3d' -e 's/aa/bb/' file
先删除1到3行,然后用bb替换aa;
sed '/Sam/r file1' file
将文件file1中的内容附加在包含Sam的行后面;
sed '/Sam/w file1' file
将还有Sam行写入文件file1中;
sed '/^north /a\new line second line' file
所有以north加空格开头的行后面附加上两行文本,a\表示追加文本,\表示换行(tcsh中需要,bash中不需要);
sed '/^north/i\new line' file
在行首为north的行前面插入一个新行;
sed '/norht/{n; s/aa/bb/;}' file
首先匹配含有north的行,然后执行一组命令,n表示移到下一行,并用bb代替aa;
sed '1,3g/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' file
将1到3行中的所有小写字母用大写字母替换;
sed '/Lewis/{s/Lewis/bbb;q;}' file
首先找到匹配Lewis的行,然后用bbb代替Lewis,接着q退出seq;
sed -e '/north/h' -e '$G' file
首先找到包含norht的行,h拷贝到内存缓冲区,然后到文件随后一行($),G附加在最后一行后面;
sed -e '/we/{h;d;}' -e '/ct/{G:}' file
查找包含we的行,拷贝并且删除他,然后查找包含ct的行,将拷贝内容附加到他后面;
sed -e '/north/h' -e '$g' file
首先找到包含norht的行,h拷贝到内存缓冲区,然后到文件随后一行并覆盖他;
sed -n 'l' file
打印所有包含不能打印字符的行。
sed -n '/.*ing/p' file
显示含有以ing结尾单词的行;
sed -n '/music/=' file
打印含有music的行号;
sed '^$d' file
删除空行
sed 's/^/abcd/g' file
在行首填加abcd
sed 's/$/abcd/g' file
在行尾填加abcd
sed 's/rm$/played &/g' file
&表示在替换的时候保留被替换的词(rm--played rm)
sed 's/^M//g' file
去掉行尾的^M (^M的输入,先按ctrl+v然后按enter即可即可)
删除:d命令
$ sed '2d' example-----删除example文件的第二行。
$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。
$ sed '$d' example-----删除example文件的最后一行。
$ sed '/test/'d example-----删除example文件所有包含test的行。
在看看以前我常写的sed 's/|/,/g' aaa.txt>bbb.txt 这个的意思就是把aaa.txt文件中所有字符串|都换成,这是怎么表示的呢?S代表字符串,g表示行内全面替换。
替换:s命令
$ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
$ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
$
sed 's/^192.168.0.1/&localhost/'
example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加
localhost,变成192.168.0.1localhost。
$ sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
$ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。
---------------------------------------------------------------------------
---------------------------------------------------------------------------
gawk程序:
awk [-F 域分隔符] 'commands' inputfile
awk执行时,其域标志符为$1,$2,$3.........$n,$0表示所有的域
awk -v var=value 赋值给一个用户定义的变量
awk 'pattern' file
awk '{action}' file
awk 'pattern {action}' file
ex:
awk '{print $0}' file
打印所有的域
awk '/Mary/' file
打印包含file中包含Mary的行;
awk '{print $1}' file
打印文件的第一列(第一个域);
awk '/Mary/ {print $1,$2}' file
打印文件file包含Mary的行的第一和第二个域;
df | awk 'S4>75000'
打印可用空间大于75000的文件系统
date | awk '{print " month:", $2, "\n year:" $6}'
格式化date的输出;
awk 'BEGIN{OFMT="%.2f"; print 1.25463}'
指定数字输出格式,小数点后面保留两位有效数(1.25);
awk '/[ab]cdef/' file
打印匹配acdef或者bcdef的行;
awk '{print NR, $0}' file
awk '{print $0, NR}' file
NR当前记录数,每处理一个记录NR就加1
上面的命令相当于在每一行后面加上一个行号;
NF则记录每一行的域的个数;
awk -F '[ :\t]' '{print $0}' file
指定域分隔符为空格、:或者tab
awk '/^[A-Z][a-z]+/' file
打印所有以一个大写字母开头,然后是一个或者多个小写字母的行;
awk '$1~/[Bb]ill/' file
第一个域匹配Bill或者bill的行;
awk '$1!~/ly$/' file
第一个域末尾不是ly的行;
awk '/^(No|no)/' file
打印行首为No或者no的行;
awk 'BEGIN {print "file head \n"} {print $1 \t $4}' file
awk 'BEGIN {print "file head \n"} {print $1 \t $4}' file |tee out.file
打印文件的时候附加一个文件头
awk 'BEGIN {print "file head \n"} {print $1 \t $4} END {print "end of file"}' file
打印文件的时候附加一个文件头和文件尾
awk中使用正则表达式
awk '{if($1~/hello/) print $0}' file
如果域1中包含hello,就打印所有的域
~//表示匹配正则表达式,!~//表示不匹配正则表达式
awk '{if($6,>=,==,!=,~,!~(匹配,不匹配)
awk ‘$3==5346' file
第三个域等于5346,就打印出该行;
awk '$3>5000 {print $1}' file
第三个域大于5000就打印该行第一个域
awk '{max={$1>$2}?$1:$2; print max}' file
如果第一个域大于第二个域,max=$1否则=$2,打印最大值
awk '{print ($1==11?"high\t" $2:"low\t" $2)}' file
&&逻辑和,||逻辑或,!逻辑非
awk '$2==$5 && $3>5' file
awk '/Tom/,/Jary/' file
Tom第一次出现和Jary第一次出现之间的所有行;
awk '/north/ {print $3+10}' file
包含north行的地三个域加10;
awk '$3=="aa" {$2="dd"; print $0}' file
将地三个域为aa的行的第二域变成dd,并打印该行;
**awk编程:
使用变量
awk '$1~/Tom/ {wage=$2+$3; print wage}' file
先扫描第一个域,如果匹配Tom,就将第二和第三域的总和赋值给变量wage并输出;
awk 'BEGIN{FS=":"; OFS="\t";ORS="\n\n"}{print $0}' file
处理文件前设置
域分隔符(FS)为(:)
输出域分隔(OFS)为(\t)
输出记录分隔符(ORS)为(\n\n)
awk 'END{print "The number of record is:' NR}' file
处理完文件后执行END语句
输出总记录数
awk '/Mary/{count++} END{print "Mary was found" count "times"}' file
计数文件中Mary出现的次数;
**awk输入输出重定向
awk '$4>=70 {print $1, $2 >"outfile"}' file
结果重定向到文件outfile中
awk 'BEGIN{"date" |getline d; print d}'
将date结果输给getline函数,并打印
(getline从标准输出,管道等获得输入)
awk 'BEGIN{"date" |getline d; split(d,mon); print mon[1] mon[2]}'
将date结果输给getline函数,slpit将d分解成数组,打印数组第2个变量
**split函数:split(string,array,field seperator)
awk 'BEGIN{while("ls"|getline) print}'
依次输出ls的每一项
awk
'BEGIN{print "what is your name?"; getline name 0) {lc++; print lc " " a}}'
awk 'BEGIN{while(getline a 0) {lc++; print lc}}'
如果文件不存在,getline返回-1
到达文件尾返回0
读到一行返回1
读取文件/etc/passwd,计数行数
**awk控制语句
if语句:
awk '{if($6>50) print $1 "too high"}' file
awk '{if($6>20 && $250}{x++; print x} else {y++;print y}' file
awk '{if($1~/peter/){next} else {print}}' file
如果第一个域包含peter,awk就忽略这一行,读取文件的下一行,脚本从头开始执行;
循环语句:
awk '{i=1; while(i file
cat -v file 显示文件,包括其中的控制符(-v)
cat -n file 为每一行编号
cat -b file 每个非空行编号
cat -T file 以^I显示tab
-----------------------------------------------------
Linux里怎样查找文件内容
Linux查找文件内容的常用命令方法。
从文件内容查找匹配指定字符串的行: $ grep "被查找的字符串" 文件名
从文件内容查找与正则表达式匹配的行: $ grep –e “正则表达式” 文件名
查找时不区分大小写: $ grep –i "被查找的字符串" 文件名
查找匹配的行数: $ grep -c "被查找的字符串" 文件名
从文件内容查找不匹配指定字符串的行: $ grep –v "被查找的字符串" 文件名
从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行 find / -type f -name "*.log" | xargs grep "ERROR"
常见shell操作的更多相关文章
- Hbase的常见shell操作
1.带namespace的:https://blog.csdn.net/opensure/article/details/46470969 2.http://www.cnblogs.com/xing9 ...
- Hadoop读书笔记(二)HDFS的shell操作
Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 1.shell操作 1.1全部的HDFS ...
- Hadoop2.7.6_04_HDFS的Shell操作与常见问题
1. HDFS的shell操作 1.1. 支持的命令及参数 [yun@mini05 zhangliang]$ hadoop fs Usage: hadoop fs [generic options] ...
- shell操作典型案例--FTP操作
从FTP服务器上下载文件或上传文件到FTP服务器是生产环境中比较常见的场景之一. shell操作FTP的方式整理如下: 思路一:使用shell调用ftp等客户端 使用FTP方式,通过shell调用ft ...
- MongoDB的Shell操作
前言 本文从介绍了MongoShell 的配置.脚本.数据类型和其他指令. MongoShell - 简介 MongoShell是一个互动的JavaScript接口的MongoDB,可以使用Mongo ...
- opencv笔记4:模板运算和常见滤波操作
time:2015年10月04日 星期日 00时00分27秒 # opencv笔记4:模板运算和常见滤波操作 这一篇主要是学习模板运算,了解各种模板运算的运算过程和分类,理论方面主要参考<图像工 ...
- HDFS的基本shell操作,hadoop fs操作命令
(1)分布式文件系统 随着数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管 ...
- c#常见stream操作
原文: c#常见stream操作 常见并常用的stream一共有 文件流(FileStream), 内存流(MemoryStream), 压缩流(GZipStream), 加密流(CrypToStre ...
- HDFS建筑与shell操作
一个.hadoop1.1.0演示 hadoop它适合于大容量数据存储和分布式计算平台 hadoop核心由hdfs和mapreduce组成 hdfs这是一个主从结构,仅有一个.是namenode:从节点 ...
随机推荐
- MySQL基础学习之数据表
查看数据表 SHOW TABLE; 查看数据表详细结构 SHOW CREATE TABLE 表名\G; 创建数据表 CREATE TABLE 表名(数据名 类型,数据名1 类型2); CREATE ...
- Oracle表添加主键、外键
1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...
- SDC(5)–FPGA系统级同步输入的约束
此时计算最大/最小输入延时时,是不应该考虑FPGA本身的tSU/tH的,因为数据进来之后不一定马上送到DFF. 例如: 此时约束如下:
- linq query, using int.parse to convert varchar to int while orderby
var t = from x in context.NewsLetterItem.ToList() //add .ToList at this place where x.APPId == appid ...
- [XJOI NOI02015训练题7] B 线线线 【二分】
题目链接:XJOI - NOI2015-07 - B 题目分析 题意:过一个点 P 的所有直线,与点集 Q 的最小距离是多少?一条直线与点集的距离定义为点集中每个点与直线距离的最大值. 题解:二分答案 ...
- Java 8 vs. Scala(二):Stream vs. Collection
[编者按]在之前文章中,我们介绍了 Java 8和Scala的Lambda表达式对比.在本文,将进行 Hussachai Puripunpinyo Java 和 Scala 对比三部曲的第二部分,主要 ...
- c# 捕捉键盘按键
//esc退出窗体 protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg , System.Windo ...
- Mybatis bug修正
http://1358440610-qq-com.iteye.com/blog/1827391
- Log4j配置全说明
转载:http://zhangjunhd.blog.51cto.com/113473/21014/ 1.Log4j简介 Log4j是Apache的一个开源项目,它允许开发者以任意间隔输出日志信息.Lo ...
- USB Type-C 应用面临安全性考验,USB-IF 将推动新认证机制
USB 应用已经达到空前盛况,横跨电脑.移动设备.周边设备.影音器材等范畴,是一个极为普遍常见的界面.进入 USB Type-C 世代由于一并推动 USB-PD,过去没有严格执行的认证要求,基于安全性 ...