管道符、重定向和環境變數

来源:https://www.cnblogs.com/-xiaopeng1/archive/2022/05/13/16267609.html
-Advertisement-
Play Games

一、輸入重定向和輸出重定向 輸入重定向就是把文件作為命令的參數,輸出重定向就是把原本要輸出到屏幕上的內容寫到文件裡面。 (1)輸入重定向: (2)輸出重定向; 對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。 示例: 重定向中的覆蓋寫入和追加寫入的不同 ...


一、輸入重定向和輸出重定向
輸入重定向就是把文件作為命令的參數,輸出重定向就是把原本要輸出到屏幕上的內容寫到文件裡面。

(1)輸入重定向:

(2)輸出重定向;

對於重定向中的標準輸出模式,可以省略文件描述符1不寫,而錯誤輸出模式的文件描述符2是必須要寫的。
示例:

重定向中的覆蓋寫入和追加寫入的不同:
覆蓋寫入就是清除原有數據,只保留最後一次的輸入;追加寫入就是保留原來的數據在後面添加後來的數據

雖然都是輸出重定向,但是標準輸出和錯誤輸出還是有區別的。如果文件存在則輸出文件內容,如果不存在則錯誤消息會輸出到屏幕,
如何把創建文件時的錯誤消息也寫入呢?示例如下

還有一種常見情況,就是我們想不區分標準輸出和錯誤輸出,只要命令有輸出信息則全部追加寫入到文件中。這就要用到&>>操作符了:

二、管道符命令
其執行格式為“命令A | 命令B”。管道命令符的作用也可以用一句話概括為“把前一個命令原本要輸出到屏幕的信息當作後一個命令的標準輸入
在修改用戶密碼時,通常都需要輸入兩次密碼以進行確認,這在編寫自動化腳本時將成為一個非常致命的缺陷。通過把管道符和passwd命令的--stdin
參數相結合,可以用一條命令來完成密碼重置操作:

如果需要將管道符處理後的結果既輸出到屏幕,又同時寫入到文件中,則可以與tee命令結合使用。

命令通配符
顧名思義,通配符就是通用的匹配信息的符號,比如星號(*)代表匹配零個或多個字元,問號(?)代表匹配單個字元,中括弧內加上數字[0-9]代表匹配
0~9之間的單個數字的字元,而中括弧內加上字母[abc]則是代表匹配a、b、c三個字元中的任意一個字元。

示例:
匹配所有在/dev目錄中且以loop開頭的文件:

如果只想查看文件名以ram開頭,但是後面還緊跟其他某一個字元的文件的相關信息,這時就需要用到問號來進行通配了

通配符不僅可用於搜索文件或代替被通配的字元,還可以與創建文件的命令相結合,一口氣創建出好多個文件。不過在創建多個文件時,需要使用大括弧,
並且欄位之間用逗號間隔:

轉義字元
四個常見的轉義字元:

我們先定義一個名為number的變數並賦值為5,然後輸出以雙引號括起來的字元串與變數信息:

而如果只需要某個命令的輸出值,可以像命令這樣,將命令用反引號括起來,達到預期的效果。例如,將反引號與uname -a命令結合,然後使用echo命令
來查看本機的Linux版本和內核信息:

三、環境變數
在Linux系統中,變數名稱一般都是大寫的,命令則都是小寫的,這是一種約定俗成的規範。Linux系統中的環境變數是用來定義系統運行環境的一些參數,比如每個用戶不同的家目錄、郵件存放位置等。可以直接通過變數名稱來提取到對應的變數值。
為了更好地幫助大家理解變數的作用,給大家舉個例子。前文中曾經講到,在Linux系統中一切都是文件,Linux命令也不例外。那麼,在用戶執行了一條命令之後,Linux系統中到底發生了什麼事情呢?簡單來說,命令在Linux中的執行分為4個步驟。
第1步:判斷用戶是否以絕對路徑或相對路徑的方式輸入命令(如/bin/ls),如果是絕對路徑則直接執行,否則進入第2步繼續判斷。
第2步:Linux系統檢查用戶輸入的命令是否為“別名命令”,即用一個自定義的命令名稱來替換原本的命令名稱。
使用rm命令刪除文件時,Linux系統都會要求用戶確認是否執行刪除操作,其實這就是Linux系統為了防止用戶誤刪除文件而特意設置的rm別名命令—“rm -i”。

