Linux運維練習

Linux運維練習

一、Linux基礎

1. 題目

1、顯示當前時間,格式:2020-1-29 10:20:30   
2、顯示前天是星期幾
3、設置當前日期爲2019-08-07 06:05:10
4、在本機字符終端登錄時,除顯示原有信息外,再顯示當前登錄終端號,主機名和當前時間
5、今天1830自動關機,並提示用戶

2. 答案

1.顯示當前時間,格式:2020-1-29 10:20:30   
	[root@centos7 ~]# date "+%F %T"
2.顯示前天是星期幾
	[root@centos7 ~]# date +%A --date '2 days ago'
	[root@centos7 ~]# date -d -2days +%a
3.設置當前日期爲2019-08-07 06:05:10
	[root@centos7 ~]# date -s "2019-08-07 06:05:10"
4.在本機字符終端登錄時,除顯示原有信息外,再顯示當前登錄終端號,主機名和當前時間
	[root@centos7 ~]# vim /etc/issue
	最後一行插入:
	Hostname:\n
	Terminal Number:\l
	Current Time:\t
5.今天18:30自動關機,並提示用戶
	[root@centos7 ~]# shutdown -h 18:30 "it is will poweroff at 18:30"

二、文件管理

1. 題目

1.查看文件類型
2.顯示當前工作目錄
3.獲取/etc/sysconfig/的基名
4./etc/sysconfig/的路徑名
5.切換到用戶家目錄
6.切換到父目錄
7.切換到/etc/sysconfig目錄下
8.切換到上一次所在的目錄
9.顯示當前目錄下所有文件
10.顯示目錄內容的額外信息
11.遞歸顯示目錄內容
12.查看test.txt文件的狀態,注意三個時間戳
13.創建空文件test.sh
14./etc/httpd/conf/httpd.conf文件和/etc/my.cnf文件拷貝到當前目錄
15./etc/nginx目錄及其下面所有文件和子目錄拷貝到當前目錄
16.複製httpd.conf文件並重命名爲httpd.conf.bak
17.複製/etc目錄下所有文件及其子目錄到當前目錄,並重命名爲etc_bak
18.把當前目錄下nginx命令重命名爲nginx_bak
19.把httpd.conf目件移動到/tmp目錄下
20.刪除當前目錄下所有文件
21.創建目錄a,其下包含b和c兩目錄,且b和c目錄下都有一個目錄d
22.顯示a目錄的子錄樹
23.查看/usr/local目錄樹,但僅查看2級的目錄深度
24./usr/sbin/apachectl文件在當前目錄下創建軟連接文件爲apachectl
25.顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數的文件或目錄
26.顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的文件或目錄
27.顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字符的文件或目錄
28.顯示/etc/目錄下所有以rc開頭,並後面是0-6之間的數字,其它爲任意字符的文件或目錄
29.顯示/etc目錄下,所有以.d結尾的文件或目錄
30.顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的文件或目錄
31.只顯示/root下的隱藏文件和目錄
32.只顯示/etc下的非隱藏目錄
33.每天將/etc/目錄下所有文件,備份到/data獨立的子目錄下,並要求子目錄格式爲 backupYYYY-mm-dd,備份過程可見
34.創建/data/rootdir目錄,並複製/root下所有文件到該目錄內,要求保留原有權限
35.如何創建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
36.如何創建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a,/testdir/dir2/x/b
37.如何創建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

2. 答案

1.查看文件類型
	[root@centos7 ~]# ll
2.顯示當前工作目錄
	[root@centos7 ~]# pwd
3.獲取/etc/sysconfig/的基名
	[root@centos7 ~]# basename /etc/sysconfig/
4.取/etc/sysconfig/的路徑名
	[root@centos7 ~]# dirname /etc/sysconfig/
5.切換到用戶家目錄
	[root@centos7 ~]# cd
	[root@centos7 ~]# cd ~
6.切換到父目錄
	[root@centos7 ~]# cd ..
7.切換到/etc/sysconfig目錄下
	[root@centos7 /]# cd /etc/sysconfig/
8.切換到上一次所在的目錄
	[root@centos7 sysconfig]# cd -
9.顯示當前目錄下所有文件
	[root@centos7 /]# ls -a
10.顯示目錄內容的額外信息
	[root@centos7 /]# ls -l
	[root@centos7 /]# ll
11.遞歸顯示目錄內容
	[root@centos7 ~]# ls -R
12.查看test.txt文件的狀態,注意三個時間戳
	[root@centos7 ~]# stat test.txt
13.創建空文件test.sh
	[root@centos7 ~]# touch test.sh
14.把/etc/httpd/conf/httpd.conf文件和/etc/my.cnf文件拷貝到當前目錄
	[root@centos7 ~]# cp /etc/httpd/conf/httpd.conf /etc/my.cnf ./
15.把/etc/nginx目錄及其下面所有文件和子目錄拷貝到當前目錄
	[root@centos7 ~]# cp -R /etc/nginx/ ./
16.複製httpd.conf文件並重命名爲httpd.conf.bak
	[root@centos7 ~]# cp httpd.conf httpd.conf.bak
17.複製/etc目錄下所有文件及其子目錄到當前目錄,並重命名爲etc_bak
	[root@centos7 ~]# cp -R /etc/ ./etc_bak
18.把當前目錄下nginx命令重命名爲nginx_bak
	[root@centos7 ~]# mv nginx/ nginx_bak
19.把httpd.conf目件移動到/tmp目錄下
	[root@centos7 ~]# mv httpd.conf /tmp/
20.刪除當前目錄下所有文件
	[root@centos7 ~]# rm -rf *
21.創建目錄a,其下包含b和c兩目錄,且b和c目錄下都有一個目錄d
	[root@centos7 data]# mkdir -p a/{b,c}/d
22.顯示a目錄的子錄樹
	[root@centos7 data]# tree a
23.查看/usr/local目錄樹,但僅查看2級的目錄深度
	[root@centos7 data]# tree -L 2 /usr/local/
24.把/usr/sbin/apachectl文件在當前目錄下創建軟連接文件爲apachectl
	[root@centos7 data]# ln -s /usr/sbin/apachectl apachectl
	
25.顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數的文件或目錄
	[root@centos7 data]# ls -d /var/l*[0-9]*[[:lower:]]
26.顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的文件或目錄
	[root@centos7 ~]# ls -d /etc/[0-9]*[^[:digit:]]
27.顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字符的文件或目錄
	[root@centos7 ~]# ls -d /etc/[^[:alpha:]][a-zA-Z]*
28.顯示/etc/目錄下所有以rc開頭,並後面是0-6之間的數字,其它爲任意字符的文件或目錄
	[root@centos7 ~]# ls -d /etc/rc[0-6]*
29.顯示/etc目錄下,所有以.d結尾的文件或目錄
	[root@centos7 ~]# ls -d /etc/*.d 
30.顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的文件或目錄
	[root@centos7 ~]# ls -d /etc/[mnrp]*.conf 
31.只顯示/root下的隱藏文件和目錄
	[root@centos7 ~]# ls -d /root/.* 
32.只顯示/etc下的非隱藏目錄
	[root@centos7 ~]# ls -d /etc/[^.]*/
33.每天將/etc/目錄下所有文件,備份到/data獨立的子目錄下,並要求子目錄格式爲 backupYYYY-mm-dd,備份過程可見
	[root@centos7 data]# cp -av /etc/ /data/backup`date +%F`
34.創建/data/rootdir目錄,並複製/root下所有文件到該目錄內,要求保留原有權限
	[root@centos7 data]# mkdir /data/rootdir
	[root@centos7 data]# cp -a /root /data/rootdir
35.如何創建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b
	[root@centos7 data]# mkdir -p testdir/dir1/{x,y}/{a,b}
36.如何創建/testdir/dir2/x, /testdir/dir2/y, /testdir/dir2/x/a,/testdir/dir2/x/b
	[root@centos7 data]# mkdir -p testdir/dir2/{x/{a,b},y}
37.如何創建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
	[root@centos7 data]# mkdir -p testdir/dir{3,4,5/dir{6,7}}

三、Vim編輯器與正則表達式

1. 題目

