Linux系統(tǒng)特殊權(quán)限和通配符及特殊字符使用詳解
一、Linux系統(tǒng)基礎(chǔ)權(quán)限
1. 默認(rèn)權(quán)限掩碼及設(shè)置命令umask
1.1 umask命令說(shuō)明
umask是通過(guò)八進(jìn)制的數(shù)值來(lái)定義用戶創(chuàng)建文件或目錄的默認(rèn)權(quán)限的。系統(tǒng)會(huì)根據(jù)預(yù)先設(shè)定的 umask 值計(jì)算出默認(rèn)情況下創(chuàng)建的文件或目錄權(quán)限。
1)為什么創(chuàng)建文件默認(rèn)權(quán)限為644,目錄為755?
umask 權(quán)限掩碼??刂葡到y(tǒng)的文件和目錄的默認(rèn)權(quán)限。 [root@buffes buffes]# umask 0022 針對(duì)文件來(lái)說(shuō):默認(rèn)權(quán)限計(jì)算方法 6 6 6 0 2 2 - ----------- 6 4 4 ###系統(tǒng)的文件默認(rèn)權(quán)限 ==============================
2)umask掩碼的3位每一位數(shù)字是否有【奇數(shù)】,如果有奇數(shù)(奇數(shù)位加1)
測(cè)試: [root@buffes buffes]# umask 021 [root@buffes buffes]# umask 0021 [root@buffes buffes]# touch f021 [root@buffes buffes]# ls -l f021 -rw-r--rw-. 1 root root 0 5月 21 10:40 f021 計(jì)算: 6 6 6 0 2 1 - ----------- 6 4 5 ###系統(tǒng)的文件默認(rèn)權(quán)限 0 0 1 --------------- 6 4 6 測(cè)試: [root@buffes buffes]# umask 033 [root@buffes buffes]# umask 0033 [root@buffes buffes]# touch f033 [root@buffes buffes]# ls -l f033 -rw-r--r--. 1 root root 0 5月 21 10:42 f033 結(jié)論:文件默認(rèn)權(quán)限結(jié)論 1.權(quán)限從666開(kāi)始計(jì)算。 2.如果偶數(shù),正常做減法。 3.如果是奇數(shù),奇數(shù)位加一。
3)針對(duì)目錄默認(rèn)權(quán)限
1.權(quán)限從777開(kāi)始計(jì)算。
2.和掩碼正常做減法。
測(cè)試:
[root@buffes buffes]# mkdir d033
[root@buffes buffes]# ls -ld d033
drwxr--r--. 2 root root 6 5月 21 10:44 d033
[root@buffes buffes]# umask 045
[root@buffes buffes]# mkdir d045
[root@buffes buffes]# ls -ld d045
drwx-wx-w-. 2 root root 6 5月 21 10:45 d045
UID大于199,并且用戶和組同名,umask為002
cat /etc/bashrc
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ];
then
umask 002
else
umask 022
fi
/home/buffes 默認(rèn)700, #控制/etc/login.defs
想一想???為什么系統(tǒng)把默認(rèn)權(quán)限定為:
默認(rèn)644,目錄755呢? #安全臨界值
1.2 有關(guān)權(quán)限生產(chǎn)環(huán)境應(yīng)用案例及思路
運(yùn)營(yíng)電商 jd,站點(diǎn)目錄給什么權(quán)限安全呢? 目錄755 [root@buffes buffes]# mkdir /data/html -p [root@buffes buffes]# ls -ld /data/html/ drwxr-xr-x. 2 root root 6 5月 21 11:07 /data/html/ web服務(wù)運(yùn)行時(shí)候有一個(gè)【虛擬用戶www】, 1)虛擬用戶www 可進(jìn)入查看程序文件,不可以寫(xiě)、刪文件。 [root@buffes buffes]# useradd www [root@buffes buffes]# chown -R www.www /data/html [root@buffes buffes]# ls -ld /data/html drwxr-xr-x. 2 www www 6 5月 21 11:07 /data/html #可以寫(xiě)、刪文件 普通站點(diǎn)目錄:【用戶和組都是root,權(quán)限755】 [root@buffes buffes]# ls -ld /data/html drwxr-xr-x. 2 root root 6 5月 21 11:07 /data/html/ [root@buffes buffes]# mkdir /data/html/upload -p ###存放圖片,文件 [root@buffes buffes]# ls -ld /data/html/upload/ drwxr-xr-x. 2 root root 6 5月 21 11:15 /data/html/upload/ 圖片、文件目錄授權(quán):【用戶和組www,權(quán)限755】 [root@buffes buffes]# chown -R www.www /data/html/upload/ [root@buffes buffes]# ls -ld /data/html/upload/ drwxr-xr-x. 2 www www 6 5月 21 11:15 /data/html/upload/ 解決upload上傳目錄安全: 1)不讓上傳:程序:控制這個(gè)目錄上傳的內(nèi)容只能是.jpg,.zip。 2)不讓執(zhí)行:nginx:針對(duì)upload訪問(wèn)的時(shí)候,除了.jpg,.zip之外,不提供訪問(wèn)。 3)不讓執(zhí)行:動(dòng)態(tài)服務(wù)器和靜態(tài)服務(wù)器分離,訪問(wèn)的時(shí)候只有靜態(tài)服務(wù)器(不安裝PHP,java,python) 4)不讓執(zhí)行:磁盤(pán)上掛載的時(shí)候,設(shè)置禁止程序運(yùn)行(二進(jìn)制程序)。 不管什么業(yè)務(wù)都沒(méi)有改程序文件的需求。 程序文件 [644 root root] 程序文件 [644 www www] #不推薦 三劍客sed 企業(yè)木馬案例: [root@buffes buffes]# touch suid.txt [root@buffes buffes]# ls -l suid.txt -rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt
2. linux特殊權(quán)限位
[suid] 1)suid(setuid)位通過(guò)S字符標(biāo)識(shí)。 2)存在于基本權(quán)限的用戶權(quán)限位的x權(quán)限對(duì)應(yīng)的位置。 3)如果用戶權(quán)限位對(duì)應(yīng)的x權(quán)限位上有x權(quán)限,則suid就用小寫(xiě)的s標(biāo)識(shí)。 4)suid的s對(duì)應(yīng)的數(shù)字權(quán)限為4。 5)完整權(quán)限用八進(jìn)制數(shù)4000表示。 創(chuàng)建文件備用測(cè)試 [root@buffes buffes]# touch suid.txt [root@buffes buffes]# ls -l suid.txt -rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt 數(shù)字權(quán)限設(shè)置suid測(cè)試: chmod 4644 suid.txt [root@buffes buffes]# chmod 4644 suid.txt [root@buffes buffes]# ls -l suid.txt -rwSr--r--. 1 root root 0 5月 21 11:55 suid.txt [root@buffes buffes]# chmod u+x suid.txt [root@buffes buffes]# ls -l suid.txt -rwsr--r--. 1 root root 0 5月 21 11:55 suid.txt 取消設(shè)置suid測(cè)試: [root@buffes buffes]# chmod 644 suid.txt [root@buffes buffes]# ls -l suid.txt -rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt 字符設(shè)置suid chmod u+s suid.txt ls -l suid.txt chmod u-s suid.txt ls -l suid.txt
2.1 為什么會(huì)有SUID?
例子:普通用戶修改密碼。 [buffes@buffes ~]$ passwd 更改用戶 buffes 的密碼 。 為 buffes 更改 STRESS 密碼。 (當(dāng)前)UNIX 密碼: 新的 密碼: 重新輸入新的 密碼: passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。 1)修改密碼passwd =======>>修改/etc/shadow文件 buffes用戶使用passwd命令,修改/etc/shadow文件,來(lái)實(shí)現(xiàn)修改密碼的。 ls -l /etc/shadow [buffes@buffes ~]$ ls -l /etc/shadow ----------. 1 root root 2484 5月 21 12:10 /etc/shadow 傳統(tǒng)權(quán)限分析,buffes是其他用戶,修改/etc/shadow權(quán)限---,沒(méi)有權(quán)限修改。。 事實(shí)呢?改了 suid的特殊作用:可以繞過(guò)基礎(chǔ)權(quán)限體系,可以修改沒(méi)有權(quán)限修改的文件。 基于二進(jìn)制命令的。 [buffes@buffes ~]$ ls -l `which passwd` -rwsr-xr-x. 1 root root 27856 4月 1 2020 /bin/passwd 1)給一個(gè)命令設(shè)置suid以后,所有使用這個(gè)命令的用戶,都擁有和這個(gè)命令對(duì)應(yīng)的用戶的權(quán)限。 問(wèn)題: cd 不好用 1)bash內(nèi)置命令,C6系統(tǒng)中沒(méi)有對(duì)應(yīng)文件。 2)有對(duì)應(yīng)文件。授權(quán)系統(tǒng)文件的cd,執(zhí)行cd很可能執(zhí)行的是bash內(nèi)置的cd。 3) [root@buffes ~]# which cd /usr/bin/cd [root@buffes ~]# cd /usr/bin/ [root@buffes bin]# mv cd cdd [root@buffes bin]# cd /root [root@buffes ~]# ls cdd ls: 無(wú)法訪問(wèn)cdd: 沒(méi)有那個(gè)文件或目錄 [root@buffes ~]# cd /usr/bin [root@buffes bin]# ls cdd cdd -rwxr-xr-x. 1 root root 62872 8月 20 2019 /bin/rm [root@buffes bin]# find /bin/ -type f -perm 4755|xargs ls -l -rwsr-xr-x. 1 root root 73888 8月 9 2019 /bin/chage -rwsr-xr-x. 1 root root 57656 8月 9 2019 /bin/crontab -rwsr-xr-x. 1 root root 32096 10月 31 2018 /bin/fusermount -rwsr-xr-x. 1 root root 78408 8月 9 2019 /bin/gpasswd -rwsr-xr-x. 1 root root 44264 4月 1 2020 /bin/mount -rwsr-xr-x. 1 root root 41936 8月 9 2019 /bin/newgrp -rwsr-xr-x. 1 root root 27856 4月 1 2020 /bin/passwd -rwsr-xr-x. 1 root root 23576 4月 1 2020 /bin/pkexec -rwsr-xr-x. 1 root root 32128 4月 1 2020 /bin/su -rwsr-xr-x. 1 root root 31984 4月 1 2020 /bin/umount suid生產(chǎn)場(chǎng)景實(shí)際用途。 1.所有普通用戶都能用到 2.普通用戶想修改沒(méi)有權(quán)限文件時(shí)候使用。 3.命令是沒(méi)有破壞作用的。 比如:ping,passwd
3.sgid權(quán)限知識(shí)
對(duì)于二進(jìn)制命令或者程序來(lái)說(shuō),sgid的功能和suid基本相同,唯一的區(qū)別是suid是獲得命令所屬用戶的身份和權(quán)限,而sgid是獲得命令的所屬用戶組的身份和權(quán)限,因此,有關(guān)sgid對(duì)于二進(jìn)制命令或者程序方面的知識(shí)就不詳細(xì)敘述了。
3.1 suid核心知識(shí)
1)與suid不同的是,sgid既可以針對(duì)文件,也可以針對(duì)目錄設(shè)置! 2)sgid的權(quán)限是針對(duì)用戶組權(quán)限位的。 對(duì)于文件來(lái)說(shuō),sgid的功能如下: 1)sgid僅對(duì)二進(jìn)制命令及程序有效。 2)二進(jìn)制命令或程序,也需要有可執(zhí)行權(quán)限x配合。 3)執(zhí)行命令的任意用戶可以獲得該命令程序執(zhí)行期間所屬組的身份和權(quán)限。 理解sgid: locate====>讀/var/lib/mlocate/mlocate.db <====updatedb [root@buffes bin]# ls -l /var/lib/mlocate/mlocate.db -rw-r-----. 1 root slocate 1423565 5月 21 03:23 /var/lib/mlocate/mlocate.db 結(jié)論沒(méi)有權(quán)限可以查詢/var/lib/mlocate/mlocate.db 事實(shí)上是可以查的。 [buffes@buffes ~]$ locate cp 原因:就是locate命令被設(shè)置了sgid [buffes@buffes ~]$ ls -l `which locate` -rwx--s--x. 1 root slocate 40520 4月 11 2018 /bin/locate 測(cè)試:取消sgid [root@buffes bin]# chmod g-s /bin/locate [root@buffes bin]# ls /bin/locate -l -rwx--x--x. 1 root slocate 40520 4月 11 2018 /bin/locate 查看: [buffes@buffes ~]$ locate cp locate: 無(wú)法執(zhí)行 stat () `/var/lib/mlocate/mlocate.db': 權(quán)限不夠 參考解答: [root@buffes ~]# mkdir /home/admins #<==創(chuàng)建共享目錄admins。 [root@buffes ~]# groupadd adminuser #<==添加用戶組adminuser。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root root 4096 Apr 30 16:54 /home/admins [root@buffes ~]# chgrp adminuser /home/admins/ #<==給adminis目錄授權(quán)adminuser用戶組。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root adminuser 4096 Apr 30 16:54 /home/admins #<==查看授權(quán)結(jié)果。 [root@buffes ~]# touch /home/admins/buffes.txt #<==創(chuàng)建測(cè)試文件。 [root@buffes ~]# ls -l /home/admins/ 來(lái)看一道RHCE認(rèn)證考試題(了解即可)。 創(chuàng)建共享目錄/home/admins,要求屬組為adminuser,adminuser組成員對(duì)admins目錄有寫(xiě)入、讀取和執(zhí)行的權(quán)限,其他所有用戶沒(méi)有任何權(quán)限(root除外),在/home/admins目錄中創(chuàng)建的文件會(huì)自動(dòng)繼成adminuser組。 參考解答: [root@buffes ~]# mkdir /home/admins #<==創(chuàng)建共享目錄admins。 [root@buffes ~]# groupadd adminuser #<==添加用戶組adminuser。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root root 4096 Apr 30 16:54 /home/admins [root@buffes ~]# chgrp adminuser /home/admins/ #<==給adminis目錄授權(quán)adminuser用戶組。 [root@buffes ~]# ls -ld /home/admins drwxr-xr-x. 2 root adminuser 4096 Apr 30 16:54 /home/admins #<==查看授權(quán)結(jié)果。 [root@buffes ~]# touch /home/admins/buffes.txt #<==創(chuàng)建測(cè)試文件。 [root@buffes ~]# ls -l /home/admins/ total 0 -rw-r--r--. 1 root root 0 Apr 30 19:59 buffes.txt #<==文件默認(rèn)用戶和組都是root。 [root@buffes ~]# chmod 2770 /home/admins #<==授權(quán)sgid權(quán)限給admins目錄。 [root@buffes ~]# ls -ld /home/admins/ drwxrws---. 2 root adminuser 4096 Apr 30 20:10 /home/admins/ #<==查看授權(quán)結(jié)果。 [root@buffes ~]# touch /home/admins/newfile.txt #<==在創(chuàng)建新文件。 [root@buffes ~]# ls -l /home/admins/ total 0 -rw-r--r--. 1 root adminuser 0 Apr 30 20:04 newfile.txt #<==新創(chuàng)建的文件用戶組為adminuser了,而非默認(rèn)的root了。 -rw-r--r--. 1 root root 0 Apr 30 19:59 buffes.txt 整個(gè)配置過(guò)程,已滿足題意需求。
二、通配符與特殊符號(hào)
1. 通配符
1.代表特殊含義的一些符號(hào)。
2.bash命令行操作的時(shí)候。
作用于文件名的通配符:
符號(hào) 作用
* 匹配任意(0個(gè)或多個(gè))字符或字符串,包括空字符串※
? 匹配任意1個(gè)字符,有且只有一個(gè)字符
字符集合(匹配一堆字符/文本)
[abcd] 匹配abcd中任何一個(gè)字符,abcd也可是其他任意不連續(xù)字符
[a-z] 匹配a到z之間的任意一個(gè)字符,字符前后要連續(xù),也可以用連續(xù)數(shù)字[1-9]
[!abcd] 表示不匹配括號(hào)里面的任何一個(gè)字符,也可書(shū)寫(xiě)為[!a-d],這里的!號(hào)可以用^替代,即[^abcd]
*的作用:經(jīng)常使用
ls *
rm -f *.txt
ls *
rm -f f*
[root@buffes ~]# find ./ -name "*.txt"
./a.txt
./aaa.txt
./girlLove/girlLove.txt
[root@buffes ~]# find /etc/ -type f -name "*hosts"
/etc/hosts
?的作用(了解)
[root@buffes ~]# touch a.txt
[root@buffes ~]# touch aaa.txt
[root@buffes ~]# ls ?.txt
a.txt
[root@buffes ~]# ls ???.txt
aaa.txt
[abcd]的實(shí)踐(了解)
[root@buffes ~]# ls [abcd].txt
a.txt
[root@buffes ~]# touch b.txt
[root@buffes ~]# ls [abcd].txt
a.txt b.txt
[root@buffes ~]# touch bb.txt
[root@buffes ~]# ls [abcd].txt
a.txt b.txt
[a-z]或[1-9]
[root@buffes ~]# touch {1..3}.txt
[root@buffes ~]# ls [a-z].txt
a.txt b.txt
[root@buffes ~]# ls [1-9].txt
1.txt 2.txt 3.txt
[^a-z]或[!1-9](了解)
[root@buffes ~]# ls *.txt
1.txt 2.txt 3.txt aaa.txt a.txt bb.txt b.txt cd.txt
[root@buffes ~]# ls [^1-9].txt
a.txt b.txt
[root@buffes ~]# ls [a-z].txt
a.txt b.txt
[root@buffes ~]# ls [!a-z].txt
1.txt 2.txt 3.txt
2. 與路徑和位置有關(guān)的特殊符號(hào)
| 符合 | 作用 |
|---|---|
| ~ | 用戶的家目錄,超級(jí)用戶為/root,普通用戶為/home |
| - | 代表上一次(相對(duì)于當(dāng)前路徑)用戶所在的路徑 |
| . | 代表當(dāng)前目錄(點(diǎn)號(hào)還有很多其它含義,暫且不表) |
| … | 代表上一級(jí)目錄 |
有一個(gè)環(huán)境變量名字叫OLDPWD,用來(lái)時(shí)刻記錄上一次所在的路徑。 所以 cd -的時(shí)候,實(shí)際就是 cd $OLDPWD [root@buffes ~]# echo $OLDPWD /etc [root@buffes ~]# cd - /etc [root@buffes etc]# echo $OLDPWD /root [root@buffes etc]# cd - /root [root@buffes ~]# cd /etc/sysconfig/ [root@buffes sysconfig]# echo $OLDPWD /root [root@buffes sysconfig]# cd - /root [root@buffes ~]# echo $OLDPWD /etc/sysconfig [root@buffes ~]# cd - /etc/sysconfig [root@buffes sysconfig]# cd $OLDPWD [root@buffes ~]# pwd /root [root@buffes ~]# [root@buffes ~]# [root@buffes ~]# [root@buffes ~]# cd $OLDPWD [root@buffes sysconfig]# pwd /etc/sysconfig
2.1 單引號(hào)
(‘’)所見(jiàn)即所得,即輸出單引號(hào)內(nèi)容時(shí)會(huì)將單引號(hào)內(nèi)的所有內(nèi)容都原樣輸出,或者描述為單引號(hào)里面看到的是什么就會(huì)輸出什么,被稱(chēng)之為強(qiáng)引用
[root@buffes ~]# echo 'date' date [root@buffes ~]# a=123 [root@buffes ~]# echo $a 123 [root@buffes ~]# echo '$a' $a [root@buffes ~]# echo "$a" 123 希望看到啥就輸出啥就用單引號(hào)。
2.2 雙引號(hào)(常用)
(“”) 輸出雙引號(hào)內(nèi)的所有內(nèi)容時(shí),如果內(nèi)容中有命令(要反引下)、變量、特殊轉(zhuǎn)義符等,會(huì)先把變量、命令、轉(zhuǎn)義字符解析出結(jié)果,然后再輸出最終內(nèi)容,被稱(chēng)為弱引用。推薦使用
1)不知道用什么引號(hào)就用雙引號(hào)。 [root@buffes ~]# echo $(date) 2030年 05月 24日 星期五 23:26:09 CST [root@buffes ~]# echo '$(date)' $(date) [root@buffes ~]# echo "$(date)" 2030年 05月 24日 星期五 23:26:28 CST
2.3 無(wú)引號(hào)
賦值時(shí),如果變量?jī)?nèi)容有空格會(huì)使得賦值不完整。而在輸出內(nèi)容時(shí),也會(huì)將含有空格的字符串視為一個(gè)整體輸出;如果內(nèi)容中有命令(要反引下)、變量等,會(huì)先把變量、命令解析出結(jié)果,然后輸出最終內(nèi)容;如果字符串中帶有空格等特殊字符,則有可能無(wú)法完整地輸出,因此需要改加雙引號(hào)。
一般連續(xù)的字符串、數(shù)字、路徑等可以不加任何引號(hào)賦值和輸出,不過(guò)無(wú)引號(hào)的情況最好用雙引號(hào)替代之,特別是變量賦值時(shí)內(nèi)容很簡(jiǎn)單,且沒(méi)有空格,這個(gè)時(shí)候 不加引號(hào)也可以和雙引號(hào)類(lèi)似,雙引號(hào)引起來(lái)的內(nèi)容是一個(gè)整體。
[root@buffes ~]# echo $a 123 [root@buffes ~]# echo $(date) 2030年 05月 24日 星期五 23:27:54 CST 雙引號(hào)引起來(lái)的內(nèi)容是一個(gè)整體。 [root@buffes ~]# echo 123 456 123 456 [root@buffes ~]# a=123 456 -bash: 456: 未找到命令 [root@buffes ~]# echo $a 123 [root@buffes ~]# a=“123 456” [root@buffes ~]# echo $a 123 456
2.4 反引號(hào)(相當(dāng)于$())
(``) 一般用于引用命令,執(zhí)行的時(shí)候命令會(huì)被執(zhí)行,相當(dāng)于$(),賦值和輸出都要將命令用``引起來(lái)里面是可執(zhí)行的命令。
[root@buffes ~]# date 2030年 05月 24日 星期五 23:31:02 CST [root@buffes ~]# echo $(date) 2030年 05月 24日 星期五 23:31:09 CST [root@buffes ~]# echo `date` 2030年 05月 24日 星期五 23:31:19 CST [root@buffes ~]# tar zcf /tmp/etc_$(date +%F).tar.gz /etc tar: 從成員名中刪除開(kāi)頭的“/”
2.4 其他特殊符號(hào)
;
表示一個(gè)命令的結(jié)束
也是命令間的分隔符
#
1)root用戶的命令提示符
2)表示是注釋內(nèi)容,是用來(lái)給管理員看的,系統(tǒng)不會(huì)執(zhí)行#號(hào)開(kāi)頭的內(nèi)容
3)命令替換用的分隔符 比如VIM里的替換 :%s#129#921#g
| 表示管道,將一個(gè)命令處理后的中間內(nèi)容輸出給下一個(gè)命令繼續(xù)處理
[root@buffes ~]# cat /etc/services |grep 3306
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
1)管道傳輸?shù)氖菙?shù)據(jù)流(文件內(nèi)容),不是文件(文件名)。
2)不需要管道直接可以用命令處理。
[root@buffes ~]# grep 3306 /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
3)分組功能,同時(shí)過(guò)濾多個(gè)字符串
grep -E ==egrep
[root@buffes ~]# egrep "3306|1521" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
$
1)代表普通用戶的命令提示符
2)字符串前加$符號(hào),代表字符串變量?jī)?nèi)容
[buffes@buffes ~]$ a=buffes
[buffes@buffes ~]$ echo $a
buffes
[root@buffes ~]# echo $LANG #字符集設(shè)置
zh_CN.UTF-8
[root@buffes ~]# echo $PS1 #命令行的變量
[\[\e[35;1m\]\u@\[\e[33;1m\]\h\[\e[34;1m\] \W\[\e[0m\]]\$
[root@buffes ~]# echo $HOME
/root
\ 逃脫符或轉(zhuǎn)義字符,即將有特殊含義的字符(通配符或正則表達(dá)式)還原成字符本意
\? 只表示問(wèn)號(hào)本身
touch \?.txt #代表創(chuàng)建?.txt這個(gè)文件。
[root@buffes ~]# ls ?.txt
1.txt 2.txt 3.txt a.txt b.txt
[root@buffes ~]# ls \?.txt
ls: 無(wú)法訪問(wèn)?.txt: 沒(méi)有那個(gè)文件或目錄
[root@buffes ~]# touch ?.txt
[root@buffes ~]# ls
1.txt aaa.txt bb.txt girlLove buffes_dir
2.txt abc b.txt girlLove.zip user.list
3.txt a.txt cd.txt buffes 老男孩Linux58期開(kāi)班典禮3_-.pptx
[root@buffes ~]# touch \?.txt
[root@buffes ~]# ls
1.txt abc cd.txt buffes_dir
2.txt a.txt girlLove ?.txt
3.txt bb.txt girlLove.zip user.list
aaa.txt b.txt buffes 老男孩Linux58期開(kāi)班典禮3_-.pptx
[root@buffes ~]# ls ?.txt
1.txt 2.txt 3.txt a.txt b.txt ?.txt
[root@buffes ~]# ls \?.txt
?.txt
{}
1)生成序列
[root@buffes ~]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@buffes ~]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@buffes ~]# echo {z..a}
z y x w v u t s r q p o n m l k j i h g f e d c b a
[root@buffes ~]# echo {10..1}
10 9 8 7 6 5 4 3 2 1
seq 數(shù)字序列
1)默認(rèn):
[root@buffes ~]# seq 5
1
2
3
4
5
=============
打奇偶數(shù)
seq 1 2 5
起始 步長(zhǎng) 結(jié)束
[root@buffes ~]# seq 1 2 5
1
3
5
[root@buffes ~]# seq 2 2 6
2
4
[root@buffes ~]# seq 6 -1 1
6
5
4
3
2
1
[root@buffes ~]# seq -w 10
01
02
03
04
05
06
07
08
09
10
用途:
touch stu{1..10}.txt
[root@buffes ~]# echo {00..10}
00 01 02 03 04 05 06 07 08 09 10
[root@buffes ~]# echo {00..10}|xargs -n 1
00
01
02
03
04
05
06
07
08
09
10
[root@buffes ~]# seq -s " " 5
1 2 3 4 5
[root@buffes ~]# seq -w -s " " 10
01 02 03 04 05 06 07 08 09 10
[root@buffes ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@buffes ~]# seq -w 10
01
02
03
04
05
06
07
08
09
10
[root@buffes ~]# seq -w 10|sed -r 's#(.*)#\1#g'
01
02
03
04
05
06
07
08
09
10
[root@buffes ~]# seq -w 10|sed -r 's#(.*)#useradd buffes\1#g'
useradd buffes01
useradd buffes02
useradd buffes03
useradd buffes04
useradd buffes05
useradd buffes06
useradd buffes07
useradd buffes08
useradd buffes09
useradd buffes10
[root@buffes ~]# echo -e {00..10}"\n"
00
01
02
03
04
05
06
07
08
09
10
[root@buffes ~]# echo -e {00..10}"\n"|column -t
00
01
02
03
04
05
06
07
08
09
10
總結(jié)seq:
seq 10 #豎向打印序列
seq -w 10 #補(bǔ)全位數(shù)打印序列。
seq 起始 步長(zhǎng) 結(jié)束 #打印奇數(shù)和偶數(shù)序列
步長(zhǎng)為正數(shù)就是從小到大,否則從大到小。起始數(shù)字>結(jié)束數(shù)字
seq -w -s" " 10 #-s指定分隔符,橫向打印序列
2)引用變量作為變量與普通字符的分隔
[root@buffes ~]# a=123
[root@buffes ~]# echo "I am$a歲了"
I am123歲了
[root@buffes ~]#
[root@buffes ~]# echo "I am$ale"
I am
[root@buffes ~]#
[root@buffes ~]#
[root@buffes ~]#
[root@buffes ~]# echo "I am${a}le"
I am123le
bash里特殊符號(hào)
名稱(chēng) 解釋
&& 前一個(gè)命令執(zhí)行成功,再執(zhí)行后面一個(gè)命令
|| 前一個(gè)命令執(zhí)行失敗,再執(zhí)行后面一個(gè)命令
!
1)在Bash中表示取反
2)在vi/vim中表示強(qiáng)制
3)!ls表示找出最近一次以ls開(kāi)頭的命令并運(yùn)行
&& 并且的意思 and 前面正確,后面才輸出
echo 123 && echo 456 #前面命令能正確輸出,則打印456,否則不打印。
生產(chǎn)場(chǎng)景使用:
cd /etc/sysconfig/network-scripts/ &&\
tar zcf /tmp/ifcfg-eth0.tar.gz ./ifcfg-eth0
[root@buffes ~]# echo $? #驗(yàn)證命令是否執(zhí)行成功,0表示成功,非0表示失敗。
0
|| or或者
前面錯(cuò)誤,后面才輸出
前面正確,后邊不輸出。
[root@buffes ~]# cho 123 || echo 456
-bash: cho: 未找到命令
456
作用:
[root@buffes ~]# echo adsfas||echo 1
adsfas
輸出1,表示前面命令執(zhí)行錯(cuò)誤,否則,命令執(zhí)行正確。
! 取反
[root@buffes ~]# ! cho 123 || echo 456
-bash: cho: 未找到命令
2.5 練習(xí)題
1)豎向打印a到z,共26個(gè)字母。 2)查找/下,包含.conf的所有文件,并打包,將壓縮包備份到/opt下。 3)批量添加test01-test1010個(gè)用戶,并設(shè)置對(duì)應(yīng)數(shù)字密碼。 4)橫向打印1,4,7序列。 5)描述下單引號(hào),雙引號(hào),反引號(hào)的含義。 6)使用cat命令將下面內(nèi)容輸入到文件test.txt里。 http://www.etiantian.org http://bbs.etiantian.org http://www.etiantian.org http://blog.etiantian.org http://www.etiantian.org http://blog.etiantian.org 7)對(duì)題6的內(nèi)容,統(tǒng)計(jì)域名出現(xiàn)的次數(shù),并倒序排序。 8)題6中同時(shí)過(guò)濾包含bbs和blog字符串的行。 9)如何能讓執(zhí)行一個(gè)命令成功后再執(zhí)行另一個(gè)命令? 10)把題6中的etiantian.org替換為buffes。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Centos7的Firewalld防火墻基礎(chǔ)命令詳解
這篇文章主要介紹了Centos7的Firewalld防火墻基礎(chǔ)命令詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
運(yùn)維工程師必備:Linux系統(tǒng)監(jiān)控與故障排查的命令大全
文章整理了Linux系統(tǒng)監(jiān)控命令,按功能分類(lèi)并附使用示例,涵蓋了系統(tǒng)概覽、CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)、進(jìn)程與服務(wù)、高級(jí)監(jiān)控工具等多個(gè)方面,需要的朋友可以參考下2025-12-12
詳解如何在阿里云服務(wù)器部署程序并用域名直接訪問(wèn)
這篇文章主要介紹了詳解如何在阿里云服務(wù)器部署程序并用域名直接訪問(wèn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
關(guān)于安裝linux redhat后無(wú)法使用yum命令安裝gcc-c++問(wèn)題的解決過(guò)程
這篇文章主要介紹了關(guān)于安裝linux redhat后無(wú)法使用yum命令安裝gcc-c++問(wèn)題的解決過(guò)程,需要的朋友可以參考下2017-08-08
解讀Linux下ip命令展示的網(wǎng)絡(luò)連接信息
這篇文章主要給大家介紹了關(guān)于Linux下解讀ip命令展示的網(wǎng)絡(luò)連接信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2018-03-03
詳解fedora 開(kāi)啟 apache 并 開(kāi)啟目錄瀏覽模式
這篇文章主要介紹了fedora 開(kāi)啟 apache 并 開(kāi)啟目錄瀏覽模式的相關(guān)資料,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07

