【Linux】shell基础知识点(updating)

  • 1.输出重定向
  • 2.多命令批量执行(; 、&&、 ||)
  • 3.脚本不同方式执行的区别(source、bash、sh、./)
  • 4.理解环境变量
  • 5.export
  • 6.引号的使用
  • last.命令相关

1.输出重定向

3种数据流:

stdin:标准输入,代码0,重定向符号<<<
stdout:标准输出,代码1,重定向符号>>>
stderr:标准错误输出,代码2,重定向符号2>2>>

>2>覆盖写入
>>2>>追加写入


创建一个py脚本分别输出标准输出和错误输出:

map@gzdt-map-poi-yingxiang-offline04 test$ cat logging_demo.py 
print(1)
print(1 / 0)

标准输出&错误输出分别重定向到两个不同文件:
python logging_demo.py >a.file 2>b.file,或者
python logging_demo.py 1>a.file 2>b.file,1可以省略。

标准输出&错误输出重定向到同一个文件:
python logging_demo.py >c.file 2>&1,或者
python logging_demo.py &> c.file

Q1:怎么理解2>&1?
A1:将文件描述符 2(标准错误)重定向到文件描述符 1(标准输出)。
Q2:为什么python logging_demo.py 2>&1 >c.file不可以?
A2:先2>&1会将标准错误输出重定向到标准输出(一般是终端),之后再重定向标准输出到c.file,这只会改变标准输出到c.file,标准错误输出仍然输出到原标准输出(终端)。

2.多命令批量执行(; 、&&、 ||)

;:前后命令不相关的连续执行。例如cat a ; touch b,无论a文件存不存在前面一个命令能否正确执行,后一个命令都会执行,b文件被创建。
&&:前后命令相关的连续执行,只有当前面命令能正确执行($?=0)时,后面的命令才会执行。例如cd dir && pwd,dir存在才会打印dir的路径。
||:前后命令相关的连续执行,只有当前面命令不能正确执行($?≠0)时,后面命令才会执行。前面命令如果能正确执行则后面的命令不再执行。例如cd dir || mkdir dir,如果dir存在,直接进入,不存在则创建。

3.脚本不同方式执行的区别(source、bash、sh、./)

bash、sh、以及相对路径或绝对路径的方式执行,相当于在当前进程中新开了一个子进程用来执行脚本,脚本执行完子进程销毁,子进程中定义的变量&环境不会回传给父进程。
source方式执行相当于在当前进程中执行脚本内容,脚本中的变量&环境操作会影响当前进程。

特别需要注意,管道操作并不会传递环境变量,管道中的每个子进程的环境变量都继承自父进程,例如下面在set_env.sh脚本中设置python环境变量并输出。

map@gzdt-map-poi-yingxiang-offline04 coordinate$ sh ./set_env.sh
Python 2.7.2map@gzdt-map-poi-yingxiang-offline04 coordinate$ sh ./set_env.sh | python -V
Python 3.6.5
Python 2.7.2

从输出结果也可以看到:管道操作并非后面的进程在前面的进程执行完后启动,而是同时启动,只有当前面进程的标准输出是后面进程的标准输入时,前面进程才会一定先于后面进程执行完。

1)bash与sh的区别:可以简单理解为,bash在sh的基础上,增加了更多的拓展特性,适合编写更复杂的脚本,兼容sh。实际生产环境中很多sh仍然链接指向到bash。
2)./相对路径的方式执行时,具体是bash执行还是sh执行,取决于脚本首行的shebang是#!/bin/bash还是#!/bin/sh

4.理解环境变量

这块刚接触linux的时候可能会比较不容易理解,甚至会因为害怕影响别人的系统环境而不敢随意修改…,现在想从进程的角度来理解环境变量。

linux中的环境变量可以分为3个层级:系统级、用户级、会话级。系统级和用户级的修改都需要通过修改相关配置文件实现,修改后如果不重启需要source刷新生效。会话级的环境变量可通过export直接在shell中修改。

