佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > linux學(xué)習(xí)日記八 認(rèn)識(shí)與學(xué)習(xí)bash

linux學(xué)習(xí)日記八 認(rèn)識(shí)與學(xué)習(xí)bash

熱門標(biāo)簽:百度競(jìng)價(jià)點(diǎn)擊價(jià)格的計(jì)算公式 解決方案 外呼系統(tǒng) 硅谷的囚徒呼叫中心 家政服務(wù)網(wǎng)絡(luò) 電話機(jī)器人搭建 美團(tuán) 服務(wù)器配置

只要能夠操作應(yīng)用程序的接口都能稱為shell。狹義的shell指的是命令行方面的軟件,包括bash。廣義的shell則包括圖形界面軟件,因?yàn)閳D形界面其實(shí)也可以操作各種應(yīng)用程序來(lái)調(diào)用內(nèi)核工作,不過(guò),在這里我們主要指的是bash。

# type [-tpa] command –> 查看命令是否為bash的內(nèi)置命令或者是外部命令

* 利用$var或者是${var}可獲取變量var的值

* bash中的雙引號(hào):特殊字符如$等,可以保有原本的特性

* bash中的單引號(hào):所有的字符均為普通的字符,沒有其他含義

* 可以用\將特殊字符變成一般字符

* 可用$(其他命令)來(lái)在命令中嵌套其他命令的返回值,也就是說(shuō):${var}取得變量var的值,$(command)取得命令返回值

* 若變量需要在其他子進(jìn)程中執(zhí)行,需要export var 來(lái)使變量成為環(huán)境變量

* unset var 可取消變量var的定義

====環(huán)境變量====

# env –> 查看當(dāng)前系統(tǒng)的環(huán)境變量

$本身也是一個(gè)變量,表示本shell的PID號(hào),比如 # echo $$ 輸出本shell的PID

?本事也是一個(gè)變量,表示上一個(gè)執(zhí)行的命令的返回值,一般如果是0表示執(zhí)行成功,如果非0表示有問題。

公共的語(yǔ)系編碼設(shè)置:/etc/sysconfig/i18n

# read  [-pt]  variable –> 鍵盤讀取變量輸入值

-p:后面可以跟提示符

-t:后面可以接等待的秒數(shù),不會(huì)一直等待用戶輸入

====變量的聲明====

# declare [-aixrp] var

-a:將后面的var定義為數(shù)組類型

-i:將后面的var定義為integer整數(shù)類型

-x:用法與export一樣,就是將后面的var變成環(huán)境變量

-r:將變量var設(shè)置成readonly狀態(tài),該變量不能被更改,也不能重設(shè)

-p:?jiǎn)为?dú)列出變量的類型

如果把-改成+表示取消操作

====限制用戶的計(jì)算機(jī)資源使用====

# ulimit [-SHacdfltu] [配額]

-H:hardlimit,嚴(yán)格的限制,必定不能超過(guò)這個(gè)數(shù)值

-S:softlimit,可以超過(guò)這個(gè)值,但有警告信息

-a:后面不接任何參數(shù),列出所有的限制額度

-c:某些進(jìn)程發(fā)生錯(cuò)誤的時(shí)候,系統(tǒng)會(huì)將該進(jìn)程在內(nèi)存中的信息寫成文件,稱為內(nèi)核文件。限制每個(gè)內(nèi)核文件的最大容量

-f:此shell可創(chuàng)建的最大單一文件容量,單位為KB

-d:進(jìn)程可以使用的最大內(nèi)存量

-l:可用于lock的內(nèi)存量

-t:最大的CPU時(shí)間(單位為秒)

-u:?jiǎn)我挥脩艨墒褂玫淖畲筮M(jìn)程(process)數(shù)量

====變量?jī)?nèi)容的刪除與替換====

# echo ${path#/*:} –> 刪除path變量中最前面的那個(gè)以/開頭,以:結(jié)尾的

# echo ${path##/*:} –> 刪除最長(zhǎng)的那個(gè),也就是說(shuō)只保留了最后的一個(gè)路徑