1.顯示passwd文件中,不包含bash字串的行,並顯示行號
2.顯示passwd文件中,包含root字串的行的總行數
3.僅顯示passwd文件中的root字串及所在的行號
4.顯示passwd文件中,包含root字串的行和其下2行的內容
5.顯示passwd文件中,包含root字串的行和其上2行的內容
6.顯示passwd文件中,包含root字串的行和其上下2行的內容
7.掃描10.0.0.0/24子段,顯示在線的ip地址(用nmap -sP命令掃描)
8.顯示passwd文件中,包含root字串或包含nologin字串的行
9.匹配root整個單詞
10.過濾出現0次或多次的字母a
11.過濾出現0次或1次的字母a
12.過濾出現1次或多次的字母a
13.過濾出現2次字母a
14.過濾出出現少2次,最多4次的字母a
15.過濾出出現少3次的字母a
16.過濾出現最多2次的字母a
17.過濾nginx.conf文件中,不顯示空行和以空格開頭0次或多次後跟#號的行,其餘行都顯示
18.過濾ip命令輸出的所有ip地址
19.顯示/proc/meminfo文件中以大小s開頭的行
20.找出/etc/passwd用戶名同shell名的行
21.找出/etc/rc.d/init.d/functions文件中行首爲某單詞(包括下劃線)後面跟一個小括號的行
22.將此字符串:welcome to magedu linux 中的每個字符去重並排序,重複次數多的排到前面
23.利用擴展正則表達式分別表示0-910-99100-199200-249250-255
24.vim打開/root/test1.txt文件,並在其內部把/etc/issue內容複製到文件尾部
25.vim編輯/root/test1.txt文件並將其另存爲/root/test1.bak文件
26.用vim編輯/root/test1.txt文件時,在其內部執行shell命令查看ip地址

2. 答案

1.顯示passwd文件中,不包含bash字串的行,並顯示行號
	[root@centos7 testdir]# getent passwd|grep -v -n "bash"
2.顯示passwd文件中,包含root字串的行的總行數
	[root@centos7 testdir]# getent passwd|grep -c "root" 
3.僅顯示passwd文件中的root字串及所在的行號
	[root@centos7 testdir]# getent passwd|grep -o -n "root"
4.顯示passwd文件中,包含root字串的行和其下2行的內容
	[root@centos7 testdir]# getent passwd|grep -A 2 "root" 
5.顯示passwd文件中,包含root字串的行和其上2行的內容
	[root@centos7 testdir]# getent passwd|grep -B 2 "root" 
6.顯示passwd文件中,包含root字串的行和其上下2行的內容
	[root@centos7 testdir]# getent passwd|grep -C 2 "root" 
7.掃描10.0.0.0/24子段,顯示在線的ip地址(用nmap -sP命令掃描)
	[root@centos7 testdir]# nmap -sP 10.0.0.0/24 2>/dev/null|grep "for"|cut -d" " -f5
8.顯示passwd文件中,包含root字串或包含nologin字串的行
	[root@centos7 testdir]# getent passwd|grep "root\|nologin"
	[root@centos7 testdir]# getent passwd|grep -e root -e nologin
9.匹配root整個單詞
	[root@centos7 testdir]# echo -e "root\nrooter"|grep -w root
	[root@centos7 testdir]# echo -e "root\nrooter"|grep  "\broot\b"
	[root@centos7 testdir]# echo -e "root\nrooter"|grep  "\<root\>"
10.過濾出現0次或多次的字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a*"
11.過濾出現0次或1次的字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a\?"
12.過濾出現1次或多次的字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a\+"
13.過濾出現2次字母a
	[root@centos7 testdir]# echo abaaac|grep -o "a\{2\}"
14.過濾出出現少2次,最多4次的字母a
	[root@centos7 testdir]# echo abaaacaa|grep -o "a\{2,4\}"
15.過濾出出現少3次的字母a
	[root@centos7 testdir]# echo abaaacaaaa|grep -o "a\{3,\}"
16.過濾出現最多2次的字母a
	[root@centos7 testdir]# echo abaaacaaaa|grep -o "a\{,2\}"
17.過濾nginx.conf文件中,不顯示空行和以空格開頭0次或多次後跟#號的行,其餘行都顯示
	[root@centos6 tmp]# cat httpd.conf |grep -v "^$\|^[[:space:]]*#"
18.過濾ip命令輸出的所有ip地址
	[root@centos6 tmp]# ip addr|grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}"
19.顯示/proc/meminfo文件中以大小s開頭的行
	[root@centos6 tmp]# cat /proc/meminfo |grep -i ^s
20.找出/etc/passwd用戶名同shell名的行
	[root@centos6 tmp]# getent passwd|grep "^\(\<[[:alpha:]]\+\>\).*/\1$"
21.找出/etc/rc.d/init.d/functions文件中行首爲某單詞(包括下劃線)後面跟一個小括號的行
	[root@centos6 tmp]# grep -o "^\<\([[:alpha:]_]\)\+\>()" /etc/rc.d/init.d/functions
22.將此字符串:welcome to magedu linux 中的每個字符去重並排序,重複次數多的排到前面
	[root@centos6 tmp]# echo "welcome to magedu linux"|grep -o "."|sort |uniq -c|sort -nr
23.利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
	[root@centos6 tmp]#  echo {0..9}|egrep -o "[0-9]"
	[root@centos6 tmp]# echo {10..99}|egrep -o "[1-9]{1}[0-9]{1}" 
	[root@centos6 tmp]# echo {100..199}|egrep -o "1[0-9]{2}"
	[root@centos6 tmp]# echo {200..249}|egrep -o "2[0-4]{1}[0-9]{1}"
	[root@centos6 tmp]# echo {250..255}|egrep -o "25[0-5]{1}"
24.vim打開/root/test1.txt文件,並在其內部把/etc/issue內容複製到文件尾部
	vim test1.txt
	:!cat /etc/issue
25.vim編輯/root/test1.txt文件並將其另存爲/root/test1.bak文件
	vim test1.txt
	:w /root/test1.bak
26.用vim編輯/root/test1.txt文件時,在其內部執行shell命令查看ip地址
	vim test1.txt
	:! ip addr

四、標準IO和管道

1. 題目

1、將/etc/issue文件中的內容轉換爲大寫後保存至/tmp/issue.out文件中
2、將當前系統登錄用戶的信息轉換爲大寫後保存至/tmp/who.out文件中
3、一個linux用戶給root發郵件,要求郵件標題爲”help”,郵件正文如下:
 Hello, I am 用戶名,The system version is here,please help me to check
it ,thanks!
操作系統版本信息
4、將/root/下文件列表,顯示成一行,並文件名之間用空格隔開
5、計算1+2+3+...+99+100的總和
6、刪除Windows文本文件中的回車字符 ,即“\r”
7、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格
8、將PATH變量每個目錄顯示在獨立的一行
9、將指定文件中0-9分別替代成a-j
10、將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立一行,並無空行

2. 答案

1、將/etc/issue文件中的內容轉換爲大寫後保存至/tmp/issue.out文件中
	[root@centos7 data]# cat /etc/issue|tr 'a-z' 'A-Z' >> /tmp/issus.out
	[root@centos7 data]# cat /etc/issue|tr "[[:lower:]]" "[[:upper:]]" >> /tmp/issus.out
2、將當前系統登錄用戶的信息轉換爲大寫後保存至/tmp/who.out文件中
	[root@centos7 data]# who|tr 'a-z' 'A-Z' >> /tmp/who.out
	[root@centos7 data]# who|tr '[[:lower:]]' '[[:upper:]]' >> /tmp/who.out
3、一個linux用戶給root發郵件,要求郵件標題爲”help”,郵件正文如下:
 Hello, I am 用戶名,The system version is here,please help me to check
it ,thanks!
操作系統版本信息
	[zjl@centos6 root]$ mail -s help root << END
	> Hello,I am `whoami`,
	> The system version is here, please help me to check it, thanks!
	> `cat /etc/centos-release`
	> END
4、將/root/下文件列表,顯示成一行,並文件名之間用空格隔開
	[root@centos6 ~]# ls /root/ |tr '\n' ' '
5、計算1+2+3+...+99+100的總和
	[root@centos6 ~]# echo {1..100}|tr " " "+"|bc
6、刪除Windows文本文件中的回車字符 ,即“\r”
	[root@centos6 ~]# cat 1.txt|tr -d "\r" >>1.txt.new