日常开发中经常会出现多用户共用linux开发机、多人使用相同用户账号共用linux开发机的情况,每次通过iterm或SecureCRT这样的终端软件连接linux服务器时,都相当于新开了一个会话,其实也就是新起了一个shell进程,这个进程的初始环境变量来源于系统级的环境变量文件和用户级的环境变量文件配置,因为进程间的资源隔离,所以无论是多用户账号登陆,还是单用户账号多人共享登陆,每个shell中的环境变量操作(除非修改用户或系统环境变量配置文件)互不影响,属于会话级别的操作,当断开连接的时候会话结束进程销毁,下次重新连接时新shell进程的环境变量又会根据配置文件初始化。

因此从进程资源的角度来说,只要不修改物理配置文件,是不会影响其它用户的。

5.export

export也是一个环境变量相关的命令。linux中在当前shell中执行一个命令,大多时候都是新起一个子进程执行,这些子进程初始的环境变量继承自当前shell父进程。如果不使用export,当前设置的环境变量只会在当前shell有效,不会继承给子shell。

map@gzdt-map-poi-yingxiang-offline04 coordinate$ value=1
map@gzdt-map-poi-yingxiang-offline04 coordinate$ echo $value
1
map@gzdt-map-poi-yingxiang-offline04 coordinate$ bash
Package bash-completion was not found in the pkg-config search path.
Perhaps you should add the directory containing `bash-completion.pc'
to the PKG_CONFIG_PATH environment variable
No package 'bash-completion' found
bash: /yum: 没有那个文件或目录
manpath: 警告:已经设定了 $MANPATH,忽略 /etc/man_db.conf
manpath: 警告:已经设定了 $MANPATH,忽略 /etc/man_db.conf
map@gzdt-map-poi-yingxiang-offline04 coordinate$ echo $valuemap@gzdt-map-poi-yingxiang-offline04 coordinate$
map@gzdt-map-poi-yingxiang-offline04 coordinate$ export value=1
map@gzdt-map-poi-yingxiang-offline04 coordinate$ echo $value
1
map@gzdt-map-poi-yingxiang-offline04 coordinate$ bash
Package bash-completion was not found in the pkg-config search path.
Perhaps you should add the directory containing `bash-completion.pc'
to the PKG_CONFIG_PATH environment variable
No package 'bash-completion' found
bash: /yum: 没有那个文件或目录
manpath: 警告:已经设定了 $MANPATH,忽略 /etc/man_db.conf
manpath: 警告:已经设定了 $MANPATH,忽略 /etc/man_db.conf
map@gzdt-map-poi-yingxiang-offline04 coordinate$ echo $value
1
map@gzdt-map-poi-yingxiang-offline04 coordinate$

所以也为什么能理解,在修改物理配置文件中的环境变量时,为什么都是export xxx=xxx,因为要让登陆时的shell父进程中的环境变量可以被所有子进程继承。

环境变量设置一般遵循export PATH1=PATH2:PATH3:$PATH1的格式,:用来分隔目录路径,表示在原变量值$PATH1的基础上,新增加PATH2PATH3。在使用时会从左往右查找,找到后就不再往后查找。

6.引号的使用

shell中的引号包括单引号''、双引号""、反引号``
单引号:强引用,引号内的任何内容都会被当作字面量处理,不会进行变量替换或者命令替换。
双引号:弱引用,引号内的变量可以被解释替换。
反引号:用于命令替换,反引号内的内容被当作shell命令执行,并将命令的执行结果用来替换原内容。和$()同样的作用,shell中推荐使用$()进行命令替换。

引号在嵌套使用时,遵循从左往右匹配原则,解释方式也只跟最外层引号相关,不受内层引号类型影响。比如shell中拼接一段用双引号包含路径的sql字符串,sql='..."${path}"...'错误,因为最外层单引号,所以内层都会被当字面量解释。可以sql='..."'${path}'"...',后面这种方式相当于3部分拼接而成:..."${path}"...

