1. 程式人生 > >Linux階段練習(1)

Linux階段練習(1)

Linux階段練習題

1、顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)

# cat /proc/meminfo | grep -i '^s'

# grep '^[sS]' /proc/meminfo

2、顯示/etc/passwd文件中不以/bin/bash結尾的行

# grep -E '/bin/bash$' /etc/passwd

3、顯示用戶wang默認的shell程序

# grep '^wang' /etc/passwd | grep -oE '/s?bin.*/.*$'

# grep '^wang' /etc/passwd | cut -d: -f7

4、找出/etc/passwd中的兩位或三位數

# grep -Eo '[0-9]{2,3}' /etc/passwd

5、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且後面有非空白字符的行

# grep -E '^[[:space:]]+[^[:space:]]+' /etc/grub2.cfg

6、找出“netstat -tan”命令結果中以LISTEN後跟任意多個空白字符結尾的行

# netstat -ant |grep -E 'LISTEN[[:space:]]+$'

7、顯示CentOS7上所有系統用戶的用戶名和UID

# cat /etc/passwd|grep -E '.*:[2-9][0-9][0-9]:[0-9]+.*' |cut -d: -f1,3

8、添加用戶bash、testbash、basher、sh、nologin(其shell為/sbin/nologin),找出/etc/passwd用戶名和shell同名的行

# cat /etc/passwd |grep -E '^(.*):x:.*/\1$' 註意grep後向引用的使用

9、利用df和grep,取出磁盤各分區利用率,並從大到小排序

# df |grep -E '1?[0-9]?[0-9]%'|tr -s ' '|sort -t' ' -k5 -nr | cut -d' ' -f5

10、顯示三個用戶root、mage、wang的UID和默認shell

# cat /etc/passwd | grep -E '^(root|mage|wang)'| cut -d: -f3,7

11、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)後面跟一個小括號的行

# cat functions |grep -E '^_*[[:alpha:]]+_*[[:alpha:]]+_*\(' 註意最後小括號的轉義

12、使用egrep取出/etc/rc.d/init.d/functions中其基名

# echo "/etc/rc.d/init.d/functions" | egrep -o '[[:alpha:]]+$' 註意要使用[[:space:]],非[:space:],只有tr使用[:space:]類似的格式,因為是字符'a-z'

# echo /etc/rc.d/init.d/functions |sed -r 's@(.*/)(.+/?)+$@\1@' 註意有無/的區別就是後面是否有字符,(.+/?)+$ 錨定行尾需要有字符

13、使用egrep取出上面路徑的目錄名

# echo "/etc/rc.d/init.d/functions" | egrep -o '.*/'

14、統計last命令中以root登錄的每個主機IP地址登錄次數

# last |grep -Eo "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" |sort | uniq -c

註意前面匹配時的雙括號不然不能出現三個.只有1個. 後面的也要有()號,grep 使用時註意pattern一定要加引號,單引號、雙引號均可

15、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255

# "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"

16、顯示ifconfig命令結果中所有IPv4地址

# ifconfig |grep -Eo '(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'

17、將此字符串:welcome to magedu linux 中的每個字符去重並排序,重復次數多的排到前面

# echo "welcome to magedu linux" |grep -o '.'|sed '/^[[:space:]]*$/d'|sort|uniq -c|sort -nr

註意: sed '/^$/d' 註意兩個斜線必須有,否則報錯,更保險的寫法: /^[[:space:]]*$/d

18、復制/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符

# :%s/^[[:space:]]+//

19、復制/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令為/tmp/functions的每行開頭為空白字符的行的行首添加一個#號

# :%s/^ \+/#&/

20、顯示當前時間,格式:2016-06-18 10:20:30

# date "+%F %T"

21、顯示前天是星期幾

# date -d '-2 day' +%A

22、設置當前日期為2019-08-0706:05:10

# date 080706052019.10 (月日時分年.秒)


********************************************

文件通配符:

1.* 匹配0個或多個字符

2.? 匹配任意單個字符

3.[0-9] 匹配數字範圍

4.[a-z] a A b B ... y Y z

5.[A-Z] A b c C ..z Z

6.[wang] 匹配列表中任何一個字符

7.[^wang] 匹配列表中的所有字符以外的字符


預定義的字符類:

[[:digit:]]: 任意數字,相當與[0-9]

[[:lower:]]:任意小寫字母

[[:upper:]]: 任意大寫字母

[[:alpha:]]: 任意大小寫字母

[[:alnum:]]:任意數字或字母

[[:blank:]]:水平空白字符

