摘要:file、cat、more、less、head、tail、touch、重定向、cut、sort、uniq、paste、join、tr、wc
在<Linux系统简介>篇中,我们已经知道了Linux中一切皆为文件,配置文件保存为纯文本格式,因此,用户需要熟悉掌握处理文件相关的操作。本篇及接下来几次文章,我们将逐步学习Linux文件管理相关的知识,相信,学完文件管理这部分,我们将会更加熟练、理解Linux操作系统。
今天,我们要学习如何操作文件,包括文件的访问、创建、移动、复制及删除,和对文件内容进行编辑。
一、文件查看
在学习查看文件内容前我们先学一个命令:file命令(查看待访问对象是文件还是目录)。file命令跟前面我们学到的ls –F命令效果一致,只不过file后必须接待查看对象名。
[xiaosheng@localhost ~]$ file xiao.txt xiao.txt:ASCII text
好啦!正式开始学习如何查看文件内容吧!在Linux系统中,用户可以通过cat、more、less、head、tail等命令查看文件内容(这几个是专用于查看文件内容的命令,不能对文件内容进行编辑)。
(1)cat命令:将一个或多个文件内容显示在屏幕上。cat命令显示文件内容为一次性显示完,因此不适合用于显示多于一屏以上内容的文件。
cat使用格式及常用选项:
cat [选项]… 文件… -n 显示时对每行进行编号,空行也编号 -b 显示时对每行进行编号,空行除外 -s 将两个或更多个相邻的空行合并成一个空行 -E 每行尾部显示$符号 -A 显示所有特殊符号(Linux下Tab键用^I表示)
(2)more命令:分屏显示文件内容,在未到达文件尾部时可向上翻屏,适合查看大文件;使用方式同man命令,q键退出,这里不再赘述。
(3)less命令:分屏显示文件内容,可向前向后翻页,功能比more命令更强大;使用方式同man命令,q键退出(shift+g键切换到文件末尾、g键切换至文件首部)。
(4)head命令:查看文件首部指定行(默认为前10行)
head使用格式如下:
head –n num filename #num为行数 或者用head –num filename #head命令后直接接 –行数
(5)tail命令:显示文件末尾指定行(默认显示文件尾部10行)
tail用法同head,不过可用+n或-n,+n表示从文件的第n行到末尾,-n表示末尾n行。
tail有一个非常重要的选项-f(或--follow):查看文件尾部时不退出,等待显示后续追加至此文件的新内容,适合监视日志系统的文件(/var/log/messages)
二、文件创建
Linux系统中,用户可通过多种方式创建文件,主要包括通过touch命令、文本编辑器(nano、vi(m))及输出重定向三种方式创建文件。下面我们来一一学习这几种方式:
(1)touch命令:touch命令主要功能为改变文件的时间戳,但可用于创建文件(touch后接一个或多个不存在的文件,即可创建新文件)。
touch使用格式及常用选项:
touch [选项]… 文件… -c #不创建新文件,只改变时间戳 -a #修改访问时间 -m #修改修改时间 -t #指定时间,而不用默认的当前时间 [补充一个命令:stat命令,显示一个文件或文件系统的状态信息]
(2)使用文本编辑器nano或vi(m)
nano命令使用格式:nano filename #将创建并打开filename,可编辑后保存文件。
vi或vim命令使用格式同nano,vi(m)在Linux中是一个非常重要且强大的文本编辑工具,其具体用法我们将在随后的vim专讲中详细学习。
(3)使用输出重定向
在使用重定向(重新定义输入输出方向)前,我们先得知道Linux系统中标准输入和标准输出,前者指从键盘输入信息,后者指从显示器打印信息。Linux中输出信息有两种,标准的命令输出和标准的命令错误输出。
Linux中,用0,1,2三个文件描述符表示这三种输入输出情况:
0:默认输入设备、标准输入,文件描述缩写为stdin
1:默认输出设备、标准输出,文件描述缩写为stdout
2:标准错误输出,文件描述缩写为stderr
重定向输入输出即改变输入输出的方向(来源去向),Linux中用以下符号代表重定向:
>覆盖输出 >> 追加输出 2> 重定向错误输出 2>> 追加错误输出
&> 重定向标准输出或错误输出到同一个文件中
< 输入重定向 << 此处生成文档(<<后要接文档结束符,可自定义,建议使用EOF)
例$ cat >> /home/xiaosheng/x1.txt<< EOF #从键盘输入信息,EOF结束文档,结果写入/home/xiaosheng/x1.txt
重定向一个不存在的文件将会生成一个与此同名的文件。
三、文件移动、复制、删除
文件移动、复制和删除命令分别为mv、cp、rm,用法与操作目录一致(目录需使用递归操作,文件操作不用),使用格式请查看目录管理篇 https://blog.csdn.net/hzau_xiaosheng/article/details/80303424 。
四、文本处理
在windows系统中我们可以对文本进行剪切、排序、统计等,Linux下用户同样可以进行这些操作,并且操作命令功能更强大。(1)cut命令:从一个文件中剪切掉正文字段(fields,也就是列)并将它们送到标准输出(也可重定向输出)。
cut使用格式和常用选项:
cut [选项]… [文件名]… -c :要剪切的字符 -d :指定字段的分隔符(默认为Tab) -f :指定要显示的字段 #-f1,3 表示显示第1和3字段(列)-f1-3 表示显示第1至3字段(列)
(2)sort命令:对正文数据进行排序并将结果送到标准输出,原始文件中的数据不会发生任何变化。
sort使用格式和常用选项:
sort [选项]…[文件名]… -n 按数值大小排序、升序 -r 反向排序、降序 -t 指定字段分隔符 -k 指定以哪个字段为准排序 -u 相同内容只显示一个(排序后相同的行只显示一次;注:相邻且内容相同的行才会只显示一个,不相邻行内容相同会显示) -f 排序时忽略字符大小写
(3)uniq命令:报告或省略重复行,可与sort一起用
uniq使用格式和常用选项:
uniq [选项]… 文件 -c 显示文件中行重复次数 -d 只显示重复的行 -i 忽略字符的大小写 -u 只显示唯一的行,即只出现一次的行
(4)paste命令:将每一个文件中的每一行用Tab字符分割开并顺序地写到标准输出(即横排合并操作)
paste使用格式和主要选项:
paste [选项]… [文件名]… -d 指定输出分隔符
(5)join命令:依据两个文件里共有的某一列,将相应的行拼接成一行(两文件中共有行顺序必须一致)
join使用格式和常用选项:
join [选项] 文件1 文件2 -a filenum 除了显示匹配好的行另外将指定序号(1或2)文件里未匹配行也显示出来 -e string 将需要显示但文件中不存在的域用string代替 -i 忽略大小写 -j field 等同于-1 filed -2 field,-j指定一个域作为匹配字段(列) -t char 以指定字符作为输入输出分隔符 -v filenum 只显示filenum中没匹配的行 -1 field 以文件1中field字段进行匹配 -2 field 以文件2中field字段进行匹配
(6)wc命令:统计文件中行数、单词数和字符(空格也是字符)数
wc使用格式和主要选项:
wc [选项]… 文件 -l 只显示行数 -w 只显示单词数 -m或c 只显示字符数 -L 最长行包含多少字符(不包括行结束符)
(7)tr命令:转换或删除字符(tr后不可直接接文件,需要用输入重定向)
tr [选项]…set1 set2 (将set1转换成set2)
例 tr ‘A-Z’ ‘a-z’ < a.txt > b.txt #将a.txt文件中大写字母转换成小写并输出到b.txt
(8)grep、sed、awk
grep、sed和awk被称为文本处理三剑客,可想是非常的重要的命令,我们将在随后篇章中一一单独学习。
参考资料:马哥Linux、Linux入门到精通