【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的基础上,新增加PATH2和PATH3。在使用时会从左往右查找,找到后就不再往后查找。
6.引号的使用
shell中的引号包括单引号''、双引号""、反引号``。
单引号:强引用,引号内的任何内容都会被当作字面量处理,不会进行变量替换或者命令替换。
双引号:弱引用,引号内的变量可以被解释替换。
反引号:用于命令替换,反引号内的内容被当作shell命令执行,并将命令的执行结果用来替换原内容。和$()同样的作用,shell中推荐使用$()进行命令替换。
引号在嵌套使用时,遵循从左往右匹配原则,解释方式也只跟最外层引号相关,不受内层引号类型影响。比如shell中拼接一段用双引号包含路径的sql字符串,sql=
'..."${path}"...'错误,因为最外层单引号,所以内层都会被当字面量解释。可以sql='..."'${path}'"...',后面这种方式相当于3部分拼接而成:..."、${path}、"...
last.命令相关
https://blog.csdn.net/atwdy/article/details/137874868
相关文章:
【Linux】shell基础知识点(updating)
1.输出重定向2.多命令批量执行(; 、&&、 ||)3.脚本不同方式执行的区别(source、bash、sh、./)4.理解环境变量5.export6.引号的使用last.命令相关 1.输出重定向 3种数据流: stdin:标准输入…...
Python基础练习•二
# ## Python编程入门作业 # # ### 选择题 # 1. 假设等号右侧变量都已知的情况下,下列哪个语句在Python中是⾮法的?( B ) # A. x y z 1 # B. x (y z 1) # C. x, y y, x # D. x y # 2. 关于Python变量,下列…...
智慧科技照亮水利未来:深入剖析智慧水利解决方案如何助力水利行业实现高效、精准、可持续的管理
目录 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心要素 1. 物联网技术:构建全面感知网络 2. 大数据与云计算:实现数据高效处理与存储 3. GIS与三维可视化:提升决策支持能力 4. 人工智能与机器学习:驱动决策智能化 …...
Vue3学习笔记(n.0)
vue指令之v-for 首先创建自定义组件(practice5.vue): <!--* Author: RealRoad1083425287qq.com* Date: 2024-07-05 21:28:45* LastEditors: Mei* LastEditTime: 2024-07-05 21:35:40* FilePath: \Fighting\new_project_0705\my-vue-app\…...
基于Spring Boot的在线考试系统
您好!我是专注于计算机技术研究的码农小野。如果您对在线考试系统感兴趣或有相关开发需求,欢迎随时联系我。 开发语言:Java 数据库:MySQL 技术:Spring Boot框架,Java技术 工具:Eclipse&…...
Day65 代码随想录打卡|回溯算法篇---组合总和II
题目(leecode T40): 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含…...
C++ 入门03:函数与作用域
往期回顾: C 入门01:初识 C-CSDN博客C 入门02:控制结构和循环-CSDN博客 一、前言 在前面的文章学习中,我们了解了C语言的基础,包括如何定义变量来存储数据,以及如何利用输入输出流实现程序与用户之间的无缝…...
在Linux/Debian/Ubuntu中出现“Could not get lock /var/lib/dpkg/lock-frontend”问题的解决办法
在Linux/Debian/Ubuntu中出现“Could not get lock /var/lib/dpkg/lock-frontend”问题的解决办法 在使用 apt 或 apt-get 进行软件包管理时,有时会遇到以下错误提示: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporari…...
odoo中的钩子 Hooks
钩子 钩子(Hooks)是一种在特定时间点或特定事件发生时执行自定义代码的机制。它们允许开发者在不修改核心代码的情况下,为Odoo添加自定义功能或扩展现有功能。以下是关于Odoo钩子的一些关键点和常见用法: 一、钩子的类型 pre_i…...
05.C1W4.Machine Translation and Document Search
往期文章请点这里 目录 OverviewWhat you’ll be able to do!Learning Objectives Transforming word vectorsOverview of TranslationTransforming vectors Align word vectorsSolving for RFrobenius normFrobenius norm squaredGradient K nearest neighborsFinding the tr…...
计算机网络——数据链路层(点对点协议PPP)
点对点协议PPP的概述 对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。 它主要应用于两个场景: 用户计算机与ISP之间的链路层协议就是点对点协议 PPP,1999年公布了回以在以太网上运行的PPP协…...
信息安全概述
名词解释 大数据:指的是所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。 云计算:是指通过网络提供计算资源(如服务器、存储、数据库、软件开发…...
UE5.3-基础蓝图类整理一
常用蓝图类整理: 1、获取当前关卡名:Get Current LevelName 2、通过关卡名打开关卡:Open Level(by name) 3、碰撞检测事件:Event ActorBeginOverlap 4、获取当前player:Get Player Pawn 5、判断是否相等࿱…...
Python面试题: 如何在 Python 中实现一个线程池?
在 Python 中,实现线程池可以使用内置的 concurrent.futures 模块,该模块提供了一个高层次的接口来管理并发任务。ThreadPoolExecutor 类是实现线程池的主要工具。以下是一些使用示例,展示如何在 Python 中实现和使用线程池: 1. …...
☺初识c++(语法篇)☺
目录 一命名空间(namespace): 二cout与cin简述: 三缺省参数: 四函数重载: 五引用: 六内联函数: 七c中的nullptr简述: 一命名空间(namespace)࿱…...
process.env 管理 Vue 项目的环境变量(Vue项目中环境变量的配置及调用)
简述:在构建 Vue 应用时,管理配置是开发中的一个重要部分。不同的环境(如开发、测试和生产)往往需要不同的配置,例如 API、 基础 URL、第三方服务的密钥等。使用环境变量可以帮助我们更好地管理这些配置。这里将介绍如…...
算法工程师第六天(● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结 )
参考文献 代码随想录 一、四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0 示例 1&#…...
笔记:Newtonsoft.Json 自定义一个根据typeconverter转换的JsonConverter
在 Newtonsoft.Json 中创建一个根据 TypeConverter 转换的 JsonConverter 允许你在序列化和反序列化过程中利用 .NET 的 TypeConverter 机制。这种方式特别有用,当你想要为不直接支持 JSON 序列化的类型提供自定义的序列化逻辑时,比如第三方库中的类型或…...
第241题| 确定极限中参数问题 | 武忠祥老师每日一题
解题思路:确定极限中的参数的方法是求这个极限;求极限根据类型选方法。 形可以用到三种方法:洛必达,等价,泰勒。 先观察题目,将看成一个整体,同时,并令,整理之后如下: 这里也要想办…...
线程池【开发实践】
文章目录 一、为什么要用线程池1.1 单线程的问题1.2 手动创建多线程的问题1.3 线程池的作用(优点)1.4 线程池的使用场景 二、线程池的基础知识2.1 线程池的核心组件2.2 JUC中的线程池架构2.3 线程池的配置参数2.4 线程池常见的拒绝策略(可自定…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