[[:space:]]:水平或垂直空白字符

********************************************


23、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件或目錄

# ls -d /var/l*[[:digit:]]*[[:lower:]]

24、顯示/etc目錄下以任意一位數字開頭,且以非數字結尾的文件或目錄

# ls -d /etc/[[:digit:]]*[^[:digit:]]

25、顯示/etc/目錄下以非字母開頭,後面跟了一個字母及其它任意長度任意字符的文件或目錄

# ls -d /etc/[^[:alpha:]][[:alpha:]]*

26、顯示/etc/目錄下所有以rc開頭,並後面是0-6之間的數字,其它為任意字符的文件或目錄

# ls -d /etc/rc[0-6]*

27、顯示/etc目錄下,所有以.d結尾的文件或目錄

# ls -d /etc/*.d

28、顯示/etc目錄下,所有.conf結尾,且以m,n,r,p開頭的文件或目錄

# ls -d /etc/[mnrp]*.conf

29、只顯示/root下的隱藏文件和目錄

# ls -d /root/.[^.]*

30、只顯示/etc下的非隱藏目錄

# ls -d /etc/*/

31、定義別名命令baketc,每天將/etc/目錄下所有文件,備份到/app獨立的子目錄下,並要求子目錄格式為backupYYYY-mm-dd,備份過程可見

# alias baketc='cp -av /etc /app/backup`date +%F`'

32、創建/app/rootdir目錄,並復制/root下所有文件到該目錄內,要求保留原有權限

# mkdir /app

# cp -a /root /app/rootdir

33、如何創建/testdir/dir1/x, /testdir/dir1/y, /testdir/dir1/x/a, /testdir/dir1/x/b, /testdir/dir1/y/a, /testdir/dir1/y/b

# mkdir -pv /testdir/dir1/{x/,y/}{a,b}

34、如何創建/testdir/dir2/x,/testdir/dir2/y,/testdir/dir2/x/a,/testdir/dir2/x/b

# mkdir -pv /testdir/dir2/{x/{a,b},y}

35、如何創建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7

# mkdir -pv /testdir/dir{3,4,5/dir{6,7}}

36、將/etc/issue文件中的內容轉換為大寫後保存至/tmp/issue.out文件中

# tr 'a-z' 'A-Z' < /etc/issue > /tmp/issue.out

# tr '[:lower:]' '[:upper:]' < /etc/issue > /tmp/issue.out

37、將當前系統登錄用戶的信息轉換為大寫後保存至/tmp/who.out文件中

# who |tr 'z-z' 'A-Z' > /tmp/who.out

38、一個linux用戶給root發郵件,要求郵件標題為”help”,郵件正文如下:

Hello, I am 用戶名,The system version is here,please help me to check it ,thanks!

操作系統版本信息

# mail -s 'help' << EOF

Hello, I am $USER,

The System version is here, please help me to check it ,thanks

OS Version: `cat /etc/centos-release`

EOF

39、將/root/下文件列表,顯示成一行,並文件名之間用空格隔開

# ls /root |tr '\n' ' '

40、計算1+2+3+..+99+100的總和

# echo {1..100}| tr -s ' ' '+'| bc

# seq -s"+" 100 |bc

41、刪除Windows文本文件中的‘^M’字符

# tr -d '\r' < windows_file

# tr -d '\15' < windows_file

42、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格

# echo "xt.,l 1 jr#' 'mn 2 c*/fe 3 uz 4" | tr -c -d '[^0-9 ]' -c 取反

43、將PATH變量每個目錄顯示在獨立的一行

# echo $PATH |tr ':' '\n'

44、將指定文件中0-9分別替代成a-j

# cat file | tr '0-9' 'a-j'

45、將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立的一行,並無空行

# cat /etc/centos-release | tr ' ' '\n' | tr -d '[:digit:][:punct:]'|grep -v '^$'

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

# useradd -s /bin/csh -c "Centoo Distribution" -G bin,root gentoo

47、創建下面的用戶、組和組成員關系

名字為webs 的組

用戶nginx 使用webs 作為附屬組

用戶varnish,也使用webs 作為附屬組

用戶mysql,不可交互登錄系統,且不是webs 的成員,nginx,varnish,mysql密碼都是magedu

# groupadd webs

# useradd nginx -G webs

# useradd varnish -G webs

# useradd -r mysql

# echo "mage" |passwd --stdin mysql

# echo "mage" |passwd --stdin varnish

# echo "mage" |passwd --stdin nginx

48、當用戶docker對/testdir 目錄無執行權限時,意味著無法做哪些操作?(只有rw權限)

