shell學習摘抄

一、type指令查看命令的來源:bash內建,alias別名,其餘文件。還能夠查看命令的文件地址node


二、一長串指令中。需由其餘指令提供指令提供信息,可使用反單引號``或者$()來運行linux

如version=$(uname -r)shell


三、取消變量設定,使用unset, 如unset myname。windows


四、在一串指令中,在 ``內的指令將會被先執行,而其執行出指令結果將作爲外部指令輸入信bash

息!網絡


五、locate指令能夠列出全部相關的命令文檔名。less


六、export: 自定義變量轉成環境變量ssh


七、env和set的區別:環境變量和自定義變量。兩種差別主要在於該變量是否會被子程序所繼續引用。當linux取得一個bash以後,你的bash就是一個獨立的程序,成爲PID,接下來你在這個bash底下所下達的任何指令都是有這個bash所衍生出來的。那些被下達的指令就被稱爲子程序了。子程序只會繼承父程序的環境變量,不會繼承父程序的自定義變量。測試


八、將環境變量變爲自定義變量可使用declare。優化


九、文件系統和程序的限制關係:ulimit


十、shell特殊字符

echo ${PATH#/usr/bin:}  echo ${PATH##/usr/bin:}  #表示從前面開始刪除

#:符合取代文字的最短的那一個

##:符合取代文字的最長的那一個

%是從後面往前刪除,即由後面往前匹配

取代:使用/或//,相似#,##

/舊字符/新字符


十一、shell中特殊字符變量使用說明

刪除和替換


變量測試和內容替換

減號不會更改舊變量,若是想要舊變量和新變量同時更改的話,可使用「=」

若是舊變量不存在,我想讓測試告知我有錯誤,此時可使用問好?。


十二、命令別名的設定,使用alias和unalias


1三、linux指令搜尋順序能夠這麼看,也能夠經過type -a 指令來查看。

1四、login shell 和 non-login shell

區別在於有沒有登陸,其讀取的文件數據(配置)並不同。

login shell :有tty1--tty6登入,須要輸入用戶名和密碼,此時的shell就稱爲login shell。

non-login shell:X windows登陸linux,啓動終端機。此時shell就叫作non-login shell。

 在次shell下再次下達bash。這個bash也是non-login shell


1五、login shell會讀取這兩個配置文件。依次爲

/etc/profile:這是系統總體的設定,最好不要修改這個檔案。(login shell 纔會讀)

~/.bash_profile或~/.bash_login 或~/.profile:需與使用者我的設定,要修改的數據能夠寫在這裏。


1六、non-login shell 只讀取~/.bashrc


1七、source:讀入環境配置文件的指令。也能夠用.(小數點)來表示。


1八、終端機環境設定:stty,set


1九、bash下的通配符,以下


20、bash環境中的特殊符號

備註:>,>> 與<,<<對應不一樣

<<表明的是結束的輸入字符


21標準的輸入和輸出,可使用特殊字符表示,以下


2二、/dev/null:垃圾桶黑洞裝置,若是我知道錯誤訊息會發生,若是要將錯誤訊息忽略掉而不顯示或存儲,能夠將其導入到/dev/null中。


2三、將stdout和stderr導入到同一個文件中;好比

1)find /home -name bash >list 2>list(能夠寫入,不過兩股數據同時寫入,形成次序的錯亂)

2)find /home -name bash >list 2>&1(能夠,不形成次序錯亂)

3)find /home -name bash &>list(能夠,不形成次序錯亂)


2四、命令執行:; && ||

;是不分命令的相關性,順序執行。


2五、管線命令 |

處理示意圖,其中對stderr沒有直接處理能力。

而且每一個管線後面的接的指令必須可以接受standard input的數據才行。這樣的指令才能夠是爲管線命令。如less, more ,head, tail等,至於ls, cp,mv等就不是管線命令了。

所以管線命令有兩個比較須要注意的地方:


2六、截取命令:cut,grep


2七、排序命令:sort, wc, uniq


2八、雙向重導向:tee,tee會同時將數據流分送到檔案與屏幕去,分送到屏幕,其實就是stdout,可讓下個指令繼續處理。


2九、字符轉換命令:tr,col,join,paste,expand

tr:能夠用來刪除一段訊息當中的文字,或者是進行文字訊息的替換。

col:

col -x 將tab鍵轉換爲對等的空格鍵。

col -b 在文字內有反斜槓(/)時,進保留反斜槓最後的那個字符。

join:處理兩個檔案之間的數據。並且主要是處理兩個檔案當中,有「相同數據」的那一行,纔將它們加在一塊兒。

