linux的終端機執行命令的方式,是經過bash環境來處理的。bash包括變量的設置與使用,、bash操做環境的構建、數據流重定向的功能。下面的知識,對主機的維護與管理有重要的幫助。linux
管理整個計算機硬件的實際上是操做系統的內核,這個內核被保護,通常用戶只能經過shell來和內核通訊(shell將輸入的命令與內核通訊,內核能夠控制硬件來正確無誤地工做)。man、chmod、chown、vi、mkfs等命令,都是獨立的應用程序,咱們能夠經過shell(即命令行模式)來操做這些應用程序,讓這些應用程序調用內核來運行所需的工做。shell
bash shell 的內置命令:typeubuntu
type命令找出可執行文件,而不是通常文件名。數組
floralin@ubuntu:~/Desktop/linux_study$ type ls # 未加任何參數的時候,列出ls的最主要使用狀況 ls is aliased to `ls --color=auto' floralin@ubuntu:~/Desktop/linux_study$ type -t ls # 添加參數-t列出ls執行時的依據 alias floralin@ubuntu:~/Desktop/linux_study$ type -a ls # 添加參數-a會從PATH變量定義中,將全部含有 ls 的命令都列出來,包含alias ls is aliased to `ls --color=auto' ls is /bin/ls floralin@ubuntu:~/Desktop/linux_study$ type cd cd is a shell builtin # cd是shell內置命令
命令的執行bash
不少時候輸入命令過長,會在換行以前加入\,這樣作的目的是爲了將換行符[enter]轉移過來。成功轉移事後,下一行最前面就會出現>的符號,能夠繼續輸入命令。less
shell 變量功能post
變量就是用一個特定字符串表明不固定的內容。在linux中要將變量的內容顯示出來,可使用echo這個命令來顯示變量,可是變量在被顯示時,必須加上$.測試
floralin@ubuntu:~/Desktop/linux_study$ echo $variable floralin@ubuntu:~/Desktop/linux_study$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
設置變量ui
floralin@ubuntu:~/Desktop/linux_study$ echo $myname floralin@ubuntu:~/Desktop/linux_study$ myname=flora floralin@ubuntu:~/Desktop/linux_study$ echo $myname flora
保留原先變量,而後進行設置spa
floralin@ubuntu:~/Desktop/linux_study$ myname="$myname lin" floralin@ubuntu:~/Desktop/linux_study$ echo $myname flora lin
在執行過程當中,反單引號(`),以內的命令會被先執行,而執行出來的結果將做爲外部的輸入信息。locate命令能夠列出全部的相關文件名,可是若是咱們想知道每一個crontab相關文件名的權限:
floralin@ubuntu:~/Desktop/linux_study$ ls -l `locate crontab` -rw-r--r-- 1 root root 401 Feb 19 2014 /etc/anacrontab -rw-r--r-- 1 root root 722 Feb 8 2013 /etc/crontab -rwxr-sr-x 1 root crontab 34824 Feb 8 2013 /usr/bin/crontab -rw-r--r-- 1 root root 1184 Apr 7 2014 /usr/share/bash-completion/completions/crontab -rw-r--r-- 1 root root 27684 Feb 8 2013 /usr/share/doc/cron/examples/crontab2english.pl -rw-r--r-- 1 root root 2521 Feb 8 2013 /usr/share/man/man1/crontab.1.gz -rw-r--r-- 1 root root 892 Feb 19 2014 /usr/share/man/man5/anacrontab.5.gz -rw-r--r-- 1 root root 5687 Feb 8 2013 /usr/share/man/man5/crontab.5.gz
先以locate將文件名數據列出來,而後使用ls命令來處理。
環境變量的功能
環境變量可以幫咱們達到不少功能,包括主文件夾的變換,提示符的顯示,執行文件查找的路徑等。
查看默認的環境變量:
floralin@ubuntu:~/Desktop/linux_study$ env
#...... _=/usr/bin/env # 上一次使用的命令的最後一個參數(或命令自己)
隨機數
RANDOM變量的內容介於0~32767之間,因此要進行數值計算才能獲取一個一位數。
floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo $number 1 floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo $number 4 floralin@ubuntu:~/Desktop/linux_study$ declare -i number=$RANDOM*10/32768;echo $number 5
set查看全部變量(含環境變量與自定義變量)
bash不僅有環境變量,還有一些比較重要的參數,以及用戶本身定義的變量。
floralin@ubuntu:~/Desktop/linux_study$ set
PS1命令提示符
每當咱們按下回車鍵去執行某個命令後,最後要再次出現提示符,會去主動讀取這個變量值。
floralin@ubuntu:~/Desktop/linux_study$ cd /home floralin@ubuntu:/home$ PS1='[\u@\h \w \A #\#]\$' [floralin@ubuntu /home 08:48 #46]$ls floralin [floralin@ubuntu /home 08:51 #47]$
\w 表明完整的工做目錄名稱,由更目錄寫起來的目錄名稱。可是主文件夾將會用~替代。
\A 顯示時間,二十四小時格式「HH:MM」。
\# 執行第幾個命令。
\$ 提示符,若是是root時,提示符爲#,不然爲$。
變量鍵盤讀取、數組與聲明:read、array、declare
read讀取來自鍵盤輸入的變量
[floralin@ubuntu /home 09:12 #54]$read atest This is a test [floralin@ubuntu /home 09:12 #55]$read -p "Please keyin your name: " -t 30 named Please keyin your name: floralin [floralin@ubuntu /home 09:13 #56]$echo $named floralin
30秒沒有任何操做時,該命令會自動略過。
declare或typeset,聲明變量的類型
若是使用declare後面沒有接任何參數,bash就會主動將變量名稱數出來。
[floralin@ubuntu /home 09:21 #59]$sum=100+300+50 [floralin@ubuntu /home 09:22 #60]$declare -i sum=100+300+50 [floralin@ubuntu /home 09:22 #61]$echo $sum 450
變量類型默認爲字符串,因此不能制定變量類型,則1+2爲一個字符串而不是計算式,所以執行第一條命令會直接輸出100+300+50.。
將sum變成環境變量:
[floralin@ubuntu /home 09:13 #57]$declare -x sum [floralin@ubuntu /home 09:21 #58]$export | grep sum declare -x sum
將sum變成只讀屬性,不可修改:
[floralin@ubuntu /home 09:25 #62]$declare -r sum [floralin@ubuntu /home 09:29 #63]$sum=testgting bash: sum: readonly variable
讓sum變成非環境變量的自定義變量:
[floralin@ubuntu /home 09:29 #64]$declare +x sum [floralin@ubuntu /home 09:30 #65]$declare -p sum declare -ir sum="450"
數組變量類型
[floralin@ubuntu /home 09:30 #66]$var[1]="small min" [floralin@ubuntu /home 09:32 #67]$var[2]="big min" [floralin@ubuntu /home 09:32 #68]$var[3]="nice min" [floralin@ubuntu /home 09:32 #69]$echo "${var[1]},${var[2]},${var[3]}" small min,big min,nice min
與文件系統及程序的限制關係ulimit
列出你目前身份的全部限制數據數值:
[floralin@ubuntu /home 09:33 #70]$ulimit -a
限制用戶僅能創建10MB一下的容量文件:
[floralin@ubuntu /home 09:38 #74]$ulimit -f 10240 [floralin@ubuntu /home 09:38 #75]$ulimit -a
嘗試建立20M的文件:
[floralin@ubuntu ~/Desktop/linux_study 09:41 #81]$sudo dd if=~/Desktop/linux_study/ of=123 bs=1M count=20
[floralin@ubuntu ~/Desktop/linux_study 09:41 #82]$ll
total 8
drwxrwxr-x 2 floralin floralin 4096 Oct 30 09:41 ./
drwxr-xr-x 3 floralin floralin 4096 Oct 30 07:43 ../
-rw-r--r-- 1 root root 0 Oct 30 09:41 123
變量內容的刪除、替換與替代
變量內容的刪除與替換
將local這兩個目錄刪除掉:
[floralin@ubuntu ~/Desktop/linux_study 09:47 #85]$echo $path /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
[floralin@ubuntu ~/Desktop/linux_study 09:49 #89]$echo ${path#/*local/bin:}
/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
將sbin替換爲SBIN:
floralin@ubuntu ~/Desktop/linux_study 13:06 #95]$echo ${path/sbin/SBIN} /usr/local/SBIN:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games [floralin@ubuntu ~/Desktop/linux_study 13:06 #96]$echo ${path//sbin/SBIN} /usr/local/SBIN:/usr/local/bin:/usr/SBIN:/usr/bin:/SBIN:/bin:/usr/games:/usr/local/games
變量的測試與內容替換:
[floralin@ubuntu ~/Desktop/linux_study 13:07 #97]$echo $username # username可能不存在或者爲空字符串 [floralin@ubuntu ~/Desktop/linux_study 13:09 #98]$username=${username-root} [floralin@ubuntu ~/Desktop/linux_study 13:10 #99]$echo $username root # 沒有設置,因此主動給予名爲root的內容 [floralin@ubuntu ~/Desktop/linux_study 13:10 #100]$username="floralin" [floralin@ubuntu ~/Desktop/linux_study 13:10 #101]$username=${username-root} [floralin@ubuntu ~/Desktop/linux_study 13:10 #102]$echo $username floralin
username-root 就得變量,被測試的選項 ; username-root 變量的內容,在本範例中,這個部分是在給予未設置變量的內容。固然 username:-root則是在變量內容爲空或者是未設置,都可以之後面的內容替換。
若是舊變量不存在,咱們就以新變量內容替換;可是若舊變量存在,則新變量內容以舊變量替換。
[floralin@ubuntu ~/Desktop/linux_study 13:10 #103]$unset str; var=${str-newvar} [floralin@ubuntu ~/Desktop/linux_study 13:18 #104]$echo var="$var",str="$str" var=newvar,str= # 由於str不存在,因此var爲newvar [floralin@ubuntu ~/Desktop/linux_study 13:19 #105]$str="oldvar";var=${str-newvar} [floralin@ubuntu ~/Desktop/linux_study 13:20 #106]$echo var="$var",str="$str" var=oldvar,str=oldvar # 由於str存在,因此var等於str的內容
關於減號是不會影響舊變量的,若是想要舊變量內容也一塊兒替換掉的話,就須要使用等號=:
[floralin@ubuntu ~/Desktop/linux_study 13:20 #107]$unset str; var=${str=newvar} [floralin@ubuntu ~/Desktop/linux_study 13:25 #108]$echo var="$var",str="$str" var=newvar,str=newvar [floralin@ubuntu ~/Desktop/linux_study 13:25 #111]$str="oldvar";var=${str=newvar} [floralin@ubuntu ~/Desktop/linux_study 13:25 #112]$echo var="$var",str="$str" var=oldvar,str=oldvar
命令別名和歷史命令
命令別名設置alias和unalias
命令別名可使經常使用的可是特別長的命令修改爲比較簡潔的命令,還有增設默認的選項在一些慣用的命令上面,能夠預防一些不當心誤刪文件的狀況發生。例如,查詢隱藏文件,而且須要長的列出與一頁一頁翻看,那麼須要執行「ls -l | more」,可使用如下命令將其簡化爲lm:
[floralin@ubuntu ~ 13:35 #120]$alias lm="ls -l | more"
另外,命名別名的設置還能夠替代既有的命令,例如,當以root登陸,使用rm命令能夠刪除全部文件,所以要特別當心,rm提供一個參數讓咱們確認是否刪除該文件-i:
[floralin@ubuntu ~ 13:35 #123]$alias rm="rm -i" [floralin@ubuntu ~/Desktop/linux_study 13:39 #127]$rm 123 rm: remove write-protected regular empty file ‘123’? y
去掉剛纔的命名別名:
[floralin@ubuntu ~/Desktop/linux_study 13:39 #128]$unalias rm
歷史命令 history
查詢曾經執行過的命令,最近4條:
[floralin@ubuntu ~/Desktop/linux_study 13:42 #131]$history 4
Bash Shell的操做環境
路徑與命令查找順序
設置echo的別名爲echo-n,而後再查看echo執行的順序:
[floralin@ubuntu ~/Desktop/linux_study 13:45 #132]$alias echo="echo -n" [floralin@ubuntu ~/Desktop/linux_study 13:47 #134]$type -a echo echo is aliased to `echo -n' echo is a shell builtin echo is /bin/echo
bash的登陸與歡迎信息:/etc/issue,/etc/motd
終端環境設置:stty.set
如何查閱目前的一些按鍵內容呢?能夠利用stty(setting tty終端機),stty能夠幫助設置終端機的輸入按鈕表明意義。咱們能夠利用stty-a來列出目前環境中的全部按鍵列表。
floralin@ubuntu:~$ stty -a speed 38400 baud; rows 37; columns 80; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
若是想要stty進行相關的字符刪除:
floralin@ubuntu:~$ stty erase ^h
除了stty以外,其實咱們bash還有本身的一些終端機設置值set。
管道命令pipe
使用bash命令執行輸出數據,要通過幾道數據以後才能獲得咱們想要的格式,這就須要使用管道。
管道命使用的是「|」這個界定符號。另外管道命令與「連續執行命令」不一樣。
查閱/etc/下面有多少文件,能夠利用ls/etc來查閱,使用lese管道,可使得本來很長的目錄具有翻頁能力:
floralin@ubuntu:~$ ls -al /etc | less
選取命令:cut/grep
cut可使一段信息切出來,處理的信息是以「行」爲單位
截取第五行字符串:
floralinfloralin@ubuntu:~$ echo $PATH | cut -d ':' -f 5
截取第三和五行:
floralinfloralin@ubuntu:~$ echo $PATH | cut -d ':' -f 3,5
cut的主要用途是將同一行裏面的數據進行分解,最經常使用使用在分析一些數據或文字數據的時候。這是由於有時候咱們會將某些字符串做爲切割的參數,而後來將數據加以切割,以取得咱們所須要的數據。
grep則是分析一行信息。也就是,grep能夠解析一行文字,取得關鍵字,若該行存在關鍵字,就會整行列出來。
列出含有「boot」關鍵字的行:
floralinfloralin@ubuntu:~$ last | grep "boot"
列出不含有「boot」關鍵字的行:
floralinfloralin@ubuntu:~$ last | grep -v "boot"
加上cut,取得第一列:
floralinfloralin@ubuntu:~$ last | grep "boot" | cut -d " " -f1
取得/etc/man.config 內含MANPATH的那幾行:
floralinfloralin@ubuntu:~$ grep --color=auto ‘MANPATH’ /etc/main.config
排序命令:sort、wc、uniq
對/etc/insserv.conf文件進行排序顯示:
floralinfloralin@ubuntu:~$ /etc/insserv.conf | sort
對於排序完成的數據,想要將重複的數據僅列出一個顯示:
floralinfloralin@ubuntu:~$ last | cut -d ' ' -f1 | sort | uniq
還想知道登陸狀態:
雙向重定向:tee
將數據流整個傳送給文件或設備。tee會同時將數據流送與文件與屏幕;而輸出到屏幕的,其實就是stdout。
將last的輸出存一份給last.list文件中:
floralinfloralin@ubuntu:~$ last | tee last.list
將ls的數據存一份到 ~/homefike | more:
floralinfloralin@ubuntu:~$ ls -l /home | tee ~/homefile | more
tee後面的文件會被覆蓋,若加上-a這個參數,則能將信息累加:
floralinfloralin@ubuntu:~$ ls -l /home | tee -a ~/homefile | more
字符串轉換命令:tr、col、join、paste、expand
tr能夠用來刪除一段信息當中的文字,或者是進行文字信息的替換。
col能夠進行簡單處理,常常被用於man page轉存爲純文本文件以方便查閱的功能。
join看字面上的意義,是處理兩個文件之間的數據。要將兩個文件當中相同數據的那一行加起來。
paste將兩行貼在一塊兒,中間一tab鍵隔開。
expand將tab按鍵轉成空格鍵。