Linux基础命令(二)

一 数据流定向

概念:将某条命令执行后本应该在屏幕中中显示的数据(信息)传输到其他地方(文件其它设备--->打印机等)

思考1:默认为什么在屏幕中显示?它的作用机制是什么?

以下仅仅帮助理解:当我们将键盘中的字符或者硬盘中的文件(只是输入源不同)------>内容会进入到内存中------>经过CPU的处理----->得到处理的结果------>被内存中的开启的字符设备(从/dev/pts/n-->数字)引用,展示到屏幕中!

核心点:默认处理的结果到内存中开辟字符设备文件中/dev/pts/n

后续:该目录下文件的权限"c"的含义!

重定向目的:改变处理结果的默认保存位置!

图省略:开启两个bash,将内容重定向到其中一个并且观察/dev/pts/目录下的变化!

############################分割线######################################

应用:通常需要将某些重要数据保存下来(日志等--->自动化脚本)

引申:从"找人"(找没找到)引申出"输出"的正确错误

后续:找没找到的原因,引申出权限问题

了解两个概念:标准输出(standard output)和标准错误输出(standard error output)

标准输出:命令执行完所回传的正确信息!

标准错误输出:命令执行失败后所回传的错误信息!

###########################分割线#######################################

测试

备注:测试必须在普通用户下测试,不然由于权限的问题,没有相应的实验效果!

错误关键字Permission denied(权限问题,后续探讨)

实验现象:执行一条命令后,不管是正确还是错误的信息,默认都是输出到屏幕中,屏幕中的信息是混乱的!

#############################分割线#################################

本文会以需求为导向进行讲解,在讲解需求之前再来了解一些概念!

(1)标准输入(stdin)--------->0--->传送特殊字符<或者<<---->(方向:键盘【硬盘中的文件】--->屏幕【内存中的字符设备文件中】)

(2)标准输出(stdout)------->1--->传送特殊字符>或者>>------>(方向:屏幕【内存中的字符设备文件中】--->文件【设备中】)

(3)标准错误输出(stderr)->2---->传送特殊字符2>或2>>----->(同上)

说明:默认的文件描述符是标准输入和输出,所以0和1可以默认不写,即【"1>" 和 ">"】【"0<" 和 "<"】 是等价

##################################分割线#############################################

小知识:">或>>"对应文件的创建方式

(1)若文件不存在:则创建文件--->注意:用户(指的是除了文件本身所有者root其它用户)对当前目录是否有写入的权限

后续:没有w权限系统是怎么处理的?

(2)文件存在:则清空文件内容,将数据写入,通俗解释-->覆盖了原文件的内容

注意:用户(指的是除了文件本身所有者和root的其它用户)对当前文件是否有写入的权限

后续:同上!

补充一句:只要涉及读写的都涉及到权限问题!

####################################分割线###########################################

需求1:将数据累加到文件中,而不是将原来的数据删除(覆盖),使用两个大于号(>>),将数据累加到最后面!

find /etc/ -name passwd >> append.txt

说明:累加的方式是将逐行写入

需求2:将正确和错误的信息分别保存到不同的文件中

 find /etc/ -name passwd > right.txt 2> error.txt

现象:数据分门别类的管理,屏幕中没有信息输出!

注意:数字和传送符号是连在一起(表示是一个整体)的且要与文件名有空格

需求3:将正确和错误的信息都写入同一个文件中(特殊语法)

 
find /etc/ -name passwd > total 2>&1  #方式1:错误的伪装成正确的(欺骗-->管道符可以用)

##说明:文件描述符的含义,这里&1表示指向了total文件的位置,而不知默认的位置!

find /usr -name passwd &> total1      #方式2:"&"表示And-->所有的

测试说明:如果是root用户操作,可能没有错误的信息!

解释:2>&1 表示 stderr(文件描述为2) 重定向到stdout(文件描述符为1),也就是标准错误信息发送到与标准输出信息的相同位置

方式1缺点没有按照原样输出(顺序错乱),可能不是想要的!

#########################分割线##################################

说到这差不多了:了解一个比较厉害的东西--->垃圾桶黑洞设备-->/dev/null

需求4:我知道错误信息会发生,要将错误信息忽略掉而不存储!

设备黑洞/dev/null

