Linux常见指令2

Linux常见指令[2]

  • 一.Linux常见指令
    • 1.man
      • 补充知识:nano
    • 2.cp
    • 3.mv
    • 4.cat
      • 补充知识:echo
      • 输出重定向
      • 追加重定向
      • 回到cat
      • cat其他用法
    • 5.less和more
    • 补充内容
      • 回到less
    • 6.head和tail
      • 补充知识:命令行管道

一.Linux常见指令

前言:为了方便我们在Linux中写指令
介绍一下:
1.clear指令:
清屏操作
2.在Linux的命令行中,可以通过使用上下键来翻阅历史使用过的命令
3.Alt+Enter键:进入全屏模式,退出全屏模式

1.man

Linux常见指令2_第1张图片
Linux常见指令2_第2张图片
按q退出后,自动切换至下一行命令
Linux常见指令2_第3张图片
我们刚才查看的是Linux下的ls命令,也就是使用的man手册的1号手册
那么我们接下来看一下3号手册
以printf为例
Linux常见指令2_第4张图片

你会发现,这里依然是使用的1号手册,那么这是为什么呢?
这是因为printf在shell脚本中也是一个命令,但是这个命令跟C语言中的printf函数没有任何关联,它就是一个可执行程序
也就是说我们完全可以这样做
在这里插入图片描述
但是我们就是想让它在3号手册去查,该怎么办呢?
Linux常见指令2_第5张图片
Linux常见指令2_第6张图片
所以:

man 手册编号 查找的内容

如果大家使用man 3 printf后查不到,那么请使用root账号执行以下命令

yum install -y man-pages

为了讲解下面的cp命令,我们先了解一下nano工具

补充知识:nano

为了方便后续操作的理解,下面先给大家介绍一个工具nano(相当于windows中的记事本)
我们执行了

nano file.txt

后进入了下面这个界面,并且写了一段C语言代码
Linux常见指令2_第7张图片
这里的^代表着ctrl键,
当我们想退出时,按ctrl+x
然后它问我们是否需要保存
在这里插入图片描述
我们输入y
在这里插入图片描述
然后按回车键
成功退出
在这里插入图片描述
如果大家的系统中没有nano
那么使用root账号执行以下命令:

yum -install -y nano

2.cp

大家应该知道:在windows中:同级目录下不允许存在同名文件或者同名目录,
在Linux中也是如此
windows中同名文件区分大小写,Linux中也是如此
Linux常见指令2_第8张图片
我们把file.txt拷贝到了上级目录下
这里先介绍一下cat命令:
Linux常见指令2_第9张图片

Linux常见指令2_第10张图片
发现这两份文件内容完全相同,验证了cp命令的正确性

那么我们能不能拷贝到当前目录中呢?
在这里插入图片描述
答案是:不可以
那么我们非要拷贝到当前目录中呢?
我们可以给他改个名字
Linux常见指令2_第11张图片
这样就成功拷贝到当前目录中了

以上我们证实了cp能拷贝文件,
那么cp能不能拷贝目录呢?

我们创建了一个目录dir1,
并且在dir1中创建了4个文件
想要拷贝到上级目录中,但是无法拷贝
因为cp默认不能拷贝目录
Linux常见指令2_第12张图片
但是我们就是想要拷贝目录,怎么办?

cp -rf 目录名 目标位置

Linux常见指令2_第13张图片
那么我如果想把dir1拷贝到当前目录下可以吗?

我们执行了:
cp -rf dir1 dir1

Linux常见指令2_第14张图片
结果发现我们把dir1拷贝到了dir1目录里面,并没有拷贝到当前目录里面(刚才多拷贝的我随手就删了)
Linux常见指令2_第15张图片
那么我们就只能改一下名字了
Linux常见指令2_第16张图片
Linux常见指令2_第17张图片
我们也可以把该目录拷贝到其他目录下,并且可以同时更改文件名(这里以拷贝到/home/wzs目录下为例)

注意:拷贝的时候隐藏文件并不会拷贝过去
原因:

