【Linux】4.Linux常见指令以及权限理解(2)

文章目录


3. Linux指令

3.1 ls指令和rm指令补充

*:通配符

ls *:显示任何文件

ls *.c:局部匹配(前面不管,只匹配.c后缀)

ls test.*:局部匹配(前面匹配test,后缀不管)

rm * -rf:删除所有的

rm -rf 文件名/目录名rm 文件名/目录名 -rf作用一样,但是推荐写成前者。

rm -i:删除前逐一询问确认

  • root用户不用-i也会询问确认
  • 普通用户不用-i就直接删除了,使用了-i才会询问确认

3.2 man指令(重要)

访问Linux手册页的命令是man

语法: man 命令

man ls

按空格键翻页

按键盘上的可以上下慢慢移动页面。

退出man:点击q

man man:也是可以的

下方1-9的是指Linux手册编号,因为是云服务器,所以联网的。

man printf:也是可以的

printf不止是C语言有,Linux里面也有。

我们可以通过下面的语句调用printf指令。

printf "hello %d,hello %f" "12" "3.14"

这个printf和我们之前学习的C语言的printf不是一个东西,就像六耳猕猴和孙悟空一样。

如果想要调用C接口里面的printf呢?

man 3 printf:这里的3指的是手册的编号。

如果直接man 指令名,那么得到的是按照手册编号顺序得到的解释。1号手册有就是1号手册的该指令的定义。没有就查2号手册,依此类推。

如果全都没有,就说明这个指令是不存在的。


3.3cp指令(重要)

输出重定向

cp指令的前面要先讲一下输出重定向。

echo "hello Linux"echo指令可以把后面跟着的字符串打印在显示器上。

echo "hello Linux" > mytest.txt:把hello Linux写到mytest.txt里面。

我们可以通过ll看到文件大小从0变成了12

cat mytest.txt:打印mytest.txt文件的内容

实际上echo "hello Linux" > mytest.txt经过了两个阶段:

  1. echo "hello Linux"echo指令将字符串打印在显示器上

    这里的echo "hello Linux" > 没有在显示器显示字符串

  2. 这个数据被写入文件中。


我们把在指令后面带>和一个文件名,现象是没有在显示器显示字符串,这个数据被写入文件中,我们把它称为:输出重定向。

输出重定向:本来应该显示到显示器的内容,打印到文件中

cp mytest.txt mytest_backup.txt:把mytest.txt拷贝成mytest_backup.txt

想要把一个文件拷贝给另一个文件但是两个文件名字一样,那么就会报错。

cp mytest.txt ../mytest.txt:拷贝mytest.txt给上一级路径

ls ../:查看上一级路径

常识告诉我们,同一个目录下不能存在同名文件。


3.3.1ubuntu20.04如何安装tree

依次执行下面两行语句:

sudo apt update

sudo apt install tree


ll:显示指定文件或目录的详细属性信息

mkdir --p d1/d2/d3:递归建立多个目录

目录无法直接拷贝

cp -r lesson3 lesson3_backup:递归拷贝lesson3目录 (-r是递归的意思)

我们也可以进一步验证mytest.txt文件的内容

-i:覆盖文件之前先询问用户

-f:强行复制文件或目录, 不论目的文件或目录是否已经存在(一般不会询问)

-fi:是会问的,因为为了保险起见。


3.4 mv指令(重要)

mv指令更改文件名

mv mytest_backup.txt mytest1.txt:把mytest_backup.txt重命名为mytest1.txt

mv:也可以剪切

mv mytest.txt ../:把mytest.txt剪切到上级目录

mv ../mytest.txt .:把上级路径的mytest.txt剪切到当前路径

mv mytest.txt ../test.txt:把mytest.txt剪切并重命名为test.txt到上级目录

那么怎么分辨mv是剪切还是重命名还是剪切并重命名呢?

mv 当前文件 目录:剪切

mv 当前文件 路径/文件名:剪切并重命名

mv a.txt b.txt:(剪切并)重命名

mv a.txt ./b.txt:剪切并重命名(本质上mv都是剪切)

Ctrl+C:撤销这一次的操作


mv指令更改目录名

mv 目录名1 目录名2:这里不管是重新命名还是剪切,目录名2都要不存在,存在的话就会重名。这个时候,会把目录名1放进目录名2里面。

不存在的话就是重新命名和剪切了。


如何看待指令

  1. 如何看待指令?

    指令和可执行程序都是可执行的,指令就是可执行程序。

    指令一定在系统的某一个位置存在。

  1. 我们在执行指令前,我们要干什么?

    先在系统中查找对应的指令。

  2. 指令存在在系统中,可以得出:指令是在系统中特定的路径下存在的。

    一定是某种可执行程序

    指令的本质就是可执行程序和我们自己写的代码编译好的程序,没有本质区别。

    例如:我们编译后出现一个可执行程序a.out,我们把这个可执行程序a.out重命名为ssss后放到/user/bin/里面后,我们直接输入刚刚那个重命名的ssss,就会出现这个可执行程序的运行结果。不过不建议自己写了丢进去,因为以后会忘记,也没多大用处。

  3. 把可执行程序从刚刚的系统路径下删除,实际上就是卸载。

    这种概念在Windows下面也是一样的。

  4. 指令的本质就是文件(可执行文件),就是直接安装到系统的某个路径下,然后使用的时候会自动跳到那边使用。


指令的重命名

alias A='B';

B操作重命名为A

which可以查询指令的地址,但是在Ubuntu里面which只能查询没有被重命名的指令的位置。


3.5 cat指令

语法:cat [选项][文件]

功能: 查看目标文件的内容

常用选项:

-b 对非空输出行编号

-n 对输出的所有行编号

