Linux-Linux的基础指令3

1.man指令

man指令是英语单词main的缩写,并不是英语单词man,也就是说man指令应该是用做解释,说明这种。

在Linux中,指令很多,如果不知道某个指令,那么可能会导致我们错误使用指令,所以Linux提供了man指令,这个指令用来解释我们不知道的指令的具体用法和含义,其语法如下:

man 选项 指令

如果我们不知道ls指令是什么,就可以这样操作:

bash 复制代码
man ls

回车后会出现这种界面:

若想查看更多信息,则使用鼠标滚轮或者键盘上的上下键即可。

如果想退出man ls界面,直接按键盘上的q就行,不要回车!

此外,man man这个指令也是被允许的,因为man 本身也是一条指令,也可以被查看用途:

此外,man后面可以接数字/选项,我们可以看到:

这些代表man后面接数字后可以执行的操作:

章节 内容类型
1 可执行程序或 shell 命令
2 系统调用(由内核提供的函数)
3 库调用(程序库中的函数)
4 特殊文件(通常位于 /dev 目录下)
5 文件格式与约定,例如 /etc/passwd
6 游戏
7 杂项(包括宏包和约定),例如 man(7)、groff(7)、man-pages(7)
8 系统管理命令(通常仅供 root 用户使用)
9 内核例程 非标准

如,我们可以:

bash 复制代码
man 3 printf

回车会显示出:C语言printf的函数:

man后面接数字查看指定内容,也可以不接,如:

bash 复制代码
man printf

这样操作的结果是:

可以看到左上角为PRINTF(1)。且这两个操作显示的界面不一样,因为man后面如果不接数字,那么会默认在1手册中进行查找,如果在1手册中找到了,就会显示并停止查找,如果没找到,则往下一个手册进行查找,以此类推。

那么如果我man后面接了数字(1-9),但是没找到怎么办,比如:

bash 复制代码
man 2 printf

那么会直接显示如下结果:

bash 复制代码
No manual entry for printf in section 2

实际上,man如果默认从第一个手册开始查找效率可能很低,如果知道要查找的东西在哪个手册,直接用 man+数字+要查找的内容 即可。

有些人好奇,6手册中的Game是什么,这些是早期程序员为了打发时间玩的游戏,感兴趣的可以去问大模型,不过里面游戏没什么好玩的而已。

2.ls指令的一些额外知识

若我们which ls,则会发现有这样的结果:

这代表:所谓的命令,就是Linux指定目录下的(/usr/bin)下的可执行文件->类似于windows下的.exe文件:

在linux中的/usr/bin路径下,我们可以通过ls /usr/bin得到如下界面:

这些绿色的就是可执行文件,不过Linux下,可执行文件并没规定文件名格式,而是开始创建该文件时已经确定了该文件的属性是什么类型的文件(比如touch只能创建普通文件,而mkdir只能创建目录)。

比如,我们创建一个code.c文件:

bash 复制代码
touch code.c

然后再:

bash 复制代码
nano code.c

会出现如下界面:

在这里面我们可以写C语言代码,比如下面代码:

cpp 复制代码
#include<stdio.h>

int main()
{
printf("hello linux\n");
return 0;
}

用Ctrl+X回车后按y再回车就可以保存了(也可以用echo进行输入重定向,但是输入空行需要用到后面的知识),再进行:

bash 复制代码
gcc code.c -o mycmd

我们再次ls看一下结果呢?

这代表我们的mycmd文件可以执行了,如果想要执行,直接用./mycmd即可(我是在根路径下创建的文件,所以这个是绝对路径):

如果我们rm mycmd,并按下y后再执行./mycmd操作,我们会出现该界面:

也就是说,系统在执行这种操作时,会查找该命令是否存在,如果没找到会返回错误。

如果在你执行的命令行中,若带了绝对/相对路径,系统则会以你指令的路径为主;若你没有告诉我你所执行程序在哪里,系统默认在/usr/bin路径下进行查找,如我们再次执行之前的操作,把mycmd文件弄回来:

