day1-Linux操作系统基础

该专栏所有内容笔记均来自传智播客培训班

1.什么是操作系统(operate system OS)

小议:承上启下作用,向下可以控制硬件,向上能够支持软件的运行。一个可以控制硬件的软件
小明找小红聊天,小明打开QQ,输入消息,小明的QQ将信息传递---->(小明)操作系统---->网络设备----->(小红)操作系统---->小红的QQ---->小红收到消息。反之亦然
ps:以前的诺基亚没有操作系统,想要用QQ必须装个java虚拟机。缺点:同一时刻不允许运行多个程序。但是,小明想运行A软件又想运行B软件还想运行C软件这时候就需要操作系统。

2.现实生活中的操作系统

Windows、Mac、Android、iOS、Linux…
ps:Android主要运用在移动端、Windows、Mac只要运用在电脑PC上

3.操作系统的发展史

1965年的电脑主要是一台主机连接多个终端(显示器、键盘、鼠标),但最多能连接30台左右终端
由于30台终端太少了,1965年美国一些大牛开始搞Multics项目,想把终端搞成300台连接,最后失败了。Ken Thompson为了玩游戏,自己搞了Unix操作系统的原型,当时NCPL语言较为流行,K就以BCPL语言为基础,独自开发了很接近硬件的B语言(BCPL首字母),并用B语言写了第一个Unix操作系统。但是B语言跨平台性能很差,之后K找他的同伴Dennis Ritchie一块在B语言的基础上开发了跨平台能力很强的C语言(BCPL第二个字母),1972年C语言主体完成,C语言由此诞生。之后K和D使用C语言编写Unix操作系统,放到其他电脑上运行效果很棒,兼容性很强。
之后Unix操作系统开始不断的更新迭代(在原来的基础上升级完善),到Version 7 Unix版本的时候,贝尔实验室引起了注意,发现了商机,开始对外申请专利闭源。当时一个Andrew S. Tanenbaum教Unix操作系统的教授生气了,尼玛,你还收费?然后由于A对Unix特别熟悉吃透了Unix的运行原理,之后自己写了一个操作系统,A以小型UNIX(mini-UNIX)之意,将其操作系统称之为MINIX。然后MINIX是完全开源的,A教授当时仅仅为了教学使用,一些其他功能未编写,并无意去编写。
之后一个X大牛,得到MINIX的源码,并对其进行加工,然后他很聪明发布到网上请求各大高手进行共同完善,之后Linux不断的完善茁壮成长起来了。现在的Android底层代码也是Linux。
ps:如果当时A教授执意去开发MINIX,说不定今天风靡全球的就是MINIX了。
Unix有好多版本,其中AT&System V演变到Minix,之后演变到Linux
Android实际上就说:Linux内核(kernel)再加上Java里面的一些东西。
目前绝大多数的手机、pc也都是基于Unix操作系统的。且Linux使用C语言编写的

Linux的不同版本以及其应用领域

Linux内核版

即Linux最核心的代码,到现在为止已经有成千上百万行代码了,研究其已经没啥意义了,发展的太快了,已经相对很成熟了。

Linux发行版

Android也就是拿到Linux的内核,然后再封装些java的东西形成一个新的操作系统。Redhat、Ubuntu、centOS…都是拿Linux的内核然后附加些“皮肤”形成新的操作系统而已。

4.Linux常用命令

打开终端 Ctrl+Alt+t
把终端放大 Ctrl+Shift+‘+’
把终端缩小 Ctrl+‘-’
找一些属性或者缩小放大关闭的时候鼠标指向最上端,所有属性都在最上端
显示当前路径里面的东西 ls
显示当前文件夹里面内容的详细属性 ls -l
在Linux操作系统里面没有什么盘符这一说,所有的文件都在根目录 /
在根目录下有很多文件夹,其中
bin主要放程序
boot跟Ubuntu的启动相关
cdrom主要跟光盘有关
dev和设备相关
etc所有程序服务器配置的地方(新手机开机需要选择语言、桌面主题之类的东西)
lib存放库(我会用锄头但不会制作,你可以用别人的锄头,此时所用别人的锄头就会放在lib里面)
home除了home文件夹其他的不要随便动
某个文件夹内出现一个房子的图标就是家目录,即打开终端的时候默认路径
显示当前路径路径 pwd(这个比较常用)
创建文件touch 文件名
创建文件名称为1.txt touch 1.txt,这里的1.txt只是文件名称罢了
在Linux中没有txt之类的文件类型之说,创建a,也是文件 touch a
创建文件的时候,文件名称若以 . 开头,则默认为隐藏文件。
显示当前路径下的所有文件信息ls
例如 touch .yy,若以ls进行显示文件名称则显示不出来,得用ls -a进行显示
创建文件夹名称为yy mkdir yy
清除当前所敲的所有命令 clear
cd命令表示切换路径,切换路径返回上一级 cd .. 这里的..表示上一级,当然也可以换成其他的具体路径就切换至具体的路径中去

