linux常用命令记录

date  日期

cal  日历

df  磁盘当前空间 -M 以MB做单位显示

free 显示内存状态 -M 以MB做单位显示 -t 显示内存总数 [-s<秒数>] 持续观察内存

pwd 查看当前工作目录

cd 改变目录 cd ..  返回上一层目录 cd - 将工作目录改变成先前的工作目录  ~返回到自己的主目录下

ls 查看目录内容 ls /usr 查看指定目录的内容 ls ~ /usr 查看主目录和指定目录下的内容 -l显示目录的详细信息 -t 按修改的时间先后顺序显示 ls -lt 单字符命令可以串在一起使用      -S 按文件大小排序 -r 以相反的顺序显示结果  结果显示内容 字段 -rw-r-r 对文件的访问权限 -表示是普通文件 如果开头是d则表示是目录 第一个 rw表示文件所有者的访问权限 第二个r表示文件所有者组中成员的访问权限 第三个r表示其它所有人的访问权限 1表示文件的硬连接数 ROOT 文件的所有者的用户名 ROOT 文件所属用户组名称 32056 以字节数显示文件的大小 201-01-01 11:09 上次修改文件的日期和时间  cover.odf 文件名

file    file aaa.jpg 确定文件类型

less 查看文件内容 less /etc/passwd  查看系统帐号文件  箭头控制上下滚动 Q退出

cp   复制文件和目录

功能: 复制文件或目录
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
参数:
     -a 或 --archive     此参数的效果和同时指定"-dpR"参数相同
     -b 或 --backup      删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录
     -f 或 --force       强行复制文件或目录, 不论目的文件或目录是否已经存在
     -i 或 --interactive 覆盖文件之前先询问用户
     -l 或 --link        对源文件建立硬链接,而非复制文件
     -p 或 --preserve    保留源文件或目录的属性,包括所有者、所属组、权限与时间
     -P 或 --parents     保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经丰在
     -r                  递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
     -R 或 --recursive   递归处理,将指定目录下的文件及子目录一并处理
     -s 或 --symbolic-link  对源文件建立符号链接,而非复制文件
     -S <备份字尾字符串> 或 --suffix=<备份字尾字符串> 用"-b"参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号"~"
     -u 或 --update      使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件
     -v 或 --verbose     显示执行过程
     -V <备份方式> 或 --version-control=<备份方式>  指定当备份文件时,备份文件名的命名方式,有以下3种:
                         1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增
                         2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定
                         3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份
     -x 或 --one-file-system  复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件
     --help              显示在线帮助
     --sparse=<使用时机>  设置保存希疏文件的时机
     --version           显示版本

示例:
    .复制文件,只有源文件较目的文件的修改时间新时,才复制文件
     cp -u -v file1 file2

    .将文件file1复制成文件file2
     cp file1 file2

    .采用交互方式将文件file1复制成文件file2
     cp -i file1 file2

    .将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制的模式
     cp -f file1 file2

    .将目录dir1复制成目录dir2
     cp -R file1 file2

    .同时将文件file1、file2、file3与目录dir1复制到dir2
   cp -R file1 file2 file3 dir1 dir2

    .复制时保留文件属性
     cp -p a.txt tmp/

    .复制时保留文件的目录结构
     cp -P  /var/tmp/a.txt  ./temp/

    .复制时产生备份文件
     cp -b a.txt tmp/

    .复制时产生备份文件,尾标 ~1~格式
     cp -b -V t   a.txt /tmp    
  
    .指定备份文件尾标    
     cp -b -S _bak a.txt /tmp

mv 移动或重命名文件和目录

mkdir 创建目录

rm  删除文件和目录

in 创建硬链接和符号链接

free -m 已M为单位查看系统内存

其实啊.linux的内存是很说究的.如下显示free是显示的当前内存的使用,-m的意思是M字节来显示内容.我们来一起看看.
$ free -m
                total          used          free        shared       buffers        cached
Mem:            1002           769           232             0            62           421
-/+ buffers/cache:           286           715
Swap:            1153             0          1153

第一部分Mem行:
total 内存总数: 1002M
used 已经使用的内存数: 769M
free 空闲的内存数: 232M
shared 当前已经废弃不用,总是0
buffers Buffer 缓存内存数: 62M
cached Page 缓存内存数:421M

关系:total(1002M) = used(769M) + free(232M)
第二部分(-/+ buffers/cache):
(-buffers/cache) used内存数:286M (指的第一部分Mem行中的used - buffers - cached)
(+buffers/cache) free内存数: 715M (指的第一部分Mem行中的free + buffers + cached)

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
第三部分是指交换分区, 我想不讲大家都明白.
我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关used和free为什么这么奇怪.
其实我们可以从二个方面来解释.
操作系统来讲是Mem的
参数.buffers/cached 都是属于被使用,所以它认为free只有232.
应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

所以,以应用来看看,以(-/+ buffers/cache)的free和used为主.所以我们看这个就好了.另外告诉大家一些常识.Linux为了提高磁盘和内存存取效率, Linux做了很多精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和PageCache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了I/O系统调用(比如read,write,getdents)的时间。

type命令被用于判断另外一个命令是否是内置命令,但是它实际上有更多的用法。