last.命令相关

https://blog.csdn.net/atwdy/article/details/137874868

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

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

相关文章

jmeter持续学习之----性能初级一些概念和指标

服务端为什么要进行性能测试 大量用户下&#xff0c;系统能否稳定运行&#xff08;比较多&#xff09; 用于硬件服务器的选型 用于软件技术的选型 性能测试关注的点 用户角度:响应时间 资源占用:并发用户数,TPS,资源占用(cpu,内存,JVM) 性能测试策略 基准测试:单用户测试,对…

去了字节跳动,才知道年薪40W的测试有这么多?

最近脉脉职言区有一条讨论火了&#xff1a; 哪家互联网公司薪资最‘厉害’&#xff1f; 下面的评论多为字节跳动&#xff0c;还炸出了很多年薪40W的测试工程师 我只想问一句&#xff0c;现在的测试都这么有钱了吗&#xff1f; 前几天还有朋友说&#xff0c;从腾讯跳槽去了字节&…

8.8.8.8 IP地址的作用

在跟着韦东山老师的学习手册中看见了关于8.8.8.8 IP用于检测网络状态&#xff0c;然后搜索了关于此IP的相关作用如下&#xff1a; 公共DNS服务&#xff1a;8.8.8.8是Google提供的两个公共DNS服务器地址之一&#xff08;另一个是8.8.4.4&#xff09;。DNS&#xff08;域名系统&a…

代码随想录训练营第三十天 452用最少数量的箭引爆气球 435无重叠区间 763划分字母区间

第一题&#xff1a; 原题链接&#xff1a;452. 用最少数量的箭引爆气球 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;先根据每个元素的第一个值进行排序&#xff0c;然后从第一个元素开始遍历&#xff0c;这里要注意我们初始化结果值的时候直接初始化为1&#x…

强化基石,引领未来:完善配套设施与提升服务水平

完善配套设施与提升服务水平对于产业园运营具有重要意义。它们不仅能够提升园区的硬件环境和整体形象&#xff0c;增强园区的吸引力和竞争力&#xff1b;还能够优化营商环境&#xff0c;降低企业运营成本&#xff0c;提高运营效率&#xff1b;同时推动园区创新&#xff0c;形成…

基于Java技术的网吧管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构 工具&#xff1a;MyEclipse&#xff0c;MySQL 系统展示 首页 个人中…

PDF转Markdown的开源工具解析

Marker&#xff1a;PDF转Markdown的开源工具解析 Marker是一个由VikParuchuri在GitHub上开发的开源项目&#xff0c;其核心功能是将PDF文件转换为Markdown格式。以下是对Marker项目的详细解析&#xff1a; 项目概述&#xff1a; 项目链接&#xff1a;https://github.com/VikP…

【技术追踪】DiffuMatting:使用抠图级别注释合成任意对象(ECCV-2024)

万物生&#xff1a;Diffusion与绿幕抠图&#xff0c;影视领域的福音~ 论文&#xff1a;DiffuMatting: Synthesizing Arbitrary Objects with Matting-level Annotation 代码&#xff1a;https://github.com/HUuxiaobin/DiffuMatting &#xff08;即将开源&#xff09; 0、摘要 …

2024年06月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《C等级认证CCF-GESP真题解析》&#xff0c;专栏总目录&#xff1a;点这里。订阅后可阅读专栏内所有文章。 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 在C中&#xff0c;下列不可做变量的是( )。 A. five-Star B. five_star C…

(补充):java各种进制和文本、图像、音频在计算机中的存储方式

文章目录 前言一、进制1 逢几进一2 常见进制在java中的表示3 进制中的转换(1)任意进制转十进制(2)十进制转其他进制二、计算机中的存储1 计算机的存储规则(文本数据)(1)ASCII码表(2)编码规则的发展演化2 计算机的存储规则(图片数据)(1)分辨率、像素(2)黑白图与灰度…

