一:/etc/default/useradd

     /etc/default/useradd 创建用户的默认配置文件

    GROUP=100 表示使用useradd -N时默认使用的组为GIP为100的组

    HOME=/home 自动创建家目录时,从哪个目录下创建与用户同名的家目录

    INACTIVE=-1 用户是否设置密码过期后,多少天帐户过期,为-1时,不会触发帐户过期

    EXPIRE=  是否指定一个帐户过期时间,为空表示帐户默认永不过期

    SHELL=/bin/bash 使用useradd创建用户时,如不使用-s 指定则默认的用户shell为/bin/bash

    SKEL=/etc/skel  自动创建家目录时,从哪个目录拷贝模板文件

    CREATE_MAIL_SPOOL=yes  创建用户时是否在/var/spool/mail下为用户与用户同名的邮箱文件。

     手工创建家目录的方法:

    (1)mkdir /home/wangkai

    (2)chmod 700 /home/wangkai

    (3)cp -r /etc/skel/.[^.]*  /home/wangkai

    (4)chown -R wangkai:wangkai /home/wangkai

QQ截图20180116203530.png

QQ截图20180116203631.png

二:特殊权限

SUID:当对一个可执行的二进制文件作用了suid权限之后,任何人在执行该文件时临时拥有其所属人的权限。

SGID:当对一个可执行的二进制文件作用了sgid权限之后,任何人在执行该文件时临时拥有其所属组的权限。

当对于一个目录作用了sgid权限之后,任何人在该目录下创建的文件的所属组与该目录的所属组相同。

         (需要注意的是文件必须是可执行的二进制文件,而非shell等解释型语言文件)

Sticky:当对于一个目录作用了sticky权限之后,该目录下的文件仅其文件的所属人,或目录的所属人及root才能删除。

        chmod u+s 4xxx

        chmod g+s 2xxx

        chmod o+t 1xxx

        即有suid又有sgid  6xxx

        即有suid又有sticky 5xxx

        即有sgid又有Sticky 3xxx

        全有7xxx

        权限位原本有x的,加上特殊权限后,显示为小写,原本无x,显示为大写。

实验一:(1)在/app下创建wuguo文件,将权限改为400,所属人,所属组改为leibei。将/bin/cat拷贝到/app下并将所属人所属组改为刘备,设置权限SUID。

        (2)用echo命令将hello输入到wuguo中。

        (3)运行/bin/cat wuguo 发现不成功,运行/app/lbcat /app/wuguo 成功

         原因:运行/bin/cat wuguo时,受到wuguo文件权限的限制,执行不成功,当运行/app/lbcat /app/wuguo时执行这个文件后,临时拥有了它的所属人权限,执行成功。

 1.png

2.png

实验二:刘备关羽张飞三个用户有一个共享目录叫shuguo,要求三人的主组不一样的情况下,三人在Shuguo目录下所创建的文件,彼此之间可以读取及修改。但不能删除其他人创建的文件。

3.png

4.png

5.png

文件特定权限

    chattr +a 不能删除,不能改名,不能修改,可以追加

    chattr +i 不能删除,不能改名,不能修改,不能追加

    lsattr 查看权限


三:ACL


  1.传统的Linux文件系统的权限控制是通过user、group、other与r(读)、w(写)、x(执行)的不同组合来实现的。随着应用的发展,这些权限组合已不能适应现时复杂的文件系统权限控制要求。例如,我们可能需把一个文件的读权限和写权限分别赋予两个不同的用户或一个用户和一个组这样的组合。传统的权限管理设置起来就力不从心了,为了解决这些问题,Linux开发出了一套新的文件系统权限管理方法,叫文件访问控制列表(Access Control Lists,ACL)。

  2.ACL的作用:实现权限的灵活管理,除了文件的所有者,所属组还可以对更多的用户进行权限设置。

  3.centos6当中对新建分区开启acl的过程 

(1)创建分区

fdisk /dev/sda

n回车

回车

+2G回车

w回车

(2)同步分区表

partx -a /dev/sda

(3)创建文件系统