1,Linux命令使用方式

Linux命令格式:

命令选型参数
command-optionparameter

ls之后带-的表示选项,不带-的表示参数

显示当前目录结构 ls
显示根 / 目录下的所有内容名称ls /
显示根目录下的dev文件夹里面的所有内容名称ls /dev

  1. 当然如果文件夹里面的文件特别多也可以使用通配符(*)进行筛选,例如显示根目录下的dev文件夹下的所有以y开头的文件,ls /dev y*,y,yan,yanyu,yu…这些文件名称会显示,*可跟零位,一位,多位
  2. 其中?也为通配符,只能负责占一位,例如:ls /dev y?即显示根目录下的dev文件夹下的所有以y开头且第二位不确定的所有文件名称,yy,yu…这些文件会显示出来,一个?只能跟一位,当然也可以多个ls y??,显示yan,yuu…这些第二位第三位未知的文件名称
  3. 另外[]也可以当成通配符,严格算是正则表达式,例如:ls y[abcd]n,此时只能显示yan,ybn,ycn,ydn这些文件的名称;也可以is y[a-d]n效果是一样的。

touch .yy进行创建 .yy文件,以 . 开头的文件则默认为隐藏文件
此时需要使用ls -a进行显示,即把隐藏文件名称显示出来
显示文件以列表的形式详细显示出来,其中就包括文件大小,默认以bit为单位显示ls -l
与上一个命令几乎一样,区别在与显示文件大小的时候以合适的单位进行显示出来ls -l -h
其中选型里面的参数顺序无所谓,例如ls -a -l -hls -l -a -h效果是完全一样的
当然也可以进行简写ls -alh或者ls -lah效果也都一样

将上述的功能也可以进行结合,ls /dev -alh即显示根目录下的dev文件夹下的所有文件的名称的详细信息进行显示,当然参数和选型的位置也可以互换效果一样。

2,参看帮助文档

当你对某个命令不太了解的时候可以使用命令 --help或者man 命令对命令的详细效果进行显示(man—manual手册)
显示ls这个命令的所有的功能参数选型ls --help
也可以通过man ls进行查看,支持上下键滚动,其中f是下一页,b是上一页,q结束帮助文档

在这里插入图片描述
查看文件内容cat 文件名称
显示历史敲过的命令history,重新执行对应数的命令! 对应的数,例如! 1999即执行历史记录里面第1999个输入过的命令再重新执行一次,当然也可以通过上下键进行翻阅历史命令。

Linux命令-文件、磁盘管理

1,文件管理

重定向覆盖 >:把原本显示在终端的内容存储到yanyu.txt文件里面,若没有该文件则会先创建该文件,然后会将原先yanyu.txt里面的内容给覆盖ls > yanyu.txt
重定向追加**>>** :把原本显示在终端的内容存储到yanyu.txt文件里面,若没有该文件则会先创建该文件,然后会追加到原先yanyu.txt里面的内容里面ls >> yanyu.txt

cat 文件名more 文件名都是查看文件内容
cat yy.txt 查看yy.txt文件里面的内容一次性全部显示出来
more yy.txt 查看yy.txt文件里面的内容一点一点的按进度进行显示出来,b上一页,f下一页,q退出

若需要查看当根目录下的dev目录下内容,且重定向追加到一个固定文件a.txt里面ls -alh /dev >> a.txt,然后查看信息more a.txt,之后再删除该文件rm a.txt
显然很麻烦,这时候需要使用管道 | 进行操作,显示完然后消失即可ls -alh /dev | more

若多个命令一起执行可以用英文分号进行显示ls -l;ls -alh

