做者:姚毛毛的博客java
tips:文章太长,分两篇发出,本篇发前三个章节: 一、文件及目录操做; 二、文件查看及编辑 三、文件查找及统计。linux
1.1写在前面 & 学习指南正则表达式
本文目的:主要是做为一张给初学者入门Linux的学习地图。shell
因此我只会讲一些咱们生产过程当中经常使用的命令及操做,对于命令的一些偏门用法本文会一带而过甚至不讲。vim
对于Linux命令详解能够参考网站
https://man.linuxde.net/。windows
实体书的话推荐《跟老男孩学linux运维-核心系统命令实战》。oracle
1.2 经常使用命令概述app
我将Linux下的经常使用命令分为几类:less
一、文件及目录操做
二、文件查看及编辑
三、文件查找及统计
四、文件解压与压缩
五、用户与文件权限
六、资源监控与管理
为何列的几个章节都是跟文件相关的?
由于在Linux中一切皆是文件,cpu、内存、磁盘、外设、驱动等等,都是以文件形式存在咱们的Linux系统中。
1.3 经常使用快捷键
在Linux下有几个我操做命令的快捷键,基本上咱们会在与Linux打交道时时时刻刻都用到,即:
enter 执行命令。输入命令后记得回车,命令才生效。
tab 自动补全。在写文件夹路径的时候,打出首字母直接将后续名称补全,遇到首字母相同的文件夹会展现出列表
↑ 使用方向键的up键,能够找回上个执行的命令,而且能够一直向上查找历史命令,想查看全部历史命令使用 history命令
ctrl + c 中断命令。在linux上执行命令遇到卡死、报错等执行不下去又没法退出的状况,请使用此命令。
ctrl + z 中断命令。通常ctrl + c 没法进行中断操做的时候能够尝试下此命令。
ctrl + insert 复制。复制选中内容。
shift + insert 粘贴。粘贴剪切板中内容。
ctrl + Backspace 向前删除。
在输入命令时,有时退格键Backspace没法删除字符,它自己被当作一个字符输入了,使用此命令进行退格删除操做
delete 向后删除。
另外在查看滚动文件时有两个好用的命令,通常在查看日志文件时使用:
ctrl + s 中止滚屏
ctrl + q 恢复滚屏
1.4 帮助命令
man 全方位的帮助命令,使用方式为 man [命令],如
man ls
使用 :q 命令退出帮助界面
help 经常使用帮助命令,使用方式为 [命令] --help,如
ls --help
对于本文出现命令,还有一些其余用法,感兴趣能够自行探索。
1.5 历史命令查看
history # 查看已经敲过的命令
可用方向键上下键翻页曾敲出的linux命令。
1.5 注意事项
一、本文使用Linux环境为centOs 7,其余发行版可能会有轻微不一致状况。Mac的命令行也一样如此。
二、在linux中全部命令都要使用空格隔开,如cd xx文件,在第二章节学习时需注意。
三、命令通常都有参数,可以使用man或help查看其参数做用。参数写法通常为-开头。如ls -l查看当前目录下全部文件。rm -f xxx文件,删除xxx文件,-f参数含义为若是没有这个文件,也不提示。
在linux中,cd命令是永远陪伴咱们的小伙伴,也是全部基础操做的王者命令,不是“给你一张过去的cd”,而是路径切换,即Change Directory。
ls 、ll则是跟着 cd 的一对好伴侣,使用它们能够看看当前文件夹下有哪些文件和目录。为何能够这么屌?由于他们是list嘛,了解下。
为啥ll也是list?由于它是ls -l的马甲呀。
若是cd来cd去的,已在云深不知处,不识庐山真面目,且用pwd来一窥迷径,看看本身的绝对路径,即Print Working Directory。
如下是命令简释:
cd / # 进入主机根目录 cd ~ # 进入用户根目录 cd .. # 返回爸爸(上级)目录 cd ../.. # 返回爷爷(上级的上级)目录,能够以此类推。 cd - # 返回上次目录 cd /yaomaomao/wfy/123/456 # 使用绝对路径,从根目录开始,一层层找到456这个目录。/ 为根目录 ls # 横向展现当前目录下全部文件及目录 ls -a # 显示隐藏文件 + ls命令展现的内容 ls -l # 等同于ll,通常直接用ll命令。 ll # 纵向展现当前目录下全部文件及目录,及权限信息 ll -a # 显示隐藏文件 + ll命令展现的内容 ll -h # 将文件大小从单位bit转换为合适的单位展示,如kb、Mb、Gb,根据实际大小来。 # -h 这个参数在linux中颇有用,基本全部须要统计大小的命令中均可以用它,如df -h, du -h,free -h。 pwd # 查看当前所在路径
在linux中,建立文件有不少方法,可是touch是最简洁的一个,轻轻一碰,一个空文件产生了。
而想建立一个目录,则是mkdir,即make directory。
touch wfy.txt # 在当前目录下建立一个wfy.txt空文件 touch /var/www/yaojiaxiaoyuan{01..10}.html # 批量建立空文件
mkdir [目录名] # 在当前目录下建立一个空目录 mkdir yaomaomao wfy 123 456 # 多个目录同时建立,目录间以空格隔开,建立同级的多个目录 # 若是想要建立一个多级子目录怎么办,那就使用下面的mkdir -p。 mkdir -p /yaomaomao/wfy/123/456 # 多层目录同时建立,一次性在当前目录下建立yaomaomao目录,在yaomaomao目录下建立wfy目录,在wfy目录下建立123目录,在123目录下建立456目录。
使用 mkdir -p /yaomaomao/wfy/123/456 建立成功了,还记得上面的命令吗?cd进去看看。
cd yaomaomao/wfy/123/456
再pwd看下路径,而后touch个文件看下
touch yaomaomao.txt ll # 查看有没有建立成功
此cp非彼“CP”,由于咱们不是大写的,饭圈女孩请走开,咱们只是copy的缩写而已。
mv 即 move,这个很好理解吧。
rm顾名思义就是remove咯。固然,这个命令请谨慎使用。尤为不要用 rm -rf /*。若是你没忍住打了这个命令,ok,等着重装系统吧。
cp [待拷贝文件名] [拷贝后文件名] # 将前者拷贝一份出来,变为后者。 cp [待拷贝目录] [目标目录] # 将前者拷贝一份出来,变为后者。文件如此,目录也是如此。 # 可是有时候目录下还有子目录,这个命令就很差用了,得用下面这个命令,cp -r/R。 cp -r [待拷贝目录] [目标目录] # -r/R 是什么意思?即递归。无限寻找当前目录下全部子目录。倾其全部,拷贝到目标路径下。 mv [待拷贝文件名] [拷贝后文件名] # 将前者的文件名改成后者的文件名 mv [待移动目录] [目标目录] # 将前者的文件名改成后者的文件名
好了,说完cp、mv,咱们来看看rm。rm使用守则:
千万不要单独用星号符 “”,更不要用斜杠加星 “/”
千万不要单独用星号符 “”,更不要用斜杠加星 “/”
千万不要单独用星号符 “”,更不要用斜杠加星 “/”
重要的事说三遍。
经常使用命令以下
rm [文件名] # 删除文件。文件不存在会有报错提示。 rm -f [文件名] # 删除文件。-f,忽略信息,不提示。 rm -rf [目录名] # 递归删除目录 rm -rf [文件1] [文件2] [目录1] [目录2] # 删除多个文件和目录 rm -rf *.log # 删除当前目录全部.log后缀结尾的文件 rm -i *.log # 删除全部log文件时会一一询问,这个命令通常不会用到,但有些状况下可能会须要。 # 询问时,按 y 确认删除,n 不删除。
-r/R 参数,还记得上面的cp -r/R吗,也是递归删除。
cat [文件名] # 输出文件全部内容到屏幕上 cat [文件1] [文件2] # 输出文件一、文件2全部内容到屏幕上 cat [文件1] [文件2] > [文件3] # 将文件一、文件2合并,输出到文件3中,若是没有文件3会自动生成一个新的文件3 cat -n [文件名] # 输出文件内容时加上行号 cat -A [文件名] # 输出文件内容时显示全部隐藏字符
cat的特色就是一次性将全部内容输出到屏幕上,用得最频繁的一大功能就是合并文件,并输出到新文件中。由于若是只是查看的话,有不少其余工具均可以查看。
另外cat命令比较经常使用的还有和管道符“|”一块儿来用。用来做为管道符的输入内容,如 cat xxx.log | grep '我要找这个单词',这个后续说道文件查找时再说。
tail 通常用来查看日志使用,显示文件最新追加的内容
tail -f xxx.log # 不停地追加显示log文件的最后10行 tail -fn1000 xxx.log # 加上-n参数,不停地追加显示log文件的最后1000行
tail也能够同时显示多个文件内容,可是不推荐使用,如
tail -fn1000 xxx.log xxx2.log
若是显示文件不止一个,则在显示的每一个文件前面加一个文件名标题

与tail 相对的还有个head,是从开头显示文件内容,通常用法为 head -n [文件名],用法与tail差很少。
要说在linux中最强大的编辑器是什么,10我的有10我的会说,是vim。
那么,咱们这里说的vi跟vim啥区别,嗯,其实没啥区别,vim就是vi的加强版。喜欢黑白的用vi,喜欢彩色的用vim就好了。
vim用起来很逆天,但只是个工具而已,没必要那么极客,会一些经常使用命令就行了。
好了,咱们先用 vim [文件名] 进入文件吧。
vim有几种模式,即normal模式、编辑模式、命令模式。
哦,还有个visual模式,不经常使用,normal模式下按v能够进入,没啥用。
normal模式顾名思义是正常模式,我更愿意称呼为无状态模式,使用vi/vim [文件] 进入文件时,默认就是这个模式,在进入其余模式后,可使用 Esc 键返回这个模式。
vim [文件名] # 默认进入normal模式
normal模式下按下i、a、o、s,进入编辑模式,使用频度通常也是这个顺序。编辑模式下,输入内容就跟咱们windows下打开写字板操做没什么区别。
i # insert,光标当前字符前插入 a # append, 光标当前字符后插入 o # 下一行插入 s # 不经常使用,删除当前字符并插入
此外,进入编辑模式还有这几个键的大写模式I、A、O、S,不经常使用,具体能够自行探索。
光标移动
← # 向左移动 ↓ # 向下移动 ↑ # 向上移动 → # 向右移动 ctrl + f # 向下翻页 ctrl + b # 向上翻页 0 # 行首 $ # 行尾 space # 空格键,一直向下移动一个字符。跟左方向键(→)的区别是,左方向键(→)只能在本行移动。
若是以为上下左右方向键不方便,还要移动手臂,能够在normal模式下,使用h、j、k、l键依次进行左、下、上、右操做。
退出、保存,在normal模式下使用冒号(:) 进入底线命令模式
:q # 退出不保存 :q! # 强制退出不保存 :wq # 退出保存 :wq! # 强制退出保存
你可能已经发现了,在vim中,感叹号(!)就是强制的意思。
最基本的文本操做说完了,若是vim仅仅是这样,那便当不上linux上最牛逼的文本编辑器这一称号了。那么下面说下提高我们文本操做效率的一些快捷键。
normal模式下的一些快捷键
G # 大写g,移动到文末。 nG # n,数字,表明行号。100G则是移动到第100行。1G则是行首。 gg # 移动到文首。一样效果还有1G。 H、M、L # 分别表明high、middle、low,即移动当前屏幕页的最上方、中间、最下方。 dd # 删除当前行,可连续按d删除。 ndd # n,数字,表明行号。ndd,删除当前行及以后的多少行,如100dd,删除当前及以后的100行 u # 撤销操做。若是上面使用dd删除错了,可按一下u进行撤销。编辑模式下撤销须要按Esc进入normal模式,按 u 撤销。 y 进入复制模式。 yy # 复制当前行。 nyy # n,数字,表明行号。聪明的你相比已经知道了,如16yy,即复制当前行至16行的内容。 p # 粘贴当前vim剪切板中内容。 yyp # 经常使用组合键,即在上面使用yy复制后,可当即使用p粘贴,或者移动到指定地点后按个 p,即把刚才的内容粘贴过来了。 ggyG # 全选复制。看这个命令,到行首,按y进入复制模式,再移动光标到文末,而后能够按p粘贴了。固然,若是你的光标已经移动到相应位置,能够直接ggyGp。 # 这里有个缺陷,这样的复制内容只能在vim中进行粘贴,一旦退出vim,剪切板中则无此内容了。那怎么办呢? 看下面这个命令。 gg"*yG、gg"+yG # 这两个全选复制的命令,能够将内容带出到vim以外。固然,通常用不到,只有某些特殊状况下会用到。
说完移动、删除、复制、粘贴,再来讲说查找。normal模式下输入 / 或 ? 。
/yaomaomao # 即向下寻找yaomaomao这个字符串。按n会一直向下找。 ?姚毛毛 # 即向上寻找 姚毛毛 这个字符串。按n会一直向上找。 n、N # 配合/、?则会颇有趣,/ + n,一直向下找,/ + N,一直向上找, ? + n,一直向上找, ? + N,一直向下找。
替换,则是要进入底线命令模式了,上面说过了,即在normal模式下使用冒号 : 进入此模式。
:%s/old/new/g # 全局替换,将old字符替换成new
若是不想全局替换,而是指定行数,可使用此命令:
:[n1],[n2]s/old/new/g
以下图所示,将1到10行的灰灰替换成了小力。
从第N行到最后一行的替换怎么作?相信聪明的你应该已经想到了:
:[n1],%s/old/new/g
另外命令模式下还有些有趣的命令,如:
:set number # 显示行号 :set nonumber # 不显示行号 :set nu :set nonu # 同上,nu便是number的简写 :set ff # 查看文件格式,可能会展现foramt=dos,在windows下编辑而后上传到linux下的文件可能会存在一些格式问题,因此须要转换下文本格式,即下面的命令:set ff=unix :set ff=unix # 设置文件格式,ff即format, 即文件设置为unix。能够设置后再用:set ff命令再看下
此外还有诸如分割窗口【:split】、重载文件【:e!】等命令。
底线命令固然不仅这么几种,若是还想要了解更多的命令,能够参考。
菜鸟教程的linux-vim教程https://www.runoob.com/linux/linux-vim.html。
及我刚刚推荐的linux命令大全https://man.linuxde.net/vi。
最后,我们总结下几种模式的切换:
一、vi/vim [fileName] --> normal模式 二、normal 下 输入 i、a、o、s 键--> 编辑模式 三、normal 下 输入冒号 : --> 底线命令模式 四、Esc退出到normal模式 五、:q :wq :q! :wq! 退出不保存/保存文件
哦,还有个 normal 下 输入v 进入视图模式,这个在之后的进阶学习里能够说下,通常没啥用。
说完vim,再来看看more与less,这是基于vim的一对好基友。
这两个命令相似cat,不过是以一页一页的方式显示阅读。
more能够显示百分比,通常从头排查问题日志能够用more。
而less则在查看大文件时有奇效,听说是部分加载到内存中。
先看看more
more [文件名] more -f [文件名] # 加参数f,-f 参数的含义为计算行数时,以实际上行数为准(有些单行字数太长的会被认为两行或以上)
能够看到,more打开文件是能看到你当前查看文件的百分比的。
使用more查看文件或日志,有些快捷命令能够提升咱们的效率:
空格键 # 向下滚动一屏,f键效果同样,但通常使用空格键,比较方便 b # 向上滚动一屏 = # 查看当前行号 :f # 输出当前文件名 及 行号 q # 退出more命令, ctrl + c也能够退出
若是不用 -f 参数查看命令,能够试试来回用b、空格上下翻页,会发现来回查看的内容可能不同。由于不用-f强制显示行数,有些单行字数太长的会被认为两行或以上。
more 还有个命令叫作指定行查看,即:
more +[num] [文件名] # 查看指定行号之后的内容 more -[num] [文件名] # 查看指定行号之前的内容,这个命令通常不用,主要用+num。这个命令若是用的话通常会做为导出使用。
示例为
more +1000 放学后.txt more -1000 放学后.txt
less的好处是查看文件以前不会加载整个文件,因此在查看大文件时有奇效。若是文件特别大,例如超过1G,可使用less,提升效率。
less [文件名] # 基本查看命令 less -m [文件名] # 相似more命令,显示百分比 less -N [文件名] # 显示行号
与more 命令类似,less也有相同的快捷键,只是不能用ctrl + c退出
q # 退出less命令 d # 向下移动半屏 u # 向上移动半屏 j # 向下移动一行 k # 向上移动一行 空格键 # 向下滚动一屏,f键效果同样,但通常使用空格键,比较方便 b # 向上滚动一屏 = # 输出当前文件名 及 行号、百分比 : f # 输出当前文件名 及 行号、百分比
而且less不仅是more能够查看,还能够用使用vi编辑器的查找命令
/[查找字符] # 配合n键,从上往下查全部 ?[查找字符] # 配合n键,从下往下查全部
还记得vim的n和N吗,同样的效果。
文件查看与编辑终于到了最后一节了,此次来讲说大杀器sed。
使用vim须要在文件内部编辑,有时只是想在文件底部添加一句话或一个参数,须要经历
vim [文件] ->
G (移动到底部)->
o 下一行添加 ->
shift + insert(插入剪切板中内容)或自行编辑
这一整套步骤,比较繁琐。
那有没有轻便一点的方法呢?
sed (Stream Editor),你值得拥有。
Ps.其实还有个echo命令也有这个功能。
echo “追加内容” >> [文件名]
案例:
sed -i '$a 我是姚毛毛' 放学后utf-8.txt
在文件末尾追加了“我是姚毛毛”这串字符串。
如图:
那么,想在指定行或者每行前面或者后面都追加字符呢?
sed -i '20a 哦,我是姚毛毛20 append' 放学后utf-8.txt # 追加“哦,我是姚毛毛20 append”,在文件【放学后utf-8.txt】第20行字符下一行
如图:
sed -i '20i 哦,我是姚毛毛20 insert' 放学后utf-8.txt # 插入“哦,我是姚毛毛20 insert”,在文件【放学后utf-8.txt】第20行字符上一行 sed -i 'a 我是姚毛毛 append' 放学后utf-8.txt # 追加“我是姚毛毛 append”,在文件【放学后utf-8.txt】每行字符下一行 sed -i 'i 我是妖生 insert' 放学后utf-8.txt # 插入“我是妖生 insert”,在文件【放学后utf-8.txt】每行字符上一行
因此,还有种简单的追加字符法
sed -i '1i 哦,我是姚毛毛,在开头 insert' 放学后utf-8.txt # 意思是第一行前插入字符 sed -i '9999a 哦,我是姚毛毛,在结尾 append' 放学后utf-8.txt # 意思是第9999行后追加字符
上面说的都是增。那增删改查四兄弟的删、改、查呢,sed也能够作吗?
看了上面的内容,咱们先小结下sed的基本格式:
sed [参数选项] [sed内置命令字符 更新内容] [输入文件]
改,内置命令字符s:
sed 's/book/books/' file # 替换文本中的字符串 sed -n 's/test/TEST/p' file # -n选项和p命令一块儿使用表示只打印那些发生替换的行 sed -i 's/book/books/g' file # 直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books
这里特别注意的是参数-i,这个意思是直接修改文件内容。若是不用-i,能够试试,验证下是否是只输出到终端,而没有实际修改文件内容。
如图:
使用sed命令在第一行数据后添加了部份内容后,再用cat查看文件,文件内容并无改变。
删,内置命令字符d:
sed '2d' wfy.txt # 删除第2行。d为sed内置命令,2为行数
正如上面说的,若是不加-i,只是将删除后内容输出到终端,而没有实际改变文件。那么,加上-i试试呢?
sed -i '2d' wfy.txt
看,第2行是否是已经被删掉了。
若是要删除多行怎么办?
sed -i '1,3d' 放学后utf-8.txt # 删除1到3行 sed -i '/\/sbin\/nologin/d' passwd # 删除不能登陆的用户,千万不要在我机器上执行,个人ftp用户就是这个 sed -i '/^姚毛毛/,/$2019/d' passwd # 删除以 “姚毛毛” 开头一直到以 2019结尾的行
如今咱们总结下sed经常使用的参数跟内置命令字符:
无参数,只显示修改后内容在终端,不修改真实文件内容,通常可与管道符“|”一同使用做为输入源。
参数 -i,必须品,加上此参数才能真正修改文件。
参数 -n,通常与内置命令字符p共用,显示修改行。
内置命令字符 i、a,插入、追加。
内置命令字符 s、d,替换、删除。
$表明文件末尾,^表明文件开头。
做为shell三剑客之一(另外两个是grep、awk),sed还有很强大的正则表达式功能,可是我列举的是在通常运维中最经常使用的几个功能。对sed感兴趣,想深刻研究的能够自行探索。
du -sh # 统计当前文件夹内容总大小 du -sh [文件夹1] [文件1] # 统计当前目录下的文件夹或文件大小 du -sh /usr/local # 显示指定目录大小 du -a # 显示当前目录下全部文件所占空间(含隐藏文件) du -s # 显示当前目录总大小 du -h # 展现当前目录下全部文件及目录(包含子目录下内容)大小,-h会换算成K、M、G等人类易读结果 du -h * # 统计当前目录下,非隐藏文件及目录的大小 du -h --max-depth=1 [目录] # 只显示指定目录下第一层目录的大小 du -h --max-depth=2 [目录] # 只显示指定目录第1、二层目录的大小
图示:
du -sh
统计当前文件夹内容总大小
du -sh
统计当前目录下的文件夹或文件大小
du -sh /usr/local
显示指定目录大小
du -s
显示当前目录总大小
du -h
-h会换算成K、M、G等人类易读结果
du -a
显示当前目录下全部文件所占空间(含隐藏文件)
du -h --max-depth=1 /home/yao
只显示指定目录下第一层目录的大小
du -h --max-depth=2 /home/yao
只显示指定目录第1、二层目录的大小
du 经常使用参数总结:
-a或-all 显示目录中个别文件的大小。 -b或-bytes 显示目录或文件大小时,以byte为单位。 -c或--total 除了显示个别目录或文件的大小外,同时也显示全部目录或文件的总和。 -k或--kilobytes 以KB(1024bytes)为单位输出。 -m或--megabytes 以MB为单位输出。 -s或--summarize 仅显示总计,只列出最后加总的值。 -h或--human-readable 以K,M,G为单位,提升信息的可读性。
此外,还有些参数用以参考,通常用于区分软硬连接才适用:
-x或--one-file-xystem 以一开始处理时的文件系统为准,若赶上其它不一样的文件系统目录则略过。 -L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。 -S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。 -X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。 --exclude=<目录或文件> 略过指定的目录或文件。 -D或--dereference-args 显示指定符号连接的源文件大小。 -H或--si 与-h参数相同,可是K,M,G是以1000为换算单位。 -l或--count-links 重复计算硬件连接的文件。
du -a /home/yao | sort -n -r # 按照文件大小倒序排序(含隐藏文件)
du -h /home/yao | sort -n -r | head -n 10 # 非隐藏文件,筛选前10,可读方式展示文件大小; # sort -n -r 也能够写做 sort -rn; # -n:依照数值的大小排序; # -r:以相反的顺序来排序;
du -h --max-depth=1 /home/yao | sort -n -r | head -n 10 # 指定目录第一层,筛选前10,可读方式展示文件大小
du -h --max-depth=1 /home/yao | sort -rn -o 'sort.txt' | head -n 10 # 使用sort -o 参数将排序结果存入指定文件
另外,sort还有些其余参数,例如根据文件名排序而不是大小。
# sort基本参数以下 -n:依照数值的大小排序; -r:以相反的顺序来排序; -o<输出文件>:将排序后的结果存入制定的文件; -b:忽略每行前面开始出的空格字符; -c:检查文件是否已经按照顺序排序; -f:排序时,将小写字母视为大写字母; -m:将几个排序号的文件进行合并; # 如下几个参数与 -n 排序方式互斥 -i:排序时,除了040至176之间的ASCII字符外,忽略其余的字符; -d:排序时,处理英文字母、数字及空格字符外,忽略其余的字符; -M:将前面3个字母依照月份的缩写进行排序;
find / -name 'wfy.txt' # 从根目录下开始查找文件wfy.txt find . -name '*fy.txt' # 当前目录下,查找fy.txt后缀的文件 # “.”表示当前目录,"*"表示任意长度字符 find / -type f -size +500M # 从根目录开始查找,500M以上文件 # / :根目录 # . : 当前目录 # -type f: f为普通文件类型,f改成d则是目录文件,l则是符号连接文件,-type 还有其余参数,不在这里一一列举 # -size +500M :500MB以上 # 通常磁盘空间不够,删除垃圾文件时会使用到此命令 find . -type f -size +1k # 查找当前文件夹下超过1k的文件,注意k是小写。 find . -type f -mtime -30 # 查找当前目录下30天以内修改过的文件 # -mtime:表明修改时间,最经常使用,相似参数有-atime、-ctime # -atime:表明访问时间,查看过就算 # -ctime:文件状态改变时间 # -30:表明30天之内,30为n,数字本身填写 # +30:30天之前 # 30:距今第30天 find /var/log/ -mtime +30 -name '*.log' # 查找指定目录/var/log/ 下30天之前的log文件 find /etc ! -type f # 查找 /etc 目录下不是普通文件的 文件 # "!":感叹号,取反 find /etc ! -type l -mtime -30 # 查找/etc 目录下不是符号连接文件,并在30天内被修改过的文件 find /etc -maxdepth 1 ! -type l -mtime -30 # 查找/etc 第一层目录下不是符号连接文件的文件,并在30天内被修改过 # -maxdepth : 前面du学过,指定目录层级,-maxdepth 1表明第1层,-maxdepth 2表明延伸到第二层
-maxdepth 可能有点很差理解,因此截了个示例图
基本经常使用的find命令都已经讲完了,再说下运维中可能经常使用的一个组合命令,利用find删除N天之前的文件或日志。
先用wc -l来统计下log数量,再删除看看
find / -name '*.log' -mtime +300 | wc -l # 从根目录下开始搜索300天以前的log文件,并统计数量 # “|”:管道符,将前面查到的数据做为输入源给后面的命令
第一种删除方式:-exec
find / -name '*.log' -mtime +300 -exec rm {} \; # 查找30天之前的log文件,使用-exec加rm将其删除 # 再使用上面的命令从新查看一次 find / -name '*.log' -mtime +300 | wc -l
第二种删除方式:-ok
find / -name '*.log' -mtime +200 -ok rm {} \; # -ok : 询问删除,y删除,n不删除,回车默认不删除
第三种删除方式:xargs
依次执行查看结果
find / -name '*.log' -mtime +100 | wc -l find / -name '*.log' -mtime +100 | xargs rm -f # xargs : 命令传递参数过滤器,与管道符“|”一同使用,将前面的命令传递给后面的命令使用 find / -name '*.log' -mtime +100 | wc -l
对于50天前的log文件进行详情查看
find / -name '*.log' -mtime +50 | xargs ls -l # 利用xargs + ls -l 命令来进行文件的详细属性查看
移除50天前的文件
mkdir /logback # 建立根目录下的 /logback文件夹 find / -name '*.log' -mtime +50 | xargs -i mv {} /logback # 将50天前的全部log文件移动到 /logback 文件夹下 # xargs -i + {},将前面查找到的文件都做为参数给mv命令执行 ls -l /logback # 查看 /logback 下全部文件详情
区别一:
-exec,是将查找到的结果文件名逐个传递给后面的命令执行,文件多会致使效率低;
xargs,则是一次性传递,效率较高,并可以使用-n参数控制传递文件个数。
区别二:
-exec,文件名有空格等特殊字符也照常处理;
xargs,处理特殊的文件名(例如文件名有空格)须要采用特殊的处理方式(find . -name "*edu" -pringt0| xargs -0 ls -l)
验证区别一,示例以下:
find /logback -name '*.log' -exec echo yaomaomao {} \; find /logback -name '*.log' | xargs echo yaomaomao
能够看到使用-exec每次得到一个文件输出一次,xargs则只输出了一行。
xargs还能够用-n参数控制每次输出的文件个数
find /logback -name '*.log' | xargs -n5 echo yaomaomao
能够看到,每行输出5个参数(文件名),不足的行输出剩下的。
验证区别二,示例以下:
touch yaomaomao.txt;touch "yaomaomao centOS 7";ll yaomaomao* # 小技巧:使用“;”分号能够一次性执行多个命令 # 注意:查看和建立带有空格的文件时,使用引号括起来
find . -name "yaomaomao*" -exec ls -lh {} \; # 正常查找出来 find . -name "yaomaomao*" | xargs ls -lh # 能够看到使用此命令报找不到那个文件或目录 find . -name "yaomaomao*" -print0 | xargs -0 ls -lh # 正常查找
其实find还有不少强大的功能,截两张图你们就知道了
这本书就是我开头推荐的《核心系统命令实战》。
grep -n '不用' wfy.txt # 查找wfy.txt文件中含有“不用”的字符行 # -n 显示行号 # -i 不区分大小写 # -v 反向过滤 # -c 统计匹配行
grep -c '不用' wfy.txt # 统计包含“不用”字符行的行数 grep -v '不用' wfy.txt # 查找不包含“不用”的字符行
# 先来准备数据 cp wfy.txt wfy2.txt # 复制一份文件 sed -i '1i 我是复制的wfy2' wfy2.txt # 使用sed在第一行前加上一行标题区分 cat wfy2.txt # 查看刚才复制的文件 grep -n '不用' wfy.txt wfy2.txt # 查询多个文件中包含“不用”字符的文件内容,并显示行号 # 直接在末尾跟上多个参数
grep -n '不用' * # 查询当前目录下全部文件中包含“不用”的文件,并显示对应行号
# 咱们来先准备下数据 mkdir dirwfy ; cp wfy.txt dirwfy/wfy3.txt;sed -i '1i 我是wfy3,注意看' dirwfy/wfy3.txt;cat dirwfy/wfy3.txt # 建立目录dirwfy,在dirwfy目录下建立wfy3.txt文件,并修改标题
# 使用上面的grep -n 看下效果 grep -n '不用' * # 查不到dirwfy下文件 grep -rn '不用' * # 如图,能够查到dirwfy下文件
grep -A10 '姚毛毛' wfy.txt # 查看“姚毛毛”字符行后10行数据 # -A : after
grep -B5 '5你' wfy.txt # 查看“5你”字符行前5行 # -B:before
grep -A1 -B1 '7你' wfy.txt # 查看"7你"字符先后各1行数据
history|grep rm # 查找历史命令中执行了哪些删除命令
rpm -qa |grep yum # 查询linux下是否有安装过此rpm包 ps -ef|grep java # 此命令为通常运维中最经常使用命令,查询linux进程中是否运行了此程序 pgrep -java # 查找java进程,与上面查找功能相同,可是只显示进程号 pgrep -l java # 查找java进程,与上面查找功能相同,可是显示进程号及进程名 kill –9 'pgrep java' # 批量关闭java进程 # pgrep:查找正在运行的程序;pgrep是grep的扩展功能,一样的还有egrep、fgrep,用的很少了解下就行 # egrep:扩展正则表达式 # fgrep:不识别正则表达式 ps -ef |grep $ORACLE_SID|grep -v grep|awk '{print $2}' | xargs kill -9 # 获得全部oracle进程并关闭
wc最经常使用命令通常为组合命令,如:
ls | wc -l # 统计当前文件夹下有多少文件 ls *.txt | wc -l find . -maxdepth 1 -name '*.txt' | wc -l # 统计当前文件夹、第一层目录下全部的txt文件数量 # 上面两个命令均可以
wc基本命令:
wc -l /etc/inittab # 统计文件内容行数 # -l :统计行数 # -w :统计单词数 # -m :统计字符数 # -c : 统计字节数 # -L : 打印最长行的长度 # 所有执行下看看 wc -l /etc/inittab;wc -c /etc/inittab; wc -m /etc/inittab;wc -w /etc/inittab; wc -L /etc/inittab wc /etc/inittab # 不加参数则默认输出行数、单词数、字节数 # 等同参数为-lwc # 字节数跟字符数怎么同样的?由于都是英文,咱们加个中文字进去看看 sed -i '1a #中' /etc/inittab wc -lcmwL /etc/inittab # 注意:输出内容并非按照咱们敲出的命令行中参数来排序的,它有其固定顺序--> lwmcL # 按照lwmcl的顺序排列后,能够看到字节数比字符数多了两位,由于一个#符号1字节,一个英文字符表明2字节,一个中文字符4字节,咱们添加了#中,因此是添加了5字节,可是只增长了2字符。
公众号注册的比较晚,没有评论功能,因此通常用来发长文。
知识星球至关于技术朋友圈,有问题你们能够提问,讨论。
欢迎关注个人公众号:姚毛毛的博客
欢迎加入个人知识星球,目前免费哦。
知识星球:姚毛毛的私密花园
--------------------------------------------------------
公众号注册的比较晚,没有评论功能,因此通常用来发长文。
知识星球至关于技术朋友圈,有问题你们能够提问,讨论。
欢迎关注个人公众号:姚毛毛的博客
欢迎加入个人知识星球,目前免费哦。
知识星球:姚毛毛的私密花园
[知识星球]