教老婆学Linux(二)Linux常用命令指南【上】

作者:姚毛毛的博客

tips:文章太长,分两篇发出,本篇发前三个章节: 1、文件及目录操作; 2、文件查看及编辑 3、文件查找及统计。

目录

一、概述

1.1写在前面 & 学习指南

本文目的:主要是作为一张给初学者入门Linux的学习地图。

所以我只会讲一些我们生产过程中常用的命令及操作,对于命令的一些偏门用法本文会一带而过甚至不讲。

对于Linux命令详解可以参考网站

https://man.linuxde.net/。

实体书的话推荐《跟老男孩学linux运维-核心系统命令实战》。

1.2 常用命令概述

我将Linux下的常用命令分为几类:

1、文件及目录操作

2、文件查看及编辑

3、文件查找及统计

4、文件解压与压缩

5、用户与文件权限

6、资源监控与管理

为什么列的几个章节都是跟文件相关的?

因为在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 注意事项

1、本文使用Linux环境为centOs 7,其他发行版可能会有轻微不一致情况。Mac的命令行也同样如此。

2、在linux中所有命令都要使用空格隔开,如cd xx文件,在第二章节学习时需注意。

3、命令一般都有参数,可使用man或help查看其参数作用。参数写法一般为-开头。如ls -l查看当前目录下所有文件。rm -f xxx文件,删除xxx文件,-f参数含义为如果没有这个文件,也不提示。

二、常用命令

2.1 文件及目录操作

2.1.1 路径切换的好基友:cd、ls、ll、pwd

在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
# 查看当前所在路径
2.1.2 文件创建好伙伴:touch、mkdir

在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
# 查看有没有创建成功
2.1.3 复制、移动和删除:cp、mv、rm

此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吗,也是递归删除。

2.2 文件查看与编辑

2.2.1 合并文件好帮手:cat
cat [文件名]
# 输出文件所有内容到屏幕上 cat [文件1] [文件2]
# 输出文件1、文件2所有内容到屏幕上 cat [文件1] [文件2] > [文件3]
# 将文件1、文件2合并,输出到文件3中,如果没有文件3会自动生成一个新的文件3 cat -n [文件名]
# 输出文件内容时加上行号 cat -A [文件名]
# 输出文件内容时显示所有隐藏字符

cat的特点就是一次性将所有内容输出到屏幕上,用得最频繁的一大功能就是合并文件,并输出到新文件中。因为如果只是查看的话,有很多其他工具都可以查看。

另外cat命令比较常用的还有和管道符“|”一起来用。用来作为管道符的输入内容,如 cat xxx.log | grep '我要找这个单词',这个后续说道文件查找时再说。

2.2.2 观察日志小能手:tail

tail 一般用来查看日志使用,显示文件最新追加的内容

tail -f xxx.log
# 不停地追加显示log文件的最后10行 tail -fn1000 xxx.log
# 加上-n参数,不停地追加显示log文件的最后1000行

tail也可以同时显示多个文件内容,但是不推荐使用,如

tail -fn1000 xxx.log xxx2.log

如果显示文件不止一个,则在显示的每个文件前面加一个文件名标题

![tail -fn1000 xxx.log xxx2.log](D:\技术资料\笔记\教老婆学Linux\2\tail -fn1000 xxx.log xxx2.log.png)

与tail 相对的还有个head,是从开头显示文件内容,一般用法为 head -n [文件名],用法与tail差不多。

2.2.3 编辑文件我拿手:vi/vim

要说在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。

最后,咱们总结下几种模式的切换:

1、vi/vim [fileName] --> normal模式

2、normal 下 输入 i、a、o、s 键--> 编辑模式

3、normal 下 输入冒号 : --> 底线命令模式

4、Esc退出到normal模式

5、:q :wq :q! :wq! 退出不保存/保存文件

哦,还有个 normal 下 输入v 进入视图模式,这个在以后的进阶学习里可以说下,一般没啥用。

2.2.4 vim小兄弟:more、less

说完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吗,一样的效果。

2.2.5 我是外挂我骄傲,不打开文件也编辑:sed

