Linux基礎之正則表達式,用戶、組管理

Linux基礎—正則表達式

正則表達式簡單來說就是一種行字符串處理的方式,通過一些特殊符號的輔助,可達到搜索、刪除、替換等某些特定字符串的處理方式

通配符(Globbing)

通配符與元字符類似,通配符主要用于文件名的匹配,而元字符則主要用在字符串的匹配上; 
下面介紹幾種常用的通配符:

* 表示匹配任意位數的任意字符 
? 表示匹配一位任意字符 
^ 表示取反,不包含的意思 
[] 表示此區間內的任意一個字符 
{} 表示一種集合 
\ 轉義字符,使具有特殊意義的字符失去原有意義 
| 表示‘或’,匹配一組可選的字符

元字符

元字符是用來描述字符的特殊字符。 
常用的元字符及意義如下:

*           重復前面的字符0次或者多次
.           匹配任意字符一次
\+          匹配前面的字符1次或者多次
\?          匹配前面的字符0次或者1次
\{m\}       匹配其前面的字符m次
\{m,n\}     匹配前面的字符至少m次,至多n次
^           匹配字符在行首
$           匹配字符在行尾
^$          匹配空白行??崭瘛?不算
\<          匹配字符在詞首
\>          匹配字符在詞尾
\<string\>  精準匹配string
\(xy\)      xy表示一個分組
\1          模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配的字符

除了以上的常用的元字符,還有一些特殊的元字符:

[:alpha:]   所有大小寫字母
[:upper:]   所有大寫字母  
[:lower:]   所有小寫字母
[:alnum:]   所有字母及數字
[:punct:]   所有標點符號
[:blank:]   空白鍵和TAB鍵
[:space:]   任意空白的字元,空格、tab、CR等
[:digit:]   任意數字,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    對匹配到的內容進行高亮顯示處理
    -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靜默模式,不列舉任何內容
    -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列舉每行被選中的部分到標準輸出,也就是提取行中的某個字段
【SYNOPSIS】
cut OPTION... [FILE]...
【OPTION】
    -b,--bytes=LIST     select only these bytes按字節分隔
    -c,--characters=LIST    select only these characters按字符分隔
    -d,--delimiter=DELIM    use DELIM instead of TAB for field delimiter    用TAB替換指定的分隔符來分區域
    -f,--field=LIST     分區域后,根據區域位數來列出數據
    -n  with -b: don't split multibyte characters不分隔多字節字符
