【Linux】Shell概念、命令、操作(重定向、管道、变量)

文章目录

  • 一、概念篇
    • 1、shell的概念
    • 2、shell的分类
  • 二、命令篇
    • 1、cat
    • 2、echo
    • 3、ps
    • 4、grep
      • 4.1、匹配行首
      • 4.2、大小写
    • 5、sed
  • 三、操作篇
    • 1、自动补全
    • 2、查看历史命令
    • 3、命令替换
    • 4、重定向
      • 4.1、输入重定向
      • 4.2、输出重定向
      • 4.3、错误重定向
    • 5、管道
    • 6、shell中的变量
      • 6.1、本地变量
      • 6.2、环境变量
      • 6.3、位置变量
      • 6.4、特殊变量
    • 7、shell中的符号
      • 7.1、单引号
      • 7.2、双引号
      • 7.3、反引号
      • 7.4、通配符
        • 1、*
        • 2、?
        • 3、[]
        • 4、[!]
  • 四、谢谢观看!

一、概念篇

1、shell的概念

Shell是一种具备特殊功能的程序,处于用户与内核之间提供用户与内核进行交互的接口。Shell可以接收用户输入的命令,将命令送入内核中执行。
Shell也是一个解释型的程序设计语言,使用Shell语言编写的程序称为Shell脚本。

2、shell的分类

LInux中shell种类很多,但常用的有sh、bash、csh/tcsh、ksh、zsh。

  • 查看主机支持的shell类型:
cat /etc/shells

在这里插入图片描述
可知,我的主机支持sh、bash两种。

  • 查看当前使用的shell(具体命令作用在命令篇讲解):
echo $SHELL

在这里插入图片描述
由此可见,本机当前使用的是bash,即系统默认的shell。

  • 更改用户使用的shell
    直接输对应shell的文件名即可。以sh为例:
/bin/sh

在这里插入图片描述
这时在用echo $SHELL查看,发现还是bash,这是因为sh是在bash之后启动的,是bash的子shell,echo $SHELL只能显示用户登录的shell,不能显示其子shell,这时,就要用ps命令
在这里插入图片描述

二、命令篇

1、cat

查看文件内容

cat 文件            #查看文件内容
cat -n 文件         #把文件的行号也打印出来
cat /var/log/messages   #查看日志

相关命令:

tac 文件         #反向打印文件内容
tac /var/log/messages   #反向查看日志
more 文件        #支持下翻逐行查看
less 文件        #支持上下翻查看文件

/字符串 :搜索关键字(字符串)
q 退出

2、echo

格式:

echo 字符

将其后面的内容按字符串打印在显示器上。与C语言中的printf类似,但echo自带换行符,而printf需自己添加换行符。
在这里插入图片描述
echo后面的内容用“引用”,或用‘引用’,效果几乎一样。屏蔽符号。
在这里插入图片描述
故而,我们可以理解这段命令:echo $SHELL ,将 $SHELL的结果,作为字符串打印在显示器上。
SHELL为环境变量。

3、ps

查看当前系统中,正在运行的进程。
在这里插入图片描述
故而,此图显示了,运行的进程有 bash、sh

4、grep

文本过滤,搜索并打印含有关键字符的匹配行。
从一个或多个文件中搜索与指定模式匹配的文本行。
格式:

grep [选项] [模式] [文件名]

模式:匹配模式
文件名:用于指定搜索目标,文件名可以有多个,中间用空格分开。
选项:

-n    #输出所有匹配的文本行,并显示行号
-c    #只输出匹配行的数量,不显示匹配内容

4.1、匹配行首

元字符“^”表示匹配行首。
例,查找文件/etc/sysctl.conf 中以“#”开头的文本行,并显示其行号。

grep -n ^# sysctl.conf

在这里插入图片描述
“^”还可以结合“$”,搜索文件中的空白行。
例,搜索文件/etc/yum.conf中的空白行与非空白行

grep -c ^$ yum.conf			#搜索空白行
grep -c ^[^$] yum.conf      #非空白行

在这里插入图片描述

4.2、大小写

例,在文件/etc/yum.conf中,搜索this/This关键字
1、-i 选项

grep -in this yum.conf

在这里插入图片描述
2、[ ]符号

grep -n [Tt]his yum.conf  #不区分t的大小写

在这里插入图片描述

grep -n '[Tt][Hh][Ii][Ss]' yum.conf  #不区分this的大小写

