【Linux】shell命令运行原理---认识Linux基本指令

主页:醋溜马桶圈-CSDN博客

专栏:Linux_醋溜马桶圈的博客-CSDN博客

giteemnxcc (mnxcc) - Gitee.com

目录

1.shell命令以及运行原理

[1.1 shell命令](#1.1 shell命令)

[1.2 Linux内核权限](#1.2 Linux内核权限)

[1.3 图示Linux](#1.3 图示Linux)

shell和bash的区别

2.认识Linux基本指令

[2.1 指令的本质也是程序](#2.1 指令的本质也是程序)

[2.2 指令所在的路径](#2.2 指令所在的路径)

[2.3 alias指令](#2.3 alias指令)

[3.ls 命令](#3.ls 命令)

[3.1 ls-l命令](#3.1 ls-l命令)

[3.2 ls-la命令](#3.2 ls-la命令)

[3.3 ls-ld命令](#3.3 ls-ld命令)

4.pwd命令

5.cd命令

[5.1 cd- 命令](#5.1 cd- 命令)

[5.2 cd~ 命令](#5.2 cd~ 命令)

桌面文件夹

下载文件夹

家目录

windows中的家目录

Linux中的家目录

6.whoami命令

[6.1 .和..](#6.1 .和..)

[6.2 绝对路径](#6.2 绝对路径)

[6.3 相对路径](#6.3 相对路径)

7.which命令

8.touch指令

1.touch指令创建普通文件

2.当前文件的创建时间

3.stat命令

9.mkdir指令

[9.1 mkdir指令创建目录](#9.1 mkdir指令创建目录)

[9.2 mkdir -p指令创建连续路径](#9.2 mkdir -p指令创建连续路径)

[9.3 tree命令以树状形式显示目录](#9.3 tree命令以树状形式显示目录)

10.rmdir指令&&rm指令

[10.1 rmdir指令](#10.1 rmdir指令)

[10.2 rm命令](#10.2 rm命令)

[10.2.1 rm -f命令](#10.2.1 rm -f命令)

[10.2.2 rm -r命令](#10.2.2 rm -r命令)

[10.2.3 误删的处理](#10.2.3 误删的处理)

11.man指令(重要)

[11.1 举例](#11.1 举例)

[11.2 man手册](#11.2 man手册)

[11.2.1 手册 1](#11.2.1 手册 1)

[11.2.2 手册 2](#11.2.2 手册 2)

[11.2.3 手册 3](#11.2.3 手册 3)

12.cat

[12.1 示例](#12.1 示例)

[12.1.1 cat -n](#12.1.1 cat -n)

[12.1.2 cat -s](#12.1.2 cat -s)

[12.1.3 cat -b](#12.1.3 cat -b)

[12.2 tac](#12.2 tac)

13.cp指令(重要)

[13.1 举例](#13.1 举例)

[13.1.1 dst是目录](#13.1.1 dst是目录)

[13.1.2 dst是带路径的文件名](#13.1.2 dst是带路径的文件名)

14.mv指令(重要)

[14.1 重命名](#14.1 重命名)

[14.2 移动功能](#14.2 移动功能)

[14.3 剪切的同时进行重命名](#14.3 剪切的同时进行重命名)

​编辑

15.重定向符号

[15.1 echo命令](#15.1 echo命令)

[15.2 > 输出重定向](#15.2 > 输出重定向)

[15.2.1 >的作用](#15.2.1 >的作用)

[15.2.2 >注意事项](#15.2.2 >注意事项)

[15.3 >> 追加重定向](#15.3 >> 追加重定向)

[15.4 < 输入重定向](#15.4 < 输入重定向)

15.5.Linux理念

17.more命令

18.less命令

18.1.查日志

19.head指令

20.tail指令

21.与时间相关的指令

[21.1 date命令](#21.1 date命令)

[21.2 在显示方面](#21.2 在显示方面)

[21.2.1 在设定时间方面](#21.2.1 在设定时间方面)

[21.2.2 时间戳](#21.2.2 时间戳)

[21.2.3 时间的重要性](#21.2.3 时间的重要性)

[21.3 Cal指令](#21.3 Cal指令)

[22.find指令: -name](#22.find指令: -name)

23.grep指令

[23.1 grep](#23.1 grep)

[23.2 grep -i](#23.2 grep -i)

[23.3 grep -n](#23.3 grep -n)

[23.3 grep -v](#23.3 grep -v)

24.压缩/解压缩

[24.1 zip/unzip指令](#24.1 zip/unzip指令)

[24.1.1 zip压缩](#24.1.1 zip压缩)

[24.1.2 unzip解压](#24.1.2 unzip解压)

24.2.tar指令(重要)

[24.2.1 tar -czf](#24.2.1 tar -czf)

[24.2.2 tar -cvzf](#24.2.2 tar -cvzf)

[24.2.3 解压tar -xvzf](#24.2.3 解压tar -xvzf)

[24.2.4 解压到指定目录-C](#24.2.4 解压到指定目录-C)

[24.3 为什么要打包和压缩?](#24.3 为什么要打包和压缩?)

[24.3.1 举例实践](#24.3.1 举例实践)

[24.3.2 sz下载](#24.3.2 sz下载)

[24.3.3 rz上传](#24.3.3 rz上传)

24.3.4sz/rz命令的安装


1.shell命令以及运行原理

1.1 shell命令

Linux中有如此之多的命令

shell命令的运行原理是什么呢?严格来说,shell命令也是可执行文件

我们有以下的结论:

  • 大部分指令都是文件
  • 我们写指令前的一段[root@......]叫做命令行提示符
  • 用户执行某种功能的时候,不是直接让操作系统执行对应的指令的,而是先交给外壳程序

命令行提示符

1.2 Linux内核权限

Linux严格意义上说的是一个操作系统,我们称之为"核心(kernel)" ,但我们一般用户,不能直接使用kernel。而是通过kernel的"外壳"程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

用户是无法直接访问操作系统内核的,为了让用户更好的访问,任何一个操作系统都会在外面包裹一层软件层,我们把这个软件层叫做外壳程序(即shell程序)

1.3 图示Linux

这个外壳程序有两种:图形化界面/命令行

最外层就是用户

  • 对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)
  • shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

  • 将使用者的命令翻译给核心(kernel)处理
  • 同时,将核心的处理结果翻译给使用者

**帮助理解:**如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的且有让你心动的MM小花。你看上了小花,但是又不好意思直接表白,那就让你你家人找媒婆帮你提亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫她王婆,它对应我们常使用的bash。为什么我们不自己去跑呢?原因是我们不擅长和对方打交道

bash一般都会创建一个子进程,如果该子进程出现问题,不会影响到bash

这就相当于王婆招了一批实习生,让实习生去跑路,如果出现问题,是实习生的能力问题,而自己不受任何影响

那为什么会存在shell呢?

shell作为媒介,可以禁止用户非法的访问,保护操作系统

shell和bash的区别

shell是外壳程序的统称,而bash是具体的一个外壳程序

shell就是壳的意思,所以外壳程序就是shell程序

2.认识Linux基本指令

2.1 指令的本质也是程序

跟所有程序一样,Linux中的指令本质上也是程序

在/usr/bin目录下都可以查看

所以我们在执行Linux指令的时候,就等同于在Windows中执行.exe程序

程序也是文件,也包含内容和属性

所以安装和卸载其实就是把可执行程序拷贝/删除到系统路径下

2.2 指令所在的路径

which:要求系统打印出所指定的指令名称在系统中的路径

2.3 alias指令

我们知道了指令所处的路径,就可以通过该路径来执行指令,但是通过路径执行ls指令的时候,我们发现显示出的内容少了颜色,用which查看ls路径的时候,我们发现多了一行alias

这是因为我们用的ls命令给/usr/bin/ls命令加上了--color=auto,所以就带颜色,我们也可以这样用

alias也是一个Linux指令,作用是给其他命令起别名

比如我们常用的ll命令,就是ls -l

3.ls 命令

语法: ls [选项][目录或文件]

功能:

对于目录,该命令列出该目录下的所有子目录与文件。

对于文件,将列出文件名以及其他信息。

常用选项:

  • -a 列出目录下的所有文件,包括以 . 开头的隐含文件。
  • -d 将目录像文件一样显示,而不是显示其下的文件。 如:ls --d 指定目录
  • -i 输出文件的i 节点的索引信息。 如 ls --ai 指定文件
  • -k 以 k 字节的形式表示文件的大小。ls --alk 指定文件 -l 列出文件的详细信息。
  • -n 用数字的 UID,GID 代替名称。 (介绍 UID,GID)
  • -F 在每个文件名后附上一个字符以说明该文件的类型
    "* "表示可执行的普通文件;
    "/ "表示目录;
    "@ "表 示符号链接;
    "| "表示FIFOs;
    "="表示套接字(sockets)。(目录类型识别)
  • -r 对目录反向排序
  • -t 以时间排序
  • -s 在l文件名后输出该文件的大小。(大小排序,如何找到目录下最大的文件)
  • -R 列出所有子目录下的文件。(递归)
  • -1 一行只输出一个文件

3.1 ls-l命令

ls作用是只显示文件名属性

ls-l作用是显示更多属性

window环境下对应的文件名、时间、类型、大小都是文件属性

3.2 ls-la命令

在显示当前属性时多了一条属性,. ..

在Linux中,以 . 开头的文件叫做隐藏文件,比如:

我们在dir文件夹下创建一个**.test.txt**

用ls -l命令查看不会显示,而用ls -la就可以显示了

3.3 ls-ld命令

如果我们输入ls -l 命令,会显示该目录里面的内容

如果只想看到该目录本身,不想看到目录里面的内容,我们就可以用到ls-ld命令

4.pwd命令

**语法:**pwd

**功能:**显示用户当前所在的目录

类似于我们在windows环境下文件夹最上层的目录

5.cd命令

Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个结点都是目录或文件

**语法:**cd 目录名

**功能:**改变工作目录。将当前工作目录改变到指定的目录下

举例:

  • cd .. : 返回上级目录
  • cd /home/litao/linux/ : 绝对路径
  • cd ../day02/ : 相对路径
  • d ~:进入用户家目
  • cd -:返回最近访问目录

5.1 cd- 命令

cd-命令的作用是:跳转到最近一次所处的路径下

比如:先处在/目录下,然后cd跳转到/home目录,cd - 一次回到/目录,再cd - 一次,就跳转到刚刚所处的/home目录下

5.2 cd~ 命令

cd~命令的作用:进入用户的家目录

用户就是当前所处的目录

桌面文件夹

Windows中的桌面,本质是一个文件夹,当我们登录Windows的时候:

  1. 确认用户是谁
  2. 根据用户名,找到该用户目录下的"桌面文件夹"
  3. 将桌面文件夹显示成为图形化界面

每个用户都有各自的"桌面文件夹",所以我们多账号登录的时候,看到的桌面都是不一样的

下载文件夹

一般下载安装文件的时候,系统默认会下载到家目录下的下载目录里

家目录

家目录是用户所在的家目录

windows中的家目录

Linux和windows都是多用户操作系统

在windows中,每当新建一个文件夹,都会在user目录底下新建

这就是Windows下的一个家目录

所以Windows中,我们把user目录下的用户目录 就叫做Windows下该用户对应的家目录,该目录存放与用户强相关的数据

Linux中的家目录

Linux下指定的用户也有自己的家目录

所以Linux下

  1. 对于root账号:其默认的家目录就是/root
  2. 对于普通用户:其默认的家目录是/home/XXX,XXX就是新建的用户名

对于任何一个用户,首次登录,所处的路径都是自己的家目录

6.whoami命令

在linux中我们经常说:我们当前所处的路径下,我们可以用whoami来查看当前所处的目录

6.1 .和..

任何目录下,都会默认有两个隐藏目录 :...

  • . :用来表示当前路径
  • ..:用来表示上级路径

我们用cd命令可以看到:

  • cd . 还是在当前路径
  • cd .. 返回上级路径

我们一直cd..,到最后回到了 / ,这个就是根目录

一个目录可以有很多个子目录和文件,而每个文件只能隶属于一个父目录,所以我们一路逆推回去,只有唯一的一条路径,一定可以回到根目录

6.2 绝对路径

根目录开始找到当前的路径叫做绝对路径:

根目录也是一个目录:

在根目录下也有**.** 和**..**

6.3 相对路径

7.which命令

which加程序名,就是在系统层面上,告诉我们这个可执行程序所在的路径

8.touch指令

语法:touch [选项]... 文件...

功能:touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件

常用选项

  • -a 或--time=atime或--time=access或--time=use只更改存取时间。
  • -c 或--no-create 不建立任何文档。
  • -d 使用指定的日期时间,而非现在的时间。
  • -f 此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
  • -m 或--time=mtime或--time=modify 只更改变动时间。
  • -r 把指定文档或目录的日期时间,统统设成和参考文档或目录的日期时间相同。
  • -t 使用指定的日期时间,而非现在的时间

1.touch指令创建普通文件

touch指令只能创建普通文件

2.当前文件的创建时间

任何一个文件都包括文件内容和文件属性,我们在创建文件的时候也会创建

现在我们看一下文件的创建时间这个属性

红框里是文件的创建时间最近的修改时间

3.stat命令

如果我们想要查看一个文件的更详细的属性,就可以用stat这个命令

每一个文件都会有三种时间:

  • Access:访问时间
  • Modify:修改时间
  • Change:修改时间

简称为一个文件的ACM时间

9.mkdir指令

语法:mkdir [选项] dirname...

功能:在当前目录下创建一个名为 "dirname"的目录

常用选项

  • -p, --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录

举例:

mkdir --p test/test1 : 递归建立多个目录

参考文档: IBM Developer

9.1 mkdir指令创建目录

mkdir创建目录的时候默认创建的是一个空目录

ls -al 的时候也只有.和..

9.2 mkdir -p指令创建连续路径

如果要回到a所在的目录,我们可以连续回退

9.3 tree命令以树状形式显示目录

Linux目录是树状结构,我们可以以树的形式把目录打印出来

如果遇到下面这种情况:

这是因为tree没有安装,我们只需要输入这段指令等待一段时间即可

复制代码
sudo yum install -y tree

或者我们可以用这段指令

复制代码
yum -y install tree

10.rmdir指令&&rm指令

10.1 rmdir指令

rmdir是一个与mkdir相对应的命令;mkdir是建立目录,而rmdir是删除命令

语法:rmdir [-p][dirName]

适用对象:具有当前目录操作权限的所有使用者

功能:删除空目录

常用选项

  • -p 当子目录被删除后如果父目录也变成空目录的话,就连带父目录一起删除

10.2 rm命令

rm命令可以同时删除文件或目录

语法:rm [-f-i-r-v][dirName/dir]

适用对象:所有使用者

功能:删除文件或目录

常用选项

  • -f 即使文件属性为只读(即写保护),亦直接删除
  • -i 删除前逐一询问确认
  • -r 删除目录及其下所有文件

在使用rm命令的时候,会有一个提醒,等同于Windows中的"你确定要删除这个文件吗?"y就代表是,n就代表否

在Linux中,rm删除了就是删除了,不同于Windows中的回收站

10.2.1 rm -f命令

如果想要跳过这个询问直接删除,就可以使用rm -f命令

10.2.2 rm -r命令

我们用rm直接删除目录的话是删不了的

如果我们想要用rm命令删除一个目录,可以用rm -r

如果我们想用rm命令强制并递归删除一个目录的话,可以用rm -rf

10.2.3 误删的处理

如果我们不小心删除了根目录,就相当于Windows中格式化了c盘,系统对应的文件都没了,这个时候我们不要慌张,如果我们没有很重要的东西,在云服务器端就可以直接重装系统

如果在企业中,我们如实向上汇报,这是作为程序员的一个基本素养,为公司及时止损

作为一个Linux工程师,很大概率都会经历两三次误删的操作,这时我们正常重装系统,或者找更专业的人来处理就行

更深入的知识我们后面文章会提到

因此,我们一定要养成及时备份的习惯,及时止损

在Linux中,指令可能会出现失控(疯狂打印)的情况,这时候我们可以ctrl+c来终止异常的命令

11.man 指令(重要)

Linux的命令有很多参数,我们不可能全记住,我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man

语法: man [选项] 命令

常用选项

  • -k 根据关键字搜索联机帮助
  • num 只在第num章节找
  • -a 将所有章节的都显示出来,比如 man printf 它缺省从第一章开始搜索,知道就停止,用a选项,当按下q退出,他会继续往后面搜索,直到所有章节都搜索完毕。

11.1 举例

比如我们不会rm这个指令

翻阅手册可以用上下键,退出按q

11.2 man手册

解释一下,man手册分为8章

  • 1 是普通的命令
  • 2 是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
  • 3 是库函数,如printf,fread4是特殊文件,也就是/dev下的各种设备文件
  • 5 是指文件的格式,比如passwd, 就会说明这个文件中各个字段的含义
  • 6 是给游戏留的,由各个游戏自己定义
  • 7 是附件还有一些变量,比如向environ这种全局变量在这里就有说明
  • 8 是系统管理用的命令,这些命令只能由root使用,如ifconfig

我们主要学习一下123,456789手册目前暂时不用了解

11.2.1 手册 1

1 说的是可执行程序 指令

使用的时候就可以这样用

11.2.2 手册 2

2 说的是系统调用

在使用man指令时,我们最重要的是查2号手册

系统调用就是Linux内核提供的接口

11.2.3 手册 3

3 说的是C库函数的调用

比如我们要查看C库函数中的printf,就可以这样使用

如果显示是这样

那就使用下面这段指令安装

复制代码
yum install -y man-pages

这就是C库函数中的printf函数

如果是直接查看printf指令是和C语言库中的没关系的,他就是一条指令,和printf函数没关系,只是实现了类似C语言库中printf函数的功能

因为在Linux 不通过指定手册查看的时候,直接man 指令,这时候会在手册中从上往下依次查,如果在一个手册中找到了,就停下来再不往下找了

12.cat

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

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

常用选项

  • -b 对非空输出行编号
  • -n 对输出的所有行编号
  • -s 不输出多行空行

12.1 示例

可以将文本文件的内容打印出来

12.1.1 cat -n

12.1.2 cat -s

这是修改code.c的内容

直接cat就是全部打印

cat -s就可以不打印多余的空行

12.1.3 cat -b

给非空行编号

12.2 tac

tac也是打印文件内容,只不过和cat相比,tac是倒着打印

13.cp指令(重要)

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

功能: 复制文件或目录

说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息

常用选项

  • -f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
  • -i 或 --interactive 覆盖文件之前先询问用户
  • -r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
  • -R 或 --recursive递归处理,将指定目录下的文件及子目录一并处理

13.1 举例

复制代码
cp src dst

src是源文件,dst是拷贝到的目录

这里dst分为两种情况

  • dst是目录:src直接拷贝到这个目录下
  • dst是带路径的文件名:拷贝到指定目录,顺便进行重命名

Linux中同一个目录下,不允许存在同名文件

src dst 都可以是携带绝对或者相对路径进行拷贝的

13.1.1 dst是目录

假如我们想要把这个111目录下的file.txt文件拷贝到上级目录,就可以用下面的指令

现在file.txt就拷贝到了111同级目录

13.1.2 dst是带路径的文件名

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

拷贝到指定目录,顺便进行重命名

本例中将111目录下的dir拷贝到上级目录并重命名为111dir

14.mv 指令(重要)

mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。

语法: mv [选项] 源文件或目录 目标文件或目录

功能:

  1. 视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中
  2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名
  3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中

常用选项

  • -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖
  • -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!

14.1 重命名

在指定的目录下,对指定的文件或者目录重命名

14.2 移动功能

将指定目录下的文件或者目录,"剪切"到指定的目录下

我们想要将111dir目录下的log.txt移动到上级目录

直接输入这样的指令就行

从上级目录移回来也是同样的道理

我们也可以将带目录递归的移动

14.3 剪切的同时进行重命名

将adir移动到上级目录并重命名为a

移动回来也是同样的道理

15.重定向符号

15.1 echo命令

在Linux中,我们可以使用echo命令打印

15.2 > 输出重定向

在111文件夹中我们只有dir文件夹和file.txt文件

用 echo > (输出重定向)我们可以将内容输入对应的文件中

也可以直接重定向 >

15.2.1 >的作用

  1. 创建文件(如果文件已经存在,就不用创建)
  2. 本来应该显示到显示器上的数据,显示到文件中

往后我们在创建文件的时候,除了可以使用touch命令,也可以直接使用重定义符号 >

15.2.2 >注意事项

我们发现每次进行重定向的时候,都会从文件的开始写入文件的内容

即每次都会先清空再写入

所以我们也可以用 > 清空一个文件

15.3 >> 追加重定向

>会在文件的开始进行写入,而>>会在文件的结尾进行写入,即>>不会进行情况

15.4 < 输入重定向

cat命令默认的是从键盘读取并写到显示器上

如果我们用 < 符号,则是从指定文件读取并写到显示器上

15.5.Linux理念

Linux理念是:Linux中一切皆文件

普通文件vs显示器

对于任何文件来说,都可以进行读和写

对于显示器设备来说,我们可以把他看作一个显示器文件 ,所以向显示器打印就可以看作向显示器文件进行写入

所以当使用echo命令时,我们称作把数据写到显示器上,即向显示器文件进行写入

而 > 符号表示本来应该向显示器写入的数据,写入到磁盘文件中

所以把他叫做重定向符号,又因为他是输出作用,就叫做 输出重定向

17.more命令

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

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

常用选项

  • -n 对输出的所有行编号
  • q 退出more

cat适合打开查看一些小文件

当遇到大文本文件的时候,使用more命令,more可以打满一屏输出,就停下来,让用户下翻,逐行进行阅读

我们生成一个大文本文件

用cat查看会刷屏

从1-10000全部打印出来了

用more查看,显示一屏的内容,一屏占满后就不会刷屏了,用enter可以逐行下翻,用Q可以退出

如果我们想要在当前的这个文件中查找关键字的话,可以输入这样的指令

比如我们要查看999,输入/999,他就会跳转到999这一屏

18.less命令

less可以实现more同样的功能

less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。less 的用法比起 more 更加的有弹性。在 more 的时候,我们并没有办法向前面翻, 只能往后面看,但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。

语法: less [参数] 文件

功能

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

选项

  • -i 忽略搜索时的大小写
  • -N 显示每行的行号
  • /字符串:向下搜索"字符串"的功能
  • ?字符串:向上搜索"字符串"的功能
  • n:重复前一个搜索(与 / 或 ? 有关)
  • N:反向重复前一个搜索(与 / 或 ? 有关)
  • q:quit

即我们在使用less命令的时候,可以通过"↑""↓"键来翻阅

而且这时我们查找关键字的时候会有高亮显示

18.1.查日志

在我们进入企业之后,我们可能会遇到需要查日志的情况,在Linux中,日志是存在/var/log/messages中的

通过cat查看我们可以看到

这是刷屏的显示,太多的信息不是有用的,我们就可以用less命令逐行查看或查找

19.head 指令

head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。

语法: head [参数]... [文件]...

功能

head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。

选项

  • -n<行数> 显示的行数

只查看文件的头部信息(默认前十行的信息)

如果只想看前五行就可以用head -5

20.tail 指令

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

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

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

选项:

  • -f 循环读取
  • -n<行数> 显示行数

只查看文件的尾部信息(默认后十行的信息)

如果只想看后五行就可以用tail -5

21.与时间相关的指令

21.1 date命令

date 指定格式显示时间: date +%Y:%m:%d

date 用法:date [OPTION]... [+FORMAT]

21.2 在显示方面

在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下

  • %H : 小时(00..23)
  • %M : 分钟(00..59)
  • %S : 秒(00..61)
  • %X : 相当于 %H:%M:%S
  • %d : 日 (01..31)
  • %m : 月份 (01..12)
  • %Y : 完整年份 (0000..9999)
  • %F : 相当于 %Y-%m-%d

21.2.1 在设定时间方面

  • date -s //设置当前时间,只有root权限才能设置,其他只能查看。
  • date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
  • date -s 01:01:01 //设置具体时间,不会对日期做更改
  • date -s "01:01:01 2008-05-23″ //这样可以设置全部时间
  • date -s "01:01:01 20080523″ //这样可以设置全部时间
  • date -s "2008-05-23 01:01:01″ //这样可以设置全部时间
  • date -s "20080523 01:01:01″ //这样可以设置全部时间

21.2.2 时间戳

时间->时间戳:date +%s

时间戳->时间:date -d@1508749502

Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒

我们可以将时间戳转换为我们能够理解的时间、

21.2.3 时间的重要性

在计算机中,时间是非常重要的,无论在工作还是生活中,任何事情都是有时间的

比如买车票机票,比如银行转账,工资发放都是带时间的

在计算机中,时间和日志的关联性比较大

21.3 Cal 指令

cal命令可以用来显示公历(阳历)日历。公历是现在国际通用的历法,又称格列历,通称阳历。"阳历"又名"太阳历",系以地球绕行太阳一周为一年,为西方各国所通用,故又名"西历"。

命令格式: cal [参数][月份][年份]

功能: 用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999),如有两个参数,则表示月份和年份

常用选项

  • -3 显示系统前一个月,当前月,下一个月的月历
  • -j 显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
  • -y 显示当前年份的日历

22.find指令: -name

Linux下find命令在目录结构中搜索文件,并执行指定的操作。

Linux下find命令提供了相当多的查找条件,功能很强大。由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下。即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限。

在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)。

语法: find pathname -options

**功能:**用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)

常用选项:

  • -name 按照文件名查找文件

以绝对路径的形式显示

23.grep 指令

grep参考文档:https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html

语法: grep [选项] 搜寻字符串 文件

**功能:**在文件中搜索字符串,将找到的行打印出来

常用选项:

  • -i :忽略大小写的不同,所以大小写视为相同
  • -n :顺便输出行号
  • -v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行

23.1 grep

23.2 grep -i

我们创建一个有大小写字母的文件

23.3 grep -n

23.3 grep -v

24.压缩/解压缩

24.1 zip/unzip 指令

语法: zip 压缩文件.zip 目录或文件

**功能:**将目录或文件压缩成zip格式

常用选项:

  • -r 递归处理,将指定目录下的所有文件和子目录一并处理
  • 将test2目录压缩:zip test2.zip test2/*
  • 解压到tmp目录:unzip test2.zip -d /tmp

24.1.1 zip压缩

为了演示压缩功能,我们在当前目录下创建五个文件

我们发现这些文件都在111目录下,所以我们想要把111目录打包一下

由于目录下有多个文件,所以需要zip -r,以递归的形式打包目录

为了验证这个zip文件确实压缩了文件,我们创建一个临时目录来验证,将zip文件mv到该目录中来

24.1.2 unzip解压

解压我们直接unzip+zip文件名即可

我们发现,目录以及目录的内容都被解压出来了,说明目录的内容都被成功压缩并解压了

24.2**.tar指令(重要)**

打包 / 解包,不打开它, 直接看内容

tar [-cxtzjvf] 文件与目录 .... 参数

  • -c :建立一个压缩文件的参数指令(create 的意思);
  • -x :解开一个压缩文件的参数指令!
  • -t :查看 tarfile 里面的文件!
  • -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
  • -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
  • -v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
  • -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
  • -C : 解压到指定目录

tar命令给我们提供的选项特别多,我们只介绍其中的几个

24.2.1 tar -czf

tar命令可以跟上组合选项czf,将文件打包压缩,打包后的压缩文件后缀为**.tgz**

24.2.2 tar -cvzf

如果我们想要看到打包的过程,我们可以加上一个v选项tar -cvzf

24.2.3 解压tar -xvzf

解压只需要将-c选项改为-x选项即可

24.2.4 解压到指定目录-C

解压到指定目录需要-C选项,注意是大写的C

24.3 为什么要打包和压缩?

我们在Linux中已经学习了zip/unzip和tar两种方式来打包压缩文件,那么为什么要打包和压缩呢?

最直接的目的就是为了便于网络传输,防止传输过程中的数据丢失

24.3.1 举例实践

我们做个示例演示一下

我们创建一百个文件

我们将文件都放到dir里面来,进行打包

24.3.2 sz下载

接下来我们可以用sz命令将压缩文件发送到Windows桌面

这时我们发现我们的Windows桌面上就多了我们的dir.tgz文件

我们可以用WinRAR打开,所有的文件都发送过来了

24.3.3 rz上传

我们在Windows桌面已经有了dir.tgz;这时我们将Linux中的文件删除,使用rz命令将Windows中的文件上传到Linux

直接rz,弹出对话框,我们选择桌面对应的文件

这时我们发现dir.tgz已经上传到Linux了

解压后所有的文件都存在

24.3.4sz/rz命令的安装

需要使用的sz下载命令,rz上传命令

如果Linux环境中没有安装,可以yum安装

复制代码
yum -y install lrzsz

本文我们演示的是基于xshell进行压缩包的 Windows 和 Linux / Linux 和 Linux 互传 --- 压缩包

如果要进行两台Linux机器之间的文件传输,我们用下面的命令

scp XXX.tgz 用户名**@另一台Linux机器的IP**:你要拷贝到的路径

至此,我们Linux的基本指令已经了解的差不多了

相关推荐
Code Warrior几秒前
【Linux】库的制作与原理(1)
linux
生涯にわたる学び7 分钟前
关于之前知识的一些补充 02
linux·arm开发
汐汐咯12 分钟前
linux上安装minconda
linux·运维·服务器
小波小波轩然大波37 分钟前
Linux服务器配置(mariadb服务器)
linux·服务器·mariadb
忧郁的橙子.39 分钟前
k8s 主节点重启后 从节点 get 异常
linux·运维·服务器
Raymond运维1 小时前
Apache介绍和安装
linux·运维·apache
半梦半醒*1 小时前
nginx的访问控制、用户认证、https
linux·运维·服务器·nginx·https·centos
1024find1 小时前
Jenkins与GitLab-CI的技术对比分析
运维·devops
Lin_Aries_04211 小时前
使用 Jenkins 的流水线项目实施 CI/CD
运维·ci/cd·docker·容器·云计算·jenkins
斯普信专业组2 小时前
Filebeat写ElasticSearch故障排查思路(下)
运维·elasticsearch·中间件·filebeat