【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.pswp.cn/web/42604.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42604.shtml
英文地址,請注明出處:http://en.pswp.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;…