-s 不输出多行空行

  1. Linux下一切皆文件。

    例如:

    显示器(向显示器打印-->向显示器文件写入fwhite,不会从显示器读取fread(){}读方法为空)

    键盘(向键盘输入-->向键盘文件读取fread,不会向键盘打印fwhite(){}写方法为空)

    普通文件...

之前的输出重定向本质上就是把向显示器文件写入变成向另外的文件写入。

echo后面跟的是字符串,把后面原封不动的打印出来。

cat后面跟的是文件名,cat打印的是文件的内容

ll后面跟的是我们所对应的文件的属性,ll打印的是文件的属性

这个情况很有意思,一开始test.txt里面是hello Linux

后来输入了多次echo "hello Linux" > test.txt,结果还是打印一行hello Linux

然后我们输入echo "108 good" > test.txt,结果打印108 good了。

这种输出重定向有个特点:

向目标问价写入的时候会从文件的开始把所有的内容覆盖写入

实际上,在重定向过程中要干两件事:

  1. 清空原始文件
  2. 写入新内容

由此,我们想清空一个文件的话,我们可以这样:

这个>号就代表重定向。

这里打开文件的时候就默认清空了。


追加重定向

扩展:

如果我想让文件的内容不清空呢?

这个>>中间不能带空格,> >是错误的。

这种重定向叫做:追加重定向

echo默认带换行。

如果我们想不换行,那就可以换成printf


然后我们可以看一下cat后面如果不跟文件名会发生什么:

我输入了a回车,他就打印a

我输入了b回车,他就打印b

我输入了回车,他就打印回车

说明cat后面如果不跟文件名,就默认从键盘读。本来cat指令就是向显示器打印的,所以我输一个回车他就打印一个。


输入重定向

我们还可以这样:

这里我们呢可以认为,本来应该从键盘文件读取的,就不从键盘读了,转而从我们指定的文件读取。

这个叫做输入重定向

两个问题:

  1. 当然,这里也可能感觉cat test.txt就可以实现了,为什么要用cat < test.txt呢?

因为这里要将。

  1. 他们有区别吗?

有区别,但是后面讲。现阶段会用就行了。

由图可见,创建新文件不一定非得要touch


这里的cat就是打印。


cat -n 文件名:对输出的所有行编号


cat -b 文件名:对非空输出行编号

我们先创建一些空行在里面

然后输入命令


cat -s 文件名:不输出多行空行(多个空行变一行空行)


也可以组合使用


3.6 more指令

语法:more [选项][文件]

功能:more命令,功能类似 cat

常用选项:

-n 对输出的所有行编号

q 退出more

先用脚本语言来创建一个脚本

使用cat来读的话:

说明cat不适合大文本,适合小文本。

所以要使用more

默认显示一面

按回车下翻

退出就按Q,就行了

more也可以带选项:

more一般靠按键只能下翻不能上翻。

我们也可以直接/9999


3.7 less指令(重要)

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。

less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看。

但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!

除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜
语法: less [参数] 文件

功能:

lessmore类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。

选项:

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

-N:显示每行的行号

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

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

n:重复前一个搜索(与 / 或 ? 有关)

N:反向重复前一个搜索(与 / 或 ? 有关)

q:quit

我们输入less

会下翻,按会上翻。所以less适合大文本的上下布局。

less也可以输入/999查看后面的消息

也可以输入?899查看之前的消息


cat不适合看大文本,适合看小文本。

那么我们为什么要看一个比较大的文本呢?什么文本属于大文本呢?

在项目里面可以用到。


3.8 tail指令

tail 命令从指定点开始将文件写到标准输出。使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。

语法: tail[必要参数][选择参数][文件]

功能: 用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。

选项:

-f: 循环读取

-n<行数>: 显示行数

如何读取1001-1020行内容呢?

head -1020 log.txt >temp.txt;

tail -20 temp.txt

  1. head -1020 log.txt > temp.txt
  • 从 log.txt 文件的开头读取前 1020 行
  • 将这 1020 行保存到 temp.txt 文件中
  • > 是重定向符号,会覆盖已存在的 temp.txt 文件
  1. tail -20 temp.txt
  • 从 temp.txt 文件(包含前面获取的 1020 行)中读取最后 20 行
  • 将这 20 行显示在屏幕上

最终效果:

  • 显示 log.txt 文件的第 1001 行到第 1020 行
  • 相当于查看了原文件的第 1001-1020 行的内容

这里要创建temp.txt文件,如果不创建文件能完成吗?

我们可以使用管道

cpp 复制代码
# 使用管道,无需临时文件
head -1020 log.txt | tail -20

区分左右两侧的|称为管道文件

这个管道文件是一种内存级别的文件。

什么叫做管道呢?

  1. 有输入有输出
  2. 传输资源
相关推荐
Nightwish363 小时前
RHCA练习1
linux·运维
閤廴聿6 小时前
vmware-ubuntu22.04配置虚拟机win10,重新上网成功
linux·windows·ubuntu
Danileaf_Guo7 小时前
当你买了一台Linux云主机,应该如何测试主机性能?
linux·运维·服务器
特立独行的猫a9 小时前
linux下的MongoDB手动安装部署详解
linux·运维·mongodb
好记忆不如烂笔头abc9 小时前
netplan apply报错No module named ‘netifaces‘
linux·服务器·数据库
我还能再卷一点9 小时前
linux服务器安装mysql数据库和nginx
linux·服务器·数据库
酥暮沐9 小时前
shell脚本回顾1
linux·运维·服务器
Lueeee.9 小时前
Linux Oled显示字符
linux·运维·服务器
xixingzhe29 小时前
linux删除用户
linux·运维·服务器
肆仙.10 小时前
第一次作业
linux·运维·服务器