1.判断一个名字当前是否是alias、keyword、function、builtin、file或者什么都不是:
type ls 的输出是 ls 是 `ls --color=auto' 的别名
type if 的输出是 if 是 shell 关键字
type type 的输出是 type 是 shell 内嵌
type gedit 的输出是 gedit 是 /usr/bin/gedit
type frydsh 的输出是 bash: type: frydsh: 未找到
2.判断一个名字当前是否是alias、keyword、function、builtin、file或者什么都不是的另一种方法(适用于脚本编程): www.2cto.com
type -t ls 的输出是 alias
type -t if 的输出是 keyword
type -t type 的输出是 builtin
type -t gedit 的输出是 file
type -t frydsh 没有输出
3.显示一个名字的所有可能:
type -a kill 的输出是 kill 是 shell 内嵌 和 kill 是 /bin/kill
type -at kill 的输出是 builtin 和 file
4.查看一个命令的执行路径(如果它是外部命令的话):
type -p gedit 的输出是 /usr/bin/gedit
type -p kill 没有输出(因为kill是内置命令)
5.强制搜索外部命令:
type -P kill 的输出是 /bin/kill

which命令

我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:
which 查看可执行文件的位置。
whereis 查看文件的位置。
locate 配合数据库查看文件位置。
find 实际搜寻硬盘查询文件名称。

which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

1.命令格式:

which 可执行文件名称

2.命令功能:

which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。

3.命令参数:

-n  指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。

-p  与-n参数相同,但此处的包括了文件的路径。

-w  指定输出时栏位的宽度。

-V  显示版本信息

4.使用实例:

实例1:查找文件、显示命令路径

命令:

which lsmod

输出:

[root@localhost ~]# which pwd

/bin/pwd

[root@localhost ~]# which adduser

/usr/sbin/adduser

[root@localhost ~]#

说明:

which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!

实例2:用 which 去找出 which

命令:

which which

输出:

[root@localhost ~]# which which

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

/usr/bin/which

[root@localhost ~]#

说明:

竟然会有两个 which ,其中一个是 alias 这就是所谓的『命令别名』,意思是输入 which 会等於后面接的那串命令!

实例3:找出 cd 这个命令

命令:

which cd

输出:

说明:

cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是bash 内建的命令! 但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!


man显示命令的手册页

 知道linux帮助文件(man-pages,手册页)一般放在,$MANPATH/man 目录下面,而且按照领域与语言放到不同的目录里面。 看了上一章,要找那个命令使用相关手册,只要我们按照领域区分,到对于目录去查看与命令对应的文件解压,cat file 就可以看到一篇详细的文档了。 但是与快速索引查找帮助相差太远了。linux有一个很好工具,就是man 它会按照系统设计帮助目录,在各个文档里面查询,并且显示内容。接下来,主要讲一下这个命令使用以及配置说明,还有一些使用实例。

  • man命令使用

man命令:可以通过一些参数,快速查询linux帮助手册,并且格式化显示。

使用语法:

man [-adfhktwW] [section] [-M path] [-P pager] [-S list] [-m system] [-p string] title..

参数用法:

参数备注
man命令常用参数
-a显示所有匹配项
-d显示man查照手册文件时候,搜索路径信息,不显示手册页内容
-D同-d,显示手册页内容
-f同命令whatis ,将在whatis数据库查找以关键字开同的帮助索引信息
-h显示帮助信息
-k同命令apropos 将搜索whatis数据库,模糊查找关键字
-S list指定搜索的领域及顺序 如:-S 1:1p httpd 将搜索man1然后 man1p目录
-t使用troff 命令格式化输出手册页 默认:groff输出格式页
-w不带搜索title 打印manpath变量 带title关键字 打印找到手册文件路径,默认搜索一个文件后停止
-W同-w
section搜索领域【限定手册类型】默认查找所有手册
man命令其它参数
-c显示使用 cat 命令的手册信息
-C指定man 命令搜索配置文件 默认是man.config
-K搜索一个字符串在所有手册页中,速度很慢
-M指定搜索手册的路径
-P pro使用程序pro显示手册页面 默认是less
-B pro使用pro程序显示HTML手册页 默认是less
-H pro使用pro程序读取HTML手册,用txt格式显示,默认是cat
-p str指定通过groff格式化手册之前,先通过其它程序格式化手册

它带的参数非常多,其实只有上面常用参数我们才经常使用,其它很多参数几本不会去修改。

  • man命令获得帮助一般过程

实例代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
[chengmo@centos5 ~]$ man -w passwd
/usr/share/man/man1/passwd.1.gz
#显示passwd帮助文件路径,passwd.1 通过名称知道这个是passwd命令帮助手册,那它的其它命令的呢?
[chengmo@centos5 ~]$ man -aw passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man5/passwd.5.gz
#加入-a获得所有帮助手册文件地址,默认只会查找一个
[chengmo@centos5 ~]$ man 5 passwd
#只得到passwd配置文件帮助信息,可以加入领域类型限制,如果知道5,默认是查询man5 文件配置信息说明 手册目录
[chengmo@centos5 ~]$ man -d passwd
Reading config file /etc/man.config
.....
found man directory /usr/man
using /usr/bin/less -is as pager
using /usr/bin/less -is as browser
using /bin/cat to dump HTML pages as text
path directory /bin is in the config file
adding /usr/share/man/zh_CN to manpath
adding /usr/share/man to manpath
found 'NROFF_OLD_CHARSET' in path
old charset of '/usr/share/man/man1/passwd.1.gz' is 'ISO-8859-1'
man:
not executing command:
(cd /usr/share/man && (echo ".ll 11.8i"; echo ".nr LL 11.8i"; echo ".pl 1100i"; /usr/bin/gunzip -c '/usr/share/man/man1/passwd.1.gz'; echo ".\\\""; echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -c --legacy ISO-8859-1 -mandoc 2>/dev/null | /usr/bin/less -is)
#man -d 返回man 执行过程搜索查找方法,以及查询手册通过怎么样格式化语句显示。都会列出来
#可以看到,指定pages,borwser输出命令对应文件,html输出文件,搜索路径,由于我当前LANG=zh_CN.gb2312因此,添加了zh_CN目录搜索
#最终执行命令时候,通过一系列格式转换命令,最终有less显示
[chengmo@centos5 ~]$ man -S 1:2 passwd
#在领域类型是:1:2 范围内查找手册,对应目录分别是man1 ,man2
[chengmo@centos5 ~]$ man -f httpd
httpd (8) - Apache Hypertext Transfer Protocol Server
httpd (rpm) - Apache HTTP Server
httpd-devel (rpm) - Development tools for the Apache HTTP server.
#在whatis数据库(有所有网站man帮助以及cat,doc帮助信息索引)中查询,文件标题以:http开头信息的文档
#中间的(8) 对应我们可以用:man 8 httpd 调用,对于显示(rpm)实际上显示有个httpd帮助信息,是属于一个httpd rpm安装包,通过man rpm httpd查看不了。可以通过rpm -ql httpd 查找安装包
[chengmo@centos5 ~]$ man -k httpd
CGI::Carp (3pm) - CGI routines for writing to the HTTPD (or other) error log
httpd (8) - Apache Hypertext Transfer Protocol Server
httpd (rpm) - Apache HTTP Server
httpd-devel (rpm) - Development tools for the Apache HTTP server.
httpd_selinux (8) - Security Enhanced Linux Policy for the httpd daemon
lighttpd (1) - a fast, secure and flexible webserver
lighttpd (rpm) - Lightning fast webserver with light system requirements
lighttpd-fastcgi (rpm) - FastCGI module and spawning helper for lighttpd and PHP configuration
ncsa_auth (8) - NCSA httpd-style password file authentication helper for Squid
#在whatis数据库中,查询包含httpd所有帮助手册,以及安装包. 可以通过:rpm -ql lighttpd
[chengmo@centos5 ~]$ rpm -ql lighttpd | grep gz
/usr/share/man/man1/lighttpd.1.gz
#其实这个包刚好是:lighttpd (1) - a fast, secure and flexible webserver 帮助手册
[chengmo@centos5 ~]$ man -w
/usr/kerberos/man:/usr/local/share/man:/usr/share/man/zh_CN:/usr/share/man:/usr/local/man
#显示man 命令查找手册的路径

对于:whatis数据库,以及中文化linux帮助文件这里先不分析。

一般遇到一个不是很熟悉命令可以先通过:

man -k command1 查询所有类似帮助文件信息,这样输出最多也可以用:

man -f command1 查询以command1开头所有相关帮助信息列表 如果发现有类似:command1 (5)

man 5 command1 通过直接定位5获得帮助信息

  • man命令搜索配置文件(man.config配置方法)

man这个命令为什么功能这么神奇,能够这么方便快捷索引出系统帮助信息,其它与它的一个配置文件分不开。我们看一下它配置文件。

?
1
2
3
4
5
6
7
[chengmo@centos5 ~]$ man -f man
man (1) - format and display the on-line manual pages
man (1p) - display system documentation
man (7) - macros to format man pages
man (rpm) - A set of documentation tools: man, apropos and whatis.
man-pages (rpm) - Man (manual) pages from the Linux Documentation Project.
man.config [man] (5) - configuration data for man

通过该命令,我们索引到所有与man有关的手册页了。 根据前面提到的领域设置类型,(1)是man命令说明,(7)man文件使用的宏格式规定,下面有一个:man.config (5) ,就是man的配置文件了。

读取man.config文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[wangsl@centos5 ~]$ cat /etc/man.config | grep -v '^#'
FHS
MANPATH /usr/man
MANPATH /usr/share/man
MANPATH /usr/local/man
MANPATH /usr/local/share/man
MANPATH /usr/X11R6/man
MANPATH_MAP /bin /usr/share/man
MANPATH_MAP /sbin /usr/share/man
MANPATH_MAP /usr/bin /usr/share/man
MANPATH_MAP /usr/sbin /usr/share/man
MANPATH_MAP /usr/local/bin /usr/local/share/man
MANPATH_MAP /usr/local/sbin /usr/local/share/man
MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man
MANPATH_MAP /usr/bin/X11 /usr/X11R6/man
MANPATH_MAP /usr/bin/mh /usr/share/man
TROFF /usr/bin/groff -Tps -mandoc
NROFF /usr/bin/nroff -c --legacy NROFF_OLD_CHARSET -mandoc 2>/dev/null
EQN /usr/bin/geqn -Tps
NEQN /usr/bin/geqn -Tutf8
TBL /usr/bin/gtbl
REFER /usr/bin/grefer
PIC /usr/bin/gpic
VGRIND
GRAP
PAGER /usr/bin/less -is
BROWSER /usr/bin/less -is
HTMLPAGER /bin/cat
CAT /bin/cat
CMP /usr/bin/cmp -s
COMPRESS /usr/bin/bzip2
COMPRESS_EXT .bz2
MANSECT 1:1p:8:2:3:3p:4:5:6:7:9:0p:n:l:p:o:1x:2x:3x:4x:5x:6x:7x:8x
.gz /usr/bin/gunzip -c
.bz2 /usr/bin/bzip2 -c -d
.z
.Z /bin/zcat
.F
.Y

配置文件分类:

MANPATH 关键字

指定手册默认存放路径,man启动就会在这些目录中索引手册页,可以通过添加一行:MANPATH /home/chengmo/man 指定加入自己的手册路径,通过man -M可以添加自己的手册路径

MANPATH_MAP关键字

指定帮助手册与命令对应目录,如果自己增加搜索目录,这里需要增加对应方式

格式化手册页输出

linux系统手册页,大家在看到时候有高亮,然后还有加粗,下划线,倾斜,空行等固定格式。其实这些在本来的手册页文件里面,只是保存为一系列的代号。大家不妨解压个gz手册文件,然后通过cat查看下内容。你会发现显示里面有如下内容中(点开头,然后一系列数字,而且整个页面显示杂乱无章,跟我们man看到完全不一样),其它这些代号对应是linux文件里面的宏指令代码,如:

.B 粗体

.BI 粗体跟斜体

.BR 粗体跟正体

.I 斜体

.IB 斜体跟粗体

.IR 斜体跟正体

.RB 正体跟粗体

.RI 正体跟斜体

.SM 小(缩放到正常大小的9/10)

.SB 小跟黑体(所跟的黑体不会缩小)

如果不清楚这个关系,把这些宏指令比拟为:html语言一些标签,在记事本中打开,大家都看不明白,但是如果用ie查看。就一目了然了。

这些宏指令在显示时候,必须通过一系列命令做格式转换,这里必须提到是:groff系列命令(它的工作有点像IE):

groff简介:

Groff (GNU Troff) 是 Troff 的最新开放源码实现,Troff 是从相同的输入源为各种设备生成打印和屏幕文档的一种文档格式化输出系统。

Groff 是一种用于格式化输出文档的编程语言。它由一套工具组成,而不是单个的应用程序,groff 工具是使用这些工具的前端。其中包括处理特殊的输入文本的预处理器、用于处理输入的称为 troff 的主排版引擎、以及将 troff 的输出转换为打印和屏幕输出的各种格式的后处理器。

您可以在文本编辑器中编写输入或者从程序生成输入,无论采用哪种方式,文档的编写过程都发生在 Groff 系统之外。文档使用纯文本进行编写并使用 Groff 语言进行标记,后者指定了文档的格式和外观(请参见为 Groff 编写输入部分)。然后将该输入文本发送到 Groff,以便对其进行处理从而获得所需的输出。

Groff包含几个处理文本格式的程序。Groff把标准的文本和特殊的命令翻译成格式化的输出,像你在 man 手册页里看到的那样。

安装下列程序: addftinfo, afmtodit, eqn, eqn2graph, geqn (link to eqn), grn, grodvi, groff, groffer, grog, grolbp, grolj4, grops, grotty, gtbl (link to tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, pic2graph, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff and zsoelim (link to soelim)

这里只是解析man.config常见的解析命令:

gpic 将内嵌于troff或者TeX输入文件中的图像编译成troff或者TeX理解的指令。

gtbl 实现table表格输出。

neqn 将方程格式化,使其成为适应ASCII输出的脚本,如果文档要表示一些数字开方,根号之类需要它了

refer 将一个文件拷贝到标准输出,并丢弃.[和.]之间作为引用的内容和在.R1和.R2之间解释如何处理这些引用的命令。

troff groff依照合适的顺序并使用合适的参数来执行预处理程序和后处理程序。

PAGER、BROWSER、HTMLPAGER

分别制定最终标准手册页,HTML手册页,HTML as TXT手册页 由那个程序显示。其实基本都是交给了:less这个作为手册页显示程序。当我们打开了手册页后,对它进行翻页查找等操作,其实就是运用less 程序快捷键完成的。如果命令行man –[PBH] 可以对当前索引,分别用新的程序覆盖系统设置。

COMPRESS,COMPRESS_EXT

设置压缩文件,已经压缩文件生成扩展名,如果需要将手册输出其它格式时候会用到

MANSECT

指定man 搜索手册目录顺序,假设设置是:

mansect 1:1p:8:2:3:3p:4:5:6:7:9:0p:n:l:p:o:1x:2x:3x:4x:5x:6x:7x:8x

如果直接man command1 ,它将按照这里指定的顺序查找手册页,先是man1,然后man1p…… 直到找到一个页面,就停止搜索。除非加了-a 参数。如果调用man -S 1:1p 是可以覆盖这项设置的

.gz .bz2

这个是如果手册页面是这里程序的,用什么程序进行解压。

我们还记得上次man -d 的参数吧!运行最后会输入一个脚本:

(cd /usr/share/man && (echo ".ll 11.8i"; echo ".nr LL 11.8i"; echo ".pl 1100i"; /usr/bin/gunzip -c '/usr/share/man/man1/man.1.gz'; echo ".\\\""; echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -c --legacy ISO-8859-1 -mandoc 2>/dev/null | /usr/bin/less -is)

其实这个才是man命令执行后 ,通过各个格式化指令组合,最终shell脚本运行的命令。

突然想到一个问题,man之所以强大,与它的松散配置分不开,它只是实现了搜索查找,而解压由:gunzip,格式化是由:groff处理,显示有less处理。

说到这里,man好像都说完了,对了,显示的页面怎么操作呢?接下来,我们在看看,less常用命令

  • man显示页面操作(less命令使用)

我们找到了自己的帮助文件了,而且已经显示了页面。在这个黑屏页面里面,我怎么样实现查找,跳转等操作呢?

其实,它现在已经进入了less命令管理范围了(可能有朋友认为是vi的,因为它们快捷键很相似,其实是less的)

image

下面说下less命令操作:

光标移动操作:

e ^E j ^N CR * 前进一行(或N行)
y ^Y k ^K ^P * 后退一行(或N行)
f ^F ^V SPACE * 前进一个窗口(或N行)
b ^B ESC-v * 后退一个窗口(或N行)
z * 前进一个窗口(将窗口设置到N)
w * 后退一个窗口(将窗口设置到N)
ESC-SPACE * 前进一个窗口,在文件末尾不停止
d ^D * 前进半个窗口(将这半个窗口设置到N)
u ^U * 后退半个窗口(将这半个窗口设置到N)
ESC-) RightArrow * 向左半个屏幕宽(或N个位置)
ESC-( LeftArrow * 向右半个屏幕宽(或N个位置)
F 一直前进,像"tail -f"一样

移动操作基本与vi一样的。

查找操作:

/pattern * 向前查找包含pattern的行.
?pattern * 向后查找包含pattern的行.
n * 查找下一个pattern行.
N * 查找上一个pattern行.
ESC-n * 同n.
ESC-N * 同N
ESC-u 取消所有搜索的高亮显示

调动操作:

g < ESC-< * 跳转到文件第一行
G > ESC-> * 跳转到文件最后一行
p % * 跳转到文件最开始

其它操作:

:n * 打开跳转到下一个文件
:p * 打开跳转到上一个文件
:x * 跳转到第一个打开的文件
h H 显示帮助
q :q Q :Q ZZ 退出当前打开文件

less可以打开多个文件,在多个文件操作中,可以使用这些命令。如man -a passwd 实际会查到多个手册,都会有less打开。可以通过这类命令实现打开与关闭。

INFO 显示命令的INFO条目

Info 是什么?info是一种文档格式,也是阅读此格式文档的阅读器;我们常用它来查看Linux命令的info文档。它以主题的形式把几个命令组织在一起,以便于我们阅读;在主题内以node(节点)的形式把本主题的几个命令串联在一起。

页面最上方的一行信息分别是:本node(节点,以下统称节点)所在文件的文件名、本节点的名称、下一节点的名称、前一节点的名称、上一节点的名称。

Menu下方就是本主题内的命令,敲M键,然后输入命令的名称就可以查看该命令的info帮助文档了。

下面介绍一下它的几个常用快捷键。
敲?键,它就会显示info的常用快捷键。
N键:显示(相对于本节点的)下一节点的文档内容
P键:显示(相对于本节点的)前一节点的文档内容
U键:进入当前命令所在的主题
M键:敲M键后输入命令的名称就可以查看该命令的帮助文档了
G键:敲G键后输入主题名称,进入该主题
L键:回到上一个访问的页面
SPACE键:向前滚动一页
BACKUP或DEL键:向后滚动一页
Q:退出info
命令
? 显示帮助窗口
在帮助窗口中:
Ctrl-x 0 关闭帮助窗口
Ctrl-x Ctrl-c 关闭整个 Info

q 退出 info
n 打开与本 Node 关联的下一个 Node
p 打开与本 Node 关联的前一个 Node
u 打开与本 Node 关联的上一个 Node
l 回到上一次访问的 Node
m或g 选择一个菜单项(Node 的名字)
输入指定菜单的名字后按回车,打开指定菜单项关联的 Node
空格键 下一页(PageDown 也可以,下一页从当前页的最后两行开始算起)
下一个 Node (若当前页在 Node 文档的末尾)
Del 键 上一页(PageUp 也可以,上一页从当前页的开始两行开始算起)
上一个 Node (若当前页 Node 文档的开始)

b 或 t 或 Home 文档的开始(b 是 begining 的意思)
e 或 End 文档的末尾(b 是 ending 的意思)
Ctrl-l 刷新当前页,若当前文档显示情况有问题时
Ctrl-g 取消所键入的指令 


alias[别名]=[指令名称]

功能说明:设置指令的别名。
语  法:alias[别名]=[指令名称]

参  数 :若不加任何参数,则列出目前所有的别名设置。
例 :ermao@lost-desktop:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

明:用户可利用alias,自定指令的别名。若仅输入alias,则可列出目前所有的别名设置。 alias的效力仅及于该次登入的操作。若要每次登入是即自动设好别名,可在/etc/profile或自己的~/.bashrc中设定指令的别名。

还有,如果你想给每一位用户都生效的别名,请把alias la='ls -al' 一行加在/etc/bashrc最后面,bashrc是环境变量的配置文件 /etc/bashrc和~/.bashrc 区别就在于一个是设置给全系统一个是设置给单用户使用.

利用alias可以把很长的命令变成任意我们喜欢的简短的

如果想永久生效,就把这条写入到 /etc/bashrc里面


cat

简略版:

cat主要有三大功能:
1.一次显示整个文件。$ cat filename
2.从键盘创建一个文件。$ cat > filename
只能创建新文件,不能编辑已有文件.
3.将几个文件合并为一个文件: $cat file1 file2 > file
参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
例:
把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -n textfile1 > textfile2

把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
cat -b textfile1 textfile2 >> textfile3
test.txt文件扔进垃圾箱,赋空值test.txt
cat /dev/null > /etc/test.txt

详细点的:

转:http://blog.sina.com.cn/s/blog_52f6ead0010127xm.html

cat 是一个文本文件查看和连接工具。查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名。

比如:

de>[root@localhost ~]# cat /etc/fstabde>

为了便于新手弟兄灵活掌握这个工具,我们多说一点常用的参数;


1.0 cat 语法结构;

de>cat [选项] [文件]...de>
选项
-A, --show-all 等价于 -vET
-b, --number-nonblank 对非空输出行编号
-e 等价于 -vE
-E, --show-ends 在每行结束处显示 $
-n, --number 对输出的所有行编号
-s, --squeeze-blank 不输出多行空行
-t 与 -vT 等价
-T, --show-tabs 将跳 字符显示为 ^I
-u (被忽略)
-v, --show-nonprinting 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
--help 显示此帮助信息并离开


1.1 cat 查看文件内容实例;

de>[root@localhost ~]# cat /etc/profile 注:查看/etc/目录下的profile文件内容;
[root@localhost ~]# cat -b /etc/fstab 注:查看/etc/目录下的profile内容,并且对非空白行进行编号,行号从1开始;
[root@localhost ~]# cat -n /etc/profile 注:对/etc目录中的profile的所有的行(包括空白行)进行编号输出显示;
[root@localhost ~]# cat -E /etc/profile 注:查看/etc/下的profile内容,并且在每行的结尾处附加$符号;de>

cat 加参数-n 和nl工具差不多,文件内容输出的同时,都会在每行前面加上行号;

de>[root@localhost ~]# cat -n /etc/profile
[root@localhost ~]# nl /etc/profilede>

cat 可以同时显示多个文件的内容,比如我们可以在一个cat命令上同时显示两个文件的内容;

de>[root@localhost ~]# cat /etc/fstab /etc/profilede>

cat 对于内容极大的文件来说,可以通过管道|传送到more 工具,然后一页一页的查看;

de>[root@localhost ~]# cat /etc/fstab /etc/profile | morede>


1.2 cat 的创建、连接文件功能实例;


cat 有创建文件的功能,创建文件后,要以EOF或STOP结束;

de>[root@localhost ~]# cat > linuxsir.org.txt << EOF 注:创建linuxsir.org.txt文件;
> 我来测试 cat 创建文件,并且为文件输入内容; 注:这是为linuxsir.org.txt文件输入内容;
> 北南南北 测试; 注:这是为linuxsir.org.txt文件输入内容;
> EOF 注:退出编辑状态;

[root@localhost ~]# cat linuxsir.org.txt 注:我们查看一下linuxsir.org.txt文件的内容;

我来测试 cat 创建文件,并且为文件输入内容;
北南南北 测试;de>

cat 还有向已存在的文件追加内容的功能;

de>[root@localhost ~]# cat linuxsir.txt 注:查看已存在的文件linuxsir.txt 内容;
I am BeiNanNanBei From LinuxSir.Org . 注:内容行
我正在为cat命令写文档


[root@localhost ~]# cat >> linuxsir.txt << EOF 注:我们向linuxsir.txt文件追加内容;
> 我来测试cat向文档追加内容的功能; 注:这是追回的内容
> OK?
> OK~
> 北南 呈上
> EOF 注:以EOF退出;


[root@localhost ~]# cat linuxsir.txt 注:查看文件内容,看是否追回成功。
I am BeiNanNanBei From LinuxSir.Org .
我正在为cat命令写文档

我来测试cat向文档追加内容的功能;
OK?
OK~
北南 呈上de>




cat 连接多个文件的内容并且输出到一个新文件中;

假设我们有sir01.txt、sir02.tx和sir03.txt ,并且内容如下;

de>[root@localhost ~]# cat sir01.txt
123456
i am testing

[root@localhost ~]# cat sir02.txt
56789
BeiNan Tested

[root@localhost ~]# cat sir03.txt
09876
linuxsir.org testingde>

我想通过cat 把sir01.txt、sir02.txt及sir03.txt 三个文件连接在一起(也就是说把这三个文件的内容都接在一起)并输出到一个新的文件sir04.txt 中。

注意:其原理是把三个文件的内容连接起来,然后创建sir04.txt文件,并且把几个文件的内容同时写入sir04.txt中。特别值得一提的是,如果您输入到一个已经存在的sir04.txt 文件,会把sir04.txt内容清空。

de>[root@localhost ~]# cat sir01.txt sir02.txt sir03.txt > sir04.txt

[root@localhost ~]# more sir04.txt
123456
i am testing
56789
BeiNan Tested
09876
linuxsir.org testingde>

cat 把一个或多个已存在的文件内容,追加到一个已存在的文件中

de>[root@localhost ~]# cat sir00.txt
linuxsir.org forever

[root@localhost ~]# cat sir01.txt sir02.txt sir03.txt >> sir00.txt

[root@localhost ~]# cat sir00.txt
linuxsir.org forever
123456
i am testing
56789
BeiNan Tested
09876
linuxsir.org testingde>


| 管道

一般在linux命令中|(管道)之前的命令会输出大量的结果,|(管道)之后的命令一般就是带有条件的,只将|前满足条件的结果显示出来

管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",

用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2,

例如: ls -l | more

该命令列出当前目录中的任何文档,并把输出送给more命令作为输入,more命令分页显示文件列表。

又如 rpm -aq | less


sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式:

  sort [-bcfMnrtk][源文件][-o 输出文件]
补充说明:sort可针对文本文件的内容,以行为单位来排序。

参  数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-f 排序时,忽略大小写字母。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-k 选择以哪个区间进行排序。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

下面通过几个例子来讲述Sort的使用。

(1)sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear

用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。
$ Sort seq.txt > result

(2)sort的-u选项

它的作用很简单,就是在输出行中去除重复行。

[rocrocket@rocrocket programming]$ cat seq.txt
banana
apple
pear
orange
pear
[rocrocket@rocrocket programming]$ sort seq.txt
apple
banana
orange
pear
pear
[rocrocket@rocrocket programming]$ sort -u seq.txt
apple
banana
orange
pear

pear由于重复被-u选项无情的删除了。

(3)sort的-r选项

sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。

[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort number.txt
1
2
3
4
5
[rocrocket@rocrocket programming]$ sort -r number.txt
5
4
3
2
1
(5)sort的-o选项

由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。

但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。

[rocrocket@rocrocket programming]$ sort -r number.txt > number.txt
[rocrocket@rocrocket programming]$ cat number.txt
[rocrocket@rocrocket programming]$
看,竟然将number清空了。

就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。

[rocrocket@rocrocket programming]$ cat number.txt
1
3
5
2
4
[rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt
[rocrocket@rocrocket programming]$ cat number.txt
5
4
3
2
1

(6) sort的-n选项

你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。

我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!

[rocrocket@rocrocket programming]$ cat number.txt
1
10
19
11
2
5
[rocrocket@rocrocket programming]$ sort number.txt
1
10
11
19
2
5
[rocrocket@rocrocket programming]$ sort -n number.txt
1
2
5
10
11
19

(7) sort的-t选项和-k选项

如果有一个文件的内容是这样:

[rocrocket@rocrocket programming]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。

[rocrocket@rocrocket programming]$ sort -n -k 2 -t ‘:’ facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

(8) 其他的sort常用选项

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-M会以月份来排序,比如JAN小于FEB等等

-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。


uniq [选项] 文件

说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示,则从标准输入读取。

该命令各选项含义如下:、

– c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。

– d 只显示重复行。

– u 只显示文件中不重复的各行。

– n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。

+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。

– f n 与- n相同,这里n是字段数。

– s n 与+n相同,这里n是字符数。

接下来通过实践实例说明:

===========================================

[root@stu100 ~]# cat test
boy took bat home
boy took bat home
girl took bat home
boy took bat home
boy took bat home
dog brought hat home
dog brought hat home
dog brought hat home

看test文件的内容

============================================

[root@stu100 ~]# uniq test
boy took bat home
girl took bat home
boy took bat home
dog brought hat home

uniq命令不加任何参数,仅显示连续重复的行一次

============================================

[root@stu100 ~]# uniq -c test
2 boy took bat home
1 girl took bat home
2 boy took bat home
3 dog brought hat home
1

-c 参数显示文件中每行连续出现的次数。

============================================

[root@stu100 ~]# cat test |sort | uniq -c
1
4 boy took bat home
3 dog brought hat home
1 girl took bat home

排序后再显示

============================================

[root@stu100 ~]# uniq -d test
boy took bat home
boy took bat home
dog brought hat home

-d选项仅显示文件中连续重复出现的行。

============================================

[root@stu100 ~]# uniq -u test
girl took bat home

-u选项显示文件中没有连续出现的行。

============================================

[root@stu100 ~]# uniq -f 2 -s 2 test
boy took bat home

忽略每行的前2个字段,忽略第二 个空白字符和第三个字段的首字符,结果at home

============================================

[root@stu100 ~]# uniq -f 1 test
boy took bat home
dog brought hat home

忽 略每行的第一个字段,这样boy ,girl开头的行看起来是连续重复的行。

============================================

[root@stu100 ~]# uniq -D test
boy took bat home
boy took bat home
boy took bat home
boy took bat home
dog brought hat home
dog brought hat home
dog brought hat home

显示所有重复的行,每个重复的行都显示

wc命令

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

1.命令格式:

wc [选项]文件...

2.命令功能:

统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。

3.命令参数:

-c 统计字节数。

-l 统计行数。

-m 统计字符数。这个标志不能与 -c 标志一起使用。

-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

-L 打印最长行的长度。

-help 显示帮助信息

--version 显示版本信息

4.使用实例:

实例1:查看文件的字节数、字数、行数

命令:

wc test.txt

输出:

[root@localhost test]# cat test.txt

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# wc test.txt

7 8 70 test.txt

[root@localhost test]# wc -l test.txt

7 test.txt

[root@localhost test]# wc -c test.txt

70 test.txt

[root@localhost test]# wc -w test.txt

8 test.txt

[root@localhost test]# wc -m test.txt

70 test.txt

[root@localhost test]# wc -L test.txt

17 test.txt

说明:

7 8 70 test.txt

行数 单词数 字节数 文件名

实例2:用wc命令怎么做到只打印统计数字不打印文件名

命令:

输出:

[root@localhost test]# wc -l test.txt

7 test.txt

[root@localhost test]# cat test.txt |wc -l

7[root@localhost test]#

说明:

使用管道线,这在编写shell脚本时特别有用。

实例3:用来统计当前目录下的文件数

命令:

ls -l | wc -l

输出:

[root@localhost test]# cd test6

[root@localhost test6]# ll

总计 604

---xr--r-- 1 root mail 302108 11-30 08:39 linklog.log

---xr--r-- 1 mail users 302108 11-30 08:39 log2012.log

-rw-r--r-- 1 mail users 61 11-30 08:39 log2013.log

-rw-r--r-- 1 root mail 0 11-30 08:39 log2014.log

-rw-r--r-- 1 root mail 0 11-30 08:39 log2015.log

-rw-r--r-- 1 root mail 0 11-30 08:39 log2016.log

-rw-r--r-- 1 root mail 0 11-30 08:39 log2017.log

[root@localhost test6]# ls -l | wc -l

8

[root@localhost test6]#

说明:

数量中包含当前目录


 grep命令

1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

2.格式
grep [options]

3.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。

4.grep命令使用简单实例
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。

5.grep命令使用复杂实例
假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
$ grep magic /usr/src/Linux/Doc/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
grep: sound: Is a directory
这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
如果有很多 输出时,您可以通过管道将其转到’less’上阅读:
$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就可以更方便地阅读。

有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。

下面还有一些有意思的命令行参数
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep -n pattern files 即可显示行号信息

grep -c pattern files 即可查找总行数

这里还有些用于搜索的特殊符号
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
‘^’:指匹配的字符串在行首,
‘$’:指匹配的字符串在行 尾,



Grep 命令 用法大全

1、 参数:
-I :忽略大小写
-c :打印匹配的行数
-l :从多个文件中查找包含匹配项
-v :查找不包含匹配项的行
-n:打印包含匹配项的行和行标

2、RE(正则表达式)
\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
\< 从匹配正则表达式的行开始
\> 到匹配正则表达式的行结束
[ ] 单个字符;如[A] 即A符合要求
[ - ] 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
. 所有的单个字符
* 所有字符,长度可以为0

3、举例
# ps -ef | grep in.telnetd
root 19955 181 0 13:43:53 ? 0:00 in.telnetd

# more size.txt size文件的内容
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

# more size.txt | grep '[a-b]' 范围 ;如[A-Z]即A,B,C一直到Z都符合要求
b124230
b034325
a081016
a022021
a061048
b103303
a013386
b044525
# more size.txt | grep '[a-b]'*
b124230
b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
b103303
a013386
b044525
m8987131
B081016
M45678
B103303
BADc2345

# more size.txt | grep 'b' 单个字符;如[A] 即A符合要求
b124230
b034325
b103303
b044525
# more size.txt | grep '[bB]'
b124230
b034325
b103303
b044525
B081016
B103303
BADc2345

# grep 'root' /etc/group
root::0:root
bin::2:root,bin,daemon
sys::3:root,bin,sys,adm
adm::4:root,adm,daemon
uucp::5:root,uucp
mail::6:root
tty::7:root,tty,adm
lp::8:root,lp,adm
nuucp::9:root,nuucp
daemon::12:root,daemon

# grep '^root' /etc/group 匹配正则表达式的开始行
root::0:root

# grep 'uucp' /etc/group
uucp::5:root,uucp
nuucp::9:root,nuucp

# grep '\<uucp' /etc/group
uucp::5:root,uucp

# grep 'root$' /etc/group 匹配正则表达式的结束行
root::0:root
mail::6:root

# more size.txt | grep -i 'b1..*3' -i :忽略大小写

b124230
b103303
B103303

# more size.txt | grep -iv 'b1..*3' -v :查找不包含匹配项的行

b034325
a081016
m7187998
m7282064
a022021
a061048
m9324822
a013386
b044525
m8987131
B081016
M45678
BADc2345

# more size.txt | grep -in 'b1..*3'
1:b124230
9:b103303
15:B103303

# grep '$' /etc/init.d/nfs.server | wc -l
128
# grep '\$' /etc/init.d/nfs.server | wc –l 忽略正则表达式中特殊字符的原有含义

15
# grep '\$' /etc/init.d/nfs.server
case "$1" in
>/tmp/sharetab.$$
[ "x$fstype" != xnfs ] &&
echo "$path\t$res\t$fstype\t$opts\t$desc"
>>/tmp/sharetab.$$
/usr/bin/touch -r /etc/dfs/sharetab /tmp/sharetab.$$
/usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab
if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)'
if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] &&
if [ $startnfsd -ne 0 ]; then
elif [ ! -n "$_INIT_RUN_LEVEL" ]; then
while [ $wtime -gt 0 ]; do
wtime=`expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"