7、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格
	[root@centos6 ~]# echo "xt.,l 1 jr#1.txt.newmn 2 c*/fe 3 uz 4" |tr -dc [[:digit:]][[:space:]]
	[root@centos6 ~]# echo "xt.,l 1 jr#1.txt.newmn 2 c*/fe 3 uz 4" |tr -d [[:alpha:]][[:punct:]] 
	
[:alnum:]:字母和數字 
[:alpha:]:字母 
[:cntrl:]:控制(非打印)字符
[:digit:]:數字 
[:graph:]:圖形字符 
[:lower:]:小寫字母 
[:print:]:可打印字符
[:punct:]:標點符號 
[:space:]:空白字符 
[:upper:]:大寫字母
[:xdigit:]:十六進制字符
8、將PATH變量每個目錄顯示在獨立的一行
	[root@centos6 ~]# echo $PATH|tr ':' '\n'
9、將指定文件中0-9分別替代成a-j
	[root@centos6 ~]# echo {0..9}|tr '{0-9}' '{a-j}'
10、將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立一行,並無空行
	[root@centos6 ~]# cat /etc/centos-release |tr -cs '[[:alpha:]]' "\n"

五、用戶組和權限管理

1. 題目

1.創建用戶gentoo,附加組爲bin和root,默認shell爲/bin/csh,註釋信息爲 "Gentoo Distribution"
2.創建下面的用戶、組和組成員關係 名字爲webs 的組 用戶nginx 使用webs 作爲
附屬組 用戶varnish,也使用webs 作爲附屬組 用戶mysql,不可交互登錄系統,
且不是webs 的成員, nginx, varnish, mysql密碼都是magedu
3.當用戶docker對/testdir 目錄無執行權限時,意味着無法做哪些操作?
4.當用戶mongodb對/testdir 目錄無讀權限時,意味着無法做哪些操作?
5.當用戶redis 對/testdir 目錄無寫權限時,該目錄下的只讀文件file1是否可修改和刪除?
6.當用戶zabbix對/testdir 目錄有寫和執行權限時,該目錄下的只讀文件file1是否可修改和刪除?
7.複製/etc/fstab⽂件到/var/tmp下,設置文件所有者爲tomcat讀寫權限,所屬組爲apps組有讀寫權限,其他人無權限
8.誤刪除了用戶git的家目錄,請重建並恢復該用戶家目錄及相應的權限屬性
9./testdir/dir裏創建的新文件自動屬於webs組,
組apps的成員如:##tomcat能對這些新文件有讀寫權限,
組dbs的成員如: mysql只能對新文件有讀權限,
其它用戶(不屬於webs,apps,dbs)不能訪問這個文件夾
10.備份/testdir/dir裏所有文件的ACL權限到/root/acl.txt中,清除/testdir/dir中所有ACL權限,最後還原ACL權限
11.在系統上添加一個用戶名稱爲apache的用戶,默認shell爲/sbin/nolgoin且不創建家目錄
12.設置/home/app/run/apache目錄及其子目錄和文件屬主屬組爲apache
13.修改權限爲屬主添加寫和執行權限、屬組沒有讀權限其它人有讀和執行權限
14.遞歸設置testdir目錄權限爲:屬組添加可讀、可寫、可執行權限,但其子目件不添加執行權限
15.設置文件1.sh權限爲只有屬主有讀寫權限
16.完全切換linux用戶身份
17.不完全切換linux用戶身份
18.設置二進制可執行程序文件chmod擁有suid權限
19.取消二進制可執行程序文件chmod擁有的suid權限
20.對testdir目錄設置sgid權限,作爲協作目錄
21.對testdir目錄設置sticky權限,實現只有文件的所有者或root才能刪除該目錄下的文件
22./testdir/dir下創建的新文件自動屬於g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員
如:tom只能對新文件有讀權限,其它用戶(不屬於g1,g2,g3)不能訪問這個文件夾。
23.備份/testdir/dir裏所有文件的ACL權限到/root/acl.txt中,
清除/testdir/dir中所有ACL權限,最後還原ACL權限getfacl對目錄操作時,不能使用絕對路徑;

2. 答案

1.創建用戶gentoo,附加組爲bin和root,默認shell爲/bin/csh,註釋信息爲 "Gentoo Distribution"

	useradd -G bin,root -c "Gentoo Distribution" -s /bin/csh gentoo
2.創建下面的用戶、組和組成員關係 名字爲webs 的組 用戶nginx 使用webs 作爲
附屬組 用戶varnish,也使用webs 作爲附屬組 用戶mysql,不可交互登錄系統,
且不是webs 的成員, nginx, varnish, mysql密碼都是magedu

	groupadd webs
	useradd -G webs nginx;echo magedu|passwd --stdin nginx
	useradd -G webs varnish;echo magedu|passwd --stdin varnish
	useradd -s /sbin/nolgoin mysql ;echo magedu|passwd --stdin mysql
3.當用戶docker對/testdir 目錄無執行權限時,意味着無法做哪些操作?

	1、無法進入目錄
 	2、可以用ls查看列表,但是無法查看文件屬性類型
	3、就算對目錄中的文件有rw權限,也無法查看和寫入>>也不行
4.當用戶mongodb對/testdir 目錄無讀權限時,意味着無法做哪些操作?

	 1、可以進入目錄,無法查看文件列表,可以查看ll file詳細信息
	 2、可以執行目錄內程序,cat file可以查看文件內容
	 3、如果對文件有w權限,還可以通過>>寫入文件
5.當用戶redis 對/testdir 目錄無寫權限時,該目錄下的只讀文件file1是否可修改和刪除?

	不能在該目錄下刪除和創建文件
6.當用戶zabbix對/testdir 目錄有寫和執行權限時,該目錄下的只讀文件file1是否可修改和刪除?

	不能改、可刪除。
7.複製/etc/fstab文件到/var/tmp下,設置文件所有者爲tomcat讀寫權限,所屬組爲apps組有讀寫權限,其他人無權限

	cp /etc/fstab /var/tmp/
	chown -R tomcat:apps /var/tmp/fstab
	chmod 660 /var/tmp/fstab
8.誤刪除了用戶git的家目錄,請重建並恢復該用戶家目錄及相應的權限屬性

	cp -a /etc/skel/ /home/git
	chown -R git.git /home/git
	chmod -R 700 /home/git
9.在/testdir/dir裏創建的新文件自動屬於webs組,
組apps的成員如:tomcat能對這些新文件有讀寫權限,
組dbs的成員如: mysql只能對新文件有讀權限,
其它用戶(不屬於webs,apps,dbs)不能訪問這個文件夾

	groupadd webs
	groupadd apps
	groupadd dbs
	useradd -G apps tomcat
	useradd -G dbs mysql
	chgrp -R webs /data/testdir/dir/
	chmod -R g+s /data/testdir/dir/
	setfacl -R -m g:apps:rw /data/testdir/dir/
	setfacl -R -m g:dbs:r /data/testdir/dir/
	setfacl -R -m o::0 /data/testdir/dir/  
	
	如果用戶存着可以通過下面方式改變附屬組
	groupmems -g dbs -a mysql
	groupmems -g apps -a tomcat
10.備份/testdir/dir裏所有文件的ACL權限到/root/acl.txt中,清除/testdir/dir中所有ACL權限,最後還原ACL權限

	getfacl -R /data/testdir/dir/ > /data/acl.txt
	setfacl -R -b /data/testdir/dir/
	getfacl /data/testdir/dir/
	setfacl -R --set-file=/data/acl.txt /data/testdir/dir/
11.在系統上添加一個用戶名稱爲apache的用戶,默認shell爲/sbin/nolgoin且不創建家目錄

	useradd -M -s /sbin/nolgoin apache
12.設置/home/app/run/apache目錄及其子目錄和文件屬主屬組爲apache

	mkdir -p /home/app/run/apache/{log,htdoc,conf}
	chown -R apache:apache /home/app/run/apache/
13.修改權限爲屬主添加寫和執行權限、屬組沒有讀權限其它人有讀和執行權限

	chmod u=wx,g=rx,o=rx 1.sh 
	ll
	--wxr-xr-x. 1 root root 154 Feb  5 04:57 1.sh
14.遞歸設置testdir目錄權限爲:屬組添加可讀、可寫、可執行權限,但其子目件不添加執行權限

	chmod -R g=rwX testdir/
15.設置文件1.sh權限爲只有屬主有讀寫權限

	chmod 600 1.sh 