文件查看与编辑终于到了最后一节了,这次来说说大杀器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感兴趣,想深入研究的可以自行探索。

2.3 文件查找及统计

2.3.1 文件大小统计与排序:du、sort
2.3.1.1 du常用命令
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 [目录]
# 只显示指定目录第一、二层目录的大小

图示:

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

只显示指定目录第一、二层目录的大小

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 重复计算硬件链接的文件。
2.3.1.2 文件排序: du + sort + head 常用命令
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个字母依照月份的缩写进行排序;
2.3.2 查找文件我最强:find
2.3.2.1 find查找常用命令示例
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 可能有点不好理解,所以截了个示例图

2.3.2.2 使用find 组合命令:统计与删除

基本常用的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

2.3.2.3 find与xargs的组合使用

对于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 下所有文件详情

2.3.2.4 find下xargs与exec的区别

区别一:

-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还有很多强大的功能,截两张图大家就知道了



这本书就是我开头推荐的《核心系统命令实战》。

2.3.3 shell三剑客之二:grep,字符查找有一手
2.3.3.1 grep 常用命令示例:
grep -n '不用' wfy.txt
# 查找wfy.txt文件中含有“不用”的字符行
# -n 显示行号
# -i 不区分大小写
# -v 反向过滤
# -c 统计匹配行

grep -c '不用' wfy.txt
# 统计包含“不用”字符行的行数 grep -v '不用' wfy.txt
# 查找不包含“不用”的字符行

2.3.3.2 grep同时查找多个文件
# 先来准备数据

cp wfy.txt wfy2.txt
# 复制一份文件 sed -i '1i 我是复制的wfy2' wfy2.txt
# 使用sed在第一行前加上一行标题区分 cat wfy2.txt
# 查看刚才复制的文件 grep -n '不用' wfy.txt wfy2.txt
# 查询多个文件中包含“不用”字符的文件内容,并显示行号
# 直接在末尾跟上多个参数

grep -n '不用' *
# 查询当前目录下所有文件中包含“不用”的文件,并显示对应行号

2.3.3.3 grep递归查找
# 我们来先准备下数据

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下文件

2.3.3.4 grep查找对应字符前后n行
grep -A10 '姚毛毛' wfy.txt
# 查看“姚毛毛”字符行后10行数据
# -A : after

grep -B5 '5你' wfy.txt
# 查看“5你”字符行前5行
# -B:before

grep -A1 -B1 '7你' wfy.txt
# 查看"7你"字符前后各1行数据

2.3.3.5 grep组合命令
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进程并关闭
2.3.4 wc

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字符。



公众号注册的比较晚,没有评论功能,所以一般用来发长文。

知识星球相当于技术朋友圈,有问题大家可以提问,讨论。

欢迎关注我的公众号:姚毛毛的博客

欢迎加入我的知识星球,目前免费哦。

知识星球:姚毛毛的私密花园

公众号注册的比较晚,没有评论功能,所以一般用来发长文。

知识星球相当于技术朋友圈,有问题大家可以提问,讨论。

欢迎关注我的公众号:姚毛毛的博客

欢迎加入我的知识星球,目前免费哦。

知识星球:姚毛毛的私密花园

![知识星球]

