centos6.5 bash基礎命令2

@@@第三天第二段



@@stat命令:查看文件的元數據信心!Inode


stat FILE...




bash文本編輯器編輯器:進行文本內容修改的程序

行編輯器:sed

全屏編輯器:nano, vi, vim


@@nano FILE...


用戶和權限管理:


1、用戶是什麼?

2、沒有用戶計算機也可以正常運行


用戶:用戶就是計算機系統按需對操作人員授權,標識資源獲取的識別符!資源分配,是安全權限模型的核心要素之一

密碼:用戶認證,對用戶是否具有授權進行驗證!


多用戶的操作系統:同一時間允許多個用戶對計算機進行操作的操作系統


用戶容器:組(group),角色(role)

組名,Group IDentifier, GID


解析:在數據庫按搜索碼查找到對應的條目,並找與之對應額外其它數據過程


數據庫

文本文件

SQL數據庫

ldap數據庫


/etc/passwd:用戶信息

                /etc/shadow:密碼信息庫


加密方法:

對稱加密:DES, 3DES, AES

公鑰加密:DSA, RSA

單向加密:雪崩效應,定長輸出,不可逆

MD5: 信息摘要,128bits

SHA1: 安全的hash算法, 160bits

SHA256:

SHA512:



md5sum, sha1sum計算加密算法後所得值


組:用戶容器,角色

/etc/group : 組信息

/etc/gshadow: 組密碼


安全上下文:是一類定義某個進程允許做什麼的許可和權限的集合,即運行中的進程有其屬主和屬組來定義進程所能獲得的權限.


大綱:useradd, id, passwd, usermod, chsh, chage, chfn, userdel, groupadd, groupmod, groupdel, su


@@@第三天第三段

創建用戶:

@@useradd :創建用戶


/etc/passwd:文件信息解釋

用戶名:x:UID:基本組ID:comment信息:HOME:默認shell


useradd [options] UserName

-u UID:指定UID

-g GID: 指定GID,即指定用戶的基本組,但GID要事先存在

-G GID:指定用戶的額外組,組要事先存在;

-d /path/to/somewhre: 

-c "Comment": 

-s /path/to/shell: 指定默認shell,應該指定使用/etc/shells文件中出現的shell;

-m: 創建用戶時,強制給用戶創建家目錄;

-M: 創建用戶,但不創建家目錄;

                -r: 創建系統用戶,不會爲用戶創建家目錄,id: 1-499,默認shell爲/sbin/nologin

-D: default,爲useradd命令創建的用戶指定新的默認值

@@groupadd:創建組

groupadd [options] GrpName

-g GID: 創建組併爲其指定GID




用戶類別:

管理員:0

普通用戶:1-65535

系統用戶:1-499

登錄用戶:500+


用戶組:

管理員組

普通組


以用戶爲視角,組可爲兩類:

基本組: 顯示在/etc/passwd中GID字段組,爲用戶的基本組;

額外組,附加組: /etc/group



userdel: 刪除用戶, 默認會保留家目錄

格式:userdel UserName

-r: 一併刪除家目錄


總結:

/etc/passwd:

Username:x:UID:GID:Comment:Home:Shell

/etc/group:

GroupName:x:GID:User List


/etc/skel:用戶創建時調取的默認文件

        /etc/default/useradd:修改創建用戶默認文件配置的屬性   

@@userdel:刪除用戶,默認會保留家目錄,

        -r :刪除時刪除家目錄

@@passwd:修改設定用戶密碼,

          -l: 鎖用戶

  -u: 解鎖 

普通用戶:只能修改自己的用戶密碼

管理員:管理所有用戶的密碼

改自己密碼:passwd

改其它用戶密碼:passwd UserName


密碼安全性策略:足夠複雜,夠長;交叉應用數字、大寫字母、小寫字母和特殊中的至少三種;儘量避免使用易猜測的密碼;定期更換;




設定組密碼:gpasswd GroupName


如何修改用戶的屬性定義:

@@chsh 修改用戶默認shell: chsh usename 回車

@@chfn 修改用戶註釋:chfn username 回車


@@usermod:修改已建立的用戶信息:

usermod [options] username

-u UID:

-g GID:

