课程知识概述--系统命令
seq
cat
less
more
head
tail
grep
tr
alias
复习
1.echo
-e 激活特殊的意义
\n 表示回车
\t tab键
[root@oldboy~]#echo "oldboy\talex"
oldboy\talex
[root@oldboy~]#
[root@oldboy~]#echo -e "oldboy\talex"
oldboy alex
[root@oldboy~]#echo "oldboy\nalex"
oldboy\nalex
[root@oldboy~]#
[root@oldboy~]#
[root@oldboy~]#echo -e "oldboy\nalex"
oldboy
alex
例子:在/oldboy目录下创建 oldboy1/01stu..02stu oldboy2/01stu..02stu oldboy3/01stu..02stu oldboy10/01stu..02stu
结果如下:
/oldboy/oldboy1/01stu
/oldboy/oldboy1/02stu
/oldboy/oldboy2/01stu
/oldboy/oldboy2/02stu
....
/oldboy/oldboy10/01stu
/oldboy/oldboy10/02stu
例子2: 在/oldboy目录下创建 test01/blog test01/bbs test01/www test10/blog test10/bbs test10/www
结果:
在/oldboy下有10个目录 test01..test10
在10个目录下分别有三个目录 bbs blog www
[root@oldboy~]#echo /oldboy/oldboy{01..10}
/oldboy/oldboy01 /oldboy/oldboy02 /oldboy/oldboy03 /oldboy/oldboy04 /oldboy/oldboy05 /oldboy/oldboy06 /oldboy/oldboy07 /oldboy/oldboy08 /oldboy/oldboy09 /oldboy/oldboy10
[root@oldboy~]##mkdir /oldboy/oldboy{01..10}
[root@oldboy~]#
[root@oldboy~]#mkdir oldboy01 oldboy02 oldboy03
[root@oldboy~]#ll
总用量 468972
-rw-r--r--. 1 root root 23 4月 27 10:25 1.txt
-rw-r--r--. 1 root root 89782552 3月 20 17:23 360safe+267791+n498d041f99.exe
-rw-r--r--. 1 root root 389758391 8月 22 2018 gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
drwxr-xr-x. 2 root root 6 5月 8 08:52 oldboy01
drwxr-xr-x. 2 root root 6 5月 8 08:52 oldboy02
drwxr-xr-x. 2 root root 6 5月 8 08:52 oldboy03
-rw-r--r--. 1 root root 201 5月 7 11:39 passwd
-rw-r--r--. 1 root root 670293 5月 7 11:17 services
drwxr-xr-x. 12 root root 136 5月 7 11:56 test
-rw-r--r--. 1 root root 94 4月 29 11:51 test.sh
[root@oldboy~]#mkdir /oldboy/oldboy1 /oldboy/oldboy2 /oldboy/oldboy3
[root@oldboy~]#echo /oldboy/oldboy{01..2}/01stu
/oldboy/oldboy01/01stu /oldboy/oldboy02/01stu
[root@oldboy~]#
[root@oldboy~]#
[root@oldboy~]#echo /oldboy/oldboy{01..2}/{01..02}stu
/oldboy/oldboy01/01stu /oldboy/oldboy01/02stu /oldboy/oldboy02/01stu /oldboy/oldboy02/02stu
tree 以树形结构显示
yum -y install tree
-d 只显示所有的目录
[root@oldboy~]#tree -d /oldboy/
/oldboy/
├── oldboy01
│ ├── 01stu
│ └── 02stu
├── oldboy02
│ ├── 01stu
│ └── 02stu
├── oldboy03
│ ├── 01stu
│ └── 02stu
-L 深度等级 PS: -L 1 之间有空格
[root@oldboy~]#tree -L 1 /oldboy/
/oldboy/
├── oldboy01
├── oldboy02
├── oldboy03
├── oldboy04
├── oldboy05
├── oldboy06
├── oldboy07
├── oldboy08
├── oldboy09
└── oldboy10
[root@oldboy~]#tree --du -h /root/
/root/
├── [ 23] 1.txt
├── [ 86M] 360safe+267791+n498d041f99.exe
├── [372M] gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
├── [ 6] oldboy01
├── [ 6] oldboy02
├── [ 6] oldboy03
├── [ 201] passwd
├── [655K] services
├── [ 196] test
│ ├── [ 6] stu01
│ ├── [ 6] stu02
│ ├── [ 6] stu03
│ ├── [ 6] stu04
│ ├── [ 6] stu05
│ ├── [ 6] stu06
│ ├── [ 6] stu07
│ ├── [ 6] stu08
│ ├── [ 6] stu09
│ └── [ 6] stu10
└── [ 94] test.sh
458M used in 14 directories, 6 files
[root@oldboy~]#tree --du -h gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
372M used in 0 directories, 0 files
[root@oldboy~]#tree gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm
gitlab-ce-10.2.2-ce.0.el7.x86_64.rpm [error opening dir]
0 directories, 0 files
例子2: 在/oldboy目录下创建 test01/blog test01/bbs test01/www test10/blog test10/bbs test10/www
结果:
在/oldboy下有10个目录 test01..test10
在10个目录下分别有三个目录 bbs blog www
echo {} 序列中输出不规范的字符串或者数字 1 10 20 35
[root@oldboy~]#echo stu01 stu10 stu15 stu22 stu33
stu01 stu10 stu15 stu22 stu33
[root@oldboy~]#
[root@oldboy~]#
[root@oldboy~]#echo stu{01,10,15,22,33}
stu01 stu10 stu15 stu22 stu33
[root@oldboy~]#echo {a,r,u}oldboy
aoldboy roldboy uoldboy
[root@oldboy~]#echo {a,r,u}-oldboy
a-oldboy r-oldboy u-oldboy
[root@oldboy~]#
[root@oldboy~]#echo oldboy{www,bbs,blog}
oldboywww oldboybbs oldboyblog
[root@oldboy~]#
[root@oldboy~]#
[root@oldboy~]#echo oldboy/{www,bbs,blog}
oldboy/www oldboy/bbs oldboy/blog
[root@oldboy~]#echo A-www A-blog B-www B-blog
A-www A-blog B-www B-blog
[root@oldboy~]#
[root@oldboy~]#echo {A,B}{www,blog}
Awww Ablog Bwww Bblog
[root@oldboy~]#
[root@oldboy~]#
[root@oldboy~]#echo {A,B}-{www,blog}
A-www A-blog B-www B-blog
[root@oldboy~]#mkdir -p /oldboy/test{01..10}/{www,bbs,blog}
[root@oldboy~]#
[root@oldboy~]#tree /oldboy/
/oldboy/
├── test01
│ ├── bbs
│ ├── blog
│ └── www
├── test02
│ ├── bbs
│ ├── blog
│ └── www
错误的书写方式:
[root@oldboy~]#echo /oldboy/test{01..02}/www bbs blog
/oldboy/test01/www /oldboy/test02/www bbs blog
[root@oldboy~]#mkdir /oldboy/test{01..02}/www bbs blog
mkdir: 无法创建目录"/oldboy/test01/www": 没有那个文件或目录
mkdir: 无法创建目录"/oldboy/test02/www": 没有那个文件或目录
[root@oldboy~]#mkdir -p /oldboy/test{01..02}/www bbs blog
[root@oldboy~]#
[root@oldboy~]#tree /oldboy/
/oldboy/
├── test01
│ └── www
└── test02
└── www
4 directories, 0 files
[root@oldboy~]#ll bbs/ blog/
bbs/:
总用量 0
blog/:
总用量 0
2.seq 序列
-w 输出规范的数字 echo {01..10}
-s 指定分隔符 默认回车分隔
[root@oldboy~]#seq -s + 10
1+2+3+4+5+6+7+8+9+10
3.cat 查看文件内容
-n 显示行号
1)输出内容到屏幕 shell编程 打印菜单
[root@oldboy~]#cat <<EOF
> oldboyedu
> EOF
oldboyedu
[root@oldboy~]#cat <<AAA
> test
> alex
> AAA
test
alex
2)内容输入到文件中 > 先清空后写入
[root@oldboy~]#cat 1.txt
test
test
oldboy
alex
lidao
[root@oldboy~]#cat >1.txt<<EOF
> hehe
> hehe
> hehe
> EOF
[root@oldboy~]#cat 1.txt
hehe
hehe
hehe
3)内容追加到文件中 >> 追加内容
[root@oldboy~]#cat 1.txt
hehe
hehe
hehe
[root@oldboy~]#cat >>1.txt<<EOF
> oldboy
> oldboy
> EOF
[root@oldboy~]#cat 1.txt
hehe
hehe
hehe
oldboy
oldboy
4)合并文件 将多个文件的内容合并到同一个文件 方便统计计算
[root@oldboy~]#cat 1.txt 2.txt 3.txt
hehe
hehe
hehe
oldboy
oldboy
[root@oldboy~]#echo 11111111 >1.txt
[root@oldboy~]#echo 22222222 >2.txt
[root@oldboy~]#echo 33333333 >3.txt
[root@oldboy~]#cat 1.txt 2.txt 3.txt
11111111
22222222
33333333
[root@oldboy~]#cat 1.txt
11111111
[root@oldboy~]#cat 2.txt
22222222
[root@oldboy~]#cat 3.txt
33333333
[root@oldboy~]#cat 1.txt 2.txt 3.txt > all.txt
[root@oldboy~]#
[root@oldboy~]#cat all.txt
11111111
22222222
33333333
PS: 只要能在屏幕上显示的内容 就可以定向到文件中 > >>
[root@oldboy~]#cat {1..3}.txt
11111111
22222222
33333333
[root@oldboy~]#echo "1111111111\n2222222\33333333"
1111111111\n2222222\33333333
[root@oldboy~]#echo -e "1111111111\n2222222\33333333"
1111111111
2222222\33333333
[root@oldboy~]#
[root@oldboy~]#echo -e "1111111111\n2222222\n33333333"
1111111111
2222222
33333333
[root@oldboy~]#
[root@oldboy~]#echo -e "1111111111\n2222222\n33333333" >all.txt
[root@oldboy~]#
[root@oldboy~]#
[root@oldboy~]#cat all.txt
1111111111
2222222
33333333
4.less 一页一页的查看文件内容
运行一个文件 程序 系统加载到内存中运行
如果一个文件较大 加载到内存的速度较慢
vim 当前所有的文件内容加载到内存中
PS:在Linux中查看大文件不用vim和cat
参数选项:
-N 显示行号
f 往下翻页
空格 往下翻页
b 往上翻页
100g 快速移动到100行
gg 移动到文件的开头
1g 移动到文件的开头
G 文件的结尾
/ 搜索字符串
n 往下查找
N 往上查找
q 退出
5.more 一页一页的查看文件内容 建议使用less
f
b
到文件的末尾自动退出
6.head 从文件的第一行开始显示 默认显示前10行 包含空行
-n 5 显示文件的前5行
-5 简写
-c 显示文件的前n个字符
[root@oldboy~]#head -5 services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
[root@oldboy~]#head -2 services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
[root@oldboy~]#head services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
-c 了解
[root@oldboy~]#head -c 3 services
# /[root@oldboy~]#
7. tail 默认显示尾部的10行内容
-n5 显示最后5行内容
-5 简写
-f 实时显示文件内容的变化 follow 跟随
tailf 简写
-F 时时显示文件内容的变化 如果查看的文件不存在 则会等待 监控此文件
1)[root@oldboy~]#tail -n 2 services
iqobject 48619/udp # iqobject
matahari 49000/tcp # Matahari Broker
[root@oldboy~]#tail -2 services
iqobject 48619/udp # iqobject
matahari 49000/tcp # Matahari Broker
例子: head tail
1.复制/etc/passwd 到当前家目录
2.显示当前passwd的第15行 如何显示?
[root@oldboy~]#head -16 passwd |tail -1
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
管道:可以把管道前的命令的结果 作为后面命令来使用
2)-f 时时显示文件内容的变化 tail -f 简写 tailf
[root@oldboy~]#tailf /var/log/messages
May 8 11:04:36 oldboy systemd: Starting firewalld - dynamic firewall daemon...
May 8 11:04:37 oldboy systemd: Started firewalld - dynamic firewall daemon.
May 8 11:04:37 oldboy kernel: ip_tables: (C) 2000-2006 Netfilter Core Team
3)-F 时时显示文件内容的变化 如果查看的文件不存在 则会等待 监控此文件
[root@oldboy~]#tail -F oldboy.txt
tail: 无法打开"oldboy.txt" 读取数据: 没有那个文件或目录
tail: "oldboy.txt" 已被建立,正在跟随新文件的末尾
test
test
test
test
test
test
8. grep 查找过滤字符串 awk sed grep
选项参数:
-n 显示过滤到内容的行号
-v 取反
语法格式: 三剑客中 单引号 双引号 不加引号 意义不同
grep 'root' file
cat passwd|grep root
方法1:
[root@oldboy~]#grep 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
方法2:
[root@oldboy~]#cat passwd |grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
方法3: -n
[root@oldboy~]#grep -n root passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboy~]#grep -n . passwd
25:oldboy1:x:1002:1002::/home/oldboy1:/bin/bash
26:oldboy2:x:1003:1003::/home/oldboy2:/bin/bash
PS: . 代表了单个任意字符 *所有 ^ 以任意字符开头 $ 以任意字符结尾 ^$ 空行
< 标准输入 常和tr配合使用
方法4: -v 取反
[root@oldboy~]#cat 1.txt
oldboy
alex
goudan
gousheng
erma
[root@oldboy~]#grep oldboy 1.txt
oldboy
[root@oldboy~]#grep -v oldboy 1.txt
alex
goudan
gousheng
erma
方法5: 配置文件都有注释 只想查看生效的配置
[root@oldboy~]#grep -v '#' config
SELINUX=disabled
SELINUXTYPE=targeted
[root@oldboy~]#grep '^$' config
[root@oldboy~]#grep -v '^$' config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@oldboy~]#grep -v '^$' config |grep -v '#'
SELINUX=disabled
SELINUXTYPE=targeted
扩展:
[root@oldboy~]#egrep -v '^$|#' config
SELINUX=disabled
SELINUXTYPE=targeted
9.tr 内容替换 1对1的替换 不能替换字符串 (oldboy alex 错误的) sed替换
特殊符号的替换
PS: 有些命令不能直接对文件进行操作
[root@oldboy~]#tr ":" "#" 1.txt
tr: 额外的操作数 "1.txt"
Try 'tr --help' for more information.
方法1:
[root@oldboy~]#cat 1.txt |tr ":" "#"
root#x#0#0#root#/root#/bin/bash
bin#x#1#1#bin#/bin#/sbin/nologin
daemon#x#2#2#daemon#/sbin#/sbin/nologin
方法2:
[root@oldboy~]#tr ":" "#" < 1.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
[root@oldboy~]#tr "/" "+" < 1.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
[root@oldboy~]#
[root@oldboy~]#
[root@oldboy~]#tr "\n" "+" < 1.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+[root@oldboy~]#
方法3: 无意义的替换
[root@oldboy~]#cat 2.txt
aabbcc
aabbcc
aabbcc
oldboy
[root@oldboy~]#tr "oldboy" "alex" < 2.txt
aaxxcc
aaxxcc
aaxxcc
xlexxx
9. alias 别名 系统安全设置
周玉强 强哥 小强 强强 钢炮
冉xx oldboy
mv --->别名---> mv -i
rm --->别名---> rm -i
cp --->别名---> cp -i
ll --->别名---> ls -l
[root@oldboy~]#rm -i 1.txt # -i 和用户交互 提高安全性
rm:是否删除普通文件 "1.txt"?
rm='rm -i'
执行rm命令 其实是执行了 rm -i
第一个里程碑 如何查看系统设定好的别名
[root@oldboy~]#alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
第二个里程碑 临时取消别名 \ 转译 还原本来的意义 脱掉了马甲
[root@oldboy~]#\rm 1.txt
第三个里程碑 如何设置别名
格式:
alias 别名的名称(随便定义见名字知道其意思)='系统可执行的命令'
[root@oldboy~]#alias rm='echo command bny....'
[root@oldboy~]#\rm 2.txt
例子:
[root@oldboy~]#alias vieth0='vim /etc/sysconfig/network-scripts/ifcfg-eth0'
[root@oldboy~]#vieth0
第四个里程碑 取消别名
[root@oldboy~]#unalias rm
第五个里程碑 永久生效
写入 /etc/profile
source /etc/profile
PS:工作中上吧的时候一定要注意查看 alias