标签:菜鸟驿站
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 替换
mkdir /data
快捷键:tab 补全目录或路径
[root@oldboy 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
绝对路径:从根开始的路径 如:/etc/hosts
相对路径:不是从根开始的路径 如:etc/hosts
cd 切换路径
pwd 显示当前工作目录
touch /data/oldboy.txt
1. 打开文件
vi /data/oldboy.txt
2. 进入编辑模式(插入模式)
按字母 i
3. 写入
I am studying linux
4. 退出编辑模式
Esc键
5. 保存并退出
:wq
6. 检查---查看文件内容
cat /data/oldboy.txt
i 编辑模式
Esc 退出编辑模式,进入命令模式
:wq 保存退出
: q! 强制退出不保存
Vim echo >> 三个命令会自动创建文件
echo “I am studying linux” >>/data/oldboy.txt
>> 或1>> 追加重定向,增加到文件的结尾 (漏斗)
> 或 1>> 输出重定向 清空内容,然后追加
>> > 标准输出重定向 标准追加输出重定向 会把前面命令执行正确的内容 放 到一个文件中
2> 错误重定向:把错误信息输入到后面的文件中,会删除文件原有内容
2>>错误追加重定向: 把前面错误信息追加到后边的文件中,不会清除文件原有内容
例:
cho "lidao.blog.51cto.com" 2>>/data/error.txt
[root@oldboyedu-39 ~]# cho "lidao.blog.51cto.com" 2>>/data/error.txt
[root@oldboyedu-39 ~]# 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 相当于日志功能 ,两条命令执行结果相同
cat >>/data/oldboy.txt<<EOF
I
am
Studying 向一个文件中追加多行
Linux
EOF
[root@oldboy oldboy]# cat >>mike.txt <<gao
> I
> love
> you
> gao
[root@oldboy oldboy]# cat mike.txt
I
love
you
<< 或 0<< 标准输入追加重定向
[root@oldboy oldboy]# cat mike.txt
I
love
you
[root@oldboy oldboy]# echo "1 2 3 4 5 6 7 8 ">deny.txt
[root@oldboy oldboy]# cat deny.txt
1 2 3 4 5 6 7 8
[root@oldboy oldboy]# xargs -n2 <deny.txt
1 2 前面的命令执行的是后面的文件
3 4
5 6 技巧:“漏斗”的输出方向
7 8
cp /data/oldboy.txt /tmp
cp -r 递归复制,复制目录及美容 一层一层复制目录
http://linux.51yip.com/
http://man.linuxde.net/
https://www.die.net/
操作前备份,操作后检查
cp命令
mv /data/ /root/
/data 表示 /data 目录 和目录里的内容
/data/ 表示目录里的内容
rm oldboy.txt
参数:
-f 强制删除(不提醒) -r 递归删除
rm 参数可以加在最后面
如:rm /data/oldboy -f
1.把危险的参数放在最后面
2.尽量使用相对路径删除目录
3.删除命令复杂一些 find |xargs
4.不要在/(根)下进行操作
5.给危险命令设置别名
6.把要删除的文件先复制到/tmp中
例:find /root/ -type f -name “oldboy.txt”
查找 /root/目录下 文件名字为oldboy.txt
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.(点) 表示当前目录
test
lidao
oldboy
请给出输出test.txt文件内容时不包含oldboy字符串的命令
选项: -v 排除
答案:grep -v “oldboy” /data/test.txt
选项: -n数字 或 -数字 显示文件前几行
答案:head -2 /data/test.txt
[root@oldboy oldboy]# awk '/oldboy/' /data/test.txt
oldboy
[root@oldboy oldboy]# awk '!/oldboy' /data/test.txt
awk: !/oldboy
awk: ^ unterminated regexp
[root@oldboy oldboy]# awk '!/oldboy/' /data/test.txt
test
lidao
用法 : d 表示删除
[root@oldboy oldboy]# sed '/oldboy/d' /data/test.txt
test
lidao
[root@oldboy oldboy]# sed '3d' /data/test.txt
test
lidao
1. grep 过滤
2. head tail
3. awk sed
选项: -p 一次创建多级目录
答案:mkdir -p /oldboy/test
[root@oldboy-gao ~]# touch /mnt/test.txt /tmp/test.txt
答案:\cp /mnt/test.txt /tmp/
使用命令的绝对路径 which
which +命令 显示命令的绝对路径 命令的位置
[root@oldboy-gao ~]# which cp
alias cp='cp -i'
/bin/cp
答案:/bin/cp /mnt/test.txt /tmp/
别名 alias 显示系统中所有别名
alias cp 显示cp别名
1. 给危险的命令上道保险
2. 常用的命令,复杂的命令简单化
例:给rm命令设置别名command bny
[root@oldboy-gao ~]# alias rm='echo command bny'
等号左右没有空格 ,右边是命令,单引号
[root@oldboy-gao ~]# alias rm
alias rm='echo command bny'
[root@oldboy-gao ~]# rm /mnt
command bny /mnt
配置文件/etc/profile
G 到达文件的最后一行
i 进入编辑模式
o 在当前行下面插入一个新行并进入编辑模式
实例11-1 [root@oldboy-gao /]# tail -2 /etc/profile
unset -f pathmun
alias cp='echo command bny'
使配置文件生效
[root@oldboy-gao /]# source /etc/profile
[root@oldboy-gao ~]# alias cp
alias cp='echo command bny'
[root@oldboy-gao /]# cp /oldboy
command bny /oldboy
[root@oldboy-gao /]#
普通用户正常有用
但xshell重新连接root用户又变成alias cp=’cp -i’
解决:
在三个别名前面加个#(注释号)号,使其失效,这样问题就解决了
小结:alias 设置或显示别名
source 让别名/配置生效
1. 如果配置文件里设置一个,命令行临时有设置一个,那个生效?
答:如果重新连接 配置文件里的生效
不重新连接 命令行配置生效
[root@oldboy oldboy]# seq 50 >ett.test
[root@oldboy oldboy]# tail -4 ett.test
47
48
49
50
[root@oldboy oldboy]# head -30 ett.test | tail -11
20
21
22
23
24
25
26
27
28
29
30
选项: -n 取消默认输出 默认输出每一行的内容
p pint 显示
答案:sed -n ‘20,30p’ /oldboy/ett.test
[root@oldboy oldboy]# sed -n '20,30p' ett.test
20
21
22
23
24
25
26
27
28
29
30
用法:NR==数字 行号
答案:awk ‘NR==20,NR==30’ ett.test
[root@oldboy oldboy]# awk 'NR==20,NR==30' ett.test
20
21
22
23
24
25
26
27
28
29
30
答案:grep -A10 “20” /oldboy/ett.test
[root@oldboy oldboy]# grep -A10 "20" ett.test
20
21
22
23
24
25
26
27
28
29
30
答案:grep -B10 “30” /oldboy/ett.test
[root@oldboy oldboy]# grep -B10 "30" ett.test
20
21
22
23
24
25
26
27
28
29
30
grep -C5 “35” /oldboy/ett.test
[root@oldboy oldboy]# grep -C5 "25" ett.test
20
21
22
23
24
25
26
27
28
29
30
1. head+tail
2. sed
3. awk
4. grep
用法: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
(1)把find命令找到的文件 都交给sed命令进行替换
[root@oldboyedu43 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' 先别加选项-i 确定正确
oldgirl
oldgirl
oldgirl
(2)修改文件内容
[root@oldboyedu43 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed -i 's#oldboy#oldgirl#g' 答案
(6)检查
[root@oldboyedu43 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat
oldgirl
oldgirl
oldgirl
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
答案:
find /oldboy/ -type f -name "*.sh" -exec sed 's#oldgril#oldboy#g' {} \;
find找到的命令放到花括号里,再被sed 执行
\;结束
小结:
1. sed 进行替换
2. find |xargs
1.快捷键:
快速使用上个命令最后的文件名
esc + . (点)
find |xargs ls -ld##把前一个命令的结果,通过管道传递给后面的命令(ls -ld),传递的是文件名
find | 命令 ##把前一个命令的结果,通过管道传递给后面的命令,传递的是普通的文本,文字,字符串
什么时候使用管道?
前一个命令无法满足你,一个命令的结果不是你想要的
什么时候使用管道xargs
后面的命令,需要处理的是文件名
find |xargs
P ---print 显示 -n 取消sed命令默认输出
查找替换
Sed ‘s###g’ -i 对文件内容进行替换和修改
NR== ---行号
-v 排除
-A10 显示你所要内容及接下来的10行
标签:菜鸟驿站
原文地址:http://blog.51cto.com/13517084/2052965