1.隐藏文件:我们拷贝的时候默认是我们自己认为把我们所能看到的文件都拷贝过去,
如果我们自己知道有隐藏文件的话,那么我们可以把隐藏文件单独拷贝过去
如果我们自己不知道有隐藏文件,那么隐藏文件的目的就达到了

2.隐藏文件就不应该被拷贝过去,因为每一个目录里面都自带两个隐藏文件
分别是一个点和两个点
如果把它们也拷贝过去,势必会发生目标目录下文件名的冲突问题

3.mv

Linux常见指令2_第18张图片

注意:mv和cp一样,(src:源文件,dst:目标文件)
mv src dst:
如果dst是一个目录,那么就会把src移动到dst这个目录里面
如果dst是一串路径后面跟有名字,那么就会把src移动到对应路径下并且把名字改成你所指定的那个名字

mv命令就相当于windows系统下的剪切命令
下面我们演示一下
Linux常见指令2_第19张图片
我们把当前目录下的dir1 mv 到了上级目录,并且重命名为dir2,
然后我们分别ls上级目录下的dir2和当前目录下的dir1,发现移动成功

同理,普通文件也可以mv

注意:mv还可以对一个文件进行重命名

Linux常见指令2_第20张图片

mv src dst
当dst为当前路径时:
(1)当dst为已经存在的目录时,mv命令会把src移动到dst目录下面
(2)当dst是尚未存在的目录是,mv命令会把src移动到当前路径下,名字改为dst,也就是将src重命名为dst
如上图所示,我们将目录newdir 重命名为mvdir
对于普通文件也是如此

4.cat

Linux常见指令2_第21张图片

补充知识:echo

在这里插入图片描述
echo命令:
1.我们输入什么内容,它就会向显示器中打印什么内容
Linux常见指令2_第22张图片
2.echo “xxx” > 文件名
如果这个文件存在,那么会清空该文件的所有内容,然后写入xxx内容
如果这个文件不存在,那么会创建这个文件,然后写入xxx内容,类似于C语言中的fopen中的"w"选项

echo写入文件,默认会写入"\n"换行符

关于C语言文件操作的知识,大家可以看我的这篇博客:
C语言文件操作详解
在这里插入图片描述

输出重定向

下面我们隆重介绍一个概念:输出重定向
(两个作用:1.输出 2.重定向(即:重新改变了它的方向))

echo "hello world"  默认是向显示器中显示的
echo "hello world" > 9-29.txt   现在直接显示到了文件当中

在这里我们先引入一个Linux的设计哲学

Linux下一切皆文件:
Linux的设计者以这种哲学理念来设计Linux,
这么做有利于减少Linux系统的编码维护成本
这个哲学理念我们以后还会谈到,大家先有一个印象即可

那么我们回过头来继续去理解重定向

echo “hello world” 默认是向显示器中显示的 ------------ 默认是向显示器这个文件进行写入

echo “hello world” > 9-29.txt 现在直接显示到了文件当中 ------------ 现在向9-29.txt这个文件进行写入了

那么以后我们新建一个文件又多了一个选择

>文件名

在这里插入图片描述
又因为输出重定向在写入时默认会先清空该文件,那么我们发现
Linux常见指令2_第23张图片
我们也可以通过相同的方式去清空一个文件

如果我们就是不想清空这个文件,我就是想要在它末尾追加新的内容,怎么办呢?
下面我们介绍一下:追加重定向

追加重定向

Linux常见指令2_第24张图片

echo “hello 9.29-1” >> appendFile.txt
echo “hello 9.29-2” >> appendFile.txt

实现了我们刚才的需求,这就相当于C语言文件操作中的fopen的"a"选项

那么有没有>>>呢?,答案是:没有

接下来我们就能够向文件中写入多行内容了
那么我们回过头来继续学习cat

回到cat

1.cat -n: 对输出的所有行编号
Linux常见指令2_第25张图片
2.cat -s:不输出多行空行
Linux常见指令2_第26张图片
3.cat -b:对非空输出行编号
Linux常见指令2_第27张图片
4.tac
逆向输出文件内容
Linux常见指令2_第28张图片

cat其他用法

Linux常见指令2_第29张图片

输入cat后,我们输入什么,cat就给我们打印什么(按ctrl+c)后退出

