Linux命令本身总结

2019年11月06日 阅读数:628
这篇文章主要向大家介绍Linux命令本身总结,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

对于每个Linux学习者来讲,了解Linux文件系统的目录结构,是学好Linux的相当重要的一步.,深刻了解linux文件目录结构的标准和每一个目录的详细功能,对于咱们用好linux系统只管重要,下面咱们就开始了解一下linux目录结构的相关知识。php

当 在使用Linux的时候,若是您经过ls –l / 就会发现,在/下包涵不少的目录,好比etcusrvarbin ... ... 等目录,而 在这些目录中,咱们进去看看,发现也有不少的目录或文件。文件系统在Linux下看上去就象树形结构,因此咱们能够把文件系统的结构形象的称为 树形结 构。html

文 件系统的是用来组织和排列文件存取的,因此她是可见的,在Linux中,咱们能够经过ls等工具来查看其结构,在Linux系统中,咱们见到的都是树形结 构;好比操做系统安装在一个文件系统中,他表现为由/ 起始的树形结构。linux文件系统的最顶端是/,咱们称/Linuxroot,也就 是 Linux操做系统的文件系统。Linux的文件系统的入口就是/,全部的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上 级的领导者。java

因为linux是开放源代码,各大公司和团体根据linux的核心代码作各自的操做,编程。这样就形成在根下的目录的不一样。这样就形成我的不能使用他人的linux系统的PC。由于你根本不知道一些基本的配置,文件在哪里。。。这就形成了混乱。这就是FHSFilesystem Hierarchy Standard 机构诞生的缘由。该机构是linux爱好者自发的组成的一个团体,主要是是对linux作一些基本的要求,不至因而操做者换一台主机就成了linux‘文盲’。node

