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会有更多的用法需要各位自己去了解了哦!

相关推荐
wefg12 小时前
【计算机网络】套接字编程(套接字API/UDP和TCP服务器)
服务器·网络·计算机网络
有毒的教程2 小时前
Ubuntu 安装完成后网络配置教程
linux·网络·ubuntu
草莓熊Lotso2 小时前
MySQL 复合查询核心指南:多表、子查询与实战技巧
linux·运维·服务器·数据库·人工智能·mysql
kaoa0002 小时前
Linux入门攻坚——71、puppet-1
linux·运维·puppet
小杨啥都学2 小时前
通过ipsec服务端给客户端分配ip
服务器·网络·tcp/ip·ipsec
GAOJ_K2 小时前
旋转花键在高端制造中的差异化应用
运维·人工智能·科技·机器人·自动化·制造
Xiaoweidumpb2 小时前
win10 Windows服务器开放端口防火墙规则 远程控制桌面
运维·服务器·windows
you-_ling2 小时前
网络:4.TCP并发服务器
服务器·网络·tcp/ip
stanlyYP2 小时前
服务器openclaw操作
运维·服务器