本章Blog相关Linux知识点


解析:在数据库按搜索码查找相对应的条目,并找与之对应额外的其他数据库的过程;名称解析:UID ,组名解析:GID

数据库:文本文件,sql数据库,ldap数据库,用户库:/etc/passwd ,密码库 :/etc/shadow,组库:/etc/group,组密码库:/etc/gshadow

加密方法:对称加密——加密和解密使用同一个密码,如DES,AES ;公钥加密——每个密码都成对出现,一个公钥,一个私钥,如DSA,RSA;单向加密——常用于数据完整性校验 ,特点1、雪崩效应,2、定长输出,3、不可逆 ,如MD5 ,SHA1

# cat /etc/passwd(各项涵义如),用户名:密码占位符:UID:GID(基本组):备注信息:HOMEDIR(家目录):默认SHell

# cat /etc/shadow(各项涵义如),用户名:密码占位符:最近一次密码修改时间:最短使用时间:最长使用期限:密码使用警告区间:非活动区间:账号的过期期限:预留段

用户类别:管理员(id为0),系统用户(id 1-499),一般用户(id 500-60000)

用户组类别(以用户为视角):私有组——创建用户时,如果没有为其指定所属组,系统会自动为其创建一个与用户名相同的组;基本组——用户的默认组;附加组——额外组,默认组意外的其他组

权限 r  w  x

文件: r  —— 可读 ,可以使用cat 等命令查看 ;w —— 可写 ,可以使用vi nano编辑文本内容 ;x —— 可以在命令提示付下当做命令提交给内核执行

目录: r  —— 可对此目录使用ls 命令列出内部所有文件 ;w —— 可在此目录中创建、删除文件 ;x ——  可使用cd 切换到此目录,也可使用ls -l 产看内部文件的详细信息

三类用户: u ——owner ;g——group ;o——other

进程的属主,是否与文件的属主相同:如果相同,进程则以文件属主的权限来访问文件;否则,进程的属主所属的组,是否其中之一与文件的属组相同;如果相同,进程则以文件的属组的权限来访问文件,否则,进程则以文件的其他用户的权限来访问文件


Linux用户组管理


useradd  创建用户,命令格式

# useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid [ -o]] [-n] [-r] login
# useradd -D [-g default_group] [-b default_home] [-f default_inactive] [-e default_expire_date]  [-s default_shell]

    -u :指定UID

    -g :指定GID(基本组),但GID要先存在

    -G:指定GID(附加组),但组要先存在

    -c :“COMMENT”注释信息

    -d :指定家目录

    -s :指定Shell路径  /etc/shells:指定了当前系统中可用的安全shell ,# echo $SHELL 显示当前shell

    -m -k :强制为用户创建家目录,并把shell文件拷贝到家目录

    -M :/etc/login.defs ,不为用户创建家目录

    -r :创建系统用户 ,id 1-499 ,不为用户创建家目录且默认shell为 /sbin/nologin

userdel 删除用户,命令格式

# userdel [-r] login

    若不加任意选项,默认不删除家目录

    -r :删除用户的同时,删除家目录

passwd 修改密码(普通用户通过passwd 修改自己的密码,管理员可通过passwd修改自己密码,亦可通过passwd USERNAME 命令修改普通用户的密码),命令格式

#  passwd  [-k]  [-l]  [-u  [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

    --stdin

    -l :lock 锁定用户

    -u :unlock ,解锁用户

示例:echo “redhat”| passwd --stdin user3  设置用户user3 密码为redhat

usermod 修改用户账号属性,命令格式

# usermod [-c comment] [-d home_dir [ -m]][-e expire_date] [-f inactive_time]   [-g initial_group] [-G group[,...]]   [-l login_name] [-s shell]  [-u uid [ -o]] login

    -u :指定UID

    -g :指定GID(基本组)

    -a -G:指定GID(附加组),为用户在原有的附加组追加附加组,若不使用-a ,则会覆盖原有的附加组

    -c :“COMMENT”注释信息

    -d -m:指定家目录,并移动此前家目录的文件到新的家目录

    -s :指定Shell路径  /etc/shells:指定了当前系统中可用的安全shell ,# echo $SHELL 显示当前shell

    -L :lock 锁定用户

    -U :unlock ,解锁用户

    -l:调整Lgoin 新的用户名