Knife4j的介绍与使用

目录 一、简单介绍1.1 简介1.2 主要特点和功能&#xff1a; 二、使用步骤&#xff1a;2.1 添加依赖&#xff1a;2.2 yml数据源配置2.3 创建knife4j配置类2.4 注解的作用 最后 一、简单介绍 1.1 简介 Knife4j 是一款基于Swagger的开源文档管理工具&#xff0c;主要用于生成和管…

Java客户端调用SOAP方式的WebService服务实现方式分析

简介 在多系统交互中&#xff0c;有时候需要以Java作为客户端来调用SOAP方式的WebService服务&#xff0c;本文通过分析不同的调用方式&#xff0c;以Demo的形式&#xff0c;帮助读者在生产实践中选择合适的调用方式。 本文JDK环境为JDK17。 结论 推荐使用Axis2或者Jaxws&#…

拆分pdf文件最简单的方法,pdf怎么拆成一页一张

在数字化的时代&#xff0c;pdf文件已经成为我们日常办公、学习不可或缺的文档格式。然而&#xff0c;有时候我们可能需要对一个大的pdf文件进行拆分&#xff0c;以方便管理和分享。那么&#xff0c;如何将一个pdf文件拆分成多个pdf呢&#xff1f;本文将为你推荐一种好用的拆分…

PLSQL Day4

--使用显式游标更新行&#xff0c;对所有salesman增加500奖金&#xff1a; declare cursor s_cursor is select * from emp where job SALESMAN for update; begin for e_s in s_cursor loop update emp set comm nvl(comm,0)500 where current of s_cur…

AFT:Attention Free Transformer论文笔记

原文链接 2105.14103 (arxiv.org) 原文翻译 Abstract 我们介绍了 Attention Free Transformer (AFT)&#xff0c;这是 Transformer [1] 的有效变体&#xff0c;它消除了点积自注意力的需要。在 AFT 层&#xff0c;键key和值value首先与一组学习的位置偏差position biases相结…

ubuntu22安装Docker并配置

安装Docker sudo apt install docker.io使用脚本自动安装docker&#xff1a; curl -fsSL get.docker.com -o get-docker.sh sudo sh get-docker.sh --mirror Aliyun配置国内镜像 /etc/docker/daemon.json 推荐配置&#xff1a; {"registry-mirrors": ["htt…

Lab1 论文 MapReduce

目录 &#x1f339;前言 &#x1f985;2 Programming Model &#x1f33c;2.1 Example &#x1f33c;2.2 Types &#x1f33c;2.3 More Examples &#x1f985;3 Implementation(实现) &#x1f33c;3.1 ~ 3.3 &#x1f33c;3.4 ~ 3.6 &#x1f985;4 Refinemen…

代理IP有什么用途

代理IP主要有以下应用场景&#xff1a; 1、隐藏真实IP地址&#xff1a;通过使用代理IP&#xff0c;可以隐藏真实的网络请求来源&#xff0c;保护用户隐私。 2、绕过网络限制&#xff1a;一些地区或网络环境可能存在访问限制&#xff0c;通过使用代理IP可以绕过这些限制&#xf…

Anaconda+Pycharm 项目运行保姆级教程(附带视频)

最近很多小白在问如何用anacondapycharm运行一个深度学习项目&#xff0c;进行代码复现呢&#xff1f;于是写下这篇文章希望能浅浅起到一个指导作用。 附视频讲解地址&#xff1a;AnacondaPycharm项目运行实例_哔哩哔哩_bilibili 一、项目运行前的准备&#xff08;软件安装&…

BN的 作用

1、背景&#xff1a; 卷积神经网络的出现&#xff0c;网络参数量大大减低&#xff0c;使得几十层的深层网络成为可能。然而&#xff0c;在残差网络出现之前&#xff0c;网络的加深使得网络训练变得非常不稳定&#xff0c;甚至出现网络长时间不更新或者不收敛的情形&#xff0c;…