在这里插入图片描述
3、转义字符
如果匹配的目标中包含元字符,则需利用转义字符“\”屏蔽它们。
“-”是grep命令中的选项特殊字符,以“-”开头时,也要用转义字符。

5、sed

非交互式文本处理命令,可对文本文件和标准输入进行编辑。与vi等文本编译器相比,sed可一次性处理所有的编译任务。
格式:
1、

sed [选项] 'sed编辑命令' 输入文件

选项:
在这里插入图片描述
现有一文本文件text.txt,文件内容为:
在这里插入图片描述
2、

sed '=' 文件		#使用=选项,带行号输出文本

以上述文件为例:

sed '=' text.txt    #带行号输出text.txt文件	

在这里插入图片描述3、

sed '指定地址a\追加内容' 输入文件	#  a\追加文本

将指定的一行或多行文本追加到指定位置。

sed '/For rain/a\add a new line!!!' text.txt   #在text.txt文件中的For rain 后面追加新内容“add a new line!!!”

在这里插入图片描述
编写一个脚本add.sh,脚本内容为:
在这里插入图片描述
4、用脚本完成追加
方法1:

sed -f add.sh text.txt    # -f编辑脚本内容,只是对输出结果进行了追加,未改变原来的文件和脚本

在这里插入图片描述
在这里插入图片描述
方法2:
将add.sh中加入#!/usr/bin/sed -f (#! 解释器路径 -f)解释器路径可用which命令查看。
在这里插入图片描述
将add.sh变为可执行文件

chmod u+x add.sh

在这里插入图片描述
执行脚本
在这里插入图片描述

三、操作篇

1、自动补全

shell提供自动补全功能,按一次Tab补全,两次列出所有匹配项。
在这里插入图片描述

2、查看历史命令

  • history命令
    在这里插入图片描述
  • 键盘上下键,可逐条查看命令行历史记录

3、命令替换