mkfs.ext4 /dev/sda6

(4)开启acl支持

tune2fs -o acl /dev/sda6

(5)查看acl

tune2fs -l /dev/sda6 |grep option

注:centos7中的所有文件系统以及Centos6随着操作系统安装是划分的文件系统均已默认开启acl。

ACL生效顺序:owner > acl user > group 与 acl group 谁的权限多,谁优先  > other

  4.ACL的查看及设置

getfacl file |directory

setfacl -m u:wang:rwx file|directory

setfacl -Rm g:sales:rwX directory 

setfacl -M file.acl file|directory

setfacl -m g:salesgroup:rw file| directory

setfacl -m d:u:wang:rx directory 

setfacl -x u:wang file |directory

setfacl -X file.acl directory

setfacl -m m:r-x file |directory  设置上限阀值 或chmod g=r-x

setfacl -d -m u/g:username/groupname file |directory 设置默认权限

setfacl -k file |directory 清除默认权限

setfacl -b file |directory 清除acl属性

注意: 一旦设置mask,原本的组权限便不能更改,而且原先显示组权限的地方显示mask,不在显示组权限。

6.png

  5.acl权限的备份及还原

getfacl file |directory > acl.txt

setfacl --restore acl.txt

练习:

1、在/testdir/dir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。

思路:在该目录的组上设置特殊权限g+s,然后在该目录上设置默认ACL,设置g2:rwx;g3:r-x。

2、备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限

getfacl /testdir/dir > /root/acl.txt

setfacl --restore /root/acl.txt

四:文本处理

            1.cat

                -E 显示换行符$

                -v 显示^M(window中以^M$结尾)

                -T 显示^I即tab

                -A = -EvT

                -n 输出的结果前显示行号

                -b 输出的结果前显示行号,非空行不参与排列

                -s 将连续的空行压缩为一行

                

                

            2.sort

                -n 按数字排列

                -r 倒序排列,默认升序

                -t 指定分隔符

                -k 指定哪一列

                -f 忽略大小写

                -u 删除重复行

            3.head -n 10 /ect/fstab:输出文件前10行

                   -c 10 文件名 按字节查看前10个字节

              tail -n 10 /ect/fstab:输出文件后10行

                   -c 10 文件名 :按字节查看后10个字节。

                   -f 文件名:动态显示,可用来查看日志。 

              cut 

                   -d 指定分隔符(默认为tab)

                   -f 取第几列 

                   -c 安字符切割  

                   --output-delimiter=STRING 指定输出的分隔符

               paste:合并两个文件同一行号到一行。

                        -d 指定分隔符

                        -s 变成一行输出

               例: paste  file1 file2 -d:

             练习:(1)利用df,取出分区利用率的最大值,只要数字。

                    df |tr -s " " : |cut -d: -f5 |sort -n |tail -n 1 |cut -d% -f1

                  (2)列出当前系统中的所有用户的uid

                      cat /etc/passwd|cut -d: -f1,3 --output-delimiter=的UID是  

            4.wc:统计工具

                 -l 只计数行数

                 -w 只计数单词数

                 -c 字节

                 -m 字符

            5.uniq

                 去除连续重复行,往往和sort配合使用,先排序,再去重

                -c 显示重复的次数

                -d 仅显示重复行

                -u 仅显示非重复行

             实验:通过查看httpd的访问日志/var/log/httpd/access_log来显示出访问网站最多的来源ip列表,显示结果时显示出访问次数。

             答案:cut -d" " -f1 access_log  |sort |uniq -c |sort -nr

             网站部署过程

            [root@centos6 ~]# service httpd restart

            [root@centos6 ~]# iptables -F

            [root@centos6 ~]# cd /var/www/html/

            [root@centos6 html]# vim index.html   

            

            6. diff 

            diff f1 f2 比较两个文件的不同之处

            diff -u f1 f2 > diff.log

            rm -f f2

            patch -b f1 diff.log

            mv f1 f2

            mv f1.orig f1 

            

            练习:

            以数字方式显示/etc/passwd文件的权限

            stat -c %a /etc/passwd

            stat /etc/passwd |head -4 |tail -1 |tr [:punct:] - |cut -d- -f3 |cut -c 2-4

            7.png

            

            