16.完全切換linux用戶身份

	su - linux
17.不完全切換linux用戶身份

	su linux 
18.設置二進制可執行程序文件chmod擁有suid權限

	cp /usr/bin/chmod .
	chmod u+s chmod 
19.取消二進制可執行程序文件chmod擁有的suid權限

	chmod u-s chmod 
20.對testdir目錄設置sgid權限,作爲協作目錄

	chmod g+s testdir/
21.對testdir目錄設置sticky權限,實現只有文件的所有者或root才能刪除該目錄下的文件

	chmod o+t testdir/
22.在/testdir/dir下創建的新文件自動屬於g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員
如:tom只能對新文件有讀權限,其它用戶(不屬於g1,g2,g3)不能訪問這個文件夾。

	mkdir /data/testdir/dir
	groupadd g1
	groupadd g2
	groupadd g3
	useradd -G g2 alice
	useradd -G g3 tom
	chgrp g1 /data/testdir/dir/
	chmod 2770 /data/testdir/dir/
	setfacl -Rm d:g:g2:rw /data/testdir/dir/
	setfacl -Rm g:g2:rwx /data/testdir/dir/
	setfacl -Rm g:g3:rx /data/testdir/dir/
	
23.備份/testdir/dir裏所有文件的ACL權限到/root/acl.txt中,
清除/testdir/dir中所有ACL權限,最後還原ACL權限getfacl對目錄操作時,不能使用絕對路徑;
	
	tar -cvf dir.tar /testdir/dir
	getfacl -R testdir/dir > /root/acl.txt
	setfacl -b /testdir/dir
	tar -xvf dir.tar -C /var/tmp
	cp ac1.txt /var/tmp
	cd /root
	setfacl --restore ac1.txt

六、文本處理工具

1. 題目

1.監視查看1.sh文件尾部是否有內容增加
2.比較1.sh和2.sh兩文件的不同
3.截取/etc/passwd文件第一行,以冒號爲分隔符,抽取第7個字段
4.1.sh文件一行內容的空格分隔,按第3段從大到小排序
	[root@Magedu ~]# cat 1.sh
	this is 111 line
	this is 222 line
	this is 333 line
	this is 444 line
	this is 555 line
	this is 666 line
	this is 777 line
	this is 888 line
	this is 999 line
5.統計/etc/pass文件有多少行
6.統計2.sh文件中相同內容的行出現的次數
	[root@Magedu ~]# cat 2.sh
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line
7.使用egrep取出/etc/rc.d/init.d/functions路徑的目錄名
8.找出ifconfig “網卡名” 命令結果中本機的IPv4地址
9.查出分區空間使用率的最大百分比值
10.查出用戶UID最大值的用戶名、 UID及shell類型
11.查出/tmp的權限,以數字方式顯示
12.統計當前連接本機的每個遠程主機IP的連接數,並按從大到小排序
13.顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)
14.顯示/etc/passwd文件中不以/bin/bash結尾的行
15.顯示用戶rpc默認的shell程序
16.找出/etc/passwd中的兩位或三位數
17.顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且後面有非空白字符的行
18.找出“netstat -tan” 命令結果中以LISTEN後跟任意多個空白字符結尾的行
19.顯示CentOS7上所有系統用戶的用戶名和UID
20.添加用戶bash、 testbash、 basher、 sh、 nologin(其shell爲/sbin/nologin),
找出/etc/passwd用戶名和shell同名的行
21.利用df和grep,取出磁盤各分區利用率,並從大到小排序
22.顯示三個用戶root、 mage、 wang的UID和默認shell
23.找出/etc/rc.d/init.d/functions文件中行首爲某單詞(包括下劃線)後面跟一個小括號的行
24.使用egrep取出/etc/rc.d/init.d/functions文件路徑的錄名
25.統計last命令中以root登錄的每個主機IP地址登錄次數
26.顯示ifconfig命令結果中所有IPv4地址
27.複製/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符
28.複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命
爲/tmp/functions的每行開頭爲空白字符的行的行首添加一個#號
29.在vim中設置tab縮進爲4個字符
30.複製/etc/rc.d/init.d/functions文件至/tmp目錄,替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log
31.刪除/tmp/functions文件中所有以#開頭,且#後面至少有一個空白字符的行的的#號
32.找出“ldd /usr/bin/cat”命令的結果中的文件路徑

2. 答案

1.監視查看1.sh文件尾部是否有內容增加

	tail -f 1.sh
2.比較1.sh和2.sh兩文件的不同

	diff -u 1.sh  2.sh
3.截取/etc/passwd文件第一行,以冒號爲分隔符,抽取第7個字段

	cat /etc/passwd|head -n1|cut -d: -f7
4.以1.sh文件一行內容的空格分隔,按第3段從大到小排序

	cat 1.sh
	this is 111 line
	this is 222 line
	this is 333 line
	this is 444 line
	this is 555 line
	this is 666 line
	this is 777 line
	this is 888 line
	this is 999 line

	cat 1.sh |sort -nr -t" " -k3
	cat 1.sh |sort -k3 -r
5.統計/etc/passwd文件有多少行

	wc -l /etc/passwd
6.統計2.sh文件中相同內容的行出現的次數

	cat 2.sh
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line
	this is 111 line

	uniq -c 2.sh
7.使用egrep取出/etc/rc.d/init.d/functions路徑的目錄名

	echo /etc/rc.d/init.d/functions |egrep -o "^[/].*/"
8.找出ifconfig “網卡名” 命令結果中本機的IPv4地址

	ifconfig eth1|grep "cast"|cut -d: -f2|cut -d" " -f1
	ifconfig eth1|sed -n 2p|tr -s " " ":"|cut -d: -f4
9.查出分區空間使用率的最大百分比值

	df|grep ^/dev|tr -s " " "%"|cut -d% -f5|sort -nr|head -n1
10.查出用戶UID最大值的用戶名、 UID及shell類型

	getent passwd|cut -d: -f1,3,7|sort -nr -t":" -k2|head -n1
11.查出/tmp的權限,以數字方式顯示

	stat /tmp|sed -n 4p|cut -d"(" -f2|cut -d"/" -f1
	stat /tmp/|head -n4|tail -1|cut -d"(" -f2|grep -o "^[[:digit:]]*"
12.統計當前連接本機的每個遠程主機IP的連接數,並按從大到小排序

	netstat -tun|sed -n 3p|tr -s " " ":"|cut -d: -f6|sort -nr|uniq -c
13.顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)

	cat /proc/meminfo|grep ^[S\|s]
	cat /proc/meminfo|grep -i ^S
14.顯示/etc/passwd文件中不以/bin/bash結尾的行

	cat /etc/passwd|grep -v "/bin/bash$"
15.顯示用戶rpc默認的shell程序

	cat /etc/passwd|grep rpc|cut -d: -f1,7
16.找出/etc/passwd中的兩位或三位數

	cat /etc/passwd|grep -oE "[0-9]{2,3}"|cat -n
17.顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且後面有非空白字符的行

	cat /etc/grub2.cfg|grep  "^[[:blank:]]\+[^[:blank:]].*$"|cat -n
18.找出“netstat -tan” 命令結果中以LISTEN後跟任意多個空白字符結尾的行

	netstat -tan|grep "LISTEN.*\+[[:blank:]]$"
	netstat -tan|grep ".*LISTEN[[:blank:]]\+$"
19.顯示CentOS7上所有系統用戶的用戶名和UID

	cat /etc/passwd|cut -d: -f1,3|grep -E "[0-9]{1,3}"
	cut -d: -f1,3 /etc/passwd|egrep "\b[0-9]{1,3}\b"
20.添加用戶bash、 testbash、 basher、 sh、 nologin(其shell爲/sbin/nologin),
找出/etc/passwd用戶名和shell同名的行

	useradd bash
	useradd testbash
	useradd basher
	useradd sh
	useradd -s /sbin/nologin nologin
	cat /etc/passwd|grep -E "^(.*)(:.*)\b\1$"
21.利用df和grep,取出磁盤各分區利用率,並從大到小排序

	df|grep ^/dev/sd|grep -Eo "[0-9]{1,3}%"|sort -nr -t% -k1