当所要查找的文件名特别长的时候需要使用Tab进行补齐,两次Tab会把需要补齐的信息全部显示出来。当你想要切换路径,但是不知道当前文件夹内都有什么的时候,cd /TabTab就可以把根目录下的所有文件显示出来供你进行选择
跳转到当前文件夹下的yanyu文件夹里面cd ./yanyu
返回当前路径的上一个路径里面cd ..

/home/a/b/c
若当前处于c文件夹内,想要跳转到a文件夹内如何操作?
相对路径:cd ../..或者cd ../../
绝对路径:cd /home/a或者cd /home/a/

跳转到上一次跳转的路径中去cd -
切换到家目录(文件夹图标会显示一个房子的样子)cd ~

创建目录mkdir

在Linux中只有文件和目录这两个说法,文件不分后缀,目录实则就是文件夹
当你敲完特别多的代码命令却发现没啥用,原则上你得一个一个删除,这时候Ctrl+C就可以跳过不执行该命令,相当于终止,以后进入某个程序出不来了,直接使用该命令即可
当你想要删除所有 .txt文件的时候,直接rm *.txt,通配符删除
以目录的形式显示所有文件及文件夹tree
若需要在A文件夹下的B文件夹下的C文件夹下的D文件夹下创建E文件夹mkdir A/B/C/D/E -p

删除空文件夹rmdir 文件夹名称
删除空文件夹或文件rm 文件夹或文件名称
删除文件,文件夹,文件夹空不空无所谓rm 文件夹或者文件名称 -r,其中 -r严格来说表示递归的去删除

连接
  • 软连接

连接实则是Windows里面的创建快捷方式罢了
将原名称重命名,文件夹,文件都可以重命名mv 原名称 现名称
对原文件创建连接(即快捷方式而已)ln -s 原文件名称 创建快捷方式名称,(s就是soft的含义)快捷方式一般为蓝色;当rm 原文件名称将原文件删除之后,快捷方式名称会失效变成红色,这里的快捷方式就相当于软连接

  • 硬连接

有软连接肯定会有对于的硬连接ln 原文件名称 创建快捷方式名称,这里为硬连接。也就是原文件删除后,创建的快捷方式名称照样可以读取原来的数据。

软连接—>指向原文件名称的快捷方式,原文件删除之后失效
硬连接—>指向原文件内容的快捷方式,原文件删除之后仍可以读取文件内容
Linux里面存在一个硬连接数来接收每个指向内容的硬连接个数,Linux中文件的内容和名称是存放在不同的位置的,软连接中的快捷键是指向原文件名称的,原文件删除后当然软连接失效;而硬连接却是指向文件内容的,每创建一个硬连接,硬连接数会加一。当然每删除一个硬连接,硬连接数会相应减一,当硬连接数为零时,系统会将内容给释放掉。
在这里插入图片描述
查看多个文件内容,只能查看不能编辑cat 文件名称1 文件名称2 文件名称3
将多个文件内容进行合并输入到yy.txtcat 1.txt 2.txt 3.txt > yy.txt,这里的yy.txt若不存在则会自动创建

文本搜索命令grep

从指定的文件里面搜索指定的内容
搜索a.txt文件里面包含yanyu的内容grep “yanyu” a.txt
同时将搜索的内容所在的行数显示到前面grep -n “yanyu” a.txt
显示文件里面不包含yanyu的所有内容grep -v “yanyu” a.txt
显示文件里面以yanyu开头的所有内容grep “^yanyu” a.txt
显示文件里面以yanyu结尾的所有内容grep “yanyu$” a.txt

拷贝文件cp(copy)

将a.txt文件复制粘贴到A文件夹下cp a.txt A
若A为空文件夹或者里面有内容,且要复制到B文件夹下cp -r A B

移动文件、对文件或者文件夹重命名mv

将a.txt文件命重命名为b.txtmv a.txt b.txt
将a.txt文件移动(剪切粘贴)到B文件夹下mv a.txt B

查找文件find

find可以从指定目录中搜索文件名,而grop则是从指定文件里面搜内容
sudo表示最高权限去搜索)通配符要学会灵活使用
从根目录下搜索文件名包含name的所有文件sudo find / -name "*name*"
从根目录下搜索文件名name的所有文件sudo find / -name "name"
在这里插入图片描述
当然不需要全部都牢记,知道如何去查命令即可find --help

