」<」 表示的是輸入重定向的意思,就是把<後面跟的文件取代鍵盤作為新的輸入設備。
」| 」則表示一個管道的意思,可以理解為東西從管道的一邊流向另外一邊。
㈡ Linux 系統中「|」管道的作用是什麼
「|」是管道命令操作符,簡稱管道符。利用Linux所提供的管道符「|」將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連續使用管道意味著第一個命令的輸出會作為 第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。
它僅能處理經由前面一個指令傳出的正確輸出信息,也就是 standard output 的信息,對於 standard error 信息沒有直接處理能力。
用法示例:
ls -l | more
該命令列出當前目錄中的文檔,並把輸出送給more命令作為輸入,more命令分頁顯示文件列表。
㈢ linux命令ps -ef | grep httpd 是啥意思
這條命令是用來檢查進程中有無httpd開啟或是啟動。
下面是ps命令參數解釋:
-e
命令之後顯示環境(如:ps
-d
e;
ps
-a
e)(utility)
-f
全部列出,通常和其他選項聯用。如:ps
-fa
or
ps
-fx
and
so
on。
|管道命令
grep命令是一種強大的文本搜索工具,能使用正則表達式搜索文本,並把匹配的行列印來。grep全稱是Global
Regular
Expression
Print,表示全局正則表達式版本,使用許可權是所有用戶。
ps
-ef
|
grep
httpd
:
檢查httpd進程是否存在。
㈣ Linux 的管道命令如何使用
管道不支持像,ls mv cp 等,
如果要用到這些命令,就要在管道後加參數:xarg
如:which touch | xarg ls -la 就行了。
㈤ Linux 高級命令
echo "HelloWorld"
向控制台輸出HelloWorld信息
Linux允許將命令執行結果重定向到一個文件,本應顯示在終端上的內容保存到指定文件中。
ls > test.txt
test.txt 如果不存在,則創建,存在則覆蓋其內容
注意: > 輸出重定向會覆蓋原來的內容, >> 輸出重定向則會追加到文件的尾部
cat xxx.py 可以用來快速查看某個文件內容,輸出到控制台
cat test.txt >> haha.txt 將test.txt的內容追加到haha.txt中
cat 1.txt 2.txt > 1_2.txt 將1.txt 2.txt內容合並到1_2.txt中
分屏顯示:more
查看內容時,在信息過長無法在一屏上顯示時,會出現快速滾屏,使得用戶無法看清文件的內容,此時可以使用more命令,從頭開始,每次只顯示一頁,空格鍵顯示下一頁,b鍵上一頁,按下q鍵退出顯示,按下h鍵可以獲取幫助。
more xxx.py
管道:一個命令的輸出可以通過管道做為另一個命令的輸入。
管道我們可以理解現實生活中的管子,管子的一頭塞東西進去,另一頭取出來,這里「 | 」的左右分為兩端,左端塞東西(寫),右端取東西(讀)。即管道左邊的輸出結果作為管道右側的參數
cat info.txt | more
tree | more
::: warning
more管道符讀到的內容只能前進,不能後退;只能使用空格或回車向下看,不能使用b回看
:::
Linux鏈接文件類似於Windows下的快捷方式。
鏈接文件分為軟鏈接和硬鏈接。
ln -s 源文件 鏈接文件
ln 源文件 鏈接文件
沒有-s 選項代表建立一個硬鏈接文件,兩個文件佔用相同大小的硬碟空間,即使刪除了源文件,鏈接文件還是存在,一般用於保護系統重要的文件。所以-s選項是更常見的形式。
::: warning 注意
如果軟鏈接文件和源文件不在同一個目錄,源文件要使用絕對路徑,不能使用相對路徑。
:::
find命令功能非常強大,通常用來在特定的目錄下搜索符合條件的文件,也可以用來搜索特定用戶屬主的文件。
常用用法:
Linux系統中grep命令是一種強大的文本搜索工具,grep允許對文本文件進行模式查找。如果找到匹配模式, grep列印包含模式的所有行。
grep一般格式為:
在grep命令中輸入字元串參數時,最好用引號或雙引號括起來。
例如:
從某個文件搜索
搜索當前目錄所有文件
常用選項說明:**
grep搜索內容串可以是正則表達式。
正則表達式是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個「規則字元串」,這個「規則字元串」用來表達對字元串的一種過濾邏輯。
grep常用正則表達式:
計算機中的數據經常需要備份,tar是Unix/Linux中最常用的備份工具,此命令可以把一系列文件歸檔到一個大文件中,也可以把檔案文件解開以恢復數據。
tar使用格式:
tar [參數] 打包文件名 文件
tar命令很特殊,其參數前面可以使用「-」,也可以不使用。
常用參數:
注意:除了f需要放在參數的最後,其它參數的順序任意。
常用命令:
tar與gzip命令結合使用實現文件打包、壓縮。 tar只負責打包文件,但不壓縮,用gzip壓縮tar打包後的文件,其擴展名一般用xxxx.tar.gz。也會見到縮寫的.tgz這種擴展名。
gzip使用格式如下:
常用選項:
tar這個命令並沒有壓縮的功能,它只是一個打包的命令,但是在tar命令中增加一個選項 -z 可以調用gzip實現壓縮的功能,最終實行一個先打包後壓縮的過程。
-z :指定壓縮包的格式為 xxx.tar.gz
tar壓縮: tar zcvf xxx.tar.gz 文件1 文件2 ...
tar解壓: tar zxvf xxx.tar.gz
解壓到指定目錄: tar zxvf xxx.tar.gz -C target_dir/ (大寫字母「C」)
tar與bzip2命令結合使用實現文件打包、壓縮(用法和gzip一樣)。
tar只負責打包文件,但不壓縮,用bzip2壓縮tar打包後的文件,其擴展名一般用xxxx.tar.bz2。
在tar命令中增加一個選項(-j)可以調用bzip2實現了一個壓縮的功能,實行一個先打包後壓縮的過程。
壓縮用法 : tar -jcvf 壓縮包包名 文件1 文件2... (例: tar jcvf bak.tar.bz2 *.c )
解壓用法 : tar -jxvf 壓縮包包名 (例: tar jxvf bak.tar.bz2 )
通過zip壓縮文件的目標文件不需要指定擴展名,默認擴展名為zip。
壓縮文件 :zip [-r] 目標文件(沒有擴展名) 源文件
解壓文件 :unzip -d 解壓後目錄文件 壓縮文件
使用tree命令可以查看指定目錄的樹狀結構
有時我們想知道被執行的命令在哪個目錄,以方便切換或更新不同版本,如Python。可以使用 which 命令
文件內容為:123 aaa bbb哈
執行 echo "123 aaa bbb哈" > xxx.txt
wc -l xxx.txt 文件內容的行數1
wc -w xxx.txt 文件內容的單詞數3
wc -c xxx.txt 文件內容的位元組數15
wc xxx.txt 文件內容的行數,單詞數,位元組數1 3 15
wc -m xxx.txt 文件的字元數13
sed 是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用。一般用於自動編輯轉換程序,動態調整文件內容。
sed 's/good/GOODS/' file 替換每行第一個指定字元串(輸出所有行)
sed -n 's/good/GOODS/p' file 替換每行第一個指定字元串(只輸出替換的行)
sed -i 's/good/GOODS/g' file 替換所有指定字元串,並應用到文件
sed ƈd' file 刪除第二行
sed '/^test/d' 刪除good開頭的行
sed -n Ɖp' file 列印第3行
顯示當前時間 # Tue May 7 14:35:31 DST 2019
當前日期和時間 # 20190507-14:34:25
使用history命令可以查看之前輸過的命令及其id,
使用 !id 的形式,可以快速執行指定歷史命令
Linux命令大全: http://man.linuxde.net/
菜鳥Linux命令: https://www.runoob.com/linux/linux-command-manual.html
㈥ linux借用外部命令expr,實現計算器功能,利用管道,進程
test指令(使用指令man查詢)
功能:檢查文件類型,值比較。
test的各種參數和使用。
test EXPRESSION1 –a EXPRESSION2
當表達式1和表達式2同時為真時值為真
test EXPRESSION1 –o EXPRESSION2
當表達式1或者表達式2為真時值為真
test –n STRING
或者
test STRING
當STRING串的長度不為零時值為真
test –z STRING
當STRING串長度為零時值為真
test STRING1 = STRING2
當STRING1和STRING2相同時值為真
test STRING1 != STRING2
當STRING1 和 STRING2不同時值為真
test INTEGER1 –eq INTEGER2
當INTEGER1等於INTEGER2時值為真
test INTEGER1 –ge INTEGER2
當INTEGER1大於或者等於INTEGER2時值為真
test INTEGER1 –gt INTEGER2
當INTEGER1 大於INTEGER2時值為真
test INTEGER1 –le INTEGER2
當INTEGER1小於等於INTEGER2時值為真
test INTEGER1 –lt INTEGER2
當INTEGER1 小於INTEGER2時值為真
test INTEGER1 –ne INTEGER2
當INTEGER1不等於INTEGER2時值為真
test FILE1 –ef FILE2
當FILE1和FILE2有同樣的device和inode號時為真(詳細見linux文件學習筆記)
test FILE1 –nt FILE2
當FILE1修改時間比FILE2新時值為真
test FILE1 –ot FILE2
當FILE1修改時間比FILE2舊時值為真
test –b FILE
FILE存在並且內容是block類型的
test –c FILE
FILE存在並且是字元類型的
test –d FILE
FILE存在並且是一個目錄
test –e FILE
FILE是否存在
test –f FILE
FILE存在並且是一個正則表達式類型的文檔
test –g FILE
FILE存在並且是 set-group-ID也就是SGID(詳細見後文學習筆記)
test –G FILE
FILE存在並且由有效的GROUP ID所擁有(詳細見後文學習筆記)
test –h FILE
FILE存在並且是一個符號鏈接(詳細見後文學習筆記)
test –k FILE
FILE存在並且設置了sticky bit set(詳細見後文學習筆記)
test –L FILE
FILE存在並且是一個符號鏈接
test –O FILE
FILE存在並且由一個有效的USER ID所擁有
test –p FILE
FILE存在並且是一個命名管道(命名管道見後文學習筆記)
test –r FILE
FILE存在並且授予了可讀的許可權
test –s FILE
FILE存在並且size大於0
test –S FILE
FILE存在並且是一個socket
test –t FD
文件的描述符FD在終端打開
test –u FILE
FILE存在並且SUID已經被設置
test –w FILE
FILE存在並且授予了寫操作許可權
test –x FILE
FILE存在並且授予了可執行的許可權
----------------------------------------------------------------------------------------------------------------------------------------------------
expr
expr是linux的手工命令行計數器,它可以幫助我們完成一些基本的表達式值運算。同時它也是一個字元串處理工具
(1) 整數運算
$expr ARG1 | ARG2
$expr ARG1 & ARG2
$expr ARG1 < ARG2
$expr ARG1 <= ARG2
$expr ARG1 = ARG2
$expr ARG1 != ARG2
$expr ARG1 >= ARG2
$expr ARG1 > ARG2
$expr ARG1 + ARG2
$expr ARG1 – ARG2
$expr ARG1 * ARG2
使用乘法時,需要使用反斜杠進行轉義
$expr ARG1 % ARG2
(2) 字元串操作
$expr length 「xxx」 //計算字元串長度
$expr substr 「this is a」pos length //從第pos位開始截取length長度的子串
$expr index 「tesr」e //獲取e在主串中首次出現的位置
(3) 增量計數
例子
loop=3
loop=`expr $loop + 1`
echo $loop
結果是4,在第二行代碼中,使用反引號,shell會將反引號中的內容作為一個系統命令,這樣一來,就好像我們在命令行內輸入了expr $loop + 1然後這個命令的返回結果被賦值到loop。
(4) 模式匹配(按照正則表達式模式匹配串)
通過指定冒號選項計算字元串中字元數。.*意即任何字元重復0次或多次。
> VALUE=account.doc
> expr $VALUE : 』.*』
8
在expr中可以使用字元串匹配操作,這里使用模式抽取.doc文件附屬名。
$expr $VALUE : 『\(.*\).doc』
accounts
(5) 其他
+ TOKEN
將TOKEN解釋為串,不管它是一個關鍵字或者一個操作符
延伸知識:
引號的作用
1 雙引號(「」)
1)使用」」可引用除字元$(美元符號)、`(反引號)、\(反斜線)外的任意字元或字元串。雙引號不會阻止shell對這三個字元做特殊處理(標示變數名、命令替換、反斜線轉義)。
Eg:name=gezn; echo 「User name:$name」//將列印User name :gezn
Echo 「The date is:`date +date-%d-%m-%Y`」//將列印The date is: 03-05-2009
Echo –e 「$USER\t$UID」 //將列印gezn 500
2)如果要查新包含空格的字元串經常用到雙引號
2 單引號(』』)
1) 如果用單引號把字元串括起來,則dayi9nhao內字元串中的任何特殊字元的特殊含義均被屏蔽。
2) 舉例:echo –e 『$USER\t$UID』//將列印$USER $UID(沒有屏蔽\t,是因為選項「-e」的緣故)
echo 『USER\t$UID』 //將列印$USER\t$UID
3 反引號(``)
1) shell將反引號中的內容作為一個系統命令,並執行其內容。使用這種方法可以替換輸出為一個變數
2) 舉例:a=`date + date-%d-%m-%Y` //將列印The date is: 03-05-2009
4.反斜線(\)
1)如果下一個字元有特殊含義,反斜線防止shell誤解其含義,即屏蔽其特殊含義。
2)下屬字元包含有特殊含義:& * + $ ` 「 | ?
3) 在列印字元串時要加入八進制字元(ASCII相應字元)時,必須在前面加反斜線,否則shell作普通數字處。
舉例: bj=Beijing; echo 」variable\$bj=$bj」//將列印variable $bj = beijing
------------------------------------------------------------------------------------------------------------------------------------------------
Shell特殊變數
在Shell中,預先定義了幾個有特殊含義的Shell變數,它們的值只能由Shell根據實際情況進行賦值,而不能通過用戶重新設置。shell的特殊變數包括它的位置和一些系統變數.
(一)常用位置變數:
$# 命令行上實際參數的個數,但不包含Shell腳本名。
$? 上一條命令執行後的返回值(也稱作 「退出碼」)。它是一個十進制數。多數Shell命令執行成功時,則返回值為0;如果執行失敗,則返回非0值。
$$ 當前進程的進程號。
$! 上一個後台命令對應的進程號,這是一個由1~5位數字構成的數字串。
$- 由當前Shell設置的執行標志名組成的字元串。例如:
set -xv 這個命令行給Shell設置了標志-x和-v(用於跟蹤輸出)。
$* 表示在命令行中實際給出的所有實參字元串,它並不僅限於9個實參。
$@ 它與$*基本功能相同,但是使用時加引號,並在引號中返回每個參數
$0 腳本名稱
$1..$9 第N個參數
下面的aaa bbb 為變數名
${aaa:-bbb} 如果$aaa為空或未定義,則取值$bbb.否則取值$aaa
${aaa:+bbb} 如果$aaa非空,則取值$bbb,否則取值為空
${aaa:=bbb} 如果$aaa非空,則取值$aaa,否則取值$bbb而且賦值(aaa=bbb)
${aaa:3} 如果aaa=abcdefg,則${aaa:3}的值為:defg ,相當於substr,計數從0開始
${aaa:3:2} 如上; ${aaa:3:2}取值為: de.相當於substr
${#aaa} 字元串$aaa的長度.
(二)常用系統變數:
$HOME 用戶的主目錄
$USER 用戶名稱
$GROUP 用戶所屬組名
$PATH 默認的搜索路徑
$HOSTNAME 主機名稱
$TZ 時區
$MAIL 存放郵件的路徑名
練手:
#!/bin/bash
echo $0
echo $*
echo $@
echo $#
echo $$
echo $_
在terminal窗口中執行:
./test.sh -a -b –c /home
./test.sh
-a -b -c /home
-a -b -c /home
4
3250
/home
區別$*和$@編寫如下test.sh腳本:
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs "$*"
testargs "$@"
unset -f testargs
在terminal窗口中執行:
./test.sh -a -b /home
1 args //很明顯就一個嘛,傳入的是$*這個串,不是解釋後的參數
3 args //$@必須和引號搭配,所以結果正確
#!/bin/bash
function testargs
{
echo "$# args"
}
testargs $*
testargs $@
unset -f testargs
再次執行有:
./test.sh -a -b /home
3 args
3 args
作者:Aga.J
出處:http://www.cnblogs.com/aga-j