# more size.txt

the test file
their are files
The end

# grep 'the' size.txt
the test file
their are files

# grep '\<the' size.txt
the test file
their are files

# grep 'the\>' size.txt
the test file

# grep '\<the\>' size.txt
the test file

# grep '\<[Tt]he\>' size.txt
the test file

==================================================================

1,简介
使用正则表达式的一个多用途文本搜索工具.这个php?name=%C3%FC%C1%EE" οnclick="tagshow(event)" class="t_tag">命令本来是ed行编辑器中的一个php?name=%C3%FC%C1%EE" οnclick="tagshow(event)" class="t_tag">命令/过滤器:
g/re/p -- global - regular expression - print.
基本格式
grep pattern [file...]
(1)grep 搜索字符串 [filename]
(2)grep 正则表达式 [filename]
在文件中搜索所有 pattern 出现的位置, pattern 既可以是要搜索的字符串,也可以是一个正则表达式.
注意:在输入要搜索的字符串时最好使用双引号/而在模式匹配使用正则表达式时,注意使用单引号

2,grep的选项
-c 只输出匹配行的计数
-i 不区分大小写(用于单字符)
-n 显示匹配的行号
-v 不显示不包含匹配文本的所以有行
-s 不显示错误信息
-E 使用扩展正则表达式
更多的选项请查看:man grep

