第一篇 Linux基础操作指令篇
第1章 文本文件编辑
在Linux系统中,可以直接对文本内容进行打开、编辑等操作。当然也可使用相关的指令调用相应的文本编辑器来实现相同的功能。例如,使用指令col实现控制字符的过滤等。在本章中,将主要向用户介绍基本的文本文件编辑指令的使用方法。
1.1 col指令:过滤控制字符
【语法】col [-bfx][-l <缓冲区列数>]
【功能介绍】col指令可以过滤纯文本文件内容中的控制符。如果不使用该指令,则输出内容中极有可能存在乱码。
注意: 在Linux中,使用Shell特殊字符“>”或“>>”将系统说明文件内容输出为纯文本文件时,控制字符会变成乱码。
【参数说明】
注意: 上表中,RLF字符表示反向换行符,HRLF表示半反向换行符。如果有不清楚的读者可以参考有关专业书籍。
【经验技巧】
■ 参数“-l<缓冲区列数>”表示一次性操作的数据的缓冲区大小,默认值为128。
■ 当用户使用参数“-x”时,文本文件中所包含的按Tab键输入的内容都会被替换为空格。
■ 如果使用参数“-b”,则在转换时会过滤所有的控制字符。例如,Tab、回车换行符等。
【示例1-1】将帮助文档rsync中的内容过滤后,写入文件中保存,输入如下命令:
rootlocal@rootlocal-virtual-machine:-$ man rsync | col –b > /rootlocal/桌面/demo.txt #将帮助文档通过控制字符过滤后,写入到桌面上的文件demo.txt中
注意: 命令行中的信息“rootlocal@rootlocal-virtual-machine:-$”表示Linux命令行输入提示信息标识符。在后面的章节中,将使用符号“$”代替该标识符。
如果在指定的位置不存在文件“demo.txt”,则系统将自动创建一个新文件。否则,文件内容将被覆盖。
【相关指令】colrm
1.2 vi指令:全屏幕纯文本编辑器
【语法】vi[参数]
【功能介绍】vi指令通过调用编辑器进行打开、新建及编辑文件等相关的操作。
【参数说明】
【经验技巧】
■ 在vi编辑器中,可以使用命令来移动编辑器的光标,具体命令如下表所示。
■ 在vi编辑器中,可以使用命令对屏幕进行翻滚,具体命令如下表所示。
■ 使用插入文本类命令在vi编辑器中进行文本插入、替换等操作,具体命令如下表所示。
■ 使用操作命令对编辑内容进行保存等,具体命令如下表所示。
【示例1-2】使用指令vi打开桌面上的文件demo.txt,输入如下命令:
$ vi /home/rootlocal/桌面/demo.txt #使用vi打开桌面上的文件
在Linux系统的控制台窗口中执行以上命令后,控制台将调用文本编辑器打开该文件,如图1.1所示。
图1.1 使用vi编辑器打开文件
注意: 图1.1所示的控制台中所显示的内容就是文件“/home/rootlocal/桌面/demo.txt”中的数据。当vi打开文件内容成功以后,用户就能够使用前面所讲解的相关指令对文本中的内容进行操作了。
【相关指令】emacs,ed,jed
1.3 emacs指令:全屏文本编辑器
【语法】emacs [files]
【功能介绍】emacs指令可以调用Linux系统中的文本编辑器emacs。用户使用该编辑器可以非常方便地进行文本编辑操作和程序代码的编写。
注意: emacs编辑器的功能比Windows系统自带的记事本编辑器更全、更强大。
【参数说明】
注意: 用户除了可以通过参数“files”对emacs编辑器进行操作以外,还可以使用一些快捷键命令进行快捷操作。使用这些命令,可以对编辑器进行光标移动、复制及粘贴等操作,具体命令将在下面具体讲解,而参数files是指定编辑器需要操作的文件。
【经验技巧】
■ emacs的基本快捷键命令如下表所示。
■ emacs的文件操作命令如下表所示。
■ 在emacs编辑器中使用命令操作光标,命令如下表所示。
■ 在emacs编辑器中标记文本、复制文本、粘贴文本等,命令如下表所示。
注意: 在使用上面的命令之前,必须先启动emacs文本编辑器。快捷键命令都是一组按键的组合,所以使用时必须按照快捷键的使用方法进行。例如,使用命令“Ctrl+v”时,在按住“Ctrl”键不放的情况下,再按“v”键。
【示例1-3】使用emacs指令打开桌面上的文件“demo.txt”,输入如下命令:
$ emacs /home/rootlocal/桌面/demo.txt #启动emacs编辑器,并打开指定文件
执行上述命令后,将启动emacs文本编辑器,并打开文件“/rootlocal/桌面/demo.txt”。这样,用户就可以使用相关的命令对文本内容进行编辑,或者对编辑器本身进行操作。
【相关指令】vi,ed,jed
1.4 colrm指令:过滤指定的列
【语法】colrm [num]
【功能介绍】colrm指令可以根据用户的需要过滤指定的列,然后再输出显示。
【参数说明】
注意: 上表中,如果参数num只有一个值,则该指令将过滤指定列以后的所有列。如果参数num指定了两个值,则该指令将过滤指定列之间的所有列。
【经验技巧】
■ colrm指令将从指定文件中读取数据并且过滤指定的列,然后再输出显示。
■ 如果不加任何参数,则该指令没有任何过滤作用。
【示例1-4】使用colrm指令过滤桌面文件“demo.txt”中的第2列以后的所有数据列,输入如下命令:
$ colrm 2 < /home/rootlocal/桌面/demo.txt #从指定文件中过滤第2列以后的数据并输出
执行以上命令后,程序将输出过滤后的文件内容,如图1.2所示。
图1.2 过滤第2行以后的数据
注意: 图1.2所示的命令执行以后,将只会输出文件中第1列的数据。
如果用户需要过滤第2列到第4列之间的数据,则输入如下命令:
$ colrm 2 4 < /home/rootlocal/桌面/demo.txt #从指定文件过滤第2列到第4列之间的数据并输出
执行上面的命令后,程序将输出过滤后的文件内容,如图1.3所示。
图1.3 输出过滤第2列至第4列的数据
注意:以上示例文件“demo.txt”中的数据均为三行数字“123456789”。
【相关指令】col
1.5 comm指令:比较两个已排序的文件
【语法】comm [-123][--help][--version][第1个文件][第2个文件]
【功能介绍】comm指令是对已排序的两个文件数据列进行比较。该指令可以选择是否输出两个文件中不相同的列数据。
【参数说明】
【经验技巧】
■ 该指令将根据参数值的不同对两个文件中的数据进行逐列比较,并根据参数值的功能选择显示或不显示。
■ 如果没有指定任何参数,则会把结果分成3行显示:第1行是仅在第1个文件中出现过的列,第2 行是仅在第2个文件中出现过的列,第3行则是在第1与第2个文件中都出现过的列。
■ 若将文件的名称指定为“-”,则comm指令会从标准输入设备中读取数据。
【示例1-5】使用comm指令对两个文件中的数据进行比较,输出两个文件相同的内容,输入如下命令:
$ comm -1 /home/rootlocal/桌面/demo.txt /home/rootlocal/桌 面/demo1.txt #对指定文件进行比较
执行以上命令后,程序将输出比较后的文件内容,如图1.4所示。
图1.4 输出两个文件中的相同内容
注意: 以上示例文件“demo.txt”中的数据为三行数字“123456789”,而“demo1.txt”中的数据为“1234”。
【相关指令】fgrep、grep
1.6 csplit指令:分割文件
【语法】csplit [-kqsz][-b<输出格式>][-f<输出字首字符串>][-n<输出文件名位数>][--help][--version][文件][范本样式…]
【功能介绍】csplit指令主要实现对文件的分割。
【参数说明】
【经验技巧】
■ 该指令将指定文件按照指定的范本样式予以切割,并分别保存成名称为xx00、xx01、xx02……的文件。
■ 如果文件名设置为“-”,则csplit指令将会从标准输入设备读取数据。
【示例1-6】使用csplit指令对指定的文件进行分割,输入如下命令:
$ csplit –k /home/rootlocal/桌面/demo.txt #分割文件
注意: 不同版本的Linux系统,所要求的参数值也不相同,请读者注意。
【相关指令】fgrep、grep
1.7 ed指令:文本编辑器
【语法】ed [-][-Gs][-p<字符串>][--help][--version][文件…]
【功能介绍】ed指令将调用Linux中功能最简单的文本编辑程序。
【参数说明】
【经验技巧】ed文本编辑器一次仅能编辑一行数据而不能进行全屏幕方式的操作。
【示例1-7】使用ed指令显示ed编辑器的版本信息,输入如下命令:
$ ed --version #显示版本信息
执行以上命令后,将显示编辑器的版本信息,如图1.5所示。
图1.5 显示ed编辑器的版本信息
注意: ed指令非常简单,就是一个调用程序的指令。
【相关指令】vi,jed,emacs
1.8 egrep指令:在文件中查找指定的字符串
【语法】egrep [-abEFGhHi…][需要查找的字符串][文件…]
【功能介绍】egrep指令主要是在指定的文件内查找相应的字符串。
【参数说明】
注意: 上表中所列出的参数是经常使用到的一些,而该指令还包含了很多参数,读者可以在命令行窗口下输入命令“egrep --help”获得。
【经验技巧】
■ 该指令目前已经不被使用了,但是可以使用grep代替。
■ Egrep指令和grep指令的使用方法和参数是一样的。
【示例1-8】使用egrep指令在文件“demo.txt”中查找字符串“wq”,则输入下面的命令:
$ egrep –i 'wq' '/home/rootlocal/桌面/demo.txt' #显示版本信息
执行以上命令以后,将高亮显示所查找到得字符串,如图1.6所示。
图1.6 高亮显示查找的字符串
【相关指令】grep,fgrep
1.9 ex指令:以Ex模式运行vi指令
【语法】ex -e
【功能介绍】该指令主要是在Ex模式下启动vim文本编辑器。
【参数说明】使用该指令时,只有一个参数“-e”,表示将进入Ex模式。
【经验技巧】
■ ex执行效果如同vi -E,使用语法及参数可参照vi指令。
■ 如要从Ex模式回到普通模式,则在vim中输入:vi或:visual即可。
【示例1-9】使用ex指令启动vim编辑器,输入如下命令:
$ ex –e #运行ex指令
执行以上命令后,控制台窗口将显示提示信息是否回到普通模式下,如下所示:
Entering Ex mode. Type "visual" go to go Normal mode:
注意: 如果在此提示信息下输入“visual”,则将进入普通模式。
【相关指令】vi
1.10 fgrep指令:查找文件中符合条件的字符串
【语法】fgrep [-abEFGhHi…][需要查找的字符串][文件…]
【功能介绍】该指令将查找指定文件内符合条件的字符串,该字符串是在指令的参数中指定的。
【参数说明】该指令的参数列表及其含义与指令egrep的参数是一样的。
【经验技巧】
■ 该指令相当于执行命令“grep –F”。
■ 执行该指令后,可以使找到的字符串显示为高亮状态。
【示例1-10】使用fgrep指令查找文件“demo.txt”中是否包含字符串“wq”,输入如下命令:
$ fgrep –i 'wq' '/home/rootlocal/桌面/demo.txt' #运行fgrep指令
执行以上命令后,控制台窗口将高亮显示查找到的字符串,如图1.7所示。
图1.7 高亮显示查找到的字符串
【相关指令】grep,egrep
1.11 fmt指令:编排文本文件
【语法】fmt [-cstu][-p<列起始字符串>][-w<每列字符数>] [--help][--version][文件…]
【功能介绍】该指令主要用于编排文本文件。
【参数说明】
【经验技巧】
■ fmt指令会从指定的文件中读取内容,将其依照指定格式重新编排后,输出到标准输出设备。
■ 如果指定的文件名为“-”,则fmt指令将从标准输入设备读取数据。
【示例1-11】使用fmt指令对文件“demo.txt”内容进行编排,输入如下命令:
$ fmt -c '/home/rootlocal/桌面/demo.txt' #运行fmt指令
执行以上命令后,控制台窗口将输出编排后的文件内容,如图1.8所示。
图1.8 显示编排内容
【相关指令】flod
1.12 fold指令:限制文件列宽
【语法】fold [-bs][-w<每列行数>][--help][--version][文件…]
【功能介绍】该指令主要用于限制指定文件的列宽。
【参数说明】
【经验技巧】
■ fold指令会从指定的文件中读取内容,将超过限定列宽的列加入增列字符后,输出到标准输出设备。
■ 如果不指定任何文件名称,或是所给予的文件名为“-”,则fold指令默认将从标准输入设备中读取数据。
【示例1-12】使用fold指令对文件“demo.txt”进行最大列数的设置,输入如下命令:
$ fold –w 10 '/home/rootlocal/桌面/demo.txt'#运行fold指令
执行以上命令后,控制台窗口将输出以新列排列的文本内容,如图1.9所示。
图1.9 进行最大列数设置后的输出
【相关指令】fmt
1.13 grep指令:查找文件中符合条件的字符串
【语法】grep [-abEFGhHi…] [--help][需要查找的字符串][文件或目录…]
【功能介绍】该指令主要用于查找文件中符合条件的字符串。
【参数说明】
【经验技巧】
■ grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。
■ 若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。
【示例1-13】使用grep指令对文件“demo.txt”进行字符串查找,输入如下命令:
$ grep –i '这是' '/home/rootlocal/桌面/demo.txt' #运行grep指令
执行以上命令后,控制台窗口将高亮显示所查找到的字符串,如图1.10所示。
图1.10 高亮显示查找到的字符串
【相关指令】egrep,fgrep
1.14 ispell指令:拼字检查程序
【语法】ispell [[-aAbBClmMnNPStVx][-d<字典文件>][-L<行数>][-p<字典文件>][-w<非字母字符>][-W<字符串长度>][要检查的文件]
【功能介绍】该指令主要用于文件内容的拼字检查功能。
【参数说明】
【经验技巧】
■ ispell默认使用/usr/lib/ispell/english.hash字典文件来检查文本文件。
■ 如果在检查的文件中找到字典没有的词汇,则ispell会建议可以使用的词汇,或是让你将新的词汇加入个人字典。
【示例1-14】使用ispell指令对文件“demo.txt”进行拼字检查并且产生备份文件,输入如下命令:
$ ispell -b '这是' '/home/rootlocal/桌面/demo.txt' #运行ispell指令
注意: 执行以上命令以后,程序将对文件“demo.txt”中的内容进行检查,并对比用户所给出的字典(即“这是”)进行拼字检查。
当然,该指令也可以不检查一个文件,而对用户的输入进行检查,输入以下指令:
$ echo visua | ispell -a #运行ispell指令检查输入
运行以上命令后,ispell指令将对用户输入的单词“visua”进行检查,并返回以下信息:
& visua 30: visual,virtual
这个信息说明输入的单词“visua”错误,并且将给出以字母顺序排列的可能的正确单词。
注意: 如果用户不需要使用以字母顺序进行排列,则可以使用参数“-s”,按照词汇的相似程度进行排序即可。
【相关指令】look,rgrep,spell
1.15 jed指令:编辑文本文件
【语法】jed [-2n][-batch][-f<函数>][-g<行数>][-i<文件>][-I<文件>][-s<字符串>][文件]
【功能介绍】该指令将启动jed文本编辑器。
【参数说明】
【经验技巧】该指令所启动的编辑器非常适合编写源代码等内容。
【示例1-15】使用jed指令显示上、下两个编辑区并打开指定的文件,输入如下命令:
$ jed -2 '/home/rootlocal/桌面/demo.txt' #运行jed指令
注意: 执行上述命令后,将会显示为上、下两个编辑区。
【相关指令】ex,ed,joe
1.16 joe指令:文档编辑
【语法】
joe [-asis][-beep][-csmode][-dopadding][-exask][-force][-help] [-keepup][-lightoff][-arking]
[-mid][-nobackups][-nonotice][-nosta][-noxon][-orphan][-backpa th<目录>][-columns<栏位>][-lines<行数>][-pg<行数>]
[-skiptop<行数>][-autoindent crlf linums overwrite rdonly wordwrap][+<行数>][-indentc<缩排字符>][-istep<缩排字符数>] [-keymap<按键配置文件>][-lmargin<栏数>][-rmargin<栏数>][-tab<栏数>][要编辑的文件]
【功能介绍】该指令可以编辑文本文件。
【参数说明】
续表
【经验技巧】
■ joe是一个功能强大的全屏幕文本编辑程序。
■ joe一次可开启多个文件,每个文件各放在一个编辑区内,并且可以在文件之间实现剪切的功能。
【示例1-16】使用joe指令打开文件“demo.txt”,并且为其添加相应的行号,输入如下命令:
$ joe -linums '/home/rootlocal/桌面/demo.txt' #运行joe指令
注意: 执行上面的命令,将打开桌面上的文件“demo.txt”,并且为该文件中所有的行添加对应的行号。如果读者机器上没有安装joe,则可以使用命令“o apt–get install joe”完成joe的安装。
【相关指令】ex,ed,jed,mtype
1.17 join指令:将两个文件中指定栏位内容相同的行连接起来
【语法】join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2]
【功能介绍】该指令将在两个文件中,查找指定栏位内容相同的行,并且将其连接。
【参数说明】
【经验技巧】
■ 该指令将在两个文件中,查找指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
■ 该指令的最后两个参数分别表示需要进行连接操作的文件1和文件2。
【示例1-17】使用join指令将文件“demo.txt”和“demo1.txt”中的数据进行连接,则输入下面的命令:
$ join –a 1 '/home/rootlocal/桌面/demo.txt' '/home/rootlocal/ 桌面/demo1.txt' #运行join指令
注意: 执行上面的命令,指令join将这个两个文件中的数据进行连接后,再输出。如果用户需要获取join的版本信息,可以直接使用该指令的参数“--version”,如图1.11所示。
图1.11 join的版本信息
【相关指令】look,joe,jed
1.18 look指令:查找单字符
【语法】look [-adf][-t<字尾字符串>][字首字符串][字典文件]
【功能介绍】该指令主要用于查找单个的字符等数据。
【参数说明】
【经验技巧】
■ look指令用于英文单字的查询。
■ 该指令只需要指定需要查找的字符串,就会显示所有开头字符串符合该条件的单字。
【示例1-18】使用look指令在文件“demo.txt”中进行单字查找,输入如下命令:
$ look –f 'r' '/home/rootlocal/桌面/11.txt' #运行look指令
注意: 执行上面的命令,指令look将对文件“demo.txt”中的数据内容进行查找并输出,如图1.12所示。
图1.12 运行look指令后的结果
【相关指令】join,joe,jed
1.19 mtype指令:显示DOS文件的内容
【语法】mtype [-st][文件]
【功能介绍】显示DOS文件的内容。
【参数说明】
【经验技巧】
■ mtype是一种mtools工具指令,模拟MS-DOS的type指令,可以显示MS-DOS文件的内容。
■ 该指令只有两个参数,但是在使用时也可不指定具体的参数值。
【示例1-19】使用mtype指令打开文件“demo.txt”,并对其数据内容进行显示,输入如下命令:
$ mtype '/home/rootlocal/桌面/demo.txt' #运行mtype指令
注意: 执行上面的命令后,执行窗口将显示该文件中的数据内容。
【相关指令】join,vi,emacs
1.20 pico指令:编辑文本文件
【语法】pico [-bdefghjkmqtvwxz][-n<间隔秒数>][-o<工作目录>][-r<编辑页宽>][-s<拼字检查器>][+<列数编号>][文件]
【功能介绍】编辑文本文件。
【参数说明】
【经验技巧】
■ pico是个简单易用、以显示导向为主的文字编辑程序。
■ pico伴随着处理电子邮件和新闻组的程序pine而来。
【示例1-20】使用pico指令打开文件“demo.txt”,并开启鼠标支持的功能,输入如下命令:
$ pico -m '/home/rootlocal/桌面/demo.txt' #运行pico指令
注意: 执行上面的命令后,执行窗口将显示该文件的数据内容,并且显示命令列表。此时,用户可以使用鼠标单击这些命令列表,如图1.13所示。
图1.13 运行pico指令后的运行结果
【相关指令】ed,ex,joe,jed
1.21 rgrep指令:递归查找文件中符合条件的字符串
【语法】rgrep [-?BcDFhHilnNrv][-R<范本样式>][-W<列长度>][-x<扩展名>][--help][--version][范本样式][文件或目录…]
【功能介绍】递归查找文件中符合条件的字符串。
【参数说明】
【经验技巧】
■ rgrep指令的功能和grep指令类似,可查找内容包含指定的范本样式的文件。
■ 如果发现某文件的内容符合所指定的范本样式,预设rgrep指令会把含有范本样式的那一列显示出来。。
【示例1-21】使用rgrep指令打开文件“demo.txt”,并查找指定的字符,输入如下命令:
$ rgrep -H -R '1' '/home/rootlocal/桌面/11.txt' #运行rgrep指令
执行上面的命令后,当输出查找到的每一个匹配项时,都将为其输出相应的文件名,如图1.14所示。
图1.14 运行rgrep指令后的运行结果
【相关指令】fgrep,grep,egrep
1.22 sed指令:利用script来处理文本文件
【语法】sed [-hnV][-e<script>][-f<script文件>][文本文件]
【功能介绍】利用script来处理文本文件。
【参数说明】
【经验技巧】sed可依照script的指令,来处理、编辑指定的文本文件。
【示例1-22】使用sed指令调用指定的script文件来处理指定的文件,输入如下命令:
$ sed -f '用于处理用的script文件路径' '/home/rootlocal/桌面 /demo.txt' #运行sed指令
注意: 在上面的命令中,用户需要在指定的参数“-f”后面接上用于处理文件的script文件路径。
【相关指令】fmt
1.23 sort指令:将文本文件中的内容进行排序
【语法】sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>] [+<起始栏位>-<结束栏位>][--help][--verison][文件]
【功能介绍】将文本文件内容进行排序。
【参数说明】
【经验技巧】sort可针对文本文件的内容,以行为单位来排序。
【示例1-23】使用sort指令对文件“demo.txt”中的数据判断是否排序,输入如下命令:
$ sort -c'文件路径' '/home/rootlocal/桌面/demo.txt' #运行sort指令
如果指定的文件内容并没有进行排序,则将输出信息提示用户,命令如下:
sort: /home/rootlocal/桌面/demo.txt:2:无序:
以上信息表明指定的文件并没有进行排序。设置相应的参数对其进行排序,并将排序后的文件进行保存,输入如下命令:
$ sort -f -n '/home/rootlocal/桌面/demo.txt' #运行sort指令进行排序
【相关指令】comm
1.24 spell指令:拼字检查程序
【语法】spell [-b][+local-file][filenames]
【功能介绍】该指令可以从标准输入设备或者指定的文件中读取字符串,并且在结束时显示拼错的词汇。
【参数说明】该指令的参数filenames表示需要进行拼字检查的文件或者文件路径。
【经验技巧】
■ 一般情况下,spell指令仅使用参数filenames即可实现基本的功能。
■ spell指令检查文件中每一处拼写有误的单词时仅列出一次。参数为默认选项时,spell将使用美国的拼法,如果使用英国或加拿大的拼法,则使用-b选项。
■ local-file是包含已排序单词表的一个文件名,每行一个词。用户可以在该文件中存放自己的本地单词。例如,姓名、特殊的专用名等。在local-file中找到的单词将从spell的输出中删去。
【示例1-24】使用spell指令对文件“demo.txt”中的数据进行拼字检查判断。并且将检查后有拼写错误的词汇保存在文件“erro.txt”中,输入如下命令:
$ spell demo.txt > erro.txt #使用美国拼写方法运行spell指令
注意: 如果spell指令在文件“demo.txt”中检查到有疑问的词汇时,会将这些词汇保存到文件“erro.tx”中以备查看。
如果用户需要使用英国英语字典的拼写方法,则输入以下命令:
$ spell -b demo.txt > erro.txt #使用英国英语拼写方法运行spell指令
【相关指令】fgrep,grep,egrep,ispell
1.25 tr指令:转换字符
【语法】tr [-cdst][--help][--version][第一字符集][第二字符集]
【功能介绍】转换字符。
【参数说明】
【经验技巧】tr指令从标准输入设备读取数据,经过字符串转换后,输出到标准输出设备。
【示例1-25】假设文件“demo.txt”中的数据为“abc def ghijklm”。使用tr指令删除指定的字符串“abc”,输入如下命令:
$ tr -d 'abc' < '/home/rootlocal/桌面/demo.txt' #运行tr指令
运行上面的命令后,指令将删除字符串“abc”,并且将剩下的文件数据进行输出,如下所示:
def ghilklm
【相关指令】uniq
1.26 uniq指令:检查及删除文本文件中重复出现的行列
【语法】uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]
【功能介绍】检查并删除文本文件中重复出现的行列。
【参数说明】
【经验技巧】
uniq指令可检查文本文件中重复出现的行列。
【示例1-26】假设文件“demo.txt”中的数据如下所示:
测试 测试测试 测试测试 测试1 测试2 测试3
如果使用uniq指令统计这些字符串所出现的次数,并显示在数据旁边,则输入如下命令:
$ uniq -c '/home/rootlocal/桌面/demo.txt' #运行uniq指令
运行上面的命令后,其结果如图1.15所示。
图1.15 运行uniq指令的结果
【相关指令】tr
1.27 wc指令:计算文本文件中的字数
【语法】wc [-clw][--help][--version][文件…]
【功能介绍】计算指定文件中的字数。
【参数说明】
【经验技巧】wc的参数如果为“-”,表示将从标准输入设备中读取数据。
【示例1-27】假设文件“demo.txt”中的数据如下所示:
测试 测试测试数据数据
如果使用wc指令获取其中最长行数据的长度并且显示,则输入如下命令:
$ wc -L < '/home/rootlocal/桌面/demo.txt' #运行wc指令
运行上面的命令后,其结果如下所示:
16
【相关指令】look,uniq
第2章 文件与目录管理
在Linux系统中,用户可以使用指令对文件和目录进行管理。例如,文件和目录的比较、连接、查找功能。最为重要的是通过这些指令可以修改文件和目录的时间、属性及其权限等。在本章中,将具体介绍这些管理命令的原型、参数及使用方法等。
2.1 diff指令:比较文本文件的差异
【语法】diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C<行数>][-D<巨集名称>][-I<字符或字符串>][-S<文件>][-W <宽度>][-x<文件或目录>][-X<文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]
【功能介绍】该指令可以对文本文件之间进行差异比较,并列出不同之处。
【参数说明】
续表
续表
注意: 如果用户使用“-”表示文件或目录名时,将默认从标准输入设备中读取数据进行比较。
【经验技巧】
■ diff指令是以逐行的方式,比较文本文件的异同处。
■ 如果该指令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
【示例2-1】将目录“/usr/li”下的文件“test.txt”与当前目录下的文件“test.txt”进行比较,输入如下命令:
$ diff /usr/li test.txt #使用diff指令对文件进行比较
上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
n1 a n3,n4 n1,n2 d n3 n1,n2 c n3,n4
其中,字母“a”、“d”、“c”分别表示添加、删除及修改操作。而“n1”、“n2”表示在文件1中的行号,“n3”、“n4”表示在文件2中的行号。
注意: 以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以“<”开始的行属于文件1,以“>”开始的行属于文件2。
【相关指令】locate,diffstat
2.2 diffstat指令:根据diff的比较结果显示统计字数
【语法】diffstat [-wV][-n<文件名长度>][-p<文件名长度>]
【功能介绍】diffstat指令将读取diff指令的输出结果,并且统计各文件的插入、删除、修改等差异计量。
【参数说明】
【经验技巧】
■ 用户也可以直接使用“|”将diff指令所输出的结果直接送给diffstat指令进行统计结果的显示。
■ 使用该指令时,若所比较的文件或者子目录不在当前目录下,则应该使用其完整路径。
【示例2-2】将目录“test1”和“test2”下的同名文件“testf.txt”使用diff指令进行比较。然后使用diffstat指令对结果进行统计显示,输入如下命令:
$ diff test1 test2 | diffstat #进行比较结果的统计显示
注意: 使用这条命令可以非常方便地实现统计显示的功能。
对于查看文件中的内容,用户可以通过指令“cat”进行查看即可,具体操作如下:
$ cat test1/testf.txt #查看test1/testf的内容 abc def ghi jkl mno pqr stu vws $ cat test2/testf.txt #查看test2/testf的内容 abc def ghi jkl mno
从上面的文件内容显示,可以看到两个文件内容的差别。现在来运行刚才的命令,对文件比较的结果进行统计显示,结果如下:
testfile | 2 +- #统计信息输出显示 1 file changed, 1 insertion(+), 1 deletion(-)
【相关指令】diff,locate
2.3 file指令:识别文件的类型
【语法】file [-beLvz][-f<名称文件>][-m<魔法数字文件>…] [文件或目录…]
【功能介绍】file指令能够识别指定的文件类型。
【参数说明】
【经验技巧】
■ 使用该指令的最为简单的方法是在指令后面不使用任何参数,而直接指定文件名或者是文件路径。
■ 该指令默认的魔法数字文件是“/usr/share/magic”,用户可以通过环境变量进行设置。
■ 该指令对文件类型检查分为3个步骤,分别为文件系统的检查、魔法数字文件的检查及其使用语言的检查。
■ 该指令可以识别任何类型的文件。并且只要该文件的类型在魔法数字文件内有相应的记录,file指令就可以返回其类型的相关信息。
注意: 关于魔法数字文件,用户可以使用“cat”指令查看一下系统文件即可知道。
【示例2-3】使用file指令对文件“/bin/cp”进行类型识别,输入如下命令:
$ file /bin/cp #查看指定文件的类型
运行以上命令,其运行结果如下:
ELF 32-bit LSB executable, Intel 80386, Version 1 (SYSV), for GNU/Linux 2.6.8, Dynamically inked (uses shared libs), stripped
【相关指令】mshowfat,od
2.4 find指令:查找文件或者目录
【语法】find [目录…][-amin <分钟>][-anewer <参考文件或目录>][-atime <24小时数>][-cmin<分钟>][-cnewer<参考文件或目录>][-ctime<24小时数>][-daystart][-depth][-empty][-exec<执行指令>][-false][-fls<列表文件>][-follow][-fprint<列表文件>][-fprint0<列表文件>][-fprintf<列表文件><输出格式>][-fstype<文件系统类型>][-gid<群组识别码>][-group<群组名称>][-help][-ilname<范本样式>][-iname<范本样式>][-inum<inode编号>][-ipath<范本样式>] [-iregex<范本样式>][-links<连接数目>][-lname<范本样式>][-ls] [-maxdepth<目录层级>][-mindepth<目录层级>][-mmin<分钟>] [-mount][-mtime<24小时数>][-name<范本样式>][-newer<参考文件或目录>][-nogroup][noleaf][-nouser][-ok<执行指令>][-path<范本样式>][-perm<权限数值>][-print][-print0][-printf<输出格式>] [-prune][-regex<范本样式>][-size<文件大小>][-true][-type<文件类型>][-uid<用户识别码>][-used<日数>][-user<拥有者名称>] [-version][-xdev][-xtype<文件类型>]
【功能介绍】查找文件或者目录,并且进行输出显示。
【参数说明】
续表
续表
续表
【经验技巧】
■ 该指令用于查找符合条件的文件。任何位于参数之前的字符串都将被视为欲查找的目录名。
■ 如果使用该指令时,不设置任何参数,则指令find将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
【示例2-4】使用find指令对当前目录下的子目录和文件进行查找,输入如下命令:
$ find #查找当前目录下的文件或子目录
运行以上命令,将会显示当前目录下查找的所有子目录和文件,运行结果如下:
./testf ./file ./testf2 ./testfile ./demo.txt
【相关指令】locate,updatedb
2.5 git指令:文字模式下的文件管理员
【语法】git
【功能介绍】该指令的作用是调用文字模式下的文件管理员操作程序,该程序具有互动界面。
【参数说明】该指令在使用时,不需要任何的参数。但是,用户可以使用快捷键实现相应的功能。
【经验技巧】
■ 快捷键F1:执行info指令,查询相关的指令信息,程序将要求用户输入需要查询的名称。
■ 快捷键F2:执行cat指令,列出文件的内容。
■ 快捷键F3:执行gitview指令,观看文件内容。
■ 快捷键F4:执行vi指令,编辑文件内容。
■ 快捷键F5:执行cp指令,复制文件或目录,将会要求输入目标文件或者目录。
■ 快捷键F6:执行mv指令,移动文件或目录,也可以修改其名称,运行时将要求输入目标文件或目录。
■ 快捷键F7:执行mkdir指令,建立目录。
■ 快捷键F8:执行rm指令,删除文件或目录。
■ 快捷键F9:执行make指令,批处理执行指令或编译程序时,将要求输入相关的命令。
■ 快捷键F10:离开git文件管理员操作程序。
注意: git是用来管理文件的程序,类似于DOS下的Norton Commander,其操作方法和Norton Commander几乎一样
【示例2-5】调用git文件管理员操作程序,输入如下命令:
$ git #执行git指令
注意: 当执行上面的指令以后,将打开文件管理员操作程序界面。
【相关指令】gitview
2.6 gitview指令:Hex/ASCII的文件查看程序
【语法】gitview [-bchilv][文件]
【功能介绍】该指令的作用是查看Hex/ASCII的文件内容。
【参数说明】
【经验技巧】gitview指令可以观看指定文件的内容,并且同时显示为十六进制或ASCII格式。
【示例2-6】使用指令gitview以彩色模式观看文件“/home/rootlocal/demo.txt”中的内容,输入如下命令:
$ gitview -c /home/rootlocal/demo.txt #使用gitview指令观看指定文件内容
注意: 执行该条指令后,程序将以彩色模式显示文件的内容。
【相关指令】git
2.7 ln指令:连接文件或者目录
【语法】ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录]
或:
ln [-bdfinsv][-S<字尾备份字符串>][-V<备份方式>][--help] [--version][源文件或目录…][目的目录]
注意: 该指令具有两种语法格式,但是根据需要使用其中一种即可。
【功能介绍】该指令用于连接文件或者目录。
【参数说明】
【经验技巧】
■ 若该指令指定两个以上的文件或目录,并且最后一个目标目录是已经存在的目录,则会把前面所指定的文件或目录复制到该目录中。
■ 若该指令指定两个以上的文件或目录,并且最后一个目标目录不存在,则会出现错误信息。
【示例2-7】使用指令ln以符号连接的形式连接两个指定的目录,输入如下命令:
$ ln -s /bin/less /usr/local/bin/less #连接指定的两个目录
执行上述命令后,指定的两个目录之间将会以符号连接的形式进行连接。这样,用户就不需要在使用的目录下都保存相同的文件。而只需要在某个固定的目录中放置该文件,就可以在其他的目录下使用ln指令即可。
注意: 以此种方式进行操作,避免了重复地占用磁盘空间。
【相关指令】mread,mren
2.8 locate指令:查找文件
【语法】locate [-d <数据库文件>][--help][--version][范本样式…]
【功能介绍】该指令用于文件的查找。
【参数说明】
【经验技巧】
■ locate指令在使用之前可以使用指令updatedb创建一个数据库。
■ 该指令会在保存文件与目录名称的数据库中,查找符合范本样式条件的文件或目录。
【示例2-8】使用指令查找文件名中含有关键字“demo”的文件路径,输入如下命令:
$ locate demo #查找指定的文件
执行上述命令后,程序将会显示所有包含关键字“demo”的文件路径,如下所示:
/home/rootlocal/demo.txt #显示路径列表 /home/rootlocal/demo2.txt
【相关指令】find
2.9 lsattr指令:显示文件属性
【语法】lsattr [-adlRvV][文件或目录…]
【功能介绍】该指令用于显示指定的文件属性。
【参数说明】
【经验技巧】
■ 用指令chattr执行过修改文件或目录的属性,可使用lsattr指令查询其属性。
■ lsattr指令显示的文件属性是属于文件的物理属性。
【示例2-9】使用指令lsattr显示目录“/home/rootlocal/桌面”的文件系统属性,输入如下命令:
$ lsattr /home/rootlocal/桌面 #显示指定目录的文件系统属性
执行上述命令后,程序将会显示指定目录下的所有子目录和文件及其属性,如下所示:
-----------------e-/usr/local/include -----------------e-/usr/local/games -----------------e-/usr/local/bin -----------------e-/usr/local/share -----------------e-/usr/local/lib -----------------e-/usr/local/etc -----------------e-/usr/local/sbin
注意: 从显示结果来看,这些子目录或文件都设置了“e”属性。
【相关指令】chattr
2.10 mattrib指令:变更或者显示DOS文件的属性
【语法】mattrib [+/-][ahrs][-/X][文件]或mattrib [-/X][文件]
【功能介绍】该指令用于变更和显示DOS文件的属性。
【参数说明】
【经验技巧】该指令不仅可以查看文件的属性,还可以修改其属性。
【示例2-10】使用指令mattrib显示文件“/home/rootlocal/桌面/demo.txt”的文件属性,输入如下命令:
$ mattrib -/ /home/rootlocal/桌面/demo.txt #显示指定文件的属性
执行上述命令后,程序将会显示文件“demo.txt”的属性,结果如下所示:
r h /home/rootlocal/桌面/demo.txt #只读,隐藏属性
注意: 程序显示文件属性时,会将文件的属性放置到文件路径之前。
【相关指令】mdel,mdir,mtools,mzip
2.11 mc指令:提供菜单式的文件管理程序
【语法】mc [-abcdfhkPstuUVx][-C <参数>][-l<文件>][-v<文件>][目录]
【功能介绍】该指令用于提供菜单式的文件管理程序。
【参数说明】
【经验技巧】该指令执行之后,将会调用菜单式的文件管理程序。
【示例2-11】使用指令mc打开菜单式的文件管理程序,输入如下命令:
$ mc #直接执行指令即可
该指令执行以后,用户可以看到菜单式的文件管理程序会被打开。
注意: 菜单式的文件管理程序界面分为4个部分。
【相关指令】mcedit
2.12 mcopy指令:复制DOS文件
【语法】mcopy [-bnmpQt/][源文件][目标文件或目录]
【功能介绍】该指令用于复制DOS文件。
【参数说明】
【经验技巧】
■ mcopy指令是一种mtools工具指令,可以在DOS系统中复制文件或者在DOS与Linux操作系统之间进行文件复制。
■ mcopy指令会根据DOS磁盘驱动器代号出现的位置来判断如何复制文件。
【示例2-12】使用指令mc打开菜单式的文件管理程序,输入如下命令:
$ mcopy -n /home/rootlocal/桌面/demo.txt /home/rootlocal/桌 面/democopy.txt #复制文件
以上命令执行后,指令mcopy将会在桌面上复制源文件“demo.txt”,并且将其重新命名后粘贴为新文件“democopy.txt”。
【相关指令】mdel,mmove,mv
2.13 mdel指令:删除DOS文件
【语法】mdel [文件…]
【功能介绍】该指令用于删除DOS文件。
【参数说明】该指令的唯一参数表示将执行删除操作的文件名或者其绝对路径。
【经验技巧】
■ mdel指令是一种mtools工具指令,与DOS系统下的del指令相似,并且只能够删除DOS文件系统中的文件。
■ 删除操作的文件路径可以是相对路径,也可以是绝对路径。
■ 该指令删除目录或者文件夹时,会默认将其中的所有文件全部删除。所以,用户使用时应当注意。
【示例2-13】使用指令mdel删除桌面上的文件“demo.inf”,输入如下命令:
$ mdel /home/rootlocal/桌面/demo.inf #删除指定文件
以上命令执行以后,mdel会将桌面上的文件“demo.inf”删除。
【相关指令】mdir,mcopy,mmove,mv
2.14 mdir指令:显示DOS目录
【语法】mdir [-afwx/][目录]
【功能介绍】该指令用于显示DOS目录中的内容。
【参数说明】
【经验技巧】
■ 指令mdir是一种mtools工具指令,与DOS下的dir指令相似,可用于显示DOS文件系统中指定目录中的内容。
■ 目录路径可以是相对路径,也可以是绝对路径。
【示例2-14】使用指令mdir显示查看指定目录“a:\”中的所有内容,输入如下命令:
$ mdir -/ a:\* #显示a盘中的内容
以上命令执行后,mdir将显示指定盘“a:\”中的所有子目录及其中的文件信息,如下所示:
Volume in drive A has no label #加载信息 Volume Serial Number is 13D2~055C Directory for A:\ #以下为目录信息 ./TEST <DIR> 2011-08-23 16:59 #显示格式为文件名,目录大小,修改时间 AUTORUN.INF 2652011-08-23 16:53 AUTORUN.BAT 432011-08-23 16:56 3 files 308 bytes #统计总大小 724325 bytes free #剩余空间
【相关指令】mdel,mcopy,mmove,mv
2.15 mktemp指令:建立缓存文件
【语法】mktemp [-qu][文件名参数]
【功能介绍】该指令用于创建临时缓存文件。
【参数说明】
【经验技巧】
■ 指令mktemp可以建立系统的缓存文件,该类文件可以满足某些程序在运行时的需要,并且能够保证其安全性。
■ 如果该指令执行成功,则会将文件扩展名“XXXX”使用随机数代替。
【示例2-15】使用指令mktemp创建临时缓存文件“temp. XXXX”,输入如下命令:
$ mktemp temp.XXXX #创建临时文件
以上命令执行后,指令mktemp将会创建一个临时缓存文件“temp.XXXX”。
注意: 用户可以使用ls指令查看该缓存文件。
【相关指令】mdir,mtools
2.16 mmove指令:在MS-DOS文件系统中实现文件或目录的移动、名称修改
【语法】mmove [源文件或目录…][目标文件或目录]
【功能介绍】该指令用于在DOS文件系统中,实现文件或目录的移动、名称修改。
【参数说明】
【经验技巧】
■ 如果命令参数中忽略了目标文件或目标目录的渠道卷标,将会默认与原文件具有相同的卷标。如果所有的参数都忽略了驱动器卷标,系统将默认为驱动器A。
■ 指令mmove可以用于移动子目录,该指令只能够用于同一个文件系统中。否则,将出现指令使用错误。
【示例2-16】使用指令mmove将文件“autorun.bat”移动到目录“test”中,输入如下命令:
$ mmove autorun.bat test #移动文件到目录test中
以上命令执行以后,指令mmove会将文件“autorun.bat”移动到指定目录“test”中。
注意: 用户可以使用mdir指令查看移动后的文件或目录信息。
【相关指令】mdir,mdel,mcopy
2.17 mread指令:将MS-DOS文件复制到Linux/UNIX的目录中
【语法】mread [MS-DOS文件…][Linux文件或目录]
【功能介绍】该指令是一种mtools工具指令,可将MS-DOS文件复制到Linux的文件系统中。
【参数说明】
【经验技巧】
■ 一般情况下,该指令可以使用指令mcopy代替其实现复制功能。
■ 指令mread的参数可以使用相对路径或者绝对路径。
【示例2-17】使用指令mread将盘“a:\”中的所有内容复制到当前工作目录下,输入如下命令:
执行该命令前,可以先使用mdir命令查看原来的目录结构。执行mread之后,可使用ls命令再次查看复制之后的文件结构,结果如下所示:
$ mread a:\* ./ #将a盘上的所有文件复制到当前工作目录 $ mdir -/ a:\* #查看a盘中的文件 Volume in drive A has no label #加载信息 Volume Serial Number is 13D2~055C Directory for A:/ #以下为目录信息 ./TEST <DIR> 2011-08-23 16:59 #显示格式为文件名,目录大小,修改时间 AUTORUN.INF 2652011-08-23 16:53 AUTORUN.BAT 432011-08-23 16:56 3 files 308 bytes #统计总大小 724325 bytes free #剩余空间 $ mread A:\* ./ #将a盘上所有文件复制到当前工作目录 $ ls #查看文件或子目录信息 TEST AUTORUN.INF AUTORUN.BAT #显示复制后的内容
【相关指令】mdel,dcopy,mren,mdir,mtools
2.18 mren指令:更改MS-DOS文件或目录的名称,或是移动文件或目录
【语法】mren [源文件或目录…][目标文件或目录]
【功能介绍】该指令用于更改MS-DOS文件或目录的名称,或者是移动文件或目录。
【参数说明】
【经验技巧】
■ mren为MS-DOS工具指令,与DOS下的ren指令相似,可以实现更改MS-DOS文件或目录名称。
■ 源文件必须是磁盘上已经存在的文件,若忽略盘符及路径,则表示当前盘及当前目录的文件。
■ 新文件名是所要更换的文件名称。新文件名称前不可以加与源文件不同的盘符及路径,因为该命令只能更改同一盘上的文件名称。
【示例2-18】使用指令mren将a盘下的文件“autorun.bat”的文件名修改为“auto.bat”,输入如下命令:
$ mren a:\autorun.bat auto.bat #将文件autorun.bat重命名为auto.bat 使用该命令前后使用mdir命令查看并对比,得到结果如下: $ mdir -/ a:\* #查看a盘中的文件 Volume in drive A has no label #加载信息 Volume Serial Number is 13D2~055C Directory for A:\ #以下为目录信息 ./TEST <DIR> 2011-08-23 16:59 #文件名,目录大小,修改时间 AUTORUN.BAT 432011-08-23 16:56 3 files 308 bytes #统计总大小 724325 bytes free #剩余空间 #将文件autorun.bat重命名为auto.bat $ mren a:\autorun.bat auto.bat $ mdir -/ a:\* #再次查看a盘中文件 Volume in drive A has no label #加载信息 Volume Serial Number is 13D2~055C Directory for A:\ #以下为目录信息 ./TEST <DIR> 2011-08-23 16:59 #文件名目录大小 修改时间 #文件名被改为auto.bat,修改时间改为当前系统时间 AUTO.BAT 432011-08-23 16:56 3 files 308 bytes #统计总大小 724325 bytes free #剩余空间
【相关指令】mdel,mmove,mtools
2.19 mshowfat指令:显示DOS文件在FAT中的记录信息
【语法】mshowfat [文件…]
【功能介绍】该指令用于显示DOS文件的FAT信息。
【参数说明】
【经验技巧】
■ 指令mshowfat是一种mtools工具指令,可以显示DOS文件在FAT中的记录编号等信息。
■ 指令mshowfat所使用的参数可以是文件的相对路径或者是绝对路径。
【示例2-19】使用指令mshowfat查看文件“autorun.bat”的FAT信息,输入如下命令:
$ mshowfat autorun.bat #显示指定文件的FAT信息
以上命令执行后,文件“autorun.bat”的FAT相关信息将会被显示出来。
注意: 执行操作的文件必须是DOS文件系统下的文件。
【相关指令】mtools,mtoolstest
2.20 mtools指令:显示mtools支持的指令
【语法】mtools
【功能介绍】该指令主要用于显示mtools所支持的所有指令名称。
【参数说明】该指令没有任何参数。
【经验技巧】
mtools是DOS系统下的一种工具程序,当使用该指令时,将显示所有其支持的指令名称。
【示例2-20】使用指令mtools显示其支持的所有的指令,输入如下命令:
$ mtools #显示所有支持的指令名称
以上命令执行后,其结果显示如图2.1所示。
图2.1 显示所有支持的指令
注意: 如图2.1所示,其显示的所有指令均为mtools工具所支持的。
【相关指令】mshowfat,mtoolstest,mdel,mmove
2.21 mtoolstest指令:测试并显示mtools的相关设置
【语法】mtoolstest
【功能介绍】该指令主要用于测试和实现mtools的设置信息。
【参数说明】该指令没有任何参数。
【经验技巧】
■ mtoolstest是一种mtools工具指令,可以实现读取与分析mtools的配置文件,并在屏幕上显示结果。
■ mtools软件包的配置信息保存在“/etc/mtools/conf”中。
【示例2-21】使用指令mtoolstest查询并显示mtools的相关设置信息,输入如下命令:
$ mtoolstest #显示mtools的设置信息
以上命令执行后,其结果显示如图2.2所示。
图2.2 显示mtools的设置信息
【相关指令】mshowfat,mtools
2.22 mv指令:移动或更名现有的文件或目录
【语法】mv[-bfiuv][--help][--version][-S<附加字尾>][-V<方法>][源文件或目录][目标文件或目录]
【功能介绍】该指令主要用于移动或更名现有的文件或目录。
【参数说明】
【经验技巧】
■ 指令mv还能够实现文件的更名操作。
■ 一般情况下,参数“-i”或“--interactive”使用较多,因为该参数能够有效地防止错误覆盖重要文件。
【示例2-22】使用mv指令移动当前“file1”、“file2”、“file3”这3个文件到当前目录“test”中,输入如下命令:
$ mv file[1-3] test #将文件file1、file2、file3移动到test 目录下
使用该指令之前,首先使用指令“ls”查看当前的文件列表信息,如下所示:
$ ls #查看当前文件列表 file1 file2 file3 #显示文件列表
然后,执行mv指令后,再次使用指令“ls”对目录“test”中的信息进行查看,如下所示:
$ ls test #查看目录“test”中的信息 file1 file2 file3 #显示指定目录中的文件列表信息
注意: 从上面的指令执行情况来看,mv指令已经成功地将3个文件移动到了指定的目录中。
【相关指令】mshowfat,mtools
2.23 od指令:输出文件内容
【语法】od [-A <字码基数>][-j <字符数目>][-N <字符数目>][-s <字符串字符数>][-t <输出格式>][-w <每列字符数>] [--help][--version][文件…]
【功能介绍】该指令主要用于输出指定文件的内容。
【参数说明】
【经验技巧】
■ od指令会读取指定的文件内容,并将其内容以默认八进制字符进行显示。
■ 可以使用od指令查看具有特殊格式的文件内容。
【示例2-23】使用od指令查看文件“demo.txt”中的内容,输入如下命令:
$ od /home/rootlocal/桌面/demo.txt #读取指定文件的内容
以上命令执行以后,程序将以八进制的格式显示文件“demo.txt”中的内容,如图2.3所示。
图2.3 以八进制格式显示文件内容
【相关指令】paste,cp
2.24 paste指令:合并文件的列
【语法】paste [-s][-d <间隔字符>][--help][--version][文件…]
【功能介绍】该指令主要用于合并文件的列数据,即合并多个文件。
【参数说明】
【经验技巧】
■ paste命令的参数“-s”的作用是将单个文件中的多行合并到一行,并显示在标准输出设备上。
■ paste命令只是将文件合并显示,并没有改变源文件的内容。
■ paste命令用于合并文件的行。该命令从在命令行上指定的文件中读取输入。如果出现“-”作为文件名,此命令从标准输入设备中读取。
■ 此命令连接指定文件中的行并把结果行写到标准输出设备中。
【示例2-24】使用paste指令将文件“file”、“testfile”、“testfile1”进行合并,输入如下命令:
$ paste file testfile testfile1 #合并指定文件的内容
但是,在执行以上命令之前,首先使用“cat”指令对3个文件内容进行查看,显示如下所示:
$ cat file #file文件的内容 xiongdan 200 lihaihui 233 lymlrl 231 $ cat testfile #testfile文件的内容 liangyuanm ss $ cat testfile1 #testfile1文件的内容 huanggai 56 zhixi 73
当合并指令“$ paste file testfile testfile1”执行后,程序界面中将显示合并后的文件内容,如下所示:
xiongdan 200 lihaihui 233 lymlrl 231 liangyuanm ss huanggai 56 zhixi 73
若使用paste指令的参数“-s”,则可以将一个文件中的多行数据合并为一行进行显示。例如,将文件“file”中的3行数据合并为一行数据进行显示,输入如下命令:
$ paste -s file #合并指定文件的多行数据
上面的命令执行后,显示的数据内容如下所示:
xiongdan 200 lihaihui 233 lymlrl 231
注意: 参数“-s”只是将testfile文件的内容调整显示方式,并不会改变原文件的内容格式。
【相关指令】join
2.25 patch指令:修补文件
【语法】patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标识符号>][-F <鉴别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][-p <剥离层级>][-r <拒绝文件>][-V <备份方式>][-Y <备份字首字符串>][-z <备份字尾字符串>][--backup-if -mismatch][--binary][--help][--nobackup-if-mismatch] [--verbose][原始文件 <修补文件>]
或者:
patch [-p <剥离层级>] < [修补文件]
【功能介绍】该指令主要用于指定文件的修补操作。
【参数说明】
续表
续表
【经验技巧】
■ patch指令可以利用设置修补文件的方式,修改、更新原始文件。
■ 若一次仅修改一个文件,可直接在指令列表中下达指令依序执行。
■ 如果配合修补文件的方式,则能一次修补大批文件,这也是Linux系统核心的升级方法之一。
【示例2-25】使用patch指令将文件“testfile1”升级,其升级补丁文件为“testfile.patch”,输入如下命令:
$ patch -p0 testfile1 testfile.patch #使用补丁程序升级文件
使用该命令前,可以先使用指令“cat”查看“testfile1”的内容。在需要修改升级的文件与原文件之间使用指令“diff”比较可以生成补丁文件。具体操作如下所示:
$ cat testfile1 #查看testfile1的内容 Hello,This is the firstfile! $ cat testfile2 #查看testfile2的内容 Hello,Thisisthesecondfile! $ diff testfile1 testfile2 #比较两个文件 1c1 <Hello,Thisisthefirstfile! --- >Hello,Thisisthesecondfile! #将比较结果保存到tetsfile.patch文件 $ diff testfile1 testfile2>testfile.patch $ cat testfile.patch #查看补丁包的内容 1c1 <Hello,Thisisthefirstfile! --- >Hello,Thisisthesecondfile! #使用补丁包升级testfile1文件 $ patch -p0 testfile1 testfile.patch patching file testfile1 $cat testfile1 #再次查看testfile1的内容 #testfile1文件被修改为与testfile2一样的内容 Hello,This is the secondfile!
注意: 上述命令代码中,“$ diff testfile1 testfile2>testfile. patch”所使用的操作符“>”表示将该操作符左边的文件数据写入到右边所指向的文件中。在这里,即是指将两个文件比较后的结果写入到文件“testfile.patch”中。
【相关指令】diff
2.26 rcp指令:远程复制文件或者目录
【语法】rcp [-pr][源文件或目录][目标文件或目录]
或者:
rcp [-pr][源文件或目录…][目标文件]
【功能介绍】该指令主要用于远程复制单个或者多个文件、目录。
【参数说明】
【经验技巧】
■ rcp指令用于远程复制文件或目录,如果同时指定两个以上的文件或目录,且最后的目标是一个已经存在的目录,则该指令会把前面所指定的文件或目录复制到该目录中。
■ 由于rcp需要从远程主机复制文件到本地或将文件由本地复制到远程主机,所以需要双方建立信任机制,否则将出现“permission denied”的错误提示信息。
【示例2-26】使用rcp指令复制远程文件到本地进行保存。设本地主机当前账户为rootlocal,远程主机账户为root,要将远程主机(218.6.132.5)主目录下的文件“testfile”复制到本地目录“test”中,则输入如下命令:
rcp root@218.6.132.5:./testfile testfile #复制远程文件到本地 rcp root@218.6.132.5:home/rootlocal/testfile testfile #要求当前登录账户cmd登录到远程主机 rcp 218.6.132.5:./testfile testfile
注意: 指令“rcp”执行以后不会有返回信息,仅需要在目录“test”下查看是否存在文件“testfile”。若存在,则表示远程复制操作成功,否则远程复制操作失败。
【相关指令】scp
2.27 rhmask指令:产生和还原加密文件
【语法】rhmask [加密文件][输出文件]
或者:
rhmask [-d][加密文件][源文件][输出文件]
【功能介绍】该指令主要用于产生和还原加密文件。
【参数说明】
【经验技巧】
■ 执行rhmask指令时,可制作加密过的文件。方便在公开网络上传输文件,而不至于被任意盗用。
■ rhmask指令可以对文件进行加密和解密操作。
【示例2-27】使用指令“rhmask”将加密文件“code.txt”进行加密后,另存为输出文件“demo.txt”,输入如下命令:
$ rhmask code.txt demo.txt #加密文件
以上命令执行后,文件“code.txt”将被加密后,另存为已经加密的文件“demo.txt”。
注意: 该指令有两种语法,用户可以有选择性地进行使用即可。
【相关指令】umask
2.28 rm指令:删除文件或目录
【语法】rm [-dfirv][--help][--version][文件或目录…]
【功能介绍】该指令主要用于删除文件或目录。
【参数说明】
【经验技巧】
■ 执行rm指令可以删除文件或目录,删除目录必须加上参数“-r”,否则默认情况下将仅删除文件。
■ 使用“-i”参数能防止误删除,该参数会在删除文件前给出提示信息且让用户确认删除,使用该参数可提高系统安全性。
■ 使用参数“-f”可以在不给出任何警告信息的情况下删除文件或目录,因此用户应慎用。
【示例2-28】使用指令“rm”删除当前目录下的“test”子目录,输入如下命令:
$ rm -r test/ #删除当前目录下的子目录“test”
进行删除操作前,使用指令“ls”查看当前目录结构,操作如下所示:
$ ls #查看当前目录结构 examples.desktop README file test testfile1 testfile 执行删除操作之后,其结果如下所示: $ rm test/ #直接删除将产生错误 rm: 无法删除"test/":是一个目录 #提示不能直接删除目录 $ rm -r test/ #使用参数-r删除目录 $ ls #再次查看当前目录 examples.desktop README file testfile1 testfile #test子目 录已被删除
【相关指令】rmdir,mv
2.29 slocate指令:查找文件或目录
【语法】slocate [-u][--help][--version][-d <目录>][查找的文件]
【功能介绍】该指令主要用于查找文件或者目录。
【参数说明】
【经验技巧】
■ slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。
■ 与指令“locate”一样,使用slocate可以不指定路径,就可以显示详细位置信息。
■ slocate是指令“locate”的安全增强版。在大多数Linux发行版本中,指令“locate”实际上是“slocate”的符号链接。
【示例2-29】使用指令“slocate”显示文件名中含有关键字“fdisk”的文件路径信息,输入如下命令:
$ slocate fdisk #显示文件名中含有fdisk关键字的文件的路径信息
执行以上命令后,指令执行的输出信息如下:
$ slocate fdisk #显示文件名中含有fdisk关键字的文件的路径信息 /root/cfdisk #搜索到的文件路径列表 /root/fdisk /root/sfdisk /usr/include/grub/ieee1275/ofdisk.h /usr/share/doc/util-Linux/README.cfdisk /usr/share/doc/util-Linux/README.fdisk.gz /usr/share/doc/util-Linux/examples/sfdisk.examples.gz
【相关指令】locate
2.30 split指令:切割文件
【语法】split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
【功能介绍】该指令主要用于文件的切割操作。
【参数说明】
【经验技巧】
■ 一般情况下,特别大的文件很难用文本编辑器直接打开,可以先使用指令“split”将其进行分割后,再用文本编辑器打开。
■ 该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
【示例2-30】使用指令“split”将文件“README”每6行切割成一个文件,输入如下命令:
$ split -6 README #将README文件每六行分割成一个文件
以上命令执行后,指令“split”会将原来的大文件“README”切割成多个以“x”开头的小文件。而在这些小文件中,每个文件都只有6行内容。例如,使用指令“ls”查看当前目录结构,如下所示:
$ ls #执行ls指令 #获得当前目录结构 README xaa xad xag xab xae xah xac xaf xai
【相关指令】csplit
2.31 tee指令:读取标准输入的数据,并将其内容输出成文件
【语法】tee [-ai][--help][--version][文件…]
【功能介绍】该指令主要用于读取标准输入的数据,并将其内容输出成文件。
【参数说明】
【经验技巧】
■ 使用参数“-a”可以将输入的内容追加到指定文件的后面。
■ 指令“tee”可以从标准输入设备读入数据并打印一行到标准输出设备上,同时还可以将其保存为多个文件。
■ 指令“tee”存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。
【示例2-31】使用指令“tee”将用户输入的数据同时保存到文件“file1”和“file2”中,输入如下命令:
$ tee file1 file2 #在两个文件中复制内容
以上命令执行后,将提示用户输入需要保存到文件的数据,如下所示:
My Linux #提示用户输入数据 My Linux #输出数据,进行输出反馈
此时,可以分别打开文件“file1”和“file2”,查看其内容是否均是“My Linux”即可判断指令“tee”是否执行成功。
【相关指令】cp,mcopy
2.32 tmpwatch指令:删除缓存文件
【语法】tmpwatch [-afqv][--test][超期时间][目录…]
【功能介绍】该指令主要用于删除暂存的临时文件,以节省磁盘空间。
【参数说明】
【经验技巧】
■ 该指令的工作前提是将不常用的文件集中到一个目录中,然后利用其对该目录进行时间设置。此时,指令“tmpwatch”将会自动检测该目录下的文件是否过期,若过期将自动删除。
■ 执行该指令后,可删除不必要的暂存文件,可以设置文件超期时间,单位以小时计算。
■ 运行该指令需要管理员(root)权限,在普通用户下运行该指令将会提示指令未找到。
【示例2-32】使用指令“tmpwatch”删除目录“/tmp”中超过一天未使用的文件,输入如下命令:
$ tmpwatch 24 /tmp/ #删除/tmp目录中超过一天未使用的文件
以上命令执行后,其执行结果如下所示:
removing directctmp/orbit-tom if not empty
注意: 该指令需要root权限,因此在使用tmpwatch命令前应该使用su命令切换用户。切换管理权限操作如下所示:
$ su #切换到root用户 口令:********** #输入用户密码
【相关指令】rm
2.33 touch指令:修改文件或目录的时间
【语法】touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
或者:
touch[-acfm][--help][--version][日期时间][文件或目录…]
【功能介绍】该指令主要用于修改文件或者目录的时间属性,包括存取时间和更改时间。
【参数说明】
【经验技巧】
■ 文件的时间属性记录了对文件的所有操作时间。而指令“touch”可以对这些时间值进行修改。但是,前提条件是操作者对该文件具有写权限。另外,指令“touch”只能改变文件的最后访问时间和最后修改时间。
■ 该指令搭配适当的shell通配符可以批量创建空文件。
■ 使用该指令可以创建原来不存在的空文件,新建的空文件的最后访问时间和最后修改时间均为当前系统时间。
■ 如果不使用参数“-r”、“-t”,则文件的时间属性将被修改为当前系统时间。
【示例2-33】使用指令“touch”修改文件“testfile”的时间属性为当前系统时间,输入如下命令:
$ touch testfile #修改文件的时间属性
首先,使用ls命令查看testfile文件的属性,如下所示:
$ ls -l testfile #查看文件的时间属性 #原来文件的修改时间为16:09 -rw-r--r--1 hdd hdd 552011-08-22 16:09 testfile
执行指令“touch”修改文件属性以后,并再次查看该文件的时间属性,如下所示:
$ touch testfile #修改文件时间属性为当前系统时间 $ ls -l testfile #查看文件的时间属性 #修改后文件的时间属性为当前系统时间 -rw-r--r--1 hdd hdd 552011-08-22 19:53 testfile
使用指令“touch”时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件“file”,输入如下命令:
$ touch file #创建一个名为“file”的新的空白文件
【相关指令】chattr
2.34 umask指令:指定在建立文件时预设的权限掩码
【语法】umask [-S][权限掩码]
【功能介绍】该指令主要用于指定文件创建时所预设的权限掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。
【参数说明】
【经验技巧】
■ 权限掩码是由3个八进制的数字所组成的,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
■ 该指令可以不使用任何参数而直接使用,表示获取当前的权限掩码。
【示例2-34】使用指令“umask”查看当前权限掩码,则输入下面的命令:
$ umask #获取当前权限掩码
上面的指令执行以后,将返回相应的权限掩码,具体如下所示:
644
以上返回的权限掩码表示为新建文件的权限。
注意: 新创建的目录,权限一般应该是755(计算机内部按与运算求得权限),但是对于新创建的普通文件,权限并不是755。由于umask掩码对于普通文件的执行权限不起作用,要排除执行权限,因此新建文件的权限应该为644。
如果需要设置权限掩码,则直接在命令后面接将设置的权限掩码即可,命令如下所示:
$ umask 044 #设置权限掩码
注意: 以上命令表示将设置当前权限掩码为八进制数据“044”。
【相关指令】chmod
2.35 whereis指令:查找文件
【语法】
whereis [-bfmsu][-B <目录>…][-M <目录>…][-S <目录>…] [文件…]
【功能介绍】该指令主要用于找到指定程序的源文件、二进制文件或手册。
【参数说明】
【经验技巧】
■ 该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
■ 该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
【示例2-35】使用指令“whereis”查看指令“bash”的位置,输入如下命令:
$ whereis bash #查看指定指令的程序路径和man手册页路径
上面的指令执行后,输出信息如下所示:
bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz
注意: 以上输出信息从左至右分别为查询的程序名、bash路径、bash的man手册页路径。
如果用户需要单独查询二进制文件或帮助文件,可使用如下命令:
$ whereis -b bash #显示bash命令的二进制程序 $ whereis -m bash #显示bash命令的帮助文件
输出信息如下:
$ whereis -b bash #显示bash命令的二进制程序 bash: /bin/bash /etc/bash.bashrc /usr/share/bash# bash命令 的二进制程序的地址 $ whereis -m bash #显示bash命令的帮助文件 bash: /usr/share/man/man1/bash.1.gz #bash命令的帮助文件地址
【相关指令】find,locate,slocate,which
2.36 which指令:查找文件
【语法】which [参数选项]
【功能介绍】该指令主要用于查找文件。相对于其他命令,指令“which”是在更小范围内查找文件,只在环境变量中查找指定的文件。
【参数说明】
【经验技巧】
■ 该指令会在环境变量“$PATH”中设置的目录中查找符合条件的文件。
■ 该指令一般用于安装新的软件时,检查路径设置是否成功。若成功将会显示该执行文件的全部路径,否则将显示$PATH的内容。
■ 该指令对文件名是全部匹配的,而locate是部分匹配的。例如,“which test”查找的是环境变量中的文件test,而“locate test”是查找所有包含字符串“test”的文件。
【示例2-36】使用指令“which”查看指令“bash”的绝对路径,输入如下命令:
$ which bash #查看指定指令的绝对路径
上面的指令执行后,输出信息如下所示:
/bin/bash #bash可执行程序的绝对路径
【相关指令】find,locate,slocate,whereis
2.37 cat指令:把档案串连接后传到基本输出设备
【语法】cat [-bns] [--help] [--version] fileName
【功能介绍】该指令主要用于将档案串连接后传送到基本输出设备中显示或者通过“>文件”形式保存到文件中。
【参数说明】
【经验技巧】
■ 该指令主要是为指定的文件内容添加行号以后,输出到屏幕等标准输出设备上进行显示或者保存到另一文件中。
■ 利用该指令可以将指定文件内容输出到标准设备上进行显示的特点,用户可以使用其实现输出、查看文件内容的功能。
【示例2-37】使用指令“cat”将文件“testfile1”中的内容进行行号的添加,并且保存到文件“testfile2”中,输入如下命令:
$ cat -n testfile1 > testfile2 #添加行号并保存到文件
上面的指令执行后,用户可以打开文件“testfile2”查看其内容是否已经添加行号。
【相关指令】od
2.38 chattr指令:修改文件的属性
【语法】chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录]
【功能介绍】该指令主要用于改变文件的第2个扩展文件系统属性。
【参数说明】
【经验技巧】
■ chattr指令所修改的文件属性和指令“chmod”所修改的文件属性是两个不同层次的。前者是基于底层文件系统来设定的,而后者则是从用户的角度来设定的。
■ 这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有8种,具体如下所示。
➢ a:使文件或目录仅仅提供附加用途。
➢ b:不更新文件或目录的最后存取时间。
➢ c:将文件或目录进行压缩存放。
➢ d:将文件或目录排除误操作之外。
➢ i:不能够随意更改移动文件或目录。
➢ s:保密性删除文件或目录。
➢ S:即时更新文件或目录。
➢ u:防止文件或目录被意外删除。
【示例2-38】使用指令“chattr”将文件“testfile”的属性进行修改,并为其添加属性“a”,输入如下命令:
$ chattr +a testfile #为指定文件添加属性“a”
为了对比,在使用指令“chattr”之前,可以使用指令“lsattr”查看原有的属性,结果如下:
$ lsattr testfile #查看testfile属性 ---------------------------testfile
注意: 在输出结果中,属性都是减号,表示还没有对此文件设置任何的ext2文件系统属性。
接下来使用指令“chattr”为文件“testfile”添加属性“a”,并再次查看文件属性,结果如下:
$ chattr +a testfile #为testfile文件添加a属性,此时无输出 $ lsattr testfile #再次查看testfile属性 -----a------------- testfile #testfile文件属性已经被修改
【相关指令】lsattr,mattrib
2.39 chgrp指令:变更文件或目录的所属群组
【语法】chgrp[-cfhRv][--help][--version][所属群组][文件或目录…]
或者:
chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录…]
【功能介绍】该指令主要用于变更文件或目录的所属群组,设置方式采用群组名称或群组识别码。
【参数说明】
【经验技巧】
■ 如果大量文件需要改变所有权,而这些文件又在同一目录下,则可使用参数“-R”一次性完成修改;如果修改的文件名有一定的规律,则可以借助通配符来简化操作。
■ 这目标文件或目录必须存在。引用的文件或目录也必须存在。
■ 指定的组用户必须是系统中存在的。
■ 组名可以使用组ID代替。
■ 在UNIX系统中,文件或目录权限的掌控由拥有者及所属群组来管理。用户可以使用指令“chgrp”去变更文件与目录的所属群组。
【示例2-39】使用指令“chgrp”修改文件“testfile”的文件属性,使其所属组变为“root”组,输入如下命令:
$ chgrp -v 0 testfile #修改群组属性
注意: 其中,参数“-v”是显示详细的指令执行过程,参数“0”表示所属组ID为0,即root组。
使用该命令前,先使用指令“ls”查看文件原有的属性,命令如下所示:
$ ls-l testfile #查看原有属性 -rw-r--r--1 cmd cmd 5982011-09-04 13:57 testfile
以上输出信息从左至右依次表示文件类型及权限、链接数、所有者、所属组、大小、最后访问时间、文件名。
然后,再执行指令“chgrp”,并且再次查看属性,执行情况如下所示:
$ chgrp -v 0 testfile #改变testfile文件属性 changed group of 'testfile' to 0 #更改文件属性 $ ls-l testfile #查看更改后的属性 #属性结果显示所属组改为root -rw-r--r--1 cmd root 5982011-09-04 14:00 testfile
注意: 从指令的执行结果来看,文件“testfile”所属的组已经被修改为“root”组。一般情况下,不提倡使用参数“-v”,而这里主要是为了使读者能详细地了解修改的过程,实际应用中读者可以根据情况决定是否使用。
【相关指令】chown
2.40 chmod指令:变更文件或目录的权限
【语法】chmod [-cfRv][--help][--version][<权限范围>+/-/=<权限设置…>][文件或目录…]
或者:
chmod [-cfRv][--help][--version][数字代号][文件或目录…]
或者:
chmod [-cfRv][--help][--reference=<参考文件或目录>][--version] [文件或目录…]
【功能介绍】该指令主要用于更改指定文件或目录的权限。
注意: 该指令有3 种使用语法,用户可以根据实际需要选择其一即可。
【参数说明】
【经验技巧】
■ 该指令主要用于更改文件或目录的访问权限,Linux系统提供了字符方式和八进制方式改变文件的访问权限。
■ 该指令不能修改符号链接的权限。当需要使用该命令改变符号链接的权限时,实际改变的是符号链接所指向的文件的权限。
■ 如果使用该指令的参数“-R”进行递归操作,则指令“chmod”将忽略所遇到的符号链接。
■ 修改权限时,要注意root组的用户可以对具有执行权限的文件设置suid权限。这种方式使权限的设置更加灵活,但在许多情况下,这也被认为是一个安全隐患。另外,普通用户是不能给root用户的文件设置suid权限的。
■ 目录的读权限表示可以用指令“ls”列出目录内容。目录的执行权限表示可以利用指令“cd”进入目录。目录的写权限表示可以在目录下创建文件或新的子目录。
■ 在Linux系统中,文件或目录权限的控制分别以读取、写入、执行3种一般权限来进行区分,另有3种特殊权限可供使用。然后,再搭配拥有者与所属群组管理权限范围。具体的权限范围的表示方法如下所示。
➢ u:即文件或目录的拥有者User。
➢ g:即文件或目录的所属组群Group。
➢ o:Other,除了文件或目录拥有者及其所属群组之外,其他用户都属于此范围。
➢ a:All,即全部用户。
➢ [+-=]:分别表示增加权限范围、取消权限范围及设置指定权限。
■ 在实际使用时,用户仅需使用权限代号即可,该代号的表示如下所示。
➢ r:读取权限,数字代号为“4”。
➢ w:写入权限,数字代号为“2”。
➢ x:执行或切换权限,数字代号为“1”。
➢ -:不具任何权限,数字代号为“0”。
➢ s:特殊权限设置。例如,“suid”权限和“sgid”权限。
【示例2-40】使用指令“chmod”修改文件“testfile”的属性,为其增加所有者执行权限,组内增加写权限,其他用户减去读权限,则输入下面的命令:
$ chmod u+x,g+w,o-r testfile #增加所有者执行权限,组内增加写权限,其他用户减去读权限
为了更加清楚整个过程,首先通过指令“ls”查看其原始属性,文件“testfile”的原属性如下:
$ ls-l testfile #查看原有属性 #所有者可读、可写,组内可读,其他用户可读 -rw-r--r--1 cmd cmd 5982011-09-04 14:57 testfile
接下来,使用指令“chmod”修改文件属性,并再次查看属性,以便进行对比,其结果如下:
#增加所有者执行权限,组内增加写权限,其他用户减去读权限 $ chmod u+x,g+w,o-r testfile $ ls-l testfile #查看修改后的属性 -rwxrw----1 cmd cmd 5982009-09-01 15:00 testfile #所有者可读、可写、可执行,组内可读可写,其他用户不可读、不可写、不可 执行
【相关指令】chown,chgrp
2.41 chown指令:变更文件或目录的拥有者或所属群组
【语法】chown [-cfhRv][--dereference][--help][--version][拥有者 <所属群组>][文件或目录…]
或者:
chown [-chfRv][--dereference][--help][--version][.所属群组][文件或目录…]
或者:
chown [-cfhRv][--dereference][--help][--reference=<参考文件或目录>][--version][文件或目录…]
【功能介绍】该指令主要用于变更文件或目录的拥有者或所属群组。
【参数说明】
【经验技巧】
■ 当批量修改同目录下的文件的所有者和组信息时,可以使用参数“-R”。如果被修改文件命名有一定的规则,则可使用通配符。
■ 该指令指定的用户名和组信息可以使用用户ID和组ID来代替。
■ 可以使用指令“chown”修改文件与目录的拥有者或所属群组,设置方式采用用户名称或用户识别码,设置群组则用群组名称或群组识别码。
【示例2-41】使用指令“chown”修改文件“testfile”的所有者为“root”,输入如下命令:
#修改文件所有者为root,-v参数为显示详细过程 $ chown-v root testfile
为了使读者更加清楚过程,首先通过指令“ls”查看其原属性,该文件的原属性如下所示:
$ ls -l testfile #查看原属性 #所有者为cmd,所属组为cmd -rw-r--r--1 cmd cmd 5982011-09-04 15:05 testfile
然后,执行指令“chown”修改其所属组,并且再次查看属性,结果如下所示:
$ chown -v root testfile #修改属性 changed ownership of ‘testfile’ to ‘root’ $ ls -l testfile #查看修改后的属性 #文件所有者改为root -rw-r-r--1 root cmd 5982011-09-04 15:07 testfile
【相关指令】chgrp
2.42 cksum指令:检查文件的CRC是否正确
【语法】cksum [--help][--version][文件…]
【功能介绍】该指令主要用于检查文件的CRC是否正确。确保文件从一个系统传输到另一个系统的过程中不被损坏。
这种方法要求校验和在源系统中被计算出来,在目的系统中又被计算一次,两个数字进行比较,如果校验和相等,则该文件被认为是正确传输了。
注意: CRC是指一种排错检查方法,即循环冗余校验法。
【参数说明】
【经验技巧】指定文件交由指令“cksum”进行校验后,该指令会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为“-”,则指令“cksum”会从标准输入设备中读取数据。
【示例2-42】使用指令“cksum”计算文件“testfile1”的完整性,输入如下命令:
$ cksum testfile1 #对指定文件进行CRC校验
以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:
1263453430 78 testfile1 //输出信息
上面的输出信息中,“1263453430”表示校验码,“78”表示字节数。
注意: 如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。
【相关指令】sum,md5sum
2.43 cmp指令:比较两个文件是否有差异
【语法】cmp [-clsv][-I <字符数目>][--help][第一个文件][第二个文件]
【功能介绍】该指令主要用于比较两个指定的文件是否存在差异。
【参数说明】
【经验技巧】
■ 当相互比较的两个文件完全一样时,则该指令不会显示任何信息。
■ 若发现有差异,预设会显示出第一个不同之处的字符和列数编号。
■ 若不指定任何文件名称或是所给予的文件名为“-”,则该指令将从标准输入设备中读取数据。
【示例2-43】使用指令“cmp”比较文件“testfile”和文件“testfile1”两个文件,则输入下面的命令:
$ cmp testfile testfile1 #比较两个指定的文件
在上述指令执行之前,使用指令“cat”查看两个指定的文件内容,如下所示:
$ cat testfile #查看文件内容 Absncn 50 #显示文件“testfile” Asldssja 60 Jslkadjls 85 $ cat testfile1 #查看文件内容 Absncn 50 #显示文件“testfile1” AsldssjE 62 Jslkadjls 85
然后,再执行指令“cmp”,并返回比较结果,具体如下所示:
$ cmp testfile testfile1 #比较两个文件 testfile testfile1 有差异:第8字节,第2行
注意: 在比较结果中,只能够显示第一比较结果。
【相关指令】diff
2.44 cp指令:复制文件或者目录
【语法】cp [-abdfilpPrRsuvx][-S <备份字尾字符串>][-V<备份方式>][--help][--spares=<使用时机>][--version][源文件或目录][目标文件或目录] [目的目录]
【功能介绍】该指令主要用于复制文件或目录。
【参数说明】
【经验技巧】
■ 使用该指令且使用“-i”参数复制文件时,在覆盖已经存在的目标文件时会给出提示信息,以保证重要文件不会被覆盖。
■ 如果需要复制的文件是多个文件的列表,则目标文件应该是一个目录名,且已经存在。如果磁盘空间紧张,可以使用该指令的“-l”、“-s”参数,为源文件创建硬链接或符号链接,以节省磁盘空间。
■ 该指令使用“-l”参数为源文件创建硬链接时要求源文件和目标文件必须在同一文件系统之下。
■ 该指令可以将单个文件复制到一个具体的文件名或一个已经存在的目录下,也可以复制多个文件到一个指定的目录中。
■ 该指令如果同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。
【示例2-44】使用指令“cp”将当前目录“test/”下的所有文件复制到新目录“newtest”下,输入如下命令:
$ cp –r test/ newtest #复制目录
注意: 用户使用该指令复制目录时,必须使用参数“-r”或者“-R”。
用户可以使用指令“dir”查看指令“cp”执行前后两个指定目录的内容,就可以知道该指令是否执行成功。
【相关指令】dd
2.45 cut指令:输出指定长度的文字
【语法】cut [-num1][-num2][filename]
【功能介绍】该指令主要用于输出指定长度的文字。
【参数说明】
【经验技巧】该指令主要是显示参数[-num1]和[-num2]之间的内容,而其余位置的内容将被忽略。
【示例2-45】使用指令“cut”输出显示文件“testfile”中第2~6个字元,则输入下面的命令:
$ cut –c2 6 testfile #输出指定宽度的文字
在执行上面的命令之前,首先使用指令“cat”查看一下文件的内容,如下所示:
$ cat testfile #显示内容 Liang wei 25
接下来,执行指令“cut”以后,可以看到输出的指定文件,如下所示:
iang
注意: 从上面的输出结果来看,指令“cut”将一个空格字符也是作为一个字元进行处理的。
【相关指令】od,paste
2.46 indent指令:调整C源代码文件的格式
【语法】indent [参数选项][源文件]
或者:
indent [参数选项][源文件][-o目标文件]
【功能介绍】该指令主要用于调整C源代码文件的格式。
【参数说明】
续表
续表
【经验技巧】该指令主要是可以辨识C语言的源代码文件,并对其加以格式化,以方便程序员阅读、修改等操作。
【示例2-46】使用指令“indent”将C语言源文件“test.c”中所有的sizeof后面添加一个空格,输入如下命令:
#对指定源文件进行格式化 $ indent –bs /home/rootlocal/桌面/test.c
执行上面的命令后,用户可以打开指定的源文件查看在sizeof后面是否都添加了一个空格。
注意: 由于该指令的参数非常多,所以用户可以根据实际需要选择适合的参数进行使用即可。
【相关指令】locate,find,file