veket官方网站论坛

veket

 找回密码
 要注册
搜索
楼主: gfbmgy

linux文件管理

[复制链接]
 楼主| 发表于 2010-4-24 15:40 | 显示全部楼层
  8.find命令

  功能:在目录结构中搜索文件并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。

  语法:find 起始目录 寻找条件 操作

  说明:find命令从指定的起始目录开始,递归搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。

  该命令提供的寻找条件可以是一个用逻辑运算符not, and, or组成的复合条件。逻辑运算符and, or, not的含义为:

  (1)and:逻辑与,在命令中用-a表示,是系统默认的选项,表示只有当所给的条件都满足时,寻找条件才算满足。例如:

  $ find –name 'tmp' –xtype c -user 'inin'

  该命令寻找满足3个给定条件的所有文件。

  (2)or:逻辑或,在命令中用-o表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算满足。例如:

  $ find –name 'tmp' –o –name 'mina*'

  该命令查询文件名为tmp或是匹配mina*的所有文件。

  (3)not:逻辑非,在命令中用!表示。该运算符表示查找不满足所给条件的文件。例如:

  $ find ! –name 'tmp'

  该命令查询文件名不是tmp的所有文件。

  需要说明的是:当使用很多的逻辑选项时,可以用括弧把这些选项括起来。为了避免Shell本身对括弧引起误解,在括号前需要加转义字符“\”来去除括弧的意义。如:

  $ find \(–name 'tmp' –xtype c -user 'inin' \)

  寻找条件有以下选项:

  首先,下列各个选项中的n值可以有3种输入方式,假设n为20,则:

  +20 表示20以后(21, 22, 23等)

  -20 表示20以前(19, 18, 17等)

  20 表示正好是20

  (1)以名称和文件属性查找。

  - name '字串' 查找文件名匹配所给字串的所有文件,字串内可用万用字符*, ?, [ ]。

  - lname '字串' 查找文件名匹配所给字串的所有符号链接文件,字串内可用万用字符*, ?, [ ]。

  -gid n 查找属于ID号为n的用户组的所有文件。

  -uid n 查找属于ID号为n的用户的所有文件。

  -group '字串' 查找属于用户组名为所给字串的所有文件。

  -user '字串' 查找属于用户名为所给字串的所有文件。

  -empty 查找大小为0的目录或文件。

  -path '字串' 查找路径名匹配所给字串的所有文件,字串内可用万用字符*, ?, [ ]。

  -perm 许可权 查找具有指定许可权的文件和目录,许可权的表示可以如711, 644。

  -size n[bckw] 查找指定大小的文件,n后面的字符表示单位,默认为b,代表512字节的块。

  -type x 查找类型为x的文件,x为下列字符之一:

  b 块设备文件;

  c 字符设备文件 ;

  d 目录文件;

  p 具名管道(FIFO);

  f 普通文件;

  l 符号链接文件(symbolic links);

  s socket文件。

  -xtype x 与-type基本相同,但只查找符号链接文件。

  (2)以时间为条件查找。

  - amin n 查找n分钟以前被访问过的所有文件。

  - atime n 查找n天以前被访问过的所有文件。

  - cmin n 查找n分钟以前文件状态被修改过的所有文件。

  - ctime n 查找n天以前文件状态被修改过的所有文件。

  - mmin n 查找n分钟以前文件内容被修改过的所有文件。

  - mtime n 查找n天以前文件内容被修改过的所有文件。

  (3)可执行的操作。

  - exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示命令的参数,即所找到的文件;命令的末尾必须以“ \;”结束。

  - ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。

  - ls 详细列出所找到的所有文件。

  - fprintf 文件名 将找到的文件名写入指定文件。

  - print 在标准输出设备上显示查找出的文件名。

  - printf 格式 格式的写法请参考有关C语言的图书。

  例10-11:查找当前目录中所有以main开头的文件,并显示这些文件的内容。

  $ find . - name 'main*' - exec more {} \;

  例10-12:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。

  $ find . \(- name a.out - o - name '*.o'\)\

  > - atime +7 - exec rm {} \;

  说明如下:

  命令中的“.”表示当前目录,此时find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。\(和\)表示括弧(),其中的“ \”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而不是这里的用于组合条件的用途。- name a.out是指要查找名为a.out的文件;- name '*.o'指要查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结尾的文件,find在当前目录及其子目录下找到这样的文件之后,再进行判断,看其最后访问时间是否在7天以前,若是,则对该文件执行命令(- exec rm{ }\;)。其中{ }代表当前查到的符合条件的文件名,“\;”则是语法所要求的。上述命令中第一行的最后一个“\”是续行符。当命令太长而在一行写不下时,可输入一个“ \”,之后系统将显示一个“>”,指示用户继续输入命令。
 楼主| 发表于 2010-4-24 15:40 | 显示全部楼层
  9.locate命令

  locate命令用于查找文件,它比find命令的搜索速度快,需要一个资料库,这个资料库由每天的例行工作(crontab)程序来创建。当我们创建好这个资料库后,就可以方便地来搜寻所需文件了。

  该命令的一般形式为:

  locate 相关字

  例如,查找相关字issue:

  $ locate issue

  /etc/issue

  /etc/issue.net

  /usr/man/man5/issue.5

  /usr/man/man5/issue.net.5
 楼主| 发表于 2010-4-24 15:41 | 显示全部楼层
  10.Sort命令

  sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对资料库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的资料管理工具,用来管理内容类似资料库记录的文件。

  Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一个字符,如果还相同,将继续进行比较。

  语法:

  sort [选项]文件

  说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“-”,则表示排序内容来自标准输入。

  sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。默认情况下以整行为关键字按ASCII字符顺序进行排序。

  改变默认设置的选项主要有:

  - m 若给定文件已排好序,合并文件。

  - c 检查给定文件是否已排好序,如果它们没有都排好序,则显示一个出错信息,并以状态值1退出。

  - u 对排序后认为相同的行只留其中一行。

  - o 输出文件将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个暂存文件,然后再排序并写输出结果。

  改变默认排序规则的选项主要有:

  - d 按字典顺序排序,比较时仅字母、数位、空格和跳位字符有意义。

  - f 将小写字母与大写字母同等对待。

  - I 忽略非显示字符。

  - M 作为月份比较。

  - r 按逆序输出排序结果。

  +posl - pos2 指定一个或几个栏位作为排序关键字,栏位位置从posl开始,到pos2结束(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。栏位和字符的位置从0开始。

  - b 在每行中寻找排序关键字时忽略前导的空白(空格和跳位字符)。

  - t separator 指定字符separator作为栏位分隔符号。

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

  用sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第2, 3行上的第1个单词完全相同,该命令将从它们的第2个单词vegetables与fruit的首字符处继续进行比较。

  $ cat text

  vegetable soup

  fresh vegetables

  fresh fruit

  lowfat milk

  $ sort text

  fresh fruit

  fresh vegetables

  lowfat milk

  vegetable soup

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

  $ sort text>result

  以第2个栏位作为排序关键字对文件example的内容进行排序。

  $ sort +1-2 example

  对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个栏位的第一个字符作为排序关键字。

  $ sort -r -o outfile +1.0 -1.1 example

  sort排序常用于在管道中与其他命令组合,完成比较复杂的功能。如利用管道将当前工作目录中的文件送给sort进行排序,排序关键字是第6个~第8个栏位。

  $ ls - l | sort +5 – 7

  sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行排序,您可以首先用命令cat把多个文件合并,然后用管道操作把合并后的文本行输入给命令sort,sort命令将输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件 fruitlist的文本行经过合并与排序后被保存到文件clist中。

  $ cat veglist fruitlist | sort > clist
 楼主| 发表于 2010-4-24 15:41 | 显示全部楼层
  11.uniq命令

  文件经过处理后,在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条记录的惟一样本。

  语法:uniq [选项]文件

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

  该命令各选项含义如下:

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

  - d 只显示重复行。

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

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

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

  - f n 与- n相同,这里n是栏位数。

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

  例如,显示文件example中不重复的行:

  uniq - u example

  显示文件example中不重复的行,从第2个栏位的第2个字符开始做比较:

  uniq - u - 1 +1 example
 楼主| 发表于 2010-4-24 15:42 | 显示全部楼层
  12.wc命令

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

  语法:wc [选项] 文件…

  说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字串。

  该命令各选项含义如下:

  - c 统计字节数。

  - l 统计行数。

  - w 统计字数。

  这些选项可以组合使用。

  输出列的顺序和数目不受选项的顺序和数目的影响。总按下述顺序显示,而且每项最多一列。

  行数、字数、字节数、文件名

  如果命令行中没有文件名,则输出中不出现文件名。如:

  $ wc - lcw file1 file2

  4 33 file1

  7 52 file2

  11 11 85 total

  省略任选项-lcw,wc命令的执行结果与上面相同。
您需要登录后才可以回帖 登录 | 要注册

本版积分规则

QQ|手机版|Archiver|veket官方网站论坛 ( 粤ICP备 11052856 )

GMT+8, 2024-5-5 04:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表