12.12 &12.13
基础命令练习一
内容:
1. mkdir ls pwd cd touch vi/vim echo cat
2. 输出/出入重定向
3. EOF 起止符 往文件中写入多行内容
4. xargs -n 分组显示
5. cp rm mv
6. man帮助手册
7./data 和 /data/区别
7. find cd
8. grep head,tail sed awk 排除
9. head+tail sed awk grep 显示某几行
10. 别名 alias 临时 永久
11. sed 替换
第1章 创建一个目录/data
1.1 mkdir命令 ==make directory 创建目录
mkdir /data
快捷键:tab 补全目录或路径
1.2 ls -l 显示详细信息
[[email protected] oldboy]# ls -l
total 5408
-rw-r--r--. 1 root root 2097152 Dec 15 2017 ;
-rw-r--r--. 1 root root 1282040 Nov 11 2017 1.log
-rw-r--r--. 1 root root 34 Dec 19 2017 ai.txt
1.3 绝对路径与相对路径的区别
绝对路径:从根开始的路径 如:/etc/hosts
相对路径:不是从根开始的路径 如:etc/hosts
cd 切换路径
pwd 显示当前工作目录
第2章 在/data下面创建文件oldboy.txt
2.1 touch 创建文件
touch /data/oldboy.txt
第3章 为oldboy.txt增加内容”I am studying linux” ---(3种方法) (vi/vim echo cat)
3.1 方法一:vi/vim
1. 打开文件
vi /data/oldboy.txt
2. 进入编辑模式(插入模式)
按字母 i
3. 写入
I am studying linux
4. 退出编辑模式
Esc键
5. 保存并退出
:wq
6. 检查---查看文件内容
cat /data/oldboy.txt
3.1.1 vim补充:
i 编辑模式
Esc 退出编辑模式,进入命令模式
:wq 保存退出
: q! 强制退出不保存
3.2 方法二:echo 输出到屏幕 把引号中内容显示到屏幕上
Vim echo >> 三个命令会自动创建文件
echo “I am studying linux” >>/data/oldboy.txt
3.2.1 重定向(详解) 改变命令执行时,数据输出的方向
>> 或1>> 追加重定向,增加到文件的结尾 (漏斗)
> 或 1>> 输出重定向 清空内容,然后追加
>> > 标准输出重定向 标准追加输出重定向 会把前面命令执行正确的内容 放 到一个文件中
2> 错误重定向:把错误信息输入到后面的文件中,会删除文件原有内容
2>>错误追加重定向: 把前面错误信息追加到后边的文件中,不会清除文件原有内容
例:
cho "lidao.blog.51cto.com" 2>>/data/error.txt
[[email protected] ~]# cho "lidao.blog.51cto.com" 2>>/data/error.txt
[[email protected] ~]# cat /data/error.txt
-bash: cho: command not found
-bash: cho: command not found
实例3-1
同时把正确和错误的信息都记录下来
#我想把执行对的结果放到文件中 /data/oldboy.txt
#我想把执行有错误的放到文件中 /data/oldboy.txt
echo “lidao.blog.51cto.com” 2>>/data/oldboy.txt >>/data/oldboy.txt
或
echo "lidao.blog.51cto.com" >>/data/oldboy.txt 2>&1
###/data/oldboy.txt 相当于日志功能 ,两条命令执行结果相同
3.3 方法三:cat 查看文件内容 向文件中追加多行
cat >>/data/oldboy.txt<<EOF
I
am
Studying 向一个文件中追加多行
Linux
EOF
3.3.1 EOF 起始结束符号,遇到即停止,可任意相同记号
[[email protected] oldboy]# cat >>mike.txt <<gao
> I
> love
> you
> gao
[[email protected] oldboy]# cat mike.txt
I
love
you
3.3.2 < 或 0< 标准输入重定向 告诉命令从哪里获取文件
<< 或 0<< 标准输入追加重定向
3.3.3 xargs -n数字 指定显示列数
[[email protected] oldboy]# cat mike.txt
I
love
you
[[email protected] oldboy]# echo "1 2 3 4 5 6 7 8 ">deny.txt
[[email protected] oldboy]# cat deny.txt
1 2 3 4 5 6 7 8
[[email protected] oldboy]# xargs -n2 <deny.txt
1 2 前面的命令执行的是后面的文件
3 4
5 6 技巧:“漏斗”的输出方向
7 8
第4章 把oldboy.txt复制到/tmp下
4.1 cp命令 复制
cp /data/oldboy.txt /tmp
4.2 想把整个目录复制过去
cp -r 递归复制,复制目录及美容 一层一层复制目录
第5章 Linux中查看帮助
5.1 man 命令 --上下键 空格 退出:q
5.2 网站命令学习
http://linux.51yip.com/
http://man.linuxde.net/
https://www.die.net/
5.3 运维习惯
操作前备份,操作后检查
cp命令
第6章 把/data目录移动到/root下
6.1 mv命令
mv /data/ /root/
6.2 扩展:/data 和 /data/ 的区别
/data 表示 /data 目录 和目录里的内容
/data/ 表示目录里的内容
第7章 进入/root目录下的data目录,删除oldboy.txt 文件
7.1 rm命令
rm oldboy.txt
参数:
-f 强制删除(不提醒) -r 递归删除
rm 参数可以加在最后面
如:rm /data/oldboy -f
7.1.1 防止误删除
1.把危险的参数放在最后面
2.尽量使用相对路径删除目录
3.删除命令复杂一些 find |xargs
4.不要在/(根)下进行操作
5.给危险命令设置别名
6.把要删除的文件先复制到/tmp中
第8章 接第六题,退出上一级目录,删除data目录
8.1 find命令的使用
8.1.1 语法:find 在××× 什么类型 什么名字
例:find /root/ -type f -name “oldboy.txt”
查找 /root/目录下 文件名字为oldboy.txt
8.1.2 搭配: 1)find |xargs 2)*
1) find |xargs
例: find /root/ -type f -name “oldboy.txt” |xargs ls -l
答案: find /root/ -type f -name “oldboy.txt” |xargs rm -f
注意:先查看,再删除,避免误操作
2)* (星号) 表示所有,任意
例: find /root/ -type f -name “*.txt”
查找/root/目录下所有文件名为。txt的文件
(2)cd 的用法
cd .. 进入当前目录的上一级目录
cd../../ 进入当前目录的上两级目录
cd.(点) 表示当前目录
第9章 已知文件test.txt内容为: (五种方法)
test
lidao
oldboy
请给出输出test.txt文件内容时不包含oldboy字符串的命令
9.1 方法一:grep 命令的用法 过滤
选项: -v 排除
答案:grep -v “oldboy” /data/test.txt
9.2 方法二:head命令 显示文件前几行 默认为为前十行
选项: -n数字 或 -数字 显示文件前几行
答案:head -2 /data/test.txt
9.3 方法三:awk 命令 ! 表示排除,取反
[[email protected] oldboy]# awk '/oldboy/' /data/test.txt
oldboy
[[email protected] oldboy]# awk '!/oldboy' /data/test.txt
awk: !/oldboy
awk: ^ unterminated regexp
[[email protected] oldboy]# awk '!/oldboy/' /data/test.txt
test
lidao
9.4 方法四:sed命令 d 表示删除
用法 : d 表示删除
[[email protected] oldboy]# sed '/oldboy/d' /data/test.txt
test
lidao
9.5 方法五:sed命令
[[email protected] oldboy]# sed '3d' /data/test.txt
test
lidao
9.6 小结:
1. grep 过滤
2. head tail
3. awk sed
第10章 请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录和/oldboy/test 目录
10.1 mkdir命令 创建目录
选项: -p 一次创建多级目录
答案:mkdir -p /oldboy/test
第11章 已知/tmp下已存在test.txt文件。如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖/tmp/test.txt,而让系统不提示覆盖(root权限下) 直接覆盖
11.1 创建环境
[[email protected] ~]# touch /mnt/test.txt /tmp/test.txt
11.2 方法一: 临时取消别名 撬棍(反斜杠)
答案:\cp /mnt/test.txt /tmp/
11.3 方法二: 临时取消别名 which
使用命令的绝对路径 which
which +命令 显示命令的绝对路径 命令的位置
[[email protected] ~]# which cp
alias cp='cp -i'
/bin/cp
答案:/bin/cp /mnt/test.txt /tmp/
11.4 方法三: 别名
别名 alias 显示系统中所有别名
alias cp 显示cp别名
11.4.1 alias作用:
1. 给危险的命令上道保险
2. 常用的命令,复杂的命令简单化
例:给rm命令设置别名command bny
[[email protected] ~]# alias rm='echo command bny'
等号左右没有空格 ,右边是命令,单引号
[[email protected] ~]# alias rm
alias rm='echo command bny'
[[email protected] ~]# rm /mnt
command bny /mnt
11.4.2 unalias 删除别名
11.4.3 永久设置别名
配置文件/etc/profile
11.4.4 vim 快捷键
G 到达文件的最后一行
i 进入编辑模式
o 在当前行下面插入一个新行并进入编辑模式
实例11-1 [[email protected] /]# tail -2 /etc/profile
unset -f pathmun
alias cp='echo command bny'
使配置文件生效
[[email protected] /]# source /etc/profile
[[email protected] ~]# alias cp
alias cp='echo command bny'
[[email protected] /]# cp /oldboy
command bny /oldboy
[[email protected] /]#
普通用户正常有用
但xshell重新连接root用户又变成alias cp=’cp -i’
解决:
11.4.5 修改文件: /root/.bashrc
在三个别名前面加个#(注释号)号,使其失效,这样问题就解决了
小结:alias 设置或显示别名
source 让别名/配置生效
11.5 问题:
1. 如果配置文件里设置一个,命令行临时有设置一个,那个生效?
答:如果重新连接 配置文件里的生效
不重新连接 命令行配置生效
11.5.1 注:xargs 不认识别名
第12章 只查看ett.txt文件(共100行)第20到第30行的内容(4种方法)
12.1 创建环境 Seq 生成行 sequence 数字序列
[[email protected] oldboy]# seq 50 >ett.test
[[email protected] oldboy]# tail -4 ett.test
47
48
49
50
12.2 方法一: head -30 ett.txt | tail -11
[[email protected] oldboy]# head -30 ett.test | tail -11
20
21
22
23
24
25
26
27
28
29
30
12.3 方法二:sed命令
选项: -n 取消默认输出 默认输出每一行的内容
p pint 显示
答案:sed -n ‘20,30p’ /oldboy/ett.test
[[email protected] oldboy]# sed -n '20,30p' ett.test
20
21
22
23
24
25
26
27
28
29
30
12.4 方法三:awk命令
用法:NR==数字 行号
答案:awk ‘NR==20,NR==30’ ett.test
[[email protected] oldboy]# awk 'NR==20,NR==30' ett.test
20
21
22
23
24
25
26
27
28
29
30
12.5 方法四:grep (碰巧)
12.5.1 -A10 显示当前内容及接下来的10行
答案:grep -A10 “20” /oldboy/ett.test
[[email protected] oldboy]# grep -A10 "20" ett.test
20
21
22
23
24
25
26
27
28
29
30
12.5.2 -B10 显示当前内容及之前的10行
答案:grep -B10 “30” /oldboy/ett.test
[[email protected] oldboy]# grep -B10 "30" ett.test
20
21
22
23
24
25
26
27
28
29
30
12.5.3 -c35 显当前内容及前后各5行
grep -C5 “35” /oldboy/ett.test
[[email protected] oldboy]# grep -C5 "25" ett.test
20
21
22
23
24
25
26
27
28
29
30
12.6 小结:
1. head+tail
2. sed
3. awk
4. grep
第13章 把/oldboy目录及其子目录下所有以拓展名.sh结尾的文件中,文件包含oldboy的字符串全部替换为oldgril
13.1 sed命令 -i 替换文件内容
用法:sed ‘s#你要找谁#要替换成什么#g’
例: sed ‘s#oldboy#oldgirl#g’ /oldboy/test.sh
在显示器上显示oldgril,不会修改文件
一般命令不能直接改变文件内容,需要加选项
防止误操作
选项: -i 修改文件内容
例: sed -i ‘s#oldboy#oldgirl#g’ /oldboy/test.sh
将/oldboy/test.sh文件中oldboy改为oldgirl
13.2 创建环境
mkdir -p /oldboy/test
cd /oldboy
echo "oldboy">test/del.sh
echo "oldboy">test.sh
echo "oldboy">t.sh
touch oldboy.txt
touch alex.text找出你要处理的文件
[[email protected] oldboy]# find /oldboy/ -type f -name "*.sh"
/oldboy/test.sh
/oldboy/test/del.sh
/oldboy/t.sh
替换一个文件 (oldboy ----> oldgirl )
[[email protected] oldboy]# #sed 's#你要找谁#你要替换成什么#g'
[[email protected] oldboy]# cat /oldboy/test.sh
oldboy
[[email protected] oldboy]# sed 's#oldboy#oldgirl#g' /oldboy/test.sh
oldgirl
[[email protected] oldboy]# cat /oldboy/test.sh
oldboy
[[email protected] oldboy]# #修改文件的内容 把文件的内容进行替换 修改
[[email protected] oldboy]# sed -i 's#oldboy#oldgirl#g' /oldboy/test.sh
[[email protected] oldboy]# cat /oldboy/test.sh
oldgirl
(1)把find命令找到的文件 都交给sed命令进行替换
[[email protected] oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' 先别加选项-i 确定正确
oldgirl
oldgirl
oldgirl
(2)修改文件内容
[[email protected] oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldboy#oldgirl#g' 答案
(6)检查
[[email protected] oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat
oldgirl
oldgirl
oldgirl
13.3 方法二 :
13.3.1 $() 先运行里面的命令 把输出结果留下来 $()====`` (反引号)
which mikdir mkdir的位置
1. find找到你要处理的文件
find /oldboy/ -type f -name "*.sh"
2. 让sed命令处理find命令找到的文件
Sed ‘s#oldboy#oldgirl#g’ $(find /oldboy/ -type f -name “*.sh”)
答案:Sed -i ‘s#oldboy#oldgirl#g’ $(find /oldboy/ -type f -name “*.sh”)
4.查看
cat $(find ./ -type f -name "*.sh")
小结:
1. find 与 |xargs
2. find 与 $()
3. find 与 -exec
13.4 方法三:find -exec {} \;
答案:
find /oldboy/ -type f -name "*.sh" -exec sed 's#oldgril#oldboy#g' {} \;
find找到的命令放到花括号里,再被sed 执行
\;结束
小结:
1. sed 进行替换
2. find |xargs
13.5 补充:
1.快捷键:
快速使用上个命令最后的文件名
esc + . (点)
13.6 (管道)与|xargs(管道xargs)的区别
13.6.1 管道传递的是文本内容, |xargs传递的是文件名称
find |xargs ls -ld##把前一个命令的结果,通过管道传递给后面的命令(ls -ld),传递的是文件名
find | 命令 ##把前一个命令的结果,通过管道传递给后面的命令,传递的是普通的文本,文字,字符串
13.6.2 总结:
什么时候使用管道?
前一个命令无法满足你,一个命令的结果不是你想要的
什么时候使用管道xargs
后面的命令,需要处理的是文件名
find |xargs
13.7 三剑客
13.7.1 Sed Linux三剑客老二 擅长取某一行
P ---print 显示 -n 取消sed命令默认输出
查找替换
Sed ‘s###g’ -i 对文件内容进行替换和修改
13.7.2 awk Linux三剑客老大 擅长取某一列
NR== ---行号
13.7.3 grep 过滤 在文件中找东西 Linux三剑客老三
-v 排除
-A10 显示你所要内容及接下来的10行