3、基本命令-2 基本命令-2 压缩和归档 打包:即归档,类似于旅游之前收拾行李 压缩:为了减少占用的磁盘空间,可以做备份,在网络上传输时节省网络带宽。 打包压缩软件 windows:winrar 360压缩 好压 7zip winzip linux:压缩格式:gz ,bz2,xz,zip,Z 压缩算法不同,导致压缩比不同 压缩软件 gzip bzip2 xz zip 既能打包又能压缩的软件:tar **** 一、zip: 压缩后的文件一般以.zip结尾,可以压缩目录 压缩的语法: zip filename.zip file1 file2 ... zip 压缩后的文件名 待压缩文件 压缩后不删除原文件 例如 [root@server150 acltest]# zip com.zip com.txt adding:com.txt (deflated 99%) 解压缩:unzip -d:指定解压路径 二、gzip 1)gzip /path/to/somefile 默认会删除原文件 -d 解压缩 -#: 指定压缩比,压缩比越小,速度越大 2)gunzip /path/to/some_compress_file 3)zcat some_compress_file 不解压的情况下查看文本的压缩文件 例子:#cp /var/log/messages ./ gzip messages 默认后缀名:.gz gzip压缩时,原文件消失,生成压缩文件 解压:gunzip gzip的压缩包,在解压后,压缩包消失,解压后的文件出现。 压缩其实是有级别的:1~9 1级别最低,速度最快,效率最低;9级别最高,速度最慢,效率最高。 默认级别是6。 三、bzip2 默认情况下,压缩完成, 原文件也是消失的,压缩包必须以.bz2结尾的 通常能够生成比使用gzip压缩更小的文件(压缩比较高) 1)bzip2 /path/to/somefile -d:解压 -#:指定压缩比 -k:保留原文件 2)bunzip2 /path/to/somefile 3)bzcat /path/to/some_compress_file 不解压查看 解压缩:bunzip2 四. xz 压缩比更大 1)压缩 xz somefile 2)解压 unxz 或 xzdec -d:解压 -k:保留原文件 -c:输入到屏幕 3)xzcat 不解压查看 以后常见的压缩包的格式 .zip .tar.gz .tar.bz2 五、tar *** 既可以打包,又可以压缩 tar 选项 包名 打包的文件或目录 //切记:一定要注意语法格式,先是打包后的名字,然后才是要打包的东西 tar: 归档工具, .tar 例如:tar -cf -c: 创建归档文件 -f FILE.tar: 操作的归档文件 -x: 展开归档 --xattrs: 归档时,保留文件的扩展属性信息 -t: 不展开归档,直接查看归档了哪些文件 -C:解压时指定路径 -r:向包中追加文件 -p:保留权限信息 -v:显示详细过程 -zcf: 归档并调用gzip压缩 -zxf: 调用gzip解压缩并展开归档,-z选项可省略 -jcf: bzip2 -jxf: -Jcf: xz -Jxf: 1)打包压缩同时进行 -z:表示使用gzip压缩方式压缩或者解压缩 -j:表示使用bzip2压缩方式压缩或者解压缩 -c:表示创建 --create -v:显示详细过程 -f:指定文件,一般后面跟包名 -zcvf zcvf .tar.gz -jcvf jcvf .tar.bz2
tar zcvf com.tar.gz com.txt
com.txt
ll
total 67968 -rw-r--r-- 1 root root 367957 Jul 30 09:24 com.tar.gz
tar zcvf /tmp/acltest.tar.gz /acltest/
2)解包 .tar.gz .tar.bz2 -zxvf zxvf -jxvf jxvf -C:指定解压路径
tar zxvf com.tar.gz -C /usr/local/src/
ls /usr/local/src/
com.txt vmware-tools-distrib 3)其他选项 -t:不解包查看包中的内容
tar -tf /tmp/acltest.tar.gz
acltest/ acltest/f1 acltest/com.txt acltest/f3 acltest/f2 acltest/com.zip acltest/com.tar.gz -r:向包中追加文件,不能追加压缩的文件 tar -rf 包名 追加的文件 三.文件搜索 which:用来查找命令的绝对路径 -- 显示shell命令的绝对路径 -- 仅仅会在PATH变量中搜索要查找的命令 -- 搜索时先查找别名,然后从PATH中查找 1、查看用户的PATH变量:命令的搜索路径
echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
command not found可能原因: 1)敲错了 2)命令没有安装 3)命令所在路径没在PATH变量的定义中
cp which vim
/tmp/vim2
vim2 /etc/passwd
bash: vim2:command not found
/tmp/vim2 /etc/passwd //绝对路径执行
2、添加路径到PATH 1)临时修改PATH值
PATH=$PATH:/tmp //$PATH:保留变量原有值
echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin:/tmp 2)永久修改PATH值 工作中一定会用的 /etc/profile //全局配置文件,对所有用户生效 ~username/.bash_profile //局部配置文件,只对特定用户生效
vim /root/.bash_profile
PATH=$PATH:$HOME/bin:/tmp 上述文件不是即时生效的,正常情况下,它是用户登录时执行的。
source /root/.bash_profile //重新读取配置文件,使修改生效
echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin:/root/bin:/tmp 弊端:每次新开启一个终端或标签,都需要执行# source /root/.bash_profile 如果想一劳永逸,那么需要退出系统,重新登录,即注销。 System ——> Log out root ——> Log out
echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin:/tmp
which ls
alias ls='ls --color=auto' /bin/ls
which vim
/usr/bin/vim 命令的别名: alias 1、查看当前系统中有哪些别名(root用户和普通用户的别名可能不一样)
alias
2、设置命令的别名 1)临时
alias vi='vim'
vi /etc/passwd //执行vi时候,实际上执行的是vim
2)永久,改文件 (1)/root/.bashrc cp rm mv (2) /etc/profile.d colorls.sh which2.sh 3、取消别名 [ profile.d]# unalias vi [ profile.d]# vi /etc/passwd //没颜色了 locate -- 通过文件名检索文件,检索速度最快 -- 所有能够检索的东西,都是存放在数据库中的 -- locate局限性,有的文件系统、有的文件及有的目录默认是不会搜索的 1、假设我知道网卡配置文件的名字,但是不知道具体路径:
locate ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth0
locate ifcfg
/etc/dbus-1/system.d/nm-ifcfg-rh.conf /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-lo /sbin/ifcfg /usr/lib64/NetworkManager/libnm-settings-plugin-ifcfg-rh.so /usr/share/man/man8/ifcfg.8.gz /var/log/anaconda.ifcfg.log 2、手动更新数据库
cp which vim
/root/vim3
locate vim3 //未查询到结果
原因:因为locate的数据库是一天一更新,不是实时更新的。
updatedb
locate vim3
/root/vim3 数据库文件:/var/lib/mlocate/mlocate.db ---------------------------------------------------------- 报错: 1)数据库文件不存在 2)手动生成它
updatedb
3、locate数据库配置文件
vim /etc/updatedb.conf
ls /tmp/vim2
/tmp/vim2
locate vim2 //搜索不到,因为/tmp在排除列表中
find ***** -- 全局性搜索文件 -- 工作方式:沿着文件的层次结构依次向下搜索,找到符合条件的,打印或者是执行相应的操作 一、语法格式 find 要搜索路径 条件(选项) [动作] 1、基本例子
find /etc/ -name network
/etc/vmware-tools/scripts/vmware/network /etc/sysconfig/network /etc/rc.d/init.d/network 一般情况下,查找范围越大,目录层级越深,查找速度就越慢。
mkdir -p /q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m
touch /q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m/test.txt
time find / -name test.txt
/q/w/e/r/t/y/u/i/o/p/a/s/d/f/g/h/j/k/l/z/x/c/v/b/n/m/test.txt /acl/test.txt /tmp/test.txt real 0m3.188s user 0m0.061s sys 0m2.953s 练习: 查找/etc目录下名字为config的文件
find /etc -name config
/etc/vmware-tools/config /etc/selinux/config 2、按条件查找 1)按照文件名搜索 -name:按名字查找 ***** -iname:忽略大小写
find /etc -name networkmanager
find /etc -iname networkmanager
/etc/rc.d/init.d/NetworkManager /etc/NetworkManager 通配符:* 代表任意字符 ? 代表单个字符 查找/etc目录下,所有以.conf结尾的文件
find /etc/ -name *.conf 查找/etc/目录下,以.conf结尾,名称是5个字符的
find /etc/ -name "?????.conf" 练习: 查找/etc目录下,名字为ntp.conf的文件
find /etc -name ntp.conf
/etc/ntp.conf 查找 / 目录下,名字为passwd的文件
find / -name passwd
2)按照文件类型查找 -type f:普通文件 b c d l s p
find /var -type l //查找/var目录下类型是软链接的文件
ll find /var -type l
//验证是否查找到的都是软链接
find /tmp/ -type f
-type 后面只能跟一个字母 ----------------------- 练习: 查找系统中类型是套接字的文件
find / -type s 查找的时候,可能会遇到No such file or directory的错误提示,是正常的,若不想看到可以将错误重定向到“黑洞”(/dev/null)
find / -type s 2> /dev/null
3)按照时间查找 (笔试题) -atime n 以天为单位 -ctime n -mtime n -amin n 以分钟为单位 -cmin n -mmin n n为数字,前面可以带+或者-号 -mtime n +n:n+1天之前 n:n到n+1天之间 -n:n天以内 以n等于7为例: 搜索最近七天内被访问过的所有文件 find . -type f -atime -7 搜索恰好在七天前被访问过的所有文件 find . -type f -atime 7 搜索超过七天内被访问过的所有文件 find . -type f -atime +7 搜索访问时间超过10分钟的所有文件 find . -type f -amin +10 找出比file.log修改时间更长的所有文件 find . -type f -newer file.log ---------------------------------------------------------------------- 插曲: 查看文件的属性信息? stat 文件名
stat passwd
File: `passwd' Size: 1030 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 917613 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-08 20:38:22.080984537 +0800 Modify: 2015-08-08 20:38:22.080984537 +0800 Change: 2015-08-08 20:38:22.080984537 +0800 一个文件有三个时间: atime:访问时间,cat more less ... ... mtime:文件的内容发生变化的时间 vim ... ... (也是 ll 所显示的时间) ctime:文件的属性发生变化的时间 比如:权限改变、大小改变、所有者、所属组等改变 例子:
echo hello > file
stat file
File: `file' Size: 6 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 917619 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-13 12:16:19.494018488 +0800 Modify: 2015-08-13 12:16:19.495018470 +0800 Change: 2015-08-13 12:16:19.495018470 +0800
cat file
hello
stat file
File: `file' Size: 6 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 917619 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-13 12:17:32.381018468 +0800 Modify: 2015-08-13 12:16:19.495018470 +0800 Change: 2015-08-13 12:16:19.495018470 +0800
chmod +x file
stat file
File: `file' Size: 6 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 1197781 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-13 12:17:32.381018468 +0800 Modify: 2015-08-13 12:16:19.495018470 +0800 Change: 2015-08-13 12:21:55.563018148 +0800 //ctime发生变化
echo hahaha >> file
stat file
File: `file' Size: 13 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 1197781 Links: 1 Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-08-13 12:17:32.381018468 +0800 Modify: 2015-08-13 12:23:54.286017831 +0800 Change: 2015-08-13 12:23:54.286017831 +0800 笔试题 1、打印文件的数字权限
stat -c %a file
755 2、打印文件的字母权限
stat -c %A file
-rwxr-xr-x ---------------------------------------------------------------------- 按时间查找小例子
mkdir /find
date
Thu Aug 13 14:22:43 CST 2015
cd /find/
[ find]# touch -t 08131425.30 f0813 //-t:指定文件的创建时间 MMDDHHmm.SS
[ find]# touch -t 08121425.50 f0812
[ find]# touch -t 08111426.30 f0811
[ find]# touch -t 08101426.30 f0810
[ find]# ll f*
-rw-r--r-- 1 root root 0 Aug 10 14:26 f0810
-rw-r--r-- 1 root root 0 Aug 11 14:26 f0811
-rw-r--r-- 1 root root 0 Aug 12 14:25 f0812
-rw-r--r-- 1 root root 0 Aug 13 14:25 f0813
-- 查找/find下修改时间在24小时(1天)之内的文件
[ find]# find . -mtime -1
.
./f0813
-- 查找/find下修改时间在2天前的普通文件
[ find]# find . -type f -mtime +1
./f0810
./f0811
4)按照用户和组查找
-user 用户名
-group 组名
-uid uid
-gid gid
-nouser:孤儿文件 没有所有者的文件
-nogroup:没有所属组的文件
--查找系统中所有者是quota2的文件
[ home]# find / -user quota2 -type f
[ home]# find / -user quota2 -type f 2>/dev/null
-- 查找系统中的孤儿文件
[ home]# userdel quota2
[ home]# find . -type f -nouser
./quota2/.bash_history
./quota2/.bashrc
./quota2/.bash_profile
./quota2/.bash_logout
[ home]# ll find . -type f -nouser
-rw------- 1 502 quota2 29 Aug 11 10:16 ./quota2/.bash_history
-rw-r--r-- 1 502 quota2 18 Aug 29 2012 ./quota2/.bash_logout
-rw-r--r-- 1 502 quota2 176 Aug 29 2012 ./quota2/.bash_profile
-rw-r--r-- 1 502 quota2 124 Aug 29 2012 ./quota2/.bashrc
-- 查找系统中所有者不是root的普通文件 ! 或者 -not
[ home]# find / ! -user root -type f 或者 -or 或者 -o
-- 查找系统中所有者不是root或者类型是套接字的文件
[ home]# find / ! -user root -o -type s
5)按照权限查找 -perm
+222 或者 (用户可写or组可写or其他人可写) 二进制中有1的位置,只要满足其中一个位就可以
-222 并且 (用户可写and组可写and其他人可写) 二进制中有1的位置必须都要有1
rm -f /find/*
cd /find/
[ find]# touch p{r,w,x}_{1,2,3}
[ find]# chmod 400 pr_1
[ find]# chmod 440 pr_2
[ find]# chmod 444 pr_3
[ find]# chmod 200 pw_1
[ find]# chmod 220 pw_2
[ find]# chmod 222 pw_3
[ find]# chmod 100 px_1
[ find]# chmod 110 px_2
[ find]# chmod 111 px_3
[ find]# ll find ./ -perm +020 -type f
--w--w---- 1 root root 0 Aug 13 15:13 ./pw_2
--w--w--w- 1 root root 0 Aug 13 15:13 ./pw_3
[ find]# ll find ./ -perm -020 -type f
--w--w---- 1 root root 0 Aug 13 15:13 ./pw_2
--w--w--w- 1 root root 0 Aug 13 15:13 ./pw_3 当权限位只有一位的时候,+和-是一样的。
[ find]# ll find ./ -perm -222 -type f
--w--w--w- 1 root root 0 Aug 13 15:13 ./pw_3
[ find]# ll find ./ -perm +222 -type f
--w------- 1 root root 0 Aug 13 15:13 ./pw_1
--w--w---- 1 root root 0 Aug 13 15:13 ./pw_2
--w--w--w- 1 root root 0 Aug 13 15:13 ./pw_3 思考:查找系统中拥有suid权限的文件
6)按照文件大小查找 -size
- 大于
- 小于
直接数字 等于
‘b’ for 512-byte blocks (this is the default if no suffix is used) //0.5KB
‘c’ for bytes
‘w’ for two-byte words
‘k’ for Kilobytes (units of 1024 bytes)
‘M’ for Megabytes (units of 1048576 bytes)
‘G’ for Gigabytes (units of 1073741824 bytes)
[ find]# rm -f /find/*
[ find]# dd if=/dev/zero of=f1M bs=1M count=1
[ find]# dd if=/dev/zero of=f2M bs=1M count=2
[ find]# dd if=/dev/zero of=f3M bs=1M count=3
[ find]# dd if=/dev/zero of=f4M bs=1M count=4
[ find]# find . -type f -size -3M
./f2M
./f1M
[ find]# find . -type f -size 3M
./f3M
[ find]# find . -type f -size +3M
./f4M
3、动作
-exec 动作 -- 找到结果之后直接执行动作
-ok 动作 -- 执行动作之前先提示,即需要交互
[ find]# find . -type f -size +3M -exec ls -l {} ;
-rw-r--r-- 1 root root 4194304 Aug 13 15:51 ./f4M
{} —— 用来代替找到的结果
; —— 表示结束标志
[ find]# find . -type f -size +3M -ok ls -l {} ;
< ls ... ./f4M > ? y
-rw-r--r-- 1 root root 4194304 Aug 13 15:51 ./f4M
[ find]# find . -type f -size +3M -ok ls -l {} ;
< ls ... ./f4M > ? n 练习:
1、查找/find目录下,类型是 普通文件的文件将其移动到/test目录下
[ find]# find . -type f -exec mv {} /test ;
[ find]# ls /test/
f1M f2M f3M f4M 或者
[ find]# mv
find . -type f
/test 2、查找/test目录下类型为普通文件的文件,对其进行备份,备份文件的后缀名为.bak [ find]# find /test -type f -exec cp {} {}.bak ; [ find]# ls /test/ f1M f1M.bak f2M f2M.bak f3M f3M.bak f4M f4M.bak 3、删除/test目录下修改时间在一天以内的普通文件 [ find]# find /test/ -type f -mtime -1 -exec rm {} ; grep文本过滤 一.grep:目的是过滤出用户感兴趣的内容 *** 语法:grep [选项] 模式或关键字 文件列表 简单例子: [ loring ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 1、--color 带颜色显示匹配到的关键字 [ loring ~]# grep --color root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 2、-i 忽略大小写 [ loring tmp]# grep --color -i root /find/passwd Root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 3、-v 取反 过滤出不包含nologin的行 [ loring tmp]# grep -v nologin /etc/passwd 4、^ 以某关键字开头 显示/root/.bashrc文件中的非注释行 [ loring tmp]# grep -v ^# /root/.bashrc 5、$ 以某关键字结尾 显示passwd文件中以sh结尾的行 [ loring tmp]# grep sh$ /etc/passwd 6、^$ 空行 显示/root/.bashrc文件中的非注释行和非空行 [ loring tmp]# grep -v ^# /root/.bashrc | grep -v ^$ 7、-c count,统计匹配到的行数 [ loring tmp]# grep -c root /etc/passwd 2 8、 -l 一般和-r联用,只显示包含关键字的文件的名字,而不是显示文件内容 9、-r 递归检索 显示test目录下文件内容中含有root的文件名 [ loring tmp]# grep -rl root /test 10、-q quiet 静默输出 一般在写脚本时候用 [ loring tmp]# grep -q root /etc/passwd [ loring tmp]# echo $? //$?表示上一条命令的执行结果 0 返回结果为0:表示上一条命令的执行时成功的 返回结果非0:表示上一条命令执行失败 [ loring tmp]# grep -q jsjdjjdfhfh /etc/passwd [ loring tmp]# echo $? 1 [ loring tmp]# grep -q root /asdaf grep: /asdaf: No such file or directory [ loring tmp]# echo $? //文件不存在返回2 2 11、-n 显示匹配行的行号 [ loring tmp]# grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 11:operator:x:11:0:operator:/root:/sbin/nologin grep练习: 1、显示/etc/group文件中含有root的行 [ loring test]# grep root /etc/group 2、显示/etc/passwd文件中以rp开头的行 [ loring test]# grep ^rp /etc/passwd 3、显示/etc/group文件中不以:为结尾的行 [ loring test]# grep -v :$ /etc/group 4、显示/etc/rc.local文件中的空行,要求带行号 [ loring test]# grep -n ^$ /etc/rc.local 6: 5、显示仅/mnt/cdrom目录下的文件类型为目录的文件(前提是光盘已挂载,且不使用find) [ loring test]# ll /mnt/cdrom/ | grep ^d 二、cut:就是截取的意思,它的处理对象是“一行”文本,可以从中选取出用户所需要的部分,不影响原文件 可以指定分隔符,然后打印出以分隔符隔开的具体某一列或某几列 语法:cut -f 指定的列 -d ‘分隔符’ -d:指定字段分隔符 -f:指定要输出的区域,多个之间用逗号分隔 -c:指定列的字符 显示/etc/passwd文件中的用户名和uid字段 [ loring test]# cut -d: -f1,3 /etc/passwd [ loring test]# head -5 /etc/passwd | cut -d: -f1,3 root:0 bin:1 daemon:2 adm:3 lp:4 [ loring test]# head -5 /etc/passwd > t1 [ loring test]# vim t1 :%s/:/ /g [ loring test]# cat t1 root x 0 0 root /root /bin/bash bin x 1 1 bin /bin /sbin/nologin daemon x 2 2 daemon /sbin /sbin/nologin adm x 3 4 adm /var/adm /sbin/nologin lp x 4 7 lp /var/spool/lpd /sbin/nologin 以空格为分隔,取出第一个字段 [ loring test]# cut -d" " -f1 t1 root bin daemon adm lp 取出/etc/group文件中组名的字段 cut -d: -f1 /etc/group 打印/etc/passwd 文件中每行的第1-5个字符,以及第7-10个字符的内容 [root@web test]# cat /etc/passwd | cut -c 1-5,7-10 三、sort 排序 -t:指定字段分隔符 -k:指定第几个字段 -n:按照数字顺序排序 -r:反向排序 reverse -u:排序后重复行只打印一次 unique [root@web test]# cat sort.txt b:3 c:2 a:4 e:5 d:1 f:11 对输出内容直接排序,默认按照每行的第一个字符进行排序 [root@web test]# cat sort.txt | sort a:4 b:3 c:2 d:1 e:5 f:11 对输出内容进行反向排序 [root@web test]# cat sort.txt | sort -r f:11 e:5 d:1 c:2 b:3 a:4使用“:”做分隔符,对第2个字段进行排序 [root@web test]# cat sort.txt | sort -t ":" -k 2 d:1 f:11 c:2 b:3 a:4 e:5使用“:”做分隔符,对第2个字段进行排序,按照数字大小排序 [root@web test]# cat sort.txt | sort -t ":" -k 2 -n d:1 c:2 b:3 a:4 e:5 f:11 对/etc/passwd文件按照uid来排序 [ loring test]# sort -t ":" -k 3 -n /etc/passwd 对passwd文件按照uid由大到小的顺序排序 [ loring test]# sort -t ":" -k 3 -nr /etc/passwd 按照gid由小到大的顺序打印/etc/group [ loring test]# sort -t: -k 3 -n /etc/group 四、 uniq 去重,唯一 去除相邻重复行 -c: 显示重复的行数 -i: 忽略大小写 [ loring test]# uniq num.txt 111 222 333 444 222 555 使用uniq时,一般先排序,再去重 [ loring test]# sort num.txt | uniq 111 222 333 444 555 [ loring test]# sort num.txt | uniq -c 1 111 3 222 2 333 1 444 1 555 五、tr 主要作用在于文本转换或者删除。 将/etc/passwd文件中的小写字母转换成大写字母 [root@web test]# cat /etc/passwd | tr '[a-z]' '[A-Z]' 将/etc/passwd文件中的“:”删除掉 [root@web test]# cat /etc/passwd | tr -d ":" 六、paste 文本合并。将文件按照行进行合并,中间使用tab隔开。 [root@web test]# cat a.txt 1 2 3 4 5 [root@web test]# cat b.txt a b c d e按照行合并文件 [root@web test]# paste a.txt b.txt 1 a 2 b 3 c 4 d 5 e 也可以使用-d指定合并文件时行间的分隔符 [root@web test]# paste -d:a.txt b.txt 1:a 2:b 3:c 4:d 5:e [root@web test]# 练习: 统计/etc/passwd文件中一共有几种shell,并显示每种shell有几个用户 [ loring test]# cut -d: -f7 /etc/passwd | sort | uniq -c