22.顯示三個用戶root、 mage、 wang的UID和默認shell

	cat /etc/passwd|grep "^root\b\|^mage\b\|^wang\b"|cut -d: -f1,3,7
	cat /etc/passwd|grep -E "^(root|mage|wang)\b"|cut -d: -f1,3,7
23.找出/etc/rc.d/init.d/functions文件中行首爲某單詞(包括下劃線)後面跟一個小括號的行

	cat /etc/rc.d/init.d/functions|grep -E "^[[:alpha:]_]+\(\)"
24.使用egrep取出/etc/rc.d/init.d/functions文件路徑的錄名

	echo "/etc/rc.d/init.d/functions"|egrep  -o "[^/]+/?$"
25.統計last命令中以root登錄的每個主機IP地址登錄次數

	last|grep root|tr -s " " " "|cut -d" " -f 3|grep  "[^[:alpha:]]"|sort|uniq -c
	last|grep ^root|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"|sort |uniq -c
26.顯示ifconfig命令結果中所有IPv4地址

	ifconfig |egrep -o "inet addr:([0-9]{1,3}\.){3}[0-9]{1,3}"|egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
	ifconfig |grep "inet addr"|tr -s " " ":"|cut -d: -f4
27.複製/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符

	cp /etc/profile /tmp/
	vim profile
	:%s/^[[:space:]]\+//g
28.複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命
爲/tmp/functions的每行開頭爲空白字符的行的行首添加一個#號

	cp /etc/profile /tmp/
	vim profile
	:%s/^[[:space:]]/#/g
29.在vim中設置tab縮進爲4個字符

	vim /etc/vimrc
	set tabstop=4
30.複製/etc/rc.d/init.d/functions文件至/tmp目錄,替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log

	cp /etc/rc.d/init.d/functions /tmp/
	vim functions 
	:%s@\/etc\/sysconfig\/init@\/var\/log@g
31.刪除/tmp/functions文件中所有以#開頭,且#後面至少有一個空白字符的行的的#號

	vim functions 
	:%s@^#\+[[:space:]]\+@@g 
32.找出“ldd /usr/bin/cat”命令的結果中的文件路徑

	ldd /usr/bin/cat|grep -o "/[^[:space:]]*"

七、shell腳本編程基礎

1. 題目

1.編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,
CPU型號,內存大小,硬盤大小
2.編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中
3.編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值
4.編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址 和連接數,並按連接數從大到小排序
5.編寫腳本sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和
6.編寫腳本sumspace.sh,傳遞兩個文件路徑作爲參數給腳本,計算這兩個文件中所有空白行之和##
7.編寫腳本sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件
8.編寫腳本argsnum.sh,接受一個文件路徑作爲參數;如果參數個數小於1,則提示用戶“至少應該給一個參數”,並立
即退出;如果參數個數不小於1,則顯示第一個參數所指向的文件中的空白行數
9.編寫腳本hostping.sh,接受一個主機的IPv4地址做爲參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址
可訪問” ;如果不可ping通,則提示用戶“該IP地址不可訪問”
10.編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率,如果超過80%,就發廣播警告空間將滿
11.編寫腳本per.sh,判斷當前用戶對指定參數文件,是否不可讀並且不可寫
12.、編寫腳本excute.sh ,判斷參數文件是否爲sh後綴的普通文件,如果是,添加所有人可執行權限,否則提示用戶非腳本
文件
13.編寫腳本nologin.sh和login.sh,實現禁止和允許普通用戶登錄系統
14.編寫腳本createuser.sh,實現如下功能:使用一個用戶名做爲參數,如果指定參數的用戶存在,就顯示其存在,否則
添加之;顯示添加的用戶的id號等信息
15.編寫腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,並判斷用戶輸入的是yes還是no,或是其它信息
16.編寫腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,顯示其文件類型(普通,目錄,鏈接,其它文件類型)
17.編寫腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否爲正整數
18.讓所有用戶的PATH環境變量的值多出一個路徑,例如:/usr/local/apache/bin
19.用戶root登錄時,將命令指示符變成紅色,並自動啓用如下別名:
rm=‘rm –i’
cdnet=‘cd /etc/sysconfig/network-scripts/’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33  (如果系統是CentOS7)
20.任意用戶登錄系統時,顯示紅色字體的警示提醒信息“Hi,dangerous!”
21.編寫生成腳本基本格式的腳本,包括作者,聯繫方式,版本,時間,描述等
22.編寫用戶的環境初始化腳本reset.sh,包括別名,登錄提示符, vim的設置,環境變量等

2. 答案

1.編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,
IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小