我们会发现,如果在执行命令时直接mycmd,它会提示没找到该命令,所以我们之后写可执行文件想要执行时,要带绝对路径/相对路径!

为啥系统要到/usr/bin路径下查找?

因为历史上所有命令都在/usr/bin路径下,各位可以试一下ls /usr/bin,里面包含几百条指令()第一次ls /usr/bin的时候会导致系统卡住,因为文件太多了)。

指令本质就是别人写的可执行程序或某些脚本,被放在系统的特定路径下(/usr/bin),从而使我们能完成特定的操作,也可以使得Linux在这种条件下通过修改文件来添加指令等。

3.cp指令

cp指令是copy单词的缩写,中文翻译过来是:拷贝。

也就是说,cp指令在Linux中是起拷贝的作用:

语法:cp 选项 源文件或目录 目标文件或目录

功能:复制文件或目录

3.1基础用法

比如,把我们刚刚的可执行程序mycmd复制到hello路径下:

bash 复制代码
cp mycmd hello

则会有这种结果:

code.c文件中还是有代码的,hello.c文件中没有代码,那么我们把代码拷贝进去会成功吗?

那么如果我们把code.c拷贝到不存在在该路径下的文件,会怎么样呢?

我们会发现,abc.c开始是没存在的文件,但是拷贝过去后就自动创建了,所以cp指令的特点1就是:若目标文件不存在,则先创建文件然后再把内容拷贝进去(不会询问用户是否拷贝)。

我们还可以发现,如果目标文件存在,则会先询问:

这个表示:cp命令在询问你是否要覆盖已存在的目标文件hello.c,不管hello.c里面是否有内容,都会询问!

所以cp指令的特点2是:若模板文件存在,执行cp指令时会先询问你是否要覆盖目标文件,若按下y,则覆盖,若按下n,则不覆盖!

那么如果我想拷贝目录呢?

这个报错的意思是:你在尝试复制一个目录,但是没有带-r选项,因为cp指令默认只复制文件,不能直接复制目录

3.2-r选项

cp -r作用:递归处理,将指定目录下的文件与子目录一并处理。若原文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理。

我们可以在复制目录时加上它:

那么如果我想复制文件到目录下,这个选项就不能带了:

如果我想复制到并不存在的目录下行吗?

可以发现也是可以的。

但如果我想复制文件的时候不想被询问或想被询问怎么办?

3.3-f和-i选项

cp -i就是在覆盖文件是询问用户是否覆盖(前提:目标文件已存在,若不存在,则也不会询问):

有些用普通用户登录linux的时候使用cp指令是不会询问的,但是大部分用户在cp时会默认cp=cp -i,不过建议各位平常多用一下cp -i,因为这样会防止我们的目标文件原来内容被覆盖。

而-f选项就是强制复制文件或目录,不论目的文件或目录是否存在!

在root下,建议设置:alias cp='cp -i',因为这样会让我们更加小心,防止我们覆盖了文件。

我们可以看到,虽然我cp -f选项了,但是仍然会询问,因为我设置了alias cp='cp -i',且当-i和-f选项同时出现时,该系统的-i选项优先级高于-f选项。但是有些系统则不是这样的,若直接cp -i -f 则不会询问(普通用户登录的也可能是这样的)。

-f选项虽然看似少了询问这一个功能,更方便了,但是建议各位不要使用 ,因为覆盖整个文件这种事情还是要慎重,不能随意覆盖!建议各位执行复制操作时带-i选项

若想修改我们使用cp指令默认为cp -i指令,则需要我们先

bash 复制代码
vim ~/.bashrc

到最后一行添加

alias cp = 'cp -i'

然后想要退出,可以:

(1):wq

这个可以保存并退出(:也要带上);

(2):x

这个可以仅当有修改时才保存,否则直接退出

