文章目录
- 3. Linux指令
- 3.1 ls指令和rm指令补充
- 3.2 man指令(重要)
- 3.3cp指令(重要)
- 输出重定向
- 3.3.1ubuntu20.04如何安装tree
- 3.4 mv指令(重要)
- mv指令更改文件名
- mv指令更改目录名
- 如何看待指令
- 指令的重命名
- 3.5 cat指令
- 追加重定向
- 输入重定向
- 3.6 more指令
- 3.7 less指令(重要)
- 3.8 tail指令
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
经过了两个阶段:
echo "hello Linux"
:echo
指令将字符串打印在显示器上这里的
echo "hello Linux" >
没有在显示器显示字符串这个数据被写入文件中。
我们把在指令后面带
>
和一个文件名,现象是没有在显示器显示字符串,这个数据被写入文件中,我们把它称为:输出重定向。输出重定向:本来应该显示到显示器的内容,打印到文件中
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里面。
不存在的话就是重新命名和剪切了。
如何看待指令
-
如何看待指令?
指令和可执行程序都是可执行的,指令就是可执行程序。
指令一定在系统的某一个位置存在。
-
我们在执行指令前,我们要干什么?
先在系统中查找对应的指令。
-
指令存在在系统中,可以得出:指令是在系统中特定的路径下存在的。
一定是某种可执行程序
指令的本质就是可执行程序和我们自己写的代码编译好的程序,没有本质区别。
例如:我们编译后出现一个可执行程序
a.out
,我们把这个可执行程序a.out
重命名为ssss
后放到/user/bin/
里面后,我们直接输入刚刚那个重命名的ssss
,就会出现这个可执行程序的运行结果。不过不建议自己写了丢进去,因为以后会忘记,也没多大用处。 -
把可执行程序从刚刚的系统路径下删除,实际上就是卸载。
这种概念在
Windows
下面也是一样的。 -
指令的本质就是文件(可执行文件),就是直接安装到系统的某个路径下,然后使用的时候会自动跳到那边使用。
指令的重命名
alias A='B';
把B操作
重命名为A
which
可以查询指令的地址,但是在Ubuntu
里面which
只能查询没有被重命名的指令的位置。
3.5 cat指令
语法:cat [选项][文件]
功能: 查看目标文件的内容
常用选项:
-b
对非空输出行编号
-n
对输出的所有行编号
-s
不输出多行空行
-
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
了。
这种输出重定向有个特点:
向目标问价写入的时候会从文件的开始把所有的内容
覆盖写入
。实际上,在重定向过程中要干两件事:
- 清空原始文件
- 写入新内容
由此,我们想清空一个文件的话,我们可以这样:
这个>
号就代表重定向。
这里打开文件的时候就默认清空了。
追加重定向
扩展:
如果我想让文件的内容不清空呢?
这个>>
中间不能带空格,> >
是错误的。
这种重定向叫做:追加重定向
。
echo
默认带换行。
如果我们想不换行,那就可以换成printf
然后我们可以看一下cat
后面如果不跟文件名会发生什么:
我输入了a
回车,他就打印a
我输入了b
回车,他就打印b
我输入了回车
,他就打印回车
说明cat
后面如果不跟文件名,就默认从键盘读。本来cat
指令就是向显示器打印的,所以我输一个回车他就打印一个。
输入重定向
我们还可以这样:
这里我们呢可以认为,本来应该从键盘文件读取的,就不从键盘读了,转而从我们指定的文件读取。
这个叫做输入重定向
。
两个问题:
- 当然,这里也可能感觉
cat test.txt
就可以实现了,为什么要用cat < test.txt
呢?因为这里要将。
- 他们有区别吗?
有区别,但是后面讲。现阶段会用就行了。
由图可见,创建新文件不一定非得要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 [参数] 文件
功能:
less
与more
类似,但使用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
head -1020 log.txt > temp.txt
- 从 log.txt 文件的开头读取前 1020 行
- 将这 1020 行保存到 temp.txt 文件中
>
是重定向符号,会覆盖已存在的 temp.txt 文件
tail -20 temp.txt
- 从 temp.txt 文件(包含前面获取的 1020 行)中读取最后 20 行
- 将这 20 行显示在屏幕上
最终效果:
- 显示 log.txt 文件的第 1001 行到第 1020 行
- 相当于查看了原文件的第 1001-1020 行的内容
这里要创建temp.txt文件,如果不创建文件能完成吗?
我们可以使用管道
。
# 使用管道,无需临时文件
head -1020 log.txt | tail -20
区分左右两侧的|
称为管道文件
。
这个管道文件是一种内存级
别的文件。
什么叫做管道呢?
- 有输入有输出
- 传输资源