list:1.输入、输出重定向;2.tr 转换或删除字符;3. | 管道;4.tee 重定向到多个目标;
5.rz & sz 导入与导出;6.用户、组和权限 文件;7.useradd 创建或更新用户信息;
8.usermod 用户属性修改;9.userdel 删除用户;10.id 打印真实有效的用户和组ID;
11.su 切换用户或以其他用户身份执行命令;12.passwd 修改用户密码;
13.用户相关的其它命令;14.groupadd 创建组;15.groupmod 修改组属性;
16.groupdel 删除组;17.gpasswd 更改组密码;18.newgrp groupname临时切换组;19.groupmems 更改和查看组成员20.文件权限;21.cat 查看文件内容;
22.more 分页查看;23.less 一页一页地查看文件;24.head 输出文件的第一部分;
25.tail 输出文件的最后一部分;26.cut 从文件的每一行取出一部分;
27.paste 合并文件行;28.wc 显示文本统计总数;29.sort 文本排序;
30.uniq 删除重复行;31.diff 比较文件的每一行;32.patch 将更改应用于文件
33.grep 显示匹配行;34.正则表达式;35.vim 编辑器
1.输入、输出重定向
> 若文件不存在,则创建,并将正确的输出填充,若文件已存在,则覆盖原内容
>> 若文件不存在,则创建,并将正确的输出内容填充,若文件已存在,则追加内容
1> 同 >
1>> 同 >>
2> 若文件不存在,则创建,并将错误的输出填充,若文件已存在,则覆盖原内容
2>> 若文件不存在,则创建,并将错误的输出内容填充,若文件已存在,则追加内容
find /etc/ -name "*.conf" 2> find.error > find.right
&> 若文件不存在,则创建,并将所有的输出填充,若文件已存在,则覆盖原内容
&>> 若文件不存在,则创建,并将所有的输出内容填充,若文件已存在,则追加内容
&> /dev/null 将正确与错误的结果都导入到垃圾桶
| 只将正确结果传递给右边的命令用
2>&1 将错误结果转为正确结果
|& 将正确及错误都传递给右边命令用
1>&2 将正确结果转为错误结果
多行重定向
使用“<<终止词”命令从键盘把多行重导向给STDIN
– 直到 终止词 位置的所有文本都发送给STDIN
– 有时被称为就地文本(heretext)
cat > /app/test.txt << EOF
hello
123
nihao
EOF
2.tr 转换或删除字符
tr [OPTION]... SET1 [SET2]
• 选项:
-c –C --complement:取字符集的补集
-d --delete:删除所有属于第一字符集的字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
[:alnum:]:字母和数字 [:alpha:]:字母 [:cntrl:]:控制(非打印)字符 [:digit:]:数字
[:graph:]:图形字符 [:lower:]:小写字母 [:print:]:可打印字符 [:punct:]:标点符号
[:space:]:空白字符 [:upper:]:大写字母 [:xdigit:]:十六进制字符
使用<来重定向标准输入;某些命令能够接受从文件中导入的STDIN
tr ‘a-z’ ‘A-Z’< /etc/issue 该命令会把/etc/issue中的小写字符都转换成写写字符
tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
练习:从1加到100,取和
[root@instructor_v7(nanyibo) ~]# echo {1..100} |tr " " + |bc
5050
[root@instructor_v7(nanyibo) ~]# echo {1..100} |tr [:blank:] + |bc
5050
练习:去掉windows文件中的^M
tr -d '\015' < win.txt > win1.txt
dos2unix win.txt
3. | 管道
管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
– 将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
– STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
– 最后一个命令会在当前shell进程的子shell进程中执行用来
– 组合多种工具的功能
ls | tr 'a-z' 'A-Z'
• less :一页一页地查看输入
ls -l /etc | less
• mail: 通过电子邮件发送输入
echo "test email" | mail -s "test" user@example.com
• lpr:把输入发送给打印机
echo "test print" | lpr -P printer_name
管道中 - 符号
示例:
将 /home 里面的文件打包,但打包的数据不是记录到文件,而是传送到 stdout,经过管道后,
将 tar -cvf - /home 传送给后面的 tar -xvf - , 后面的这个 - 则是取前一个命令的 stdout,
因此,就不需要使用临时file了
• tar -cvf - /home | tar -xvf -
4.tee 重定向到多个目标
命令1 | tee [-a ] 文件名 | 命令2
把命令1的STDOUT保存在文件中,做为命令2的输入(相当于将命令1的结果复制一份)
-a 追加
• 使用:– 保存不同阶段的输出 & – 复杂管道的故障排除 & – 同时查看和记录输出
enable |tee /app/456 |wc -l (将enble的结果保存到456文件,并同时传递给wc命令)
61
5.rz & sz
rz 将win.txt文件导入到linux中
sz 将linux.txt文件导出到window中
6.用户、组和权限 文件
Linux用户:Username/UID
管理员:root, 0
普通用户:1-65535
系统用户:1-499, 1-999(CentOS7)对守护进程获取资源进行权限分配
登录用户:500+, 1000+(CentOS7)交互式登录
Linux组:Groupname/GID • 管理员组:root, 0 • 普通组:
系统组:1-499, 1-999(CENTOS7)
普通组:500+, 1000+(CENTOS7)
Linux组的类别
用户的主要组(primary group)
用户必须属于一个且只有一个主组
组名同用户名,且仅包含一个用户,私有组
用户的附加组(supplementary group)
一个用户可以属于零个或多个辅助组
Linux用户和组的主要配置文件:
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/group:组及其属性信息
/etc/shadow:用户密码及其相关属性
/etc/gshadow:组密码及其相关属性
passwd文件格式 (/etc/passwd) 用户密码信息
(less /etc/passwd 或者 vim /etc/passwd 或者getent passwd)
name:用户名
password:密码位,pwconv 密码被映射到了/etc/shadow
uid:用户身份编号
gid:登录默认所在组编号
gecos:描述位
home: 家目录
shell: 默认为/bin/bash 如果设置为/sbin/nologin 表示不可以交互式登录
shadow文件格式 (/etc/shadow) 密码过期信息
(less /etc/shadow 或者 vim /etc/shadow)
name:用户名
password:$6$salt$password
密码上一次的修改时间:
密码的最小存活期:在这个时间到达之前,不能改密码
密码的最大存活期:密码的过期时间
密码过期前多少天警告:
密码过期后多少天触发帐户过期:
帐户过期时间:从1970-1-1开始计算
保留位
pwunconv shadow 中的密码还原到passwd中
pwconv 默认生效,passwd中的密码被映射到shadow中
chage 修改密码过期信息
Options:
-d, --lastday LAST_DAY 修改密码上一次的修改时间
-E, --expiredate EXPIRE_DATE 设置密码的过期时间
-I, --inactive INACTIVE 设置密码过期之后多少天触发帐户过期
-l, --list 列出信息
-m, --mindays MIN_DAYS 设置密码的最小存活期
-M, --maxdays MAX_DAYS 设置密码的最大存活期
-W, --warndays WARN_DAYS 设置密码过期之前多少天提醒用户
group文件格式 (/etc/group) 组文件
组名称
组密码:x表示 grpconv 组密码被映射到了/etc/gshadow
组ID
组成员:作为附加组的成员列表,以逗号分隔
gshdow文件格式(/etc/gshadow) 组密码信息
组名称
组密码
组管理员:以逗号分隔,可以修改组密码以及修改组成员
组成员:作为附加组的成员列表,以逗号分隔
grpunconv gshadow 中的密码还原到group中
grpconv 默认生效,group中的密码被映射到gshadow中
7.useradd 创建新用户或更新默认新用户信息
useradd [options] LOGIN
-u UID
-o 配合-u 选项,不检查UID的唯一性
-g GID/GROUP NAME:指明用户所属基本组,可为组名,也可以GID
-c "COMMENT":用户的注释信息
-d HOME_DIR: 以指定的路径(不存在)为家目录 确保指定目录的目录名要存在,而基名不要存在(自定义家目录)
-s SHELL: 指明用户的默认shell程序,默认不指定是为/bin/bash
-G GROUP1[,GROUP2,...]:为用户指明附加组,组须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000
-m 创建家目录,用于系统用户
-M 不创建家目录,用于非系统用户
默认值设定:/etc/default/useradd文件中
[root@centos7_v7(lhl) default]# cat /etc/default/useradd (同useradd -D)
# useradd defaults file (创建用户时的默认文件)
GROUP=100 (未创建主组时的默认主组)
HOME=/home (默认家目录)
INACTIVE=-1 (默认失效时间)
EXPIRE= (默认过期时间)
SHELL=/bin/bash (默认shell)
SKEL=/etc/skel (创建家目录时其中的默认文件并修改权限)
CREATE_MAIL_SPOOL=yes (默认创建邮箱文件)
显示或更改默认设置
useradd -D
useradd –D -s SHELL
useradd –D –b BASE_DIR
useradd –D –g GROUP
手工创建家目录
mkdir /home/magetest
cp -r /etc/skel/.[^.]* /home/magetest
chown -R magetest.magetest /home/magetest
chmod -R 700 /home/matgtest
新建用户的相关文件和命令
/etc/default/useradd (创建用户时默认文件)
/etc/skel/* (默认家目录内的文件)
/etc/login.defs (创建用户时的默认扩展文件)
newusers passwd格式文件 批量创建用户 (用于将已有用户创建在新设备上)
将 /etc/passwd中需迁移的用户信息复制到新设备的newpasswd文件中,保持passwd文件的格式不变
执行 newusers newpasswd命令,可以批量创建此文件中的用户
chpasswd 批量修改用户口令
chpasswd [options] file(< file)
file 内的内容格式:user_name:password
8.usermod 用户属性修改
usermod [OPTION] login
-u UID: 新UID
-g GID: 新主组
-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-s SHELL:新的默认SHELL
-c 'COMMENT':新的注释信息
-d HOME: 新家目录不会自动创建;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加 !
-U: unlock指定用户,将 /etc/shadow 密码栏的 ! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期
-f INACTIVE: 设定非活动期限
9.userdel 删除用户
userdel [OPTION]... login
-r: 删除用户家目录
10.id 打印真实有效的用户和组ID
id [OPTION]... [USER]
-u: 显示UID
-g: 显示GID (主组)
-G: 显示用户所属的组的ID (所有组包括附件组)
-n: 显示名称,需配合ugG使用
11.su 切换用户或以其他用户身份执行命令
su [options...] [-] [user [args...]]
切换用户的方式:
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
[root@centos7_v7(lhl) ~]# pwd
/root
[root@centos7_v7(lhl) ~]# su lhl
[lhl@centos7_v7(lhl) root]$ pwd
/root
exit
su - UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
su -l UserName 相当于 su - UserName
exit 从非root用户退出到root用户 或 su - 回到root
root su至其他用户无须密码;非root用户切换时需要密码
su [-] UserName -c 'COMMAND' (命令无选项时可以不加引号)
换个身份执行命令,在不切换用户的情况下以userNAME的身份执行COMMAND的命令内容
12.passwd 修改用户密码
passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
• passwd: 修改自己的密码
• 常用选项:
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
echo "PASSWORD" | passwd --stdin USERNAME (密码以明文方式只需输入yic)
例:for name in $(cat /etc/passwd |cut -d: -f1);do echo 123456 |passwd --stdin $name &> /dev/null;
passwd -e $name;done
13.用户相关的其它命令
chfn 指定个人信息 (可直接用chmod -c 操作)
-f 指定你的真实姓名
-o 指定您的办公室房间号码
-p 指定您的办公室电话号码
-h 指定您的家庭电话号码
chsh 指定shell
-s 指定登录shell
-l 打印shell文件列表中的shell并退出
finger 查看用户信息
14.groupadd 创建组
groupadd [OPTION]... group_name
-g : 指明GID号;[GID_MIN, GID_MAX]
-r:创建系统组 (系统组ID自动分配,范围如下)
CentOS 6: ID<500
CentOS 7: ID<1000
15.groupmod 修改组属性
groupmod [OPTION]... group
-n group_name: 新名字
-g GID: 新的GID
16.groupdel 删除组
groupdel GROUP
17.gpasswd 更改组密码
gpasswd [OPTION] GROUP
-a, --add USER 增加单个用户到指定组当中(组管理员可执行)
-d, --delete USER 从指定组中删除单个用户(组管理员可执行)
-r, --delete-password 将指定组的组密码删除(组管理员可执行)
-R, --restrict 限制组成员访问该组
-M, --members USER,... 一次性设置组成员(仅root执行)
-A, --administrators ADMIN,... 设置组管理列表(root执行)
18.newgrp groupname
用户会打开一个子shell,在这个子shell下,该用户的主要组切换为该组,
若该用户本不属于该组,则要输入组密码,若该组属于用户的附加组之一,则无需输入密码。
19.groupmems 更改和查看组成员
groupmems [options] [action]
options:
-g, --group groupname 更改为指定组 (只有root)
Actions: (子选项)
-a, --add username 指定用户加入组
groupmems -g group1 -a user1 将用户 user1加入到 group1中
-d, --delete username 从组中删除用户
-p, --purge 从组中清除所有成员
-l, --list 显示组成员列表
groups [OPTION].[USERNAME]... 查看用户所属组列表 (包含主要组)
20.文件权限
chown.修改文件所属人 (仅root才能执行)
chown [OPTION] [OWNER][:[GROUP]] FILENAME/DIRNAME
chown OWNER 修改所属人
chown .|: GROUP 修改所属组(所属组前加 . 或 :以界定位置)
chown OWNER .|: GROUP 同时修改所有人与所属组
chown zhangsan * (将当前目录下所有文件的所有人都修改为zhangsan)(所有人可修改文件权限)
--reference=RFILE FILE... 将指定文件 FILE 的从属关系设置为与指定文件 RFILE 相同
-R 递归修改
chgrp.修改文件所属组信息
仅root和文件的所属人可以更改文件的所属组(但所属人一定要属于目标组)
chgrp [OPTION] GNAME FILENAME/DIRNAME
--reference=RFILE FILE... 将指定文件 FILE 的从属关系设置为与指定文件 RFILE 相同
-R 递归修改
文件的权限主要针对三类对象进行定义
owner: 属主, u
group: 属组, g
other: 其他, o
每个文件针对每类访问者都定义了三种权限
r: Readable
w: Writable
x: eXcutable
对于文件的作用的含义:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
对于目录作用的含义:
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录
X:只给目录x权限,不给文件x权限
FILE (实际作用的效果)
当仅r权限作用在文件上的时候,表示用户可以读取该文件的内容(常用**)
当仅w权限作用在文件上的时候,表示用户可以修改该文件的内容(一般*)
当仅x权限作用在文件上的时候,没有意义。(不用)
当rw同时作用在文件上的时候,表示用户可以读写文件 (常用**)
当rx同时作用在文件上的时候,表示用户可以读且可以执行该文件 (常用**)
当wx同时作用在文件上的时候,权限与仅w相同
当rwx同时作用在文件上的时候,用户可以读写执行。(常用**)
DIRECTORY (实际作用的效果)
当仅r权限作用在目录上的时候,表示用户可以短列出查看目录下的文件名
当仅w权限作用在目录上的时候,没有意义
当仅x权限作用在目录上的时候,表示用户可以进入且可以访问目录下的文件,但不能列出文件名(一般*)
当仅rw权限同时作用在目录上的时候,权限等同于仅r权限作用在目录
当仅rx权限同时作用在目录上的时候,表示用户可以进入,可以访问子文件,同时可以长列出文件(常用**)
当仅wx权限同时作用在目录上的时候,表示用户可进入,可访问子文件,可以创建及删除,但不能列出(一般*)
当rwx权限同时作用在目录上的时候,表示用户有完整权限(常用**)
X 对于批量增加x权限时,可以跳过文件而只对目录加x
权限的八进制数字代码
7:rwx;6:rw;5:rx;4:r;3:wx;2:w;1:x
umask 默认权限
表示用户创建文件的默认权限,(目录最高777,文件最高666)
新建FILE权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限: 777-umask
umask xxx 设置umask
umask 查看umask
~/.bashrc 将umask设定保存以让下次登录时仍然有效(用户设置)。(全局设置: /etc/bashrc)
umask -S 显示创建目录的默认权限 (与umask显示的结果互补,表示目录的实际权限)
特殊权限
SUID, SGID, Sticky
suid: 对于可执行的二进制文件作用了suid权限之后,任何人在执行该文件时,可临时拥有其所属人的权限。
sgid: 对于可执行的二进制文件作用了sgid权限之后,任何人在执行该文件时,可临时拥有其所属组的权限
对于目录作用了sgid权限之后,任何人在该目录下创建的文件的所属继承目录的所属组。
sticky:对于目录作用了sticky之后,该目录下的文件及子目录,仅其所属人和目录的所属人及root才能删除。
权限设定:(两种方式,方法二的777为举例)
chmod u+s ;chmod u-s
chmod g+s ;chmod g-s
chmod o+t ;chmod o-t
chmod 4777 suid
chmod 2777 sgid
chmod 1777 sticky
特殊权限显示在原权限的x位。若原权限x位已有,则特殊权限显示为小写的s、g、t;若无则为大写S、G、T
设定文件特定属性(为root限定,方式误操作)
lsattr [file] 显示特定属性
chattr +a [file] 不可修改,可以追加,不能删除
chattr +i [file] 什么也不做,只能读
访问控制列表 (ACL)
ACL:Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加(两种方式)
tune2fs –o acl /dev/sdb1 (增加手工创建的分区文件系统sdb1的acl功能) (推荐使用)
mount –o acl /dev/sdb1 /mnt/test (挂载时生效,)
ACL生效顺序: (group一般不使用,因为设置了acl后,group不能修改;若修改,acl要全部从新设置)
owner > acl user > group & acl group 谁多谁优先 > other
getfacl file |directory (查看文件或目录的全部特殊权限)
setfacl -Rm u|g:username|groupname:rwx filename|dirname 设置acl权限,
R为递归到已存在的子文件,新建子文件没有权限 (可设置多个用户和组)
setfacl -x u|g:username|groupname filename|dirname 删除指定acl权限
setfacl -b filename |dirname 删除所有acl权限
getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
通过文件设置acl权限
创建文件file.add 内容如下
u:liubei:rwx
g:shuguo:rx
setfacl -M file.add house/
通过文件删除acl权限
创建file.del 内容如下
u:liubei
g:shuguo
setfacl -X file.del house/
设定mask,用于临时限定文件的最大权限(对于全部人和组),一下两种方式:
setfacl -m m:r-x filename|dirname 或 chmod g=rx filename |dirname (用ll查看时,mask权限显示在g权限位)
默认权限
setfacl -m d:u:liubei:rwx house 只影响到当前文件的新建子文件,不影响当前文件及当前文件的已存在的子文件
setfacl -Rm u:liubei:rwx house 只影响当前文件及当前文件的已存在的子文件,不影响当前文件的新建的子文件
以上两条命令一起才能影响当前文件及其所有的已存在和新建的子文件
显示结果如下:
getfacl house
# file: .
# owner: root
# group: root
--------------------------------------- setfacl -Rm u:liubei:rwx house
user::rwx
user:liubei:rwx
group::r-x
mask::rwx
other::r-x
---------------------------------------- setfacl -m d:u:liubei:rwx house
default:user::rwx
default:user:liubei:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
setfacl -k house/ 仅删除默认权限
备份和恢复ACL
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。
但是tar等常见的备份工具是不会保留目录和文件的ACL信息
实验:包含acl权限的目录使用打包工具备份及恢复
1.备份
tar -cvf house.tar house
getfacl -R house > acl.txt
2.还原
tar -xvf house.tar -C /var/tmp
cp acl.txt /var/tmp
setfacl --restore acl.txt
21.cat 查看文件内容
-E 显示结束符$
-T 显示TAB(^I)
-v 显示windows换行符(^M)
-t = -vT
-A = -vTE 表示所有控制符
-n 显示行号
-b 空行不参数编号
-s 将连续的空行压缩为一个空行
tac 行反向打印文件
与cat显示的内容行反向(第一行变为最后一行)
rev 列反向打印文件
与cat显示的内容列反向(每一行最后一个字符变为第一个)
22.more 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
23.less 一页一页地查看文件或STDIN输出
/文本: 搜索 文本
n/N 跳到下一个 或 上一个匹配
less 命令是man命令使用的分页器
24.head 输出文件的第一部分
head [OPTION]... [FILE]...
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#: 指定行数
25.tail 输出文件的最后一部分
tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:指定行数
-f: 跟踪显示文件fd新追加的内容,常用日志监控(基于文件描述符追踪)
相当于 --follow=descriptor
-F: 跟踪文件名 (基于文件名追踪)
相当于 —follow=name --retry
tailf 基于文件描述符追踪,如果文件不增长,它不会访问磁盘文件,减少了IO访问
26.cut 从文件的每一行取出一部分
cut [OPTION]... [FILE]...
-d DELIMITER: 按分割符切割,需指明分隔符,默认tab
-f# FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
cat /etc/passwd |cut -d: -f1,3 (取出passwd中以:为分隔符的第1,3列)
cut -d: -f1,3 /etc/passwd (同上)
-c 按字符切割
cat /etc/passwd |cut -c1-5 (取出passwd中的第1到5个字符)
--output-delimiter=STRING指定输出分隔符
27.paste 合并文件行
合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2 将文件 f1与f2的相同行合并成一行
paste -d“ ” f1 f2 将文件 f1与f2的相同行合并成一行,中间用空格隔开
paste -s f1 f2 分别将f1 与f2 的多行内容合并到一行,然后将两文件合并为两行
cat f1 f2
ab
12
cd
34
paste -s f1 f2
ab 12
cd 34
28.wc 显示文本统计总数
计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字节数 文件名
常用选项
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度
29.sort 文本排序
把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)
常用选项
-r 执行反方向(由上至下)整理(倒序排列)
-n 执行按数字大小整理,将指定列当做整体并以数字排序
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t 指定分隔符; -k以第几列
cat /etc/passwd |sort -t: -k3 -n (以:为分割符,以第三列的整体大小排序)
30.uniq 删除重复行
从输入中删除前后相接的重复的行,连续且完全相同方为重复
uniq [OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
常和sort 命令一起配合使用:sort userlist.txt | uniq -c
实验:查看访问本机最多的10个ip地址
centos6:
1.service httpd start (开启服务)
2.echo hello > /var/www/html/index.html (创建网页内容)
3.iptables -F (关闭防火墙)
[root@instructor_v6(nanyibo) html]# cat /var/log/httpd/access_log |cut -d" " -f1 |sort |uniq -c |sort -n -r |head
180 172.18.118.136
。。。。。。
31.diff 比较文件的每一行
diff f1 f2 (比较结果不同处用------隔开)
32.patch 将更改应用于文件
实验:打补丁
diff -u oldfile newfile > file.patch (创建补丁文件)
patch -b oldfile file.patch (打补丁)
33.grep 显示匹配行
--color=auto 关键字高亮显示,在centos7当中默认做为别名
-v 显示不被匹配到的行
-i 忽略关键字的大小写
-c 显示匹配行的数量
-o 仅显示匹配到的关键字
-q 静默输出,不打印过滤的结果,也可以用 &> /dev/null
-A x 当前行及后x行
-B x 当前行及前x行
-C x 当前行及前后x行
-e 关键字1 -e 关键字2 或者 "关键字1\|关键字2" 表示逻辑或
-w 匹配整个单词 表示字符边界 也可以用 "\<关键字\>"
-E 或 egrep 表示使用扩展正则表达式
-F 或 fgrep 不使用正则表达式
34.正则表达式
字符匹配
. 表示任何字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [a-z]
[:upper:] 大写字母 [A-Z]
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字 [0-9]
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
[A-Z0-9] 表示大写字符或数字
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
* 匹配前面的字符任意次,包括0次 (贪婪模式:尽可能长的匹配)
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次
位置锚定:定位出现的位置
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行 grep -v "^[[:space:]]*$" passwd 去除文件中的空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定,用于单词模式的右侧
\<PATTERN\> 匹配整个单词
例:找出以rxxt开头且以相同rxxt结尾,并uid与gid相同的用户
cat passwd |grep "^\(\\).*\([0-9]\+\):\2.*\1$"
35.vim 编辑器
vim 编辑器的三种模式:
> command(命令模式) 默认模式
> insert(插入模式) 编辑文本内容
> exit(退出模式) 保存,退出
command(命令模式) :移动光标,复制,剪切,撤消,重做…… 进入其他的模式。
ZQ强制退出不保存
ZZ保存并退出
G:跳到最后一行
gg:跳到第一行
numG 或 :num 回车 跳到指定行
Ctrl+f: 向文件尾部翻一屏
Ctrl+b: 向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u:向文件首部翻半屏
~:转换大小写
J:删除当前行后的换行符
r:单个字符的替换
dd 剪切一行
dw 剪切一个单词
d$ 剪切光标所在位置到行尾
d^ 剪切光标所在位置到行首
num d: 剪切当前行及其向下指定数量的行
yy 复制一行
yw 复制一个单词
y$ 复制光标所在位置到行尾
y^ 复制光标所在位置到行首
num y: 复制当前行及其向下指定数量的行
v 选择模式
p 粘到光标所在处之后(小写p)
P 粘到光标所在处之前(大写P)
V 多行选择模式
p 在当前行的下一行粘贴(小写p)
P 在当前行的上一行粘贴(大写P)
命令模式光标的移动快捷方式:
h 向右; j 向下; k 向上; l 向左;
insert(插入模式) 编辑文本内容,进入方式如下:(ESC回到命令模式)
i 光标在当前位置并进入插入模式
I 光标跳至行首并进入插入模式
A 光标跳至行尾并进入插入模式
a 光标向后移动一个字符并进入插入模式
o 光标向下插入一个新行并进入插入模式
O 光标向上插入一个新行并进入插入模式
exit(退出模式/扩展命令模式) 保存,退出
:从命令模式进入退出模式;回到命令模式:EscEsc 或 Esc 等一会 或 Enter
从退出模式退出方式如下:
w保存
q退出
wq保存并退出(x=wq 或x!)
q!强制退出不保存
w!强制保存:(需一下3种情况方可执行)
> root
> 文件的owner
> 当前用户对当前文件所在目录有wx权限时,实际会删除该文件再新建。
引入其他文件内容的方法
:r /etc/issue 读取文件内容,将内容输入到当前文本的最后
:! ifconfig ens33 将命令的输出结果显示,并不存入文件,按q结束命令输出
:r! ifconfig ens33 将命令的输出结果输入到当前光标所在行的下一行
:.! ifconfig ens33 将命令的输出结果输入到前当行,替换原有内容
地址定界
:start_pos,end_pos
# 具体第#行,例如2表示第2行
#,# 从左侧#表示起始行,到右侧#表示结尾行
#,+# 从左侧#表示的起始行,加上右侧#表示的行数
:2,+3 表示2到5行
. 当前行
$ 最后一行
.,$-1 当前行到倒数第二行
% 全文, 相当于1,$
按地址边界替换:
:%s/\<root\>/rooter/g
:%s/\(\<r..t\>\)/\1er/gi 支持基本正则表达式 不加g时每行的第一个关键字替换,加g则全替换;最后“i”:忽略大小写
:%s/\/bin\/bash/\/sbin\/nologin/g 或使用:%s@/bin/bash@/sbin/nologin
undo 撤消
u 一步步还原,最终到达打开状态
U 将该行一次性还原到打开状态,不能换行
e! 一次性将整个文件还原到上次的保存状态
redo ctrl+r 重做
多文件分割
vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口间切换:Ctrl+w, Arrow
单文件窗口分割:
Ctrl+w,s: split, 水平分割
Ctrl+w,v: vertical, 垂直分割
ctrl+w,q:取消相邻窗口
ctrl+w,o:取消全部窗口
:wqall 退出
关于vim file 未正常退出的现象
系统会自动备份 .file.swp文件用于恢复,如下
> 可直接用 vim -r file 命令恢复
> 若已执行 vim file 命令,可按R直接恢复
恢复完成后可删除 .file.swp文件
rm .file.swp -f
完