(3)ZZ

按下Shift+zz即可,不用冒号

3.4其他选项

选项 说明 示例
-n 不覆盖(如果目标文件已存在,则不复制) cp -n file1 file2
-u 更新复制(源文件比目标文件新时才复制) cp -u source dest
-a 归档模式(递归复制,保留所有属性:权限、时间戳、链接等) cp -a dir1/ dir2/
-p 保留属性(保留文件权限、所有者和时间戳) cp -p file1 file2
--preserve 指定保留哪些属性(如 mode, ownership, timestamps 等) cp --preserve=all file1 file2
-v 显示详细信息(显示正在复制的文件) cp -v file1 file2
-l 创建硬链接(不复制文件,创建硬链接) cp -l file1 file2
-s 创建符号链接(不复制文件,创建软链接) cp -s file1 file2
-b 备份目标文件(覆盖前自动备份) cp -b file1 file2
-T 将目标视为普通文件(而不是目录) cp -T source dest

这些用法不常见,如果感兴趣可以自己结合AI大模型去使用。

4.echo指令

4.1基础用法

echo可输出其后面的文本:

4.2接指令

echo后面可以接-n:不换号输出;-e:启用转义字符;-E:禁用转义字符(默认也是禁用转义字符的)。

转义字符包括这些:

转义符 说明 示例
\n 换行 echo -e "line1\nline2"
\t 水平制表符(Tab) echo -e "a\tb\tc"
\\ 反斜杠本身 echo -e "path\\to\\file"
\" 双引号 echo -e "He said \"Hi\""
\r 回车符 echo -e "Hello\rWorld"
\b 退格 echo -e "abc\b\bd"
\a 警报声(蜂鸣) echo -e "\a"

4.3输出变量

这个变量的用法和Python差不太多,所以这里也不做过多解释。

4.433echo的输出重定向

第一种重定向:>

这个重定向可以覆盖文件内容,并把echo后,>前面的""里面的内容覆盖原文件内容:

第二种重定向:>>

这个不是C++中的输入:

cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
return 0;
}

但是它类似于C++的输入,C++的>>可以把键盘文件的内容读取后给变量赋值,而Linux的输出重定向则是把echo后的内容追加到原文件中:

输出重定向这个概念有点抽象,这里解释一下。

在Linux中一切皆文件,如果直接echo,这里它会直接把echo后面的内容打印到显示器上,这也就代表:文件在Linux下向显示器文件进行写入,而我们输出重定向后,它会把原本应该输出到显示器文件的内容写入到后面文件中。

echo的工作是:从键盘读取数据到内存转存到文件里面,而其默认的文件是显示器文件,这个输出重定向就改变了原来的路径,变成我们原本从键盘读取的数据到了指定文件中,这种操作类似于我们之前cp指令或者nano指令,以后我们在仅仅只要进行尾添加的时候,用echo的输出重定向功能来完成即可。

那么如果我们重定向的文件不存在怎么办?

两种重定向功能在遇到不存在的文件时都会创建文件并进行写入!

4.5输出重定向的其他应用

不仅仅是echo可以用使用输出重定向,还有很多指令也可以进行输出重定向:

如果我们用>>还是可以使用追加功能的:

我们可以把ls -l ./hello.c的结果输出重定向到bbb文件,并追加到里面,此外还有:

>>也叫:追加重定向;>也叫:覆盖重定向。

5.总结

所有指令不会的我们直接在Linux中使用man指令即可,但是即使我们有这种工具但还是建议记住这些指令,而不是每次使用都去查找;cp指令平时用处不是很大,而且建议使用之前先确定目标路径下是否有同名文件,防止拷贝过去后由于同名,把之前文件覆盖掉了;echo这个东西和nano功能差不太多,只是nano可以在文件中随意修改,而echo仅仅只能覆盖或者追加,后面echo会有更多的用法需要各位自己去了解了哦!

相关推荐
A小辣椒19 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式