# finger  查询用户账号信息 

# chsh USERNAME :change shell

# chfn COMMENT :change finger 注释信息

id 查看用户id号,命令格式

# id [OPTION]... [USERNAME]

    -u :显示UID ,可与-n组合使用

    -nu :显示用户名

    -g :显示GID ,可与-n组合使用

    -G :显示扩展GID,可与-n组合使用

groupadd 添加组,命令格式:

# groupadd [-g gid [-o]] [-r] [-f] group

    -g :指定GID

groupmod  修改组属性,命令格式

# groupmod [-g gid [-o]] [-n group_name] group

    -g :更改GID

    -n :更改群组名

# groupdel  group_name :删除组

# gpasswd group_name:调整组密码


Linux文件权限管理


只有管理员可以使用chgrp ,chown 命令调整文件权限属性

chown 改变文件所有者及所属组,命令格式

# chown [OPTION]... [OWNER][:[GROUP]] FILE...
# chown [OPTION]... --reference=RFILE FILE...

    -R :修改目录及其内部文件的所有者

    --reference=/path/to/somefile file :设置file的所有者与/path/to/somefile 的所有者一致

    chown user_name:group_name file :同时改变file文件的所有者和所属组

chgrp  改变文件所属组,命令格式

# chgrp [OPTION]... GROUP FILE...
# chgrp [OPTION]... --reference=RFILE FILE...

    -R :修改目录及其内部文件的所有者

    --reference=/path/to/somefile file :设置file的所有者与/path/to/somefile 的所有者一致

chmod  修改文件权限,命令格式

# chmod [OPTION]... MODE[,MODE]... FILE...
# chmod [OPTION]... OCTAL-MODE FILE...
# chmod [OPTION]... --reference=RFILE FILE...

    chmod [ugoa...][[+-=][rwx...]...] file :设置文件的用户的权限

    -R:修改目录及其内部文件的所有者

    --reference=/path/to/somefile file :设置file的所有者与/path/to/somefile 的所有者一致


Linux文本管理


wc 统计行数,单词数或字节数,命令格式

# wc [OPTION]... [FILE]...
# wc [OPTION]... --files0-from=F

    -l :统计行数

    -c :统计字符数

    -w :统计单词数

tr 字符转换或删除字符,命令格式

# tr [OPTION]... SET1 [SET2]
    -d ‘集合1’:删除集合1  

    tr ‘集合1’‘集合2’ :替换功能

例:# cat /etc/passwd | tr 'abcd'  'ABCD'   显示并替换文本内的abcd 为ABCD

例:# cat /etc/passwd | tr -d 'abcd'      显示并删除文本内的abcd 字符

cut 把文本中每行符合条件的片段做移除,命令格式

# cut OPTION... [FILE]...

    -d 字符 :指定分隔符

    -f n :指定显示的第n个片段

    -f n-m :指定显示第n 至 m片段

    -f n,m :指定显示第n 及第m片段

例:# cut -d: -f1,3 /etc/passwd    显示/etc/passwd 文本中以:做分隔符,显示第1 和第3个片段

例:# echo“THis is a new line”| cut -d' ' -f3    显示“THis is a new line" 文本中以'  '(空白符)做分隔,显示第3个片段

sort  文本内容排序,命令格式

# sort [OPTION]... [FILE]...
# sort [OPTION]... --files0-from=F

    -f :忽略字符大小写

    -n :按照数值大小排序

    -t 分隔符 -k 指定字段 :以指定字段进行排序

    -u :重复的行仅显示一次

例:# sort -n -t: -k3 /etc/passwd  ,文本/etc/passwd 中以:为分隔符 ,以第三个片段UID 按照数值大小进行排序显示

uniq 显示重复的行,命令格式

# uniq [OPTION]... [INPUT [OUTPUT]]

    -c :显示每行内容及重复次数

    -d :仅显示重复的行

    -u :仅显示不重复的行

