目录
1、文件的显示命令
1.1、cat命令
1.2、more命令
1.3、less命令
1.4、head命令
1.5、tail命令
1.6、touch命令
2、匹配、排序及显示指定内容的命令
2.1、grep命令
2.2、sort命令
2.3、uniq命令
3、查找和比较文件的命令
3.1、comm命令
3.2、diff命令
3.3、cmp命令
3.4、find命令
4、复制、删除和移动文件的命令
4.1、cp命令
4.2、rm命令
4.3、mv命令
5、文件内容统计命令
5.1、wc命令
简单介绍cat、more、less、head、tail、touch等命令
(1)一般格式:
cat [选项] [file]
file不写或者是“ - ”时,表示从命令行窗口输入。(Ctrl+d停止输入)
(2)功能介绍:
cat(concatenate)有以下两种用法:
①显示文件的内容,依次读取由参数file指明的文件,将它们的内容输出到标准输出上(屏幕);
②连接两个或多个文件,如“cat f1 f2 > f3",将f1和f2的内容合并起来,然后通过输出重定向符”>",将它们放入f3文件。
(3)常用选项:
-b,--number-nonblank:从1开始对所有非空输出行编号。
-n,--number:从1开始对所有行编号。
-s,--squeeze-blank:将多个相邻的空行合并为一个空行。
--help:打印该命令的用法,并退出,其返回码表示成功。可以使用“ echo $? "命令来查看返回值(0是正常,非0是出错)
(4)注意:文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所示内容。可以按Ctrl+S键停止滚屏,Ctrl+Q键恢复滚屏,Ctrl+C键终止命令的执行。
(5)示例:
cat f1 (在屏幕上显示文件f1的内容)
cat f1 f2 (同时显示文件f1和f2的内容)
cat f1 f2 > f3 (将文件f1和f2合并后放入f3文件中)
(1)一般格式:
more [选项] file
(2)功能介绍:
more命令是一个基于vi编辑器的文本过滤器,以全屏形式显示文件内容,每次显示一屏,满屏后停下来,并在屏幕底部出现一个提示信息,给出至今已显示的该文件的百分比 “--More--(xx%)"。
(3)常用选项:
-num | 指定一个整数,表示一屏显示多少行。 |
+num | 从行号num开始。 |
-d | 在每屏的底部显示更友好的提示信息。 |
-c或-p | 不滚屏,在显示下一屏前先清屏。 |
-s | 将文件中连续的空白行压缩成一个空白行显示。 |
+/ | 其后的模式指定显示每个文件之前进行搜索的字符串。 |
(4)注意:
(5)示例:
more -dc file1 (显示更友好的提示信息,并在显示下一屏前先清屏。)
more -c -10 file (每屏显示10行,并在显示下一屏前先清屏。)
more +4 (从第4行开始显示)
(1)一般格式:
less [选项] [文件]
(2)功能介绍:
less的作用与more十分相似,less命令也用来分屏显示文件的内容,不同点为less命令允许用户向前或向后浏览文件,而more命令只能向前浏览 。
在此指明”向前“指的是向上的意思;“向后”指的是向下。
(3)常用选项:
-m | 显示类似more命令的百分比 |
-N | 显示每行的行号 |
-o | 将less 输出的内容在指定文件中保存起来 |
-s | 显示连续空行为一行 |
-S | 在单行显示较长的内容,而不换行显示 |
-m | 显示类似more命令的百分比 |
-x | 将TAB字符显示为指定个数的空格字符 |
(4)注意:
(5)示例:
history | less (查看命令历史使用记录并通过less分页显示)
less file.txt (查看file.txt文件)
(1)一般格式:
head [选项] [file]
(2)功能介绍:
head命令在屏幕上显示指定文件file的开头若干行(默认10行),行数由参数指定。
(3)常用选项:
-c,--bytes=[-]N | 显示每个文件的前c个字符数。若数字N前面有 “ — ”,则显示每个文件除最后N个字符以外的内容。 |
-n,--lines=[-]N | 显示每个文件的前n行。若数字N前面有 “ — ”,则显示每个文件除最后N行以外的内容。 |
-v,--verbose | 总是显示文件的标题信息。 |
-q,--quiet,--silent | 不显示文件的标题信息。 |
(4)注意:
(5)示例:
head -v -n 2 test.txt (显示文件标题信息,并显示前2行内容)
head -q test.txt (不显示文件标题信息,默认显示前10行)
head --lines=-5 file 或者 head -n -5 file (显示文件除了最后5行以外的内容)
(1)一般格式:
tail [选项] [file……]
file不写或者是“ - ”时,表示从命令行窗口输入。(Ctrl+d停止输入)
(2)功能介绍:
tail命令显示文件末尾内容(默认10行),若给定的文件不止一个,则在显示每个文件前面加一个文件标题。
(3)常用选项:
-c,--bytes=N | 输出文件尾部的c个字符内容。 |
-n,--lines=N | 显示每个文件的前n行。若数字N前面有 “ +”,则从文件开头的第N行开始显示。 |
-v,--verbose | 总是显示文件的标题信息。 |
-q,--quiet,--silent | 不显示文件的标题信息。 |
-f |
显示文件最新追加的内容,常用来查看更新的日志文件。 |
--pid=<进程号> |
与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
--help |
显示指令的帮助信息 |
--version |
显示指令的版本信息 |
(4)注意:
若表示字符或行数的N值之前有 “ + ”,则从文件开头的第N个字符开始显示。N值后面可以有后缀:(b表示512,k表示1024,m表示1048 576,即1m)。
(5)示例:
tail file (显示文件file末尾的最后10行)
tail +20 file (显示从文件的第20行至文件末尾)
tail -c 10 file (显示文件末尾的10个字符)
(1)一般格式:
touch [选项] file…
(2)功能介绍:
touch命令可以修改指定文件的时间标签(默认更改为系统当前时间)并且不会修改其数据内容;或者创建一个空文件(文件不存在情况下)。
(3)常用选项:
-a | 改变文件的读取、访问时间。atime |
-m | 改变文件的修改时间。mtime |
-c,--no-create | 不创建新文件 |
-d | 同时修改atime与mtime |
-t STAMP | 指定文件的时间记录(不是默认系统时间了),格式与 date 命令相同。STAMP格式为 [[CC]YY]MMDDhhmm[.ss] 其中CC表示年份前两位,YY表示年份的后两位。 |
--help | 显示帮助信息 |
--version | 列出版本讯息 |
(4)注意:
在修改文件的时间属性的时候,用户必须是文件的属主,或拥有写文件的访问权限。
(5)示例:
touch file.txt (创建空文件)
touch file{1..5}.txt (批量创建文件)
(1)一般格式:
grep [选项] 查找模式 [文件1,文件2…]
grep [选项] [-e 查找模式| -f 文件] [文件1,文件2…]
(2)功能介绍:
gerp命令组在文本文件中查找指定模式字符串、正则表达式,并在标准输出设备上显示包括给定字符串模式的所有行。
包含有grep、egrep、fgrep命令。
grep命令一次只能搜索一个指定的模式;
egrep命令等同于grep -E,可以使用扩展的字符串(正则表达式)模式进行搜索;
fgrep命令等同于grep -F,是快速搜索命令,检索固定字符串,但不能识别正则表达式。
(3)常用选项:
-c | 只输出匹配行的数量 |
-b,--byte-offset | 在包含匹配字符串的行前面按照字符(包括换行符)偏移量输出改行在文件中的位置 |
-o | 与-b结合使用,打印匹配的词据文件头部的偏移量(包括换行符),以字符为单位 |
-n | 在输出包含匹配模式的行之前,加上该行的行号(文件首行行号为1) |
-i,--ignore-case | 匹配时,忽略大小写 |
-r,-R,--recursive | 以递归方式查询目录下的所有子目录中的文件 |
-w | 只显示严格匹配的字符串 |
-x | 只显示整个行都严格匹配的行 |
-v | 只显示不包含匹配文本的所有行 |
-h | 查询多文件时不显示文件名 |
-l | 只列出符合匹配的文件名,不列出具体的匹配行 |
-q | 禁止输出任何结果,退出状态表示命令执行完成,可以使用“ echo $? "来查看命令返回结果 |
-f FILE | 从文件FILE中获取模式,每行一个。空文件不含模式,因此不做匹配 |
-E | 将查找模式解释成扩展的正则表达式 |
-F | 将查找模式解释成单纯的字符串,不能匹配正则表达式。 |
(4)注意:
如果没有指定文件或为“ - ”,它们就从标准输入中读取。在正常情况下,每个匹配行被显示到标准输出上。若搜索的文件不止一个,则在每行输出之前加上文件名(默认)。
在文件名列表中可以使用通配符,如“ * ”。
当模式字符串中包含了空格,务必要用双(单)引号将空格引起来,或者使用双(单)引号将整个模式字符串使用单引号引起来。
使用-f选项可以大批地在文件中搜索模式字符串。
(5)示例:
grep -F mengqc /etc/passwd (在密码文件/etc/passwd中查找包含mengqc的所有行)
grep -r ‘print’ mengqc (在menqc目录和子目录下的所有文件中查找字符串print出现的次数)
grep -E '[Mm]ani | [Pp]rint' f1 f2 或者grep -i ‘main | print' f1 f2 (在f1和f2中查找main或者print的所有行,不区分大小写。)
grep -q abcd t1.txt (不显示任何信息,退出状态表示命令执行完成。echo $?命令来查看命令返回结果)
grep -c ^$ t1.txt (查看一个文件中空行的个数)
grep -c ^[^$] t1.txt (查看一个文件中非空行的个数)
(1)一般格式:
sort [选项] [文件列表]
(2)功能介绍:
sort命令将文本文件内容进行排序,并将排序结果标准输出。若不指定文件或者使用“ - ”,则排序内容来自标准输入。(注意:不会修改源文件,可以使用“-o”选项将排序后的文本输出到指定文件)
排序比较是依据从输入文件的每一行中提取的一个或多个关键字进行的。在默认情况下,排序关键字的顺序由系统使用的字符集决定。(默认升序)
(3)常用选项:
-c,--check | 检查给定的文件(按行)是否已经按照顺序排序,若没有则显示出错信息,不排序 |
-u,--unique | 与-c选项一起使用,严格地按顺序检查(重复行视为乱序) |
-o,--output=FILE | 将排序后的结果存入指定的文件。若该文件不存在,则创建一个新文件 |
-m,--merge | 对已经排好序的文件统一进行合并,但不做排序 |
改变排序规则的选项主要有:
-r,--reverse | 按逆序排序,默认是按照升序排序。 |
-R, --random-sort; --random-source=FILE |
乱序,但不对文件本身修改 get random bytes from FILE |
-n | 依照数值的大小排序 |
-f,--ignore-case | 排序时,忽略字母的大小 |
-b | 忽略每行前面开始的空格字符(空格或制表符) |
-M,--month-sort | 将前面3个字母依照月份的缩写进行排序 |
-i,--ignore-nonprinting | 忽略非打印字符 |
-d,dictionary-order | 按字典顺序排序,比较时仅考虑英文字母、数字及空格字符,忽略其他的字符 |
-k,--key=n1[,n2] | 指定从文本行的第n1字段开始至第n2字段(不包括n2字段)之间的内容作为排序关键字。若没有n2,则关键字是从第n1个字段到行尾的所有字段。n1和n2可以是小数形式,如x.y中 |
-t,--field-seperater==SEP | 将指定的”字符SEP"作为字段的分割符 |
(4)注意:
(5)示例:
head myfile > more_h10 (将文件myfile的前10行定向到文件more_h10中)
sort more_h10 (对more_h10排序)
sort -k 3, 3 more_h10 (以第3个字段作为排序关键字,对文件more_h10排序)
(1)一般格式:
uniq [选项] [输入文件[输出文件]]
(2)功能介绍:
命令的作用是用来去除文本文件中连续的、重复的行,只留下其中的一行(注意:不会修改源文件,可以将结果输出到指定文件)。
(3)常用选项:
-d | 只显示重复行 |
-u,--unique | 只显示没有重复的行 |
-c,--count | 打印每行在文本中重复出现的次数(最小次数是1) |
-i, --ignore-case | 比较时忽略大小写差异 |
-f,--skip-fields=N | 忽略比较前N个字段 |
-s,--skip-chars=N | 忽略比较前N个字段 |
(4)注意:
(5)示例:
uniq -c t1.txt (在连续重复行前打印该行从开头到此处出现的次数)
uniq t2.txt (输出t2.txt文件去除连续、重复行后的内容,但不会对源文件修改)
uniq -d t2.txt (只输出连续、重复的行)
uniq -u t2.txt t3.txt (将t2.txt文件中不是连续、重复的行输出到t3.txt文件)
(1)一般格式:
comm [-123] file1 file2
(2)功能介绍:
comm命令对两个已排序的文件进行逐行比较。file和file2是已经排好序的文件。最后输出三列,第一列是file1中特有的,第二列是file2中特有的,第三列是file1和file2共有的。
(3)常用选项:
-1 | 不显示只在第1个文件里出现过的列 |
-2 | 不显示只在第2个文件里出现过的列 |
-3 | 不显示只在第1和第2个文件里出现过的列 |
–help | 在线帮助 |
–version | 显示版本信息 |
(4)注意:
(5)示例:
comm -12 f1 f2 (逐行比较文件f1和f2,输出共有的行)
comm -3 f1 f2 (逐行比较文件f1和f2,第一列输出f1特有的行,第二列输出f2特有的行)
(1)一般格式:
diff [选项] 文件1 文件2
(2)功能介绍:
diff命令逐行比较两个文本文件(不要求文件预先排好序),找出他们的不同,并输出告诉为使两个文件一致,需要修改他们的那些行。若两个文件完全一样,则该命令不显示任何输出。比comm命令能完成更复杂的检查。
diff命令输出的一般形式如下:
n1 a n3,n4 (表示把文件1的n1行附加到文件2的n3~n4行,则二者相同)
n1,n2 d n3 (表示删除文件1的n1~n2行及文件2的n3行,则二者相同)
n1,n2 c n3,n4 (表示把文件1的n1~n2行改为文件2的n3~n4行,则二者相同)
并在后面紧跟着输出受影响的若干行,以“ < ”开头的行属于文件1,以“ > "开头的属于文件2.
例如下图:
(3)常用选项:
-a | diff预设只会逐行比较文本文件 |
-b | 忽略空格造成的差别,例如“hello Word”和“hello word”被看成相同的字符串 |
-B | 忽略空行造成的差别 |
-i | 忽略字母大小写的区别 |
-y | 以并列的方式显示文件的异同之处 |
-W | 在使用-y参数时,指定栏宽 |
-c | 输出格式是带上下文的三行格式 |
-C n | 输出格式是带上下文的n行格式 |
--left-column | 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容 |
--suppress-common-lines | 在使用-y参数时,仅显示不同之处 |
--help | 查看帮助信息 |
(4)注意:
如果指定要比较的是目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录 。
(5)示例:
diff -y -W 50 a.log b.log (以两列格式、栏宽50逐行显示文件的异同)
如下图所示:
注意:”|”表示内容不同,”<“表示后面文件比前面文件少了1行内容,”>”表示后面文件比前面文件多了1行内容。
(1)一般格式:
cmp [选项] [file1] [file2]
(2)功能介绍:
cmp命令对file1和file2两个文件逐个字符进行比较。若二者完全相同,则执行结果不显示任何信息。若发现有差异,则会标出第一个不同之处是第几个字符和第几行。若没有给出文件名或给出的文件名为“ - ",则从标准输入读取数据。
(3)常用选项:
-b,--print-bytes | 显示有差异的字符 |
-i,--ignore-initial=SKIP | 跳过(不做比较)两个文件开头的SKIP字符 |
-n,--bytes=LIMIT | 至多比较LIMIT个字符,并返回剩下的字符。20exit |
-s,--quit,,--silent | 不显示错误信息 |
-l,--verbose | 标示出所有不一样的地方 |
--help | 显示帮助 |
-v,--version | 显示版本信息 |
(4)注意:
(5)示例:
cmp -s file1 file2 (比较file1和file2,不显示错误信息)
cmp -l file1 file2 (比较file1和file2,显示出所有不同的地方)
cmp -i 8 f1 f2 (分别跳过每个文件的开头8个字符,然后比较f1和f2)
(1)一般格式:
find [目录名(路径)] [条件表达式(由选项和参数组成)]
(2)功能介绍:
find命令从指定目录开始递归地搜索其各子目录,查找满足条件(条件表达式)的文件或目录,并对他们进行相应的操作。
(3)常用选项:
-name | 选项后面紧跟字符串pattern,表示查找文件名称与pattern匹配的文件 |
-lname | 选项后面紧跟字符串pattern,表示查找文件名与pattern匹配的符号链接文件 |
-iname | 忽略大小写 |
-amin | 选项后面紧跟时间min(分钟数),表示查找在指定时间min内曾被存取(访问)的文件。 |
-cmin | 选项后面紧跟时间min(分钟数),表示查找在指定时间min内曾被修改的文件。 |
-atime | 选项后面紧跟整数n,表示查找最近被访问的时间在n天前的文件 |
-size | 按大小查找,选项后面紧跟" n[cwbkMG] " c:字节;w:字;b:512字节的块(默认值);k:kb;M:mb;G:gb |
-user | 按用户名称查找 |
-type | 按类型查找,选项后紧跟一个类型c,c可以是:b(快特别文件);c(字符特别文件);d(目录文件);p(命名管道文件);f(普通文件);I(符号链接文件) |
-path | 选项后面紧跟字符串pattern,表示查找路径名与给定字符串pattern匹配的所有文件 |
-depth | 从指定目录下最深层的子目录开始查找 |
-exec | 选项后面紧跟一个指令(command,一般是一些进一步处理的命令;其中字符串 {} 应该用“ ‘ ”括起来,形如 '{}' ;命令以“ \; ”结尾)如果find命令执行成功,则会执行指令,反之,不执行。 |
-ok | 与-exec类型,后面紧跟一个指令,但是会在指令执行前询问是否要执行指令command。y/n |
补充说明:上面表格中的pattern字符串中可以包含通配符 *、?[],并且要使用双引号""引起来。
条件表达式的格式:
(1)该表达式支持逻辑运算符。例如:逻辑与: -a;逻辑或:-o;逻辑非:!(一般用 \! 的形式,防止和shell另做解释)。
(2)复合表达式要用()括起来。
例如:\(-amin 5 -a -name "*.txt" \) (括号转义字符,所以要用\符号)
(4)注意:
若使用find命令时不设置任何参数,则在当前目录下查找子目录和文件,并且将查找到的子目录和文件全部进行显示。
(5)示例:
find . -name "m*.c" (查找当前目录中所有以m开头、以.c结尾的文件)
find / -user linuxprobe -exec cp -a '{}' /root/findresults/ \; (在整个文件系统中找出所有归属于linuxprobe用户的文件并复制到/root/findresults目录中)
find /home \! -name "*.txt" (找出/home目录下不是以.txt 结尾的文件)
find /tep \(-name a.txt -o -name "*.o" \) -atime +7 -exec rm '{}' \);
(1)一般格式:
cp [选项] 源文件或目录 目标文件或目录
(2)功能介绍:
cp命令将源文件或目录复制到目标文件或目录。若源是文件则可是直接使用,不加选项,若源是目录,则需要“ -r ”选项,将整个目录下所有的文件和子目录都复制到目标位置。
(3)常用选项:
-r,-R | 递归复制文件和目录 |
-f,--force | 若目标文件已存在,则会直接覆盖原文件,没有提示信息 |
-i,--interactive | 与-f选项不同,若目标文件已存在,则会询问是否覆盖,用户予以确认 |
-p | 除了复制源文件的内容,还将源文件或目录的修改时间和存取权限复制到目标文件或目录 |
-d | 复制时保留文件存储权限,不复制源文件的符号链接 |
-l | 不复制,而是创建指向源文件的链接文件,链接文件名由目标文件给出 |
-b | 覆盖已存在的文件目标前将目标文件备份 |
-v | 详细显示cp命令执行的操作过程 |
--preserve=[属性表] | 保留指定的属性,默认是存取权限、文件属主、时间标签。可以用来指定其他属性,如链接、所有属性。 |
-a,--archive | 通常用在复制目录时使用,递归地将源目录下的所有子目录及其文件都复制到目标目录中,并保留文件属性(包括存取属性、文件属主、用户组、时间标签等)不变,但不复制源文件的链接。等效于-dr --preserve=all |
(4)注意:
cp命令复制一个文件,而源文件保持不变!
如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么该目标文件的内容将被破坏。
cp命令中所有参数既可以是绝对路径,也可以是相对路径。
所有的目标文件指定的目录必须是已经存在的,cp命令不能创建目录。若没有文件复制的权限,则系统会显示出错信息。
(5)示例:
cp myfile /home/exam1 (将文件myfile复制到目录/home下,并改名为exam1
cp -r /home/mengqc /home/liuzh (将目录/home/mengqc下的所有文件及其子目录复制到目录/home/liuzh中)
cp -i /home/mengqc/m*.c /home/liuzh (交互式将目录/home/mengqc中以m开头的所有.c文件复制到目录/home/liuzh中)
(1)一般格式:
rm [选项] 文件列表
(2)功能介绍:
rm命令删除指定的文件,默认情况下不能删除目录。若文件不可写,则标准输入是tty(终端设备)。默认情况下会进行交互式删除,若用户没有回答y或者Y,则不删除该文件。
(3)常用选项:
f | 忽略不存在的文件,不会出现警告信息。并且不用交互确认 |
-i | 删除前会询问用户是否操作,交互式操作 |
-r/R | 递归删除 |
-v | 显示指令的详细执行过程 |
(4)注意:
使用该命令时一定要小心,一旦删除,就无法修复。
(5)示例:
rm -i test exam (交互式删除文件test、exam)
rm * -rf (注意该命令非常危险,若在根目录下执行这个命令,所有的文件都将删除。说白了就是删库,就看你能不能逃过法网的追捕了,删库是违法的。)
(1)一般格式:
mv [选项] source target
(2)功能介绍:
rm命令用于移动文件或目录,并且可以指定target用来从命名文件或者目录。若目标文件或目录存在,则会覆盖目标文件或目录。
当目标文件是目录时,source可以是多个文件或目录,并且将所有的源文件或目录移至目标目录中。所有移到该目录下的文件或目录都将保留以前的文件名。
(3)常用选项:
-i | 交互式,询问是否删除文件或目录 |
-f | 覆盖已有文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-t,--target-directory=DIRECTORY | 把所有的源文件或目录都移到DIRECTORY所示的目录中 |
-u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
(4)注意:
我们需要特别留意它与复制的区别:mv与cp的结果不同。mv命令好像文件“搬家”,文件名称发生改变,但个数并未增加。而cp命令是对文件进行复制操作,文件个数是有增加的。
(5)示例:
mv file1 file2 (对文件进行重命名)
mv file1 /home1 /home2 (将file1和hone1文件夹下的所有文件都移到home2文件夹下)
mv /home1 . (将home1文件夹下所有文件移到当前目录下)
(1)一般格式:
wc [选项] [文件…]
(2)功能介绍:
wc命令统计指定文件中的字符数、字数、行数,并将统计结果显示输出。若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
(3)常用选项:
-w,--words | 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串 |
-c,--bytes,--chars | 统计字符数 |
-l,--lines | 统计行数 |
-L | 打印最长行的长度 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
(4)注意:
(5)示例:
wc -lw ex1 ex2 (统计文件ex1和ex2的字数和行数)
wc ex1 (统计文件ex1的行数、字数、字符数)