-G GID: 默認會覆蓋原有的附加組;如果是添加,則同時使用-a選項; 

-c String: 

-d /path/to/New_Home: 默認不會遷移用戶的家目錄;如果要遷移,則同時使用-m

-s SHELL: 

-l New_login_name:  更改用戶爲新的登錄名

-L: 鎖定用戶帳號

-U: 解鎖


# usermod -u 2000 -g 3000 -G 4000 -c *** -d /bin/bash  test1



@@groupmod修改組屬性定義:

groupmod : 

-g GID

-n New_Group_Name: 


/etc/shadow文件的格式:

UserName:加密的密碼:最近一次密碼修改時間:最短使用期限:最長使用期限:警告區間:非活動區間:帳號的過期期限:預留段

@@chage 修改帳號日期屬性:chage

-E: 設置時間

-I: 設置密碼的過期時間

-m:更換密碼最小時間

-M:更換密碼最大時間

-W:更換密碼提醒時間


@@id:查看用戶相關信息:

id UserName

-u: 顯示UID,跟-n一起使用則顯示用戶名

-g: 顯示基本組ID,跟-n一起使用則顯示基本組名

-G: 顯示所有組ID,跟-n一起使用則顯示所有組名



@@groupdel:刪除組.

@@gpasswd:修改組密碼




練習:

1、創建一個用戶mandriva,其ID號爲2002,基本組爲distro(組ID爲3003),附加組爲linux;

2、創建一個用戶fedora,其全名爲Fedora Community,默認shell爲tcsh;

3、修改mandriva的ID號爲4004,基本組爲linux,附加組爲distro和fedora;

4、給fedora加密碼,並設定其密碼最短使用期限爲2天,最長爲50天;

5、將mandriva的默認shell改爲/bin/bash; 



回顧:

文件管理:ls, cat, tac, tail, head, more, less, cp, mv, rm, touch, stat, file, nano

用戶管理:useradd, usermod, userdel, passwd, groupadd, groupmod, groupdel, id, su, chage, chfn, chsh, newgrp, gpasswd


@@@第三天第四段




權限:read(讀,r), write(寫,w), execute(執行,x)

文件:

r: 可以使用內容查看類的命令來顯示其相關內容;

w: 可以使用編輯器修改其內容;

x: 可以將其發起一個進程;


目錄:

r: 可以使用ls命令查看目錄內容的文件信息;

w: 可以創建、刪除文件;

x: 可以使用ls -l命令查看目錄內容的文件信息,並且可以使用cd命令切換此目錄爲工作目錄;



用戶的不擁有某位權限,則使用-佔位;

r-x: 

r--

rw-

@三位二進制表示三種用戶的權限

-rw-r--r--   1 root root      852 Jul 30  2013 bincp.sh


000:  ---,  0            

001:  --x,  1

010:  -w-  2

011:  -wx  3

100:  r--   4

101:  r-x   5

110:  rw-  6

111:  rwx  7

常用權限代碼:

                 755:   rwxr-xr-x

                 644:   rw-r--r--

                 700:   rwx------

                 600:   rw-------

                 750:   rwxr-x---

                 640:   rw-r-----

                 040:   ---r-----

                 777:   rwxrwxrwx(危險,全權限)


元數據,屬性,inode:保存用戶權限信息


修改屬主、屬組:僅管理員可執行,chown, chgrp


@@chmod改文件權限:

        1,操作三類用戶的權限:使用8進制代碼形式

chmod [-R] OCTAL-MODE file...

                            chmod 700 testfile

2,操作指定類別用戶的權限:使用u,g,o,a來賦權,基於=或+/-來進行

u: 屬主 g: 屬組 o: 其它 a: 所有

                                  chmod  u=rwx g= o=  testfile

=:操作指定類別用戶的權限;u=, ug=,     u=,g=

+/-: 操作指定類別用戶的單個權限: u-x, g+r, o-x, +x


                -R:遞歸,改變目錄極其子目錄文件的權限

參照其它文件的權限爲當文件賦權

--reference=要參照的文件   要修改權限的文件



@@umask:查看或者指定用戶的umask碼

創建文件的初始權限爲:666-umask

文件默認決不允許出現執行權限;


