目录
一. 适配符 *
二. man指令 -- 查看手册
三. echo指令 -- 输出字符串到文件
四. cp指令 -- 复制
五. mv指令 -- 重命名或移动文件(剪切)
六. which指令 -- 查看指令所在的路径
七. alis指令 -- 指令重命名
八. cat指令 -- 输出文件内容
九. more指令 -- 查看文件内容
十. less指令 -- 查看文件内容
十一. head指令 -- 查看文件前n行内容
十二. tail指令 -- 查看文件最后n行内容
扩展:如何截取文件指定行数区间的内容
一. 适配符 *
* 在Linux中表示为通配符,可以匹配任何内容。如:*.cpp -- 后缀名为cpp的所有文件、test.* -- 文件名为test,后缀任意的文件。*可以与rm、ls等基本指令匹配,对相关文件进行操作,如:
- ls *.c:拿出所有后缀名为.c的文件。
- ls test.*:拿出所有名为test,后缀任意的文件。
- rm *.c:删除所有后缀为.c的文件。
二. man指令 -- 查看手册
我们不可能记住Liunx的上千条指令,如果需要使用某条指令却不知道其具体使用方法,可以使用man指令查看手册。语法:man [手册号][指令],如:
- man rm:查看rm指令(文件删除)的手册。
- man ls:查看ls指令(文件名输出)的手册。
- man printf:查看printf(输出指令)的手册。
注意:printf也是一条Linux基本指令,可模仿C语言的输出格式来输出。
- 进入man手册之后,可以按Q退出
man指令也可用于查找其本身的手册,man man就是查看man的使用手册。
手册共分为8张,其中最常用的是前3章:
- 1 -- Linux系统下的普通命令。
- 2 -- 系统指令,如fork线程创建。
- 3 -- C语言指令,如printf、scanf。
如果不指定从哪一张中查找,就默认从第一章开始查找,一致查找到第8章。那么,如果直接输入man printf查找的是普通Linux指令printf,而不是C语言中的printf。如果要查看C语言的printf,应当显示指定第三章手册(man 3 printf)。
三. echo指令 -- 输出字符串到文件
- 语法:echo 字符串 >/>> 文件名
- 功能:向文件中写入指定的字符串内容
在Linux下,我们认为一切都是文件,包括键盘、显示器等硬件以及普通文件。Linux下一切皆文件可以从输入输出的角度来理解,如:显示器可以作为内容输出的设备、可以由键盘读取数据,这些硬件具备与我们一般认识中的普通文件相似的特性:可供读写。
如果echo指定输出文件,则默认向显示器输出,可以使用>来进行输出重定向。在默认情况下,如果使用 echo + 输出重定向( > ) 多次向同一文件中写入字符串,那么后一次输入的内容会覆盖前一次的。如图2.2,多次向文件test1.txt输出"hello Linux",但最终文件中只有一个"hello Linux"。
如果不希望echo写入文件的内容覆盖原来的内容,可以使用追加重定向>>,但是 >> 追加重定向会默认换行,如果不希望换行,可以改用printf写入。
还可以使用输出重定向来情况文件内容,语法:> 文件名。< 为输入重定向,cat < 文件名 可以输出文件内容。
- 总结:三大重定向
- > :输出重定向。
- >>:追加重定向。
- <:输入重定向。
四. cp指令 -- 复制
- 语法:cp [选项] 源文件或目录 目标文件或目录
- 功能:复制目录或文件到某一路径(还可以同时重命名)
- 说明:如果同时指定多个目录或文件,如果最后一个参数为已经存在的目录,那会将多个文件或目录复制到最后一个目录下面。如果最后一个参数为不存在的目录,那么会报错。
cp指令常用选项指令:
- -r:递归复制,将一个目录下面的子目录和文件一同复制。如果不显示声明-r,那么就无法复制带有子目录和文件的目录。
- -i:如果存在名称冲突,文件覆盖之前询问用户是否要覆盖。
- -f:强制复制,存在文件名冲突时直接覆盖,不进行询问。
五. mv指令 -- 重命名或移动文件(剪切)
- 语法:mv [选项] 源文件或目录 目标文件或目录
- 功能:1、文件或目录重命名 2、文件或目录的移动 3、移动 + 重命名
- 说明:
- 如果第二个参数时文件名,则mv执行的重命名功能,如果第二个参数是单纯地路径,那么mv执行移动功能。
- 如果第二个参数是 目录/文件名,mv执行 移动 + 重命名 功能。
- 如果第二个参数是已经存在的目录名称,那么第一个参数(源文件或目录)可以有多个,mv会将这些文件均移动值第二个参数的路径下面。
- 选项: -i:覆盖前询问用户是否覆盖 -f:不询问是否覆盖
六. which指令 -- 查看指令所在的路径
- 语法:which [选项] 指令
- 功能:获取指令所在路径
如何看待指令?
- 指令和可执行程序都是可以被执行的,指令就是可执行程序。在执行指令前,首先要在系统特定的路径下去查找指令。
- 指令一定是某种可执行程序,因此,指令和我们自己编写好的代码编译生成的可执行程序,没有任何本质区别。
- 结论:指令的本质就是可执行程序文件,放在特定的路径下(/user/bin/),调用时可以直接去查找。
七. alis指令 -- 指令重命名
- 语法:alis 指令新名词 = '原名称'
- 取消重命名:alis 已经存在的新名称 = ''
如:ll指令和ls -l指令的功能相同,其本质就是将ls -l重命名为ll
八. cat指令 -- 输出文件内容
- 语法:cat [选项] 文件名
- 选项:(1)-b:输出非空行号 (2)-n:输出所有行号 (3)-s:不输出多行空行
九. more指令 -- 查看文件内容
cat指令会一次性输出全部文件内容,适合查看小文件,不适合查看大文件。more指令会在打印满屏幕后暂停,按回车键才会继续打印下面的内容。
- more -n<行号> 文件名 -- 如more -500 test.txt 为打印test.txt的前500行内容。
- /字符串:向下查找指定的字符串内容。
- q:退出more。
more指令有其固有缺陷:只能向下翻,不能向上翻。
使用脚本语言cnt=1; while [ $cnt -le 10000 ]; do echo "hello Linux $cnt"; let cnt++; done > test.txt生成具有10000行内容的文件test.txt(每行都带有行编号)测试more指令的功能。
十. less指令 -- 查看文件内容
less指令的功能和使用方法与more指令基本一致,但less指令避免了more指令的最大缺陷,它既可以上翻查找,也可以下翻查找。
- /字符串:向下查找字符串
- ?字符串:向上查找字符串
十一. head指令 -- 查看文件前n行内容
- 语法:head [参数] 文件名
- 说明:head -n<行数> 文件名 指令会在屏幕上打印文件前n行,如果-n省略,那么默认10行。
十二. tail指令 -- 查看文件最后n行内容
- 语法:tail [参数] 文件名
- 说明:tail -n<行数> 文件名 -- 在屏幕上打印最后n行,如果-n省略,那么默认10行。
扩展:如何截取文件指定行数区间的内容
以截取文件test.txt文件的第1001~1010行为例,介绍两种截取方法
方法1:借助临时文件
将test.txt文件的前1010行用head指令取出,输出重定向到tmp,txt文件中。然后使用tail指令取出tmp.txt的最后10行,得到的就是test.txt的1001~1010行内容。这种方法的缺点是要占用磁盘空间,如果不继续使用临时文件还要手动删除。
方法2:借助管道
- 符号'|'在Linux下,会被系统解释为管道文件,这是一种内存级的文件。
- 程序1 | 程序2:将程序1的输出交给管道|,然后交到程序2中执行。
- 管道可以支持流水线工作:程序1|程序2|程序3|......
用head指令取出test.txt的前1010行交给管道,然后将管道中的内容作为交给tail指令,取出后10行,即可获取test.txt的第1000~1010行内容。