# 不能使用cd切換至該目錄,不能刪除目錄下的文件,不能顯示文件夾下文件的屬性信息

49、當用戶mongodb對/testdir 目錄無讀權限時,意味著無法做哪些操作?(只有wx權限)

# 能夠切換至該testdir目錄,但使用ls不能查看到目錄下的文件或文件夾,可以刪除文件夾下知道的文件或文件夾,但卻不能使用rm -f * 來刪除所有文件,也可以修改知道的文件內容

50、當用戶redis 對/testdir 目錄無寫權限時,該目錄下的只讀文件file1是否可修改和刪除?(只有rx權限)

# 不可刪除,能否刪除文件與文件的權限和所屬關系無關,只查看所處文件夾是否有寫權限。

51、當用戶zabbix對/testdir 目錄有寫和執行權限時,該目錄下的只讀文件file1是否可修改和刪除?

# 可以修改目錄下的只讀文件file1,需要強制修改,使用wq!,也可以刪除目錄下的file1

52、復制/etc/fstab文件到/var/tmp下,設置文件所有者為tomcat讀寫權限,所屬組為apps組有讀寫權限,其他人無權限

# cp /etc/fstab /var/tmp

# chown tomcat.apps /var/tmp

# chmod 660 /var/tmp

53、誤刪除了用戶git的家目錄,請重建並恢復該用戶家目錄及相應的權限屬性

# mkdir -pv /home/git -m 700

# cp -a /etc/skel/.[^.]* /home/git

# chown -R git:git /home/git

54、在/testdir/dir裏創建的新文件自動屬於webs組,組apps的成員如:tomcat能對這些新文件有讀寫權限,組dbs的成員如:mysql只能對新文件有讀權限,其它用戶(不屬於webs,apps,dbs)不能訪問這個文件夾

# groupadd apps

# groupadd webs

# groupadd dbs

# useradd tomcat

# useradd mysql

# groupmems -a tomcat -g apps

# groupmems -a mysql -g dbs

# chmod 770 /testdir/dir

# chown webs:webs /testdir/dir

# chmod g+s /testdir/dir

# setfacl -m g:apps:rwx /testdir/dir

# setfacl -m g:dbs:rx /testdir/dir

55、備份/testdir/dir裏所有文件的ACL權限到/root/acl.txt中,清除/testdir/dir中所有ACL權限,最後還原ACL權限

# getfacl -R /testdir/dir > /root/acl.txt

# setfacl -R -b /testdir/dir

# setfacl --restore acl.txt

56、找出ifconfig “網卡名” 命令結果中本機的IPv4地址

# ifconfig ens33 |sed -n '2p'|sed -r 's/.*inet //' |sed -r 's/ net.*//'

# ifconfig ens33 | sed -n '2p' |sed -r 's@.*inet ((([0-9]{1,3}\.){3})([0-9]{1,3})).*@\1@' 註意要使用括號括住整個ip作為後向\1

57、查出分區空間使用率的最大百分比值

# df |grep -Eo '[[:digit:]]{1,3}%'|sort -nr |head -1

# df |tr -s ' ' ':'| sed -n '2,$p'|cut -d: -f5 |sort -nr |head -1

58、查出用戶UID最大值的用戶名、UID及shell類型

# cat /etc/passwd|sort -t: -k3 -n -r| head -1 |cut -d: -f1,3,7

59、查出/tmp的權限,以數字方式顯示

# 1777

60、統計當前連接本機的每個遠程主機IP的連接數,並按從大到小排序

# netstat -nt |grep 'ESTABLISHED'|tr -s ' ' ':'|cut -d: -f6|sort -nr |uniq -c

61、顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)

# cat /proc/meminfo |grep -i '^s'

# cat /proc/meminfo |grep '^[Ss]'

62、顯示/etc/passwd文件中不以/bin/bash結尾的行

# cat /etc/passwd |grep -v '/bin/bash$'

63、顯示用戶rpc默認的shell程序

# cat /etc/passwd |grep -w 'rpc'|sed -r 's/.*://'

64、找出/etc/passwd中的兩位或三位數

# cat /etc/passwd |grep -Eo'[0-9]{2,3}'

65、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字符開頭的且後面有非空白字符的行

# cat /etc/grub2.cfg | grep -E '^[[:space:]]+[^[:space:]]+'

66、找出“netstat -tan”命令結果中以LISTEN後跟任意多個空白字符結尾的行

# netstat -ant |grep -E '(LISTEN[[:space:]]*)$'


Linux階段練習(1)