特点:可以任何导向这个设备的信息

需求5将文件内容清空

[20:31:04][student@foundation10:~]$ echo "Hello Perl" >time.txt 
[20:31:46][student@foundation10:~]$ cat time.txt 
Hello Perl
[20:31:49][student@foundation10:~]$ >time.txt 
[20:31:53][student@foundation10:~]$ cat time.txt 
[20:31:56][student@foundation10:~]$ ^C

练习题:

 说明:最后一步省略(突然死机了,允悲)!

########################################分割线#########################################

区别:“cat > 文件名""cat 文件名"

cat > 文件:没有此文件则主动创建一个文件,然后可以键入需要输出的内容,如果输入完毕,可以按"ctrl+d"来离开!

理解:由于不是追加,标准输入模式(键盘录入)的数据,会将内容清空!

cat  文件:没有此文件,则报错,系统并不会主动创建!

说明:<ctrl-d>对应作为结束--->对应的是EOF,即结束输入!

###############################分割线######################################

标准输入(stanard input--->stdin):<与<<

"<"的应用场景:将原本由键盘输入的数据改成由文件内容来代替

具体:自动化进行建立用户的帐号和密码等-->将帐号和密码写到一个文件中!

需求1:用stdin替代键盘的输入来进行数据的输入

需求2:将文件内容替代键盘的输入

前提:temp.txt文件必须已存在,save.txt不一定要存在

作用:将temp.txt文件的内容写入到save.txt中,类似于备份文件的内容

##############################分割线####################################

cat > temp.txt 和cat >temp.txt  << EOF区别

区别:效果一样,但自定义的结束标志不同

<< 作用:结束输入

需求2:将cat的信息输出到temp.txt中,且当键盘输入EOF(结束标志位-->可以自定义)时,该次输入就结束!

EOF:“end of file”,表示文本结束符

说明:EOF一般会配合cat能够多行文本输出

需求3:通过脚本自动修改student的密码

修改密码的两种方式
(1) echo "passwd" |passwd --stdin student -->只需要输入一次就OK了
(2) passwd <<EOF 两次密码或者三次(root和普通用户->需要确认) EOF

####################################分割线##########################################

小知识点"<"和"<<"的区别

理解:<<结束标志是自定义的,但必须进行交互(用户键盘输入),而"<"结束标志是固定的(读取完文件就结束输入)!

#####################################分割线#########################################

管道:管道的作用是将管道命令的输出变成管道命令的输入,说白了就是对屏幕本来的输出再进行处理!

狭义上理解:管道过滤错误信息,放行正确的输出信息到相应的设备文件中(屏幕、文件等中)--->后续的伪装!

管道命令:“ | ”的界定符

#####################################分割线##########################################

需求1:以一种便捷的方式(用户体验好---类似于kiddle阅读器)来显示/etc下文件

ls -al /etc | less

执行逻辑:less会去读取ls命令输出后的内容,作为less命令的读取的输入内容

特点:仅能处理由前一个命令传来的正确消息(standard output),对于stardarderror没有直接的处理能力(错误输出无法通过管道)

思考默认系统中错误的输出是无法通过管道的,错误的输出也要通过管道

#####################################分割线##########################################

需求2:统计find /etc/ -name passwd命令输出的行数

find /etc/ -name passwd 2>&1 | wc -l

# 最好在普通用户下测试

说明:错误进行伪装了!

#########################################################################

需求3:需要屏幕中显示信息以及文件中保存相应的信息--->额外复制一份

知识点:双重重定向---> tee

特点:除了屏幕中输出,且指定位置的文件中也有一份!

需求4:复制date命令的输出到file中,并统计输出行数

date | tee file | wc -l  

说明管道符可以有多个多个命令的组合

管道命令:可以后跟【|】定界符!

常用的管道命令

cut、grep、sort、uniq、wc、tee、tr、col、join、paste、expand、xargs   

xarg场景:许多命令并不支持管道命令,可以通过xargs来提供该命令的使用标准输入!

相关链接

linux shell环境减号"-"的用途

######################################分割线#########################################

二、 vim 程序编辑器

综述:理解操作符和动作命令、常见的模式、自动补全、插件等!

(1)概念

vim定位:是程序开发的一项很好的工具,是一个"程序开发者工具",而不单是"文字处理软件"