paste:簡單將兩行連接在一塊兒,用tab鍵隔開。

expand:將tab鍵轉成空格,-t後面能夠接數字,指定一個tab鍵能夠用幾個空格鍵來取代。


二)linux賬號管理和ACL權限設定

30、使用者的標識:UID和GID

其實linux主機並不會直接認識你的賬號名稱,它僅認識ID(一組號碼)。

那麼檔案如何判別他的擁有者和羣組呢,其實就是利用UID和GID。每一個檔案都會有所謂的擁有者ID和擁有羣組ID,當咱們有要顯示文件屬性的需求時,系統會依據/etc/passwd和/etc/group 的內容。找到UID和GID對應的賬號名稱和組名在顯示出來。


3一、用戶登陸主機去的shell的環境來工做時,須要如何進行呢?首先利用tty1~tty7的終端機提供的login接口,輸入賬號和密碼登陸,或在網絡中利用ssh。那麼你輸入賬號和密碼後,系統幫你處理了什麼呢?

一、先找尋/etc/passwd裏面是否有你的輸入賬號。若是沒有則跳出。若是有的話則將該賬號對應的UID和GID讀出來,另外,該賬號的家目錄與shell設定也一併讀出。

二、再來則是覈對密碼錶啦!這是linux會進入/etc/shadow裏面找出對應的賬號和UID,而後覈對一下你剛剛輸入的密碼和裏頭的密碼是否相符。

三、一切OK的話,就進入shell控管階段。


3二、/etc/passwd檔案結構

每一行都表明一個賬號,每一行使用:分隔開,共有七個咚咚。

一、賬號名稱,用來對應UID

二、密碼。早期UNIX系統密碼就放在這個字段上。但因爲該文件的權限(可以被其餘程序讀取),後來將該字段的密碼數據改到了/etc/shadow。因此如今這裏用X來替代。

不少程序的運做和權限有關,而權限與UID/GID有關,所以個程序固然須要讀取/etc/shadow來了解不一樣賬號的權限。所以/etc/passwd的權限需設定-rw-r--r--。

三、UID使用者標識符。

四、GID。這個與/etc/group。/etc/group用來規範組名和GID的對應而已。

五、用戶信息說明欄。只是用來解釋這個賬號的意義而已

六、家目錄。這是用戶的家目錄。

七、shell。用戶登入系統後所取得的shell


3三、/etc/shadow結構

用來保存帳戶密碼。以:做爲分隔符。共有就九個字段。

一、賬號名稱,必需要與/etc/相同才行。

二、賬號密碼,真正的密碼,通過編碼加密。

三、最近更動密碼的日期,數值爲與1970年1月1日做爲1而累加

四、密碼不可被改動的太唸書。0的話就是能夠隨意變更了。

五、密碼須要從新變動的天數

六、密碼須要變動期限其的警告天數

七、密碼過時後的賬號寬限的天數

八、賬號失效的日期。與第三字段同樣,使用1970年以來的總日數設定。

九、保留



3四、


三)程序管理與SELinux初探

一、program與process的差別


二、子程序和父程序

可使用ps -l指令案例查看程序的父程序ID是多少。

若是我將有問題的程序關閉了,怎麼過一段時間有自動產生。並且產生的PID與原先不同。若是不是crontab工做排查的影響,那確定有一個父程序在運行。那麼要找出父程序,而後將它刪除掉。


三、父程序和子程序的相互之間的呼叫:fork 和 exec

其程序都會藉由父程序以複製的方式(fork)產生一個如出一轍的子程序,而後被複製出來的子程序在以exec的方式來執行實際要進行的程序。最終就成爲了一個子程序的存在。流程示意圖以下:


四、工做管理

kill掉jobs時在jobs序號前加上%,

fg:將背景工做拿到前景來處理

bg:讓工做在背景下的狀態變成運做中

kill:管理背景中的工做



五、程序管理

ps

top

pstree

kill

killall

kill和killall的區別:

kill後面要加上PID或者job number。因此kill都會配合ps, pstree等指令。由於咱們必須找到相對應程序的ID。killall後面加的是下達指令的名稱。刪除服務的話,用killall比較方便。會刪除系統中全部的該服務。


六、系統運行的優先級:Priority和Nice。

PRI是核心動態調整的。用戶無權干涉。

NI(Nice),用戶能夠修改這個進行調整。

PRI(New) = PRI(old) + Nice

可使用nice指令進行調整。

使用renice調整已存在程序的nice值。


七、系統資源的查看

free:觀察內存使用狀況

uname:查閱系統和核心的相關信息

