1、定義一個(gè)對(duì)所有用戶都生效的命令別名,例如:lftps='lftp 172.168.0.1/pub'
2、顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行
3、找出/etc/passwd文件中,包含二位數(shù)字或者三位數(shù)的行。
4、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用三種方式實(shí)現(xiàn)。
5、使用echo輸出一個(gè)絕對(duì)路徑,使用egrep取出路徑名,類型執(zhí)行dirname /etc/passwd 的結(jié)果。
6、找出ifconfig中的ip地址。要求結(jié)果只顯示IP地址。
7、vim定制自動(dòng)縮進(jìn)四個(gè)字符。
8、編寫腳本,實(shí)現(xiàn)自動(dòng)添加三個(gè)用戶,并計(jì)算這三個(gè)用戶的uid之和。
9、find用法以及常用用法的實(shí)例演示。
壹、定義一個(gè)對(duì)所有用戶都生效的命令別名,例如:lftps='lftp 172.168.0.1/pub'
可通過修改bash的配置文件實(shí)現(xiàn)所需功能:
bash的配置文件分為兩類:
①profile類:為交互式登錄的shell進(jìn)程提供配置
②bashrc類:為非交互式登錄的shell進(jìn)程提供配置
------登錄類型:
--①交互式登錄shell進(jìn)程:
直接通過某終端輸入賬號(hào)和密碼后登錄打開的shell進(jìn)程;
使用su命令:su - USERNAME, 或者使用
su -l USERNAME執(zhí)行的登錄切換;
--②非交互式登錄shell進(jìn)程:
su USERNAME執(zhí)行的登錄切換;
圖形界面下打開的終端;
運(yùn)行腳本
profile類:
全局:對(duì)所有用戶都生效;
/etc/profile
/etc/profile.d/*.sh
用戶個(gè)人:僅對(duì)當(dāng)前用戶有效;
~/.bash_profile
功用:
1、用于定義環(huán)境變量;
2、運(yùn)行命令或腳本;
bashrc類:
全局:
/etc/bashrc
用戶個(gè)人:
~/.bashrc
功用:
1、定義本地變量;
2、定義命令別名;
注意:僅管理員可修改全局配置文件;
讓通過配置文件定義的特性立即生效:
(1) 通過命令行重復(fù)定義一次;
(2) 讓shell進(jìn)程重讀配置文件;
~]# source /PATH/FROM/CONF_FILE
~]# . /PATH/FROM/CONF_FILE
-以上需求可以按一下操作:
~]# vim /etc/bashrc
編輯/etc/bashrc文件,在最后一行追加內(nèi)容 alias lftps='lftp 172.168.0.1/pub',保存后執(zhí)行 source /etc/bashrc
貳、顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行
^:行首錨定;用于模式的最左側(cè);
$:行尾錨定;用于模式的最右側(cè);
^PATTERN$:用于PATTERN來匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;
單詞:非特殊字符組成的連續(xù)字符(字符串)都稱為單詞;
\< 或 \b:詞首錨定,用于單詞模式的左側(cè);
\> 或 \b:詞尾錨定,用于單詞模式的右側(cè);
\<PATTERN\>:匹配完整單詞;
基本正則表達(dá)式元字符:
字符匹配:
. :匹配任意單個(gè)字符;
[]:匹配指定范圍內(nèi)的任意單個(gè)字符;
[^]:匹配指定范圍外的任意單個(gè)字符;
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
'egrep':
支持?jǐn)U展的正則表達(dá)式實(shí)現(xiàn)類似于grep文本過濾功能;grep -E
分組及引用:
():分組;括號(hào)內(nèi)的模式匹配到的字符會(huì)被記錄于正則表達(dá)式引擎的內(nèi)部變量中;
后向引用:\1, \2, ...
或:
a|b:a或者b;
C|cat:C或cat
(c|C)at:cat或Cat
grep命令
全面搜索正則表達(dá)式并把行打印出來
【選項(xiàng)】
-a 不要忽略二進(jìn)制數(shù)據(jù)。
-A<顯示列數(shù)> 除了顯示符合范本樣式的那一行之外,并顯示該行之后的內(nèi)容。
-b 在顯示符合范本樣式的那一行之外,并顯示該行之前的內(nèi)容。
-c 計(jì)算符合范本樣式的列數(shù)。
-C<顯示列數(shù)>或-<顯示列數(shù)> 除了顯示符合范本樣式的那一列之外,并顯示該列之前后的內(nèi)容。
-d<進(jìn)行動(dòng)作> 當(dāng)指定要查找的是目錄而非文件時(shí),必須使用這項(xiàng)參數(shù),否則grep命令將回報(bào)信息并停止動(dòng)作。
-e<范本樣式> 指定字符串作為查找文件內(nèi)容的范本樣式。
-E 將范本樣式為延伸的普通表示法來使用,意味著使用能使用擴(kuò)展正則表達(dá)式。
-f<范本文件> 指定范本文件,其內(nèi)容有一個(gè)或多個(gè)范本樣式,讓grep查找符合范本條件的文件內(nèi)容,格式為每一列的范本樣式。
-F 將范本樣式視為固定字符串的列表。
-G 將范本樣式視為普通的表示法來使用。
-h 在顯示符合范本樣式的那一列之前,不標(biāo)示該列所屬的文件名稱。
-H 在顯示符合范本樣式的那一列之前,標(biāo)示該列的文件名稱。
-i 忽略字符大小寫的差別。
-l 列出文件內(nèi)容符合指定的范本樣式的文件名稱。
-L 列出文件內(nèi)容不符合指定的范本樣式的文件名稱。
-n 在顯示符合范本樣式的那一列之前,標(biāo)示出該列的編號(hào)。
-q 不顯示任何信息。
-R/-r 此參數(shù)的效果和指定“-d recurse”參數(shù)相同。
-s 不顯示錯(cuò)誤信息。
-v 反轉(zhuǎn)查找。
-w 只顯示全字符合的列。
-x 只顯示全列符合的列。
-y 此參數(shù)效果跟“-i”相同。
-o 只輸出文件中匹配到的部分。
以上需求可用一下方法實(shí)現(xiàn):
'
~]# grep -v "/bin/bash$" /etc/passwd
'
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
叁、找出/etc/passwd文件中,包含二位數(shù)字或者三位數(shù)的行。
匹配次數(shù):用在要指定其出現(xiàn)的次數(shù)的字符的后面,用于限制其前面字符出現(xiàn)的次數(shù);默認(rèn)工作于貪婪模式;
*:匹配其前面的字符任意次;0,1,多次;
例如:grep "x\+y"
abxy
aby
xxxxxy
yab
.*:匹配任意長度的任意字符
\?:匹配其前面的字符0次或1次;即其前面的字符是可有可無的;
\+:匹配其前面的字符1次或多次;即其面的字符要出現(xiàn)至少1次;
\{m\}:匹配其前面的字符m次;
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次
\{m,\}:至少m次
位置錨定:
^:行首錨定;用于模式的最左側(cè);
$:行尾錨定;用于模式的最右側(cè);
^PATTERN$:用于PATTERN來匹配整行;
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;
單詞:非特殊字符組成的連續(xù)字符(字符串)都稱為單詞;
\< 或 \b:詞首錨定,用于單詞模式的左側(cè);
\> 或 \b:詞尾錨定,用于單詞模式的右側(cè);
\<PATTERN\>:匹配完整單詞;
`~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd
或者
~]# grep "\<[[:digit:]]\{2,3\}\>" /etc/passwd
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
肆、顯示/proc/meminfo文件中以大寫或小寫S開頭的行;用三種方式實(shí)現(xiàn)。
~]# grep "^[Ss]" /proc/meminfo
~]# grep -i "^s" /proc/meminfo
~]# grep -E "^(S|s)" /proc/meminfo
伍、使用echo輸出一個(gè)絕對(duì)路徑,使用egrep取出路徑名,類型執(zhí)行dirname /etc/passwd 的結(jié)果。
]# echo /etc/passwd | egrep -o '^/.+/'
陸、找出ifconfig中的ip地址。要求結(jié)果只顯示IP地址。
ifconfig | grep -o "\<[1-2]\{,1\}[0-9]\{1,2\}\.[1-2]\{,1\}[0-9]\{1,2\}\.[1-2]\{,1\}[0-9]\{1,2\}\.[1-2]\{,1\}[0-9]\{1,2\}\>"

image.png
或者
~]# ifconfig | grep -o "\<[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\>"

image.png
柒、vim定制自動(dòng)縮進(jìn)四個(gè)字符。
打開設(shè)置文件:
vim /etc/vim/vimrc
啟用:set ai
添加一些設(shè)置
set expandtab
set tabstop=4
捌、編寫腳本,實(shí)現(xiàn)自動(dòng)添加三個(gè)用戶,并計(jì)算這三個(gè)用戶的uid之和。
#! /bin/bash
# creat 3users and sum of 3 users uid
echo "Please enter 3 names for the new 3 users:"
read -p "the first user's name: " user1
read -p "the second user's name: " user2
read -p "the third user's name: " user3
echo "==================================================="
useradd $user1
echo "created user $user1"
useradd $user2
echo "created user $user2"
useradd $user3
echo "created user $user3"
echo "==================================================="
u1=`cat /etc/passwd |grep $user1 | cut -f3 -d ":"`
u2=`cat /etc/passwd |grep $user2 | cut -f3 -d ":"`
u3=`cat /etc/passwd |grep $user3 | cut -f3 -d ":"`
echo "$user1's uid is $u1"
echo "$user2's uid is $u2"
echo "$user3's uid is $u3"
echo "==================================================="
val=`expr $u1 + $u2 + $u3`
echo "The sum of 3 users uid is $val"
玖、find用法以及常用用法的實(shí)例演示。
find
用來在指定目錄下查找文件
[語法]
find(選項(xiàng))(參數(shù))
[選項(xiàng)]
-amin<分鐘>:查找在指定時(shí)間曾被存取過的文件或目錄,單位以分鐘計(jì)算;
-anewer<參考文件或目錄>:查找其存取時(shí)間較指定文件或目錄的存取時(shí)間更接近現(xiàn)在的文件或目錄;
-atime<24小時(shí)數(shù)>:查找在指定時(shí)間曾被存取過的文件或目錄,單位以24小時(shí)計(jì)算;
-cmin<分鐘>:查找在指定時(shí)間之時(shí)被更改過的文件或目錄;
-cnewer<參考文件或目錄>查找其更改時(shí)間較指定文件或目錄的更改時(shí)間更接近現(xiàn)在的文件或目錄;
-ctime<24小時(shí)數(shù)>:查找在指定時(shí)間之時(shí)被更改的文件或目錄,單位以24小時(shí)計(jì)算;
-daystart:從本日開始計(jì)算時(shí)間;
-depth:從指定目錄下最深層的子目錄開始查找;
-expty:尋找文件大小為0 Byte的文件,或目錄下沒有任何子目錄或文件的空目錄;
-exec<執(zhí)行指令>:假設(shè)find指令的回傳值為True,就執(zhí)行該指令;
-false:將find指令的回傳值皆設(shè)為False;
-fls<列表文件>:此參數(shù)的效果和指定“-ls”參數(shù)類似,但會(huì)把結(jié)果保存為指定的列表文件;
-follow:排除符號(hào)連接;
-fprint<列表文件>:此參數(shù)的效果和指定“-print”參數(shù)類似,但會(huì)把結(jié)果保存成指定的列表文件;
-fprint0<列表文件>:此參數(shù)的效果和指定“-print0”參數(shù)類似,但會(huì)把結(jié)果保存成指定的列表文件;
-fprintf<列表文件><輸出格式>:此參數(shù)的效果和指定“-printf”參數(shù)類似,但會(huì)把結(jié)果保存成指定的列表文件;
-fstype<文件系統(tǒng)類型>:只尋找該文件系統(tǒng)類型下的文件或目錄;
-gid<群組識(shí)別碼>:查找符合指定之群組識(shí)別碼的文件或目錄;
-group<群組名稱>:查找符合指定之群組名稱的文件或目錄;
-help或——help:在線幫助;
-ilname<范本樣式>:此參數(shù)的效果和指定“-lname”參數(shù)類似,但忽略字符大小寫的差別;
-iname<范本樣式>:此參數(shù)的效果和指定“-name”參數(shù)類似,但忽略字符大小寫的差別;
-inum<inode編號(hào)>:查找符合指定的inode編號(hào)的文件或目錄;
-ipath<范本樣式>:此參數(shù)的效果和指定“-path”參數(shù)類似,但忽略字符大小寫的差別;
-iregex<范本樣式>:此參數(shù)的效果和指定“-regexe”參數(shù)類似,但忽略字符大小寫的差別;
-links<連接數(shù)目>:查找符合指定的硬連接數(shù)目的文件或目錄;
-iname<范本樣式>:指定字符串作為尋找符號(hào)連接的范本樣式;
-ls:假設(shè)find指令的回傳值為Ture,就將文件或目錄名稱列出到標(biāo)準(zhǔn)輸出;
-maxdepth<目錄層級(jí)>:設(shè)置最大目錄層級(jí);
-mindepth<目錄層級(jí)>:設(shè)置最小目錄層級(jí);
-mmin<分鐘>:查找在指定時(shí)間曾被更改過的文件或目錄,單位以分鐘計(jì)算;
-mount:此參數(shù)的效果和指定“-xdev”相同;
-mtime<24小時(shí)數(shù)>:查找在指定時(shí)間曾被更改過的文件或目錄,單位以24小時(shí)計(jì)算;
-name<范本樣式>:指定字符串作為尋找文件或目錄的范本樣式;
-newer<參考文件或目錄>:查找其更改時(shí)間較指定文件或目錄的更改時(shí)間更接近現(xiàn)在的文件或目錄;
-nogroup:找出不屬于本地主機(jī)群組識(shí)別碼的文件或目錄;
-noleaf:不去考慮目錄至少需擁有兩個(gè)硬連接存在;
-nouser:找出不屬于本地主機(jī)用戶識(shí)別碼的文件或目錄;
-ok<執(zhí)行指令>:此參數(shù)的效果和指定“-exec”類似,但在執(zhí)行指令之前會(huì)先詢問用戶,若回答“y”或“Y”,則放棄執(zhí)行命令;
-path<范本樣式>:指定字符串作為尋找目錄的范本樣式;
-perm<權(quán)限數(shù)值>:查找符合指定的權(quán)限數(shù)值的文件或目錄;
-print:假設(shè)find指令的回傳值為Ture,就將文件或目錄名稱列出到標(biāo)準(zhǔn)輸出。格式為每列一個(gè)名稱,每個(gè)名稱前皆有“./”字符串;
-print0:假設(shè)find指令的回傳值為Ture,就將文件或目錄名稱列出到標(biāo)準(zhǔn)輸出。格式為全部的名稱皆在同一行;
-printf<輸出格式>:假設(shè)find指令的回傳值為Ture,就將文件或目錄名稱列出到標(biāo)準(zhǔn)輸出。格式可以自行指定;
-prune:不尋找字符串作為尋找文件或目錄的范本樣式;
-regex<范本樣式>:指定字符串作為尋找文件或目錄的范本樣式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:將find指令的回傳值皆設(shè)為True;
-typ<文件類型>:只尋找符合指定的文件類型的文件;
-uid<用戶識(shí)別碼>:查找符合指定的用戶識(shí)別碼的文件或目錄;
-used<日數(shù)>:查找文件或目錄被更改之后在指定時(shí)間曾被存取過的文件或目錄,單位以日計(jì)算;
-user<擁有者名稱>:查找符和指定的擁有者名稱的文件或目錄;
-version或——version:顯示版本信息;
-xdev:將范圍局限在先行的文件系統(tǒng)中;
-xtype<文件類型>:此參數(shù)的效果和指定“-type”參數(shù)類似,差別在于它針對(duì)符號(hào)連接檢查。