标签:alt 分隔符 错误信息 其他 包含 number set 增强 模式
默认输入---键盘:stdin
默认输出---屏幕:stdout
重定向:改变数据流输出的位置、方向,例如输出到文件。使用">"表示。
命令 > 文件名:例如ifconfig > ~/leo/log.txt,将ifconfig的输出重定向到~/leo/log.txt文件中。
如果多个命令使用">"重定向到同一个文件,那么该文件的内容会被覆盖。
命令 >> 文件名:例如ifconfig > ~/leo/log.txt,ls >> ~/leo/log.txt。这样ls的输出就会被追加到~/leo/log.txt的最后。
ls > /dev/null:/dev/null是一个黑洞。扔进去的内容都会消失。
当我们输入一个错误的命令,系统会提示命令不存在。此时我们想重定向该错误信息到文件中,重定向不生效。这时因为:
">"、">>"只能重定向正确的结果。">"相当于是"1>",">>"相当于是"1>>"。
"2>"就是重定向错误信息,"2>>"是追加错误信息。例如xxx 2> err.txt,err.txt中的内容就是xxx命令不存在。
如果我们使用xxx > aa.txt来重定向结果。那么会出现什么情况?
首先我们使用的是">",那么系统首先会清空aa.txt的内容,然后执行xxx发现命令不存在,所以最终的结果就是aa.txt被清空,但是内容未写入。
如果我们想把正确的和错误的都重定向到文件中,怎么办:
1.xxxxxx > aa.txt 2>&1 ,相当于把错误的当成正确的(放水)。
2.ifconfig 2> aa.txt 1>&2 ,相当于把正确的当成错误的(穿小鞋)。
以上内容比较绕,那我们使用一个统一的标识:
&>和&>>,分别表示覆盖和追加,前面的&表示不管是正确还是错误。
例如:ifconfig &>> aa.txt,xxxx &>> aa.txt。这样ifconfig正确结果和xxxx的错误结果都保存到了aa.txt中。
xxxxx >> log.txt 2>>err.txt:如果我们不确定一个命令是正确的还是错误的,我们分别把正确和错误的结果存放到不同的文件中。
tr "a-z" "A-Z" >> hello.txt < /etc/hosts:将/etc/hosts的内容重定向到tr命令,经过小写到大写的转换后,再重定向到hello.txt中。也可以写作:tr "a-z" "A-Z" < /etc/hosts >> hello.txt。
grep root passwd:把/etc/passwd里含root的所有行过滤出来。
grep -n root passwd:过滤内容,并显示行号。
grep -i root passwd:忽略大小写进行过滤。匹配含有root、ROOT、ROot等内容的行。
grep -v root passwd:反向过滤,匹配不含root的行。
grep -n -A3 root passwd:过滤含root的行,并且显示后面的3行。
grep -n -B3 root passwd:过滤含root的行,并且显示前面的3行。
grep -n -C3 root passwd:过滤含root的行,并且显示前后的3行。
grep ^root passwd:过滤以root开头的行。
grep root$ passwd:过滤以root结尾的行。
ifconfig | grep inet:将ifconfig命令的输出作为grep的参数,在其中查找包含inet的行。
cat -n passwd | head -15 | tail -5: 获取passwd中11行-15行的内容。
gedit:类似于Windows下的记事本。
vim:vi的增强版。最小化安装系统,默认没有安装vim。
命令格式:vim file。打开file,开始编辑。
学习文档:vimtutor。
vim有三种模式:
1.命令模式:进入vim时默认就是命令模式。
命令模式下的操作:
u:撤销。
ctrl+r:前进,与u撤销相反。
yy:复制行。按完yy后,光标移动要粘贴的位置按p粘贴。
p:粘贴。
nyy:n为数字键,在命令模式下先按数字,表示要复制几行(包含光标所在行),然后按yy。
dd:剪切行,如果剪切后不粘贴,就相当于删除该行。
ndd:类似nyy,即剪切n行。如果文件大,想删除后面所有行,那就使用10000dd,多使用几次就删除了。
x:删除光标当前所在位置的字符。
nx:类似nyy和ndd,不过功能是删除当前光标所在位置后n个字符,如果想删除到末尾,就先输入一个比较大的值就可以了。例如1000x。
r:替换光标所在位置的字符。
R:按完R后,可以连续替换多个字符,完成后按ESC取消R。
ZZ:快捷保存退出,相当于":wq"。
gg:切换到首行。或者1G。
G:切换到最后一行。
nG:切换到第n行,例如1000G,切换到第1000行。如果想切换到尾行,直接输入G。
dG:从光标所在行删除到末尾。如果要删除全部,先按gg,再按dG。
Ctrl+v:进入视图模式,然后按方向键可以选择一批字符,然后做其他操作,例如替换(r),删除(x),复制(y,不是yy)。
如何使用#号注释多行:Ctrl+v,然后按下选择多个字符,按大写的I,然后输入#,再按ESC。
2.插入模式:在命令模式按"i,a,o,I,A,O"可以进入插入模式。
i:从当前光标处插入。
u:在命令模式下按u,类似于windows的ctrl+z,撤销。
o:光标所在行的下一行产生一个空白行,并进去插入模式。
I:大写的i。光标移到当前行的最前面,并进入插入模式。
A:大写的a。光标移到当前行的最后面,并进入插入模式。
O:大写的o。在光标所在行的上一行产生一个空白行,并进入插入模式。
3.末行模式:只能从命令模式来进入,所以在插入模式的时候需要先按ESC进入命令模式。再从命令模式进入末行模式。
使用"/"进入:在命令模式按"/",然后"/关键字",按n向后查询,按N向前查询。"/关键字\c"忽略大小写查询。
使用":"进入:可以用于保存退出、不保存退出、打开某文件、另存为、执行命令、修改属性、替换。
保存:":w"。
保存并退出:":wq",也可以用":x",不能是"qw"。
不保存并退出:":q!"。
打开某文件:":r file",打开file,并且把内容插入到光标位置的下一行。
另存为:":w filename",将内容另存到指定的file中。
执行命令:将命令执行结果插入到当前光标位置,例如":.!ls /boot",":.!ifconfig"。在命令模式按两下"!",可以自动跳到":.!"。
显示行号:":set number",但显示的行号不是文档的内容,只是编辑器提供的行号。这种操作显示的行号都是临时的。
如果要让vim打开默认显示行号,就在用户的家目录下创建一个文件叫".vimrc"。里面写上set number。只对当前用户有效,对其他用户无效。
如果想让所有用户都默认显示行号,那就编辑/etc/vimrc,在空白行添加set number。
替换:":s/old/new/",将光标所在行的第一个old替换为new。
":s/old/new/g",将光标所在行所有old替换为new。
":m,ns/old/new/g",从m行到n行替换所有的old为new。
":m,ns/old/new/g"中的m和n可以使用几个变量,"."表示光标当前行,"$"表示最后一行,"$-1"表示倒数第二行,以此类推。
例如:全文替换,":1,$s/old/new/g","1,$"可以使用"%"代替,":%s/old/new/g"。
":%s/^old/new/g":替换处于开头的old。
当替换的关键字包含特殊字符,例如"/",那么可以使用转义字符。
":%s/\/old\//new/g":使用转义字符"\"来对"/"进行转移。但是这样显得很复杂。
实际上":s/old/new/g"中间的分隔符不一定要用"/"。可以使用其他符号代替,例如":s#old#new#g",":s#/old/#new#g"。
":s/old//g":new的位置什么都不写,就相当于删除old。
分屏:":sp"。按两次Ctrl+w可以上下切换。
我们在写shell脚本、Python脚本、Perl脚本等时,我们都要在文档的开头协商#!/bin/bash、#!/usr/bin/python等。那么我们可以定义一个vim模板,当我们打开一个脚本文件时,自动生成。
1.打开/etc/vimrc文件。
2.找到这行。
3.复制一行,修改为:autocmd BufNewFile *.sh 0r /usr/share/vim/vimfiles/template.sh。
4.创建一个文件/usr/share/vim/vimfiles/template.sh。在第一行写上#!/bin/bash。
标签:alt 分隔符 错误信息 其他 包含 number set 增强 模式
原文地址:https://www.cnblogs.com/leokale-zz/p/12531423.html