uptime:觀察系統啓動時間與工做負載

netstat:追蹤網絡或插糟文件,比較經常使用在網絡監控方面。輸出分爲兩個部分:分別是網絡與系統本身的程序相關性部分。

dmesg:分析核心產生的訊息。

系統在開機癿時候,核心會去偵測系統癿硬件,你癿某些硬件到底有沒有被捉到,那就不這個時候癿偵測有關。 可是這些偵測癿過程要丌是沒有顯示在屏幕上,就是徆飛忚癿在屏幕上一閃而逝能把核心偵測癿訊息捉出來瞧瞧。

vmstat:偵測系統資源變化。

若想了解系統資源的運做。vmstat能夠偵測CPU,內存,磁盤輸入輸出狀態的變化。


三)開機流程、模塊管理與loader


四)認識和分析登陸檔


五)linux磁盤和文件系統管理

一、linux文件系統屬性。操做系統的檔案數據除了檔案實際內容外,一般含有很是多的屬性。好比linux操做系統的檔案權限和文件屬性。文件系統一般將這兩部分的數據分別存放在不一樣的區塊。權限和屬性放置在inode中,實際內容放置在data block區塊中。還有一個superblock會記錄整個文件系統的總體信息。包括inode和block的總量,使用量,剩餘量等。

說明以下:

superblock:記錄此filesystem的總體信息。包括inode/block的總量,使用量,剩餘量以及文件系統的格式與相關信息等。

inode:記錄檔案的屬性。一個檔案佔用一個inode,同時記錄此檔案的數據所在的block號碼。

block:實際記錄內容的檔案。若檔案太大時,會佔用多個block。




二、


五)linux檔案與文件系統的壓縮和打包

一、linux環境中,壓縮文檔案的擴展名大可能是:

*.Z: compress程序壓縮的檔案,因爲gzip能夠兼容,因此該指令已經退出流行了。

*.gz: gzip程序的壓縮指令

*.bz2: bzip2程序壓縮的檔案

*.tar: tar程序打包的數據,且沒有通過壓縮。

*.tar.gz: tar程序打包的檔案,而且通過gzip的壓縮。

*.tar.bz2: tar程序打包的檔案,而且通過bzip2的壓縮

所以常見的壓縮指令爲gzip和bzip2


二、tar指令能夠將不少檔案和目錄打包成一個檔案,單純的tar只有打包的功能,沒有壓縮功能,後來GUN計劃,將整個tar和壓縮功能結合在一塊兒,提供給使用者更方便而且更強大的壓縮和打包功能。


三、gzip和zcat指令

gzip能夠說是應用度最廣的壓縮指令。經常使用語法以下:


gzip的壓縮已經優化過了,雖然gzip提供了1~9的壓縮等級,但使用默認的6就很是好用了。

cat能夠讀取純文本,zcat則能夠讀取純文本被壓縮過的壓縮文件。


三、bzip和bzcat

bzip2的壓縮比gzip還要好,bzip2則是爲了取代gzip被提供更佳的壓縮比而來的。

一樣bzcat能夠讀取bzip2壓縮後的文件。


四、打包指令tar

gzip和bzip2大多僅能針對單一檔案來進行壓縮,雖然gzip和bzip2也可以針對目錄進行壓縮,不過這兩個指令對目錄的壓縮指的是將目錄內的全部檔案分別進行壓縮。而不是將目錄裏的檔案打包成一個檔案在進行壓縮。

tar經常使用的指令以下:


tar不會主動產生創建檔名,須要本身定義,所以最好加上擴展名。[-f filename]須要連接在一塊兒,理論傻瓜選項的順序是能夠變換的。可是[-jvfc filename]事實上會致使檔案名爲c。因此建議tar指令的時候,將-f filename與其餘選項單獨出來。


查看檔名可使用tar -jtv -f *.tar.bz2,加上-v這個選項,詳細的檔案權限和屬性都會被列出來。


僅解開單一檔案的方法。

tar -jxv -f filename.tar.bz2 待解開的檔名


打包某目錄,但不含該目錄下的偶寫檔案的作法

可使用--exclude=...的選項

好比tar -jcv -f filename.tar.bz2 --exclude=... 待壓縮的檔名。


僅備份比某個時刻還要新的檔案。

可使用--newer-mtime這個選項。



六)linux檔案權限與目錄配置

一、改變檔案文件屬性和權限

chgrp:改變檔案所屬羣組

chown:改變檔案擁有者

chmod:改變檔案的權限,SUID,SGID,SBIT等等的特性


二、

相關文章
相關標籤/搜索