cp,chmod,chown,chgrp,grep命令详解及应用实例

cp

功能:复制文件或目录

常用选项:

-a 归档

-b 目标文件存在创建备份,备份文件是文件名跟~

-f 强制复制文件或目录

-r 递归复制目录

-p 保留原有文件或目录属性

-i 覆盖文件之前先询问用户

-u 当源文件比目的文件修改时间新时才复制

-v 显示复制信息

示例:

复制目录:

# cp -rf test /opt

chmod

操作三类用户的权限:使用八进制来进行
 chmod [-R] OCTAL-MODE FILE...

        操作指定类别使用者的权限:=
            u: 属主
            g: 属组
            o: 其它
            a: all

            指定一个或多个类别=mode

            chmod u=rw 
            chmod ug=rw
            chmod o= 

        操作指定类别的使用者指定权限位:+/-
            chmod u+x 
            chmod +w 

        --reference=FILE: 参考FILE的权限

        -R: 递归修改

练习:复制/etc/skel及其内部的所有内容为/home/mageedu; 要求此目录及其内部的所有文件对其它用户和组没有任何访问权限;
        # cp -r /etc/skep /home/mageedu
        # chmod -R go= /home/mageedu

 chown

chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

只有文件主和超级用户才可以便用该命令

语法

chown(选项)(参数)

选项

-c或——changes:效果类似“-v”参数,但仅回报更改的部分;

-f或--quite或——silent:不显示错误信息;

-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;

-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;

-v或——version:显示指令执行过程;

--dereference:效果和“-h”参数相同;

--help:在线帮助;

--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;

--version:显示版本信息。

参数

用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;

文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。

实例

将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu:

chown -R liu /usr/meng

 chgrp

作用:更改文档的所属用户组

语法:#chgrp  -R  groupname  文档的路径

grep

语法格式:
            grep [option]... 'PATTERN' FILE...

                --color=auto

        正则表达式:
            是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能;
                元字符:不表示其字面意义,而用于额外功能性描述

            正则表达式:正则表达式引擎

            基本正则表达式:grep
            扩展正则表达式: egrep, grep -E
            fgrep: fast, 不支持使用正则表达式

        基本正则表达式的元字符:
            字符匹配:
                .: 匹配任意单个字符
                []: 匹配指定范围内的任意单个字符
                    [0-9], [[:digit:]]
                    [a-z], [[:lower:]]
                    [A-Z], [[:upper:]]
                    [[:space:]]
                    [[:punct:]]
                    [[:alpha:]]
                    [[:alnum:]]
                [^]:
            次数匹配元字符:用于实现指定其前面的字符所能够出现的次数
                *: 任意长度,它前面的字符可以出现任意次
                    例如:x*y
                        xxy, xyy, y, 
                \?: 0次或1次,它前面的字符是可有可无的
                    例如:x\?y
                        xy, y, ay
                \{m\}: m次,它前的字符要出现m次
                    例如:x\{2\}y
                        xy, xxy, y, xxxxy, xyy
                \{m,n\}: 至少m次,至多n次
                    例如:x\{2,5\}y
                        xy, y, xxy
                \{m,\}:至少m次
                \{0,n\}: 至多n次

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

                    工作于贪婪模式:尽可能多的去匹配
            位置锚定:
                ^: 行首锚定;
                    写在模式最左侧
                $: 行尾锚定:
                    写在模式最右侧
                ^$: 空白行

                不包含特殊字符的连续字符组成的串叫单词:
                \<: 词首,出现于单词左侧,\b
                    \<char
                \>: 词尾,出现于单词右侧, \b
                    char\>
            分组:
                \(\)
                    例如:\(ab\)*
                    分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

                引用:
                    例如\(ab\(x\)y\).*\(mn\)
                        有编号:自左而后的左括号,以及与其匹配右括号
                        \(a\(b\(c\)\)mn\(x\)\).*\1

                \#: 引用第n个括号所匹配到的内容,而非模式本身
                    例如:
                        \(ab\?c\).*\1

                            abcmnaaa
                            abcmnabc
                            abcmnac
                            acxyac

        命令选项:
            -v: 反向选取
            -o: 仅显示匹配的字串,而非字串所在的行
            -i: ignore-case,忽略字符大小写
            -E: 支持使用扩展正则表达式
            -A #打印匹配的后几行
            -B #打印匹配的前几行
            -C #打印匹配的前后几行

 练习:

1.复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的其他属组和其他用户没有任何访问权限。

[root@dxlcentOS ~]# cp -a /etc/skel/ /home/tuser1
[root@dxlcentOS ~]# chmod -R go= /home/tuser1 递归修改权限,g:组的权限,o其他人权限,后面没有加权限,表示取消他们的权限

2.编辑/etc/group文件,添加组hadood.

[root@dxlcentOS ~]# vim /etc/group
hadoop:x:2050:
加入一行hadoop:x:2050:,指定组名和组ID,组ID不能和存在的ID号相同,要是没有指定组ID,则是无效组,不能往里面添加用户。

3.手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组为ID为hadoop组的ID号,其家目录为/home/hadoop。

[root@dxlcentOS ~]# vim /etc/passwd
hadoop:x:2049:2050::/home/hadoop:/bin/bash
Hadoop用户增加进用户信息库后,还没有家目录,还要复制/etc/skel过来

4.复制/etc/skel目录为/home/haddoop,要求/home/haddoop目录的属组和其他用户没有任何访问权限。

[root@dxlcentOS ~]# cp -a /etc/skel /home/hadoop
[root@dxlcentOS ~]# chmod go= /home/hadoop

5,修改/home/haddoop目录及其内部所有文件属主为hadoop,属组为hadoop。

[root@dxlcentOS ~]# chown -R hadoop /home/hadoop | chgrp -R hadoop /home/hadoop

6.显示/proc/meminfo文件中,所有以大写或小写S开头的行,两种方式。

[hadoop@dxlcentOS ~]$ grep -i “^s” /proc/meminfo
[hadoop@dxlcentOS ~]$ grep “^[Ss]” /proc/meminfo

7.显示/etc/passwd文件中默认shell为非/sbin/nologin的用户.

[hadoop@dxlcentOS ~]$ grep -v “/sbin/nologin” /etc/passwd

8.显示/etc/passwd文件中默认shell为/bin/bash的用户.

[root@dxlcentOS ~]# grep “/bin/bash” /etc/passwd
root:x:0:0:root:/root:/bin/bash
centos:x:1000:1000::/home/centos:/bin/bash

9.找出/etc/passwd文件中的一位数或二位数

[root@dxlcentOS ~]# grep “\<[0-9]\{1,2\}\>” /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
…….

10.显示/boot/grub/grup.conf文件中,以至少一个空白字符开头的行.

[root@dxl ~ 12:33:45]# grep “^[[:space:]]\+” /boot/grub/grub.conf

11.显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后面至少有一个非空白字符的行.

[root@dxl ~ 12:46:27]# grep "^[#][[:space:]]\+[^[:space:]]\+" /boot/grub/grub.conf
# grub.conf generated by anaconda
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-[generic-]version.img

12.找出”netstat -tan”命令的结果中以’LISTEN’,后跟空白字符结尾的行。

[root@dxl ~ 12:59:51]# netstat -tan | grep "LISTEN[[:space:]]\+$"
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN  

13.添加用户bash, testbash, basher以及nologin(其shell为/sbin/nologin);而后找出当前系统上其用户名和默认shell相同的用户信息。

第一步先添加用户bash, testbash, basher以及nologin

第二步

[root@dxl ~ 13:24:53]# grep  -E "^([^:]+\>).*\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:504:504::/home/bash:/bin/bash
nologin:x:507:507::/home/nologin:/sbin/nologin

总结:通过编辑组信息库文件/etc/grouptonggu添加的组,其ID不能和存在的组ID相同。

通过手动编辑用户信息库/etc/passwd文件添加的用户并指定家目录路径后,并不立即生效,还要复制/etc/skel目录为/home/hadoop,并修改其属主和属组为hadoop。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值