# –> 符合替換文字的最短的那個(gè)

## –> 符合替換文字的最長(zhǎng)的那個(gè)

如果想從后面開始刪,用%替換#即可

接下來(lái)講替換功能:

# echo ${path/sbin/SBIN} –> 將第一個(gè)sbin替換成SBIN

# echo ${path//sbin/SBIN} –> 將所有的sbin替換成SBIN

我們將這部分總結(jié)說(shuō)明下一下:

變量設(shè)定方式 說(shuō)明
${變量#關(guān)鍵字}
${變量##關(guān)鍵字}
若變量?jī)?nèi)容從頭開始的數(shù)據(jù)符合『關(guān)鍵字』,則將符合的最短數(shù)據(jù)刪除
若變量?jī)?nèi)容從頭開始的數(shù)據(jù)符合『關(guān)鍵詞』,則將符合的最長(zhǎng)數(shù)據(jù)刪除
${變量%關(guān)鍵字}
${變量%%關(guān)鍵字}
若變量?jī)?nèi)容從尾向前的數(shù)據(jù)符合『關(guān)鍵字』,則將符合的最短資料刪除
若變量?jī)?nèi)容從尾向前的數(shù)據(jù)符合『關(guān)鍵字』,則將符合的最長(zhǎng)資料刪除
${變量/舊字串/新字串}
${變量//舊字串/新字串}
若變量?jī)?nèi)容符合『舊字串』則『第一個(gè)舊字串會(huì)被新字串取代』
若變量?jī)?nèi)容符合『舊字串』則『全部的舊字串會(huì)被新字串取代』

# username=${username:-root}  –> 如果username非空就取原值,如果沒有設(shè)置或者為空字符串就設(shè)置成root

====bash登錄界面與登錄成功后的歡迎界面====

tips:最好是單一bash登陸,然后利用job control來(lái)切換不同的工作,這樣的話shell的history才能完全保存下來(lái)

命令的執(zhí)行搜索路徑順序:先alias,再builtin,再$PATH

bash的登陸界面配置文件:/etc/issue,遠(yuǎn)處登陸界面配置文件:/etc/issue.net

命令# man mingetty查看issue中各個(gè)代碼的意義

登陸成功后顯示的信息配置文件:/etc/motd

====bash環(huán)境變量====

login shell的配置文件:

/etc/profile:系統(tǒng)全局配置文件,最好不要修改這個(gè)文件

~/.bash_profile或者~/.bash_login或者~/.profile:用戶自定義bash配置文件

~/.bashrc,這個(gè)配置文件login shell和non-login shell都會(huì)讀取

====bash中的通配符和特殊字符====

