Linux基礎(chǔ)之正則表達(dá)式,用戶、組管理命令介紹
通配符(Globbing)
通配符與元字符類似,通配符主要用于文件名的匹配,而元字符則主要用在字符串的匹配上;
下面介紹幾種常用的通配符:
* 表示匹配任意位數(shù)的任意字符
? 表示匹配一位任意字符
^ 表示取反,不包含的意思
[] 表示此區(qū)間內(nèi)的任意一個字符
{} 表示一種集合
\ 轉(zhuǎn)義字符,使具有特殊意義的字符失去原有意義
| 表示‘或',匹配一組可選的字符
元字符
元字符是用來描述字符的特殊字符。
常用的元字符及意義如下:
* 重復(fù)前面的字符0次或者多次 . 匹配任意字符一次 \+ 匹配前面的字符1次或者多次 \? 匹配前面的字符0次或者1次 \{m\} 匹配其前面的字符m次 \{m,n\} 匹配前面的字符至少m次,至多n次 ^ 匹配字符在行首 $ 匹配字符在行尾 ^$ 匹配空白行。空格、0不算 \< 匹配字符在詞首 \> 匹配字符在詞尾 \<string\> 精準(zhǔn)匹配string \(xy\) xy表示一個分組 \1 模式從左側(cè)起,第一個左括號以及與之匹配的右括號之間的模式所匹配的字符
除了以上的常用的元字符,還有一些特殊的元字符:
[:alpha:] 所有大小寫字母 [:upper:] 所有大寫字母 [:lower:] 所有小寫字母 [:alnum:] 所有字母及數(shù)字 [:punct:] 所有標(biāo)點(diǎn)符號 [:blank:] 空白鍵和TAB鍵 [:space:] 任意空白的字元,空格、tab、CR等 [:digit:] 任意數(shù)字,0-9 [:print:] 任何可以被打印出來的字符
grep
grep, egrep, fgrep - print lines matching a pattern 【SYNOPSIS】 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] 【OPTIONS】 --color=auto 對匹配到的內(nèi)容進(jìn)行高亮顯示處理 -i,--ignore-case Ignore case distinctions in both the PATTERN and the input files. (-i is specified by POSIX.)忽略字符大小寫匹配 -v,--invert-match Invert the sense of matching, to select non-matching lines. (-v is specified by POSIX.)顯示沒有匹配到的行 -o,--only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.只顯示匹配到的部分 -q,--quiet,--silent靜默模式,不列舉任何內(nèi)容 -w,--word-regexp 單詞完整匹配所在的行 -d, --directories=ACTION how to handle directories; ACTION is 'read', 'recurse', or 'skip',目錄表示方式:只讀、遞歸、跳過 -r,-r, --recursive like --directories=recurse -c,--count print only a count of matching lines per FILE匹配到的文件有多少行 -B,--before-context=NUM print NUM lines of leading context列出匹配到的前NUM行 -A,--after-context=NUM print NUM lines of trailing context列出匹配到的后NUM行 -C,--context=NUM print NUM lines of output context列出匹配到的前后幾行
cut
Print selected parts of lines from each FILE to standard output列舉每行被選中的部分到標(biāo)準(zhǔn)輸出,也就是提取行中的某個字段 【SYNOPSIS】 cut OPTION... [FILE]... 【OPTION】 -b,--bytes=LIST select only these bytes按字節(jié)分隔 -c,--characters=LIST select only these characters按字符分隔 -d,--delimiter=DELIM use DELIM instead of TAB for field delimiter 用TAB替換指定的分隔符來分區(qū)域 -f,--field=LIST 分區(qū)域后,根據(jù)區(qū)域位數(shù)來列出數(shù)據(jù) -n with -b: don't split multibyte characters不分隔多字節(jié)字符 【FOR EXAMPLE】 [root@localhost ~]# cat /etc/passwd|cut -d: -f1 root bin daemon adm lp 提取/etc/passwd文件的第一個字段內(nèi)容,也就是用戶名 [root@localhost ~]# cat /tmp/ah2.txt |cut -nb 1,2,3 平凡的 [root@localhost ~]# cat /tmp/ah2.txt |cut -nb 1不分割字節(jié) 平 [root@localhost ~]# cat /tmp/ah2.txt |cut -b 1漢字屬于多字節(jié)字符 [root@localhost ~]# cat /tmp/ah2.txt |cut -c 1 平
sort
sort lines of text files文本文件的行排序 【SYNOPSIS】 sort [OPTION]... [FILE]... sort [OPTION]... --files0-from=F 【OPTION】 -b,--ignore-leading-blanks -f,--ignore-case fold lower case to upper case characters 忽略大小寫 -i,--ignore-nonprinting consider only printable characters忽略空白 -M,--month-sort 按照三位數(shù)月份排序 -h,--human-numeric-sort compare human readable numbers 使用人類可讀的單位排序 -g,--genaral-numeric-sort 使用通用數(shù)值排序,支持科學(xué)計數(shù) -t,--field-separator=SEP use SEP instead of non-blank to blank transition 指定分列的分隔符 -k,--key=KEYDEF sort via a key;KEYDEF gives location and type 指定列排序, -n,--numeric-sort compare according to string numerical value 根據(jù)字符串中的數(shù)值排序 -r,--reverse 反序排列 -c,--check check from srot input;don't sort 排序檢查,但不排序 -o,--output=FILE write result to FILE instead of standard output 將結(jié)果保存至文件中而不輸出 -u,--unique with -c,check for strict ordering; without -c,output only the first of an equal run 與-c組合,執(zhí)行嚴(yán)格的順序檢查;不與-c組合,僅輸出第一個結(jié)果,剔除相鄰重復(fù)的行,重復(fù)且相鄰的無法剔除。
uniq
report or omit repeated lines記錄或剔除重復(fù)行 【SYNOPSIS】 uniq [OPTION]... [INPUT [OUTPUT]] 【OPTION】 -c,--count prefix lines by the number of occurrences行計數(shù)(重復(fù)行列一行,前面有重復(fù)次數(shù)) -d,--repeated only print duplicate lines, one for each group只打印有重復(fù)的行 -D,--all-repeated[=METHOD] -f,--skip-fields=N 跳過前N個字段 -s,--skip-chars=N 跳過前幾個字符 -i,--ignore-case 忽略大小寫 -u,--unique only print unique lines僅打印不重復(fù)的行 -z,--zero-terminated end lines with 0 bytes,not newline -w,--check-chars=N compare no more than N characters in lines 第N個字符之后不做匹配
練習(xí)
1、列出當(dāng)前系統(tǒng)上所有已經(jīng)登錄的用戶的用戶名,同一用戶登錄多次,只顯示一次即可
who |cut -d' ' -f 1|uniq
2、取出最后登錄到當(dāng)前系統(tǒng)的用戶的相關(guān)信息
cat /etc/passwd|grep "^`last -1|cut -d' ' -f1|head -1`"
3、去除當(dāng)前系統(tǒng)上被用戶當(dāng)作其默認(rèn)的shell的最多的那個shell
cat /etc/passwd|cut -d: -f7|sort -u|sort -rn|head -1
4、將/etc/passwd中的第三個字段的數(shù)值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt中
cat /etc/passwd|sort -t':' -k3 -n|tail|tr [a-z] [A-Z] 2&>1 /tmp/maxusers.txt
5、取出當(dāng)前主機(jī)的IP地址,
ifconfig eno16777736| grep "\<inet\>"|cut -d' ' -f 10
6、列出/etc/下所有以.conf結(jié)尾的文件的文件名,并將其名字轉(zhuǎn)換成大寫后保存至/tmp/etc.conf文件中
ls /etc|grep -o ".*\.conf$"|tr [a-z] [A-Z] >> /tmp/etc.conf
7、顯示/var目錄下一級子目錄或者文件的總個數(shù)
linux里沒有直接的命令來展示一個目錄下的文件個數(shù),可以通過管道將兩個命令組合
查看目錄下所有文件個數(shù)命令如下:
ls |wc -l
1、ls 是查看文件夾內(nèi)所有文件的命令
2、wc -l 是統(tǒng)計文件行數(shù)的命令
3、以上兩個命令疊加,相當(dāng)于統(tǒng)計文件夾下文件總數(shù)
#!/bin/sh find /tmp/homework -maxdepth 1 -type d | while read dir; do count=$(find "$dir" -type f | wc -l) echo "$dir : $count" done
8、取出/etc/group文件中的第三個字段數(shù)值最小的10個組的名字
cat /etc/group|sort -t':' -k 3 -n|head |cut -d':' -f1
9、將/etc/fstab和/etc/issue文件的內(nèi)容合并為同一個內(nèi)容后保存至/tmp/etc.test
cat /etc/fstab /etc/issue >>/tmp/etc.test
Linux基礎(chǔ)知識—用戶、組管理
Linux為了提高其安全性,通過創(chuàng)建用戶及用戶組并賦相應(yīng)的權(quán)限來限制各用戶訪問不同的文件。下面我們來學(xué)習(xí)下用戶及用戶組的相關(guān)管理命令先來看看幾個文件:
/etc/passwd
[root@localhost ~]# cat /etc/passwd|head -3 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
其文件內(nèi)容格式是由‘:'分隔開的字符串,其內(nèi)容包括如下: USERNAME:X:UID:GID:DESCRIPTION:HOME:SHELL
/etc/shadow
[root@localhost ~]# cat /etc/shadow|head -3 root:$6$1RSlswAIVbmtwWM5$WLZxHXzkL7.PvHb2ghYqbGvj3Cz4AB5sGRr33TwCX1cwSqV.syv0q1eqcF3NGUJeNNspAOt5C1rWfdsgBllB1.::0:99999:7::: bin:*:16659:0:99999:7::: daemon:*:16659:0:99999:7:::
其內(nèi)容格式類似于/etc/passwd格式,只是內(nèi)容不同:
USERNAME:ENCRYPTED PASSWD:DATE OF LAST CHANGE:MINIMUM PASSWD AGE: MAXIMUM PASSWD AGE:PASSWD WARNING:PASSWORD INACTIVITY:EXPIRATION
這個簡單的解釋下:
USERNAME:也就是用戶名 ENCRYPTED PASSWD:加密的密碼 DATE OF LAST CHANGE:最后修改密碼的日期(天數(shù),是以1970-1-1起算的天數(shù)) MINIMUM PASSWD:最短可修改密碼日期(天數(shù),相對第三欄的最后修改日期) MAXIMUM PASSWD:最長可修改密碼日期 PASSWD WARNING:密碼過期前的警告天數(shù)(相對第四欄的日期之前的天數(shù)) PASSWD INACTIVITY:密碼的閑置日期(密碼過期之后還有一定的天數(shù)可以使用) EXPIRATION:備注
UID
人與計算機(jī)交互,人可識別字符和數(shù)字等,但是計算機(jī)只能識別0、1這樣的二進(jìn)制代碼,所以,UID就是分配給USERNAME相對應(yīng)的計算機(jī)可識別的ID號碼;UID可分為以下幾類:
0:系統(tǒng)管理員,root的UID 1-999:系統(tǒng)用戶,這些用戶是系統(tǒng)后臺的服務(wù)類程序的用戶所用;用戶也可以指定用戶為系統(tǒng)用戶 1000-2^32-1:普通用戶
GID
在程序設(shè)計過程中,我們會將一部分用戶之間的資料共享,而不愿讓資料為外人看到,所以就有了用戶組的概念,用戶之間通過GID來確定用戶組的范圍
下面我們來介紹下設(shè)置以上及相關(guān)信息的命令:
useradd
create a new user or update default new user information 【SYNOPSIS】 useradd [options] LOGIN useradd -D useradd -D [options] 【OPTIONS】 -D useradd命令的部分默認(rèn)參數(shù),可修改 -c,--comment 添加用戶的描述信息,finger USERNAME查看更直觀 -d,--home-dir 指定用戶的家目錄,必須為絕對路徑 -e,--expiredate 用戶賬號失效日期,格式默認(rèn):YYYY-MM-DD -f,--inactive 指定用戶密碼是否失效(-1:永不失效,過期會強(qiáng)制修改密碼;0:立刻失效) -g,--gid 用戶主屬組,該屬組必須可用 -G,--groups 用戶附加屬組,該屬組可設(shè)置多個 -M 強(qiáng)制不建立家目錄 -m 強(qiáng)制建立家目錄 -r,create system user 創(chuàng)建系統(tǒng)用戶 -o,--non-unique 允許創(chuàng)建一個已存在的UID的用戶(重復(fù)的UID) -s,--shell 指定該用戶的shell環(huán)境 -u,--uid 指定用戶的uid值
passwd
update user's authentication tokens 【SYNOPSIS】 passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username] 【OPTIONS】 --stdin 結(jié)合管道符將標(biāo)準(zhǔn)輸入直接賦值給用戶密碼 -l,--lock 鎖定指定用戶 -u,--unlock 解鎖指定用戶 -d,--delete 快速刪除用戶密碼 -e,--expire 使用戶密碼失效 -n,--minimum 密碼的最短修改天數(shù) -x,--maximum 密碼的最長修改天數(shù) -w,--waring 密碼過期前的通知天數(shù) -i,--inactive 密碼過期后的閑置天數(shù) -S,--status 用戶的密碼狀態(tài)
groupadd
create a new group 【SYNOPSIS】 groupadd [options] group 【OPTION】 -g,--gid 創(chuàng)建一個指定gid的group -K,--key 修改/etc/login.defs的值,具體可參照此文件的內(nèi)容 -o,--non-unique 創(chuàng)建一個已有的gid的組 -p,--password 創(chuàng)建組密碼,現(xiàn)在基本用不到 -r,--system-group 創(chuàng)建一個系統(tǒng)組
newgrp
log in to a new group 【SYNOPSIS】 newgrp [-] [group] 這個命令只是在用戶的主屬組更換的時候有用,例如USERNAME有主屬組group1,附屬組group2,group3;現(xiàn)在切換用戶的主屬組為group3則使用此命令
總結(jié)描述用戶和組管理類命令的使用方法并完成練習(xí)
創(chuàng)建組distro,其GID為2016; [root@localhost ~]# groupadd -g 2016 distro [root@localhost ~]# tail -1 /etc/group distro:x:2016: 創(chuàng)建用戶mandriva,其ID為1005;基本組位distro; [root@localhost ~]# useradd -g distro -u 1005 mandriva [root@localhost ~]# tail -1 /etc/passwd mandriva:x:1005:2016::/home/mandriva:/bin/bash 創(chuàng)建用戶mageia,其ID位1100;家目錄為/home/linux; [root@localhost ~]# useradd -u 1100 -d /home/linux mageia [root@localhost ~]# tail -1 /etc/passwd mageia:x:1100:1100::/home/linux:/bin/bash 給用戶mageia添加密碼,密碼為mageedu; [root@localhost ~]# passwd mageia Changing password for user mageia. New password: Retype new password: passwd: all authentication tokens updated successfully. 刪除用戶mandriva但保留其家目錄; [root@localhost ~]# tail -3 /etc/passwd mariadb:x:1000:1000::/home/mariadb:/sbin/nologin hadoop:x:1001:1001::/home/hadoop:/bin/bash mageia:x:1100:1100::/home/linux:/bin/bash [root@localhost ~]# ls /home/ hadoop linux mandriva 創(chuàng)建用戶slackware,其ID為2002,基本組為distro,附屬組為peguin; [root@localhost ~]# groupadd peguin [root@localhost ~]# useradd -u 2002 -g distro -Gpeguin slackware [root@localhost ~]# tail -2 /etc/passwd mageia:x:1100:1100::/home/linux:/bin/bash slackware:x:2002:2016::/home/slackware:/bin/bash [root@localhost ~]# tail -2 /etc/group mageia:x:1100: peguin:x:2017:slackware 修改slackware的默認(rèn)shell為/bin/tcsh; [root@localhost ~]# usermod -s /bin/tcsh slackware [root@localhost ~]# tail -2 /etc/passwd mageia:x:1100:1100::/home/linux:/bin/bash slackware:x:2002:2016::/home/slackware:/bin/tcsh 為用戶slackware新增附屬組admins; [root@localhost ~]# usermod -aG admins slackware [root@localhost ~]# tail -4 /etc/group distro:x:2016: mageia:x:1100: peguin:x:2017:slackware admins:x:2018:slackware 為slackware添加密碼,且要求密碼最短使用期限為3天,最長為180天,警告為3天; [root@localhost ~]#passwd -n 3 -x 180 -w 3 slackware [root@localhost ~]# tail -1 /etc/shadow slackware:!!:16658:3:180:3::: [root@localhost ~]#echo 'Slackware'|passwd --stdin slackware 添加用戶openstack,其ID號為3003,基本組為clouds,附加組為peguin和nova; [root@localhost ~]# groupadd clouds [root@localhost ~]# groupadd nova [root@localhost ~]# useradd openstack -u 3003 -g clouds -G peguin,nova [root@localhost ~]# tail -1 /etc/passwd openstack:x:3003:2019::/home/openstack:/bin/bash 添加系統(tǒng)用戶mysql,要求其shell為/sbin/nologin; [root@localhost ~]# useradd -r mysql -s /sbin/nologin [root@localhost ~]# tail -1 /etc/passwd mysql:x:996:994::/home/mysql:/sbin/nologin 使用echo命令,非交互為openstack添加密碼 [root@localhost ~]# echo 'Openstack'|passwd --stdin openstack Changing password for user openstack. passwd: all authentication tokens updated successfully.
以上就是Linux基礎(chǔ)之正則表達(dá)式,用戶、組管理命令介紹,如果您有什么建議可以留言
- linux 查找過濾及用戶和組管理命令的一些實(shí)例
- Linux操作系統(tǒng)下關(guān)于用戶和組的配置管理指南
- linux查看所有用戶和查看用戶組的方法(修改用戶組)
- 詳解Linux添加/刪除用戶和用戶組
- Linux中把用戶添加到組的4個方法總結(jié)
- Linux 創(chuàng)建修改刪除用戶和組的方法
- linux用戶組以及權(quán)限總結(jié)
- 在Linux上如何檢查用戶所屬組詳解
- Linux 無法使用userdel 刪除用戶和組的解決方案
- linux 用戶和組命令整理及詳細(xì)介紹
- Linux修改用戶所屬組的方法
- Linux 中有效用戶組和初始用戶組的實(shí)現(xiàn)
- linux用戶和組管理常見命令總結(jié)
相關(guān)文章
Ubuntu14.04 opencv2.4.8和opencv3.3.1多版本共存的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Ubuntu14.04 opencv2.4.8和opencv3.3.1多版本共存的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12linux如何為已存在的用戶創(chuàng)建home目錄
這篇文章主要介紹了linux如何為已存在的用戶創(chuàng)建home目錄問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04