Linux指令(二)

发布时间:2024年01月16日

今天继续来学习Linux的指令。

man指令

在Linux中,"man"(短语"manual"的缩写)是一个用于查看命令、函数和系统调用等文档的重要工具。

以下是man指令的语法

man [选项] [节号] 名称

节号":用于指定手册页所属的节号。每个手册页都分为不同的节,每个节包含了特定类型的信息。常见的节号如下:

  • 1:用户命令
  • 2:系统调用
  • 3:C库函数
  • 4:设备文件
  • 5:文件格式和约定
  • 6:游戏和屏保
  • 7:杂项
  • 8:系统管理命令

cp指令

"cp"(短语"copy"的缩写)是Linux和UNIX系统中用于复制文件和目录的命令。它允许你将一个或多个源文件或目录复制到指定的目标位置。

cp指令语法如下

cp [选项] 源文件 目标文件

-r:这个选项能让我们拷贝目录,目录是递归定义的,所以也需要递归去拷贝。

-i:这个选项会询问是否copy,但是copy目录的时候一般不会询问,毕竟copy目录的时候都会带-r选项。

mv指令

语法如下

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指令

语法如下

alias [选项] [别名[='命令']]

用于在Linux系统中创建和管理命令别名。你可以为常用的命令或命令组合定义一个短的、易记的名称,以简化命令行操作。

eg: alias lll= ‘ls -a -l -i -n’

echo指令

在Linux系统中用于在终端输出文本或变量内容的命令。它可以用于显示简单的文本消息、变量值、命令输出等。

语法如下:

echo [选项] [字符串]

假如有一个文件为test.txt

上面的指令改成 echo “hello world”?> test.txt

这个打印到显示器的效果就会消失,而且这个echo出来的内容会直接存放到这个名为test.txt的文件当中。 ?这个现象叫做输出重定向。

>输出重定向,向目标文件进行写入的时候,都会将原来的数据覆盖。

1.清空文件

2.写入新内容。

如果输出重定向我不想这个原内容被删除,那么我们就可以使用’>>’,这个叫做追加重定向。

cat指令

在Linux系统中用于查看文件内容的命令。它可以用于显示文件的文本内容、合并文件内容、创建新文件等。

语法如下:

cat [选项] [文件...]

-b:对非空输出行 编号

-n:对输出的所有行编号

-s:不输出多行空行---也就是将多行的空行压缩为一行空行。

提个问题:

如果cat后面没有任何东西呢?

也就是单纯的cat指令

那么cat会从输入设备(键盘)接收数据。

当键盘输入a,那么cat 就会输出一个a

那么再来一种情况

cat ?< ??test.txt

这种情况又如何解释呢?

其实很简单,本来应该从键盘上读取,现在不用从键盘上读取,从指定的文件读取。

这就叫做输入重定向。

more指令

more [选项] [文件]

功能类似cat

-n:对输出的所有行进行编号。

q:退出more

但是more有个很大的缺点,只能按空格进行下翻,但是无法上翻。

less指令

less的用法比more更加的有弹性,less不仅可以往下翻,还可以往上翻。less再查看之前不会加载整个文件。

less [参数] 文件

-i:忽略搜索时的大小写

-N:显示每行的行号

/字符串:向下搜索“字符串”的功能

?字符串:向上搜索“字符串”的功能

n:重复前一个操作(与/和?有关)

N:反向重复前一个操作

q:quit退出

head指令

提取文本的前10行(默认为10)

tail指令

提取文本的后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的输入进行处理。通过使用管道我们可以将多条命令连接在一起形成一个命令链,可以实现更复杂的数据处理任务,提高命令行的灵活性和效率。

文章来源:https://blog.csdn.net/zhuzhu_YT/article/details/135563701
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。