教老婆学Linux运维(二)Linux常用命令指南【上】的更多相关文章

  1. 【Linux 运维】Linux 目录

    目录 [Linux 运维]Centos7初始化网络配置 [Linux 运维]linux系统修改主机名 [Linux 运维]linux系统关机.重启.注销命令 [Linux 运维]linux系统查看版本 ...

  2. Linux内存运维操作及常用命令

    Linux内存运维操作及常用命令 1.问题诊断 1.1 什么是 Linux 服务器 Load Average? 1.2如何查看 Linux 服务器负载? 1.3服务器负载高怎么办? 1.4如何查看服务 ...

  3. Linux运维二:CentOS6.6系统安装后的基本配置与优化

    CentOS6.6系统安装完成后还需要做一些配置与优化: 一:Linux内核版本号介绍 查看内核版本: [root@Gin scripts]# uname -r 2.6.32-504.el6.x86_ ...

  4. 【Linux 运维】linux系统关机、重启、注销命令

    linux 关机.重启.注销命令: 关机命令: shutdown -h now 立刻关机(生产常用) shutdown -h  +1  一分钟后关机      (    shutdown -c 可以将 ...

  5. 【linux运维】linux系统上忘记密码如何操作

    目录 红帽系统忘记密码操作 红帽系统设置ip,主机名 centos系统忘记密码操作 一.红帽系统忘记密码操作 1)再出现以下界面后按键盘e键 2)进入以下界面后,再次按e键 3)使用上下键选择第2项或 ...

  6. 【linux运维】Linux服务器玩转vsftpd安装与配置

    Linux服务器搭建ftp详细教程. 前言 本文,主要以vsftp软件为主进行讲解,版本为3.0.2.以介绍设置虚拟用户.权限验证为主,linux权限知识默认大家都有所了解.vsftpd设置有两种模式 ...

  7. linux 运维必备150个命令

    线上查询及帮助命令(1个) man 目录操作命令(6个) ls tree pwd mkdir rmdir cd 文件操作命令(7个) touch cp mv rm ln find rename 文件查 ...

  8. Linux运维人员最常用166个命令汇总

    引用自“菜鸟博客” 命令 功能说明 线上查询.帮助命令(2个) man 查看命令帮助,命令词典,更复杂还有info,但不常用. help 查看Linux内置命令的帮助,比如cd等命令. 文件.目录操作 ...

  9. Linux运维人员最常用 150 个命令汇总

    linux 命令是对 Linux 系统进行管理的命令.对于 Linux 系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件, Linux 系统管理的命令是它正常运行的核心,与 ...

  10. 互联网公司linux运维生产场景常用软件工具一览

    linux的世界真的很精彩,还没入门的朋友赶紧进来吧! 操作系统:Centos※,Freebsd,Ubuntu,Redhat linux,suse linux网站服务:apache※,nginx※,l ...

随机推荐

  1. python查找时,不支持compound class

    1.python使用如下代码查找页面上的元素时, browser.findElement_by_class_name("widget-content nopadding") 报错: ...

  2. lightoj 1095 - Arrange the Numbers(dp+组合数)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1095 题解:其实是一道简单的组合数只要推导一下错排就行了.在这里就推导一下错排 ...

  3. poj 2777 Count Color(线段树(有点意思))

    题目链接 http://poj.org/problem?id=2777 题意:题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位 ...

  4. CF990B Micro-World 贪心 第十六

    Micro-World time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  5. [kuangbin带你飞]专题一 简单搜索 Find a way HDU - 2612

    Pass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year ...

  6. bzoj3032 七夕祭题解

    题面 TYVJ七夕祭和11区的夏祭的形式很像.矩形的祭典会场由N排M列共计N×M个摊点组成.虽然摊点种类繁多,不过cl只对其中的一部分摊点感兴趣,比如章鱼烧.苹果糖.棉花糖.射的屋--什么的.Vani ...

  7. hotcss.js Flexible 移动端适配在dpr=2和dpr=3出现的字体大小设置不正确问题.

    这段时间一直在用hotcss做移动端适配,做了几个页面没有发现什么问题,后来老大要加快进度,我把项目分出一块给另一个同事做,她发现了一个问题就是字体在dpr=2,dpr=3,的设备上字体大小显示老是不 ...

  8. 【Offer】[3-1] 【找出数组中重复的数字】

    题目描述 思路 Java代码 代码链接 题目描述 在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. 请找出数组中任 ...

  9. SpringCloud学习笔记(2):使用Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具,在注册中心对Ribbon客户端进行注册后,Ribbon可以基于某种负载均衡算法,如轮询(默认 ...

  10. 对TD tree系统评价及改进

    该系统是由石家庄铁道大学2017级信息学院的同学研发并改进,分享给我们18级新生的一份体验,这项app可安装在任意一个智能手机上,当听到学长们像我们介绍这款app的时候,着实让我惊呆了,惊叹学长们的编 ...