五:umask

  当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限"补码",而chmod设置的是文件权限码。一般可在/etc/profile、/etc/bashrc、$ [HOME]/.bash_profile、$[HOME]/.profile或$[HOME]/.bashrc中设置umask值。具体取决于Linux发行版。

     修改方式为:umask xxx,这种方式修改后不能长期存在(类似于系统的变量),要想一直存在,umask值可以存储在/etc/bashrc当中,使所有用户均被设置,也可以存在~/.bashrc只对某用户设置。

六:grep 

--color=auto 关键字高亮显示

-v 反向搜索

-i 忽略大小写

-n 显示行号

-c 不显示搜索结果,仅显示匹配的行数

-o 仅显示匹配到的字符串

-q 静默输出

    grep -q root /etc/passwd  

    echo $? 

    若$?为0表示执行成功若结果为1,表示未找到该字符串

    grep -q root /etc/passwd && echo 找到了 ||echo 未找到 

    grep -q root /etc/passwd &> /dev/null && echo 找到了 ||echo 未找到 

    以上两个例子效果相同原理不一。要注意。

-A #  显示搜索行及其向下相临的#行

-B #  显示搜索行及其向上相临的#行

    例子:nmap -v -sP 172.18.250.0/24 |grep -B1 'Host is up' |grep for |cut -d" " -f5

-C #  显示搜索行及其向上和向下相临的#行

-e char1 -e char2 [-e charN] 多个选项间or关系

-w 匹配整个单词

-E 或egrep 支持扩展正则表达式

-F 或fgrep 不支持正则表达式

grep "$USER" /etc/passwd :显示变量;

grep '$USER' /etc/passwd :显示字符串$USER

grep    `whoami` /etc/passwd :显示命令执行的结果

七:正则表达式

    正则表达式由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能。grep、awk、sed等命令可以支持正则表达式。

    元字符分类:字符匹配,匹配次数,位置锚定,分组。

    

例子:去除配置文件中的注释行和空白行

    grep -v "^#\|^[[:blank:]]*$" /etc/httpd/conf/httpd.conf

    通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。通配符必须是完全匹配

    7.1 通配符

元字符作用
*匹配0个或任意多个字符,也就是可以匹配任何内容
匹配任意一个字符
[]匹配[ ]中任意一个字符
[-]匹配括号中任意一个字符,-代表一个范围,例如:[a-z]代表匹配一个小写字母
[^]逻辑非,表示匹配不是中括号内的一个字符,例如[^0-9]代表匹配一个不是数字的字符

 7.2基础正则表达式式