归档管理(打包、解压)tar
  1. 打包cvf,tar

tar -cvf 打成包的名称.tar 需要打包的文件名称运行完成后会显示所打包的所有文件名称
将当前路径下的所有 .java为后缀的文件打包且包名为yanyu.tar
tar -cvf yanyu.tar *.java
打包之后大小不变

  1. 解包xvf

tar -xvf 压缩包的名称.tar
将打包后的文件解包到当前路径且打包的文件不删除
tar -xvf yanyu.tar

  1. 压缩zcvf,tar.gz、tar.bz2

压缩之后文件大小才会变小
tar -zcvf 压缩之后的压缩包名称.tar.gz 所要压缩的文件名称
tar -jcvf 压缩之后的压缩包名称.tar.bz2 所要压缩的文件名称
zip 压缩之后的压缩包名称.zip 所要压缩的文件名称
将所有 .py后缀的文件压缩且压缩包名称为yanyu.tar.gz
tar -zcvf yanyu.tar.gz *.py

另一种压缩格式
将所有 .py后缀的文件压缩且压缩包名称为yanyu.tar.bz2
tar -jcvf yanyu.tar.bz2 *py

其他压缩格式
将所有 .py后缀的文件压缩且压缩包名称为yanyu.zip
zip yanyu.zip *py

tar.gz压缩包大小要比tar.bz2压缩包小,zip压缩包最大

显示当前路径下所有文件信息ll其与ls -ls等价

  1. 解压zxvf

tar -zxvf 压缩包的名称.tar.gz
tar -zxvf 压缩包的名称.tar.gz -C 指定解压到的路径
tar -jxvf 压缩包的名称.tar.bz2
tar -jxvf 压缩包的名称.tar.bz2 -C 指定解压到的路径
unzip 压缩包的名称.zip
unzip -d 指定解压到的路径 压缩包的名称.zip

将压缩包解压到当前路径且压缩包不删除
tar -zxvf yanyu.tar.gz
将压缩包解压到当前路径下的B文件夹下前提B文件夹是存在的,且压缩包不删除
tar -zxvf yanyu.tar.gz -C ./B
当然若B文件夹就在当前目录下这样也可以tar -zxvf yanyu.tar.gz -C B

另一种解压格式
tar -jxvf yanyu.tar.bz2
将压缩包解压到当前路径下的B文件夹下前提B文件夹是存在的,且压缩包不删除
tar -jxvf yanyu.tar.bz2 -C ./B
当然若B文件夹就在当前目录下这样也可以tar -jxvf yanyu.tar.bz2 -C B

其他解压格式
unzip yanyu.zip
将压缩包解压到当前路径下的B文件夹下前提B文件夹是存在的,且压缩包不删除
unzip -d yanyu.zip ./B
当然若B文件夹就在当前目录下这样也可以unzip -d yanyu.zip B

上述的所有命令其实都在根目录下的bin文件夹里面cd /bin
若要查看命令所在路径只需要which 命令即可
查看ls这个命令在哪which ls

Linux命令-系统管理

查看当前月份的日历具体到当前月cal,没有农历只有阳历
将指定年份所有的日历都显示出来cal -y 指定年份
将1999年的所有月份日历显示出来cal -y 1999
查看当前时间date
结合起来,可以将当前日历打印到指定文件a.txt里面cal -y 1999 > a.txt
或者打印当前时间date > a.txt
也可以按自己规定的样式输出时间date "+%Y其间可以随便添格式%m其间可以随便添格式%d"其中%Y为年(2017),%y也为年(17),%m为月,%d为天,大小写的区别自己去试吧,我就没那么闲着没啥去试了哈
在这里插入图片描述

查看进程信息ps

显示当前这一时刻正在运行的进程ps
显示Linux所有的进程一显示一输出就完了ps -aux
显示linux所有的进程会不断的动态显示只有按下q退出之后才停止top;更详细的动态显示htop
若某个程序占用cup过大则可以通过kill 对应PID将其sha掉,这里的PID通过ps -aux可查看
若某个进程特别死皮不要了,则可以通过kill -9 对应PID将其sha掉

关机重启

