今天继续来学习Linux的指令。
在Linux中,"man"(短语"manual"的缩写)是一个用于查看命令、函数和系统调用等文档的重要工具。
以下是man指令的语法
man [选项] [节号] 名称
节号":用于指定手册页所属的节号。每个手册页都分为不同的节,每个节包含了特定类型的信息。常见的节号如下:
"cp"(短语"copy"的缩写)是Linux和UNIX系统中用于复制文件和目录的命令。它允许你将一个或多个源文件或目录复制到指定的目标位置。
cp指令语法如下
cp [选项] 源文件 目标文件
-r:这个选项能让我们拷贝目录,目录是递归定义的,所以也需要递归去拷贝。
-i:这个选项会询问是否copy,但是copy目录的时候一般不会询问,毕竟copy目录的时候都会带-r选项。
语法如下
mv [选项] 源文件 目标文件
它一共有两种功能。
第一个功能:修改文件名。mv 源文件名 重命名
第二个功能:剪切。eg:mv text.txt ../ 这个列子就是将这个名为text.txt剪切到上一级目录底下。
那么就有个问题了,你在使用mv指令的时候到底是修改文件名功能还是剪切功能,还是一起都有?
举个例子
mv test.txt test_backup.txt 这个理解上一定是重命名
mv test.txt ./test_backup.txt 这个是不是可以理解成剪切并重命名?
但是这两条语句的效果是一样的,所以我们可以把mv 这个指令理解成剪切并重命名。
mv test.txt ../ 其实这一句相当于mv test.txt ../test.txt 也就是默认test.txt为剪切后的名字
那么再来一个问题:如果有一个名为dir的目录底下有/d1/d2这样的结构,还有一个名为other_dir的目录底下有一个普通文件test.txt,且这两个目录都存放在同一个目录底下。
我们使用以下命令会发生什么呢?
mv dir other_dir
其实这个指令并不会让原先的dir这个目录将other_dir完全覆盖掉,而是将dir底下的目录结构,拷贝一份到other_dir这个目录底下,相当于追加到other_dir的功能。
那么这里穿插一些其他话题
在Linux系统当中,没有类似Windows系统的垃圾回收站。而删除一个文件的代价是极高的。
执行以上指令就可以创造出一个类似Windows系统的垃圾回收站了。
其实这个垃圾回收站也就是一个目录。
另一个话题:我们如何看待指令呢?
我们发现指令和可执行性程序都是可以被执行的,所以我们得出结论:指令就是可执行程序。
那么指令是可执行程序,那么一定会存放在系统的某个位置。
它会存放在/usr/bin/目录下。而且这种可执行程序由C/C++/Python/shell形成。
那么如果我们写了一个C语言的程序并生成了该程序的可执行程序,并用mv指令将其剪切到/usr/bin/目录下,我们就可以直接通过打这个程序的名字就可以直接使用这个程序了,也就相当于我们自己写了一个指令。
再来一个话题:
Linux下一切皆文件 - 比如显示器,键盘,普通文件...
eg:向显示器上打印,也就是向显示器写入数据。但是显示器是不存在读方法的,scanf只是通过键盘,回显到显示器上罢了。
从键盘上读取数据,但是不存在写入数据进入键盘。
语法如下
alias [选项] [别名[='命令']]
用于在Linux系统中创建和管理命令别名。你可以为常用的命令或命令组合定义一个短的、易记的名称,以简化命令行操作。
eg: alias lll= ‘ls -a -l -i -n’
在Linux系统中用于在终端输出文本或变量内容的命令。它可以用于显示简单的文本消息、变量值、命令输出等。
语法如下:
echo [选项] [字符串]
假如有一个文件为test.txt
上面的指令改成 echo “hello world” > test.txt
这个打印到显示器的效果就会消失,而且这个echo出来的内容会直接存放到这个名为test.txt的文件当中。 这个现象叫做输出重定向。
>输出重定向,向目标文件进行写入的时候,都会将原来的数据覆盖。
1.清空文件
2.写入新内容。
如果输出重定向我不想这个原内容被删除,那么我们就可以使用’>>’,这个叫做追加重定向。
在Linux系统中用于查看文件内容的命令。它可以用于显示文件的文本内容、合并文件内容、创建新文件等。
语法如下:
cat [选项] [文件...]
-b:对非空输出行 编号
-n:对输出的所有行编号
-s:不输出多行空行---也就是将多行的空行压缩为一行空行。
提个问题:
如果cat后面没有任何东西呢?
也就是单纯的cat指令
那么cat会从输入设备(键盘)接收数据。
当键盘输入a,那么cat 就会输出一个a
那么再来一种情况
cat < test.txt
这种情况又如何解释呢?
其实很简单,本来应该从键盘上读取,现在不用从键盘上读取,从指定的文件读取。
这就叫做输入重定向。
more [选项] [文件]
功能类似cat
-n:对输出的所有行进行编号。
q:退出more
但是more有个很大的缺点,只能按空格进行下翻,但是无法上翻。
less的用法比more更加的有弹性,less不仅可以往下翻,还可以往上翻。less再查看之前不会加载整个文件。
less [参数] 文件
-i:忽略搜索时的大小写
-N:显示每行的行号
/字符串:向下搜索“字符串”的功能
?字符串:向上搜索“字符串”的功能
n:重复前一个操作(与/和?有关)
N:反向重复前一个操作
q:quit退出
提取文本的前10行(默认为10)
提取文本的后10行(默认为10)
语法: head/tail [选项] [文件名]
选项-n:n是一个数字,假如这个数字为3,head指令就会提取文本的前3行,tail指令就会提取文本的后3行。
来提个问题:假如有一个日志文件名为log.txt,我只能用head和tail指令来读取中间的666~888行的数据,应该如何写呢?
其实很简单,只需要执行以下指令即可
head -888 log.txt > newlog.txt
tail -223 newlog.txt > newlog.txt
让日志文件中的前888行写入一个新日志文件中,再将666~888这223条日志数据提取出来即可。
虽然这个方法不用less方法,但是新创建了一个新文件。
那么就要谈到“管道”这个概念了。
我们可以执行以下指令
head -888 log.txt | tail -223
那么上述这个指令就可以得到666~888行的内容了。
其中,’|’是一种符号,后面会被“系统”解释成为 管道文件。
管道文件不会真的在磁盘里面存在,不会像上面的newlog.txt一样,管道文件是一种内存级的文件。
那么什么叫做管道呢?
是一种特殊的命令行工具,通过将一个命令的输出作为另一个命令的输入来连接多个命令。
比如:
command1 | command2 这里的command1输出的结果作为command2的输入进行处理。通过使用管道我们可以将多条命令连接在一起形成一个命令链,可以实现更复杂的数据处理任务,提高命令行的灵活性和效率。