马哥M28-第五天、
linux安全的上下文:
进程的发起者 命令 对象
root ping 127.0.0.1
root touch testfile1
primary group :主要组、私有组
supplementary group : 辅助组、附加组、公有组
/etc/passwd:(里面记录的用户的密码映射到了/etc/shadow)
pwconv :将passwd当中的密码映射到了/etc/shadow
pwunconv:取消映射,密码仍然放在 /etc/passwd当中
/etc/shadow:
用户名
密码位
密码上一次的修改时间
密码的最小存活期
密码的最大存活期
密码过期之前提前多少天提醒用户将会过期
密码过期之后在用户仍不修改密码后多少天触发账户过期
账户过期时间
保留位(暂未使用)
chage [OPTION]...LOGIN
-d LAST_DAY
-E --expiredate EXPIRE_DATE(口令过期)
-I --inactice INACTIE (账户锁定失效未激活)
-m --mindays MIN_DAYS
-M --maxdays MAX_DAYS
-W --warndays WARN_DAYS
-l 显示密码策略
示例:
chage -d 0 tom 下一次登录强制重设密码
chage -m 0 -M 42 -W 14 -I 7 tom
chage -E 2016-09-10 tom
passwd username :指定要修改密码的用户名(仅root运行,普通用户不输入用户名,可直接修改自己的密码)
-l 锁定用户 实际就是在密码位前加!!
-u 取消用户锁定
-e 强制用户下次登录时更改密码
-n mindays :指定最短使用期限
-x maxdays:指定最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays: 非活动期限
--stdin 从标准输入接收用户密码 (echo "mima" |passwd --stdin tom):多个用户设置同个密码需要使用脚本循环此执行过程
/etc/group
组名
组密码:映射到了/etc/gshadow
GID
组成员:附加组的成员
grpconv 将组密码映射到了/etc/gshadow
grpunconv 取消组密码的映射
/etc/gshadow
组名
组密码
管理员:更改组密码和成员
组成员:功能同/etc/group 中的第四列
vipw = vim /etc/passwd
vipw -s = vim /etc/shadow
vigr = vim /etc/group
vigr -s = vim /etc/gshadow
pwck 检查/etc/passwd 语法
grpck 检查/etc/group 语法
useradd & adduser
-u UID 指定uid 默认从1000开始往后
-o 与 -u配合,不检查UID的唯一性
-g GID或组名 指定用户的主要组为某个已存在的组,可以指定GID也可以指定组名
-G 指定附加组 以逗号为间隔可以同时指定多个,组必须事先存在,可以指定组名或者组ID
-c 注释信息
-d 指定目录路径,如不指定默认在/home下与用户同名。指定时注意,目录名需要已存在,基名不存在。
-s 指定登录shell如下
useradd -s /sbin/nologin test ->创建shell为不可交互式登录的用户
-N 不创建私用组做主组,使用users组做主组
-r 创建系统用户(centos 6及之前的版本 <500,centos 7<1000)
/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下为用户与用户同名的邮箱文件
手工创建家目录的方法
mkdir /home/machao
chmod 700 /home/machao/
cp -r /etc/skel/.[^.]* /home/machao/
chown -R machao.machao /home/machao
usermod
-u NEWUID 用户名 修改用户的id
-g NEWGID 用户名 修改用户的主要组 可以指定组名,也可以指定GID
-G GID或组名[,组名] 用户名 设定用户的附加组为哪些组,这之前的附加组信息被覆盖,而不会影响之前的附加组
-a 与 -G结合 使用可以增加用户的附加组,而不会影响之前的附加组
-s shell 用户名 修改用户的shell
-c "描述信息" 设置或修改用户的描述信息
-d /path 用户名 修改用户的家目录,新家目录不会自动创建;若要创建新家目录并移 通常和 -m 一起使用!!
-m |--move-home ##修改用户的家目录通常和-d选项一起使用
-l newname oldname 修改用户的名称
-L :lock指定用户,在/etc/shadow 密码栏增加 !,等同于passwd -l
-U :unlock指定解锁用户,将/etc/shadow密码栏的 !拿掉,等同于passwd -u
-e YYYY-MM-DD:指明用户账号过期日期
-f --INACTIVE:设定非活动期限(密码过期后还有多少天账户失效);0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1
userdel
-r 删除用户名连同家目录及邮箱文件一起删除
:注意使用某普通用户登录之后为完全退出时切换到root下,然后使用userdel -r 删除之前普通用户时会有-bash名的进程占用文件导致无法彻底删除,需要使用将占用进程杀死后才可以正确删除用户
id[OPTION]... [USER]
-u : 显示UID
-g : 显示GID
-G : 显示用户所属的组的ID
-n : 显示名称,需配合ugG使用
su username 表示非登录式切换
su - username 表示登录式切换
-c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份;
-f或——fast:适用于csh与tsch,使shell不用去读取启动文件;
-l或——login:改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,logname。此外,也会变更PATH变量;
-m,-p或--preserve-environment:变更身份时,不要变更环境变量;
-s<shell>或--shell=<shell>:指定要执行的shell;
--help:显示帮助;
--version;显示版本信息。
由于su 对转换到终极权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su 来转换到终极用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的 管理有多人参和管理时,最佳是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成和其相关的工作,这时我们就 有必要用到 sudo。通过sudo,我们能把某些终极权限有针对性的下放,并且不必普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su ;另外sudo 是需要授权许可的,所以也被称为授权许可的su;sudo 执行命令的流程是当前用户转换到root(或其他指定转换到的用户),然后以root(或其他指定的转换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的设置文件/etc/sudoers来进行授权;
chfn 用户名 修改用户的描述信息
chsh -s shell 用户名 修改用户的shell 等同于usermod -s
groupadd -g GID 组名 创建组
groupmod
-n newname oldname 修改组名
-g newdi 组名 修改组id
groupdel 组名 删除组
gpasswd 组名 设置组密码
管理员可以执行
-a 用户名 组名 将某用户以附加组方式加入到某组当中,管理员可以执行
-d 用户名 组名 将某用户从制定组当中踢出,管理员可以执行
-M 用户名[,用户名...] 组名 设置某组的用户列表 ,仅root执行
-A 用户名[,用户名...] 组名 设置某组的管理员列表,仅root执行,组管理员在不是组成员的情况下,仅能修改组密码、加入组成员、踢出组成员,但并不具有组成员的权限
newgrp 组名(普通用户执行) 非附加组成员的普通用户在正确输入组密码后可以使用该命令临时变更主要组;附加组成员的普通用户无需输入密码可以使用该命令临时变更主要组.原主要组临时变成附加组
groupmems 仅root执行
-g(一级选项) 组名 -a(二级选项)用户名 将某用户以附加组方式加入到某组当中
-g 组名 -d 用户名 将某用户从指定组当中踢出
-g 组名 -p 清空所有组成员
-g 组名 -l 查看指定组有哪些成员(仅显示附加组)
groups 用户名 查看指定用户属于哪些组(包含主组和附加组)
chown 仅root才能更改文件的所属人
用户名 filename
用户名.组名 filename 或 用户名:组名 filename ->同时更改owner和group ,如果"."或":"前省略,则只更改group
-R 递归
--reference=file1 file2 将file1的group信息复制给file2
权限设置
owner (特殊权限) u g o
group
other
Read 4 777 600 000 700 ...
Write 2
eXe 1
当仅r权限作用在文件上的时候,用户可以读取该文件的内容:cat less more head tial
当仅w权限作用在文件(与目录区分)上的时候,用户可以修改文件的内容:>>
当仅x权限作用在文件上的时候,无作为
当rw权限作用在文件上的时候,用户可以读写文件 :cat less more head tail vim nano
当rx权限作用在文件上的时候,用户可以执行该文件
当wx权限作用在文件上时候,权限等同于w权限
文件的常见权限是 r-- rw- rwx
针对目录来说:
当仅r权限作用在目录上的时候,用户可以短列出目录下的文件名
当仅w权限作用在目录上的时候,无作为
当仅x权限作用在目录上的时候,用户可以进入该目录,并且知道具体文件名且具有相关权限的情况下,可以访问子文件.
当rw权限作用在目录上的时候,权限等同于仅r权限
当rx权限作
用在目录上的时候,用户进入,长列出.
当wx权限作用在目录上的时候,用户可以进入且可以创建及删除文件,但不能使用文件名通配符
目录的常见权限 r-x rwx
chmod
符号方法 :ugo/a +/-/= rwx
r:4
w:2
x:1 举例:r不为3 ,因为w+x=3 rwx r==(w+2)怎么判断!?
-R 递归 --reference file1 file2 将file1的权限复制给file2
X:只给目录以及已有部分x权限的文件加上权限,不给三个权限限位完全没有x的文件加x --> 判断某一目录下有许多子目录和文件,有的需要x可执行,有的不能被执行,根据判断规则:开始完全没有x的则不追加x权限,已有x权限的目录或文件就可以给追加x权限
练习:
1.创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
useradd -s /bin/csh -G bin root
2.创建下面的用户、组和组成员关系(经典笔试题)
名字为admins 的组
用户natasha,使用admins 作为附属组
用户harry,也使用admins 作为附属组
用户sarah,不可交互登录系统,且不是admins 的成员,
natasha,harry,sarah密码都是centos
:对用户进行批量创建密码 --> chpasswd -e(只能进行加密处理设置)
:touch chpfile ->文件内容格式要求 [用户名:密码]
chpasswd < chpfile
作业:
1、当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作?
答:不能cd到testdir目录下;只能短列出
2、当用户xiaoqiang对/testdir 目录无读权限时,意味着无法做哪些操作?
答:不能在该目录下使用文件名、通配符,不能修改(可以创建和删除;在知道文件具体路径下进入到该目录下然后根据文件对其权限的约束进行相应的操作)
3、当用户wangcai 对/testdir 目录无写权限时,该目录下的只读文件file1是否可修改和删除?
答:不可以
4、当用户wangcai 对/testdir 目录有写和执行权限时,该目录下的只读文件file1是否可修改和删除?
答:不可以修改;可以删除(因为有w权限,所以可以创建和删除)
5、复制/etc/fstab文件到/var/tmp下,设置文件所有者为wangcai读写权限,所属组为sysadmins组有读写权限,其他
人无权限
答:
6、误删除了用户wangcai的家目录,请重建并恢复该用户家目录及相应的权限属性
1. mkdir /home/wangcai
2.chmod 700 /home/wangcai
3.chown -R wangcai.wangcai /home/wangcai
4.cp /etc/skel/.[^.]* /home/wangcai
5.
马哥M28-第六天、
特殊权限
liubei --> cat(rwxr-xr-x root root) liubei-> /etc/shadow(r-------- root root)
no
liubei --> passwd(rwsr-xr-x root root) root-> /etc/shadow(r-------- root root)
yes
SUID:当对一个可执行的二进制文件作用了suid权限之后,任何人在执行该文件时临时拥有其所属人的权限(可执行的二进制文件,编译好之后不可被更改,所以考虑到安全性;临时拥有所属人的权限不一定是root,要根据文件实际所属人)
SGID:当对一个可执行的二进制文件作用了sgid权限之后,任何人在执行该文件时临时拥有其所属组的权限。
当对于一个目录作用了sgid权限之后,任何人在该目录下创建的文件的所属组与该目录的所属组相同。
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,显示为大写。
重点:
实验:刘备关于张飞三个用户有一个共享目录叫shuguo,要求三人的主组不一样的情况下,三人在shuguo目录下所创建的文件(即事先定义好umask,umask越高,创建文件和目录就越低),彼此之间可以读取以及修改,但不能删除其他人创建的文件
用户在创建目录或者文件时,默认所属组必为该用户主要组(继承主要组的元属性),想要使不同用户创建目录或文件能共享,三人创建文件时,当下新建目录或文件可以临时拥有该目录的所属组,所以先设置好三人共同的附加组为此目录的主要组!!
以下简写过程,思路整理:
chgrp shuguo shuguo/
chmod g+s shuguo/
gpasswd -a 用户名 组名 将普通用户以附加组的形式添加到指定组当中
umask 022 -> umask此类默认值修改后可以加入到~/.bashrc 或 /etc/bashrc
文件特定权限
chattr +a 不能删除,不能改名,不能修改,可以追加
chattr +i 不能删除,不能改名,不能修改,不能追加
lsattr 查看权限
ACL[访问控制列表]
centos6当中对新建分区开启acl的过程
1.创建分区
fdisk /dev/sda
n回车
回车
+2G回车
w回车
lsblk :创建完成后可以直接查看内核内存中已经生效的分区表(新建分区并没有立刻生效!)
fdisk -l :查看硬盘上已经存在的分区(表)
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.
权限运行等级
owner
acl user
group
acl group
other
owner > acl user > group 与 acl group 谁的权限多,谁优先 >other
getfacl file | directory
setfacl -m(设置修改) u:wang:rwx file | directory
setfacl -R(针对目录递归)m g:sales:rwX directory
setfacl -m g:salegroup:rw file | directory
setfacl -m d(default策略):u:wang:rx directory
setfacl -x(删除acl权限) u:wang file | directory
setfacl -X(读取文本批量执行) file.acl directory
setfacl -m m(mask):r-x file | directory 设置上限阀值 或 chmod g=r-x
setfacl -d(设置默认acl权限) -m u/g:username/groupname file |directory
setfacl -k file | directory 清除默认权限(default)
setfacl -b file | directory --remove-all:删除所有扩展的acl规则,基本的acl规则(所有者,群组,其他)将被保留。
acl权限的备份以及还原:(***)
getfacl file |directory > acl.txt
setfacl --restore acl.txt
练习:
1、在/testdir/dir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,
组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。
2、备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限,最后还原ACL权限
cat
-E 显示换行符$
-v 显示^M
-T 显示^I即tab
-A = -EvT
-n 输出的结果前显示行号
-b 输出的结果前显示行号,非空行不参与排列
-s 将连续的空行压缩为一行
联系与tr -s --squeeze(挤压,榨取,轻轻地捏)-repeats 将连续重复出现字符去重显示单个
tac :内容倒序显示
less | more -> b向下翻页,f向上翻页; less -> /string搜索还会高亮显示!
head -n N :取头几条记录,默认是取10条 :以行为记录,取指定行记录
-c :按字节取
tail -n N -f :取倒数N条信息,默认是取10条 :以行为记录,取指定行记录
-c :按字节取
head和tail配合使用,通常可以取指定区间的行记录信息
cut : -f1,2,3/1,3/1-3 那么输出的时候就根据-d选项规定的分隔符自动分隔输出 ,
** -c :以字节切割取值,可以指定范围取值 cut -c2-4 "abcde" -->bcd
--output-delimiter="任何非特殊字符" 替换输出分隔符为指定字符
Linux使用utf-8编码的时候-- 一个汉子占三个字节,区别于其他的字符编码
paste :合并文件
-d 分隔符,指定分隔符,默认tab
-s 所有行合成一行显示 a b c
paste f1 f2 -> f1文件的内容显示在左半部分,f2的内容显示在右半部分;
f1f2
a1
b2
c3
paste -d: f2 f1
1:a
2:b
3:c
sort
-n 按数字排列
-r 倒序排列,默认升序
-t 指定分隔符
-k 指定哪一列 sort -t -kn[,m]
-f 忽略大小写
-u 删除输出中的重复行
练习:利用df,取出分区利用率的最大值,只要数字。
df |tr -s " " : |cut -d: -f5 |sort -n |tail -n 1 |cut -d% -f1
uniq
去除连续重复行,往往和sort配合使用,先排序,再去重
-c 显示重复的次数
-d 仅显示重复行 uniq -cd
-u 仅显示非重复行
实验:通过查看httpd的访问日志/var/log/httpd/access_log来显示出访问网站最多的来源ip列表,显示结果时显示出访问次数。
答案:cut -d" " -f1 access_log |sort |uniq -c |sort -nr
网站部署过程
[[email protected] ~]# service httpd restart
[[email protected] ~]# iptables -F
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# vim index.html
diff
diff f1 f2 比较两个文件的不同之处
diff -u f1 f2 > diff.log -u unified 统一的,补丁文件格式
rm -f f2 删除新代码文件
patch -b f1 diff.log 自定备份源文件为f1.orig ,并生成以源文件名命名的升级补丁之后的新文件
[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
stat /etc/passwd |head -n 4|tail -n 1 |cut -d: -f2 |tr -s "[[:punct:]]" " "|cut -d" " -f2 |cut -c2-4
作业:
1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址
ifconfig eth0 |head -2 |tail -1 |tr -s " " : |cut -d: -f4
2、查出分区空间使用率的最大百分比值
1.注意:分隔符必须统一,空格多一个也不可以(空格也是一个字符)
3、查出用户UID最大值的用户名、UID及shell类型
cat /etc/passwd |cut -d : -f1,3,7 | sort -t: -k2 -n |tail -n 1
4、查出/tmp的权限,以数字方式显示
stat -c "%a" /tmp |cut -c 2-4
%a Free blocks available to non-superuser 普通用户可用的block数量
%b Total data blocks in file system 分区的总数据块数量
%c Total file nodes in file system 文件系统的inode总数
%d Free file nodes in file system 空闲inode数量
%f Free blocks in file system 可用的block数量
%C Security context in SELinux selinux 安全上下文
%i File System ID in hex 分区ID(十六进制)
%l Maximum length of filenames 分区文件名最大长度
%n File name 文件名
%s Block size (for faster transfers) 块大小(都是系统block的大小)
%S Fundamental block size (for block counts) 基本块大小(都是系统block的大小)
%t Type in hex 文件系统类型(格式化的类型,十六进制)
%T Type in human readable form 文件系统类型(格式化的类型,可读形式)
stat -f -c "%a %b %c %d %f %C %i %l %n %s %S %t %T" file
5、统计当前本机运行的进程数,并按从大到小排序 ps axo comm
ps axo comm | sort -r | uniq -c |sort -nr
tr -s :去除重复项字符单独输出一次
stat filename ->查看文件状态 (包含权限数字、字符表示等详细信息)
stat /etc/passwd |head -n 4|tail -n 1 |cut -d: -f2 |tr -s "[[:punct:]]" " "|cut -d" " -f2 |cut -c2-4
**stat -c a% /etc/passwd ->利用stat -c选项配合各个表达式来进行定向取值(如权限数字表示、字符表示)
马哥教育M28-第七天
grep
--color=auto 关键字高亮显示
-v 反向搜索
-i 忽略大小写
-n 显示行号
-c 不显示搜索结果,仅显示匹配的行数
-o 仅显示匹配到的字符串
-q 静默输出
-A # 显示搜索行及其向下相临的#行
-B # 显示搜索行及其向上相临的#行
-C # 显示搜索行及其向上和向下相临的#行
-e char1 -e char2 [-e charN] 多个选项间or关系
-w 匹配整个单词
-E 或egrep 支持扩展正则表达式
-F 或fgrep 不支持正则表达式
锚定重点理解总结:锚定可以理解为具有定标的作用,最终锚在哪,最大匹配就都哪结束,如词首锚定或左锚定后没有跟任何单词(字母和数字),即视为匹配到下一个单词前结束位置
1.锚定针对的对象必须是单词-->Linux中对单词的自动识别是根据空格和标点符号来的,所以词首、词尾锚定接标点符号或者空格都是没有意义的!
2.重点:正则表达式(标准正则与扩展正则)中的位置锚定 -> \<词首锚定 和\>词尾锚定,锚定的对象必须是单词(可以使用数字和字母作为一个整体,系统自动以标点符号和空格识别单词)
3."{}"在正则表达式中作为范围划定的理解:注意,{2,3} 表示的是包含两次匹配或者三次匹配的表达式,那么三次包含两次(对于某些大整体包含小整体)要注意;
比如,利用扩展正则表达式分别表示出0-9 10-99,100-255 --》 三位数字是由三个单独的数字字符组成的,所以,三位数既包含两位数又包含一位数,所以在单独输出表示0-9一位数字的时候,必须使用词锚定来进行位置锚定,明确搜索出想要的只有一位组成的单词即数字!
4.正则表达式如grep 、egrep在完成表达式搜索后,对于以词首锚定后面没有任何单词,即认为表达式完成搜索后遇到标点符号并且在遇到第一个单词(字母)前结束匹配; 例如:echo '/etc/rc.d/init.d/..functions' |grep "/.*\<",如果没有\<词首锚定,那么后面的所有字符都会被.*完全匹配,正是由于词首锚定锚定的位置为空,所以表达式只匹配到..就结束,不在匹配下面的单词
^ 和 $ 注意,这个两个特殊字符表示的含义针对的是行,必须满足行记录下满足开头或结尾,单独作用在行记录上的某些字符是不正确的,不具备意义
搜索空行时需要注意:^$表示纯空行,而有些空行实际不空,有水平或垂直空白符如空格或tab等,所以正则表达式 ^[[:blank:]]*$
nmap -v -sP 172.18.250.0/24 |grep -B1 'Host is up' |grep for |cut -d" " -f5
正则表达式
去除配置文件中的注释行和空白行
grep -v "^#\|^[[:blank:]]*$" /etc/httpd/conf/httpd.conf
练习:
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,7 |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中其基名
1.注意:echo '/etc/rc.d/init.d/functions' egrep -v "^/.*/" --》 /etc/rc.d/init.d/functions egrep -v ^/.*/ 原样输出字符串以及空格之后的命令行!!
2.echo '/etc/rc.d/init.d/functions' |egrep -w -o --color=auto "f.*"
4、使用egrep取出上面路径的目录名
echo '/etc/rc.d/init.d/functions' |egrep -o --color=auto "^/.*/"
5、统计last命令中以root登录的每个主机IP地址登录次数
last |grep root |tr -s " " : |cut -d: -f3 |sort |uniq -c |sort -nr
-->考虑是否只选取有效的IP地址记录,去除不规则的
6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255
echo {0..255} |grep -w -o "\<[[:digit:]]\{1\}\>" ->0-9一位数表示
echo {0..255} |grep -w -o "\<[[:digit:]]\{2\}\>"
...
7、显示ifconfig命令结果中所有IPv4地址
ifconfig |grep -E -o "\<inet addr:[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\>"
8、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面
echo "welcome to magedu linux" |grep -o -E --color=auto "[[:alnum:]]" |sort |uniq -c |sort -nr
总结:grep |egrep -o选项是仅列出匹配到的字符(表达式项)并且是以匹配项之间换行单独表示 ,即每匹配到表达项都是一行单独记录-》所以利用其进行排序去重再排序
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从光标所在处剪切到行尾
d0 删除到行首
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的不变
%[email protected]\(r..t\)\>@\[email protected]
http://mirrors.163.com/ 换成https://mirrors.sina.com/dvd
:%[email protected]://[email protected]://mirrors.sina.com/[email protected]
注意说明:在vim编辑器中的退出状态下进行替换操作的时候,如果表达式匹配项中含有多个"/"的时候,一定要将替换模式下的"/"转换成其他的符号来代替使用,否则一定会有报错,系统也不识别性报错!!
原文地址:http://blog.51cto.com/12947626/2063413