我们翻译一下:
输入cat后,我们输入什么,cat就给我们打印什么
cat从键盘文件中读取什么,就向显示器文件写入什么

也就是说cat默认读取的时候是从键盘文件中读取的
如果我们想要让cat从其他文件中读取呢?
Linux常见指令2_第30张图片
我们就引出了输入重定向:<

<:把本来应该在键盘文件中读入的内容,更改成为普通文件中进行输入

cat的用途:通常用来打印一些比较短小的文件内容

5.less和more

那么很长的文件内容呢?
这里就要说一下more(现在已经不常用了)和less了

补充内容

为了写出很长的文件内容,我们介绍一行命令行的shell脚本(先用一下)

i=0; while [ $i -le 10 ]; do echo "hello $i";touch $i.txt; let i++;done
这里的le:小于等于的意思
i是变量,从0一直++到10

Linux常见指令2_第31张图片
打印了11行信息 并且 创建了11个文件,(这个命令可以跟多条)

介绍完了之后,我们用一下这个命令

i=0; while [ $i -le 1000 ]; do echo "hello $i"; let i++;done > HelpFile.txt

在这里插入图片描述
制造了一个大文件
这是我们cat之后的一部分
很显然这么大的文件用cat去查看内容真的很不方便
Linux常见指令2_第32张图片
所以我们要用到less

回到less

讲解less前,我们先说一下more

more HelpFile.txt(按q退出)

Linux常见指令2_第33张图片
然后我们可以按回车键来逐行往下翻
但是按上,按下是没有反应的(所以more现在很少用)
Linux常见指令2_第34张图片

而我们查文件的时候应该是也可以往上翻,也可以往下翻,所以我们要重点推荐less

less HelpFile.txt(按q退出)

Linux常见指令2_第35张图片
我们可以回车往下翻,也可以按上,按下
还可以这样
Linux常见指令2_第36张图片
我们输入了927
然后它就帮助我们查找到了927
Linux常见指令2_第37张图片
所以这个less的主要用途

1.可以让我们在不打开某个代码文件的情况下查看该文件的源代码
2.可以查看一些简单的日志文件

Linux常见指令2_第38张图片
比方说我们想要查看一个四五百行的代码,可以不用vim或者nano,直接用less就行

6.head和tail

如果我们指向查看一个文件的开头位置若干行或者结尾位置若干行呢?
就需要用到head和tail了
Linux常见指令2_第39张图片
Linux常见指令2_第40张图片
Linux常见指令2_第41张图片
默认是显示前10行
tail也是如此

补充知识:命令行管道

那么如果我们想要提取一个大文件的任意一个中间部分呢?(刚才那个文件一共1001行)

比方说我们想要提取这个文件的第800行到第810行呢?

第一种做法:
先提取头部的810行,再提取尾部的10行
第二种做法:
先提取尾部的201行,在提取头部的10行

我们可以先把第一步得到的结果重定向到一个临时文件中
然后再在临时文件中执行第二部操作

这里以第一种做法为例:
第一步:把HelpFile.txt的前810行重定向到临时文件temp.txt中
在这里插入图片描述
第二步:提取后10行
Linux常见指令2_第42张图片
这样的做法可以,但是毕竟要形成临时文件,太不优雅了
并且很明显的是:

head -810 HelpFile.txt 的输出作为了tail -10的输入

所以我们用到了命令行管道
Linux常见指令2_第43张图片
这个|(就是连接两个指令的这个竖划线)就是命令行管道,也就是将

head -810 HelpFile.txt 的输出作为了tail -10的输入

管道中流动的是上一条指令的输出数据,这个数据被上一条指令交给了管道
管道在把这个数据作为下一条指令的输入
这就是一个流水线作业

那么如果我们想要局部性的逆置一下呢?
Linux常见指令2_第44张图片
我要是逆置完了之后在想提取前三行呢?
在这里插入图片描述
很像一条流水线

先tail,后head:
Linux常见指令2_第45张图片

以上就是Linux常见指令2,希望能对大家有所帮助!

你可能感兴趣的:(Linux学习之路,linux,运维,服务器)