一、基础篇
1、Linux版本
内核版本
发行版本
- RedHat Enterprise Linux-(公司级别,付费)
- Fedora(组建一个社区,免费)
- CentOS(基于红帽源代码编译的,免费)
- Debian(华丽界面)
- Ubuntu(华丽界面)
2、安装VirtualBox虚拟机
https://www.virtualbox.org/wiki/Downloads
3、在虚拟机中安装Linux系统
http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/
centos 7.9.2009(第七个版本,升级了9次,2020年9月发布)
4、第一次启动Linux
- $:
代表普通用户
- #:
代表管理员
二、系统操作篇
5、万能的帮助命令man/help/info
man
- man ls
- man 7 man(获取man命令)
- man 1 passwd (代表shell中的passwd命令)
- man 5 passwd (代表/etc/passwod文件)
- man -a passwd(获取所有passwd有关的信息)
help
tpye获取命令的内外部类型
info
全英文版帮助
6、初识pwd和ls命令
-
pwd 显示当前的目录名称
- /
根目录
- ~
用户家目录
- /
7、详解ls命令
- ls 当前目录下文件的查看,常用参数如下
- a
- h
- l
- –full-time
- r
- h
- t
- r
可接多文件目录,展示
8、详解cd命令
- cd
更改当前的操作目录
- cd -
回到刚才的目录
9、创建和删除命令
- mkdir
多目录
- mkdir
多级目录
- mkdir -p
已存在目录/a,当用到命令'mkdir /a' 时报错,而'mkdir -p /a'则不会。
- rmdir
删除空目录
- rm
删除非空目录
10、复制和移动目录
- cp -r
复制目录
- cp -v
复制时显示进度
- cp -p
保持原始文件的所有者,组,许可,和时间表属性。
- cp -a
复制时,尽可能保持文件的结构和属性.(但不保持目录 结构)等同于 -dpR
- mv /tmp/fileA /fileB
对文件移动+重命名
- mv /tmp/dirC /dirB
对目录移动+重命名
- ‘*’
任意数量的字符
- ‘?’
单个字符
- 通配符
11、如何在Linux下查看文本
head 默认查看文件开头十行
- head -5
指定查看文件开头5行
tail 默认查看文件末尾十行
- tail -f
查看最新变化的
wc -l 查看文件有多少行
more
- 按空白键(space)就往下一页显示
- 按 b 键就会往回(back)一页显示
- more命令从前向后读取文件,因此在启动时就加载整个文件
- 没有办法向前面翻, 只能往后面看
- 不常用
less
- 使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动
- 而且 less 在查看之前不会加载整个文件。
- -N
显示每行的行号
- -s
显示连续空行为一行
- gg
开头
- G
结尾
- ctrl + f
向后翻一页
- b
向前翻一页
- ps -ef|less -N
ps查看进程信息并通过less分页显示同时显示行号
12、打包压缩和解压缩
tar
- c
打包
- x
解包
- C
大写C后面跟解压的目的路径
- f
指定操作类型为文件
- z
对gzip文件压缩或者解压,压缩比略小,时间快
- j
对bzip2文件进行压缩或者解压,压缩比更高,时间慢
- 注意 .tar.gz可以缩写为.tgz
- 注意 .tar.bz2可以缩写为.tbz2
13、Vim的四种模式
正常模式
命令模式
插入模式
可视模式
14、Vim的正常模式
- i
在光标当前位置前一字符插入
- I
在光标所在行首字符位置插入
- a
在光标当前位置后一字符插入
- A
在光标所在行末字符插入
- o
在光标当前行下一行插入
- O
在光标当前行上一行插入
- {n}yy
从当前行为1行算起,复制n行
- y$
从光标位置到当前行末尾位置进行复制
- p
粘贴至光标当前行的下一行
- dd
剪切一整行
- d$
从光标位置到当前行末尾位置进行剪切
- u
撤销命令
- ctrl+R
将刚才的撤销命令进行重做
- :set nu/nonu
显示/不显示 行号设置
- {n}G
跳转到第n行
- g
跳转至第一行
- G
跳转至最后一行
- ^
shift+6跳转至行首
- $
shift+4跳转至行尾
- v
跳转到可视模式
15、Vim的命令模式
- :!
执行linux命令并显示结果,查看完按回车返回
- :/demo
查找demo字符,n下移,N上移
- :/s/old/new
对光标所在行进行替换(第一个old替换成new)
- :%s/old/new
对整个文件进行替换(第一个old替换成new)
- :%s/old/new/g
对整个文件进行全局替换(全部old替换成new)
- :{n},{m}s/old/new
在第n到m行进行替换
- :set hlsearch/nohlsearch
开/关 查找高亮设置
vim /etc/vimrc在最后一个行添加set命令进行设置永久生效
16、Vim的可视模式
- v
字符可视模式
- V
行可视模式
- ctrl V
块可视模式,选中后进行shift+i操作,然后按两次ESC即可生效,如果d删除直接按就行
17、用户和用户组管理及密码管理
-
useradd
添加用户
- useradd -g group1 user2
创建user2时指定组为group1
- useradd -g group1 user2
-
userdel
删除用户,-r参数,删除家目录,如果不加r删除,则家目录数组变成1000或1001之类的,就会造成除了root之外其他任何人无权访问
-
passwd
设置密码,后面跟username,如果不跟,则表示修改自己的密码
-
usermod
- usermod -d /home/{newHomeDir}可以修改用户家目录
- Usermod -g group1 user1
将user1用户组改为group1
-
change
修改用户生命周期
-
id 查看用户
-
/etc/passwd,/etc/shadow
-
groupadd
添加组
-
groupdel
删除组
18、su和sudo命令的区别和使用方法
su
su - username
su -或者su - root
切换用户,需要目标用户密码
-的意思是到家目录
sudo
- 相比于su切换身份须要用户自己的password
- sudo仅仅是须要自己的password,就能够以其它用户的身份来运行命令。
- 常常是以root的身份运行命令也并不是全部人都能够用sudo:
- sudo是依赖于/etc/sudoers这个配置文件的
sudo的运行有这样一个流程:
-
当用户运行sudo时,系统于/etc/sudoers文件里查找该用户是否有运行sudo的权限;
-
若用户具有可运行sudo的权限。那么让用户输入用户自己的password,注意这里输入的是用户自己的password。
-
假设password正确。便开始进行sudo后面的命令
-
root运行sudo是不须要输入password的,切换到的身份与运行者身份同样的时候。也不须要输入password。
sudo 与su配合使用
visudo中A用户如果配置了/bin/su -
则A执行sudo su -
就可切换到root,并且A用户执行sudo就是root老大了
需求
root设置命令shutdown -d 30(30min后进行关机)
现在需要赋予普通用户user1能够进行shutdown -c (阻止关机的动作)
root >
shutdown -d 30
user1>
shutdown -c【报错权限不足】
root >
visudo
- %wheel代表wheel组,%代表组,直接写wheel就是wheel用户
- ALL=(ALL)
- 等号左边代表IP,如果为localhost那么代表字符终端,图形终端(ssh终端)要使用ALL
- 等号右边代表可操作的命令,不知道命令在哪儿用which查看命令目录位置
- user1 ALL=/sbin/shutdown -c
root >
su - user1【切换到user1用户,并跳转至其家目录,不加-的话,只切换用户,不跳转目录】
user1
>sudo /sbin/shutdown -c【输入user1密码后即可终止关机操作】
19、用户和用户组的配置文件介绍
/etc/passwd
/etc/shadow
/etc/group
19、用户和用户组的配置文件介绍
20、文件和目录权限的表示方法
21、文件权限的修改方法和数字表示方法
22、权限管理以及文件的特殊权限
三、系统管理篇
23、网络管理
24、查看网络配置
25、修改网络配置
26、网络故障排除命令
27、软件包管理器的使用
28、使用rpm命令安装软件包
29、通过源代码编译安装软件包
30、如何进行内核升级
31、grub配置文件介绍
32、使用ps和top命令查看进程
33、进程的控制与进程之间的关系
34、进程的通信方式与信号:kill命令
35、守护进程
36、screen命令和系统日志
37、服务管理工具systemctl
38、SELinux简介
39、内存与磁盘管理
40、内存查看命令
41、磁盘分区和文件大小查看
42、文件系统管理
43、节点和数据块操作
44、分区和挂载
45、分区和挂载磁盘配额
46、交换分区swap的查看与创建
47、软件RAID的使用
48、逻辑卷LVM的用途与创建
49、系统综合状态查看命令sar以及第三方命令
shell篇
50、什么是shell
51、Linux的启动过程
52、Shell脚本的格式
53、脚本不同执行方式的影响
54、管道
55、重定向
56、变量赋值
57、变量引用及作用范围
58、环境变量、预定义变量与位置变量
59、环境变量配置文件
60、数组
61、转义和引用
62、运算符
63、特殊字符大全
64、test比较
65、if判断的使用
66、if-else判断的使用
67、嵌套if的使用
68、case分支
69、for的基本使用
70、C语言风格的for
71、while循环和until循环
72、循环的嵌套和break、continue语句
73、使用循环处理位置参数
74、自定义函数
75、系统函数库介绍
76、脚本资源控制
77、信号
78、一次性计划任务
79、周期性计划任务
80、为脚本加锁
五、文本操作篇
81、元字符介绍
82、find演示
83、sed和awk介绍
84、sed替换命令详解
85、sed的替换指令加强版
86、sed的其他常用命令
87、sed多行模式空间
88、什么是sed的保持空间
89、认识awk
90、awk的字段
91、awk表达式
92、awk判断和循环
93、awk数组
94、awk数组功能的使用
95、awk函数
六、服务管理篇
96、防火墙概述
97、iptables规则的基本使用演示
98、iptables过滤规则的使用
99、iptables nat表的使用
100、firewalld
101、SSH介绍之Telnet明文漏洞
102、SSH服务演示
103、FTP服务器vsftpd介绍与软件包安装
104、vsftpd配置文件介绍
105、vsftpd虚拟用户
106、samba服务演示
107、NFS服务
108、Nginx基本配置文件
109、使用Nginx配置域名虚拟主机
110、LNMP环境搭建
111、DNS服务的原理
112、NAS演示
七、 其他工具命令篇
113、 grep工具
grep是**行**过滤工具;用于根据关键字进行行过滤
语法和选项
语法:
# grep [选项] '关键字' 文件名
常见选项:
OPTIONS:-i: 不区分大小写-v: 查找不包含指定内容的行,反向选择-w: 按单词搜索-o: 打印匹配关键字-c: 统计匹配到的行数-n: 显示行号-r: 逐层遍历目录查找-A: 显示匹配行及后面多少行 -B: 显示匹配行及前面多少行-C: 显示匹配行前后多少行-l:只列出匹配的文件名-L:列出不匹配的文件名-e: 使用正则匹配-E:使用扩展正则匹配^key:以关键字开头key$:以关键字结尾^$:匹配空行--color=auto :可以将找到的关键词部分加上颜色的显示
颜色显示(别名设置):
临时设置:
# alias grep='grep --color=auto' //只针对当前终端和当前用户生效永久设置:
1)全局(针对所有用户生效)
vim /etc/bashrc
alias grep='grep --color=auto'
source /etc/bashrc2)局部(针对具体的某个用户)
vim ~/.bashrc
alias grep='grep --color=auto'
source ~/.bashrc
举例说明:
说明:不要直接使用/etc/passwd文件,将其拷贝到/tmp下做实验!
# grep -i root passwd 忽略大小写匹配包含root的行
# grep -w ftp passwd 精确匹配ftp单词
# grep -w hello passwd 精确匹配hello单词;自己添加包含hello的行到文件
# grep -wo ftp passwd 打印匹配到的关键字ftp
# grep -n root passwd 打印匹配到root关键字的行好
# grep -ni root passwd 忽略大小写匹配统计包含关键字root的行
# grep -nic root passwd 忽略大小写匹配统计包含关键字root的行数
# grep -i ^root passwd 忽略大小写匹配以root开头的行
# grep bash$ passwd 匹配以bash结尾的行
# grep -n ^$ passwd 匹配空行并打印行号
# grep ^# /etc/vsftpd/vsftpd.conf 匹配以#号开头的行
# grep -v ^# /etc/vsftpd/vsftpd.conf 匹配不以#号开头的行
# grep -A 5 mail passwd 匹配包含mail关键字及其后5行
# grep -B 5 mail passwd 匹配包含mail关键字及其前5行
# grep -C 5 mail passwd 匹配包含mail关键字及其前后5行
114、 cut工具
cut是**列**截取工具,用于列的截取
语法和选项
语法:
# cut 选项 文件名
常见选项:
-c: 以字符为单位进行分割,截取
-d: 自定义分隔符,默认为制表符\t
-f: 与-d一起使用,指定截取哪个区域
举例说明:
# cut -d: -f1 1.txt 以:冒号分割,截取第1列内容
# cut -d: -f1,6,7 1.txt 以:冒号分割,截取第1,6,7列内容
# cut -c4 1.txt 截取文件中每行第4个字符
# cut -c1-4 1.txt 截取文件中每行的1-4个字符
# cut -c4-10 1.txt 截取文件中每行的4-10个字符
# cut -c5- 1.txt 从第5个字符开始截取后面所有字符
# show export任务获取第2、4、7个字段并用¥分隔
$(mysql -h ke-doris-fe.youdao.com -P 9030 -umm -pmm_doris -D ${db} -e 'show export;'|grep ${hdfsPath} | tail -1 | cut -f2,4,7 --output-delimiter='¥')
课堂练习:
用小工具列出你当系统的运行级别。5/3
- 如何查看系统运行级别
- 命令
runlevel
- 文件
/etc/inittab
- 命令
- 如何过滤运行级别
runlevel |cut -c3
runlevel | cut -d ' ' -f2
grep -v '^#' /etc/inittab | cut -d: -f2
grep '^id' /etc/inittab |cut -d: -f2
grep "initdefault:$" /etc/inittab | cut -c4
grep -v ^# /etc/inittab |cut -c4
grep 'id:' /etc/inittab |cut -d: -f2
cut -d':' -f2 /etc/inittab |grep -v ^#
cut -c4 /etc/inittab |tail -1
cut -d: -f2 /etc/inittab |tail -1
115、 sort工具
sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法和选项
-u :去除重复行
-r :降序排列,默认是升序
-o : 将排序结果输出到文件中,类似重定向符号>
-n :以数字排序,默认是按字符排序
-t :分隔符
-k :第N列
-b :忽略前导空格。
-R :随机排序,每次运行的结果均不同
举例说明
# sort -n -t: -k3 1.txt 按照用户的uid进行升序排列
# sort -nr -t: -k3 1.txt 按照用户的uid进行降序排列
# sort -n 2.txt 按照数字排序
# sort -nu 2.txt 按照数字排序并且去重
# sort -nr 2.txt
# sort -nru 2.txt
# sort -nru 2.txt
# sort -n 2.txt -o 3.txt 按照数字排序并将结果重定向到文件
# sort -R 2.txt
# sort -u 2.txt
116、uniq工具
uniq用于去除**连续的重复**行
常见选项:
-i: 忽略大小写
-c: 统计连续重复行次数
-d:只显示连续的重复行举例说明:
# uniq 2.txt
# uniq -d 2.txt
# uniq -dc 2.txt
117、tee工具
tee工具是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)
选项:
-a 双向追加重定向# echo hello world
# echo hello world|tee file1
# cat file1
# echo 999|tee -a file1
# cat file1
118、diff工具
diff工具用于逐行比较文件的不同
注意:diff描述两个文件不同的方式是告诉我们怎样改变第一个文件之后与第二个文件匹配。
语法和选项
语法:
diff [选项] 文件1 文件2
常用选项:
选项 | 含义 | 备注 |
---|---|---|
-b | 不检查空格 | |
-B | 不检查空白行 | |
-i | 不检查大小写 | |
-w | 忽略所有的空格 | |
–normal | 正常格式显示(默认) | |
-c | 上下文格式显示 | |
-u | 合并格式显示 |
举例说明:
- 比较两个普通文件异同,文件准备:
[root@MissHou ~]# cat file1
aaaa
111
hello world
222
333
bbb
[root@MissHou ~]#
[root@MissHou ~]# cat file2
aaa
hello
111
222
bbb
333
world
1)正常显示
diff目的:file1如何改变才能和file2匹配
[root@MissHou ~]# diff file1 file2
1c1,2 第一个文件的第1行需要改变(c=change)才能和第二个文件的第1到2行匹配
< aaaa 小于号"<"表示左边文件(file1)文件内容
--- ---表示分隔符
> aaa 大于号">"表示右边文件(file2)文件内容
> hello
3d3 第一个文件的第3行删除(d=delete)后才能和第二个文件的第3行匹配
< hello world
5d4 第一个文件的第5行删除后才能和第二个文件的第4行匹配
< 333
6a6,7 第一个文件的第6行增加(a=add)内容后才能和第二个文件的第6到7行匹配
> 333 需要增加的内容在第二个文件里是333和world
> world
2)上下文格式显示
[root@MissHou ~]# diff -c file1 file2
前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号***表示file1,---表示file2
*** file1 2019-04-16 16:26:05.748650262 +0800
--- file2 2019-04-16 16:26:30.470646030 +0800
*************** 我是分隔符
*** 1,6 **** 以***开头表示file1文件,1,6表示1到6行
! aaaa !表示该行需要修改才与第二个文件匹配111
- hello world -表示需要删除该行才与第二个文件匹配222
- 333 -表示需要删除该行才与第二个文件匹配bbb
--- 1,7 ---- 以---开头表示file2文件,1,7表示1到7行
! aaa 表示第一个文件需要修改才与第二个文件匹配
! hello 表示第一个文件需要修改才与第二个文件匹配111222bbb
+ 333 表示第一个文件需要加上该行才与第二个文件匹配
+ world 表示第一个文件需要加上该行才与第二个文件匹配
3)合并格式显示
[root@MissHou ~]# diff -u file1 file2
前两行主要列出需要比较的文件名和文件的时间戳;文件名前面的符号---表示file1,+++表示file2
--- file1 2019-04-16 16:26:05.748650262 +0800
+++ file2 2019-04-16 16:26:30.470646030 +0800
@@ -1,6 +1,7 @@
-aaaa
+aaa
+hello111
-hello world222
-333bbb
+333
+world
- 比较两个目录不同
默认情况下也会比较两个目录里相同文件的内容
[root@MissHou tmp]# diff dir1 dir2
diff dir1/file1 dir2/file1
0a1
> hello
Only in dir1: file3
Only in dir2: test1
如果只需要比较两个目录里文件的不同,不需要进一步比较文件内容,需要加-q选项
[root@MissHou tmp]# diff -q dir1 dir2
Files dir1/file1 and dir2/file1 differ
Only in dir1: file3
Only in dir2: test1
其他小技巧:
有时候我们需要以一个文件为标准,去修改其他文件,并且修改的地方较多时,我们可以通过打补丁的方式完成。
1)先找出文件不同,然后输出到一个文件
[root@MissHou ~]# diff -uN file1 file2 > file.patch
-u:上下文模式
-N:将不存在的文件当作空文件
2)将不同内容打补丁到文件
[root@MissHou ~]# patch file1 file.patch
patching file file1
3)测试验证
[root@MissHou ~]# diff file1 file2
[root@MissHou ~]#
119、 paste工具
paste工具用于合并文件行
常用选项:
-d:自定义间隔符,默认是tab
-s:串行处理,非并行
120、 tr工具
tr用于字符转换,替换和删除;主要用于删除文件中控制字符或进行字符转换
语法和选项
语法:
用法1:命令的执行结果交给tr处理,其中string1用于查询,string2用于转换处理commands|tr 'string1' 'string2'用法2:tr处理的内容来自文件,记住要使用"<"标准输入tr 'string1' 'string2' < filename用法3:匹配string1进行相应操作,如删除操作tr [options] 'string1' < filename
常用选项:
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串
常匹配字符串:
字符串 | 含义 | 备注 |
---|---|---|
a-z或[:lower:] | 匹配所有小写字母 | 所有大小写和数字[a-zA-Z0-9] |
A-Z或[:upper:] | 匹配所有大写字母 | |
0-9或[:digit:] | 匹配所有数字 | |
[:alnum:] | 匹配所有字母和数字 | |
[:alpha:] | 匹配所有字母 | |
[:blank:] | 所有水平空白 | |
[:punct:] | 匹配所有标点符号 | |
[:space:] | 所有水平或垂直的空格 | |
[:cntrl:] | 所有控制字符 | \f Ctrl-L 走行换页 \n Ctrl-J 换行 |
\r Ctrl-M 回车
\t Ctrl-I tab键 |
举例说明:
[root@MissHou shell01]# cat 3.txt 自己创建该文件用于测试
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
boss02:x:516:511::/home/boss02:/bin/bash
vip:x:517:517::/home/vip:/bin/bash
stu1:x:518:518::/home/stu1:/bin/bash
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
aaaaaaaaaaaaaaaaaaaa
bbbbbb111111122222222222233333333cccccccc
hello world 888
666
777
999# tr -d '[:/]' < 3.txt 删除文件中的:和/
# cat 3.txt |tr -d '[:/]' 删除文件中的:和/
# tr '[0-9]' '@' < 3.txt 将文件中的数字替换为@符号
# tr '[a-z]' '[A-Z]' < 3.txt 将文件中的小写字母替换成大写字母
# tr -s '[a-z]' < 3.txt 匹配小写字母并将重复的压缩为一个
# tr -s '[a-z0-9]' < 3.txt 匹配小写字母和数字并将重复的压缩为一个
# tr -d '[:digit:]' < 3.txt 删除文件中的数字
# tr -d '[:blank:]' < 3.txt 删除水平空白
# tr -d '[:space:]' < 3.txt 删除所有水平和垂直空白
小试牛刀
- 使用小工具分别截取当前主机IP;截取NETMASK;截取广播地址;截取MAC地址
# ifconfig eth0|grep 'Bcast'|tr -d '[a-zA-Z ]'|cut -d: -f2,3,4
10.1.1.1:10.1.1.255:255.255.255.0
# ifconfig eth0|grep 'Bcast'|tr -d '[a-zA-Z ]'|cut -d: -f2,3,4|tr ':' '\n'
10.1.1.1
10.1.1.255
255.255.255.0
# ifconfig eth0|grep 'HWaddr'|cut -d: -f2-|cut -d' ' -f4
00:0C:29:25:AE:54
# ifconfig eth0|grep 'HW'|tr -s ' '|cut -d' ' -f5
00:0C:29:B4:9E:4E# ifconfig eth1|grep Bcast|cut -d: -f2|cut -d' ' -f1
# ifconfig eth1|grep Bcast|cut -d: -f2|tr -d '[ a-zA-Z]'
# ifconfig eth1|grep Bcast|tr -d '[:a-zA-Z]'|tr ' ' '@'|tr -s '@'|tr '@' '\n'|grep -v ^$
# ifconfig eth0|grep 'Bcast'|tr -d [:alpha:]|tr '[ :]' '\n'|grep -v ^$
# ifconfig eth1|grep HWaddr|cut -d ' ' -f11
# ifconfig eth0|grep HWaddr|tr -s ' '|cut -d' ' -f5
# ifconfig eth1|grep HWaddr|tr -s ' '|cut -d' ' -f5
# ifconfig eth0|grep 'Bcast'|tr -d 'a-zA-Z:'|tr ' ' '\n'|grep -v '^$'
- 将系统中所有普通用户的用户名、密码和默认shell保存到一个文件中,要求用户名密码和默认shell之间用tab键分割
# grep 'bash$' passwd |grep -v 'root'|cut -d: -f1,2,7|tr ':' '\t' |tee abc.txt