重启reboot
立刻关机shutdown -h now
20分钟之后关机shutdown -h +20
晚上10点14分关机shutdown -h 22:14
在这里插入图片描述
显示硬盘的使用情况dfdf -h
显示当前路径中文件或文件夹使用情况dudu -h
查看当前电脑的网络信息ifconfig,其中io称之为本地环回其是虚拟出来的,用于测试电脑的网络功能是否好使,一般其IP为127.0.0.1
将指定的网卡更改指定的IPifconfig 对应网卡 指定IP
指定与固定的电脑IP测试是否可以网络互通ping 其他电脑的ip

用户权限管理

Linux是个多用户多任务的操作系统
多任务即当前操作系统可以同时运行多个程序
多用户指的是可以在不用退出当前账户的前提下可以使用其他的账户来执行操作些事情

添加一个新的用户sudo useradd 用户名称 -m,执行过程:创建了‘用户名称’这个账户顺便在home文件夹里面创建了个文件夹,这个文件夹当成这个账户的家目录,并且这个家目录的名称和这个’用户名称‘一模一样。其中 -m表示创建完账户之后顺便会在home下面创建一个这个账户的家目录(也就是文件夹),家目录名称与账户名称一致
sudo useradd python -m之后会在home文件夹下出现一个python文件夹

如何确定其是个文件夹还是个用户呢?cat /etc/passwd之里面保存的信息都是账户的信息

在Windows中可以通过注销来选择其他用户进行登录
Linux则通过sudo su 用户名称来切换用户,之后路径与原先的路径不变
Linux则通过sudo su -r 用户名称来切换用户,之后会跳转到用户名称的家目录下
切换到python用户sudo su python,此时会提示,需要输入密码,傻脸了~;执行该命令之后所在路径不会变,还是原来的路径pwd可以查看观察一下;
此时若sudo su - python就会切换用户的时候直接跳转到该用户的家目录中去

新创建的用户是没有密码的,需要对用户进创建密码sudo passwd 用户名称
对python该用户设置密码sudo passwd python,之后输入两次密码即可;当然,当你忘记密码的时候也可以通过该命令对密码进行重置操作

查看当前的账户名称whoami
退出账户exit退出到之前的原先账户
在Linux里面可以打开多个终端切换到不同的账户中去,俩终端对应俩不同的账户
Windows是假的多用户,你得注销之后才能选用其他的用户进行登录,Linux则不会。

远程登录ssh 用户名@其对应IP
在终端输入Ctrl+Shift+G,会将两个终端进行排列显示,其中Alt快速切换

查看当前有多少人登录自己的账户who,有IP显示的表示远程连接

从根目录开始给劳资删rm / -rf,对大型的互联网公司这样干犯法的哈

删除用户sudo userdel 用户名称,此时用户的家目录并不会删除,当你离职的时候只需要把你的账号给删除即可,家目录里面的编写的代码不会删除的
将用户和用户的所有代码信息全部删除sudo uerdel -r 用户名称
区别在于 -r表示删不删该用户的家目录,一般不删

在Linux中root就相当于Windows里面的administer最高管理员
若要切换到root,sudo -s即可,身份直接变成管理员(较常用)
sudo su root是原先非的管理员获得了管理员的所有权限了

当你已经成为root的身份的时候,sudo操作就没啥作用了;命令里面带有sudo只是root对该命令赋予一次最高权限罢了
$ 账户为普通用户,而 # 为root账户

用户、用户组

用户很好理解就是Windows下的不同的用户,注销就可以切换那种
用户组就等价于QQ空间里面的分组,发个说说不让谁看啥的
查看用户组组名cat /etc/group也可以groupmod然后多按几次Tab键,便可以进行查看所有的用户组组名
创建用户组sudo groupadd 用户组名称
删除用户组sudo groupdel 用户组名称

当创建一个新用户的时候默认就会创建一个组,其组名为该用户的名称sudo useradd 用户名称
ls一下之后,第一个表示文件的拥有者;第二个表示用户组
举个例子:a在B组里面,且a创建了一个文件,此时,若b也在B组里面,就可以拥有B组对a文件的所有操作权限
在这里插入图片描述

当你安装Linux操作系统的时候,系统会自动给你创建一个sudo用户组;当你的用户在其他用户组的时候,输入命令sudo -s切换管理员的时候,若其用户不再sudo组是不允许切换管理员的