創建目錄初始權限:777-umask

用戶的umask碼值

root: 022

如果用戶名和基本組組名一致:002;否則則爲022;


@@chown修改文件的屬主或屬組:, 

-R: 遞歸

--reference=

    同時修改屬主和屬組 屬主和屬組中間加:或者.號

chown [option] UserName[{:|.}GroupName] file...

@@chgrp:修改文件的屬組




權限應用模型:

進程的屬主,是否與文件的屬主相同;如果相同,進程則以文件屬主的權限來訪問文件;否則

進程的屬主所屬的組,是否其中之一與文件的屬組相同;如果相同,進程則以文件屬組的權限來訪問文件;否則,

進程則以文件的其它用戶的權限來訪問文件;





練習:

1、新建一個用戶openstack,但不給其創建家目錄;創建完成後使用su命令切換至此用戶,查看其命令提示符及PATH和HOME兩個環境變量的值;

2、複製/etc/skel目錄爲/home/openstack;

3、改變/home/openstack及其內部文件的屬主屬組均爲openstack;

4、/home/openstack及其內部的文件,屬組和其它用戶沒有任何訪問權限;



練習:

完成以下任務:

  (1)新建系統組mysql;新建系統用戶mysql,屬於mysql組,要求其沒有家目錄且shell爲/sbin/nologin;

  (2)新建GID爲600的組magedu;新建用戶gentoo,要求其家目錄爲/users/gentoo,密碼同用戶名;

  (3)新建用戶centos,其家目錄爲/users/centos,密碼同用戶名;

  (4)新建用戶www,其家目錄爲/users/www;刪除www用戶,但保留其家目錄;

  (5)用戶gentoo和centos均以magedu爲其附加組;


總結權限管理:chmod, chown, chgrp, umask


@@@第四天第一段


bash介紹:

shell: 人機交互界面

sh、csh、tcsh、bash、ksh、dash、zsh


bash: 命令解釋器


bash特性之六:bash的快捷鍵

Ctrl+a: 跳至命令行首

Ctrl+e: 跳至命令行

Ctrl+u: 刪除命令行首至當前光標所在處的內容

Ctrl+k: 刪除當前光標所有處至命令行尾的內容

Ctrl+l: 清屏,相當於clear命令

Ctrl+c: 取消或終止;

Ctrl+z: 將當前命令送至後臺


bash特性之七:bash補全

命令補全:使用TAB鍵,bash講自動檢索與輸入字母對應唯一的執行程序,如果不是唯一,則給出可選項

shell命令:內部,外部

外部:在系統某路徑下有一個可執行程序保存在系統變量PATH中. PATH,是一組由冒號分隔的路徑

使用tab鍵執行補全

路徑補全:在給出的打頭路徑補全;如果沒有打頭路徑,則爲當前;



編程語言:

C:關鍵字,選擇、順序

編譯器:語言平臺

解釋器:語言平臺


程序執行邏輯:

        順序執行:默認法則,逐條執行各語句

選擇執行:有多個分支,條件判斷,符合條件的分支予以執行

循環執行:將同一段代碼反覆執行優先次,所以,循環必須有退出條件,否則將陷入死循環。



動態語言:沒有提前申請內存空間,使用時申請,用完後退出,

解釋型

perl, bash, python

靜態語言:變量先申請使用內存空間,

編譯型

C, C++


變量:

數據存儲格式:

ASCII:11

Binary:11


按照其變量是否需要嚴格定義其類型來劃分:

強類型語言:C

弱類型語言:bash


定義變量類型的作用:

1、申明數據存儲格式;

2、申明數據的有效存儲範圍;

3、比較機制不同;

4、參與的運算類型不同;


字符型


數值型:正,負

精確數值型:

整型: 

近似數值型:

浮點數

單精度

雙精度


布爾型:


bash特性之八:提供編程環境

變量: 可以講一個或多個值賦值給一個變量名

程序控制: 使用邏輯判斷達到簡化操作的目的!

腳本書寫格式:

#!/bin/bash: 腳本入口,調用程序的路徑,第一行頂格寫

# Description: 描述

# Version: 版本

# Datetime: 時間

# Author: 作者


練習:寫一個腳本

