07.man指令(重要):
Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: man [选项] 命令
man ls查看ls指令更多的说明。
man man:
man指令就是一个接口或者一个在线的手册。
常用选项
-k 根据关键字搜索联机帮助
num 只在第num章节找
-a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按 下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。
解释一下,面手册分为8章
1 是普通的命令
2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文 件)
3 是库函数,如printf,fread
4是特殊文件,也就是/dev下的各种设备文件
5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
6 是给游戏留的,由各个游戏自己定义
7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
8 是系统管理用的命令,这些命令只能由root使用,如ifconfig。
Linux当中也支持printf:
printf这些接口我们可能都会用:
07.cp指令(重要):
在Linux当中存在一条指令叫echo,这条指令可以将后面的字符串原封不动的显示出来。注意:字符串中不能有标点符号。
下面这条指令可以将字符串"hello Linux"写入lesson.txt文件当中。
echo打印时默认会把输出的结果显示出来, 当echo 带上 “ > ”号时没有在显示器上显示"hello Linux",但其实已经被写入到了lesson.txt的文件当中了。
cat指令是打印文件内容。
在指令后面带一个 > 符号,后面跟一个文件名,它的现象是1.没有在显示器显示2.而是这个数据被写入到文件中,这种行为我们把它叫做输出重定向。输出重定向代表的含义是:本来应该显示到显示器的内容,打印到文件中。
语法:cp [选项] 源文件或目录 目标文件或目录
功能: 复制文件或目录
my_lesson.txt本来不存在,是执行上述cp lesson.txt my_lesson.txt命令行之后新建的一个文件,并且该文件的大小和内容与原文件一模一样。拷贝的文件不能与被拷贝的文件同名:
拷贝普通文件时可以在当前目录下直接进行拷贝。
如果我们不想拷贝到当前目录下,想要拷贝到上级目录下,我们该怎么写呢?
不在同一目录下的同名文件可以存在,并且不会报错。
如果我们想拷贝一个目录该怎么拷贝呢?
目录不能直接拷贝,要带-r选项,因为目录是递归式定义的。
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存 在的目录,则会出现错误信息
常用选项: -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
拷贝目录在root账户下不会询问,即使加了-i也不会询问。
删除目录会提问:
加上-i选项也会提问:
删除文件会询问:
两次创立同一个文件会询问:
加上-i选项也会询问,但是前提是这个文件必须已经创建了:
若是之前文件不存在,即使加了-i选项也不会询问:
若是之前文件存在,即使加了-f选项,依然会询问:
以上都是在root账户下的测试,普通用户可能会和上述结果不一样。
-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链 接,则一律视为普通文件处理。
-R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理。
-r和-R用法相同。
08mv指令(重要):
mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。
语法: mv [选项] 源文件或目录 目标文件或目录。
my_class.txt文件名被改成了class1.txt的文件名。
也可以将文件进行剪切,剪切和拷贝不一样,拷贝是再复制一份,剪切是移动位置。
mv class.txt ../与mv class.txt ..相同。
将上级目录的test.txt文件剪切到当前目录下。只有这一种写法,..test.txt这种写法就不可以。
把当前目录的普通文件移动到上级目录中,并且上级路径没有该文件名,这种方式叫做剪切并重命名。
对于目录和文件mv指令可以直接使用,不用带-r选项就可以使用。
若当前要把一个目录dir1 mv 到上级目录test,如果上级目录中有test目录,则不是重命名,而是把dir1目录放到test目录下。
功能:
1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的 目录中。
2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。
常用选项:
-f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖。
-i :若目标文件 (destination) 已经存在时,就会询问是否覆盖。
ctrl + c :终止因为程序或者指令异常,而导致我们无法输入的情况。
两个问题:
1.你是如何看待指令的
指令和可执行程序都是可以被执行的,指令就是可执行程序。
2.我们在执行指令之前,系统应该先做什么?
先在系统中查找对应的指令,指令一定是在系统的某一个位置存在的。
指令一般在系统当中/usr/bin下,usr是根目录,bin是在usr的目录下。
通过下图可以发现所有的指令本质上在我们的系统当中是存在的。可以得出两个结论:1.指令是在系统中特定的路径下存在的2.这些指令一定是某种可执行程序,对应的指令一定是用C/C++/Python/shell所写的可执行程序。
指令的本质就是可执行程序,和我们自己写的代码编译好的程序,没有本质区别。
所有的软件、指令、工具都是可执行程序。
指令的本质就是文件-可执行文件,就是直接安装到了系统的某种路径下,可以让我们执行时系统自动去找。
which这条指令是查看对应的指令它的路径的。
ll等价于ls -l ,就是因为ll是ls -l的别名,--color指的是配色方案,alias指令相当于是取别名。
重命名不想用的话要这样写:
重命名是临时的,当关闭Xshell再登陆上之后,重命名就不在了。
重命名也可以用汉字和数字代替:
09 cat
echo指令默认把字符串写到显示器的文件当中。
把应该写到显示器文件当中的内容写到普通的磁盘文件当中,这种行为我们将它叫做重定向。
cat指令打印文件的内容。
这里的echo和cat的区别是:echo后面跟的是字符串,也就是它自己认为跟的是字符串,而cat跟的是文件名。
当我们重定向多次时,cat记录的结果只有一次。
当我们把字符串内容改变时,cat打印的东西与之前内容不一样,与现在内容一样。
向目标文件进行写入的时候,输出重定向有两个特点:1.清空文件2.写入新内容。
如果想清空文件,有一个简化的写法 “>文件名”或者是“> 文件名”:
扩展:
如果我们想保留重定向之前的内容,我们要这样写:
注意:两个大于号是挨着的,中间没有空格,这种方式叫做追加重定向。
如果cat指令后面什么都没有输入,那么它是从输入设备开始读的:
如果我们用 < 符号,我们发现它也能读取,这个 < 符号代表本来应该从键盘文件读取,现在不用从键盘读取,从指定的文件读取,这种方式叫做输入重定向。
cat text.c与cat < text.c是有区别的,这里暂时不做讲解。
语法:cat [选项][文件]
功能: 查看目标文件的内容
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行,也就是有多行连续的空行的时候,只输出一行空行。
一个shell脚本:cnt=1; while [ $cnt -le 10000 ];do echo "hello Linux $cnt"; let cnt++; done > text.c
cat不适合看大文本,cat适合看小文本,大文本适合more指令看。
10.more指令
语法:more [选项][文件]
功能:more命令,功能类似 cat
more指令会将显示的文本一屏占满,占满之后不再打印,按下enter键会自动向下翻,比较适合自顶向下的查看。
常用选项:
-n 对输出的所有行编号。
显示到500行就停下来,还能继续下翻,并且编号。
还可以在more的场景当中做文本搜索,如上。
q 退出more
举例:
11.less指令(重要)
less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。
less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看
但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!
除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
语法: less [参数] 文件
功能: less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前 不会加载整个文件。
按下上键往上翻,按下下键往下翻。
less -500这个命令行没有用,但是它也可以做文本查找。
选项:
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
12.head指令
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的 开头至标准输出中,而 tail 想当然尔就是看档案的结尾。
语法: head [参数]... [文件]...
功能: head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项: -n<行数> 显示的行数
head指令默认提取文本的前n行,默认提取10行。
如果想提取前3行,可以这样写:
13.tail指令
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail - f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。
语法: tail[必要参数][选择参数][文件]
功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:-f 循环读取
-n<行数> 显示行数
举例:(简单讲解重定向和管道)
有一个文件共有100行内容,请取出第50行内容<br>
seq 1 100 > test # 生成1到100的序列装入test
方法1 head -n50 test > tmp #将前50行装入临时文件tmp
tail -n1 tmp #得到中间行
方法2 head -n50 test | tail -n1
tail指令默认也是提取10行,但是和head不一样的是tail提取的是后面的10行。
如果想提取文件中的行数该怎么办呢,比如1000到1020行?
这样就可以了,但是这样也会创建一个文件tmp.txt。
扩展:在Linux上我们可以创建一个管道:
这样我们就可以拿到了,而且不会创建文件。这个 | 就叫做管道文件。这个 | 在对应的指令上就是一种符号,会被系统解释成为管道文件,这个管道文件不会真的在内存里存在,这个文件是一个内存级的文件,作用是把左侧的程序输出交给管道文件,让右侧的程序从管道文件当中再读到自己的程序当中。管道的容量是固定的,它的大小在操作系统中是确定好的,一般都是4kb、8kb、16kb,不同的版本,不同的操作系统,不同的位数有差别,
云服务器对应的man手册可能是不全的,如果查的时候有些接口可能用不了,可以试着安装一下,yum install -y man-pages,这个指令就叫做安装man手册。