例:#ls -d /etc/[Pp]* | wc -l     显示/etc/目录下以P或p 开头的文件并统计其个数


Linux文本处理工具之grep ,egrep    使用''  或""  引用


文本搜索工具grep 、egrep ——根据用户指定的文本模式对目标文件进行逐步搜索,显示能够被匹配的行

grep  ,egrep 显示匹配的行,命令格式

# grep [OPTIONS] PATTERN [FILE...]
# grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

    --color :颜色显示

    -v :取反显示,反向显示

    -i  :不区分字符大小写

    -o :仅显示被匹配的字符串,而非整行

    -E :支持扩展正则表达式 ,相当于egrep

例:grep -v  '^$’/etc/rc.d/rc.sysinit :显示非空白行 

正则表达式:是一类字符所书写的模式(PATTERN),包括基本正则表达式和扩展正则表达式

基本正则表达式:尽可能长的去匹配字符

    字符匹配:

    . :任意单个字符,例 # grep “r..t” /etc/rc.d/rc.sysinit  

    [ ] :指定范围内的任意单个字符  ,例 [Ps]    包含P或s 的任意单个字符

    [0-9] 或 [[:digit:]] :任意单个0-9的数字

    [a-z]或 [[:lower:]] :任意单个a-z 小写字母

    [A-Z]或[[:upper:]] :任意单个A-Z大写字母

    [[:alpha:]] :任意单个大小写字母

    [[:alnum:]] :任意单个带小写字母或数字

    [[:space:]] :任意单个空白符

    [[:punct:]] :任意单个特殊字符

    [^] :指定范围外的任意单个字符

    次数匹配:

    * :前面的字符出现任意次 ,例 # grep “x*y”/etc/rc.d/rc.sysinit ,与通配符不同 * 代表任意长度的任意字符

    .* :任意长度的任意字符

    \? :前面的字符出现0次或1次   ,与通配符不同 ? 匹配任意单个字符

    \{m\} :前面的字符匹配m次

    \{m,n\} :前面的字符至少匹配m次 ,至多匹配n次 例:# grep --color=auto‘x\{2,6\}y' /etc/rc.d/rc.sysinit

    位置锚定符:

    ^ :用于锚定行首 如,^Char

    $ :锚定行尾 如 ,Char$

    ^$ :空白行

    \<Char 或\b :锚定词首

    Char\> 或\b :锚定词尾

    分组符:

    \(\) :分组 ,如 \(AB\) 代表AB为一个整体

    引用:

    \1 :后向引用,引用前面的第一个左括号及与之对应的右括号中的模式所匹配的内容(引用前面一模一样的字符串,不是引用通配符格式)

    \n :与上文含义相似


扩展正则表达式:egrep :使用扩展正则表达式,相当于grep -E

    字符匹配:

    . :任意单个字符,例 # egrep “r..t” /etc/rc.d/rc.sysinit  

    [ ] :指定范围内的任意单个字符  ,例 [Ps]    包含P或s 的任意单个字符

    [0-9] 或 [[:digit:]] :任意单个0-9的数字

    [a-z]或 [[:lower:]] :任意单个a-z 小写字母

    [A-Z]或[[:upper:]] :任意单个A-Z大写字母

    [[:alpha:]] :任意单个大小写字母

    [[:alnum:]] :任意单个带小写字母或数字

    [[:space:]] :任意单个空白符

    [[:punct:]] :任意单个特殊字符

    [^] :指定范围外的任意单个字符

    次数匹配:

    * :前面的字符出现任意次 ,例 # grep “x*y”/etc/rc.d/rc.sysinit ,与通配符不同 * 代表任意长度的任意字符

    .* :任意长度的任意字符

    ? :前面的字符出现0次或1次   ,与通配符不同 ? 匹配任意单个字符

    + :匹配其前面的字符至少一次

    {m} :前面的字符匹配m次

    {m,n} :前面的字符至少匹配m次 ,至多匹配n次 例:# egrep --color=auto‘x\{2,6\}y' /etc/rc.d/rc.sysinit

    位置锚定符:

    ^ :用于锚定行首 如,^Char

    $ :锚定行尾 如 ,Char$

    ^$ :空白行

    \<Char 或\bChar :锚定词首

    \>Char 或Char\b :锚定词尾

    分组:

    () :分组 ,如 (AB) 代表AB为一个整体

    | :或者 (ab|bc) 代表ab 或bc ,左侧或右侧

    引用:

    \1 :后向引用,引用前面的第一个左括号及与之对应的右括号中的模式所匹配的内容(引用前面一模一样的字符串,不是引用通配符格式)

    \n :与上文含义相似

