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

来源: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命令把它取消掉:


您的分享是我們最大的動力!

-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
  • 分組和樹形結構是不一樣的。 樹形結構是以遞歸形式存在。分組是以鍵值對存在的形式,類似於GroupBy這樣的形式。 舉個例子 ID NAME SEX Class 1 張三 男 1 2 李四 女 2 3 王二 男 1 當以Sex為分組依據時則是 Key Value 男 1 張三 男 1 3 王二 男 1 ...
  • NetCore中將SQLServer資料庫備份為Sql腳本 描述: 最近寫項目收到了一個需求, 就是將SQL Server資料庫備份為Sql腳本, 如果是My Sql之類的還好說, 但是在網上搜了一大堆, 全是教你怎麼操作SSMS的, 就很d疼! 解決方案: 通過各種查找資料, 還有一些老哥的幫助, ...
  • 我的Notion Clowd.Squirrel Squirrel.Windows 是一組工具和適用於.Net的庫,用於管理 Desktop Windows 應用程式的安裝和更新。 Squirrel.Windows 對 Windows 應用程式的實現語言沒有任何要求,甚至無需服務端即可完成增量更新。 ...
  • 轉載請註明來源 https://www.cnblogs.com/brucejiao/p/16188865.html 謝謝! 轉載請註明來源 https://www.cnblogs.com/brucejiao/p/16188865.html 謝謝! 轉載請註明來源 https://www.cnblog ...
  • 1. Netty源碼研究筆記(3)——Channel系列 依舊是通過先縱向再橫向的研究方法,在開篇中,我們發現不管是Sever還是Client,最終的啟動是通過調用channel的對應方法來完成的,而這個動作實際在channel綁定的eventLoop中執行。 接下來,我們繼續EchoSever、E ...
  • 大家好,今天給大家介紹一款輕量、快速、穩定可編排的組件式規則引擎框架LiteFlow。 一、LiteFlow的介紹 LiteFlow官方網站和代碼倉庫地址 官方網站:https://yomahub.com/liteflow Gitee托管倉庫:https://gitee.com/dromara/li ...
  • 我使用Spring AOP實現了用戶操作日誌功能 今天答辯完了,復盤了一下系統,發現還是有一些東西值得拿出來和大家分享一下。 需求分析 系統需要對用戶的操作進行記錄,方便未來溯源 首先想到的就是在每個方法中,去實現記錄的邏輯,但是這樣做肯定是不現實的,首先工作量大,其次違背了軟體工程設計原則(開閉原 ...
  • 《零基礎學Java》 繪製幾何圖形 Java可以分別使用 Graphics 和 Graphics2D 繪製圖形,Graphics類 使用不同的方法繪製不同的圖形(drawLine()方法可f以繪製線、drawRect()方法用於繪製矩形、drawOval()方法用於繪製橢圓形)。 Graphics類 ...
  • 本期教程人臉識別第三方平臺為虹軟科技,本文章講解的是人臉識別RGB活體追蹤技術,免費的功能很多可以自行搭配,希望在你看完本章課程有所收穫。 ...
  • 很多人都喜歡使用黑色的主題樣式,包括我自己,使用了差不多三年的黑色主題,但是個人覺得在進行視窗轉換的時候很廢眼睛。 比如IDEA是全黑的,然後需要看PDF或者WORD又變成白色的了,這樣來回切換導致眼睛很累,畢竟現在網頁以及大部分軟體的界面都是白色的。那麼還是老老實實的使用原來比較順眼的模式吧。 1 ...