3,常用grep实例

(1)多个文件查询
grep "sort" *.doc #见文件名的匹配

(2)行匹配:输出匹配行的计数
grep -c "48" data.doc #输出文档中含有48字符的行数

(3)显示匹配行和行数
grep -n "48" data.doc #显示所有匹配48的行和行号

(4)显示非匹配的行
grep -vn "48" data.doc #输出所有不包含48的行

(4)显示非匹配的行
grep -vn "48" data.doc #输出所有不包含48的行

(5)大小写敏感
grep -i "ab" data.doc #输出所有含有ab或Ab的字符串的行

4, 正则表达式的应用

(1)正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
grep '[239].' data.doc #输出所有含有以2,3或9开头的,并且是两个数字的行

(2)不匹配测试
grep '^[^48]' data.doc #不匹配行首是48的行

(3)使用扩展模式匹配
grep -E '219|216' data.doc

(4) ...
这需要在实践中不断应用和总结,熟练掌握正则表达式。

5, 使用类名
可以使用国际模式匹配的类名:
[[:upper:]] [A-Z]
[[:lower:]] [a-z]
[[:digit:]] [0-9]
[[:alnum:]] [0-9a-zA-Z]
[[:space:]] 空格或tab
[[:alpha:]] [a-zA-Z]

(1)使用
grep '5[[:upper:]][[:upper:]]' data.doc #查询以5开头以两个大写字母结尾的行  