符號(hào) 意義
* 代表『 0 個(gè)到無(wú)窮多個(gè)』任意字符
? 代表『一定有一個(gè)』任意字元
[ ] 同樣代表『一定有一個(gè)在括號(hào)內(nèi)』的字元(非任意字元)。例如 [abcd] 代表『一定有一個(gè)字元, 可能是 a, b, c, d 這四個(gè)任何一個(gè)』
[ - ] 若有減號(hào)在中括號(hào)內(nèi)時(shí),代表『在編碼順序內(nèi)的所有字元』。例如 [0-9] 代表 0 到 9 之間的所有數(shù)字,因?yàn)閿?shù)字的語(yǔ)系編碼是連續(xù)的!
[^ ] 若中括號(hào)內(nèi)的第一個(gè)字元為指數(shù)符號(hào) (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個(gè)字元,只要是非 a, b, c 的其他字元就接受的意思。

除了通配符之外,bash 環(huán)境中的特殊符號(hào)有哪些呢?底下我們先匯整一下:

符號(hào) 內(nèi)容
# 注釋符號(hào):這個(gè)最常被使用在 script 當(dāng)中,視為說(shuō)明#在后的語(yǔ)句均不執(zhí)行
\ 跳脫符號(hào):將『特殊字符或萬(wàn)用字符』還原成一般字元
| 管道 (pipe):分隔兩個(gè)管道命令的界定(后兩節(jié)介紹);
; 連續(xù)指令下達(dá)分隔符:連續(xù)性命令的界定 (注意!與管道命令不相同)
~ 使用者的家目錄
$ 取用變量前置字元:亦即是變量之前需要加的變量取代值
工作控制 (job control):將指令變成背景下工作
! 邏輯運(yùn)算意義上的『非』 not 的意思!
/ 目錄符號(hào),路徑分割符號(hào)
>, >> 數(shù)據(jù)流重導(dǎo)向:輸出導(dǎo)向,分別是『取代』與『累加』
, 數(shù)據(jù)流重導(dǎo)向:輸入導(dǎo)向 (這兩個(gè)以后說(shuō)明)
‘ ‘ 單引號(hào),里面全是普通字符,不具備變量置換功能
” “ 具有變量置換的功能!
` ` 兩個(gè)『 ` 』中間為可以先執(zhí)行的指令,亦可使用 $( )
( ) 在中間為子 shell 的起始與結(jié)束
{ } 在中間為命令區(qū)塊的組合!

====數(shù)據(jù)流重導(dǎo)向====

1,標(biāo)準(zhǔn)輸入(stdin):代碼為0,使用或者

2,標(biāo)準(zhǔn)輸出(stdout):代號(hào)為1,使用>或者>>

3,標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr):代號(hào)為2,使用2>或者2>>

>表示清空后添加,>>表示累加添加,append的意思。了解?o(╯□╰)o

表示原本由鍵盤輸入的改由文件輸入,而則表示遇到后面的字符串的時(shí)候結(jié)束輸入。

/dev/null:超級(jí)黑洞,它會(huì)吃掉任何導(dǎo)向到它的數(shù)據(jù)流,很強(qiáng)大的,不是麼。

正確和錯(cuò)誤輸出到同一個(gè)文件的語(yǔ)法格式:

find /home -name .bashrc > list 2>1

====管道命令====

管道命令需要注意的是:

1,管道命令僅能處理standard output,對(duì)于stderr會(huì)忽略掉

2,管道命令必須要能夠接受來(lái)自前一個(gè)命令的數(shù)據(jù)成為standard input繼續(xù)處理才行

====選取命令cut和grep====

# cut -d ‘分割字符’  -f  fields == 用于分割字符

# cut -c 字符范圍  == 用于排列整齊的信息

-d:后面接分割字符,與-f一起使用

-f:依據(jù)-d的分割字符將一段信息切割成為數(shù)段,用-f取出第幾段的意思(-f  3,5)

-c:以字符的單位取出固定字符區(qū)間 (-c 12-34)

grep以行為單位分析信息,如果該行符合條件,則把該行提出出來(lái)

# grep [-acinv] [--color=auto]  ’查找的字符串’  filename

-a:將binary文件以text文件方式查找

-c:計(jì)算找到’查找的字符串’的次數(shù)

-i:忽略大小寫

-n:順便輸出行號(hào)

-v:反向選擇,即顯示出沒有 ‘字符串’內(nèi)容的那些行

–color=auto : 關(guān)鍵字加上顏色

====排序命令sort,wc,uniq====

# sort  [-fbMnrtuk]  [file  or  stdin]

-f:忽略大小寫

-b:忽略最前面的空格

-M:以月份的名字排序

-n:使用數(shù)字排序(默認(rèn)是文字來(lái)排序)

-r:反向排序

-u:就是uniq,相同的數(shù)據(jù)中,僅出現(xiàn)一行代表

-t:分隔符,默認(rèn)以TAB分割

-k:以那個(gè)區(qū)間進(jìn)行排序

# cat /etc/passwd | sort -t “:” -k 3  == 以第三列進(jìn)行排序

# last | cut -d ‘ ‘ -f 1 | sort

# uniq [-ic] ==排序完成后將重復(fù)的數(shù)據(jù)僅列出一個(gè)顯示

-i:忽略大小寫

-c:進(jìn)行計(jì)數(shù)

# last | cut -d ‘ ‘ -f1 | sort | uniq -ic

# wc [-lwm]  == 行數(shù),字?jǐn)?shù),字符數(shù)統(tǒng)計(jì)命令

-l:僅列出行

-w:僅列出多少字(英文單詞word)

-m:多少字符(char)

# cat /etc/man.config | wc

====雙向重定向tee====

# tee [-a]  file

-a:以累加(append)方式,將數(shù)據(jù)加入到file中

# ls -l /home | tee -a ~/homefile | more

====字符轉(zhuǎn)換命令:tr,col,join,paste,expand====

# tr [-ds] SET1 …

-d:刪除信息中的SET1這個(gè)字符串;

-s:替換掉重復(fù)的字符

# last | tr -s ‘[a-z]‘ ‘[A-Z]‘

# cat /etc/passwd | tr -d “:”

# col  [-xb]

-x:將tab鍵轉(zhuǎn)換成對(duì)等的空格鍵

-b:如果在文字內(nèi)有反斜杠(\),僅保留反斜杠最后接的字符

# join  [-ti12]  file1 file2

-t:join默認(rèn)以空格符分割數(shù)據(jù),并且對(duì)比第一個(gè)字段的數(shù)據(jù),如果相同,合并到一行,且第一個(gè)字段放在第一個(gè)

-i:忽略大小寫

-1:代表第一個(gè)文件要用那個(gè)字段來(lái)分析

-2:代表第二個(gè)文件要用哪個(gè)字段來(lái)分析

# join -t “:” -1 4 /etc/passwd -2 3 /etc/group

# paste [-d] file1 file2 …

-d:后面可以接分割字符,默認(rèn)以tab來(lái)分割

-:如果-file寫成-,則表示來(lái)自stdin的數(shù)據(jù)

# expand [-t] file

-t :后面接數(shù)字,表示一個(gè)tab鍵可以轉(zhuǎn)換成幾個(gè)空格鍵

# grep ‘^MANPATH’ /etc/man.config  | head  -n 3 | expand -t 6 – | cat -A

====切割命令split==== 

# split [-bl] -file PREFIX

-b:后面接欲切割成的文件的大小,可以加單位,如b,k,m,g等

-l:以行數(shù)進(jìn)行切割

PREFIX:前導(dǎo)符,可作為切割文件的前導(dǎo)文字

# split -b 300k /etc/termcap tercap

====參數(shù)代換xargs====

# xargs [-0epn] command

-0:如果輸入的stdin含有特殊字符,比如`,\,空格鍵等,這個(gè)參數(shù)可以將其還原成一般字符

-e:EOF,后面可以接一個(gè)字符串,當(dāng)xargs遇到這個(gè)字符串的時(shí)候,就停止繼續(xù)工作

-p:每次執(zhí)行命令的參數(shù)時(shí),詢問用戶

-n:后面接次數(shù),每次command執(zhí)行時(shí),要使用幾個(gè)參數(shù)的意思

# cut -d ‘:’ -f1 /etc/passwd | xargs -p -n 5 finger

使用xargs的原因是:很多命令其實(shí)不支持管道命令,因此我們可以通過(guò)xargs來(lái)提供該命令引用stdin之用。

# find /sbin -perm +7000 | xargs ls -l  == 找出/sbin下具有特殊權(quán)限的文件名

===============END====================

標(biāo)簽:撫州 北海 韶關(guān) 南昌 防城港 臨沂 烏蘭察布 邢臺(tái)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《linux學(xué)習(xí)日記八 認(rèn)識(shí)與學(xué)習(xí)bash》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    中方县| 闵行区| 新竹市| 湖南省| 神农架林区| 托克逊县| 塔城市| 新疆| 民勤县| 瑞昌市| 成安县| 大关县| 柘荣县| 石屏县| 丰顺县| 霸州市| 五河县| 民权县| 罗田县| 桓仁| 瓦房店市| 平湖市| 柘城县| 合川市| 常德市| 石屏县| 鲁甸县| 恩施市| 昆山市| 集贤县| 遂昌县| 林口县| 沛县| 吴堡县| 阳信县| 新和县| 揭阳市| 白朗县| 枝江市| 昌黎县| 松溪县|