【FOR EXAMPLE】
    [root@localhost ~]# cat /etc/passwd|cut -d: -f1
    root
    bin
    daemon
    adm
    lp
    提取/etc/passwd文件的第一個字段內容,也就是用戶名
    [root@localhost ~]# cat /tmp/ah2.txt |cut -nb 1,2,3
    平凡的
    [root@localhost ~]# cat /tmp/ah2.txt |cut -nb 1不分割字節
    平
    [root@localhost ~]# cat /tmp/ah2.txt |cut -b 1漢字屬于多字節字符

    [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
        按照三位數月份排序
    -h,--human-numeric-sort     compare human readable numbers
        使用人類可讀的單位排序
    -g,--genaral-numeric-sort
        使用通用數值排序,支持科學計數
    -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
        根據字符串中的數值排序
    -r,--reverse
        反序排列
    -c,--check  check from srot input;don't sort
        排序檢查,但不排序
    -o,--output=FILE    write result to FILE instead of standard output
        將結果保存至文件中而不輸出
    -u,--unique     with -c,check for strict ordering; without -c,output only the first of an equal run
        與-c組合,執行嚴格的順序檢查;不與-c組合,僅輸出第一個結果,剔除相鄰重復的行,重復且相鄰的無法剔除。

uniq

report or omit repeated lines記錄或剔除重復行
【SYNOPSIS】
uniq [OPTION]... [INPUT [OUTPUT]]
【OPTION】
    -c,--count  prefix lines by the number of occurrences行計數(重復行列一行,前面有重復次數)
    -d,--repeated   only print duplicate lines, one for each group只打印有重復的行
    -D,--all-repeated[=METHOD]
    -f,--skip-fields=N
        跳過前N個字段
    -s,--skip-chars=N
        跳過前幾個字符
    -i,--ignore-case    忽略大小寫
    -u,--unique     only print unique lines僅打印不重復的行
    -z,--zero-terminated    end lines with 0 bytes,not newline
    -w,--check-chars=N  compare no more than N characters in lines
        第N個字符之后不做匹配

練習

1、列出當前系統上所有已經登錄的用戶的用戶名,同一用戶登錄多次,只顯示一次即可

who |cut -d' ' -f 1|uniq

2、取出最后登錄到當前系統的用戶的相關信息

cat /etc/passwd|grep "^`last -1|cut -d' ' -f1|head -1`"

3、去除當前系統上被用戶當作其默認的shell的最多的那個shell

cat /etc/passwd|cut -d: -f7|sort -u|sort -rn|head -1

4、將/etc/passwd中的第三個字段的數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt中

cat /etc/passwd|sort -t':' -k3 -n|tail|tr [a-z] [A-Z] 2&>1 /tmp/maxusers.txt

5、取出當前主機的IP地址,

ifconfig eno16777736| grep  "\<inet\>"|cut -d' ' -f 10

6、列出/etc/下所有以.conf結尾的文件的文件名,并將其名字轉換成大寫后保存至/tmp/etc.conf文件中

ls /etc|grep -o ".*\.conf$"|tr [a-z] [A-Z] >> /tmp/etc.conf

7、顯示/var目錄下一級子目錄或者文件的總個數

8、取出/etc/group文件中的第三個字段數值最小的10個組的名字

cat /etc/group|sort -t':' -k 3 -n|head |cut -d':' -f1

9、將/etc/fstab和/etc/issue文件的內容合并為同一個內容后保存至/tmp/etc.test

cat /etc/fstab /etc/issue >>/tmp/etc.test

Linux基礎知識—用戶、組管理

Linux為了提高其安全性,通過創建用戶及用戶組并賦相應的權限來限制各用戶訪問不同的文件。下面我們來學習下用戶及用戶組的相關管理命令先來看看幾個文件:

/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

其文件內容格式是由‘:’分隔開的字符串,其內容包括如下: 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:::

其內容格式類似于/etc/passwd格式,只是內容不同:

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:最后修改密碼的日期(天數,是以1970-1-1起算的天數)
MINIMUM PASSWD:最短可修改密碼日期(天數,相對第三欄的最后修改日期)
MAXIMUM PASSWD:最長可修改密碼日期
PASSWD WARNING:密碼過期前的警告天數(相對第四欄的日期之前的天數)
PASSWD INACTIVITY:密碼的閑置日期(密碼過期之后還有一定的天數可以使用)
EXPIRATION:備注

UID

人與計算機交互,人可識別字符和數字等,但是計算機只能識別0、1這樣的二進制代碼,所以,UID就是分配給USERNAME相對應的計算機可識別的ID號碼;UID可分為以下幾類:

0:系統管理員,root的UID
1-999:系統用戶,這些用戶是系統后臺的服務類程序的用戶所用;用戶也可以指定用戶為系統用戶
1000-2^32-1:普通用戶

GID

在程序設計過程中,我們會將一部分用戶之間的資料共享,而不愿讓資料為外人看到,所以就有了用戶組的概念,用戶之間通過GID來確定用戶組的范圍

下面我們來介紹下設置以上及相關信息的命令:

useradd
create a new user or update default new user information
【SYNOPSIS】
    useradd [options] LOGIN
    useradd -D
    useradd -D [options]
【OPTIONS】
    -D  useradd命令的部分默認參數,可修改
    -c,--comment        添加用戶的描述信息,finger USERNAME查看更直觀
    -d,--home-dir       指定用戶的家目錄,必須為絕對路徑
    -e,--expiredate     用戶賬號失效日期,格式默認:YYYY-MM-DD
    -f,--inactive       指定用戶密碼是否失效(-1:永不失效,過期會強制修改密碼;0:立刻失效)
    -g,--gid            用戶主屬組,該屬組必須可用
    -G,--groups         用戶附加屬組,該屬組可設置多個
    -M                  強制不建立家目錄
    -m                  強制建立家目錄
    -r,create system user   創建系統用戶
    -o,--non-unique     允許創建一個已存在的UID的用戶(重復的UID)
    -s,--shell          指定該用戶的shell環境
    -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     結合管道符將標準輸入直接賦值給用戶密碼
    -l,--lock   鎖定指定用戶
    -u,--unlock     解鎖指定用戶
    -d,--delete     快速刪除用戶密碼
    -e,--expire     使用戶密碼失效
    -n,--minimum    密碼的最短修改天數
    -x,--maximum    密碼的最長修改天數
    -w,--waring     密碼過期前的通知天數
    -i,--inactive   密碼過期后的閑置天數
    -S,--status     用戶的密碼狀態
groupadd
create a new group
【SYNOPSIS】
    groupadd [options] group
【OPTION】
    -g,--gid        創建一個指定gid的group
    -K,--key        修改/etc/login.defs的值,具體可參照此文件的內容
    -o,--non-unique     創建一個已有的gid的組
    -p,--password   創建組密碼,現在基本用不到
    -r,--system-group   創建一個系統組
newgrp
log in to a new group
【SYNOPSIS】
    newgrp [-] [group]
這個命令只是在用戶的主屬組更換的時候有用,例如USERNAME有主屬組group1,附屬組group2,group3;現在切換用戶的主屬組為group3則使用此命令

總結描述用戶和組管理類命令的使用方法并完成練習

創建組distro,其GID為2016;
[root@localhost ~]# groupadd -g 2016 distro
[root@localhost ~]# tail -1 /etc/group
distro:x:2016:

創建用戶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

創建用戶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

創建用戶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的默認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

添加系統用戶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.

原創文章,作者:396064847,如若轉載,請注明出處:http://www.www58058.com/49849

(0)
396064847396064847
上一篇 2016-10-03
下一篇 2016-10-04

相關推薦

  • 馬哥教育網絡班19期第一周課程練習

    1、描述計算機的組成及其功能。 從大體上計算機是由cpu、內存、主板、I/O設備、存儲設備組成 cpu的功能就好像人的大腦,控制身體的。嚴格意義上是用來解釋計算機指令以及處理軟件中的數據的。 內存的功能就好像人的大腦記憶區、來存放眼睛看到的世界。嚴格意義上是用于暫時存放cpu中的運算數據,以及與硬盤等外部存儲器交換的數據 主板的功能就好像人的身體,來鏈接身體…

    Linux干貨 2016-06-18
  • CentOS系統啟動流程

    Linux系統(Centos 5、6)啟動流程 一、POST加電自檢 Power-On-Self-Test 按下電源鍵以后,系統調用存儲在ROM中的BIOS和存儲在RAM中的CMOS(用來保存各項參數的設定)完成系統硬件狀態的檢查,如果硬件有問題則提示用戶問題嚴重無法開機的會發出警報聲音;硬件自檢完成后進入下一步。 二、Boot Sequence與…

    Linux干貨 2016-11-24
  • linux下正則表達式的學習

    linux 下正則表達式用法總結 正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。簡單的說,正則表示式就是處理字符串的方法。常用來匹配字符的元字符總結如下: Paste_Image.png 有了以上這些元字符原則上可以搜索出任務想要表達的字符,可為了更靈活使用,往往還要搭配一些次數匹配的用法 Paste_Image.png 例如:a&nbsp…

    Linux干貨 2017-06-04
  • 第十八周作業

    1、為LNMP架構添加memcached支持,并完成對緩存效果的測試報告; 環境準備: 1)LNMP(php-fpm)環境已搭建完畢 2)Wordpress已部署完成 1.在memcache服務器上安裝memcached包并啟動服務 ]# yum install memcached -y ]# systemctl start memcached.servic…

    2017-06-22
  • Corosync + Pacemaker 搭建高可用MariaDB服務

    Corosync + Pacemaker 搭建高可用MariaDB服務 實驗描述 1.本實驗的目的是為了通過手動配置corosync配置文件,實現MariaDB服務的高可用,集群心跳傳遞使用組播方式。2.三個節點的主機名分別為:node5.redhat.com、node6.redhat.com、node7.redhat.com。地址為172.16.100.5…

    Linux干貨 2016-04-06
  • 基于Cobbler實現多版本系統批量部署

    前言 運維自動化在生產環境中占據著舉足輕重的地位,尤其是面對幾百臺,幾千臺甚至幾萬臺的服務器時,僅僅是安裝操作系統,如果不通過自動化來完成,根本是不可想象的。記得前面我們探究了基于PXE實現系統全自動安裝,但PXE同時只能提供單一操作系統的批量部署,面對生產環境中不同服務器的需求,該如何實現批量部署多版本的操作系統呢?Cobbler便可以的滿足這一實際需求,…

    Linux干貨 2015-07-09
欧美性久久久久