相对文字处理软件增加的功能:颜色或者底线显示一些特殊的信息(用得到),支持正则表达式的查找架构,多文件编辑,块复制等

vim是程序编辑器的理由(举例):vim去编辑一个C程序语言的文件或者 shell script,vim会依据文件的扩展名或者文件内的开头信

判断文件的内容而自动调用该程序的语法判断式,再以颜色来显示程序代码一般信息。

(2)vim的模式

模式分类:一般模式、编辑模式(Insert模式)、命令行模式、可视化模式

逻辑:vim 文件名---->一般模式---->I进入编辑模式---->ESC---->回到一般模式---->输入:---->进入命令行模式--->保存退出:wq

说明:上述流畅的执行是建立在对文件操作有相应权限前提

补充:如果文件不存在,则会创建文件(区别 cat)

各模式下可以进行的操作

###1)一般模式(两种条件下进入):vim 文件 或者 编辑后 esc

操作:左右移动光标、复制文件数据、粘贴、删除字符或者行

注意:无法编辑文件的内容

(1)vim一般模式下字符的管理

0.光标的移动(常用)

常用(四个方向键),键盘字符排列在一起(h-->左,j-->下,k-->上,l-->右)

需求1:要移动指定的行号,使光标移动到指定的位置(行号--向下)

测试:向下移动指定的行数------>30j或者30(朝下的箭头)

需求2:移动到光标的所在的最前面的字符和最后面的字符

参考系:光标

面:0或者home键

面:$或者end

需求3:移动到文件的第一行/最后一行、移动到文件的第n行(配合 ":set使用")

参考系:文件

文件第一行(首字符前面):gg

文件的最后一行(首字符前面):G

移动到文件的第n行:n(数字)G

----------------------------

1.字符的复制和粘贴(从当前光标阴影开始)

相关说明:y:copy---->l:letter---->w:word

y1l           ##复制一个字母(默认1不写)
y3l           ##复制3个字母
y1w         ##复制一个单词
y3w         ##复制3个单词
y1y          ##复制一行(默认1不写)--->常用
y3y          ##复制3行
p             ##复制完成后按“P”粘贴(注意:粘贴是在当前光标前(P)后(p)面粘贴的!!!)

执行逻辑(细节):复制---->从当前光标处(阴影)开始复制n个字母(字符)---->粘贴:在当前光标之后粘贴

单词的标示空格

试出来的:p6p------>操作(光标选中的粘贴,然后又粘贴了6个)

--------------------------

2.字符的删除

坐标:以光标为单位

d:delete

dl         ##删除一个字母d3l
d3l       ##删除3个字母
dw       ##删除一个单词
d3w     ##删除3个单词
d3d     ##删除3

dd       ##删除光标所在一整行

ndd     ##删除光标所在的向下n行(从当前光标所在行开始)

3.字符的剪切

c:cut

cl                 ##剪切一个字母
c3l               ##剪切3个字母
cw               ##剪切一个单词
c3w             ##剪切3个单词
cc                ##剪切一行
c3c              ##剪切3行

注意:剪切过后会进入到插入模式(左下角的标示),在执行粘贴动作时一定要Esc退出插入模式,再p粘贴!

通俗的理解:剪切过后会由一般模式进入插入模式,必须退出插入模式

小知识点:如果上一条命令执行错了需要回退怎么办键入"u"即可,注意不是ctrl+z

-------------------------------

###2)编辑(插入--替换)模式(一种情况进入):输入{I、i、等}

标示:左下方出现INSERT或者REPLACE的标示

1.其它进入插入模式的情况
i          ##光标所在位置插入
I          ##光标所在行行首(常用)
a         ##光标所在字符的下一个位置
A         ##光标所在行行尾
o         ##光标所在行下一行(相当于换行)
O        ##光标所在行上一行
s         ##删除光标所在字符插入(了解)
S        ##删除光标所在行插入(了解)

补充:剪切后也会进入插入模式

此模式特点:可以在文件中输入字符

2.进入替换模式

r:只会替换光标所在的那一个字符一次R:会一直替换光标所在的文字,直到Esc为止!

------------------

###3)命令行模式

进入:输入"{/?}"三种任何一个按钮,可以将光标移动到最下面一行(命令执行行)