HEAD  


head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。

1.命令格式:

head [参数]... [文件]...

2.命令功能:

head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

3.命令参数:

-q 隐藏文件名

-v 显示文件名

-c<字节> 显示字节数

-n<行数> 显示的行数

4.使用实例:

实例1:显示文件的前n行

命令:

head -n 5 log2014.log

输出:

[root@localhost test]# cat log2014.log

2014-01

2014-02

2014-03

2014-04

2014-05

2014-06

2014-07

2014-08

2014-09

2014-10

2014-11

2014-12

==============================

[root@localhost test]# head -n 5 log2014.log

2014-01

2014-02

2014-03

2014-04

2014-05[root@localhost test]#

实例2:显示文件前n个字节

命令:

head -c 20 log2014.log

输出:

[root@localhost test]# head -c 20 log2014.log

2014-01

2014-02

2014

[root@localhost test]#

实例3:文件的除了最后n个字节以外的内容

命令:

head -c -32 log2014.log

输出:

[root@localhost test]# head -c -32 log2014.log

2014-01

2014-02

2014-03

2014-04

2014-05

2014-06

2014-07

2014-08

2014-09

2014-10

2014-11

2014-12[root@localhost test]#

实例4:输出文件除了最后n行的全部内容

命令:

head -n -6 log2014.log

