Linux 學習之路(二):使用者及許可權詳解
作業:
1.ls 命令是否可以顯示某目錄的整體大小,即包括其內部的所有檔案的整體大小?
可以,使用ls -s xxx
2.通過幫助手冊,學習使用du命令:
# du 估計檔案空間使用量
-s 分割資料夾,不包括子目錄大小
-h 以可讀格式展示
3.通過幫助,學習read命令:
變數:記憶體空間,有名稱
變數賦值:
變數替換
4.描述GPL,BSD,Apache三個開源協定的大體聯絡及區別。
自由軟體開源協定,版權描述
BSD開源協議
BSD開源協議是一個給於使用者很大自由的協議。基本上使用者可以”為所欲為”,可以自由的使用,修改原始碼,也可以將修改後的程式碼作為開源或者專有軟體再發布。
但”為所欲為”的前提當你釋出使用了BSD協議的程式碼,或則以BSD協議程式碼為基礎做二次開發自己的產品時,需要滿足三個條件:
如果再發布的產品中包含原始碼,則在原始碼中必須帶有原來程式碼中的BSD協議。
如果再發布的只是二進位制類庫/軟體,則需要在類庫/軟體的文件和版權宣告中包含原來程式碼中的BSD協議。
不可以用開原始碼的作者/機構名字和原來產品的名字做市場推廣。
我們很熟悉的Linux就是採用了GPL。GPL協議和BSD, Apache Licence等鼓勵程式碼重用的許可很不一樣。GPL的出發點是程式碼的開源/免費使用和引用/修改/衍生程式碼的開源/免費使用,但不允許修改後和衍生的程式碼做為閉源的商業軟體釋出和銷售。這也就是為什麼我們能用免費的各種linux,包括商業公司的linux和linux上各種各樣的由個人,組織,以及商業軟體公司開發的免費軟體了。
GPL協議的主要內容是隻要在一個軟體中使用(”使用”指類庫引用,修改後的程式碼或者衍生程式碼)GPL 協議的產品,則該軟體產品必須也採用GPL協議,既必須也是開源和免費。這就是所謂的”傳染性”。GPL協議的產品作為一個單獨的產品使用沒有任何問題,還可以享受免費的優勢。
由於GPL嚴格要求使用了GPL類庫的軟體產品必須使用GPL協議,對於使用GPL協議的開原始碼,商業軟體或者對程式碼有保密要求的部門就不適合整合/採用作為類庫和二次開發的基礎。
其它細節如再發布的時候需要伴隨GPL協議等和BSD/Apache等類似。
5.如何獲取Linux當前最新的核心版本號?
$ cat /proc/version
列出你所瞭解的Linux發行版,並說明其跟Linux核心的關係。
Linux,GNU:GNU/Linux,原始碼
發行版:Fedora,RedHat(Centos,),SUSE,Debian (Ubuntu,Mint),Gentoo(編譯的可能性),LFS(Linux From Scratch)
RedHat:通用格式
檢視文字:
cat、tac 、more、less、head、tail
cat:連線並顯示
-n 顯示時可以顯示行號
-e 顯示每一行結束符$
Ctrl+c 中止訊號
命令輸完不想執行也可以Ctrl+c
shift + PgUp/PgDn
分屏顯示:
more 、less
more:向後翻
less: man用法
head:檢視前n行
tail:檢視後n行
-n 指定顯示多少行 head -n 1 xxxxxx/head -1 xxxxxxx
-f 檢視檔案尾部,不退出,等待顯示後續追加至此檔案的新內容(監控服務執行的時候可以隨時監控日誌)
不要直接編輯etc下的檔案!!!拷貝一份
文字處理:
cut、join、sed、awk
cut命令:以:作為分隔符,只顯示第一個欄位
cut -d: -f1 xxxxxx
-d:指定欄位分隔符,預設是空格
-f:指定要顯示的欄位
-f 1,3 顯示第一個和第三個
-f 1-3 顯示第一個到第三個
文字排序:
不影響原檔案中次序,字元在AscII碼錶中次序,按照升序
sort命令
-n:數值排序
-r:逆序排序
-t:欄位分隔符
-k:以哪個欄位為準進行排序
-u:排序後相同的行只顯示一次
-f:排序時忽略字元大小寫
uniq命令(略過重複行):如果重複行不相鄰不認為是重複行。
-d:只顯示重複行 -D:顯示所有重複行
-c:顯示某一行重複的次數
文字統計:
wc(word count)命令
行 單詞數 位元組數
-l 只顯示行數 -w 只顯示單詞數 -c 只顯示位元組數
-L 最長的一行包含多少個字元
字元處理命令:
tr ——轉換或刪除字元
tr [OPTION]… SET1 [SET2]
tr set1 把小寫轉換為大寫 tr ‘ab’ ‘AB’
輸入重定向:
把/etc/passwd檔案中所有小寫字母都換成大寫的:
# tr 'a-b' 'A-B' < /etc/passwd
-d:刪除出現在字符集中的所有字元
bash及其特性:
程式:程序
程序:在每個程序看來,當前主機上只存在核心和當前程序
程序是程式的副本,程序是程式執行例項
shell自身是個外部程式,shell自有命令是內部
shell
子shell bash–bash pstree
bash:
1.命令歷史
2.管道、重定向
3.命令別名
4.命令列編輯
5.命令列展開
6.檔名通配
7.變數
8.程式設計
命令列編輯:
游標跳轉:
Ctrl+a :跳到命令列首
Ctrl+e :跳到命令列尾
Ctrl+u :刪除游標至命令列首內容
Ctrl+e :刪除游標至命令列尾內容
Ctrl+l :清屏
命令歷史:
history : 檢視命令歷史(儲存在記憶體緩衝區)
-c 清空命令歷史
-d 刪除指定位置的命令 history -d 500 10 從第500個開始刪除10個
-w 儲存命令歷史至歷史檔案中
命令歷史的使用技巧:
!n 執行命令歷史中的第n條命令:
! -n: 執行命令歷史中的倒數第n條命令
! !:執行上一條命令
! string:執行命令歷史中以字串開頭的命令
! $ : 引用上一個命令的最後一個引數
Esc 鬆開 按 .
Alt+.遠端終端不支援
命令補全:
tab鍵自動補全命令(Path設定正常,是在PATH環境下搜尋補全,要能唯一標識命令)
兩次tab鍵所有以這個字元開頭的命令
路徑補全:
給的路徑下查詢
命令別名:
alias CMDALIAS=‘COMMAND [options] [arguments]’(命令之間有空格則用引號)
在shell中定義的別名僅在當前shell生命週期中有效:別名的有效範圍為當前shell程序
unalias 別名 撤銷別名
\CMD 使用命令本身
命令替換:
把命令中某個子命令替換為其執行結果的過程
$(),COMMAND
建立以當前時間命名的檔案:
file-2018-10-12-08-24-01.txt
touch ./file-$(date+%F-%H-%M-%S).txt
bash支援的引號:
``:命令替換
" ":弱引用,可以實現變數替換
’ ':強引用,不完成變數替換
檔名通配(globbing):
- : 任意長度的任意字元
? : 匹配任意單個字元
[] :匹配指定範圍內的任意單個字元
[a-zA-Z]
[[:space:]]:空白字元
[[:punct:]]:標點符號
[[:lower:]]:小寫字母
[[:upper:]]:大寫字母
[[:alpha:]]:大小寫字母 [^[:alpha:]]非字母(注:\在markdown中作轉義)
[[:digit:]]:數字
[[:alnum:]]:數字和大小寫字母
#man 7 glob裡面有說明
[^] : 匹配指定範圍之外的任意單個字元
環境變數
PATH:命令搜尋路徑
HISTSIZE:命令緩衝區大小大小,預設是1000條
echo $變數名 獲取命令
安裝作業系統在硬碟或光碟上
計算資源
許可權
使用者 :獲取資源或服務的標識
使用者,容器,關聯許可權:使用者組,方便地指派許可權。使用者組也是一個識別符號
檔案:被機器對映為某個識別符號。
程序也有屬組,執行發起者發起的程序。
安全上下文(secure context):
屬主 屬組 其他使用者
檔案:
r:可讀,可以使用類似cat等命令檢視檔案內容
w:可寫,可以編輯或刪除此檔案
x:可執行,eXecutable,可以在命令提示符下當作命令提交給核心執行
目錄:
r:可以對此目錄執行ls以列出內部的所有檔案
w:可以在此目錄建立檔案
x:可以使用cd切換進此目錄,也可以使用ls -l 檢視內部檔案的詳細資訊
一般不建議檔案直接具有可執行許可權,但是目錄可以有
0 000 —:無許可權
1 001 --x:執行
2 010 -w-:寫
3 011 -wx:寫和執行
4 100 r–:只讀
5 101 r-x:讀和執行
6 110 rw-:讀寫
7 111 rwx:讀寫執行
755:rwxr-xr-x
使用者:UID,/etc/passwd
組:GID,/etc/group
影子口令:
使用者:/etc/shadow
組:/etc/gshadow
使用者類別:
管理員 :0
普通使用者:1-65535(16位二進位制)
系統使用者 :1-499
一般使用者:500-60000
使用者組類別:
管理員組:
普通組:
系統組:
一般組:
使用者組類別:
基本組:使用者的預設組
私有組:建立使用者時,如果沒有為其指定所屬的組,系統會自動為其建立一個與使用者同名的組
附加組:額外組:預設組以外的其他組
account: 使用者名稱/登入名
password:密碼佔位符
UID:使用者ID
GID:基本組ID
comment:註釋
HOME DIR:家目錄
SHELL:使用者的預設shell
/etc/shadow
account:登入名
encrypted password:加密的密碼
加密方法:
對稱加密:加密和解密使用同一個密碼
公鑰加密:每個密碼都成對出現,一個為私鑰(secret key),一個為公鑰(public key) 公鑰加密,私鑰解密。用於做金鑰交換。
單向加密:雜湊加密:由明文取得密文。提取資料特徵碼,可用於做資料校驗。
1.雪崩效應
2.定長輸出
MD5:Message Digest,128位定長輸出
SHA1:Secure Hash Algorithm,160位定長輸出
新增使用者:
useradd USERNAME
新增組:
groupadd GRPNAME
環境變數
PATH:命令搜尋路徑
HISTSIZE:命令緩衝區大小大小,預設是1000條
echo $變數名 獲取命令