元字符作用
*前一个字符匹配0次或任意多次,匹配0次前一个字符则表示匹配任意字符,包括空白行
.匹配除了换行符以外任意一个字符,“.*”匹配所有内容
^用于指定匹配字符串的头部,也称行首定位符;匹配行首。例如:^hello会匹配以hello开头的行,grep -n “^$” test.txt匹配空白行并显示行号
$用于指定匹配字符串的尾部,也称行尾定位符;匹配行尾。例如:hello$会匹配以hello结尾的行
[]匹配中括号中指定的任意一个字符,只匹配一个字符,要匹配[则要转义\[
[^]匹配除中括号的字符以外的任意一个字符
\转义符用于取消特殊符号的含义,匹配包含以.结尾的行grep “\.$” test.txt
\{n\}表示其前面的字符恰好出现n次。例如:[0-9]\{4\}匹配4位数字,但注意添加两边的定界符,以精确匹配
\{n,\}表示其前面的字符出现不小于n次。例如:[0-9]\{2,\}匹配2位以上的数字
\{,n\}表示其前面的字符出现不大于n次。例如:[0-9]\{,2\}匹配2位以下的数字
\{n,m\}表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6,8}匹配6到8位的小写字母

元字符

描述

[:lower:]

小写字母

[:upper:]

大写字母

[:alpha:]

所有字母

[:digit:]

数字

[:alnum:]

所有数字和字母

[:punct:]

标点符号

[:space:]

空白字符

\?

匹配其前面的字符1次或0次

\+匹配其前面的字符至少1次

^$(^[:space:]*$)

表示空行(空白行)

\<或\b

铆定词首,其后面的任意字符必须作为单词的首部出现

\>或\b

铆定词尾,其前面的任意字符必须作为单词的尾部出现

\(\)

分组

\(ab\)*

ab作为一个整体,可以出现任意次

\(ab\).*\1

引用第一个左括号以及与之对应的右括号所包括的所有内容

\(ab\).*\2

引用第二个左括号以及与之对应的右括号所包括的所有内容

    7.3扩展正则表达式

元字符作用
|管道符,表示“或”,即匹配其中任何一个,”book|desk”将匹配”book”或”desk”
-减号,用于指明字符范围, “[a-c]”将匹配包含a、b和c中任意一个字符的字符串

字符匹配

.

匹配任意单个字符

[]

匹配指定范围内的任意单个字符

[^]

匹配指定范围外的任意单个字符

次数匹配

*

匹配其前字符任意次

?

匹配其前字符0次或1次

+

匹配其前字符至少1次,类似于基本正则表达式\{1,\}

{m,n}

匹配其前面的字符至少m次,至多n次

位置铆定

^

行首

$

行尾

\<或\b

词首

\>或\b

词尾

分组

().*\1\2\3


或者

|

or  a|b ,a或者b ,有一个就行

C|cat--> C或cat

(C|c)at-->Cat或cat

单引号’’强引用,不做变量替换的

双引号””弱引用,内部的变量会替换

 7.4:非贪婪匹配

贪婪匹配 
在满足匹配时,匹配尽可能长的字符串,默认情况下采用贪婪匹配

string pattern1 = @"a.*c";   // greedy match Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abcabc" 123

非贪婪匹配 
在满足匹配时,匹配尽可能短的字符串,使用?表示非贪婪匹配

string pattern1 = @"a.*?c";   // non-greedy match Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abc"1234

几个常用的非贪婪匹配Pattern

      • *? 重复任意次,但尽可能少重复

      • +? 重复一次货更多次,但尽可能少重复

      • ?? 重复0次或1次,但尽可能少重复

      • {n, m}? 重复n到m次,但尽可能少重复

      • {n,}? 重复n次以上,但尽可能少重复

  • 练习:

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

cat /proc/meminfo |grep "^s\|S"

cat /proc/meminfo |grep -i ^s

grep ^[sS] /proc/meminfo

grep -e ^s -e ^S /proc/meminfo

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

cat /etc/passwd  |grep -v "/bin/bash$"

3、显示用户rpc默认的shell程序

grep -w "^rpc" /etc/passwd |cut -d: -f7

4、找出/etc/passwd中的两位或三位数

cat /etc/passwd | grep  -o "\<[[:digit:]]\{2,3\}\>"

5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

cat /etc/grub2.cfg | grep "^[[:space:]]\+[^[:space:]]"

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行

netstat -tan | grep "LISTEN[[:space:]]\+$"

7、显示CentOS7上所有系统用户的用户名和UID

cat /etc/passwd |cut -d: -f1,3 | grep "\<[0-9]\{1,3\}\>"

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

cat /etc/passwd | grep "\(^.*\)\>.*\<\1$"

9、利用df和grep,取出磁盘各分区利用率,并从大到小排序

df | grep -o "[0-9]\{1,3\}%" | grep -o "[0-9]\+" | sort -nr

df |grep "^/dev/sd" |grep -o "[[:digit:]]\{1,3\}%" |tr -d % |sort -nr

作业:

1、显示三个用户root、mage、wang的UID和默认shell

cat /etc/passwd|cut -d: -f1,3|grep -e "root\>" -e "mage"\ -e "wang\>"

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

grep "(^[[:alpha:]]+|^_+.*)\(\)" /etc/rc.d/init.d/functions

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

 echo /etc/rc.d/init.d/functions | egrep -o "[^/]+$"

4、使用egrep取出上面路径的目录名

echo /etc/rc.d/init.d/functions | egrep -o "^.*\/" | egrep -o "^.*[^/]" 

5、统计last命令中以root登录的每个主机IP地址登录次数

last |egrep "\<root\>" |tr -s " "|cut -d " " -f1,3|sort|uniq -c

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

[0-9] [1-9][0-9] 1[0-9]{2} 2[0-4][0-9] 25[0-5]

7、显示ifconfig命令结果中所有IPv4地址

ifconfig |grep "inet\b"|tr -s " "|cut -d" " -f3

8、将此字符串:welcome to  magedu linux 中的每个字符去重并排序,重复次数多的排到前面

echo welcome to  magedu linux |grep -o [[:alpha:]]|sort|uniq  -c|sort -rn


八:vim

 三种主要模式

 命令模式 (default): 移动光标,复制,剪切,粘贴,撤销,重做,搜索,进入其他模式

  移动光标:

    h向左移动

    l向右移动

    j向下移动

    k向上移动

    配合#h,#l,#j,#k可一次性移动#个字符

    w跳到下一个单词的词首

    b跳到上一个单词的词首

    H跳到当前页首

    M跳到当前页中

    L跳到当前页尾

    gg跳到整个文件的首行

    G跳到整个文件的末行

    ^移到非空格开头的行首

    $移到行尾

    #G跳到指定行,或退出模式下:#

    Ctrl+f: 向文件尾部翻一屏

    Ctrl+b: 向文件首部翻一屏

    Ctrl+d: 向文件尾部翻半屏

    Ctrl+u:向文件首部翻半屏

    r替换一个字符

  d剪切

    dd剪切当前行

    #dd剪切#行

    dw剪切一个单词

    d^从光标所在处剪切到行首

    d$或D从光标所在处剪切到行尾

    

  y复制

    yy或Y复制当前行

    #yy复制#行

    yw复制一个单词

    y^从光标所在处复制到行首

    y$从光标所在处复制到行尾


  p粘贴

    p当前行向下粘贴或光标所在处向后粘贴

    P当前行向上粘贴或光标所在处向前粘贴

    替换模式 R进入 Esc退出

    

  从命令模式进入插入模式

    i光标在哪从哪进入

    I光标移至行首同时进入插入模式

    a光标向后移一个字符同时进入插入模式

    A光标移至行尾同时进入插入模式

    o光标向下插入一新行同时进入插入模式

    O光标向上插入一新行同时进入插入模式

插入模式:文本编辑

    退出模式:保存、退出

    w:保存

    q:退出

    q!强制退出

    wq或x 保存并退出

    w!当前用户为该文件所属人时,如果该文件为read only,可加上!强制保存。

    在退出模式下返回命令模式EscEsc或Enter

    r /path/filename 读取另一个文件的内容并将输出结果写入文件

    w /path/filename 另存为(确认当前用户对该路径中的最后一级目录有wx权限)

    ! command 执行某条命令,将输出结果显示在终端上

    r! command 执行某条命令,在光标所在的当前行向下插入新行并将输出结果输入

    .! command 执行某条命令,替换光标所在的当前行并将输出结果输入

    搜索

    /关键字 

    n向下找

    N向上找

    ?关键字

    n向上找

    N向下找

    

    

例子:

dog pig dog cat dog

pig dog root dog cat

dog linux roat dog cat

pig root dog cat dog pig

fish dog rooter pig dog

bird dog cat rbbt pig


把以上内容中的rxxt换成rxxter,已经是rxxter的不变

%s@\(r..t\)\>@\1er@gi


http://mirrors.163.com/  换成https://mirrors.sina.com/dvd


:%s@http://mirrors.163.com@https://mirrors.sina.com/dvd@gi


作业:

1、复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的行首的空白字符

:%s@^[[:blank:]]\+@@g

2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首添加一个#号

:%s@\(^[[:blank:]]\+\)@#\1@g