综上,基本正则表达式与扩展表达式的区别 ,基本正则表达式分组及次数匹配引用需要加 “\” ,而扩展基本表达式中分组及次数匹配无需加“\”,且支持“+”及 “|” 引用等 。


正则表达式练习题


1、显示/proc/meminfo 文件中以 大小写 s开头的行           
    # grep -i '^s' /proc/meminfo 或 # grep "[Ss]" /proc/meminfo 
2、取出默认shell为非bash的用户
    # grep -v '/bin/bash\b' /etc/passwd | cut -d: -f1
3、取出默认shell为bash的且其ID号最大的用户
    # grep  '/bin/bash\b' /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1
    # egrep  '/bin/bash\b' /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1
4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又至少一个非空白字符的行
     # grep '^#[[:space:]]\{1,\}[^[:space:]]\{1,\}' /etc/rc.d/rc.sysinit
5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行
     # grep '^[[:space:]]\{1\}[^[:space:]]\{1,\}' /boot/grub/grub.conf
6、找出/etc/passwd文件中一位数或2位数
     #grep  '\<[0-9]\{1,2\}\>' /etc/passwd
7、找出ifconfig 命令结果中1到255之间的整数
    # ifconfig | grep -E "\<([1-9][1-9]|[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"  注意:数字要锚定词首和词尾
8、查看当前系统上root用户的所有信息
    # grep "^root\b" /etc/passwd
9、添加用户bash和testbash ,而后找出当前系统上其用户名和默认shell相同的用户
    # grep "^\([[:alnum:]]\{1,\}\)\>.*\1$" /etc/passwd
10、找出netstat -tan命令执行结果一“LISTEN”或“ESTABLISHED”结尾的行
    # netstat -tan | egrep "LISTEN|ESTABLISHED"
11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示。
     #cut -d: -f7 /etc/passwd | sort -u


本章blog命令汇总


# grep [OPTIONS] PATTERN [FILE...]  :显示匹配条件的行

# sort [OPTION]... [FILE]... :对文本内行排序

# wc [OPTION]... [FILE]... :统计行数,单词数或字节数

# tr [OPTION]... SET1 [SET2] :统计行数,单词数或字节数

# cut OPTION... [FILE]... :把文本中每行符合条件的片段做移除

# chown [OPTION]... [OWNER][:[GROUP]] FILE... :改变文件所有者及所属组

# chgrp [OPTION]... GROUP FILE... :改变文件所属组

# chmod [OPTION]... MODE[,MODE]... FILE... :修改文件权限

# useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group] [-G group[,...]] [-m [-k skeleton_dir] | -M] [-s shell] [-u uid [ -o]] [-n] [-r] login  :创建用户

# userdel [-r] login :删除用户

#  passwd  [-k]  [-l]  [-u  [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username] :修改密码

# usermod [-c comment] [-d home_dir [ -m]][-e expire_date] [-f inactive_time]   [-g initial_group] [-G group[,...]]   [-l login_name] [-s shell]  [-u uid [ -o]] login : 修改用户账号属性

# finger  :查询用户账号信息 

# chsh USERNAME :change shell

# chfn COMMENT :change finger 注释信息

# id [OPTION]... [USERNAME] :查看用户id号

# groupadd [-g gid [-o]] [-r] [-f] group  :添加组

# groupmod [-g gid [-o]] [-n group_name] group :修改组属性

# groupdel  group_name :删除组

# gpasswd group_name:调整组密码

# uniq [OPTION]... [INPUT [OUTPUT]] :显示或移除重复的行