可以用alias命令來創建一個屬於自己的命令別名,語法格式為“alias別名=命令”。若要取消一個命令別名,則是用unalias命令,語法格式為“unalias別名”。

第3步:Bash解釋器判斷用戶輸入的是內部命令還是外部命令。內部命令是解釋器內部的指令,會被直接執行;而用戶在絕大部分時間輸入的是外部命令,這些命令交由步驟4繼續處理。可以使用“type命令名稱”來判斷用戶輸入的命令是內部命令還是外部命令:

第4步:系統在多個路徑中查找用戶輸入的命令文件,而定義這些路徑的變數叫作PATH,可以簡單地把它理解成是“解釋器的小助手”,作用是告訴Bash解釋器待執行的命令可能存放的位置,然後Bash解釋器就會乖乖地在這些位置中逐個查找。PATH是由多個路徑值組成的變數,每個路徑值之間用冒號間隔,對這些路徑的增加和刪除操作將影響到Bash解釋器對Linux命令的查找。

常見環境變數:

Linux作為一個多用戶、多任務的操作系統,能夠為每個用戶提供獨立的、合適的工作運行環境。因此,一個相同的變數會因為用戶身份的不同而具有不同的值。

其實變數是由固定的變數名與用戶或系統設置的變數值兩部分組成的,我們完全可以自行創建變數來滿足工作需求。例如,設置一個名稱為WORKDIR的變數,方便用戶更輕鬆地進入一個層次較深的目錄:

但是這樣的變數不具有全局性,如果工作需要,可以使用export命令將其提升為全局變數,這樣其他用戶也就可以使用它了:
後續要是不使用這個變數了,則可執行unset命令把它取消掉:

作者:江公 出處:http://www.cnblogs.com/-xiaopeng1/ 本文版權歸作者和博客園共有,歡迎轉載,但必須給出原文鏈接,並保留此段聲明,否則保留追究法律責任的權利。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Spring Ioc源碼分析系列--Ioc容器BeanFactoryPostProcessor後置處理器分析 前言 上一篇文章Spring Ioc源碼分析系列--Ioc源碼入口分析已經介紹到Ioc容器的入口refresh()方法,並且分析了refresh()方法裡面的前三個子方法分析了一下。還記得分 ...
  • Predicate<T>:常用的四個方法 boolean test(T t):對給定的參數進行判斷(判斷邏輯由Lambda表達式實現),返回一個布爾值 default Predicate<T>negate():返回一個邏輯的否定,對應邏輯非 default Predicate<T>and(Predi ...
  • 停更這些天,業餘時間和粉絲群的幾個大佬合作寫了一個基於Spring Authorization Server的OAuth2授權伺服器的管理控制台項目Id Server,我覺得這個項目能夠大大降低OAuth2授權伺服器使用難度。可以讓你很方便地去管理OAuth2客戶端信息,甚至可以一鍵生成OAuth2 ...
  • 前言 刷題地址:https://buuoj.cn/challenges 首先打開是一個笑臉,查看源代碼,如下圖發現了,一個文件 一.代碼分析 發現是一堆代碼,需要PHP代碼審計,全部代碼如下。 1 <?php 2 highlight_file(lxx_file); 3 class emmm 4 { ...
  • Python內置函數 | V3.9.1 | 共計155個 還沒學完, 還沒記錄完, 不知道自己能不能堅持記錄下去 1.ArithmeticError 2.AssertionError 3.AttributeError 4.BaseException 5.BlockingIOError 6.Broke ...
  • 1、while迴圈 當指定的條件為真時迴圈執行代碼塊 while 語法: while (condition) { statement; } 比如: <?php $i=1; while($i<=5) { echo "The number is " . $i . "<br>"; $i++; } ?> d ...
  • 最近使用WPF開發項目,為了對WPF知識點進行總結,所以利用業餘時間,開發一個學生信息管理系統【Student Information Management System】。本文主要簡述如何通過WPF+Prism+MAH+WebApi進行開發基於三層架構的桌面版應用程式,僅供學習分享使用,如有不足之... ...
  • extcon,是External Connector的簡稱,用於抽象外部連接器,比如說Audio Jack、USB MicroB/TypeC介面等。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...