1、創建一個組newgroup, id號爲4000;

2、創建一個用戶mageedu1, id號爲3001,附加組爲newgroup;

3、創建目錄/tmp/hellodirxyz

4、複製/etc/fstab至上面的目錄中

5、改變目錄及內部文件的屬主和屬組爲mageedu1;

6、讓目錄及內部文件的其它用戶沒有任何權限;


@@@第四天第二段

ELF:bash裏可執行文件類型


程序=指令+數據

變量:

弱類型語言:

1、不強制區分變量的類型,無論存儲何種數據,均以字符格式進行;

2、無須事先聲明;用到時,直接使用,直接賦值;


bash: 動態編程語言,是弱類型語言;


bash的特性之九:bash中的變量

變量的類型:


變量的命名要求:

只能使用數字、字母和下劃線組成;

不能以數字開頭;

不能使用程序中的關鍵字;

見名知義;totalWeight 

@@set: 變量賦值或查看當前系統上的所有變量

@@unset: 撤銷變量

@@export: 將變量改爲環境變量

本地變量:只對當前shell進程有效,對其子shell以及其它shell都無效;

         定義變量: [set]Var_Name="Value"

引用變量: ${Var_Name}

撤銷變量: unset Var_Name

局部變量:僅對局部代碼生效

local Var_Name="Value"

環境變量:對當shell進程及其子shell有效;用來調整bash的工作特性,用於保存當前會話的屬性信息;

export Var_Name="Value"

Var_Name="Value"

export Var_Name

位置變量:在腳本中引用其它腳本參數

$1, ..., $n

./first.sh 2 8

特殊變量:

$0: 腳本名稱自身

$?: 上一條命令的執行狀態;

狀態用數字來表示:0-255;

0: 成功

1-255: 失敗

$$

$!

$#

$*






例:新建十個用戶:mageduuser1-mageeduuser10

# useradd mageeduuser1




練習:

完成以下任務:

  (1)新建系統組mysql;新建系統用戶mysql,要求其沒有家目錄且shell爲/sbin/nologin;

  (2)新建GID爲600的組magedu;新建用戶gentoo,要求其家目錄爲/users/gentoo,密碼同用戶名;

  (3)新建用戶centos,其家目錄爲/users/centos,密碼同用戶名;

  (4)新建用戶www,其家目錄爲/users/www;刪除www用戶,但保留其家目錄;

  (5)用戶gentoo和centos均以magedu爲其附加組;

         


完成以下任務:

(1) 切換至centos用戶,定義本地變量FirstVar,其值爲“test variable”;

(2) 另啓一個終端,使用gentoo用戶查看FirstVar變量的值;如果沒有值,爲什麼?

(3) 聲明一個變量CurTime,其值爲當前系統時間;

(4) 使用echo命令顯示“The current time is:”,is後跟上CurTime變量的值;

(5) 回至centos用戶的終端:複製/etc/pam.d目錄至/tmp目錄中,並重命名爲test;

(6) 聲明變量fileName,其值爲剛纔複製的目錄/tmp/test;

(7) 修改變量fileName所表示的目錄及其內部所有文件的其它用戶均沒有任何訪問權限;

(8) centos用戶是否可以修改變量fileName所表示的目錄的屬主和屬組?如果能,將其改爲gentoo用戶和gentoo組;如果不能,則使用root用戶修改;





@@@第四天第三段



顯示所有環境變量:@@export, @@env, @@printenv



bash的配置文件:持久保存用戶配置

profile類:爲交互式登錄的用戶提供配置

/etc/profile:全局

