owner,group,other 屬主,屬組,其他
read write execute r w x 用戶的不擁有某位權限,則使用-占位 r-x:讀和執行的權限 r--:只讀權限 rw-:讀寫權限 使用8位數來表示 r:4 w:2 x:1
文件:
r:可以使用內容查看類的命令來顯示其相關內容 w: 可以使用編輯器修改其內容 x:可以將其發起一個進程
目錄:
r:可以使用ls命令查看目錄內容的文件信息 w:可以創建、刪除文件 x:可以使用ls -l命令來查看目錄內容的文件信息,並且可以使用cd命令切換此目錄為工作目錄:
修改文件的屬主和屬組 :僅管理員可執行,chown,chgrp
操作三類用戶的權限:使用8進制形式 chmod OCTAL -MODE file ... u:屬主 g:屬組 o:其他 a:所有 =:操作指定類型用戶的權限 +/—:操作置頂類型用戶的單個權限 參照其他文件的權限為當前文件來賦權 chmod --reference=參照文件名 文件名 操作指定類別用戶的權限:使用u,g,o,a來賦權,基於=或+/-來進行 參照其他文件的權限當文件賦權限
創建文件:666-umask 文件默認決不允許出現執行權限: 創建目錄:777-umask root:022 如果用戶名和基本組名一致:002,否則為022
chown [option] UserName [{:|.} GroupName] file ... -R : 遞歸 -- reference
1.進程的屬主,是否與文件的屬主相同,如果相同,進程則以文件屬主的權限來訪問文件,否則,進程的屬主所屬的組,是否其中之一與文件的屬組相同,如果相同,進程則以文件屬組的權限來訪問文件;否則,進程則以文件的其他用戶的權限來訪問文件 2.總結權限管理:chmod chown chgrp umask
1.新建一個用戶openstacl ,但不給其創建家目錄,創建完成後使用su命令切換至此目錄,查看其命令提示符及PATH和HOME兩個環境變量的值
useradd -M openstack su -openstack echo $PATH $HOME
2.復制/etc/skel目錄為/home/openstack
cp -r /etc/skel /home/openstack
改變/home/openstack 及其 內部文件的屬主屬組均為openstack;
chown -R openstack.openstack /home/openstack
4./home/openstack及其內部的文件,屬組合其他用戶沒有任何訪問權限
chmod -R go=--- /home/openstack su - openstack echo $PATH $HOME
新建系統組MySQL,新建系統用戶MySQL ,屬於MYSQL組,要求沒有家目錄且shell 為/sbin/nologin;
groupadd -r mysql useradd -r -s /sbin/nologin -g mysql mysql
新建GID為600的組doyle,新建用戶gentoo ,要求家目錄為/users/gentoo,密碼同用戶名字
groupadd -g 600 doyle mkdir /users useradd -d /users/gentoo gentoo passwd gentooo
新建用戶centos,其家目錄為/users/centos,密碼同用戶名字
useradd -d /users/centos centos; passwd centos;
新建用戶www,其家目錄為/users/www,刪除www用戶,但保留其家目錄
useradd -d /users/www www; userdel www
用戶gentoo和centos均為doyle為其附加組
usermod -a -G doyle gentoo usermod -a -G doyle centos
shell:人機交互界面,
bash: 命令解釋器,解析器
快捷鍵 Ctrl+a:跳至命令行首 Ctrl+e:跳至命令行尾 Ctrl+u:刪除命令行首至當前光標所在處的內容 Ctrl+k:刪除當前光標所在處至命令行尾的內容 Ctrl+l:清屏,相當於clear命令 Ctrl+c:終止或者取消命令 Ctrl+z:將當前命令送至後台(fg調回命令)
命令補全:在PATH中搜索補全
shell命令:內部,外部 外部:在系統某路經下有一個可執行程序 PATH,一組以冒號分隔的路徑
路徑補全:在給出的打頭路徑下補全,如果沒有打頭路徑,則為當前目錄
使用tab補全
提供編程環境 支持使用變量 支持程序控制
#!/bin/bash被稱為shebang
1.創建一個組newgroup,id號為4000
2.創建一個用戶doyle ,id 號為3001 ,附加組為newgroup;
3.創建目錄/tmpj/hellodirxyz
4.復制/etc/fstab至上面的目錄中
5.改變目錄及內部文件的屬主和屬組為doyle
6.讓目錄及內部文件的其他用戶沒有任何權限
弱類型語言變量:
1.不強制區分變量的類型,無論存儲何種數據,均已字符格式進行 2.無須事先聲明:用到時,直接使用,直接賦值 bash:動態編程語言,是弱類型語言
變量的類型:
本地變量:只對當前shell進程有效,對其子shell以及其他shell都無效
定義變量: [set]Var_Name="Value" 引用變量: ${Var_Name} 撤銷變量:unset Var_Name
局部變量:只對某一部分有效
定義變量:local Var_Name="Value"
環境變量:對其shell進程及其子shell有效:
定義:export Var_Name="var name" 注意不要和當前環境的環境變量沖突
位置變量:
$1,......$n
特殊變量
$0:腳本名稱自身 $?:上一條命令的執行狀態 狀態用數字表示:0-255 0:表示成功 1-255:失敗,1.2.127.255預留 $$ $! $# $*
變量的命名要求:
只能使用數字,字母,和下劃線組成 不能以數字開頭 不能使用程序中的關鍵字 見名知義
不帶任何參數的set,顯示當前系統的所有變量
環境變量:用來定義bash的工作特性,用來保存當前會話的屬性信息
顯示所有環境變量:export ,env ,printenv
profile類:為交互式登錄的用戶提供配置
/etc/profile 全局 /etc/profile.d/*.sh 全局 ~/.bash_profile 個人配置,僅對當前用戶有效 功能: 設定環境變量 運行命令或者腳本
bashrc 類:非交互工登錄用戶提供配置
/etc/bashrc:全局 ~/.bashrc:個人配置 功能: 設定本地變量 定義命令別名
登陸類型:
交互式登錄:直接通過終端輸入用戶信息登陸系統 su - UserName或su -l UserName: 如何讀取配置文件 /etc/profile -->/etc/profile.d/*.sh -->~/.bash_profile-->~/.bashrc -->/etc/bashrc 非交互式登錄: su UseName 圖形界面下的終端 執行腳本的時候,先設置配置文件 如何讀取配置文件 ~/.bashrc -->/etc/bashrc -->/etc/profile.d/*.sh
通知shell重讀系統文件
source(.) 重讀配置文件
順序執行:默認法則,逐條執行各命令 選擇執行:分支,條件判斷,符合條件的分支予以執行 循環執行:將同一段代買反復執行有限次,所以,循環必須有退出條件,否則將陷入死循環
for循環
for var_Name in 列表; do 循環體(正常執行的執行命令) 語句1 語句2 語句3 ... done
bash -n 腳本文件 檢查腳本文件語法是否錯誤
while until
生成數字列表{start..end}、seq[start][stop] seq 起始數字、步長,結束數字
for:通過使用一個變量去遍歷給定列表中的每個元素。在每次變量賦值時執行一次循環體,直至賦值完成所有元素退出循環
總結:生成列表方式 1.直接給出列表 2.使用文件名通配的機制生成列表 3.可以使用{}或seq命令生成數字序列 4.使用命令生成
wc[option][file]... -l:統計行數 -c:統計字節數 -w:統計單詞數
tr ‘集合1’ ’集合2‘
tr -d ’字符集合‘
cut 選項 參數
-d字符:指定分隔符 -f數字:指定要顯示的字段 單個數字:一個字段 多個離散字段:逗號分隔 多個連續字段:-分隔
sort[options] file
-f:忽略大小寫 -n:對數字進行排序 -t:指定分隔符 -k 數字:指定分隔後進行比較字段 -u:重復的行,只顯示一行 uniq:移除重復的行 -c:統計每一行出現的次數(靠著的行) -d:僅顯示出現最少兩次的行 -u:僅顯示不重復的行
(1) 切換指centos用戶,定義本地變量FirstVar ,其值為“test variable”
su -centos FirstVar="test variable"
(2) 另一個終端,使用gentoo用戶查看FirsVar變量的值,如果沒有值,為什麼?
只對當前shell進程有效,對其子shell以及其他shell都無效
(3) 聲明一個變量CurTime,其值為當前系統
curTime=`date +%T`
(4) 使用echo命令顯示“the current time is:” is 後跟上curtime變量的值
echo "the current time is: $curTime"
(5) 回至centos用戶的終端,復制/etc/pam.d目錄至/tmp目錄中,並重命令為test;
cp -r /etc/pam.d/ /tmp/test
(6) 聲明變量fileName,其值為剛才復制的目錄/tmp/test
fileName="/tmp/test"
(7) 修改變量filename所表示的目錄及其內部所有文件的其他用戶均沒有任何訪問權限;
chmod -R o=$fileName
(8) centos用戶是否可以修改變量filename所表示的目錄的屬主和屬組? 如果能,將其改變gentoo用戶和gentoo組;如果不能,則使用root用戶修改
練習一: 寫一個腳本,用file命令顯示/var/log目錄下每個文件的內容類型;
提示:列表生產的方法為/var/log/*
練習二:寫一個腳本
1.創建一個/tmp/scripttest目錄,用變量保存目錄名‘
2. 在目錄裡創建測試文件tfile1-tfile20
3. 創建用戶testuser1和testuser2;
4. 將tfile1-ftile10的屬主和屬組改為testuser1;
5. 將tfile1-tfile20的屬主和屬組改為testuser2