命令替换有两种方式:反引号` (esc下面的按键) 和$()
作用:将命令字符替换为命令的执行结果。
例:

ls 命令的作用是显示当前文件路径下的文件名
那么,它的执行结果就是:当前文件路径下的文件名,即为`ls`
这时我们将其与echo联用

在这里插入图片描述
此时,两个命令作用相同。
使用$()也是一样:
在这里插入图片描述

4、重定向

shell默认接收用户输入到终端的命令,在执行后打印错误信息和输出结果。

标准输入文件标识符 0
标准输出文件标识符 1
标准错误文件标识符 2

4.1、输入重定向

命令 0<文件名/路径    #0可被省略#以下这段命令为例
wc -l < /usr/share/hwdata/oui.txt

在这里插入图片描述
wc -l 作用:统计文件中的行数
将/usr/share/hwdata/oui.txt中的内容,作为wc命令的输入,即统计/usr/share/hwdata/oui.txt文本中的行数。

4.2、输出重定向

命令 1>文件名/路径    #1可被省略#以下这段命令为例
cat 文件1 > 文件2

将文件1中的内容以覆盖的形式打印到文件2中,若想保留文件2的内容,可用>>,将文件1中的内容追加到文件2中。
(cat:打印文件内容)

4.3、错误重定向

命令 2>文件名/路径    #2不可被省略

将错误信息重定向到文件中。
也可用>>,将错误信息追加到文件中。

5、管道

符号“|”,可将多个简单命令连接起来,使一个命令的输出,作为另一个命令的输入
格式:

命令1 | 命令2 | 命令3

以ls命令和grep命令为例:

ls -l /etc | grep init    #搜索并打印/etc目录下,包含关键字符init的行

将ls -l /etc 的输出(/etc目录下的文件),作为grep的输入,即在/etc目录下的文件中搜索包含init的行。
在这里插入图片描述
在这里插入图片描述

6、shell中的变量

shell提供了一些变量,这些变量可以保存路径名、文件名或数值等,shell中常用的变量有四种:本地变量、环境变量、位置变量、特殊变量。

6.1、本地变量

相当于C语言中的局部变量,只在本shell中有效,退出本shell后将被销毁。
如果变量未被指定,将被赋值为空字符串。在使用变量时,要在变量前加上“$”符号。
在这里插入图片描述
还可以连续输出多个变量
在这里插入图片描述
使用read命令,作用和(scanf/gets)相似。
从标准输入中读取变量值。

-p     #设置输入提示信息

在这里插入图片描述

read -p "please input an int number:" ADD

在这里插入图片描述
删除变量(unset)

echo $ADD
unset ADD	  #删除本地变量ADD
echo $ADD

在这里插入图片描述

6.2、环境变量

环境变量一般用来存储路径列表。用export定义的环境变量只在本shell和其子shell中有效,shell重启后将丢失。

格式:

export 变量名=变量值

export是环境变量的关键字,用于声明该变量为环境变量。

export APP=/usr/local

在这里插入图片描述
查看所有环境变量(env)

env
unset 变量名

删除环境变量(unset)

6.3、位置变量

用于接收传入shell脚本的参数,故位置变量也称为位置参数。
格式:

$n			#用于接收传递给shell脚本的第n个参数

6.4、特殊变量

用来查看脚本的运行信息。

常用特殊变量:

$#  传递脚本的参数数量
$*$@  传递到脚本的所有参数
$?   命令退出状态,0正常退出,非0异常退出
$$   表示进程的PID

7、shell中的符号

7.1、单引号

可将它中间的字符还原成字面意义,屏蔽shell元字符。
例,

'$NUM'  #NUM为本地变量。
NUM=100
echo $NUM
echo '$NUM'

在这里插入图片描述

7.2、双引号

具有屏蔽功能,但不会屏蔽$、\、``符号
例,

NUM=100
echo $NUM
echo "$NUM"

在这里插入图片描述

7.3、反引号

进行命令替换
例,

date    #显示系统时间
echo "Today is `date`"

在这里插入图片描述

7.4、通配符

*     #与0个或多个字符匹配#与任何单个字符匹配
[]    #与[]中的任一字符匹配
[!]   #与[]外的任一字符匹配
1、*

例,列出/etc目录下的以sys开头的所有文件,

ls -d /etc/sys*     #-d选项,只对目标目录本身处理,不做递归处理。

在这里插入图片描述
匹配以sys开头的所有文件。

2、?

每次只能匹配一个字符。
例,查找/etc目录下文件名是由两个字符组成的文件

ls -d /etc/??
ls -d ??   #在/etc路径下

在这里插入图片描述
在这里插入图片描述

3、[]

表示与[]中任一字符匹配,通常是一个范围。
例,在/etc目录下,列出以f~h开头,以.conf结尾的文件

ls /etc/[f-h]*.conf

在这里插入图片描述

4、[!]

表示除了[]里面的字符,与其它任一字符匹配。
例,查找以y开头,不以.conf结尾的文件

ls -d /etc/y*[!conf]

在这里插入图片描述

四、谢谢观看!

参考书籍:《LInux系统管理与自动化运维》黑马程序员/编著

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/55917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

依赖标签分类任务Smin值计算(蛋白质功能预测,GO标签)

前言 Smin是在蛋白质功能预测中比较流行的一个指标&#xff0c;具体由来我也不甚清楚&#xff0c;只是在最近复现的几篇论文中反复出现了&#xff0c;所以记录一下。 计算方法 &#xff08;图来自于PSPGO论文&#xff09; 其中&#x1d70f;表示阈值&#xff0c;t表示GO标签…

Maven入门到进阶:构建、依赖与插件管理详解

文章目录 一、Maven介绍1、什么是Maven2、Maven的核心功能 二、Maven核心概念1、坐标GAVP1.1、GroupId1.2、ArtifactId1.3、Version1.3.1、版本号的组成 1.4、Packaging 2、POM、父POM和超级POM2.1、POM (Project Object Model)2.1、父POM&#xff08;Parent POM&#xff09;2.…

django连接mysql数据库

存在问题&#xff1a; django如何连接mysql数据库 解决方案&#xff1a; 创建工程和项目APP&#xff1b;修改Django的settings.py文件&#xff08;根据自己的数据库配置信息修改&#xff09;&#xff1b; 并在setting.py文件中添加app DATABASES {default: {# ENGINE: djang…

python 爬虫 入门 二、数据解析(正则、bs4、xpath)

目录 一、待匹配数据获取 二、正则 三、bs4 &#xff08;一&#xff09;、访问属性 &#xff08;二&#xff09;、获取标签的值 &#xff08;三&#xff09;、查询方法 四、xpath 后续&#xff1a;登录和代理 上一节我们已经知道了如何向服务器发送请求以获得数据&#x…

关于SSD1306的OLED的显示的研究

文章目录 函数作用参数解释嵌套函数分析主代码分析逻辑流程总结 难点的解析&#xff1a;生成器的主要逻辑分解&#xff1a;每次生成的元组 (pixel_x, pixel_y, pixel_mask)&#xff1a;生成器的整体流程举例总结 反转后的文本绘制竖直布局有问题的旋转180度旋转坐标轴绘制矩形绘…

SVM(支持向量机)

SVM&#xff08;支持向量机&#xff09; 引言 支持向量机(Support Vector Machine,SVM)&#xff0c;可以用来解答二分类问题。支持向量(Support Vector)&#xff1a;把划分数据的决策边界叫做超平面&#xff0c;点到超平面的距离叫做间隔。在SVM中&#xff0c;距离超平面最近…

【配色网站分享】

个人比较喜欢收藏一些好看的插画、UI设计图和配色&#xff0c;于是有了此篇&#xff0c;推荐一些配色网站&#xff0c;希望能对自己和大家有些帮助。 1.uiGradients 一个主打渐变风网站&#xff0c;还可以直接复制颜色。 左上角的“show all gradients”可以查看一些预设的渐…

upload-labs靶场Pass-02

upload-labs靶场Pass-02 分析源码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {if (($_FILES[upload_file][type] image/jpeg) || ($_FILES[upload_file][type] image/png) || ($_FILES[upload_file][type] image/gif)) …

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

音乐播放器-0.专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…

【Qt】Qt的介绍——Qt的概念、使用Qt Creator新建项目、运行Qt项目、纯代码方式、可视化操作、认识对象模型(对象树)

文章目录 Qt1. Qt的概念2. 使用Qt Creator新建项目3. 运行Qt项目3.1 纯代码方式实现3.2 可视化操作实现 4. 认识对象模型&#xff08;对象树&#xff09; Qt 1. Qt的概念 Qt 是一个跨平台的 C 图形用户界面应用程序开发框架。它是软件开发者提供的用于界面开发的程序框架&#…

Mysql(5)—函数

一、关于函数 1.1 简介 MySQL提供了许多内置的函数以帮助用户进行数据操作和分析。这些函数可以分为几类&#xff0c;包括聚合函数、字符串函数、数值函数、日期和时间函数、控制流函数等。 ​ ‍ 1.2 发展 早期版本&#xff08;MySQL 3.x 和 4.x&#xff09; : MySQL 最初…

无人机之三维航迹规划篇

一、基本原理 飞行环境建模&#xff1a;在三维航迹规划中&#xff0c;首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析&#xff0c;以获得可行的飞行路径。 飞行任务需求分析&#xff1a;根据无人机的任务需求&#xff0c;确定航迹规划的…

Java最全面试题->计算机基础面试题->计算机网络面试题

计算机网络 下边是我自己整理的面试题&#xff0c;基本已经很全面了&#xff0c;想要的可以私信我&#xff0c;我会不定期去更新思维导图 哪里不会点哪里 1.说一下TCP/IP四层模型 TCP/IP协议是美国国防部高级计划研究局为实现ARPANET互联网而开发的。 网络接口层&#xff…

现代物流管理:SpringBoot技术突破

3系统分析 3.1可行性分析 通过对本智能物流管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本智能物流管理系统采用SSM框架&#xff0c;JAVA作为开发语…

【云从】九、CDN加速

文章目录 1、CDN基本概念2、CDN加速3、云CDN 1、CDN基本概念 源站&#xff1a;用户稳定运行的业务应用服务器 静态内容&#xff1a;用户多次访问某一资源&#xff0c;响应返回的数据都是相同的内容 例如:图片、视频、软件安装包、安卓 apk 安装包、压缩包文件等动态内容&…

【数据结构】栈和队列经典题目

目录 1.有效的括号【链接】 代码实现 2.用队列实现栈【链接】 代码实现 3.用栈实现队列 ​编辑 代码实现 4.循环队列&#xff08;数组实现&#xff09;【链接】 代码实现 1.有效的括号【链接】 题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&…

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 &#xff08;1&#xff09;、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表&#xff0c;分布在不同的数据库节点上。例如&#xff0c;可以根据某个字段的值进行哈希取模&#xff0c;将数据均匀的分布到不同的节点上。 这样做的好处…

数据结构7——二叉树的顺序结构以及堆的实现

在上篇文章数据结构6——树与二叉树中&#xff0c;我们了解了树和二叉树的概念&#xff0c;接着上篇文章&#xff0c;在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…