为创建普通的用户添加sudo权限,新创建的用户默认是不在sudo组里面
为普通用户创建sudoadm权限sudo usermod -a -G adm 用户名sudo usermod -a -G sudo 用户名,之后便将当前用户添加到sudo组里面去了,即可执行sudo -s直接切换root用户了

修改文件的所有者chown

将一个文件的所属者更换chown 用户 文件
1.py这个文件的所属者更改为yanyuchown yanyu 1.py

修改文件所属组chgrp

将文件的所属组更改chgrp 所属组 文件名
q.txt这个文件的所属组改成YanYuchgrp YanYu q.txt,即哪个用户在YanYu这个组里面,哪个用户就对q.txt文件具有最高权限

文件的权限

显示当前所有文件信息ll等价于ls -la,会发现有10个字母,分为四组,1、3、3、3这四组

1333
- 普通文件文件拥有者的权限同组者的权限其他人的权限
d 文件夹rread可读 wwrite可写 xexe可执行 -没权限同理同理

之后紧挨着的一位数字表示其文件或文件夹的硬连接数,后跟文件所属者、文件所属组、文件大小、修改日期

为文件进行赋权限:主要有三个类别身份u文件拥有者,g同组,o其他人
修改文件的权限chmod 类别身份=rwx随便选 要修改权限的文件名称
y.java文件的拥有者权限设置为可读chmod u=r y.java
y.java文件的其他人权限什么也不许chmod o=
同理也可以一次性全部赋权限chmod u=rwx,g=,o=r拥有者可读可写可执行,同组用户什么权限都没有,其他用户至可读

很显然很麻烦这样搞权限赋值的话,这时候可以使用数字法对权限赋值,r-4,w-2,x-1
chmod u=x,g=wx,o=rwx y.py等价于chmod 137 y.py显然数字法比字母法简单的一批

编辑器

  1. gedit

gedit 文件名称
对a.txt文件进行编辑gedit a.txt
这个还是别用了,容易显得自己很low

  1. sublime

一个真正的跨平台编辑器,windows、Mac、Linux都有相应软件

  • vi、vim
    vi先有的,然后vim只不过是在vi的基础上新加了些额外的功能
    编辑a.txt文件vim a.txt
    当你对该文件不正常关闭的时候,比如kill掉,ls-a便会出现 .a.txt.swp这个隐藏文件,这是由于a.txt因为不正常关闭导致的将里面的内容缓存的一个缓存文件,当你再次vi a.txt编译的时候便会出现一个弹窗然后让你选择是否恢复或者删除之类的提示
    在这里插入图片描述
  • 在命令模式下(Esc)

yy表示复制光标所在的这一行
4yy表示复制光标所在的这一行向下的4行
p表示粘贴
dd表示剪切(删除)光标所在的行
2dd表示剪切(删除)光标所在的这一行向下的2行

光标移动
h向左移动一个字符位置 jkl
H光标移动到当前屏幕的上方 M当前屏幕的之间 L当前屏幕的下方

Ctrl+F翻下一屏
Ctrl+B翻上一屏
Ctrl+U翻上半屏
Ctrl+D翻下半屏

20G表示快速定位到第20行代码
G表示快速回到整个代码的最后一行
gg表示快速回到整个代码的第一行

w表示向后跳一个单词的长度,即跳到下一个单词的开始处
dw表示删除删除光标所在的整个单词
b表示向前跳一个单词的长度,即跳到上一个单词的开始处

D表示从当前的光标开始剪切直到行末
d0表示从当前光标开始剪切直到行首
x表示删除光标所在位置的内容,往后删,每次只能删除一个
X表示删除光标前一个位置的内容,往前删,每次只能删除一个

u表示撤销
Ctrl+R表示反撤销

按下V或v开始选中代码片
V表示光标所在的整个行
v表示光标所在之前
>> 表示右移代码
<< 表示左移代码
.表示重复执行上一次命令操作

{表示移动到上一个代码段处
}表示移动到下一个代码段处

r表示替换光标所在位置一个字符,按下r之后再按需要替换的字符即可
R替换光标以及后面的字符,按下R之后再按需要替换的字符即可,会将光标及其后面的字符挨个替换

