一、vi和vim编辑器
①、三种模式
所有的 Linux 系统都会内建 vi 文本编辑器。vim 具有程序编辑的能力,可以看做是 vi 的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。所以这里以vim为主。你可以把它当做是Windows下的文本编辑器。
当使用vim xxx时,如果xxx文件不存在,则vim编辑器会在当前的工作目录下创建此文件,如果此文件已经存在则打开此文件。打开文件后只能查看文件内容而不能编辑文件内容,vim编辑器的这种模式被称为------正常模式。
如果要编辑文件的内容,可以在正常模式下按 i 或者 a键进入------插入模式/编辑模式。
当需要保存修改的文件时,需要先(按Esc)退回正常模式,在正常模式下按下 :键或者 / 键进入------命令行模式。
同样的,命令行模式下按Esc键可以退回正常模式,虽然正常模式和编辑模式能直接切换,正常模式和命令行模式能直接切换,但是命令行模式和编辑模式却要通过正常模式间接切换。
三个模式的关系如下图:
②、案例操作
以上是vim编辑器的三种模式,下面举一个例子来具体说明。
1、在命令行窗口输入:vim test1
2、vim编辑器创建此文件并进入正常模式
3、i 键进入编辑模式
4、随便输入一些内容
5、按Esc退回正常模式
6、按:键进入命令行模式
7、输入wq(write+quit)保存文件内容【此时也可以输入q,他会提示你文件内容将不会被保存,也可以输入q!,此时将不会提示直接退出。相同的也有wq!,当文件内容修改可能会对其他文件造成影响时,wq命令将不会执行,如果要强制修改文件内容就需要wq!。】,此时会返回命令行窗口。
③、vim的一些常用快捷键
1) 拷贝当前行 yy , 拷贝当前行向下的 5 行 5yy,并粘贴(p)。
2) 删除当前行 dd , 删除当前行向下的 5 行 5dd
3) 在文件中查找某个单词 [命令行下 /关键字 , 回车 查找 , 输入 n 就是查找下一个 ],查询hello.
4) 设置显示文件的行号,取消文件的行号.[命令行下 : set nu 和 :set nonu]
5) 编辑 /etc/profile 文件,使用快捷键到底文档的最末行[G]和最首行[gg],注意这些都是在正常模式下执行的。
6) 在一个文件中输入 "hello" ,然后又撤销这个动作,再正常模式下输入 u
7) 编辑 /etc/profile 文件,并将光标移动到 第 20 行 shift+g : 第一步:显示行号 :set nu 第二步:输入 20 这个数 第三步: 输入 shift+g
④、快捷键大全
二、开机、重启、用户的登陆和注销
①、关机和重启指令
halt--->关机指令
reboot--->重启指令
syn--->将内存中的数据持久化到磁盘中,建议每一次关机和重启时,都敲一遍syn指令,防止数据丢失。
除了这三个常用的指令,还有一套指令用于关机和重启:shutdown -h now 立刻关机
shutdown -h 1 1分钟后关机
shutdown -r now 立刻重启
②、用户的登陆和注销
Linux是一个多用户操作管理的系统,在日常使用时尽量避免使用root用户登陆,因为root用户的权限太高,操作不当容易造成系统出现问题。
Linux操作系统中,一切事物都被虚拟化为一盒目录或者文件,并且Linux系统存在运行级别,这个在本篇文章的后面会讲解。
可能刚接触Linux时,比如说在安装CentOS7中如果没有安装图形化界面的朋友们进去就是一团黑,没有一个友好的图形化界面就被劝退了,这属于3级运行级别,而另一个常用额运行级别为5级(图形化运行级别)。
之所以提到运行级别,是因为在用户注销的命令中有一个常用的命令logout,但这个命令需要在3级运行级别下才能执行。
之所以提到多用户管理,是因为在命令行窗口输入命令 (su - 用户名)注意 - 前后都要有空格哦,这个命令下一节还会讲,就可以切换到别的用户,值得一提的是,当高权限用户(root)切换低权限用户时,是不需要输入密码的 ,但是反过来就需要输入登陆密码了。另外当root用户登陆低权限用户时,可以输入exit登出(退回root账户),此方法不使用低权限用户登陆root。
三、用户管理
①、基本介绍
1)刚才提到Linux是一个多用户多任务的操作系统,任何一个想要使用系统资源的用户,都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
2)为了方便管理用户和用户权限,Linux还引入了“组”的概念。并且规定一个用户至少属于一个组,如果在创建用户时不指定组,则会默认创建一个与账户名同名的组,并将该用户划到该组中。
实际上:Linux在管理用户权限时,既是面向用户的,又是面向组的,通过管理用户的权限规定了其对所拥有的文件的权限(读、改、执行),通过管理组的权限而规定了该组中用户对于某一文件的权限。
②、概念图
Linux的home目录用户管理用户,当新创建一个用户时,就会在home目录下创建一个同名子目录,该子目录就是此用户的工作空间。
③、添加用户
设想一下,此时的你已经工作多年称为项目经理了,此时公司新来了一位员工,你需要给他创建一个账户并根据他的部门划到相应的组中。
好了别做梦了【敲脑袋】。
useradd 【选项】 用户名,选项可以不填。
useradd -d /home/目录名 用户名,用这个命令创建用户时,会将指定的目录名作为此账户的家目录。如果此目录不存在则创建,这也就也为着,一个家目录中并不是只能保存一个用户的信息。
你可以试一下:
useradd -d /home/dog dog
useradd -d /home/dog cat
再使用下面介绍的用户查询指令查询: id dog 和 id cat
④、给指定用户指定或修改密码【此操作需要使用root权限】
passwd 用户名
⑤、删除用户
userdel 用户名 这个命令在删除用户时,不会删除该用户的家目录
userdel -r 用户名 这个命令在删除用户时,会将此用户的家目录也删除【不建议使用】
为什么不建议使用第二条指令呢?设想一位员工离职了,但有很多信息保存在他的家目录中,这些信息对于公司来说还是很有价值的,所以不建议删除家目录。
⑥、查询用户
id 用户名
⑦、切换用户
在Linux中,当当前账户的权限不够时,可以切换用户。
su - 用户名
值得一提的是:高权限用户切换低权限用户时,不需要输入密码,但反过来则需要输入密码。
当使用root用户登陆低权限用户时,可以使用exit登出返回root用户。
⑧、用户组
Linux引入了组的概念用来管理用户权限,实际上Linux是通过规定组的权限去定义用户权限的。
groupadd 组名 ---增加组
groupdel 组名 ---删除组
⑨、增加用户时指定所属的组
当新创建一个用户时,如果不指定组,系统会默认的创建一个同名组,如果想创建一个用户并指明其所属的组,应该使用指令:
useradd -g 用户组 用户名
⑩、修改用户的组
附:一些重要文件
a)/etc/passwd文件:用户的配置文件,记录了用户的各种信息
b)/etc/shadow文件:口令的配置文件
c) /etc/group文件:组的配置文件,记录了组的信息
四、实用指令
在操作Windows系统时,我们只需要点击鼠标就可以轻松操作Windows系统,但是操作Linux系统却是一行行指令完成的。在介绍如何操作Linux之前,先介绍一下;Linux的运行级别。
Linux共有0~6,7个运行级别,分别是:
0:关机
1:单用户级别【常用于找回根用户的密码】
2:多用户状态没有网络服务
3:多用户有网络服务
4:Linux操作系统未使用这一级别,将它保留给了用户
5:图形界面
6:系统重启
常用的运行级别是3 和 5 ,自改默认的运行级别可通过修改文件/etc/inittab的id:5:initdefault这一行中的数字。
1)man指令和help指令
当不熟悉一个指令的功能时,可以使用man 指令名或者 help 指令名来了解指令的相关信息
但是还是直接问百度或者查询菜鸟教程比较友好。
2)pwd指令
此指令用于显当前的工作目录
3)ls指令
ls 【选项】【目录或文件】
选项处可填 -a 或者 -l ,也可以组合使用-al。
-a :用于显示当前目录所有的子目录和文件,包括隐藏的文件
-l :以列表的形式显示当前目录的文件和子目录
当使用ls -l时,其实和 ll 指令效果相同。
4)cd指令
cd 路径 此指令用于切换工作目录,路径可采用相对路径和绝对路径
比较常用的有:cd ~ 此指令用于回到自己的家目录
cd .. 此指令用于切换到上级目录
5)mkdir指令
mkdir 【选项】 要创建的目录,默认情况下此指令只能创建一级目录,而不能创建多及目录,比如说,我在root/目录下可以使用指令 mkdir animal/ 在root目录下创建一个animal目录,但是不可以使用mkdir animal/dog 创建多级目录,如果想要创建多级目录,需要在选项处写上 -p 。在创建目录的时候一定要注意路径是否正确。
6)rmdir指令和rm指令
rmdir 目录名 用于删除非空目录
rm -rf 目录名 级联删除非空目录及其子目录和内容
-r 表示递归删除整个文件,-f 表示强制删除不提示
当然在删除目录的时候也需要注意路径是否正确,删除目录也可以使用绝对路径和相对路径:
7)touch指令
touch指令用于创建文件
touch hello.txt ,也可以同时创建多个文件:touch dog.txt cat.txt,中间用空格隔开就行。
8)cp指令
cp指令用于拷贝文件到指定目录
cp 【选项】 源文件 目标目录
选项处可填 -r,表示如果源文件是是目录,将递归复制此目录中下所有内容至目标目录。
拷贝文件到具体目录:
递归复制目录及其下文件至目标目录:
9)mv指令
mv指令用于移动文件与目录,也可以用于重命名
mv oldNameFile newNameFile 重命名
mv dog.txt wangwang.txt
mv 源文件 目标目录
10)cat指令
cat指令用于查看文件内容,以只读的方式打开文件
cat 【选项】 文件名
选项处可填 -n ,代表显示行号。在使用vim编辑器打开文件的时候,在命令行模式下,输入set nu也可以显示行号,set nonu,取消行号显示。
11)more指令
more指令是一个基于vim编辑器的文本过滤器,他以全屏的方式按页显示文本文件的内容,more指令中还内置了若干快捷键。
more 文件名
常用快捷键:
12)less指令
less指令用来分屏查看文件内容,他的功能与more指令类似,但是比more指令更加强大,支持各种显示中断,less指令在显示文件内容时,并不是一次将整个文件加载完成之后再显示的,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
less 文件名
快捷键:
13)>指令和>>指令
> 输出重定向:会将原来的文件内容覆盖
>>追加:不会覆盖原来文件的内容,而是追加到文件尾部
a)ls -l > 文件
ls -l > a.txt,将ls -l的内容覆盖写入到a.txt 文件,如果该文件不存在,就创建该文件。
b)ls -al >> 文件
c)cat 文件1 > 文件2(将文件1的内容覆盖到文件2)
d)echo "内容">>文件
14)echo指令
echo 输出内容到控制台
15)head指令
head用于显示文件的开头部分信息,默认情况下head指令显示文件的前10行内容。
head 文件名
head -n 5 文件名(显示文件前5行内容,5可以是任意数字)
16)tail指令
tail指令用于输出文件尾部的内容,默认情况下tail指令显示文件的后10行信息。
基本语法:
1)tail 文件名 (查看文件后10行内容)
2)tail -n 5 文件名 (查看文件后5行内容,5可以为任意数字)
3)tail -f 文件名 (时事追踪该文档的所有信息,工作中经常使用)【重点】
案例1:查看文件/etc/profile最后5行内容
案例2:实时监控mydate.txt,看看文件内容变化【追加的日期信息】
17)ln指令
软连接也叫符号连接,类似于Windows里的快捷方式,主要存放了连接其他文件的路径
ln -s 【原文件或目录】 【软连接名】(给原文件创建一个软连接)
删除上面建立的软连接
18)history指令
查看已经执行过的历史命令,也可以执行历史命令
19)date指令
①date (显示当前时间)
②date +%Y (显示当前年份)
③date +%m (显示当前月份)
④date +%d (显示当前是哪一天)
⑤date "+%Y-%m-%d %H:%M:%S" (以固定格式显示年月日时分秒)
⑥date -s 字符串时间
20)cal指令
此指令用于查看日历
cal 显示当前月的日历
cal 年份 显示指定年份的日历
21)find指令
find指令将从指定目录向下递归遍历各个子目录,将满足条件的文件或者目录显示在终端。简单说就是查找指定目录下是否存在指定文件,存在的话有多少个
①按文件名查:
②按所属用户查
find animal/ -user cat.txt
③查找整个Linux系统下大于20Mb的文件(+n:大于 -n:小于 n:等于)
find / -size +20M
④查找以 .txt结尾的文件
find / -name *.txt
22)locate指令
locate指令可以快速定位文件路径,locate指令利用事先建立的系统中所有文件名称及路径的locate数据库事先快速定位给定的文件。locate指令无序遍历整个文件系统,查询速度较快,为了保证查询结果的准确性,管理员必须定期更新locate时刻。
案例:
这里的updatedb是更新locate数据库,locate命令之所以比find -name 文件指令块快的多,原因在于他不是搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mloacte.d,因此在我们用whereis和locate查找文件 时,有时会找到已经删除的文件,或者刚刚创建的文件却无法查找到,就是因为数据库文件没有更新,为了避免这种情况,可以在使用locate指令之前,先试用updatedb指令,手动的更新这个包含本地所有文件信息的数据库。
23)grep指令和管道符 |
grep指令用于过滤查找,管道符“|”,用于将前一个指令的输出结果传递给后面一个指令处理。通常而这都是组合使用的。
grep 【选项】 查找内容 源文件
选项处可填:-n 显示匹配行及行号
-i 忽略字母大小写
24)压缩和解压缩指令【重要】
A)gzip/gunzip指令
gzip 文件 (压缩文件)
gunzip 文件.gz (解压缩文件)
B)zip/unzip 指令
zip 【选项】 xxx.zip (压缩文件)
选项处可填:-r 表示递归压缩
unzip 【选项】 xxx.zip (解压缩文件)
选项处可填:-d 目录名 (表示将解压缩后将文件保存在指定文件夹)
unzip -d /opt/tmp/ mypackage.zip 表示将mypackage.zip解压缩到指定目录 /opt/tmp/下
C)tar指令【常用】
tar指令既可以压缩也可以解压缩
tar指令压缩后的文件后缀名是 .tar.gz 的文件
tar 【选项】 xxx.tar.gz 要打包的内容以空格隔开
常用选项:
案例1 打包文件:
案例2 打包目录:
案例3 将dogpackage.tar.gz解压到当前目录
tar -zcvf dogpackage.tar.gz
案例4 解压dogpackage.tar.gz到固定目录(此固定目录要实现创建好)
tar -zcvf dogpackage.tar.gz -C /home
附:本菜鸡刚接触Linux,请各位大佬不吝指正错误。