根 据FHS(http://www.pathname.com/fhs/)的官方文件指出, 他们的主要目的是但愿让使用者能够了解到已安装软件一般放置于 那个目录下, 因此他们但愿独立的软件开发商、操做系统制做者、以及想要维护系统的用户,都可以遵循FHS的标准。 也就是说,FHS的重点在于规范每一个 特定的目录下应该要放置什么样子的数据而已。 这样作好处很是多,由于Linux操做系统就可以在既有的面貌下(目录架构不变)发展出开发者想要的独特风 格。python

事实上,FHS是根据过去的经验一直再持续的改版的,FHS依据文件系统使用的频繁与否与是否容许使用者随意更动, 而将目录定义成为四种交互做用的形态,用表格来讲有点像底下这样:mysql


可分享的(shareable)linux

不可分享的(unshareable)ios

不变的(static)nginx

/usr (软件放置处)c++

/etc (配置文件)

/opt (第三方合力软件)(IBM)( WebSphere)

/boot (开机与核心档)

可变更的(variable)

/var/mail (使用者邮件信箱)

/var/run (程序相关)

/var/spool/news (新闻组)

/var/lock (程序相关)

四中类型:

1. 可分享的:

能够分享给其余系统挂载使用的目录,因此包括执行文件与用户的邮件等数据, 是可以分享给网络上其余主机挂载用的目录;

2. 不可分享的:

本身机器上面运做的装置文件或者是与程序有关的socket文件等, 因为仅与自身机器有关,因此固然就不适合分享给其余主机了。

3. 不变的:

有些数据是不会常常变更的,跟随着而不变更。 例如函式库、文件说明文件、系统管理员所管理的主机服务配置文件等等;

4. 可变更的:

常常改变的数据,例如登陆文件、通常用户可自行收受的新闻组等。

事实上,FHS针对目录树架构仅定义出三层目录底下应该放置什么数据而已,分别是底下这三个目录的定义:

/ (root, 根目录):与开机系统有关;

/usr (unix software resource):与软件安装/执行有关;

/var (variable):与系统运做过程有关。

. 根目录 (/) 的意义与内容:

根 目录是整个系统最重要的一个目录,由于不但全部的目录都是由根目录衍生出来的, 同时根目录也与开机/还原/系统修复等动做有关。 因为系统开机时须要特 定的开机软件、核心文件、开机所需程序、 函式库等等文件数据,若系统出现错误时,根目录也必需要包含有可以修复文件系统的程序才行。 由于根目录是这么 的重要,因此在FHS的要求方面,他但愿根目录不要放在很是大的分区, 由于越大的分区内你会放入越多的数据,如此一来根目录所在分区就可能会有较多发生 错误的机会。

所以FHS标准建议:根目录(/)所在分区应该越小越好, 且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。 如此不但效能较佳,根目录所在的文件系统也较不容易发生问题。说白了,就是根目录和WindowsC盘一个样

根据以上缘由,FHS认为根目录(/)下应该包含以下子目录:

目录

应放置档案内容

/bin

系统有不少放置执行档的目录,但/bin比较特殊。由于/bin放置的是在单人维护模式下还可以被操做的指令。在/bin底下的指令能够被root与通常账号所使用,主要有:cat,chmod(修改权限), chown, date, mv, mkdir, cp, bash等等经常使用的指令。

/boot

主要放置开机会使用到的档案,包括Linux核心档案以及开机选单与开机所需设定档等等。Linux kernel经常使用的档名为:vmlinuz ,若是使用的是grub这个cd 开机管理程式,则还会存在/boot/grub/这个目录

/dev

Linux系统上,任何装置与周边设备都是以档案的型态存在于这个目录当中。 只要经过存取这个目录下的某个档案,就等于存取某个装置。比要重要的档案有 /dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等等

/etc

系 统主要的设定档几乎都放置在这个目录内,例如人员的账号密码档、各类服务的启始档等等。 通常来讲,这个目录下的各档案属性是可让通常使用者查阅的,但 是只有root有权力修改。 FHS建议不要放置可执行档(binary)在这个目录中。 比较重要的档案有:/etc/inittab, /etc /init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等 等。 另外,其下重要的目录有:/etc/init.d/ :全部服务的预设启动script都是放在这里的,例如要启动或者关闭iptables的 话: /etc/init.d/iptables start/etc/init.d/ iptables stop

/etc/xinetd.d/ :这就是所谓的super daemon管理的各项服务的设定档目录。

/etc/X11/ :与X Window有关的各类设定档都在这里,尤为是xorg.confXF86Config这两个X Server的设定档。

/home

这是系统预设的使用者家目录(home directory)。 在你新增一个通常使用者账号时,预设的使用者家目录都会规范到这里来。比较重要的是,家目录有两种代号:
~
:表明当前使用者的家目录,而 ~guest:则表明用户名为guest的家目录

/lib

系 统的函式库很是的多,而/lib放置的则是在开机时会用到的函式库,以及在/bin/sbin底下的指令会呼叫的函式库而已 。 什么是函式库呢?妳可 以将他想成是外挂,某些指令必需要有这些外挂才可以顺利完成程式的执行之意。 尤为重要的是/lib/modules/这个目录,由于该目录会放置核心相 关的模组(驱动程式)

/media

media是媒体的英文,顾名思义,这个/media底下放置的就是可移除的装置 包括软碟、光碟、DVD等等装置都暂时挂载于此。 常见的档名有:/media/floppy, /media/cdrom等等。

/mnt

若是妳想要暂时挂载某些额外的装置,通常建议妳能够放置到这个目录中。在古早时候,这个目录的用途与/media相同啦 只是有了/media以后,这个目录就用来暂时挂载用了。

/opt

这 个是给第三方合力软体放置的目录 。 什么是第三方合力软体啊?举例来讲,KDE这个桌面管理系统是一个独立的计画,不过他能够安装到Linux系统中, 所以KDE的软体就建议放置到此目录下了。 另外,若是妳想要自行安装额外的软体(非本来的distribution提供的),那么也可以将你的软体安装 到这里来。 不过,之前的Linux系统中,咱们仍是习惯放置在/usr/local目录下

/root

系统管理员(root)的家目录。 之因此放在这里,是由于若是进入单人维护模式而仅挂载根目录时,该目录就可以拥有root的家目录,因此咱们会但愿root的家目录与根目录放置在同一个分区中。

/sbin

Linux 有很是多指令是用来设定系统环境的,这些指令只有root才可以利用来设定系统,其余使用者最多只能用来查询而已。放在/sbin底下的为开机过程当中所需 要的,里面包括了开机、修复、还原系统所须要的指令。至于某些伺服器软体程式,通常则放置到/usr/sbin/当中。至于本机自行安装的软体所产生的系 统执行档(system binary),则放置到/usr/local/sbin/当中了。常见的指令包 括:fdisk, fsck, ifconfig, init, mkfs等等。cd

/srv

srv能够视为service的缩写,是一些网路服务启动以后,这些服务所须要取用的资料目录。 常见的服务例如WWW, FTP等等。 举例来讲,WWW伺服器须要的网页资料就能够放置在/srv/www/里面。呵呵,看来平时咱们编写的代码应该放到这里了。

/tmp

这是让通常使用者或者是正在执行的程序暂时放置档案的地方。这个目录是任何人都可以存取的,因此你须要按期的清理一下。固然,重要资料不可放置在此目录啊 由于FHS甚至建议在开机时,应该要将/tmp下的资料都删除


事实上FHS针对根目录所定义的标准就仅限于上表,不过仍旧有些目录也须要咱们了解一下,具体以下:

目录

应放置文件内容

/lost+found

这 个目录是使用标准的ext2/ext3档案系统格式才会产生的一个目录,目的在于当档案系统发生错误时,将一些遗失的片断放置到这个目录下。 这个目录通 常会在分割槽的最顶层存在,例如你加装一个硬盘于/disk中,那在这个系统下就会自动产生一个这样的目录/disk/lost+found

/proc

这个目录自己是一个虚拟文件系统(virtual filesystem) 他放置的资料都是在内存当中,例如系统核心、行程资讯(process)(是进程吗?)、周边装置的状态及网络状态等等。由于这个目录下的资料都是在记忆体(内存)当中,因此自己不占任何硬盘空间比较重要的档案(目录)例如: /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虚拟内存吗[guest]

/sys

这个目录其实跟/proc很是相似,也是一个虚拟的档案系统,主要也是记录与核心相关的资讯。 包括目前已载入的核心模组与核心侦测到的硬体装置资讯等等。 这个目录一样不占硬盘容量


除了这些目录的内容以外,另外要注意的是,由于根目录与开机有关,开机过程当中仅有根目录会被挂载, 其余分区则是在开机完成以后才会持续的进行挂载的行为。就是由于如此,所以根目录下与开机过程有关的目录, 就不可以与根目录放到不一样的分区去那哪些目录不可与根目录分开呢?有底下这些:

/etc:配置文件

/bin:重要执行档

/dev:所须要的装置文件

/lib:执行档所需的函式库与核心所需的模块

/sbin:重要的系统执行文件

这五个目录千万不可与根目录分开在不一样的分区请背下来啊 

. /usr 的意义与内容:

依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变更的(shareable, static), 若是你知道如何透过网络进行分区的挂载(例如在服务器篇会谈到的NFS服务器),那么/usr确实能够分享给局域网络内的其余主机来使用喔。

/usr 不是user的缩写,其实usrUnix Software Resource的缩写, 也就是Unix操做系统软件资源所放置的目录,而不是用户的数据啦。这点要注意。 FHS建议全部软件开发者,应该将他们的数据合理的分别放置到这个目录下的次目录,而不要自行创建该软件本身独立的目录。

因 为是全部系统默认的软件(distribution发布者提供的软件)都会放置到/usr底下,所以这个目录有点相似Windows 系统的 C:\Windows\ + C:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。 通常来 说,/usr的次目录建议有底下这些:

目录

应放置文件内容

/usr/X11R6/ 

X Window System重要数据所放置的目录,之因此取名为X11R6是由于最后的X版本为第11版,且该版的第6次释出之意。 

/usr/bin/ 

绝大部分的用户可以使用指令都放在这里请注意到他与/bin的不一样之处。(是否与开机过程有关) 

/usr/include/ 

c/c++等程序语言的档头(header)与包含档(include)放置处,当咱们以tarball方式 (*.tar.gz 的方式安装软件)安装某些数据时,会使用到里头的许多包含档 

/usr/lib/ 

包 含各应用软件的函式库、目标文件(object file),以及不被通常使用者惯用的执行档或脚本(script)。 某些软件会提供一些特殊的指令来 进行服务器的设定,这些指令也不会常常被系统管理员操做, 那就会被摆放到这个目录下啦。要注意的是,若是你使用的是X86_64Linux系统, 那 可能会有/usr/lib64/目录产生 

/usr/local/ 

统 管理员在本机自行安装本身下载的软件(distribution默认提供者),建议安装到此目录, 这样会比较便于管理。举例来讲,你的 distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版, 此时你能够将新版软件安装于/usr/local/目录下,可与原先的 旧版软件有分别啦 你能够自行到/usr/local去看看,该目录下也是具备bin, etc, include, lib...的次目录 

/usr/sbin/ 

非系统正常运做所须要的系统指令。最多见的就是某些网络服务器软件的服务指令(daemon) 

/usr/share/ 

放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构都可读取的数据, 由于几乎都是文本文件嘛在此目录下常见的还有这些次目录:/usr/share/man:联机帮助文件

/usr/share/doc:软件杂项的文件说明

/usr/share/zoneinfo:与时区有关的时区文件

/usr/src/ 

通常原始码建议放置到这里,srcsource的意思。至于核心原始码则建议放置到/usr/src/linux/目录下。 

. /var 的意义与内容:

如 果/usr是安装时会占用较大硬盘容量的目录,那么/var就是在系统运做后才会渐渐占用硬盘容量的目录。 由于/var目录主要针对常态性变更的文件, 包括缓存(cache)、登陆档(log file)以及某些软件运做所产生的文件, 包括程序文件(lock file, run file),或者例 如MySQL数据库的文件等等。常见的次目录有:

目录

应放置文件内容

/var/cache/

应用程序自己运做过程当中会产生的一些暂存档

/var/lib/

程序自己执行的过程当中,须要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。 举例来讲,MySQL的数据库放置到/var/lib/mysql/rpm的数据库则放到/var/lib/rpm

/var/lock/

某 些装置或者是文件资源一次只能被一个应用程序所使用,若是同时有两个程序使用该装置时, 就可能产生一些错误的情况,所以就得要将该装置上锁 (lock),以确保该装置只会给单一软件所使用。 举例来讲,刻录机正在刻录一块光盘,你想一下,会不会有两我的同时在使用一个刻录机烧片? 若是两个 人同时刻录,那片子写入的是谁的数据?因此当第一我的在刻录时该刻录机就会被上锁, 第二我的就得要该装置被解除锁定(就是前一我的用完了)才可以继续使 用

/var/log/

很是重要这是登陆文件放置的目录里面比较重要的文件如/var/log/messages, /var/log/wtmp(记录登入者的信息)等。

/var/mail/

放置我的电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中一般这两个目录是互为连接文件

/var/run/

某些程序或者是服务启动后,会将他们的PID放置在这个目录下

/var/spool/

这个目录一般放置一些队列数据,所谓的队列就是排队等待其余程序使用的数据 这 些数据被使用后一般都会被删除。举例来讲,系统收到新信会放置到/var/spool/mail/中, 但使用者收下该信件后该封信原则上就会被删除。信 件若是暂时寄不出去会被放到/var/spool/mqueue/中, 等到被送出后就被删除。若是是工做排程数据(crontab),就会被放置到 /var/spool/cron/目录中

因为FHS仅是定义出最上层(/)及次层(/usr, /var)的目录内容应该要放置的文件或目录数据, 所以,在其余次目录层级内,就能够随开发者自行来配置了

. 目录树(directory tree) :

Linux底下,全部的文件与目录都是由根目录开始的。那是全部目录与文件的源头, 而后再一个一个的分支下来,所以,咱们也称这种目录配置方式为:目录树(directory tree), 这个目录树的主要特性有:

目录树的启始点为根目录 (/, root)

每个目录不止能使用本地端的 partition 的文件系统,也能够使用网络上的 filesystem 。举例来讲, 能够利用 Network File System (NFS) 服务器挂载某特定目录等。

每个文件在此目录树中的文件名(包含完整路径)都是独一无二的。

若是咱们将整个目录树以图的方法来显示,而且将较为重要的文件数据列出来的话,那么目录树架构就以下图所示:

 

. 绝对路径与相对路径

除了须要特别注意的FHS目录配置外,在文件名部分咱们也要特别注意。由于根据档名写法的不一样,也可将所谓的路径(path)定义为绝对路径(absolute)与相对路径(relative)。 这两种文件名/路径的写法依据是这样的:

绝对路径:

由根目录(/)开始写起的文件名或目录名称, 例如 /home/dmtsai/.bashrc

相对路径:

相对于目前路径的文件名写法。 例如 ./home/dmtsai http://www.cnblogs.com/home/dmtsai/ 等等。反正开头不是 / 就属于相对路径的写法cd

而你必需要了解,相对路径是以你当前所在路径的相对位置来表示的。举例来讲,你目前在 /home 这个目录下, 若是想要进入 /var/log 这个目录时,能够怎么写呢?

cd /var/log (absolute)

cd ../var/log (relative)

由于你在 /home 底下,因此要回到上一层 (../) 以后,才能继续往 /var 来移动的,特别注意这两个特殊的目录:

. :表明当前的目录,也能够使用 ./ 来表示;

.. :表明上一层目录,也能够 ../ 来表明。

这个 . .. 目录概念是很重要的,你经常会看到 cd .. ./command 之类的指令下达方式, 就是表明上一层与目前所在目录的工做状态。

实例1:如何先进入/var/spool/mail/目录,再进入到/var/spool/cron/目录内?

命令

cd /var/spool/mail

cd ../cron

说明:

由 于/var/spool/mail/var/spool/cron是一样在/var/spool/目录中。如此就不须要在由根目录开始写起了。这个相对 路径是很是有帮助的,尤为对于某些软件开发商来讲。 通常来讲,软件开发商会将数据放置到/usr/local/里面的各相对目录。 但若是用户想要安装 到不一样目录呢?就得要使用相对路径。

实例2:网络文件经常提到相似./run.sh之类的数据,这个指令的意义为什么?

说明:

因为指令的执行须要变量的支持,若你的执行文件放置在本目录,而且本目录并不是正规的执行文件目录(/bin, /usr/bin等为正规),此时要执行指令就得要严格指定该执行档。./表明本目录的意思,因此./run.sh表明执行本目录下, 名为run.sh的文件。

  1. Linux文件类型与扩展名

Linux文件类型和Linux文件的文件名所表明的意义是两个不一样的概念。咱们经过通常应用程序而建立的好比file.txtfile.tar.gz ,这些文件虽然要用不一样的程序来打开,但放在Linux文件类型中衡量的话,大可能是常规文件(也被称为普通文件)。

. 文件类型

Linux文件类型常见的有:普通文件、目录文件、字符设备文件块设备文件、符号连接文件等如今咱们进行一个简要的说明。

1. 普通文件 

我 们用 ls -lh 来查看某个文件的属性,能够看到有相似-rwxrwxrwx,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文 件。这些文件通常是用一些相关的应用程序建立,好比图像工具、文档工具、归档工具... .... cp工具等。这类文件的删除方式是用rm 命 令。 另外,依照文件的内容,又大略能够分为:

1>. 纯文本档(ASCII)

这是Linux系统中最多的一种文件类型,称为纯文本档是由于内容为咱们人类能够直接读到的数据,例如数字、字母等等。 几乎只要咱们能够用来作为设定的文件都属于这一种文件类型。 举例来讲,你能够用命令:cat ~/.bashrc看到该文件的内容。 (cat 是将一个文件内容读出来的指令).

2>. 二进制文件(binary)

Linux系统其实仅认识且能够执行二进制文件(binary file)Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的文件。 刚刚使用cat就是一个binary file

3>. 数据格式文件(data) 

有些程序在运做的过程中会读取某些特定格式的文件,那些特定格式的文件能够被称为数据文件 (data file)。举例来讲,咱们的Linux在使用者登时,都会将登陆的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他可以透过last这个指令读出来! 可是使用cat时,会读出乱码~由于他是属于一种特殊格式的文件?

2. 目录文件

当 咱们在某个目录下执行,看到有相似 drwxr-xr-x ,这样的文件就是目录,目录在Linux是一个比较特殊的文件。注意它的第一个字符是d。建立 目录的命令能够用 mkdir 命令,或cp命令,cp能够把一个目录复制为另外一个目录。删除用rm rmdir命令。

3. 字符设备或块设备文件 

如时您进入/dev目录,列一下文件,会看到相似以下的:

[root@localhost ~]# ls -al /dev/tty

crw-rw-rw- 1 root tty 5, 0 11-03 15:11 /dev/tty

[root@localhost ~]# ls -la /dev/sda1

brw-r----- 1 root disk 8, 1 11-03 07:11 /dev/sda1

咱们看到/dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件。好比猫等串口设备。咱们看到 /dev/sda1 的属性是 brw-r----- ,注意前面的第一个字符是b,这表示块设备,好比硬盘,光驱等设备。

这个种类的文件,是用mknode来建立,用rm来删除。目前在最新的Linux发行版本中,咱们通常不用本身来建立设备文件。由于这些文件是和内核相关联的。

与系统周边及储存等相关的一些文件, 一般都集中在/dev这个目录之下!一般又分为两种:

区块(block)设备档 :

就是一些储存数据, 以提供系统随机存取的接口设备,举例来讲,硬盘与软盘等就是啦! 你能够随机的在硬盘的不一样区块读写,这种装置就是成组设备!你能够自行查一下/dev/sda看看, 会发现第一个属性为[ b ]

字符(character)设备文件:

亦便是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特点就是一次性读取的,不可以截断输出。 举例来讲,你不可能让鼠标跳到另外一个画面,而是滑动到另外一个地方!第一个属性为 [ c ]

4. 数据接口文件(sockets)

数据接口文件(或者:套接口文件),这种类型的文件一般被用在网络上的数据承接了。咱们能够启动一个程序来监听客户端的要求, 而客户端就能够透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。

例如:当咱们启动MySQL服务器时,会产生一个mysql.sock的文件。

[root@localhost ~]# ls -lh /var/lib/mysql/mysql.sock 

srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock

注意这个文件的属性的第一个字符是 s

5. 符号连接文件 

当 咱们查看文件属性时,会看到有相似 lrwxrwxrwx,注意第一个字符是l,这类文件是连接文件。是经过ln -s 源文件名 新文件名 。上面是一 个例子,表示setup.loginstall.log的软连接文件。怎么理解呢?这和Windows操做系统中的快捷方式有点类似。

符号连接文件的建立方法举例:

[root@localhost test]# ls -lh log2012.log

-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log

[root@localhost test]# ln -s log2012.log  linklog.log

[root@localhost test]# ls -lh *.log

lrwxrwxrwx 1 root root   11 11-22 06:58 linklog.log -> log2012.log

-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log

6. 数据输送文件(FIFO,pipe:

FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所形成的错误问题。 FIFOfirst-in-first-out的缩写。第一个属性为[p]

. Linux文件扩展名

1. 扩展名类型

基 本上,Linux的文件是没有所谓的扩展名的,一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与档名根本一点关系也没有。这个观念跟 Windows的状况不相同喔!在Windows底下, 能被执行的文件扩展名一般是 .com .exe .bat等等,而在Linux底下,只要你的 权限当中具备x的话,例如[ -rwx-r-xr-x ] 即表明这个文件能够被执行



过,能够被执行跟能够执行成功是不同的~举例来讲,在root家目录下的install.log 是一个纯文本档,若是经由修改权限成 为 -rwxrwxrwx 后,这个文件可以真的执行成功吗? 固然不行~由于他的内容根本就没有能够执行的数据。因此说,这个x表明这个文件具备可执行 的能力, 可是能不能执行成功,固然就得要看该文件的内容.

虽然如此,不过咱们仍然但愿能够藉由扩展名来了解该文件是什么东西,因此,一般咱们仍是会以适当的扩展名来表示该文件是什么种类的。底下有数种经常使用的扩展名:

*.sh : 脚本或批处理文件 (scripts),由于批处理文件为使用shell写成的,因此扩展名就编成 .sh

*Z, *.tar, *.tar.gz, *.zip, *.tgz: 通过打包的压缩文件。这是由于压缩软件分别为 gunzip, tar 等等的,因为不一样的压缩软件,而取其相关的扩展名!

*.html, *.php:网页相关文件,分别表明 HTML 语法与 PHP 语法的网页文件.html 的文件可以使用网页浏览器来直接开启,至于 .php 的文件, 则能够透过 client 端的浏览器来 server 端浏览,以获得运算后的网页结果

基本上,Linux系统上的文件名真的只是让你了解该文件可能的用途而已,真正的执行与否仍然须要权限的规范才行例如虽然有一个文件为可执行文件,如常见的/bin/ls这个显示文件属性的指令,不过,若是这个文件的权限被修改为没法执行时,那么ls就变成不能执行

上述的这种问题最常发生在文件传送的过程当中。例如你在网络上下载一个可执行文件,可是恰恰在你的 Linux系统中就是没法执行!呵呵!那么就是可能文件的属性被改变了不要怀疑,从网络上传送到你的 Linux系统中,文件的属性与权限确实是会被改变的

2. Linux文件

长度限制:

Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件名长度限制为:

单一文件或目录的最大允许文件名为 255 个字符

包含完整路径名称及目录 (/) 之完整档名为 4096 个字符

是至关长的档名!咱们但愿Linux的文件名能够一看就知道该文件在干吗的, 因此档名一般是很长很长

3. Linux文件名的字符的限制:

因为Linux在文字接口下的一些指令操做关系,通常来讲,你在设定Linux底下的文件名时, 最好能够避免一些特殊字符比较好!例如底下这些:

* ? > < ; & ! [ ] | \ ' " ` ( ) { }

由于这些符号在文字接口下,是有特殊意义的另外,文件名的开头为小数点.时, 表明这个文件为隐藏文件!同时,因为指令下达当中,经常会使用到 -option 之类的选项, 因此你最好也避免将文件档名的开头以 - + 来命名

Linux中的目录

路径:也就是linux中的目录(文件夹)有绝对路径和相对路径
根目录:/
用户主目录(home directory):位于/home目录下,用户登陆时
工做目录(working directory):当前目录

当前目录查看命令:pwd (print working directory)
当前目录:./
当前目录的上一级目录:../..
返回到上一级目录:cd ..

进入当前目录下的dirfile目录:cd dirfile
cd ~ :
进入用户主目录(帐号所在目录)  或者直接cd回车
cd - :(
回到先前的目录

3.查看当前目录

格式:pwd

功能:pwd (print working directory),查看当前目录.

经常使用选项说明:

【例】:查看当前目录

 

[root@localhost rootfile]# pwd

/home/rootfile

5.显示目录内容

格式:ls  [选项]  [文件目录]

功能:显示指定目录中的文件和了目录信息,当不指定目录时,显示当前目录下的文件和子目录信息

经常使用选项说明:

-a  显示全部文件和子目录,包括隐藏文件和主目录

-l  显示文件和子目录的详细信息,包括文件类型、权限、全部者和所属群组、文件大小、最后修改时间、文件名

-d  若是参数是目录,则只显示目录信息,而不显示其中所包含的文件信息

-t  按时间顺序显示

-R  不只显示指定目录下的文件和子目录信息,并且还递归地显示子目录下的文件和子目录信息

 【例】:

范例一:将目录下面的文件都列出来(含属性与隐藏文件)

[root@dsetl tmp]# ls -al

drwx------ 2 fex 602 4096 Jan 9 11:41 keyring-XoSvfl

范例二:完整的显示文件的修改时间

[root@dsetl tmp]# ls -al --full-time

rwx------ 2 fex 602 4096 2014-01-09 11:41:48.000000000 +0800 .esd-602

建立和查看文件内容

cat命令

cat命令的用途是链接文件或标准输入并打印。这个命令经常使用来显示文件内容,或者将几个文件链接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用。 

1命令格式:

cat [选项] [文件]...

2命令功能:

cat主要有三大功能:

1.一次显示整个文件:cat filename

2.从键盘建立一个文件:cat > filename 只能建立新文件,不能编辑已有文件.

3.将几个文件合并为一个文件:cat file1 file2 > file

3命令参数:

-A, --show-all 等价于 -vET

-b, --number-nonblank 对非空输出行编号

-e 等价于 -vE

-E, --show-ends 在每行结束处显示 $

-n, --number 对输出的全部行编号,1开始对全部输出的行数编号

-s, --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行

-t -vT 等价

-T, --show-tabs 将跳格字符显示为 ^I

-u (被忽略)

-v, --show-nonprinting 使用 ^ M- 引用,除了 LFD TAB 以外


经常使用选项说明:

【例】:读取rootfileTest.javafile中的文件内容

Cd etc

查看/etc/ issue目录下的内容。

 [dsuser@dsetl etc]$ find issue

issue

[dsuser@dsetl etc]$ find *issue*

issue

issue.net

[dsuser@dsetl etc]$ cat issue --查看/etc/ issue目录下的内容

Red Hat Enterprise Linux Server release 6.4 (Santiago)

Kernel \r on an \m


[dsuser@dsetl etc]$ cat -n issue –显示行号

1 Red Hat Enterprise Linux Server release 6.4 (Santiago)

2 Kernel \r on an \m

3

[dsuser@dsetl etc]$

cat: invalid option -- 'a'

Try `cat --help' for more information.

[dsuser@dsetl etc]$ cat -A issue

Red Hat Enterprise Linux Server release 6.4 (Santiago)$

Kernel \r on an \m$

【例】:查看内核:

1.[root@dsetl /]# cat /etc/issue

Red Hat Enterprise Linux Server release 6.4 (Santiago)

2.cat /etc/lsb-release

LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch

3.[root@dsetl /]# cat /proc/version

Linux version 2.6.32-358.el6.x86_64 (mockbuild@x86-022.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Tue Jan 29 11:47:41 EST 2013



实例一:把issue1的文件内容加上行号后输入 issue2这个文件里

命令:

[root@dsetl lp]# cp /etc/issue .

[root@dsetl lp]# vi issue

[root@dsetl lp]# mv issue issue1

[root@dsetl lp]# vi issue2

[root@dsetl lp]# cat issue1

a

b

c

d

e

f

g

h

i

j

k

l

[root@dsetl lp]# cat issue2

p

q

z

x

v

b

n

n

输出:

[root@dsetl lp]# cat -n issue1 issue2

1 a

2 b

3 c

4 d

5 e

6 f

7 g

8 h

9 i

10 j

11 k

12 l

13 p

14 q

15 z

16 x

17 v

18 b

19 n

20 n

说明:

实例二:把 issue1issue2的文件内容加上行号(空白行不加)以后将内容合并到 issue3 里。

命令:

[root@dsetl lp]# vi issue1


a

b

c


d

e

f

g

h

i

j

k

[root@dsetl lp]# cat -b issue1 issue2 > issue3

[root@dsetl lp]# cat issue3

1 a

2 b

3 c


4 d

5 e

6 f

7 g

8 h

9 i

10 j

11 k

12 l

13 p

14 q

15 z

16 x

17 v

18 b

19 n

20 n实例三:把 issue1的文件内容加上行号后输入 issue2这个文件里

命令:

输出:

[root@localhost test]# cat issue1

[root@dsetl lp]# cat -n issue1 > issue2

[root@dsetl lp]# cat issue2

a

b

c


d

e

f

g

h

i

j

k

l [root@localhost test]#


Uname:

Uname –a 用来获取电脑和操做系统的相关信息。

内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操做系统名称

 

3命令参数:

-m或–machine 显示主机的硬件(CPU)


-n
-nodename 显示主机在网络节点上的名称或主机名称
-r
或–release 显示linux操做系统内核版本号
-s
或–sysname 显示linux内核名称
-v
显示显示操做系统是第几个 version 版本
-p
显示处理器类型或unknown
-i
显示硬件平台类型或unknown
-o
显示操做系统名
–help
得到帮助信息
–version
  显示uname版本信息

实例1

--依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操做系统名称


[root@dsetl /]# uname –a

Linux --显示内核名称(Linux

dsetl --显示主机在网络节点上的名称或主机名称 (dsetl

2.6.32-358.el6.x86_64 -显示主机的硬件(CPU)

x86_64

#1 SMP Tue Jan 29 11:47:41 EST 2013 --显示操做系统是第几个 version 版本

x86_64 x86_64 x86_64

GNU/Linux --显示操做系统名 (GNU/Linux


[root@dsetl /]# uname –r --linux操做系统的内核版本号(2.6.32-358.el6.x86_64

[root@dsetl /]# uname –o --显示操做系统名 (GNU/Linux
[root@dsetl /]# uname –s --
显示内核名称(Linux

[root@dsetl /]# uname –m --显示主机的硬件(CPU)

x86_64

[root@dsetl /]# uname –n --显示主机在网络节点上的名称或主机名称 (dsetl

[root@dsetl /]# uname –v --显示操做系统是第几个 version 版本( #1 SMP Tue Jan 29 11:47:41 EST 2013

Tac命令:

反向显示

more命令 翻页查看

more命令,功能相似 cat cat命令整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,并且还有搜寻字串的功能 more命令从前向后读取文件,所以在启动时就加载整个文件

格式:more  [选项]  filename

功能:依次读取filename中的内容,该命令与cat的不一样是能够逐屏往下翻页显示,按q退出。

经常使用选项说明:

+n 从笫n行开始显示

-n 定义屏幕大小为n

-p  显示下一屏以前先清屏

-s  文件中连续的空白行压缩成一个空白行显示

-l 忽略Ctrl+l(换页)字符


查看man.config


命令:More /etc/ man.config

# If no catdir is given, it is assumed to be equal to the mandir

# (so that this dir has both man1 etc. and cat1 etc. subdirs).

# This is the traditional Unix setup.

# Certain versions of the FSSTND recommend putting formatted versions

# of /usr/.../man/manx/page.x into /var/catman/.../catx/page.x.

# The keyword FSSTND will cause this behaviour.

# Certain versions of the FHS recommend putting formatted versions of

# /usr/.../share/man/[locale/]manx/page.x into

# /var/cache/man/.../[locale/]catx/page.x.

# The keyword FHS will cause this behaviour (and overrides FSSTND).

# Explicitly given catdirs override.

#

# FSSTND

FHS

#

# This file is also read by man in order to find how to call nroff, less, etc.

--More--(27%)

1)空格键:表示向下翻一页

2enter键表示向下翻一行。

 实例1显示文件中从第3行起的内容

命令:

more +3 log2012.log

输出:

[root@localhost test]# cat log2012.log 

2012-01

2012-02

2012-03

2012-04-day1

2012-04-day2

2012-04-day3

======[root@localhost test]# more +3 log2012.log 

2012-03

2012-04-day1

2012-04-day2

2012-04-day3

======[root@localhost test]#

实例2从文件中查找第一个出现"day3"字符串的行,并从该处前两行开始显示输出 

命令:

 more +/day3 log2012.log

输出:

[root@localhost test]# more +/day3 log2012.log 

...skipping

2012-04-day1

2012-04-day2

2012-04-day3

2012-05

2012-05-day1

======[root@localhost test]#

实例3:设定每屏显示行数 

命令:

more -5 log2012.log

输出:

[root@localhost test]# more -5 log2012.log 

2012-01

2012-02

2012-03

2012-04-day1

2012-04-day2

说明:

以下图所示,最下面显示了该屏展现的内容占文件总行数的比例,按 Ctrl+F 或者 空格键 将会显示下一屏5条内容,百分比也会跟着变化。


实例4列一个目录下的文件,因为内容太多,咱们应该学会用more来分页显示。这得和管道 | 结合起来

命令:

ls -l | more -5

输出:

[root@localhost test]#  ls -l  | more -5

总计 36

-rw-r--r-- 1 root root  308 11-01 16:49 log2012.log

-rw-r--r-- 1 root root   33 10-28 16:54 log2013.log

-rw-r--r-- 1 root root  127 10-28 16:51 log2014.log

lrwxrwxrwx 1 root root    7 10-28 15:18 log_link.log -> log.log


说明:

每页显示5个文件信息,按 Ctrl+F 或者 空格键 将会显示下5条文件信息。



less命令 翻页查看

格式:less  [选项]  filename

功能:依次读取filename中的内容,该命令与more的不一样是不只能够向下翻页,还能够向上翻页,使用上下键、Enter、空格、pageDownpageUp能够实现先后翻页,按q退出。

经常使用选项说明:

 命令:less /etc/ man.config

实例2ps查看进程信息并经过less分页显示 

命令:

ps -ef |less

   输出:

                

实例3:查看命令历史使用记录并经过less分页显示

命令:

history | less

输出:

         [root@localhost test]# history | less

    22  scp -r tomcat6.0.32 root@192.168.120.203:/opt/soft

    23  cd ..

    24  scp -r web root@192.168.120.203:/opt/

    25  cd soft

    26  ls

    27  scp -r jdk1.6.0_16/ root@192.168.120.203:/opt/soft

    28  clear

    29  vim /etc/profile

    30  vim /etc/profile

    31  cd tomcat6.0.32/bin/

    32  ls

    33  ./shutdown.sh

    34  ./startup.sh

    35  vim startup.sh

   36  ls

    37  echo $JAVA_HOME

    38  java

    39  ls

    40  ls

    41  clear

    42  cd /opt

    43  ls

    44  cp apache-tomcat-6.0.32.tar.gz soft/

    45  ls

    46  rm -f apache-tomcat-6.0.32.tar.gz 

    47  ls

    48  cd soft

    49  ls

    50  tar -vzf apache-tomcat-6.0.32.tar.gz 

    51  tar -vzfx apache-tomcat-6.0.32.tar.gz 

    52  tar -zxvf apache-tomcat-6.0.32.tar.gz 

    53  ls

    54  cd apache-tomcat-6.0.32

    55  ls

    56  cd ..

    57  mv apache-tomcat-6.0.32 tomcat6.0.32

    58  ls

    59  cd tomcat6.0.32/

    60  ls

实例5浏览多个文件 

命令:

Less log2013.log log2014.log

输出:


    说明:

输入 :n后,切换到 log2014.log

输入 :p 后,切换到log2013.log

5附加备注

1.全屏导航

ctrl + F - 向前移动一屏

ctrl + B - 向后移动一屏

ctrl + D - 向前移动半屏

ctrl + U - 向后移动半屏

 

2.单行导航

j - 向前移动一行

k - 向后移动一行

 

3.其它导航

G - 移动到最后一行

g - 移动到第一行

q / ZZ - 退出 less 命令zz

 

4.其它有用的命令

v - 使用配置的编辑器编辑当前文件

h - 显示 less 的帮助文档

&pattern - 仅显示匹配模式的行,而不是整个文件

 

5.标记导航

当使用 less 查看大文件时,能够在任何一个位置做标记,能够经过命令导航到标有特定标记的文本位置:

ma - 使用 a 标记文本的当前位置

'a - 导航到标记 a


head命令

格式:head  [选项]  filename

功能:显示文件的头几行

经常使用选项说明:

-n  显示文件的前n行,若是没有n值,默认为10

-c<字节> 显示字节数

命令:Head -2  /etc/ man.config –显示前两行

Head –n 2  /etc/ man.config –显示前两行

【例】

文件太大,取文件的部分数据:

head -100000 /home/inputfile/data/inputfile/CORE/RUCCDTA/20131231/CORE_SCECA_20131231_INIT.DATA > CORE_SCECA_20131231_INIT.DATA

实例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]#

>>>重定向命令:

  • 重定向命令,能够结合headls等使用。

  • head -10 file1>file2 :把file1的前10条记录保存到file2文件。

  • head -10 file1>>file2 :把file1的前10条记录追加保存到file2文件。

  • cat file1 file2>file3 :将file1file2合并成一个文件file3.

[root@dsetl lp]# head -6 man.config>man.test.config

[root@dsetl lp]# cat man.config > man.test.config

    1. tail命令

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

格式:tail  [选项]  filename

2.命令功能:

用于显示指定文件末尾内容,不指定文件时,做为输入信息进行处理。经常使用查看日志文件

经常使用选项说明:

+n  从第n行开始显示

-n  显示文件的最后n行,若是没有n值,默认为最后10

-f 循环读取

实例1:显示文件末尾内容

命令:

tail -n 5 log2014.log

输出:

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

2014-09

2014-10

2014-11

2014-12

==============================[root@localhost test]#

说明:

显示文件最后5行内容


实例2:循环查看文件内容

命令:

tail -f test.log

输出:

[root@localhost ~]# ping 192.168.120.204 > test.Log &

[1] 11891[root@localhost ~]# tail -f test.log 

PING 192.168.120.204 (192.168.120.204) 56(84) bytes of data.

64 bytes from 192.168.120.204: icmp_seq=1 ttl=64 time=0.038 ms

64 bytes from 192.168.120.204: icmp_seq=2 ttl=64 time=0.036 ms

64 bytes from 192.168.120.204: icmp_seq=3 ttl=64 time=0.033 ms

64 bytes from 192.168.120.204: icmp_seq=4 ttl=64 time=0.027 ms

64 bytes from 192.168.120.204: icmp_seq=5 ttl=64 time=0.032 ms

64 bytes from 192.168.120.204: icmp_seq=6 ttl=64 time=0.026 ms

64 bytes from 192.168.120.204: icmp_seq=7 ttl=64 time=0.030 ms

64 bytes from 192.168.120.204: icmp_seq=8 ttl=64 time=0.029 ms

64 bytes from 192.168.120.204: icmp_seq=9 ttl=64 time=0.044 ms

64 bytes from 192.168.120.204: icmp_seq=10 ttl=64 time=0.033 ms

64 bytes from 192.168.120.204: icmp_seq=11 ttl=64 time=0.027 ms

[root@localhost ~]#

说明:

ping 192.168.120.204 > test.log & //在后台ping远程主机。并输出文件到test.log这种作法也使用于一个以上的档案监视。用Ctrlc来终止。 

实例3:从第5行开始显示文件

命令:

tail -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]# tail -n +5 log2014.log

2014-05

2014-06

2014-07

2014-08

2014-09

2014-10

2014-11

2014-12

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


    1. nl命令

linux系统中用来计算文件中行号nl 能够将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太同样, nl 能够将行号作比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

1命令格式:

nl [选项]... [文件]...

2命令参数:

-b :指定行号指定的方式,主要有两种:l

-b a :表示不管是否为空行,也一样列出行号(相似 cat -n)

-b t :若是有空行,空的那一行不要列出行号(默认值)

-n :列出行号表示的方法,主要有三种:

-n ln :行号在萤幕的最左方显示;

-n rn :行号在本身栏位的最右方显示,且不加 0

-n rz :行号在本身栏位的最右方显示,且加 0

-w :行号栏位的占用的位数。

-p 在逻辑定界符处不从新开始计算。 

3命令功能:

nl 命 令读取 File 参数(缺省状况下标准输入),计算输入中的行号,将计算过的行号写入标准输出。 在输出中,nl 命令根据您在命令行中指定的标志来计 算左边的行。 输入文本必须写在逻辑页中。每一个逻辑页有头、主体和页脚节(能够有空节)。 除非使用 -p 标志,nl 命令在每一个逻辑页开始的地方从新 设置行号。 能够单独为头、主体和页脚节设置行计算标志(例如,头和页脚行能够被计算然而文本行不能)。

4使用实例:

实例一:用 nl 列出 issue3的内容

命令:

nl log2012.log

输出:

peter@ubuntu:~/lp$ nl issue3

1 1 1

2 2 2

3 3 3

4 4 e

5 5 e

6 6 e

7 7 e

8 8 e:wq

 

说明:

文件中的空白行,nl 不会加上行号

实例二:用 nl 列出 issue3 的内容,空本行也加上行号

命令:

nl -b a log2012.log

输出:

[root@localhost test]# nl -ba log2012.log 

     1  2012-01

     2  2012-02

     3

     4

     5  ======[root@localhost test]#

实例3:让行号前面自动补上0,统一输出格式

命令:

输出:

[root@localhost test]# nl -ba -n rz log2014.log 

000001  2014-01

000002  2014-02

000003  2014-03

000004  2014-04

000005  2014-05

000006  2014-06

000007  2014-07

000008  2014-08

000009  2014-09

000010  2014-10

000011  2014-11

000012  2014-12

000013  =======

[root@localhost test]# nl -b a -n rz -w 3 log2014.log 

001     2014-01

002     2014-02

003     2014-03

004     2014-04

005     2014-05

006     2014-06

007     2014-07

008     2014-08

009     2014-09

010     2014-10

011     2014-11

012     2014-12

013     =======

说明:

nl -b a -n rz 命令行号默认为六位,要调整位数能够加上参数 -w 3 调整为3位。



find文件查找

Linux find命令在目录结构中搜索文件,并执行指定的操做。Linuxfind命令提供了至关多的查找条件,功能很强大。因为find具备强大的功能,所 以它的选项也不少,其中大部分选项都值得咱们花时间来了解一下。即便系统中含有网络文件系统( NFS)find命令在该文件系统中一样有效,只你具备 相应的权限。 在运行一个很是消耗资源的find命令时,不少人都倾向于把它放在后台执行,由于遍历一个大的文件系统可能会花费很长的时间(这里是指 30G字节以上的文件系统)

1命令格式:

find pathname -options [-print -exec -ok ...]

2命令功能:

用于在文件树种查找文件,并做出相应的处理 

3命令参数:

pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

-printfind命令将匹配的文件输出到标准输出。

-execfind命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' { } \;,注意{ }\;之间的空格。

-ok: 和-exec的做用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每个命令以前,都会给出提示,让用户来肯定是否执行。

4命令选项:

-name 按照文件名查找文件。

-perm 按照文件权限来查找文件。

-prune 使用这一选项能够使find命令不在当前指定的目录中查找,若是同时使用-depth选项,那么-prune将被find命令忽略。

-user 按照文件属主来查找文件。

-group 按照文件所属的组来查找文件。

-mtime -n +n 按照文件的更改时间来查找文件, - n表示文件更改时间距如今n天之内,+ n表示文件更改时间距如今n天之前。find命令还有-atime-ctime 选项,但它们都和-m time选项。

-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。

-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。

-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。

-type 查找某一类型的文件,诸如:

b - 块设备文件。

d - 目录。

c - 字符设备文件。

p - 管道文件。

l - 符号连接文件。

f - 普通文件。

-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。-depth:在查找文件时,首先查找当前目录中的文件,而后再在其子目录中查找。

-fstype:查找位于某一类型文件系统中的文件,这些文件系统类型一般能够在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。

-mount:在查找文件时不跨越文件系统mount点。

-follow:若是find命令遇到符号连接文件,就跟踪至连接所指向的文件。

-cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

另外,下面三个的区别:

-amin n 查找系统中最后N分钟访问的文件

-atime n 查找系统中最后n*24小时访问的文件

-cmin n 查找系统中最后N分钟被改变文件状态的文件

-ctime n 查找系统中最后n*24小时被改变文件状态的文件

-mmin n 查找系统中最后N分钟被改变文件数据的文件

-mtime n 查找系统中最后n*24小时被改变文件数据的文件

格式:find  [选项]  filename

功能:从指定的目录开始,递归地搜索其子目录,查找知足条件的文件并对之采起相关的操做

经常使用选项说明

-name 字串  要查找的文件名,能够用通配符*、?、[]

-group 字串  文件所属的用户组名

-user  文件所属的用户名

find命令提供的查询条件能够是一个用逻辑符andornot组成的复合条件

-a  逻辑与

-o  逻辑或

-!  逻辑非

【例】:将过去系统上24小时内更改过的(mtime)的文件列出

[root@dsetl tmp]# find -mtime 0

解释:0是表示当前的时间,因此是从如今开始到24小时以前。

[root@dsetl tmp]# find -mtime 1

解释:1是表示当前的时间,因此是从如今开始到1*24小时以前。

【例】:查找gdm用户下面的全部文件f

[root@dsetl tmp]# find -user peter

【例】:搜索系统中不属于任何人的文件

[root@dsetl ~]# find / -nouser


【例】:查找当前目录下文件名含有font的文件

[root@dsetl etc]# find -name 'font*'

【例】:在根目录下查找文件名为temp或是匹配install*的全部文件

[root@localhost rootfile]# find / -name 'temp' -o -name 'instal*'


/etc/rhgb/temp

/etc/yum/pluginconf.d/installonlyn.conf

/etc/vmware-tools/installer.sh

/software/tomcat5/webapps/docs/appdev/installation.html

/software/tomcat5/temp

/sbin/install-info

/sbin/installkernel

/usr/share/aclocal-1.9/install-sh.m4

/usr/share/icons/Bluecurve/96x96/mimetypes/install.png

/usr/share/icons/Bluecurve/24x24/mimetypes/install.png

/usr/share/icons/Bluecurve/16x16/mimetypes/install.png

/usr/share/icons/Bluecurve/48x48/mimetypes/install.png

/usr/share/aclocal-1.7/install-sh.m4

/usr/share/doc/cyrus-sasl-lib-2.1.22/install.html

/usr/share/doc/sgml-common-0.6.3/html/install-catalog.html

/usr/share/doc/m2crypto-0.16/demo/Zope27/install_dir

/usr/share/doc/m2crypto-0.16/demo/ZopeX3/install_dir

/usr/share/doc/libstdc++-devel-4.1.1/html/install.html

……

【例】:rootfile下查找不含Test*的文件

[root@localhost rootfile]# find ! -name 'Test*'

.

./.Test2.swp

./1q

./.Test.java.swp

./test2

./test2/file2.txt

./combine.txt

./file.txt

 

实例1查找指定时间内访问过的文件 

命令:

  find -atime -2

输出:

[root@peidachang ~]# find -atime -2

.

./logs/monitor

./.bashrc

./.bash_profile

./.bash_history

说明:

超找48小时内访问过的文件 

实例2根据关键字查找 

命令:

peter@ubuntu:~/lp$ find -name '*.log'

输出:

[root@localhost test]# find . -name "*.log" 

./log_link.log

./log2014.log

./test4/log3-2.log

./test4/log3-3.log

./test4/log3-1.log

./log2013.log

./log2012.log

./log.log

./test5/log5-2.log

./test5/log5-3.log

./test5/log.log

./test5/log5-1.log

./test5/test3/log3-2.log

./test5/test3/log3-3.log

./test5/test3/log3-1.log

./test3/log3-2.log

./test3/log3-3.log

./test3/log3-1.log

说明:

在当前目录查找 以.log结尾的文件。 ". "表明当前目录 

实例3按照目录或文件的权限来查找文件

命令:

find /opt/soft/test/ -perm 777

输出:

[root@localhost test]# find /opt/soft/test/ -perm 777

/opt/soft/test/log_link.log

/opt/soft/test/test4

/opt/soft/test/test5/test3

/opt/soft/test/test3

说明: 

查找/opt/soft/test/目录下 权限为 777的文件

实例4按类型查找 

命令:

find . -type f -name "*.log"

输出:

[root@localhost test]# find . -type f -name "*.log"

./log2014.log

./test4/log3-2.log

./test4/log3-3.log

./test4/log3-1.log

./log2013.log

./log2012.log

./log.log

./test5/log5-2.log

./test5/log5-3.log

./test5/log.log

./test5/log5-1.log

./test5/test3/log3-2.log

./test5/test3/log3-3.log

./test5/test3/log3-1.log

./test3/log3-2.log

./test3/log3-3.log

./test3/log3-1.log

[root@localhost test]#

说明:

查找当目录,以.log结尾的普通文件 

实例5:查找当前全部目录并排序

命令:

find . -type d | sort

输出:

[root@localhost test]# find . -type d | sort

.

./scf

./scf/bin

./scf/doc

./scf/lib

./scf/service

./scf/service/deploy

./scf/service/deploy/info

./scf/service/deploy/product

./test3

./test4

./test5

./test5/test3

[root@localhost test]#

d表示目录,sort进行排序

实例6:按大小查找文件

命令:

find . -size +1000c -print

输出:

[root@localhost test]#  find . -size +1000c -print

.

./test4

./scf

./scf/lib

./scf/service

./scf/service/deploy

./scf/service/deploy/product

./scf/service/deploy/info

./scf/doc

./scf/bin

./log2012.log

./test5

./test5/test3

./test3

[root@localhost test]#

说明:

查找当前目录大于1K的文件 

    1. find命令之exec

find是咱们很经常使用的一个Linux命令,可是咱们通常查找出来的并不只仅是看看而已,还会有进一步的操做,这个时候exec的做用就显现出来了。 

exec解释:

-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,因此这句命令后面的分号是不可缺乏的,考虑到各个系统中分号会有不一样的意义,因此前面加反斜杠。

{} 花括号表明前面find查找出来的文件名。

使用find时,只要把想要的操做写在一个文件里,就能够用exec来配合find查找,很方便的在 有些操做系统中只容许-exec选项执行诸如l sls -l这样的命令。大多数用户使用这一选项是为了查找旧文件并删除它们。建议在真正执行rm命令 删除文件以前,最好先用ls命令看一下,确认它们是所要删除的文件。 exec选项后面跟随着所要执行的命令或脚本,而后是一对儿{ },一个空格和一 个\,最后是一个分号。为了使用exec选项,必需要同时使用print选项。若是验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文 件名

实例1ls -l命令放在find命令的-exec选项中

命令:

find . -type f -exec ls -l {} \;

输出: 

[root@localhost test]# find . -type f -exec ls -l {} \; 

-rw-r--r-- 1 root root 127 10-28 16:51 ./log2014.log

-rw-r--r-- 1 root root 0 10-28 14:47 ./test4/log3-2.log

-rw-r--r-- 1 root root 0 10-28 14:47 ./test4/log3-3.log

-rw-r--r-- 1 root root 0 10-28 14:47 ./test4/log3-1.log

-rw-r--r-- 1 root root 33 10-28 16:54 ./log2013.log

-rw-r--r-- 1 root root 302108 11-03 06:19 ./log2012.log

-rw-r--r-- 1 root root 25 10-28 17:02 ./log.log

-rw-r--r-- 1 root root 37 10-28 17:07 ./log.txt

-rw-r--r-- 1 root root 0 10-28 14:47 ./test3/log3-2.log

-rw-r--r-- 1 root root 0 10-28 14:47 ./test3/log3-3.log

-rw-r--r-- 1 root root 0 10-28 14:47 ./test3/log3-1.log

[root@localhost test]#

说明: 

上面的例子中,find命令匹配到了当前目录下的全部普通文件,并在-exec选项中使用ls -l命令将它们列出。

find . -name '*.log' -exec ls -l {} \;

实例2在目录中查找更改时间在n日之前的文件并删除它们

命令:

find . -type f -mtime +14 -exec rm {} \; 

输出:

[root@localhost test]# ll

总计 328

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root     33 10-28 16:54 log2013.log

-rw-r--r-- 1 root root    127 10-28 16:51 log2014.log

lrwxrwxrwx 1 root root      7 10-28 15:18 log_link.log -> log.log

-rw-r--r-- 1 root root     25 10-28 17:02 log.log

-rw-r--r-- 1 root root     37 10-28 17:07 log.txt

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxrwx 2 root root   4096 10-28 14:47 test3

drwxrwxrwx 2 root root   4096 10-28 14:47 test4

[root@localhost test]# find . -type f -mtime +14 -exec rm {} \;

[root@localhost test]# ll

总计 312

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

lrwxrwxrwx 1 root root      7 10-28 15:18 log_link.log -> log.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxrwx 2 root root   4096 11-12 19:32 test3

drwxrwxrwx 2 root root   4096 11-12 19:32 test4

[root@localhost test]# 

说明

shell中用任何方式删除文件以前,应当先查看相应的文件,必定要当心!当使用诸如mvrm命令时,能够使用-exec选项的安全模式。它将在对每一个匹配到的文件进行操做以前提示你。

实例3在目录中查找更改时间在n日之前的文件并删除它们在删除以前先给出提示

命令:

find . -name "*.log" -mtime +5 -ok rm {} \;

输出:

[root@localhost test]# ll

总计 312

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

lrwxrwxrwx 1 root root      7 10-28 15:18 log_link.log -> log.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxrwx 2 root root   4096 11-12 19:32 test3

drwxrwxrwx 2 root root   4096 11-12 19:32 test4

[root@localhost test]# find . -name "*.log" -mtime +5 -ok rm {} \;

< rm ... ./log_link.log > ? y

< rm ... ./log2012.log > ? n

[root@localhost test]# ll

总计 312

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxrwx 2 root root   4096 11-12 19:32 test3

drwxrwxrwx 2 root root   4096 11-12 19:32 test4

[root@localhost test]#

说明

面的例子中, find命令在当前目录中查找全部文件名以.log结尾、更改时间在5日以上的文件,并删除它们,只不过在删除以前先给出提示。 按y键删除文件,按n键不删除。

 

实例4-exec使用grep命令

命令:

find /etc -name "passwd*" -exec grep "root" {} \;

输出:

[root@localhost test]# find /etc -name "passwd*" -exec grep "root" {} \;

root:x:0:0:root:/root:/bin/bash

root:x:0:0:root:/root:/bin/bash

[root@localhost test]#

说明:

任何形式的命令均可以在-exec选项中使用。 在面的例子中咱们使用grep命令。find命令首先匹配全部文件名为“ passwd*”的文件,例如passwdpasswd.oldpasswd.bak,而后执行grep命令看看在这些文件中是否存在一个root用户。

实例5查找文件移动到指定目录  

命令:

find . -name '*.log' -exec mv {} .. \;

find . -name '*.log' -exec mv {} /home/peter/lp \;

输出:

[root@localhost test]# ll

总计 12drwxr-xr-x 6 root root 4096 10-27 01:58 scf

drwxrwxr-x 2 root root 4096 11-12 22:49 test3

drwxrwxr-x 2 root root 4096 11-12 19:32 test4

[root@localhost test]# cd test3/

[root@localhost test3]# ll

总计 304

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:44 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2014.log

[root@localhost test3]# find . -name '*.log' -exec mv {} .. \;

[root@localhost test3]# ll

总计 0[root@localhost test3]# cd ..

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:44 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-12 22:50 test3

drwxrwxr-x 2 root root   4096 11-12 19:32 test4

[root@localhost test]#

实例6exec选项执行cp命令  

命令:

find . -name "*.log" -exec cp {} test3 \;

find . -name '*.og' -exec cp {} /home/peter/lp \;

输出:

[root@localhost test3]# ll

总计 0[root@localhost test3]# cd ..

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:44 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-12 22:50 test3

drwxrwxr-x 2 root root   4096 11-12 19:32 test4

[root@localhost test]# find . -name "*.log" -exec cp {} test3 \;

cp: “./test3/log2014.log” 及 “test3/log2014.log” 为同一文件

cp: “./test3/log2013.log” 及 “test3/log2013.log” 为同一文件

cp: “./test3/log2012.log” 及 “test3/log2012.log” 为同一文件

[root@localhost test]# cd test3

[root@localhost test3]# ll

总计 304

-rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:54 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:54 log2014.log

[root@localhost test3]#

    1. find命令之xargs

在 使用 find命令的-exec选项处理匹配到的文件时, find命令将全部匹配到的文件一块儿传递给exec执行。但有些系统对可以传递给exec的命 令长度有限制,这样在find命令运行几分钟以后,就会出现溢出错误。错误信息一般是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在, 特别是与find命令一块儿使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是所有,不像-exec选项那样。这样它能够先处理最早获取的一部分文件,而后是下一批,并如此继续下去。

在 有些系统中,使用-exec选项会为处理每个匹配到的文件而发起一个相应的进程,并不是将匹配到的文件所有做为参数一次执行;这样在有些状况下就会出现进 程过多,系统性能降低的问题,于是效率不高; 而使用xargs命令则只有一个进程。另外,在使用xargs命令时,到底是一次获取全部的参数,仍是分批 取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来肯定。

使用实例:

实例1 查找系统中的每个普通文件,而后使用xargs命令来测试它们分别属于哪类文件

命令:

find . -type f -print | xargs file

输出:

[root@localhost test]# ll

总计 312

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxrwx 2 root root   4096 11-12 19:32 test3

drwxrwxrwx 2 root root   4096 11-12 19:32 test4

[root@localhost test]# find . -type f -print | xargs file

./log2014.log: empty

./log2013.log: empty

./log2012.log: ASCII text

[root@localhost test]#

实例2:在整个系统中查找内存信息转储文件(core dump) ,而后把结果保存到/tmp/core.log 文件中

命令:

find / -name "core" -print | xargs echo "" >/tmp/core.log[root@localhost test]# find . -type f -print | xargs file

输出:

[root@localhost test]# find / -name "core" -print | xargs echo "" >/tmp/core.log

[root@localhost test]# cd /tmp

[root@localhost tmp]# ll

总计 16

-rw-r--r-- 1 root root 1524 11-12 22:29 core.log

drwx------ 2 root root 4096 11-12 22:24 ssh-TzcZDx1766

drwx------ 2 root root 4096 11-12 22:28 ssh-ykiRPk1815

drwx------ 2 root root 4096 11-03 07:11 vmware-root

实例3:在当前目录下查找全部用户具备读、写和执行权限的文件,并收回相应的写权限

命令:

find . -perm -7 -print | xargs chmod o-w

输出:

[root@localhost test]# ll

总计 312

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxrwx 2 root root   4096 11-12 19:32 test3

drwxrwxrwx 2 root root   4096 11-12 19:32 test4

[root@localhost test]# find . -perm -7 -print | xargs chmod o-w

[root@localhost test]# ll

总计 312

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-12 19:32 test3

drwxrwxr-x 2 root root   4096 11-12 19:32 test4

[root@localhost test]#

说明:

执行命令后,文件夹scftest3test4的权限都发生改变

实例4:用grep命令在全部的普通文件中搜索hostname这个词

命令:

find . -type f -print | xargs grep "hostname"

输出:

[root@localhost test]#find . -type f -print | xargs grep 'hostname'

./log2013.log:hostnamebaidu=baidu.com

./log2013.log:hostnamesina=sina.com

./log2013.log:hostnames=true[root@localhost test]#

实例5:用grep命令在当前目录下的全部普通文件中搜索hostnames这个词

命令

find . -name \* -type f -print | xargs grep "hostnames"

输出:

[root@peida test]# find . -type f -print | xargs grep 'hostnames'

./log2013.log:hostnamesina=sina.com

./log2013.log:hostnames=true[root@localhost test]#

说明:

注意,在上面的例子中, \用来取消find命令中的*shell中的特殊含义。

实例6使用xargs执行mv

命令:

find . -name "*.log" | xargs -i mv {} test4

输出:

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-03 06:19 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:44 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:25 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-12 22:54 test3

drwxrwxr-x 2 root root   4096 11-12 19:32 test4

[root@localhost test]# cd test4/

[root@localhost test4]# ll

总计 0[root@localhost test4]# cd ..

[root@localhost test]# find . -name '*.og' | xargs -i mv {} /home/peter/lp

[root@localhost test]# ll

总计 12drwxr-xr-x 6 root root 4096 10-27 01:58 scf

drwxrwxr-x 2 root root 4096 11-13 05:50 test3

drwxrwxr-x 2 root root 4096 11-13 05:50 test4

[root@localhost test]# cd test4/

[root@localhost test4]# ll

总计 304

-rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:54 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:54 log2014.log

[root@localhost test4]#

实例7find后执行xargs提示xargs: argument line too long解决方法:

命令:

find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

输出:

[root@pd test4]#  find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

rm -f 

[root@pdtest4]#

说明:

-l1是一次处理一个-t是处理以前打印出命令

 

实例8使用-i参数默认的前面输出用{}代替,-I参数能够指定其余代替字符,如例子中的[]

命令:

输出:

[root@localhost test]# ll

总计 12drwxr-xr-x 6 root root 4096 10-27 01:58 scf

drwxrwxr-x 2 root root 4096 11-13 05:50 test3

drwxrwxr-x 2 root root 4096 11-13 05:50 test4

[root@localhost test]# cd test4

[root@localhost test4]# find . -name "file" | xargs -I [] cp [] ..

[root@localhost test4]# ll

总计 304

-rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:54 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:54 log2014.log

[root@localhost test4]# cd ..

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-13 05:50 test3

drwxrwxr-x 2 root root   4096 11-13 05:50 test4

[root@localhost test]#

说明:

使用-i参数默认的前面输出用{}代替,-I参数能够指定其余代替字符,如例子中的[]

实例9xargs-p参数的使用 

命令:

find . -name "*.log" | xargs -p -i mv {} ..

输出:

[root@localhost test3]# ll

总计 0

-rw-r--r-- 1 root root 0 11-13 06:06 log2015.log

[root@localhost test3]# cd ..

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-13 06:06 test3

drwxrwxr-x 2 root root   4096 11-13 05:50 test4

[root@localhost test]# cd test3

[root@localhost test3]#  find . -name "*.log" | xargs -p -i mv {} ..

mv ./log2015.log .. ?...y

[root@localhost test3]# ll

总计 0[root@localhost test3]# cd ..

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-13 06:08 test3

drwxrwxr-x 2 root root   4096 11-13 05:50 test4

[root@localhost test]#

说明:

-p参数会提示让你确认是否执行后面的命令,y执行,n不执行。

    1. find 命令的参数详解

find一些经常使用参数的一些经常使用实例和一些具体用法和注意事项。

1使用name选项:

文 件名选项是find命令最经常使用的选项,要么单独使用该选项,要么和其余选项一块儿使用。 能够使用某种文件名模式来匹配文件,记住要用引号将文件名模式引 起来。 无论当前路径是什么,若是想要在本身的根目录$HOME中查找文件名符合*.log的文件,使用~做为 'pathname'参数,波浪号~代 表了你的$HOME目录。

find ~ -name "*.log" -print

想要在当前目录及子目录中查找全部的‘ *.log‘文件,能够用:

find . -name "*.log" -print

想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,能够用:

find . -name "[A-Z]*" -print

想要在/etc目录中查找文件名以host开头的文件,能够用:

find /etc -name "host*" -print

想要查找$HOME目录中的文件,能够用:

find ~ -name "*" -print find . -print

要想让系统高负荷运行,就从根目录开始查找全部的文件。

find / -name "*" -print

若是想在当前目录查找文件名以一个个小写字母开头,最后是49加上.log结束的文件:

命令:

find . -name "[a-z]*[4-9].log" -print

输出:

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-13 06:08 test3

drwxrwxr-x 2 root root   4096 11-13 05:50 test4

[root@localhost test]# find . -name "[a-z]*[4-9].log" -print

./log2014.log

./log2015.log

./test4/log2014.log

[root@localhost test]#

2perm选项:

按照文件权限模式用-perm选项,按文件权限模式来查找文件的话。最好使用八进制的权限表示法。

如在当前目录下查找文件权限位为755的文件,即文件属主能够读、写、执行,其余用户能够读、执行的文件,能够用:

[root@localhost test]# find . -perm 755 -print

.

./scf

./scf/lib

./scf/service

./scf/service/deploy

./scf/service/deploy/product

./scf/service/deploy/info

./scf/doc

./scf/bin

[root@localhost test]#

 

还有一种表达方法:在八进制数字前面要加一个横杠-,表示都匹配,如-007就至关于777-005至关于555,

命令:

find . -perm -005

输出:

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-13 06:08 test3

drwxrwxr-x 2 root root   4096 11-13 05:50 test4

[root@localhost test]# find . -perm -005

.

./test4

./scf

./scf/lib

./scf/service

./scf/service/deploy

./scf/service/deploy/product

./scf/service/deploy/info

./scf/doc

./scf/bin

./test3

[root@localhost test]#

3忽略某个目录:

如 果在查找文件时但愿忽略某个目录,由于你知道那个目录中没有你所要查找的文件,那么能够使用-prune选项来指出须要忽略的目录。在使用-prune选 项时要小心,由于若是你同时使用了-depth选项,那么-prune选项就会被find命令忽略。若是但愿在test目录下查找文件,但不但愿在 test/test3目录下查找,能够用:

命令:

find test -path "test/test3" -prune -o -print

输出:

[root@localhost soft]# find test -path "test/test3" -prune -o -print

test

test/log2014.log

test/log2015.log

test/test4

test/test4/log2014.log

test/test4/log2013.log

test/test4/log2012.log

test/scf

test/scf/lib

test/scf/service

test/scf/service/deploy

test/scf/service/deploy/product

test/scf/service/deploy/info

test/scf/doc

test/scf/bin

test/log2013.log

test/log2012.log

[root@localhost soft]#

4使用find查找文件的时候怎么避开某个文件目录:

实例1lp 目录下查找不在lp1 子目录以内的全部文件

命令:

find lp -path 'lp/lp1' -o -print

输出:

[root@localhost soft]# find lp

lp

lp/ test.Log

lp/issue2

lp/test2.log

lp/lp1

lp/lp1/lp

lp/log2013.log

lp/manpath.config

lp/log2123.log

lp/!

lp/lp2312.log

lp/issue3

lp/lp23323.log

lp/test.log

lp/issue1

lp/lp2012.log

lp/lp123.log

lp/lp

lp/lp201233.og

lp/ test.Log 

lp/issue4

[root@localhost soft]# find lp -path 'lp/lp1' -prune -o -print

lp

lp/ test.Log

lp/issue2

lp/test2.log

lp/log2013.log

lp/manpath.config

lp/log2123.log

lp/!

lp/lp2312.log

lp/issue3

lp/lp23323.log

lp/test.log

lp/issue1

lp/lp2012.log

lp/lp123.log

lp/lp

lp/lp201233.og

lp/ test.Log 

lp/issue4

说明:

find [-path ..] [expression]

在路径列表的后面的是表达式

-path "test" -prune -o -print -path "test" -a -prune -o -print 的简写表达式按顺序求值, -a -o 都是短路求值,与 shell && || 相似若是

-path "test" 为 真,则求值 -prune , -prune 返回真,与逻辑表达式为真;不然不求值 -prune,与逻辑表达式为假。如 果 -path "test" -a -prune 为假,则求值 -print -print返回真,或逻辑表达式为真;不然不求值 -print, 或逻辑表达式为真。

这个表达式组合特例能够用伪码写为:

if -path "test" then

-prune

else

-print

实例2:避开多个文件夹:

命令:

find test \( -path test/test4 -o -path test/test3 \) -prune -o -print

输出:

[root@localhost soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -print

test

test/log2014.log

test/log2015.log

test/scf

test/scf/lib

test/scf/service

test/scf/service/deploy

test/scf/service/deploy/product

test/scf/service/deploy/info

test/scf/doc

test/scf/bin

test/log2013.log

test/log2012.log

[root@localhost soft]#

 

说明:

圆括号表示表达式的结合。 \ 表示引用,即指示 shell 不对后面的字符做特殊解释,而留给 find 命令去解释其意义。

实例3:查找某一肯定文件,-name等选项加在-o 以后

命令:

find test \(-path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print

输出:

[root@localhost soft]# find test \( -path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print

test/log2014.log

test/log2015.log

test/log2013.log

test/log2012.log

[root@localhost soft]#

5使用usernouser选项:

按文件属主查找文件:

实例1:在$HOME目录中查找文件属主为peida的文件 

命令:

find ~ -user peida -print

实例2:在/etc目录下查找文件属主为peida的文件:

命令:

find /home/peter/lp -user peter -print

说明:

实例3:为了查找属主账户已经被删除的文件,能够使用-nouser选项。在/home目录下查找全部的这类文件

命令:

find /home -nouser -print

说明:

这样就可以找到那些属主在/etc/passwd文件中没有有效账户的文件。在使用-nouser选项时,没必要给出用户名; find命令可以为你完成相应的工做。

6使用groupnogroup选项:

就像usernouser选项同样,针对文件所属于的用户组, find命令也具备一样的选项,为了在/apps目录下查找属于gem用户组的文件,能够用:

find /home/peter/lp -group peter -print

要查找没有有效所属用户组的全部文件,能够使用nogroup选项。下面的find命令从文件系统的根目录处查找这样的文件:

find / -nogroup-print

7按照更改时间或访问时间等查找文件:

若是但愿按照更改时间来查找文件,能够使用mtime,atimectime选项。若是系统忽然没有可用空间了,颇有可能某一个文件的长度在此期间增加迅速,这时就能够用mtime选项来查找这样的文件。

用减号-来限定更改时间在距今n日之内的文件,而用加号+来限定更改时间在距今n日之前的文件。

但愿在系统根目录下查找更改时间在5日之内的文件,能够用:

find / -mtime -5 -print

为了在/var/adm目录下查找更改时间在3日之前的文件,能够用:

find /var/adm -mtime +3 -print

8查找比某个文件新或旧的文件:

若是但愿查找更改时间比某个文件新但比另外一个文件旧的全部文件,能够使用-newer选项。

它的通常形式为:

newest_file_name ! oldest_file_name

其中,!是逻辑非符号。

实例1:查找更改时间比文件log2012.log新但比文件log2017.log旧的文件

命令:

find -newer log2012.log ! -newer log2017.log

输出:

[root@localhost test]# ll

总计 316

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log

-rw-r--r-- 1 root root      0 11-16 14:41 log2016.log

-rw-r--r-- 1 root root      0 11-16 14:43 log2017.log

drwxr-xr-x 6 root root   4096 10-27 01:58 scf

drwxrwxr-x 2 root root   4096 11-13 06:08 test3

drwxrwxr-x 2 root root   4096 11-13 05:50 test4

[root@localhost test]# find -newer log2012.log ! -newer log2017.log

.

./log2015.log

./log2017.log

./log2016.log

./test3

[root@localhost test]#

实例2:查找更改时间在比log2012.log文件新的文件(更改时间更靠后)

命令:

find . -newer log2012.log -print

输出:

[root@localhost test]# find -newer log2012.log

.

./log2015.log

./log2017.log

./log2016.log

./test3

[root@localhost test]#

9使用type选项:

实例1:在/etc目录下查找全部的目录

命令:

find /etc -type d -print

实例2:在当前目录下查找除目录之外的全部类型的文件

命令:

find . ! -type d -print

实例3:在/etc目录下查找全部的符号连接文件

命令:

find /etc -type l -print

10使用size选项:

能够按照文件长度来查找文件,这里所指的文件长度既能够用块(block)来计量,也能够用字节来计量。以字节计量文件长度的表达形式为N c;以块计量文件长度只用数字表示便可。

在按照文件长度查找文件时,通常使用这种以字节表示的文件长度,在查看文件系统的大小,由于这时使用块来计量更容易转换。

实例1:在当前目录下查找文件长度大于1 M字节的文件

命令:

find . -size +1000000c -print

实例2:在/home/apache目录下查找文件长度刚好为100字节的文件:

命令:

find /home/apache -size 100c -print

实例3:在当前目录下查找长度超过10块的文件(一块等于512字节)

命令:

find . -size +10 -print

11使用depth选项:

在使用find命令时,可能但愿先匹配全部的文件,再在子目录中查找。使用depth选项就能够使find命令这样作。这样作的一个缘由就是,当在使用find命令向磁带上备份文件系统时,但愿首先备份全部的文件,其次再备份子目录中的文件。

实例1find命令从文件系统的根目录开始,查找一个名为CON.FILE的文件。

命令:

find / -name "CON.FILE" -depth -print

说明:

它将首先匹配全部的文件而后再进入子目录中查找

12使用mount选项:

  在当前的文件系统中查找文件(不进入其余文件系统),能够使用find命令的mount选项。

实例1:从当前目录开始查找位于本文件系统中文件名以XC结尾的文件

命令:

find . -name "*.XC" -mount -print

 

    1. wc 文字统计命令

格式:wc  [选项]  filename

功能:统计文件的字节数、字数、行数

经常使用选项说明:

-c  统计字节数

-l  统计行数

-w  统计字数

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命令怎么作到只打印统计数字不打印文件名

命令:

输出:

peter@ubuntu:~/lp$ wc -l issue2

6 issue2

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

7[root@localhost test]# 6

说明:

使用管道线,这在编写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]#

说明:

数量中包含当前目录

    1. 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

命令:


输出:

[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 内所规范的目录,因此固然必定找不到的!

    1. whereis 命令

whereis命令只能用于程序名的搜索,并且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。若是省略参数,则返回全部信息。

find相比,whereis查找的速度很是快,这是由于linux系统会将 系统内的全部文件都记录在一个数据库文件中,当使用whereis和下面即 将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率天然会很高。

可是该数据库文件并非实时更新,默认状况下时一星期更新一次,所以,咱们在用whereislocate 查找文件时,有时会找到已经被删除的数据,或者刚刚创建文件,却没法查找到,缘由就是由于数据库文件没有被更新。

1命令格式:

whereis [-bmsu] [BMS 目录名 -f ] 文件名

2命令功能:

whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具备搜索源代码、指定备用搜索路径和搜索不寻常项的能力。

3命令参数:

-b 定位可执行文件。

-m 定位帮助文件。

-s 定位源代码文件。

-u 搜索默认路径下除可执行文件、源代码文件、帮助文件之外的其它文件。

-B 指定搜索可执行文件的路径。

-M 指定搜索帮助文件的路径。

-S 指定搜索源代码文件的路径。

4使用实例:

实例1:将和**文件相关的文件都查找出来

命令:

whereis svn

输出:

[root@localhost ~]# whereis tomcat

tomcat:

[root@localhost ~]# whereis svn

svn: /usr/bin/svn /usr/local/svn /usr/share/man/man1/svn.1.gz

说明:

tomcat没安装,找不出来,svn安装找出了不少相关文件

实例2只将二进制文件 查找出来 

命令:

whereis -b svn

输出: 

[root@localhost ~]# whereis -b svn

svn: /usr/bin/svn /usr/local/svn

[root@localhost ~]# whereis -m svn

svn: /usr/share/man/man1/svn.1.gz

[root@localhost ~]# whereis -s svn

svn:

[root@localhost ~]#

说明:

whereis -m svn查出说明文档路径,whereis -s svn source源文件

    1. locate 命令

locate 让使用者能够很快速的搜寻档案系统内是否有指定的档案。其方法是先创建一个包括系统内全部档案名称及路径的数据库,以后当寻找时就只需查询这个数据库,而没必要实际深刻档案系统之中了。在通常的 distribution 之中,数据库的创建都被放在 crontab 中自动执行。

1命令格式:

Locate [选择参数] [样式]

2命令功能:

locate 命令能够在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性创建的,locate命令 在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案如果最近才创建或 刚改名的,可能会找不到,在内定值 中,updatedb天天会跑一次,能够由修改crontab来更新设定值。(etc/crontab)

locate 指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,能够使用特殊字元(如”*” 或”?”等)来指 定范本样式,如指定范本为kcpa*ner, locate会找出全部起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录 录名称为kcpa_ner则会列出该目录下包括 子目录在内的全部档案。

locate 指令和find找寻档案的功能相似,但locate是透过update程序将硬盘中的全部档案和目录资料先创建一个索引数据库,在 执行loacte时直 接找该索引,查询速度会较快,索引数据库通常是由操做系统管理,但也能够直接下达update强迫系统当即修改索引数据库。

3命令参数:

-e 将排除在寻找的范围以外。

-1  若是 是 1.则启动安全模式。在安全模式下,使用者不会看到权限没法看到 的档案。这会始速度减慢,由于 locate 必须至实际的档案系统中取得档案的 权限资料。

-f 将特定的档案系统排除在外,例如咱们没有到理要把 proc 档案系统中的档案 放在资料库中。

-q  安静模式,不会显示任何错误讯息。

-n 至多显示 n个输出。

-r 使用正规运算式 作寻找的条件。

-o 指定资料库存的名称。

-d 指定资料库的路径

-h 显示辅助讯息

-V 显示程式的版本讯息

4使用实例:

实例1:查找和pwd相关的全部文件

命令:

locate pwd

输出:

peida-VirtualBox ~ # locate pwd

/bin/pwd

/etc/.pwd.lock

/sbin/unix_chkpwd

/usr/bin/pwdx

/usr/include/pwd.h

/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.py

/usr/lib/python2.7/dist-packages/twisted/python/fakepwd.pyc

/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.py

/usr/lib/python2.7/dist-packages/twisted/python/test/test_fakepwd.pyc

/usr/lib/syslinux/pwd.c32

/usr/share/help/C/empathy/irc-join-pwd.page

/usr/share/help/ca/empathy/irc-join-pwd.page

/usr/share/help/cs/empathy/irc-join-pwd.page

/usr/share/help/de/empathy/irc-join-pwd.page

/usr/share/help/el/empathy/irc-join-pwd.page

实例2 搜索etc目录下全部以sh开头的文件 

命令:

locate /etc/sh

输出:

peida-VirtualBox ~ # locate /etc/sh

/etc/shadowl

/etc/shadow-

/etc/shells

peida-VirtualBox ~ #

实例3:搜索etc目录下,全部以m开头的文件

命令:

locate /etc/m

输出:

peida-VirtualBox ~ # locate /etc/m

/etc/magic

/etc/magic.mime

/etc/mailcap

/etc/mailcap.order

/etc/manpath.config

/etc/mate-settings-daemon

grep 命令

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

grep的工做方式是这样的,它在一个或多个文件中搜索字符串模板。若是模板包括空格,则必须被引用,模板后的全部字符串被看做文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep可用于shell脚本,由于grep经过返回一个状态值来讲明搜索的状态,若是模板搜索成功,则返回0,若是搜索不成功,则返回1,若是搜索的文件不存在,则返回2。咱们利用这些返回值就可进行一些自动化的文本处理工做。

1命令格式:

grep [option] pattern file

2命令功能:

用于过滤/搜索的特定字符。可以使用正则表达式能多种命令配合使用,使用上十分灵活

3命令参数:

-a --text #不要忽略二进制的数据。

-A<显示行数> --after-context=<显示行数> #除了显示符合范本样式的那一列以外,并显示该行以后的内容。

-b --byte-offset #在显示符合样式的那一行以前,标示出该行第一个字符的编号。

-B<显示行数>   --before-context=<显示行数>   #除了显示符合样式的那一行以外,并显示该行以前的内容。   

-c --count #计算符合样式的列数。

-C<显示行数> --context=<显示行数>-<显示行数> #除了显示符合样式的那一行以外,并显示该行以前后的内容。

-d <动做> --directories=<动做> #当指定要查找的是目录而非文件时,必须使用这项参数,不然grep指令将回报信息并中止动做。

-e<范本样式> --regexp=<范本样式> #指定字符串作为查找文件内容的样式。

-E --extended-regexp #将样式为延伸的普通表示法来使用。

-f<规则文件> --file=<规则文件> #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

-F --fixed-regexp #将样式视为固定字符串的列表。

-G --basic-regexp #将样式视为普通的表示法来使用。

-h --no-filename #在显示符合样式的那一行以前,不标示该行所属的文件名称。

-H --with-filename #在显示符合样式的那一行以前,表示该行所属的文件名称。

-i --ignore-case #忽略字符大小写的差异。

-l --file-with-matches #列出文件内容符合指定的样式的文件名称。

-L --files-without-match #列出文件内容不符合指定的样式的文件名称。

-n --line-number #在显示符合样式的那一行以前,标示出该行的列数编号。

-q --quiet--silent #不显示任何信息。

-r --recursive #此参数的效果和指定“-d recurse”参数相同。

-s --no-messages #不显示错误信息。

-v --revert-match #显示不包含匹配文本的全部行。

-V --version #显示版本信息。

 

-x --line-regexp #只显示全列符合的列。

-y #此参数的效果和指定“-i”参数相同。

 

4.规则表达式:

grep的规则表达式:

^ #锚定行的开始 如:'^grep'匹配全部以grep开头的行。

$ #锚定行的结束 如:'grep$'匹配全部以grep结尾的行。

. #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,而后是p

* #匹配零个或多个先前字符 如:'*grep'匹配全部一个或多个空格后紧跟grep的行。

.* #一块儿用表明任意字符。

[] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grepgrep

[^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-RT-Z的一个字母开头,紧跟rep的行。

\(..\) #标记匹配字符,如'\(love\)'love被标记为1

\< #锚定单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。

\> #锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。

x\{m\} #重复字符xm次,如:'0\{5\}'匹配包含5o的行。

x\{m,\}  #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5o的行。

x\{m,n\}  #重复字符x,至少m次,很少于n次,如:'o\{5,10\}'匹配5--10o的行。

\w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,而后是p

\W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。

\b #单词锁定符,如: '\bgrep\b'只匹配grep

POSIX字符:

为 了在不一样国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增长了特殊的字符 类,如[:alnum:][A-Za-z0-9]的另外一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9][[:alnum:]]。在linux下的grepfgrep外,都支持POSIX的字符类。

[:alnum:] #文字数字字符

[:alpha:] #文字字符

[:digit:] #数字字符

[:graph:] #非空字符(非空格、控制字符)

[:lower:] #小写字符

[:cntrl:] #控制字符

[:print:] #非空字符(包括空格)

[:punct:] #标点符号

[:space:] #全部空白字符(新行,空格,制表符)

[:upper:] #大写字符

[:xdigit:] #十六进制数字(0-9a-fA-F

5使用实例:

实例1查找指定进程

命令:

ps -ef|grep svn

输出:

[root@localhost ~]# ps -ef|grep svn

root 4943        0  Dec05 ?   00:00:00 svnserve -d -r /opt/svndata/grape/

root 16867 16838  0 19:53 pts/0    00:00:00 grep svn

[root@localhost ~]#

说明:

第一条记录是查找出的进程;第二条结果是grep进程自己,并不是真正要找的进程

实例2:查找指定进程个数

命令:

ps -ef|grep svn -c

ps -ef|grep -c svn

输出:

[root@localhost ~]# ps -ef|grep svn -c

2

[root@localhost ~]# ps -ef|grep -c svn 

2

[root@localhost ~]#

说明:

实例3从文件中读取关键词进行搜索

命令:

cat test.txt | grep -f test2.txt

输出:

[root@localhost test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt 

linux

Redhat

[root@localhost test]# cat test.txt | grep -f test2.txt

hnlinux

ubuntu linux

Redhat

linuxmint

[root@localhost test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行

实例3从文件中读取关键词进行搜索 且显示行号

命令:

cat test.txt | grep -nf test2.txt

输出:

[root@localhost test]# cat test.txt 

hnlinux

peida.cnblogs.com

ubuntu

ubuntu linux

redhat

Redhat

linuxmint

[root@localhost test]# cat test2.txt 

linux

Redhat

[root@localhost test]# cat test.txt | grep -nf test2.txt

1:hnlinux

4:ubuntu linux

6:Redhat

7:linuxmint

[root@localhost test]#

说明:

输出test.txt文件中含有从test2.txt文件中读取出的关键词的内容行,并显示每一行的行号

实例5:从文件中查找关键词

命令:

grep 'linux' test.txt

输出:

[root@localhost test]# grep 'linux' test.txt 

hnlinux

ubuntu linux

linuxmintlp.

[root@localhost test]# grep -n 'linux' test.txt 

1:hnlinux

4:ubuntu linux

7:linuxmint

[root@localhost test]#

说明:

实例6:从多个文件中查找关键词

命令:

grep 'linux' test.txt test2.txt

输出:

[root@localhost test]# grep -n 'linux' test.txt test2.txt 

test.txt:1:hnlinux

test.txt:4:ubuntu linux

test.txt:7:linuxmint

test2.txt:1:linux

[root@localhost test]# grep 'linux' test.txt test2.txt 

test.txt:hnlinux

test.txt:ubuntu linux

test.txt:linuxmint

test2.txt:linux

[root@localhost test]#

说明:

多文件时,输出查询到的信息内容行时,会把文件的命名在行最前面输出而且加上":"做为标示符

实例7grep不显示自己进程

命令:

ps aux|grep \[s]sh

ps aux | grep ssh | grep -v "grep"