/后接所需要搜索的内容,搜索成功之后会显示黄色,当然要想消去黄色提醒,搜索个不存在的即可
n表示显示下一个搜索的内容
N表示显示上一个搜索的内容

Shift+zz表示保存并退出,相当于末行模式下(:)的wq

  • 在末行模式下(:)

%s/A/B/g,将整个文件里面的所有B代替A,A不存在了
%1,20/A/B/g将文件中1-20行之内的B代替A,A不存在了
q表示退出
w表示保存
wq表示保存并退出
q!表示强制退出

vi中显示文件行数,在命令模式下输入
显示全部行数set nu
显示光标所在行的行数nu

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关闭浏览器 清空session_跨境网络小知识之Session

跨境小伙伴们大家好&#xff0c;上一篇为大家介绍了Cookie&#xff0c;今天就为大家介绍下连接cookie的另一端Session&#xff0c;交互过程中&#xff0c;二者缺一不可。与Cookie相对&#xff0c;Session是存储在服务端的&#xff0c;他们之间是通过一个叫做sessionID的东东建立…

Dojo学习笔记(一):Hello Dojo!

欢迎来到Dojo世界&#xff01;在这篇文章中你将会学习到如何加载Dojo以及探索Dojo的一些核心功能。你还会了解Dojo的基于AMD的模块架构&#xff0c;探索如何加载额外的模块来增加功能到您的Web站点或应用程序&#xff0c;并找出在出错的时如何得到帮助。让我们开始吧 开始学习D…

转:我眼中的Visual Studio 2010架构工具

来自&#xff1a;http://www.cnblogs.com/wayfarer/archive/2010/07/30/1788398.html我眼中的Visual Studio 2010架构工具影响架构质量的是构建体系架构的思想、原则、实践与架构师的经验&#xff0c;绝不是工具。即使是最优秀的架构工具&#xff0c;也不可能像倚天宝剑一般——…

VMware创建Ubuntu操作系统到网络配置详细流程

一、创建虚拟机 Ubuntu下载链接 1&#xff0c;看个人需求了&#xff0c;有更高的版本&#xff0c;下载Ubuntu镜像 2&#xff0c;VMware官网随便下载即可 3&#xff0c;创建新的虚拟机 4&#xff0c;自定义 5&#xff0c;默认即可 6&#xff0c;稍后安装操作系统 7&#xf…

djiango配置mysql_数据库MySQL相关环境配置以及数据库与Go的连接

Linux下安装好MySQL后&#xff0c;Windows安装可视化工具navicatLinux下MySQL与Windows下navicat进行连接:安装的过程很是揪心&#xff0c;各种查网站、大致把坑都写了出来&#xff1a;1、在Linux下的mysql语句中&#xff0c;mysql> select host,user,authentication_string…

基于HtmlParser的网络爬虫

一、 目标 获取网页中的超链接及链接名&#xff0c;如从http://www.hao123.com/开始&#xff0c;抓取所有hao123链接到的超链接&#xff0c;再以获取到的链接网页为目标&#xff0c;获取它所链接到的网页。 二、环境及开发工具 环境&#xff1a;Java 工具&#xff1a;MyEclip…

VMware下Ubuntu无法全屏显示问题

一、运行Ubuntu的时候无法全屏显示&#xff0c;如图所示下载VMware Tools 二、之后将下载的文件拷贝到home文件夹下 三、解压该压缩包 由于该压缩包是.tar.gz结尾的故压缩命令&#xff1a;tar -zxvf VMwareTools-10.2.5-8068393.tar.gz&#xff0c;当然各版本有可能不一样&am…

AMQP RabbitMQ

转载&#xff1a;http://blog.ftofficer.com/2010/03/translation-rabbitmq-python-rabbits-and-warrens/官方介绍&#xff1a;http://www.rabbitmq.com/erlang-client-user-guide.html开始吧AMQP当中有四个概念非常重要&#xff1a;虚拟主机&#xff08;virtual host&#xff…

fsync与fflush的关系和区别

read/write/fsync与fread/fwrite/fflush的关系和区别 read/write/fsync&#xff1a; linux底层操作&#xff1b; 内核调用&#xff0c; 涉及到进程上下文的切换&#xff0c;即用户态到核心态的转换&#xff0c;这是个比较消耗性能的操作。 fread/fwrite/fflush&#xff1a;…

