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\).*\1abcmnaaa
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。