输出:

[root@localhost test]# head -n -6 log2014.log

2014-01

2014-02

2014-03

2014-04

2014-05

2014-06

2014-07[root@localhost test]#


tail 命令详解


用途

从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。

语法

标准语法

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]

要以逆序显示行

tail [ -r ] [ -n Number ] [ File ]

描述

tail 命令从指定点开始将File 参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。Number 变量指定将多少单元写入标准输出。Number 变量的值可以是正的或负的整数。如果值的前面有+(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有-(减号),则从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有+(加号)或-(减号),那么从文件末尾指定的单元号开始读取文件。

Number 变量用于确定计数的起点的单元类型由-b、-c、-k、-m 以及-n 标志确定。如果没有指定其中的任何一个标志,那么tail 命令就会读取指定文件的最后十行,并将其写到标准输出。这与在命令行输入-n 10 是相同的。

-m 标志在单字节和双字节字符环境中提供了一致的结果。当输入是包含多字节字符的文本文件时应谨慎使用-c 标志,因为产生的输出可能不从字符边界开始。

标志

-b Number

从Number 变量表示的512 字节块位置开始读取指定文件。

-c Number

从Number 变量表示的字节位置开始读取指定文件。

-f

如果输入文件是常规文件或如果File 参数指定FIFO(先进先出),那么tail 命令不会在复制了输入文件的最后的指定单元后终止,而是继续从输入文件读取和复制额外的单元(当这些单元可用时)。如果没有指定File 参数,并且标准输入是管道,则会忽略-f 标志。tail -f 命令可用于监视另一个进程正在写入的文件的增长。

-k Number

从Number 变量表示的1KB 块位置开始读取指定文件。

-m Number

从Number 变量表示的多字节字符位置开始读取指定文件。使用该标志提供在单字节和双字节字符代码集环境中的一致结果。

-n Number

从Number 变量表示的行位置开始读取指定文件。

-r

从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式打印整个文件。如果文件大于20,480 字节,那么-r 标志只显示最后的20,480 字节。

-r 标志只有与-n 标志一起时才有效。否则,就会将其忽略。

退出状态

该命令返回下列的退出值:

0

成功完成。

>0

出现错误。

示例

要显示notes 文件的最后十行,输入:

tail notes要指定从notes 文件末尾开始读取的行数,输入:

tail -n 20 notes

要从第200 字节开始,每次显示一页notes 文件,输入:

tail -c +200 notes | pg

跟踪文件的增长,输入:

tail -f accounts

这显示accounts 文件的最后十行。tail 命令继续显示添加到accounts 文件中的行。显示会一直继续,直到您按下Ctrl-C 按键顺序来停止。

文件

/usr/bin/tail

包含tail 命令。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值