vim systeminfo.sh
	
	BEGINCOLOR="\033[1;35m"
	ENDCOLOR="\033[0m"
	
	echo -e "My hostname is :$BEGINCOLOR $HOSTNAME $ENDCOLOR"
	echo -e "IPv4 is :$BEGINCOLOR `ip addr|grep brd|sed -rn "s@^[^[:digit:]].* ([[:digit:].]+/[[:d
	igit:]]+).*@\1@p"|head -n1` $ENDCOLOR"
	echo -e "Os version is :$BEGINCOLOR `cat /etc/system-release` $ENDCOLOR"
	echo -e "kernal version is :$BEGINCOLOR `uname -r` $ENDCOLOR"
	echo -e "CPU type is :$BEGINCOLOR `cat /proc/cpuinfo |grep "model name"|sed -rn "s@.*:(.*)@\1@
	p"|head -n1` $ENDCOLOR"
	echo -e "Memtotol is :$BEGINCOLOR `free|grep Mem|tr -s " " :|cut -d: -f2`k $ENDCOLOR"
	echo -e "Disk space is :$BEGINCOLOR `lsblk |grep -w sda |sed -rn "s@.* ([[:digit:]]+G).*@\1@p"
	` $ENDCOLOR"  

2.編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中
vim backup.sh

	SOURCE="/etc/"
	DEST=/root/etc_`date +%F`                                                                     
	BEGINCOLOR="\e[1;32m"
	ENDCOLOR="\e[0m"
	
	echo -e ""$BEGINCOLOR"Starting backup...$ENDCOLOR"
	sleep 3
	cp -av $SOURCE $DEST
	echo -e ""$BEGINCOLOR"Backup is finished.$ENDCOLOR"
3.編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值

vim disk.sh

	echo -e "This system disk max is \e[34m`df |grep "^/dev/sd"|tr -s " " :|cut -d: -f5|sort -rn|head -n1`\e[0m"
4.編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址
和連接數,並按連接數從大到小排序

vim links.sh

	echo "links ipv4 is:"
	echo -e  "\e[35;1m`netstat -tan|tr -s " " ":"|cut -d: -f6|grep -o "^[[:digit:].]\+"|uniq -c|sort -rn`\e[0m"

5.編寫腳本sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和

vim sumid.sh

	id10=`cat -n /etc/passwd|grep -w 20|cut -d: -f3`
	id20=`cat -n /etc/passwd|grep -w 10|cut -d: -f3`
	sum=$((id10+id20))                                                                             
	echo $sum
6.編寫腳本sumspace.sh,傳遞兩個文件路徑作爲參數給腳本,計算這兩個文件中所有空白行之和##

vim sumspace.sh
第一種:
	read -p "please input first file: " FILE1
	read -p "please input second file: " FILE2
	NUM1=`cat $FILE1|grep "^$"|uniq -c`
	NUM2=`cat $FILE2|grep "^$"|uniq -c`
	SUM=$[NUM1+NUM2]
	echo "The blank line sum is: $SUM"
驗證:
	bash sumspace.sh 

第二種:
	NUM1=`cat $1|grep "^$"|uniq -c`
	NUM2=`cat $2|grep "^$"|uniq -c`                                                                
	SUM=$[NUM1+NUM2]
	echo "The blank line sum is: $SUM"
驗證:
	bash sumspace.sh test1.txt test2.txt
7.編寫腳本sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件

vim sumfile.sh

	numetc=`ls -A /etc|wc -l`
	numvar=`ls -A /var|wc -l`
	numusr=`ls -A /usr|wc -l`
	let sum=numetc+numvar+numusr
	echo $sum
8.編寫腳本argsnum.sh,接受一個文件路徑作爲參數;如果參數個數小於1,
則提示用戶“至少應該給一個參數”,並立即退出;如果參數個數不小於1,
則顯示第一個參數所指向的文件中的空白行數

vim argsnum.sh

	if [ ! -f $1 ];then                                                                            
        echo "please input a file as args!"
        exit;
	else
        NUM=`cat $1|grep "^$"|wc -l`
        echo "this file sum space is: $NUM"
	fi
9.編寫腳本hostping.sh,接受一個主機的IPv4地址做爲參數,測試是否可連通。
如果能ping通,則提示用戶“該IP地址可訪問” ;如果不可ping通,
則提示用戶“該IP地址不可訪問”

vim hostping.sh
	read -p "please input a ip: " IP
	ping -c1 -w1 $IP &>/dev/null && echo "This ip is up" || echo "This ip is down" 
10.編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率,
如果超過80%,就發廣播警告空間將滿

vim checkdisk.sh 
	WARING=5
	DISK=`df |grep "/dev/sd"|tr -s " " "%"|cut -d% -f5|sort -rn |head -n1`
	INODE=`df -i |grep "/dev/sd"|tr -s " " "%"|cut -d% -f5|sort -rn |head -n1`
	if [[ $DISK -gt $WARING  ]];then                                                               
	        wall this disk over $WARING
	else [[ $INODE -gt $WARING ]]
	        wall this inode over $WARING
	fi
11.編寫腳本per.sh,判斷當前用戶對指定參數文件,是否不可讀並且不可寫

vim per.sh
	read -p "please input a file: " FILE
	[[ -r $FILE ||  -w $FILE ]] && echo "this file read and write" ||echo echo "this file no read and no write"
12.、編寫腳本excute.sh ,判斷參數文件是否爲sh後綴的普通文件,
如果是,添加所有人可執行權限,否則提示用戶非腳本文件

vim excute.sh
	[[ $1 =~ .sh$ ]] && [ -f $1 ] && chmod a+x $1;echo "$1 is .sh" || echo "$1 is not .sh"
13.編寫腳本nologin.sh和login.sh,實現禁止和允許普通用戶登錄系統
	

14.編寫腳本createuser.sh,實現如下功能:使用一個用戶名做爲參數,
如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息

vim createuser.sh
	if ( `id $1 &>/dev/null` );then
	        echo `id $1`
	        exit
	else
	        useradd $1
	        echo "$1 is creat ok `id $1`"                                                                                   
	fi
15.編寫腳本/root/bin/yesorno.sh,提示用戶輸入yes或no,
並判斷用戶輸入的是yes還是no,或是其它信息

vim yesorno.sh
	read -p "Do you agree ?(yes or no): " ANS
	[[ "$ANS" =~ ^[Yy]([Ee][Ss])?$ ]] && { echo ok;exit; }
	[[ "$ANS" =~ ^[Nn][Oo]?$ ]] && { echo Not ok;exit; }
	echo "Your input is false."
16.編寫腳本/root/bin/filetype.sh,判斷用戶輸入文件路徑,
顯示其文件類型(普通,目錄,鏈接,其它文件類型)

vim filetype.sh
第一種:
	read -p "please input a args: " FILE
	a=`ls -l $FILE |grep -o "^."`
	case $a in
	-)
	        echo common file 
	        ;;
	d)
	        echo dir file
	        ;;
	l)
	        echo link file
	        ;;
	*)
	        echo other file
	        ;;
	esac
第二種:
	read -p "please input a args: " FILE                                                                                    
	if [ -z $FILE ];then
	        echo "there must be a filename argument"
	        exit 1
	elif [ ! -e $FILE ];then
	        echo no such file
	        exit 1
	elif [ -d $FILE ];then
	        echo "$FILE is dir file"
	        exit 0
	elif [ -L $FILE ];then
	        echo "$FILE is link file"
	        exit 0
	elif [ -f $FILE ];then
	        echo " $FILE is normal file"
	        exit 0
	else
	        echo "$FILE is other file"
	        exit 0
	fi
17.編寫腳本/root/bin/checkint.sh,判斷用戶輸入的參數是否爲正整數

vim checkint.sh 
	read -p "please input a num: " NUM
	[[ $NUM =~ ^[0-9]+$ ]] && echo "$NUM is int" ||echo "please input a number";exit;
18.讓所有用戶的PATH環境變量的值多出一個路徑,例如:/usr/local/apache/bin

vim /etc/profile
	export PATH=/usr/local/apache/bin:$PATH
source /etc/profile
19.用戶root登錄時,將命令指示符變成紅色,並自動啓用如下別名:
rm=‘rm –i’
cdnet=‘cd /etc/sysconfig/network-scripts/’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eth0’
editnet=‘vim /etc/sysconfig/network-scripts/ifcfg-eno16777736 或 ifcfg-ens33 ’ (如果系統是CentOS7)

vim ~/.bashrc
	alias rm='rm –i'
	alias cdnet='cd /etc/sysconfig/network-scripts/'
	alias editnet1='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
	alias editnet2='vim /etc/sysconfig/network-scripts/ifcfg-ens33'
	export PS1='\[\e[1;31m\][\u@\h \W]\$\[\e[0m\]' 
source ~.bashrc 
20.任意用戶登錄系統時,顯示紅色字體的警示提醒信息“Hi,dangerous!”

vim /etc/issue
	^[[031m " Hi,dangerous!" ^[[0m"
21.編寫生成腳本基本格式的腳本,包括作者,聯繫方式,版本,時間,描述等

vim .vimrc
	set ignorecase
	set cursorline
	set autoindent
	autocmd BufNewFile *.sh exec ":call SetTitle()"
	func SetTitle()
	if expand("%:e") == 'sh'
	call setline(1,"#!/bin/bash")
	call setline(2,"#")
	call
	setline(3,"#********************************************************************")
	call setline(4,"#Author: w")
	call setline(5,"#QQ: 1****") 
	call setline(6,"#Date: ".strftime("%Y-%m-%d"))
	call setline(7,"#FileName: ".expand("%"))
	call setline(8,"#URL: http://www.magedu.com")
	call setline(9,"#Description: The test script")
	call setline(10,"#Copyright (C): ".strftime("%Y")." All rights reserved")
	call
	setline(11,"#********************************************************************")
	call setline(12,"")
	endif
	endfunc
	autocmd BufNewFile * normal G
22.編寫用戶的環境初始化腳本reset.sh,包括別名,登錄提示符, vim的設置,環境變量等

vim reset.sh
	cat > /etc/profile.d/env.sh << EOF
	alias cdnet="cd /etc/sysconfig/network-scripts"
	alias editnet="vim /etc/sysconfig/network-scripts/ifcfg-ens33"
	export PS1="[\[\e[32m\]\u\[\e[36m\]@\h_v7\[\e[31m\]\[\e[0m\] \W]\\$ "
	export PATH=/app/bin:$PATH
	EOF
	
	cat > ~/.vimrc << EOF
	set  nu
	EOF

八、文件查找和壓縮

1. 題目

1.查找/var目錄下屬主爲root,且屬組爲mail的所有文件。
2.查找/var目錄下不屬於root、 lp、 gdm的所有文件。
3.查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是 postfix的文件
4.查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
5.查找/etc目錄下小於1M且類型爲普通文件的所有文件
6.查找/etc目錄下所有用戶都沒有寫權限的文件。
7.查找/etc目錄下至少有一類用戶沒有執行權限的文件
8.查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

2. 答案

1.查找/var目錄下屬主爲root,且屬組爲mail的所有文件。
2.查找/var目錄下不屬於root、 lp、 gdm的所有文件。
3.查找/var目錄下最近一週內其內容修改過,同時屬主不爲root,也不是 postfix的文件
4.查找當前系統上沒有屬主或屬組,且最近一個周內曾被訪問過的文件
5.查找/etc目錄下小於1M且類型爲普通文件的所有文件
6.查找/etc目錄下所有用戶都沒有寫權限的文件。
7.查找/etc目錄下至少有一類用戶沒有執行權限的文件
8.查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶有寫權限的文件

九、Sed文本處理

1. 題目

1.刪除centos7系統/etc/grub2.cfg文件中所有以空白開頭的行行首的空白字符。
2.刪除/etc/fstab文件中所有以#開頭,後面至少跟一個空白字符的行的行首的# 和空白字符。
3.在centos6系統/root/install.log每一行行首增加#號
4./etc/fstab文件中不以#開頭的行的行首增加#號。
5.處理/etc/fstab路徑,使用sed命令取出其目錄名和基名。
6.利用sed 取出ifconfig命令中本機的IPv4地址。
7.統計centos安裝光盤中Package⽬錄下的所有rpm文件的以.分隔倒數第二個字段的重複次數
8.統計/etc/init.d/functions文件中每個單詞的出現次數,並排序(用grep和 sed兩種方法分別實現)。
9.將文本w嗯件的n和n+1行合併爲一行, n爲奇數行

2. 答案

1.刪除centos7系統/etc/grub2.cfg文件中所有以空白開頭的行行首的空白字符。
2.刪除/etc/fstab文件中所有以#開頭,後面至少跟一個空白字符的行的行首的# 和空白字符。
3.在centos6系統/root/install.log每一行行首增加#號
4.在/etc/fstab文件中不以#開頭的行的行首增加#號。
5.處理/etc/fstab路徑,使用sed命令取出其目錄名和基名。
6.利用sed 取出ifconfig命令中本機的IPv4地址。
7.統計centos安裝光盤中Package⽬錄下的所有rpm文件的以.分隔倒數第二個字段的重複次數
8.統計/etc/init.d/functions文件中每個單詞的出現次數,並排序(用grep和 sed兩種方法分別實現)。
9.將文本w嗯件的n和n+1行合併爲一行, n爲奇數行

十、軟件包管理

1. 題目

1.查詢命令java來自於哪個rpm包
2.yum的配置和使用,包括yum倉庫的創建
3.編寫系統初始化腳本 reset.sh,包括別名,提示符顏色,yum倉庫配置問件,安裝tree,ftp,lftp,telnet等包
4.在CentOS 7上編譯安裝 apache 2.4.25 源碼包,並啓動此服務.

2. 答案

1.查詢命令java來自於哪個rpm包
2.yum的配置和使用,包括yum倉庫的創建
3.編寫系統初始化腳本 reset.sh,包括別名,提示符顏色,yum倉庫配置問件,安裝tree,ftp,lftp,telnet等包
4.在CentOS 7上編譯安裝 apache 2.4.25 源碼包,並啓動此服務.

十一、磁盤存儲和文件系統

1. 題目

1.創建一個2G文件系統,塊大小爲2048byte,預留1%可用空間,文件系統
ext4,卷標爲TEST,要求此分區開機後自動掛載至/test目錄,且默認有acl掛載
選項
2.寫一個腳本,完成如下功能:(1) 列出當前系統識別到的所有磁盤設備(2) 如
磁盤數量爲1,則顯示其空間使用信息。否則,則顯示最後一個磁盤上的空間使用
信息
3.將CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-
x86_64-bin-DVD2.iso兩個文件,合併成一個CentOS-6.10-x86_64-
Everything.iso文件,並將其配置爲yum源
4.創建一個可用空間爲1G的RAID1設備,文件系統爲ext4,有一個空閒盤,開
機可自動掛載至/backup目錄
5.創建由三塊硬盤組成的可用空間爲2G的RAID5設備,要求其chunk大小爲
256k,文件系統爲ext4,開機可自動掛載至/mydata
6.創建一個至少有兩個PV組成的大小爲20G的名爲testvg的VG;要求PE大小爲
16MB, 而後在卷組中創建大小爲5G的邏輯卷testlv;掛載至/users目錄
7.新建用戶archlinux,要求其家目錄爲/users/archlinux,後su切換至
archlinux用戶,複製/etc/pam.d目錄至自己的家目錄
8.擴展testlv至7G,要求archlinux用戶的文件不能丟失
9.收縮testlv至3G,要求archlinux用戶的文件不能丟失
10.對testlv創建快照,並嘗試基於快照備份數據,驗證快照的功能

2. 答案

1.創建一個2G文件系統,塊大小爲2048byte,預留1%可用空間,文件系統
ext4,卷標爲TEST,要求此分區開機後自動掛載至/test目錄,且默認有acl掛載
選項
2.寫一個腳本,完成如下功能:(1) 列出當前系統識別到的所有磁盤設備(2) 如
磁盤數量爲1,則顯示其空間使用信息。否則,則顯示最後一個磁盤上的空間使用
信息
3.將CentOS6的CentOS-6.10-x86_64-bin-DVD1.iso和CentOS-6.10-
x86_64-bin-DVD2.iso兩個文件,合併成一個CentOS-6.10-x86_64-
Everything.iso文件,並將其配置爲yum源
4.創建一個可用空間爲1G的RAID1設備,文件系統爲ext4,有一個空閒盤,開
機可自動掛載至/backup目錄
5.創建由三塊硬盤組成的可用空間爲2G的RAID5設備,要求其chunk大小爲
256k,文件系統爲ext4,開機可自動掛載至/mydata
6.創建一個至少有兩個PV組成的大小爲20G的名爲testvg的VG;要求PE大小爲
16MB, 而後在卷組中創建大小爲5G的邏輯卷testlv;掛載至/users目錄
7.新建用戶archlinux,要求其家目錄爲/users/archlinux,後su切換至
archlinux用戶,複製/etc/pam.d目錄至自己的家目錄
8.擴展testlv至7G,要求archlinux用戶的文件不能丟失在這裏插入代碼片
9.收縮testlv至3G,要求archlinux用戶的文件不能丟失
10.對testlv創建快照,並嘗試基於快照備份數據,驗證快照的功能

十二、linux網絡管理

1. 題目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十三、進程與計劃任務

1. 題目

1.每週的工作日1:30,將/etc備份至/backup目錄中,保存的文件名稱格式爲
etcbak-yyyy-mm-dd-HH.tar.gz,其中日期是前一天的時間。
2.每兩小時取出當前系統/proc/meminfo文件中以SM開頭的信息追加至
/tmp/meminfo.txt文件中。
3.工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率大
於80%,就執行wall警報。

2. 答案

1.每週的工作日1:30,將/etc備份至/backup目錄中,保存的文件名稱格式爲
etcbak-yyyy-mm-dd-HH.tar.gz,其中日期是前一天的時間。
2.每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至
/tmp/meminfo.txt文件中。
3.工作日時間,每10分鐘執行一次磁盤空間檢查,一旦發現任何分區利用率大
於80%,就執行wall警報。

十四、shell腳本編程進階

1. 題目

for實現 :
1.判斷/var/目錄下所有文件的類型
2.添加10個用戶user1-user10,密碼爲8位隨機字符
3./etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別
讀取每個文件, 以K開頭的輸出爲文件加stop,以S開頭的輸出爲文件名
加start,如K34filename stop S66filename start
4.編寫腳本,提示輸入正整數n的值,計算1+2++n的總和
5.計算100以內所有能被3整除的整數之和
6.編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段
中主機在線狀態
7.打印九九乘法表
8./testdir目錄下創建10個html文件,文件名格式爲數字N(從110)加隨機8個字母,如: 1AbCdeFgH.html
9.打印等腰三角形
10.猴子第一天摘下若干個桃自,當即吃了一半,還不癮,又多吃了一
個第二天早上又將剩下的桃子喫掉一半,又多吃了一個。以後每天早上都
吃了前一天剩下的一半零一個。到第10天早上想再喫時,只剩下一個桃
子了。求第一天共摘了多少?

while實現 :
1.編寫腳本,求100以內所有正奇數之和
2.編寫腳本, 提示請輸入網絡地址,如192.168.0.0,判斷輸入的網
段中主機 在線狀態,並統計在線和離線主機各多少
3.編寫腳本,打印九九乘法表
4. 編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數
字,並顯示其中的最小值和最值.
5.編寫腳本,實現打印國際象棋棋盤
6.後續六個字符串: efbaf275cd、 4be9c40b8b、 44b2395c46、 f8c8873ce0、
b902c16c8b、ad865d2f63是通過對隨機數變量RANDOM隨機 執行命令: echo 
$RANDOM|md5sum|cut –c1-10 後的結果,請破解這些 字符串對應的RANDOM7.隨機生成10以內的數字,實現猜字遊戲,提示較大或小,相等則退出
8.用文件名做爲參數,統計所有參數文件的總行數
9.用二個以上的數字爲參數,顯示其中的最大值和最小值
10.每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶
hacker登錄, 則將登錄時間和主機記錄於日誌/var/log/login.log中,並退出腳本

函數 :
1.編寫函數,實現OS的版本判斷
2.編寫函數,實現取出當前系統eth0的IP地址
3.編寫函數,實現打印綠色OK和紅色FAILED
4.編寫函數,實現判斷是否無位置參數,如無參數,提示錯誤
5.編寫服務腳本/root/bin/testsrv.sh,完成如下要求
	(1) 腳本可接受參數: start, stop, restart, status
	(2) 如果參數非此四者之一,提示使用格式後報錯退出
	(3) 如是start:則創建/var/lock/subsys/SCRIPT_NAME, 並顯示“啓動成功” 考慮:
	如果事先已經啓動過一次,該如何處理?
	(4) 如是stop:則刪除/var/lock/subsys/SCRIPT_NAME, 並顯示“停止完成” 考慮:
	如果事先已然停止過了,該如何處理?
	(5) 如是restart,則先stop, 再start 考慮:如果本來沒有start,如何處理?
	(6) 如是status, 則如果/var/lock/subsys/SCRIPT_NAME文件存在,
	則顯示“SCRIPT_NAME is running...” ,如果/var/lock/subsys/SCRIPT_NAME文件不存在,
	則顯示“SCRIPT_NAME is stopped...
	(7)在所有模式下禁止啓動該服務,可用chkconfig 和 service命令管理 
	說明: SCRIPT_NAME爲當前腳本名 
6.編寫腳本/root/bin/copycmd.sh
	(1) 提示用戶輸入一個可執行命令名稱
	(2) 獲取此命令所依賴到的所有庫文件列表
	(3) 複製命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下
	 如: /bin/bash ==> /mnt/sysroot/bin/bash /usr/bin/passwd ==>
	/mnt/sysroot/usr/bin/passwd
	(4) 複製此命令依賴到的所有庫文件至目標目錄下的對應路徑下:
	如:/lib64/ldlinux-x86-
	64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
	(5)每次複製完成一個命令後,不要退出,而是提示用戶鍵入新的要複製的命令,
	並重復完成上述功能;直到用戶輸入quit退出 
7.編寫函數實現兩個數字做爲參數,返回最大值
8.斐波那契數列又稱黃金分割數列
	因數學家列昂納多·斐波那契以兔子繁殖爲例 子而引入,故又稱爲“兔子數列”,
	指的是這樣一個數列: 0112358132134、 ……,
	斐波納契數列以如下被以遞歸的方法定義: F0=0F1=1F(n) =F(n-1)+F(n-2)(n≥2) 利用函數,求n階斐波那契數列
9.漢諾塔(又稱河內塔)問題
	是源於印度一個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,
	在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。 
	大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。
	並且 規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤,
	利用 函數,實現N片盤的漢諾塔的移動步驟 
10.輸入若干個數值存入數組中,採用冒泡算法進行升序或降序排序
11.將下圖所示,實現轉置矩陣matrix.sh
 1 2 3		 2 5 8
 1 4 7	===> 7 8 9 
 4 5 6 		 3 6 9
12.打印楊輝三角形

2. 答案

for實現 :

1.判斷/var/目錄下所有文件的類型
2.添加10個用戶user1-user10,密碼爲8位隨機字符
3./etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別
讀取每個文件, 以K開頭的輸出爲文件加stop,以S開頭的輸出爲文件名
加start,如K34filename stop S66filename start
4.編寫腳本,提示輸入正整數n的值,計算1+2+…+n的總和
5.計算100以內所有能被3整除的整數之和
6.編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段
中主機在線狀態
7.打印九九乘法表
8.在/testdir目錄下創建10個html文件,文件名格式爲數字N(從1到
10)加隨機8個字母,如: 1AbCdeFgH.html
9.打印等腰三角形
10.猴子第一天摘下若干個桃自,當即吃了一半,還不癮,又多吃了一
個第二天早上又將剩下的桃子喫掉一半,又多吃了一個。以後每天早上都
吃了前一天剩下的一半零一個。到第10天早上想再喫時,只剩下一個桃
子了。求第一天共摘了多少?

while實現 :

1.編寫腳本,求100以內所有正奇數之和
2.編寫腳本, 提示請輸入網絡地址,如192.168.0.0,判斷輸入的網
段中主機 在線狀態,並統計在線和離線主機各多少
3.編寫腳本,打印九九乘法表
4. 編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數
字,並顯示其中的最小值和最值.
5.編寫腳本,實現打印國際象棋棋盤
6.後續六個字符串: efbaf275cd、 4be9c40b8b、 44b2395c46、 f8c8873ce0、
b902c16c8b、ad865d2f63是通過對隨機數變量RANDOM隨機 執行命令: echo 
$RANDOM|md5sum|cut –c1-10 後的結果,請破解這些 字符串對應的RANDOM值
7.隨機生成10以內的數字,實現猜字遊戲,提示較大或小,相等則退出
8.用文件名做爲參數,統計所有參數文件的總行數
9.用二個以上的數字爲參數,顯示其中的最大值和最小值
10.每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶
hacker登錄, 則將登錄時間和主機記錄於日誌/var/log/login.log中,並退出腳本

函數 :

1.編寫函數,實現OS的版本判斷
2.編寫函數,實現取出當前系統eth0的IP地址
3.編寫函數,實現打印綠色OK和紅色FAILED
4.編寫函數,實現判斷是否無位置參數,如無參數,提示錯誤
5.編寫服務腳本/root/bin/testsrv.sh,完成如下要求
	(1) 腳本可接受參數: start, stop, restart, status
	(2) 如果參數非此四者之一,提示使用格式後報錯退出
	(3) 如是start:則創建/var/lock/subsys/SCRIPT_NAME, 並顯示“啓動成功” 考慮:
	如果事先已經啓動過一次,該如何處理?
	(4) 如是stop:則刪除/var/lock/subsys/SCRIPT_NAME, 並顯示“停止完成” 考慮:
	如果事先已然停止過了,該如何處理?
	(5) 如是restart,則先stop, 再start 考慮:如果本來沒有start,如何處理?
	(6) 如是status, 則如果/var/lock/subsys/SCRIPT_NAME文件存在,
	則顯示“SCRIPT_NAME is running...” ,如果/var/lock/subsys/SCRIPT_NAME文件不存在,
	則顯示“SCRIPT_NAME is stopped...”
	(7)在所有模式下禁止啓動該服務,可用chkconfig 和 service命令管理 
	說明: SCRIPT_NAME爲當前腳本名 
6.編寫腳本/root/bin/copycmd.sh
	(1) 提示用戶輸入一個可執行命令名稱
	(2) 獲取此命令所依賴到的所有庫文件列表
	(3) 複製命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下
	 如: /bin/bash ==> /mnt/sysroot/bin/bash /usr/bin/passwd ==>
	/mnt/sysroot/usr/bin/passwd
	(4) 複製此命令依賴到的所有庫文件至目標目錄下的對應路徑下:
	如:/lib64/ldlinux-x86-
	64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
	(5)每次複製完成一個命令後,不要退出,而是提示用戶鍵入新的要複製的命令,
	並重復完成上述功能;直到用戶輸入quit退出 
7.編寫函數實現兩個數字做爲參數,返回最大值
8.斐波那契數列又稱黃金分割數列
	因數學家列昂納多·斐波那契以兔子繁殖爲例 子而引入,故又稱爲“兔子數列”,
	指的是這樣一個數列: 0、 1、 1、 2、 3、 5、 8、 13、 21、 34、 ……,
	斐波納契數列以如下被以遞歸的方法定義: F(0) =0, F(1) =1,
	 F(n) =F(n-1)+F(n-2)(n≥2) 利用函數,求n階斐波那契數列
9.漢諾塔(又稱河內塔)問題
	是源於印度一個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,
	在一根柱子上從下往上按照大小順序摞着64片黃金圓盤。 
	大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。
	並且 規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤,
	利用 函數,實現N片盤的漢諾塔的移動步驟 
10.輸入若干個數值存入數組中,採用冒泡算法進行升序或降序排序
11.將下圖所示,實現轉置矩陣matrix.sh
 1 2 3		 2 5 8
 1 4 7	===> 7 8 9 
 4 5 6 		 3 6 9
12.打印楊輝三角形

十五、啓動和內核管理

1. 題目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十六、安全加固SELinux

1. 題目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十七、文本處理三劍客之AWK

1. 題目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';

十八、加密與安全

1. 題目

// An highlighted block
var foo = 'bar';

2. 答案

// An highlighted block
var foo = 'bar';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章