功能:查找数据、读取、保存、大量替换、离开vim、显示行号、设置一些信息等

(1)在vim的命令模式下配置vim的工作方式
:set nu                      ##行号添加
:set nonu                  ##取消行号(临时,一般不需要)
:set mouse=a          ##添加鼠标选择
:set cursorline         ##行线显示

说明:以上设定都是临时的

需求1永久设定方式(修改vim配置文件)

vim /etc/vimrc        

具体操作:进入文件后转化到编辑模式,在此文件最后加入以上参数(行号的添加、鼠标的添加、行线的显示)

注意:默认是不是即时生效,必须让其把配置文件重新加载到内存中才会生效

再执行:source /etc/vimrc

思考:如何设置制表符呢?

(2)vim命令模式下关键字搜索(查找)

一般模式下键如:/关键字

(3)在linux下的vim中替换

搜索方向:n--->向下匹配;N--->向上匹配

(4)批量替换字符

替换命令的格式是:[range]s(search)/pattern/string/[c(confirm),e(不显示error),g(globe:将做整行替换),i(ignore:忽略大小写)]

:%s/原有字符/替换后字符              ##替换每一行中出现的第一个原有字符   等价的方式---->:[1,$]s/原有字符/替换后字符
:%s/原有字符/替换后字符/gc         ##替换所有,并且用用户交互(替换前需要用户确认--confirm)
:1,5s/原有字符/替换后字符/g         ##替换1-5行(区间替换)--->与替换命令模式最匹配

(5)移动光标

数字(移动到指定的行------>常与":set nu结合使用")

###4)vim异常退出

特点:在vim异常退出时,系统中会在所编辑的文件目录中生成.file.swp并且vim再次编辑此文件时会出现相应提示

此模式下的相关命令:

按 "o"    open(只读---多人编辑的时候,只是查看内容而不编辑内容)
按 "e"    edit(正常打开文件,不载入暂存文件)
按 "r"    recover(加载暂存文件,用来救回之前未保存的工作注意:救回来之后保存文件后还得自行手动删除暂存文件,否则一直提示警告信息)
按 "d"    delete .swap file(确定暂存文件无用,那么打开文件之前会先将暂存文件删除)--->常用(可能不知道暂存文件是怎么来的!)
按 "q"    quit(离开vim)

思考:何为异常退出

###5)vim的可视化模式(VISUAL BLOCK)

进入:在命令模式下按“ctrl+v”---->进入到可视模式

功能:在可视模式下可以区域()选择字符等操作

说明:主要看光标经过的地方(反白表示选中)

相应的按键:v(字符选择)、V(行选择)、ctrl+v(块选择)、y(复制,粘贴的时候也是以这个模式粘贴,在当前光标之后)、d(直接就删除)

思考:选择了以后,可以做的事情?

(1)可视模式下批量“添加”字符
*>> ctrl+v 选中要加入字符所在列(非字符)--->光标就会反白--->y(复制)--->进入一般模式
*>> 按“I”进入插入模式,写入要加入的字符(粘贴p)
注意:别人讲的步骤(???)!!!

用处:在排列整齐的文本文件中复制/删除块

###6)vim的分屏功能

前提是 vim file1 file2  ------>编辑多个文件(多窗口)
ctrl+w s                         ###上下分屏
ctrl+w v                         ###左右分屏
ctrl+w 松手 c(q)          ###关闭"光标"所在屏幕(针对分屏)
ctrl+w 上下(kjhl)左右  ###光标移动到指定屏幕(了解)
:sp file2                        ##同时编辑当前文件和file2

-------------------------------------------

####7)vim的退出模式(常用)
:q          ##当用vim打开文件但没有对字符作任何操作时可直接退出(否则会给与提示)
:q!         ##当用vim打开文件并对字符作操作,放弃所有操作退出(用在当前配置文件错误,但是又不知道如何修改,类似于重置)
:wq       ##正常保存退出
:wq!      ##权限不够的时候,强行保存退出,对超级用户及文件所有人生效!

####8)vim手册
学习vim的命令的文档(自带):vimtutor   
:q                                     ##退出vimtutor

知识点:查看文件和文件夹的大小----> db -sh

后续说明:vim编辑器实用技巧的相关概念

Linux下查看文件和文件夹大小 删除日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值