/etc/profile.d/*.sh:全局

~/.bash_profile:個人配置,僅對當前用戶有效


功能:

設定環境變量

運行命令或腳本


bashrc類:非交互工登錄用戶提供配置

/etc/bashrc: 全局

~/.bashrc: 個人配置


功用:設定本地變量,定義命令別名,



登錄類型:

交互式登錄:

直接通過終端輸入用戶信息登錄系統;

su - UserName或su -l UserName;


非交互式登錄:

su UserName

圖形界面的終端

執行腳本


新增配置的生效方式:

@@source

通知shell重讀配置文件的命令:

source (.)

. FILE

重新登錄




交互式登錄用戶:讀取環境變量順序

/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc


非交互式登錄用戶:讀取環境變量順序

~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh







@@@第四天第四段

bash腳本:面向過程的變成中有三種方式

        順序執行:默認法則,逐條執行各語句

選擇執行:有多個分支,條件判斷,符合條件的分支予以執行

循環執行:將同一段代碼反覆執行優先次,所以,循環必須有退出條件,否則將陷入死循環。

程序代碼:由語句和表達式組成

    控制語句:for,if

   bash循環控制語句:

    for

while

until

@@ for循環:通過使用一個變量去便利給定列表中的每個元素,在每次變量賦值時執行一次循環體, 直至遍歷完所有元素退出循環

for var in list;do 循環體;done

    for var_Name(將要賦值的變量名) in List(賦值列表,列表內的值將賦值給前面var_Name); do

        語句1

語句2

...(循環體,將賦值後的var_Name變量按照語句進行操作)

done

        列表的生成方法:

    1,直接給出列表

2,使用文件名通配的機制生成列表

3,用命令生成列表

    4,生成數字序列列表:{n1..n10} 1-10 (點號不能省略)

             seq n1 n2 n3 n1是起始數,n2步長,n3結束數


@@bash:執行bash腳本

     # bash [options][FileName]...

         -n:不執行腳本,只檢查腳本內語法是否有錯誤.  


#!/bin/bash

#



文本處理類的命令:wc,word,count

@@wc: word count 字符統計,爲文件統計字節數,單詞數,行數,

   wc [options][file]...

    -l:僅統計行數

-w:僅統計單詞數

-c:僅統計字節數


@@|:管道,把一個命令的輸出結果傳給下一個命令做輸入結果中間用|隔開

@@tr:轉換字符或刪除字符,把字符轉換成相應的字符集內的字符,如果只給一個字符集,則刪除相應的字符.

    tr '集合1'  '集合2'

    #echo "hello world" | tr 'abcdefg'  'ABCDEFG'

@@cut:將輸入的內容按指定的分隔符,切割成片,顯示指定的片

    -d字符:指定的分隔符

-f#:指定要現實的字段

    #:爲單個數字,顯示第#個字段

  逗號隔開的多個數字:顯示指定數字的多個離散字段

-:連續字段,如3-5顯示第三個到第五個字段

    #echo "This is a new line " | cut -d' ' -f1 (空格分割,取第一段)

    #cut -d: -f1,7 /etc/passwd (取/etc/passwd中:號分割的第一和第七個字段,即用戶名和shell)


@@sort:爲文件進行排序 sort [options] file...

-f:忽略字符大小寫

-n:按ASCII碼比較數值大小

-t:指定分隔符,切片

-k:指定分隔符後,進行比較字段

-u:連續重複的行只顯示一次

sort -n -t: -k3 /etc/passwd(把/etc/passwd按照:分割取第三段字符的大小進行排序)

@@uniq:移除連續重複的行

    -c:顯示每行重複的次數

uniq -c testfile

sort testfile | uniq -c

-d:僅顯示重複出現的次數,連續重複出現兩次的行

-u:僅顯示不曾重複的行


(新建一個文本輸入多行內容)

uniq -c testfile

sort testfile | uniq -c

@練習題:

1、統計/bin、/usr/bin、/sbin和/usr/sbin等各目錄中的文件個數;

2、顯示當前系統上所有用戶的shell,要求,每種shell只顯示一次

3、取出/etc/passwd文件的第7行;

4、顯示第3題中取出的第7行的用戶名;擴展把用戶名換成大寫

5、統計/etc目錄下以P或p開頭的文件個數;

練習:寫一個腳本,用for循環實現

顯示/etc/init.d/functions、/etc/rc.d/rc.sysinit和/etc/fstab各有多少行;


練習:寫一個腳本

將上一題中三個文件的複製到/tmp目錄中;

用for循環實現,分別將每個文件的最近一次的修改時間改爲2011年9月15號13點27分;


練習:寫一個腳本

顯示/etc/passwd中第3、7和11個用戶的用戶名和ID號;(提示獲得用戶名和ID號後賦值給變量,然後用命令再次分割)





 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章