Linux
一、目录结构与用途
-
/bin:系统命令目录
-
/sbin:超级命令目录,只有超级管理员才能执行的命令
-
/boot:系统目录,类似于Windows中的C盘
-
/dev:设备文件目录,硬盘、光驱、U盘都属于设备文件,/dev/sr0代表光驱设备,注意,此目录下的文件没有办法直接使用,必须先挂载
-
/etc:代表系统的配置文件目录,大部分软件安装后其配置文件都存放在此目录
-
/home:普通用户的家目录,用户登录后会自动切换到此目录
-
/root:超级管理员目录,超级管理员登录后会自动切换到此目录
-
/media:挂载目录,早期Linux挂载目录,用于挂载光盘以及软盘
-
/mnt:挂载目录,用来挂载额外的设备,如U盘、移动硬盘和其他操作系统的分区
-
/opt:第三方软件目录,这个目录是放置和安装其他软件的位置,手工安装的源码包软件都可以安装到这个目录中。不过笔者还是习惯把软件放到/usr/local/目录中,/usr/local/目录也可以用来安装软件
-
/usr:系统程序目录,类似Windows中的Program Files
-
/proc:虚拟文件系统。该目录中的数据并不保存在硬盘上,而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等
-
/tmp:临时文件目录,在该目录下,所有用户都可以访问和写入。建议此目录中不能保存重要数据,最好每次开机都把该目录清理
-
/var:经常变化的文件目录,网页文件、数据文件、日志文件
二、Linux基础命令
1、su
主要功能:切换用户,其中 - 代表切换用户的家目录
基本语法:
# su - root
从超级管理员切换到普通用户,root => xiaosage,不需要输入xiaosage的密码
xiaosage => root,要root密码
xiaosage => linuxuser,要密码
2、uname
主要功能:获取计算机操作系统相关信息,-a:all缩写
基本语法:
# uname -a
3、ls命令
☆用法一
主要功能:ls完整写法list show,以平铺的形式显示当前文件目录下文件信息
基本语法:
# ls
☆用法二
基本语法:
# ls 绝对路径/相对路径
绝对路径:不管当前工作路径在哪,目标路径都会从“/”磁盘根下开始
例子,访问xiaosage用户下的家目录,查看有哪些文件:
# ls /home/xiaosage
相对路径:除绝对路径之外的路径称为相对路径,相对路径得有一个相对物(当前工作路径)
../:表示上级目录(上一级)
./:表示当前目录(同级),普通文件./可以省略,可执行文件(绿色)必须加./
文件夹名称/:表示同级目录下(下一级),注意这个斜杠/
☆用法三
# ls [选项] [路径]
选项说明,
-l:ls -l,代表以详细列表的形式显示当前或其他目录下的文件信息(简写命令=>ll)
-h:ls -lh,通常与-l结合一 起使用,代表以较高的可读性显示文件的大小(kb/mb/gb)
-a:ls -a,a是all缩写,代表显示所有文件(也包含隐藏文件=>大部分以.开头)
4、pwd命令
主要功能:pwd=print working directory ,打印当前工作目录(告诉我们,我们当前位置)
基本语法:
# pwd
5、cd命令
主要功能:cd全称change directory ,切换目录(从一个目录跳转到另外一个目录)
基本语法:
# cd[路径]
选项说明:
路径既可以是绝对路径,也可以是相对路径
案例一:切换到/usr/local这个程序目录
# cd /usr/local
案例二:比如我们当前在/home/xiaosage下,切换到根目录/下
# cd../../
案例三:当我们在某个路径下,如何快速回到自己的家目录
# cd
或
# cd ~
6、clear命令
主要功能:清屏
基本语法:
# clear
# whoami //获取当前用户名称
7、reboot命令
主要功能:立即重启计算机
基本语法:
# reboot
8、shutdown命令
主要功能:立即关机或延迟关机
立即关机基本语法:
# shutdown -h 0|now
选项说明:
-h:halt缩写,代表关机
在Linux系统中,立即关机除了使用shutdown -h 0外还可以使用halt -p命令
延迟关机基本语法:
# shut -h 分钟数
代表多少分钟后,自动关机
按ctrl+c取消自动关机(CentOS6)。shutdown -c(CentOS7)
9、type命令
主要功能:主要用来结合help命令,用于判断命令的类型(属于内部命令还是外部命令)
基本语法:
# type 命令
内部命令:命令 is a shell builtin
外部命令:没有显示以上信息
10、history命令
主要功能:显示系统以前输入的前1000条命令
基本语法:
# history
11、hostnamectl命令
主要功能:用于设置计算机的主机名称(给计算机起个名字),此命令是CentOS7新增的命令
hostnamectl:hostname + control
☆获取计算机的主机名称
# hostname (CentOS6)
# hostnamectl (CentOS7)
☆设置计算机的主机名称(CentOS7新增)
CentOS7中主机名分为3类,静态的(static)、瞬态的(transient)、灵活的(pretty)
①静态static主机名称:电脑关机或重启后,设置的名称亦然有效
②瞬态transient主机名称:临时主机名称,电脑关机或重启后,设置的名称就失效了
③灵活pretty主机名称:可以包含一些特殊字符
CentOS 7中和主机名有关的文件为/etc/hostname ,它是在系统初始化的时候被读取的,并且内核根据它的内容设置瞬态主机名。
更改主机名称,让其永久生效?①使用静态的②改/etc/hostname文件
①瞬态主机名称(临时设置)
# hostnamectl --transient set-hostname 主机名称主机名称建议遵循FQDN协议(功能+公司域名)
案例:临时设置主机名称为wangluo.chxy.cn
# hostnamectl --transient set-hostname wangluo.chxy.cn
# su 立即生效
②瞬态主机名称(永久设置)
# hostnamectl --static set-hostname 主机名称
温馨提示:--static也可以省略不写
案例:永久设置主机名称为wangluo.chxy.cn
# hostnamectl --static set-hostname 主机名称
# su 立即生效
③灵活主机名称(主机名称可以添加特殊字符)
案例:把计算机主机名称通过灵活设置,设置为wangluo's server01
# hostnamectl --pretty set-hostname "wangluo's server01"
查看灵活主机名称:
# hostnamectl --pretty
三、Linux文件管理
一、文件命名规则
除了/外,所有字符都可以使用,尽量避免使用 ,
、<
、>
、?
、*
。如果包含特殊字符,例如空格,访问文件时需要用引号将文件名括起来。
建议命名规则:长度不超过255,尽量不要太长,见名知意。尽量使用小写字母,如需对文件名进行分隔,建议使用"_",例如xiaosage_2023
Linux文件的文件扩展名对Linux操作系统没有特殊的含义,用途只是为了使运维人员更好地区分不同的文件类型
文件类型是依靠权限位的标识符来进行区分的。也可通过颜色,如黑色普通文件、天蓝色文件夹
二、文件管理命令
1、文件创建/删除
①mkdir创建目录
命令:mkdir(make directory,创建目录)
# mkdir 目录名称
②mkdir -p递归创建多级目录
案例:在已知目录(/user/local)下创建多级目录(/nginx/conf)
# mkdir -p /user/local/nginx/conf
当没有-p时,会报错。因为没有nginx目录,解决方案加上-p。
③使用mkdir同时创建多个目录
# mkdir 目录名称1 目录名称2 目录名称3...
案例:在当前目录下同时创建a 、b、c三个目录
# mkdir a
# mkdir b
# mkdir c
或
# mkdir a b c
2、目录删除
①rmdir移除空目录
基本语法:
# rmdir 目录名称
将家目录下的xiaosage删除(空目录)
# rmdir xiaosage
rmdir = remove directory,移除目录
②rmdir -p递归删除空目录
基本语法:
# rmdir -p 目录名称1/目录名称2/目录名称3/...
主要功能:从右到左一级一级删除空目录
案例:递归删除xiaosage文件夹下的chxy文件夹下的wangluo
# rmdir -p /xiaosage/chxy/wangluo
③使用rmdir同时删除多个空目录
# rmdir 目录名称1 目录名称2 目录名称3 ...
案例:删除家目录中的a、b、c三个空目录
# rmdir a b c
3、文件创建
①touch创建文件
基本语法:
# touch 文件名称
主要功能:在Linux系统中的当前目录下创建一个文件
案例:在当前目录下创建一个readme.txt文件
# touch readme.txt
②使用touch命令同时创建多个文件
# touch 文件名称1 文件名称2 文件名称3 ...
案例:创建一个shop商城文件夹,然后在内部创建index.php/admin.php/config.php三个文件
# mkdir shop
# touch shop/index.php
# touch shop/admin.php
# touch shop/config.php
或
# touch shop/index.php shop/admin.php shop/config.php
提出问题:观察下面命令,有何区别?
第一种写法:touch shop/index.php shop/admin.php shop/config.php
代表在shop目录下首先创建一个index.php,再创建admin.php和config.php
第二种写法:touch shop/index.php admin.php config.php
代表在shop目录下首先创建index.php,然后当前目录下创建admin.php和config.php
③根据序号创建多个文件
基本语法:
# touch {开始序号...结束序号}
案例:创建file1、file2、file3、file4、file5共5个文件
# touch file{1...5}
4、文件删除
①普通删除
基本语法:
# rm [选项] 文件或文件夹的名称
选项说明:
-r:针对文件夹,代表递归删除,先把目录下的所有文件删除,然后删除文件夹
-f:强制删除,不提示(慎重使用)
案例:删除readme.txt文件
# rm readme.txt
rm: remove regular empty file 'readme.txt'?这里可以回复y or n
案例:强制删除admin.php,不提示(慎重)
# rm -f admin.php
案例:删除非空的文件夹shop(-rf强制递归删除,不提示)
# rm - r shop
提示信息:是否进入xxx目录 y
提示信息:是否删除xxx文件夹 y
在Linux系统中,ctrl + c不是复制,而是中断某个操作
②扩展:rm -rf /*
# rm -rf /* =>代表删除根目录下的所有文件(如果没有备份,恢复的几率不高)
rm:删除
-r:递归删除(无论文件夹是否为空)
-f:强制删除不提示
/:代表根分区
*:所有
5、复制操作
①cp复制操作
基本语法:
# cp [选项] 源文件或文件夹 目录路径
选项说明:
-r:递归复制,主要针对文件夹
cp = copy复制
案例:把readme.txt文件从当前目录复制一份到/tmp文件夹中
# cp readme.txt /tmp/
②cp复制并重命名文件
基本语法:
# cp [选项] 源文件或文件夹 目标路径/新文件或文件夹名称
案例:把readme.txt文件从当前目录复制一份到/tmp文件夹下并重命名为readme.txt.bak
# cp readme.txt /tmp/readme.txt.bak
③cp复制文件夹到指定路径
# cp -r 源文件夹名称 目标路径/
案例:把shop文件目录连同其内部文件统一复制到指定目录下
# mkdir shop
# touch shop/index.php shop/admin.php shop/config.php
# cp -r shop /tmp/
上述案例检查时,需要用到
ls
命令,下面两种有区别:①ls -d /tmp/shop查看shop文件本身状态
②ls /tmp/shop查看shop下文件状态
6、剪切操作
基本语法:
# mv 源文件或文件夹 目标路径/
mv = move,剪切,移动的含义
案例:把readme.txt文件剪切到/tmp目录下
# rm -rf /tmp/readme.txt => 先删除刚才复制到/tmp目录下的readme.txt文件
# mv readme.txt /tmp/
案例:把shop文件夹移动到/usr/local/nginx目录下
# mkdir /usr/local/nginx => 创建nginx文件夹
# mv shop /usr/local/nginx
7、重命名操作
基本语法:
# mv 源文件或文件夹名称 新文件或文件夹名称
案例:把readme.txt文件重命名为README.md文件
# mv readme.txt README.md
案例:把shop文件目录改为wechat目录
# mv shop wechat
8、打包压缩与解压缩
①几个概念
打包:一般Linux一次只能压缩一个文件。针对多文件或文件夹无法进行直接压缩,所以需要提前对
多文件或文件夹进行打包,才能进行压缩操作
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 打包 = 123.tar = 30MB
打包只是把多个文件或文件夹放在一个文件中,但是并没有进行压缩,所以其大小还是原来文件的总和
压缩:也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于:压缩文件所占用的磁盘空间比集合中所有文件大小的总和要小
1.txt 5MB
2.txt 10MB
3.txt 15MB
1.txt + 2.txt + 3.txt = 打包 = 123.tar.gz = 20MB(体积变小了)
②Linux打包操作
基本语法:
# tar [选项] 打包后的名称.tar 多个文件或文件夹
选项说明:
-c:create,打包
-f:filename,打包后的文件名称
-v:显示打包的进度
-u:update缩写,更新原打包文件中的文件(了解)
-t:查看打包的文件内容(了解)
案例:把a.txt、b.txt、c.txt文件打包到abc.tar文件中
# tar -cvf abc.tar a.txt b.txt c.txt
案例:把wechat文件夹进行打包wechat.tar
# tar -cvf wechat.tar wechat
③tar -tf以及tar -uf
# tar -tf 打包后的文件名称
主要功能:查看tar包中的文件信息
案例:查看abc.tar包中的文件信息
# tar -tf abc.tar
# tar -uf 打包后的文件名称 追加的文件名称
如果还想往tar包中更新或追加内容都可以通过-u选项
案例:向abc.tar包中添加一个d.txt文件
# touch d.txt
# tar -uf abc.tar d.txt
查看是否添加成功
# tar -rf abc.tar
扩展:如何把tar包中的文件释放出来
打包
# tar -cf abc.tar a.txt b.txt c.txt
打包 => 释放(-c 变成 -x)
释放
# tar -xf abc.tar
④打包并压缩(学习的重点)
基本语法:
# tar [选项] 压缩后的压缩包名称 要压缩的文件或文件夹
选项说明:
-cf:对文件或文件夹进行打包
-z:使用gzip压缩工具把打包后的文件压缩为.gz
-j:使用bzip2压缩工具把打包后的文件压缩为.bz2
-J:使用xz压缩工具把打包后的文件压缩为.xz
压缩速度:gzip > bzip2 > xz
压缩率:gzip < bzip2 < xz
100MB 90MB 80MB 70MB
案例:把a.txt、b.txt、c.txt文件打包并压缩为abc.tar.gz
# tar -zcf abc.tar.gz a.txt b.txt c.txt
案例:把wechat文件夹压缩为wechat.tar.gz格式的压缩包
# tar -zcf wechat.tar.gz wechat
⑤对压缩包进行解压
解压过程很简单,将压缩的参数中的c换成x就可以实现解压缩了
*.tar.gz格式的压缩包
# tar -zxf *.tar.gz
*.tar.bz2格式的压缩包
# tar -jxf *.tar.bz2
*.tar.xz格式的压缩包
# tar -Jxf *.tar.xz
# tar -zxf 压缩包名称.tar.gz -C 指定路径 => 解压到指定路径下
案例:把abc.tar.gz格式的压缩包进行解压操作
# tar -zxf abc.tar.gz
也可加入-v显示解压进度
# tar -zxvf abc.tar.gz
9、zip压缩与解压缩
①zip压缩
基本语法:
# zip [选项] 压缩后的文件名称.zip 文件或文件夹
选项说明:
-r:递归压缩,主要针对的是文件夹
Linux下已经有gzip、bzip2以及xz压缩命令了,为何还需使用zip压缩呢?
答:zip格式在Windows以及Linux中都是可以正常使用的
案例:把a.txt、b.txt、c.txt文件压缩为abc.zip
# zip abc.zip a.txt b.txt c.txt
案例:把wechat文件夹压缩为wechat.zip
# zip -r wechat.zip wechat
②unzip解压缩
基本语法:
# unzip 压缩包名称 => 解压到当前目录
# unzip 压缩包名称 -d 指定路径 => 解压到指定的路径下
案例:对abc.zip文件进行解压缩
# unzip abc.zip
案例:把wechat.zip解压到/usr/local/nginx目录下
# unzip wechat.zip -d /usr/local/nginx/
当命令忘记时,可以通过man命令查询(manual缩写,手册)
如:# man tar、#man pwd
四、Linux文件管理(上)
一、Vim编辑器
1、安装
一开始叫vi编辑器,升级之后为vim编辑器。安装后输入vim会弹出窗口。如若未安装,可在联网的前提下,输入yum install vim -y进行安装。
2、Vim编辑器的四种工作模式(重点)
☆命令模式
使用vim编辑器时,默认处于命令模式。在该模式下可以移动光标位置,可以通过快捷键对文件内容进行复制、粘贴、删除等操作
☆编辑模式或输入模式
命令模式下输入a或i进入,可进行文本内容编辑
☆末行模式
命令模式下输入冒号:进入,可以在末行输入命令来对文件进行查找、替换、保存、退出等操作
☆可视化模式(了解)
可做一些列选操作(通过方向键选择某些列的内容)
二、Vim编辑器的使用
1、使用Vim打开文件
基本语法:
# vim 文件名称
如果文件已存在,则直接打开。如若不存在,vim编辑器会在内存中创建一个新文件
案例:使用vim命令打开readme.txt文件
# vim readme.txt
2、Vim编辑器保存文件
在任何模式下,连续按两次Esc键,即可返回到命令模式。然后按冒号:,进入到末行模式,输入wq,代表保存并退出
3、Vim编辑器强制退出(不保存)
在任何模式下。连续按两次Esc,然后按冒号:,进入到末行模式,输入q!,代表强制退出但是不保存文件
4、命令模式操作(重点)
☆进入方法
默认进入为命令模式。在任何模式下都可连续按两次Esc即可进入命令模式
☆可进行操作
① 移动光标 ② 复制 粘贴 ③ 剪切 粘贴 删除 ④ 撤销与恢复
☆移动光标到首行或末行
到首行:输入gg
到末行:输入G(shift+g)
☆翻屏
向上翻屏:ctrl + b(before)或 PgUp
向下翻屏:ctrl + f(after)或 PgDn
向上翻半屏:ctrl + u(up)
向下翻半屏:ctrl + d(down)
☆快速定位光标到指定行(重点)
行号 + G,如50G代表快速移动光标到50行
☆复制/粘贴(重点)
①复制当前行(光标所在那一行)
按键:yy
粘贴:在想要粘贴的地方按下p键【将粘贴在光标所在行的下一行】 ,如果想粘贴在光标所在行之前,则使用P键
②从当前行开始复制指定的行数,如复制5行,5yy
粘贴:在想要粘贴的地方按下p键【将粘贴在光标所在行的下一行】 ,如果想粘贴在光标所在行之前,则使用P键
☆剪切/删除
如果剪切了文件,但是没有使用p进行粘贴,就是删除操作
如果剪切了文件,然后使用p进行粘贴,这就是剪切操作
①剪切/删除当前光标所在行
按键:dd(删除之后下一行上移)
粘贴:p
注意:dd 严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果
②剪切/删除多行(从当前光栋所在行开始计算)
按键:数字dd
粘贴:p
特殊用法:
③剪切/删除光标所在的当前行(光标所在位置)之后的内容,但是删除之后下一行不上移
按键:D(删除之后当前行会变成空白行)
☆撤销/恢复(重点)
撤销:u(undo)
恢复:ctrl + r 恢复(取消)之前的撤销操作【重做,redo】
5、末行模式操作(重点)
☆如何进入末行模式
进入末行模式的方法只有一个,在命令模式下使用冒号 : 的方式进入
☆末行模式下我们能做什么
文件保存、退出、查找与替换、显示行号、paste模式等等
☆保存/退出
:w => 代表对当前文件进行保存操作,但是其保存完成后,并没有退出这个文件
:q => 代表退出当前正在编辑的文件,但是一定要注意,文件必须先保存,然后才能退出
:wq => 代表文件先保存后退出(保存并退出)
如果一个文件在编辑时没有名字,则可以使用:wq文件名称,代表把当前正在编辑的文件保存到指定的名称中,然后退出
:q! => 代表强制退出但是文件未保存(不建议使用)
☆查找/搜索
切换到命令模式,然后输入斜杠/(也是进入末行模式的方式之一)进入到末行模式后,输入要查找或搜索的关键词,然后回车
如果在一个文件中,存在多个满足条件的结果。在搜索结果中切换上/下一个结果:N/n(大写N代表上一个结果,小写n代表next )
如果需要取消高亮,则需要在末行模式中输入:noh
【no highlight】
☆文件内容的替换(重点)
第一步:首先要进入末行模式(在命令模式下输入冒号:)
第二步∶根据需求替换内容
①只替换光标所在这一行的第一个满足条件的结果(只能替换1次)
:s/要替换的关键词/替换后的关键词 + 回车
案例:把hello centos中的centos替换为centos7.6
切换光标到hello centos这一行
:s/centos/centos7.6
②替换光标所在这一行中的所有满足条件的结果(替换多次,只能替换一行)
:s/要替换的关键词/替换后的关键词/g g=global全局替换
案例:把hello centos中的所有centos都替换为centos7.6
切换光标到hello centos这一行
:s/centos/centos7.6/g
③针对整个文档中的所有行进行替换,只替换每一行中满足条件的第一个结果
:%s/要替换的关键词/替换后的关键词
案例:把每一行中的第一个hello关键词都替换为hi
:%s/hello/hi
④针对整个文档中的所有关键词进行替换(只要满足条件就进行替换操作)
:%s/要替换的关键词/替换后的关键词/g
案例:替换整个文档中的所有关键词
:%s/hello/hi/g
☆显示行号
基本语法:
:set nu
nu = number,行号
取消行号 => :set nonu
☆set paste模式(了解)
为什么要使用paste模式?
问题:在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加。原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer )中,Vim则把这些内容作为用户的键盘输入来处理。导致在遇到换行符的时候,如果Vim开启了自动缩进,就会默认的把上一行缩进插入到下一行的开头,最终使代码变乱。
在粘贴数据之前,输入下面命令开启paste模式 :set pasteI
粘贴完毕后,输入下面命令关闭paste模式 :set nopaste
总结
①如何进入末行模式,必须从命令模式中使用冒号进行切换
②末行模式下能做什么?保存、退出、查找、替换、显示行号以及paste模式
③保存=> :w
④退出=> :q,先保存后退出。:Wq:wq文件名称:q!
⑤查找功能=> 命令模式输入/斜杠 + 关键词(高亮显示) => :noh
⑥替换功能
:s
/要替换的关键词/替换后的关键词
:s
/要替换的关键词/替换后的关键词/g
:%s
/要替换的关键词/替换后的关键词
:%s
/要替换的关键词/替换后的关键词/g
⑦显示行号=> :set nu取消行号=> :set nonu
⑧paste模式=> 将来在粘贴代码的时候为了保存原格式=> 粘贴之前=> :set paste
6、编辑模式操作
1、编辑模式的作用
编辑模式的作用比较简单,主要是实现对文件的内容进行编辑模式
2、如何进入编辑模式、
首先你需要进入到命令模式,然后使用小写字母a或小写字母i,进入编辑模式
命令模式 + i
:insert缩写,代表在光标之前插入内容
命令模式 + a
:append缩写,代表在光标之后插入内容
3、退出编辑模式
在编辑模式中,直接按Esc
,即可从编辑模式退出到命令模式
7、可视化模式操作
1、如何进入到可视化模式
在命令模式中,直接按ctrl + v
(可视块)或V
(可视行)或v
(可视),然后按下↑ ↓ ← →
方向键来选中需要复制的区块,按下y
键进行复制(不要按下yy
),最后按下p键粘贴退出可视模式按下Esc
2、可视化模式复制操作
第一步:在命令模式下,直接按小v
,进入可视化模式
第二步:使用方向键↑ ↓← →
选择要复制的内容,然后按y
键
第三步:移动光标,停在需要粘贴的位置,按p
键进行粘贴操作
3、为配置文件添加多行注释(重点)
第一步:按Esc
退出到命令模式,按gg
切换到第1行
第二步:然后按Ctrl+v
进入到可视化区块模式(列模式)
第三步:在行首使用上下键选择需要注释的多行
第四步:按下键盘(大写)I
键,进入插入模式(Shift + i
)
第五步:输入#
号注释符
第六步:输入完成后,连续按两次Esc
即可完成添加多行注释的过程
4、为配置文件去除#多行注释(重点)
第一步:按Esc
退出到命令模式,按gg切换到第1行
第二步:然后按Ctrl+v
进入可视化区块模式(列模式)
第三步:使用键盘上的方向键的上下选中需要移除的#
号注释
第四步:直接按Delete
键即可完成删除注释的操作
8、Vim编辑器实用功能
1、代码着色
之前说过vim是vi的升级版本,其中比较典型的区别就是vim更加适合coding,因为vim比vi多一个代码着色的功能,这个功能主要是为程序员提供编程语言升的语法显示效果,如下:
第一步:定义后缀名为网页文件的代码文件
#vim index.php
第二步:编写对应的PHP代码
<?php
echo 'hello world';
?>
在Vim编辑器中,我们可以通过 :syntax on
或 :syntax off
开启或关闭代码着色功能
2、异常退出解决方案
什么是异常退出:在编辑文件之后并没有正常的去wq
(保存退出),而是遇到突然关闭终端或者断电的情况,则会出现异常退出
温馨提示:每个文件的异常文件都会有所不同,其命名规则一般为
.文件名称.swp
(以.
开头的文件一般都是隐藏文件)
解决办法:将交换文件(在编程过程中产生的临时文件)删除掉即可【在提示界面按下D键或者使用rm指令删除交换文件】
# rm .1.php.swp
3、退出Vim编辑器
回顾:在vim中,退出正在编辑的文件可以使用:q
或者:wq
除了上面的这个语法之外,vim还支持另外一个保存退出(针对内容)方法:x
①:x
在文件没有修改的情况下,表示直接退出(等价于:q
),在文件修改的情况下表示保存并退出(:wq
)
②如果文件没有被修改,但是使用w
进行退出的话,则文件的修改时间会被更新;但是如果文件没有被修改,使用x
进行退出的话,则文件修改时间不会被更新的;主要是会混淆用户对文件的修改时间的认定
五、Linux文件管理(下)
一、文本处理命令
1、查看文件的内容
①cat命令
☆输出文件内容
基本语法∶
# cat 文件名称
111
222
333
444
主要功能:正序输出文件的内容
☆合并多个文件内容
基本语法:
cat 文件名称1 文件名称2 ... > 合并后的文件名称
主要功能:把文件名称1、文件名称2、... 中的内容合并到一个文件中
②tac命令
基本语法∶
# tac 文件名称
444
333
222
111
主要功能:倒序输出文件的内容
③head命令
基本语法︰
head -n 文件名称
主要功能:查看一个文件的前n行,如果不指定n,则默认显示前10行
案例:查询linux.txt文件中的前10行
#head linux.txt
案例:查询linux.txt文件中的前3行
# head -3 linux.txt
④tail命令
基本语法:
tail -n 文件名称
主要功能:查看一个文件的后n行,如果不指定n,则默认显示后10行
案例:查询linux.txt文件中的后10行
#tail linux.txt
案例:查询linux.txt文件中的后3行
# tail -3 linux.txt
⑤tail -f命令
基本语法:
tail -f 文件名称
主要功能:动态查看一个文件内容的输出信息(主要用于将来查询日志文件的变化)
案例:查询系统的/var/log/messages文件的日志信息
tail -f /var/log/messages
退出方式可以直接按快捷键:Ctrl + C
,中断操作
⑥more命令
基本语法:
# more 文件名称
主要功能:分屏显示文件内容
特别注意:more命令在加载文件时并不是一点一点进行加载,而是打开文件时就已经把文件的全部内容加载到内存中了。如果打开文件较大,则可能会出现卡顿情况。
more命令拥有一些交互功能,可以通过快捷键进行操作这个more的阅读器。
按键 | 功能 |
---|---|
回车键 | 向下移动一行 |
d | 向下移动半页 |
空格键 | 向下移动一页 |
b | 向上移动一页,后期引入功能,早期more只能前进不能后退 |
q | 退出more |
早期more命令没有现在这么强大,其只能前进不能后退
⑦less命令(重点)
基本语法:
# less 文件名称
主要功能:分屏显示文件内容
特别注意:less命令不是加载个文件到内存,而是一点一点进行加载,相对而言,读取大文件时,效率比较高。
另外:less可以通过上下方向键
显示上下内容,退出时不会在Shell中留下刚显示的内容
,less命令的执行也会打开一个交互界面,下面是一些常用交互命令(和more类似):
按键 | 功能 |
---|---|
回车键 | 向下移动一行 |
d | 向下移动半页 |
空格键 | 向下移动一页 |
b | 向上移动一页 |
上下方向键 | 问上与向下移动,less命令特有功能键 |
less -N 文件名称 | 显示行号 |
/字符串 | 搜索指定的字符串 |
q | 退出less |
cat、more、less三者的对比:
cat | more | less | |
---|---|---|---|
作用 | 显示小文件(一屏以内) | 显示大文件(超过一屏) | 显示大文件(超过一屏) |
交互命令 | 无 | 有 | 有 |
上下键翻行 | 无 | 无 | 有 |
2、统计文件信息
①wc命令:
基本语法:
# wc [选项] 文件名称
选项说明:
-l:表示line,行数(以回车/换行符为标准)
-w:表示words,单词数,依照空格来判断单词数量
-c:表示bytes,字节数(空格、回车、换行)
案例:统计linux.txt文件的总行数
# wc -l linux.txt
案例:统计linux.txt文件中的单词数
# wc -w linux.txt
案例:统计文件的字节数(数字、字母一般1个字符=一个字节,中文和编码格式有关,如utf-8编码格式,一个汉子占用3个字节)
# wc -c linux.txt
扩展:wc [选项] 文件的名称 => 可以统计一个文件的信息,实际情况下,我们选项还可以一起使用
案例:统计一个文件的总行数、总单词数以及总字节数
# wc -wlc linux.txt
或
# wc -lwc linux.txt
或
# wc -clw linux.txt
②du命令
基本语法:
# du [选项] 统计的文件或文件夹
选项说明:
-s:summaries,只显示汇总的大小,统计文件夹的大小
-h:以较高的可读性显示文件或文件夹的大小,(KB/MB/GB/TB)
案例:显示readme.txt文件的大小(占用磁盘空间,不显示文件大小的单位)
# du readme .txt
案例∶显示readme.txt文件的大小(占用磁盘空间,显示文件大小的单位)
# du -h readme.txt
案例:统计wechat文件夹的大小
# du -sh wechat
案例:统计/etc目录的大小 => 配置文件目录
# du -sh /etc
3、文本处理
①find命令
基本语法:
# find 搜索路径 [选项]
选项说明:
-name:指定要搜索文件的名称,支持*号通配符
-type:代表搜索的文件类型,f代表普通文件,d代表文件夹=>加快检索速度
主要功能:当我们查找—个文件时,必须使用的一个命令。
案例:搜索/var目录中boot.log文件(普通文件)
# find /var -name "boot.log" -type f
案例:全盘搜索ssh目录
# find / -name "ssh" -type d
特别注意:实际工作时,尽量减少全盘检索,比较消耗资源
扩展功能:find实现模糊查询(必须结合通配符)
案例:搜索/var/log目录下的所有的以".log"结尾的文件信息
# find /var/log -name "*.log" -type f
*
:通配符,代表任意个任意字符。如*.log
代表以.log
结尾的文件,apache*
代表搜索以apache
开头的文件信息
②grep命令
基本语法:
# grep [选项] 要搜索的关键词 搜索的文件名称
选项说明:
-n:代表显示包含关键词的行号信息
单位:行
主要功能:在文件中直接找到包含指定关键词的那些行,并把这些信息高亮显示出来
案例:在initial-setup-ks.cfg文件中搜索包含关键词"network"的行
# grep network initial-setup-ks.cfg
案例:在initial-setup-ks.cfg文件中搜索包含关键词"network"的行,然后显示行号信息
# grep -n network initial-setup-ks.cfg
扩展语法︰
# grep 要搜索的关键词 多个文件的名称
主要功能:在多个文件中查找包含指定关键词的那些行,并高亮显示出来
案例:搜索/var/log目录下所有文件,找到包含关键词
# grep network /var/log/*
③echo命令
基本语法:
# echo “文本内容"
主要功能:在终端中输入指定的文本内容
案例:在终端中,输出hello world字符串
# echo "hello world"
④输出重定向
场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术
>
:标准输出重定向:覆盖输出,会覆盖掉原先的文件内容
>>
:追加重定向:追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加
案例:把echo输出的"hello world"写入到readme.txt文件中
# echo "hello world" > readme.txt
以上程序的主要功能代表把echo命令的执行结果,输出写入到readme.txt文件中,如果readme.txt文件中存在内容,则首先清空,然后在写入hello world
案例:把echo输出的"hello linux"写入到readme.txt,要求不能覆盖原来的内容
# echo "hello linux" >> readme.txt
六、Linux用户管理
学习目标
1、了解用户和用户组的概念
2、可以添加useradd和删除userdel用户,修改用户密码passwd
3、可以添加groupadd和删除groupdel用户组
4、了解管道符|的作用
5、会使用ifconfig查看IP地址
6、了解网卡配置文件的位置和常见配置项
7、知道常用的SSH客户端连接工具
8、会使用mobaxterm连接到Linux
一、Linux操作系统用户和组的概念
1、为什么需要了解用户和组
服务器要添加多账户的作用:针对不同用户分配不同的权限,不同权限可以限制用户可以访问到的系统资源提高系统的安全性帮助系统管理员对使用系统的用户进行跟踪
2、用户和组的关系
理论上Linux系统中的每个用户在创建时都应该有一个对应的用户组,这个组就称之为用户的主组。同时,有些情况下,某个用户需要临时使用某个组的权限,那这个组就称之为这个用户的附属组或附加组。
主组只能拥有一个,但是附属组或附加组可以同时拥有多个。亲爹(一个),干爹(多个)
3、用户组操作
用户组的操作无疑三件事:用户组的添加、用户组的修改以及用户组的删除操作
组:group
添加:add
修改:mod
删除:del
☆用户组的添加
基本语法∶
# groupadd [选项] 用户组的组名称
选项说明:
-g:代表用户组的组ID编号,自定义组必须从1000开始,不能重复
案例:在系统中添加一个hr的用户组
# groupadd hr
案例:在系统中添加一个test的用户组并指定定编号1100
# groupadd -g 1100 test
问题:我们刚才创建的hr以及test用户组到底添加到哪里了?
答:默认情况下,我们添加的用户组都会放在一个系统文件中,文件位置=>/etc/group
# tail -3 /etc/group
root:x:0:
xiaosage:x:1000:
☆/etc/group文件解析
由以上命令的执行结果可知,在/etc/group文件中,其一共拥有三个冒号,共四列。每列含义:
第一列:用户组的组名称
第二列:用户组的组密码,使用一个x占位符
第三列:用户组的组ID编号,1-999代表系统用户组的组编号,1000以后代表自定义组编号
CentOS6 => 1-499,500...
CentOS7 => 1-999,1000...
第四列:用户组内的用户信息(如果一个用户的附属组或附加组为这个组名,则显示在此位置)
☆用户组的修改
基本语法∶
#groupmod [选项选项的值] 原来组的组名称
选项说明:
-g:gid缩写,设置一个自定义的用户组ID数字,1000以后
-n:name缩写,设置新的用户组的名称
案例:把hr用户组更名为chxyhr
# groupmod -n chxyhr hr
案例:把test用户组的组编号由1100更改为1003
# groupmod -g 1003 test
案例:把test组的组名称更改为admin且用户组的组编号更改为1004
# groupmod -g 1004 -n admin test
☆用户组的删除
基本语法:
# groupdel 用户组名称
案例:使用groupdel删除test用户组
# groupdel test
4、用户操作
基本语法:
# useradd [选项 选项的值] 用户名称
选项说明:
-g:代表添加用户时指定用户所属组的主组,唯一的组信息(重要)
-s:代表指定用户可以使用的Shell类型,默认为/bin/bash(拥有大部分权限)还可以是/sbin/nologin,代表账号创建成功,但是不能用于登录操作系统
/bin/bash =>给人使用的(运维工程师)
/sbin/nologin =>给软件使用的
-G:代表添加用户时指定用户所属组的附属组或附加组,可以指定多个,用逗号隔开即可(了解)
-u:代表添加用户时指定的用户ID编号,CentOS6从500开始,CentOS7中从1000开始(了解)
-c:代表用户的备注信息,xiaosage:x:uid:gid:潇洒哥的账号
-d:代表用户的家目录,默认为/home/用户名称。可以使用-d进行更改
-n:取消建立以用户名称为名的群组(了解)
案例:在系统中创建一个linuxuser账号
# useradd Iinuxuser
问题:我们并没有为linuxuser账号指定所属的主组,可以成功创建账号么?
答:可以,因为在创建账号时,如果没有明确指定用户所属的主组,默认情况下,系统会自动在用户组中创建一个与用户linuxuser同名的用户组,这个组就是这个用户的主组。
问题:刚才创建的linuxuser账号能不能用于登录操作系统
答:不行,因为Linux的登录账号必须要求有密码,如果一个账号没有密码是无法登录操作系统的。
案例:在系统中创建一个账号zhangsan,指定用户所属的主组为xiaosage
第一步:查询一下xiaosage的组ID编号
# tail -5 /etc/group
xiaosage:x:1000:
第二步:根据组的编号添加用户
# useradd -g 1000 zhangsan
案例:在系统中创建一个账号lisi,指定主组为xiaosage,此用户只能被软件所使用,不能用于登录操作系统
# useradd -g 1000 -s /sbin/nologin lisi
☆用户信息查询
基本语法∶
# id 用户名称
主要功能:查询某个指定的用户信息
案例:查询linuxuser用户的信息
# id linuxuser
uid=1002(linuxuser) gid=1005( linuxuser ) groups=1005(linuxuser)
uid:用户编号
gid:用户所属的主组的编号
groups:用户的主组以及附属组信息,第一个是主组,后面的都是附属组或附加组信息
☆与用户相关的用户文件
# vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
1、用户名称
2、用户密码,真实密码在/etc/shadow下(1-用户名,2-加密密码)
3、用户ID编号
4、用户主组ID编号
5、注释信息,useradd -c "备注信息" 用户名称
6、用户家目录,默认下/home/用户名称
7、用户可以使用的Shell类型,useradd -s /bin/bash或/sbin/nologin 用户名称
☆用户修改操作
# usermod [选项 选项的值] 用户名称
选项说明:
-g:修改用户所属主组编号
-l:login name,修改用户名称
-s:修改用户可以使用的Shell类型
-G:修改用户附属组的编号信息
-d:修改用户的家目录
-c:修改用户的备注信息
案例:修改zhangsan账号信息,更名为zs
# usermod -l zs zhangsan
案例:修改wangwu账号信息,把用户的主组编号改为1000(xiaosage)
# usermod -g 1000 wangwu
案例:禁止linuxuser账号登录Linux操作系统
# usermod -s /sbin/nologin linuxuser
案例:禁止linux用户的登录操作
Linux系统除了默认的图形化界面,还有6个隐藏的字符界面,按 Ctrl + Alt + F1~F6
有些电脑开启Fn功能键,上述方法不生效,则按 Ctrl + Alt + Fn + F1~F6
# usermod -L linux
案例:解锁linux用户
# usermod -U linux
☆passwd命令
# passwd 用户名称
主要功能:为某个用户添加或修改密码,可以给自己,也可以给别人设置
案例:修改自己的密码
[root@wangluo ~]# passwd
案例:案例:为linux账号添加一个密码,密码123456
# passwd linux
在Linux系统中,如果账号没有密码,则无法登录操作系统
☆wheel组(了解)
Linux系统中,理论上只有在wheel组中的普通用户,才可以通过su命令切换到root账户,默认认为所有的普通用户都能切换到root,只要知道root密码。所以说,默认此配置不生效。(生效方法可以自行了解)
☆用户删除操作
# userdel [选项] 用户名称
选项说明:
-r:删除用户的同时,删除用户的家(默认不删除)
案例:删除用户但不删除用户的家目录
# userdel zs
案例:删除用户同时删除用户的家目录
# userdel -r lisi
删除账号流程:①删除账号②确认是否删除用户家③删除用户主组(没有其他用户)
扩展:删除某个账号时,系统提示当前账号正在被某个进程使用
解决方案:
第一种方案:找到登录的这个用户,直接将其注销
第二种方案:简单粗暴,kill对应用户的全部进程
# kill [-9] 进程的ID编号
主要功能:用于结束某个进程的继续运行
选项说明:-9表示强制结束
kill对应linux用户的全部进程
# ps -ef |grep linux
ps:查看进程
-ef:查看系统所有进程
|:管道命令
grep linux:搜索包含了linux关键词的所有进程
二、管道(重点)
1、管道符
"|",竖线
作用:管道是一种通信机制,通常用于进程间的通信,把前一个命令原本要输出到屏幕的信息(stdout)当作是后一个命令的标准输入(stdin)
0:标准输入,程序命令需要外部的某些程序传递相应的参数,才能正常运行
1:标准输出,程序或命令正确的执行结果
2:标准错误,程序或命令错误的执行结果
2、过滤(筛选功能)功能
基本语法:
# 前一个命令 | 后一个命令
案例:获取/根目录下包含关键字"y"的文件信息
# ls / | grep y [参数]
解析:
|:作用,把ls /的正确执行结果作为参数传递给grep命令
案例:检索系统中的已安装文件,只筛选mariadb信息
# rpm -qa
-qa:query all,查询所有
# rpm -qa | grep mariadb
案例:在系统进程中进行查找,查找与xiaosage相关的进程信息
# ps -ef | grep xiaosage
查询系统中所有正在运行的进程
3、特殊功能
通过管道的操作方法来实现less的等价效果(了解)
如less xxx.txt
可以用cat xxx.txt | less
替换
4、统计功能
案例:统计/根目录下一共有多少个文件
# ls / | wc -l
统计/etc/passwd下用户数量
cat /etc/passwd | wc -l
5、xargs命令扩展
由于Linux系统中很多命令不支持 | 管道来传递参数,而日常工作中又有这个必要,所有需要使用xargs命令
案例:搜索/etc目录下的所有"*conf"结尾的文件信息,然后以详细列表形式展示
# find /etc -name "*.conf" | ls -l
解决方案:在ls命令之前添加一个xargs命令,这样ls命令就支持管道了,可以用于接收前一条命令的执行结果
# find /etc -name "*.conf" | xargs ls -l
三、Linux网络管理
1、获取计算机的网络信息
第一步:连接网络
第二步:使用ifconfig命令,获取计算机的网络信息
# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.237.131 netmask 255.255.255.0 broadcast 192.168.237.255
inet6 fe80::dfef:fbcf:83f6:aa7b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a1:05:fe txqueuelen 1000 (Ethernet)
RX packets 785 bytes 89563 (87.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 141 bytes 17388 (16.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
解析:inet 192.168.237.131 netmask 255.255.255.0 broadcast 192.168.237.255
inet 192.168.237.131:代表ens33网卡的IP地址,将来远程连接就是使用这个IP
netmask 255.255.255.0:子网掩码,一般为255.255.255.0
broadcast 192.168.237.255:广播地址
ens33:是默认的网卡,我们获取的IP也要从这个网卡中获取
lo:表示回环网卡,只有一个固定的IP地址,127.0.0.1代表本机
virbr0:代表网络接口,因为使用的是vmware虚拟机安装CentOS,所以其会产生virbr0虚拟网络接口
2、与网卡相关的配置文件
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="dhcp"
NAME="ens33"
UUID="af9a60ac-84f8-4506-8d35-f3d1a2ec488e"
DEVICE="ens33"
ONBOOT="yes"
参数解析:
TYPE:网络类型,Ethernet以太网
BOOTPROTO:IP的获取方式,dhcp代表自动获取,static/none代表手工设置
NAME:网卡的名称(名字),ens33
UUID:代表网卡的UUID编号(必须是唯一的)
DEVICE:设备名称
ONBOOT:网卡是否开机自启
3、查询计算机的网络状态
j基本语法:
# systemctl status network
systemctl = system + control = 系统控制
主要功能:查询计算机网络的状态,网络是否正常连接
使用systemctl stop/start/restart network可以实现对网卡的停止/启动/重启
四、Linux远程连接与文件传输
1、SSH协议
网络协议,用于计算机之间的加密登录
2、sshd服务
使用systemctl status sshd可以查看进程/安装状态,sshd服务启动后占用22号端口
3、使用MX软件连接Linux服务器
七、Linux的权限管理操作
学习目标
1、知道为什么要设置权限
2、linux中的权限类别和身份类别
3、掌握文件和文件夹权限的设置方法(字母和数字)
4、掌握文件和文件夹的属主属组设置方法
5、了解设置位与粘滞位
6、知道为什么要使用ACL
7、掌握ACL的使用方法
一、权限概述
1、什么是权限
可读(r)、可写(w)、可执行(x)
一般给目录读权限时,也会给其执行权限,属于“套餐”组合
2、为什么要设置权限
1)服务器中的数据价值
2)员工的工作职责和分工不同
3)应对自外部的攻击(挂马)
4)内部管理的需要
3、Linux用户身份类别
read(读)
write(写)
execute(执行)
三大用户对文件读、写,执行的权限。