数据库系统数据库管理系统_数据库管理系统介绍

数据库系统数据库管理系统数据库 (Database) A database is a collection of related data. In database any user can efficiently access the data which users want to retrieve. It can be anything from a simple collection of roll numbers, names, addresses and phone…

srs配置文件分析

配置文件中的每一项都是一个SrsConfDirective对象。 例子&#xff1a;vhost 1、 整个vhost 是一个SrsConfDirective对象。 1.1、名字&#xff1a;std::string name vhost 1.2、参数&#xff1a;std::vectorstd::string args第0个值 defaultVhost 1.3、子SrsConfDirective&a…

寄存器(CPU工作原理)03 - 零基础入门学习汇编语言08

第二章&#xff1a;寄存器&#xff08;CPU工作原理&#xff09;03 让编程改变世界 Change the world by program 物理地址 CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。 我们将这个唯一的地址称为物理地址。 16位结构的CPU…

Anaconda下安装OpenCV和Tensorflow(最简洁高效的方法)

安装Tensorflow 1&#xff0c;打开Anaconda Navigator 2&#xff0c;手动创建tensorflow环境&#xff0c;这个和你的python版本号一致哈&#xff08;方法一第一步之后&#xff0c;输入python即可查看当前的版本&#xff09; 3&#xff0c;手动搜索并下载添加 4&#xff0c;…

使用FD_CLOEXEC实现close-on-exec,关闭子进程无用文件描述符

我们经常会碰到需要fork子进程的情况&#xff0c;而且子进程很可能会继续exec新的程序。这就不得不提到子进程中无用文件描述符的问题&#xff01; fork函数的使用本不是这里讨论的话题&#xff0c;但必须提一下的是&#xff1a;子进程以写时复制&#xff08;COW&#xff0c;C…

Anaconda中下载速度贼慢?

清华镜像 大致步骤如下&#xff1a; 1&#xff0c;windsR输入cmd&#xff0c;打开命令终端页面 输入conda config --set show_channel_urls yes 2&#xff0c;在相应的C盘目录下会生成.condarc文件 3&#xff0c;用记事本或者notepad打开进行替换 channels:- defaults show_c…

mysql创建表时出现1071_mysql 出现1071错误怎么办

mysql 出现1071错误的解决办法&#xff1a;该问题是由键值字段长度过长导致。mysql支持数据库表单一键值的最大长度不能超过767字节&#xff0c;超出这个长度即报错(见标题名称)。一般情况下&#xff0c;不会有键值字段的长度会超出该长度。但是需要注意的是&#xff0c;随着全…

srs rtmp从监听到接收到新连接的过程分析

&#xff1a;分析srs从启动开始的main入口开始。分析rtmp监听端口&#xff0c;然后到接收到新rtmp连接的过程分析。 目录一、流程图二、代码分析1、srs_main_server.cpp:main()2、srs_main_server.cpp:do_main()3、srs_main_server.cpp:run()4、srs_main_server.cpp:run_master…

加载一张照片,可选择是否另存为

加载一张照片&#xff0c;按下S键保存&#xff0c;ESC退出 加载一个灰度图(E:\Python-workspace\yanyu.png)&#xff0c;显示图片按下’s’键保存(beyond.png)(保存后的路径和该程序所在路径一致)后退出&#xff0c;或者按下 ESC 键退出不保存 import cv2img cv2.imread(E:\…

RTP协议基本分析(RTSP、WebRTC使用)

目录1、介绍2、RTP3、格式4、RTP打包H2644.1、H264打包方式之Single NAL Unit4.2、H264打包方式之FU-A4.2.1、FU indication4.2.2、FU header4.2.3、第一个IDR帧的NALU第一个切片4.2.4、第一个IDR帧的NALU第二个切片4.2.5、第一个IDR帧的NALU最后一个切片5、RTP打包AAC5.1、AU-…

对照片进行边缘化处理,并将边缘化处理后的结果保存

对照片进行边缘化处理&#xff0c;并将边缘化处理后的结果保存 import cv2 from matplotlib import pyplot as plt img cv2.imread(E:\Python-workspace\OpenCV\OpenCV/water1.png,1)#第一个参数为选择照片的路径&#xff0c;注意照片路径最后一个为正斜杠其他都为反斜杠&…