Linux階段練習(1)
# 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)